[typer] Infer JSXText as a Primitive
Sathya Gunasekaran committed
Dec 21, 2022 at 21:13 UTC
f72397b5c13174d705341d33d5fb64a52a9b4d64
5 files changed
+47
-46
compiler/forget/src/HIR/InferTypes.ts
+1
@@ -95,6 +95,7 @@ function generateTypeEquation(
95
const left = assignType(lvalue?.place);
96
97
switch (value.kind) {
98
+ case "JSXText":
99
case "Primitive": {
100
add(left, { kind: "Primitive" });
101
break;
compiler/forget/src/__tests__/fixtures/hir/component.expect.md
+12
-12
@@ -94,13 +94,13 @@ bb2:
94
predecessor blocks: bb6 bb1
95
[33] Const mutate count$66 = read renderedItems$32_@0.length
96
[34] Const mutate $67:TPrimitive = "div"
97
- [35] Const mutate $68 = "\n "
97
+ [35] Const mutate $68:TPrimitive = "\n "
98
[36] Const mutate $69:TPrimitive = "h1"
99
- [37] Const mutate $70 = " Items"
100
- [38] Const mutate t7$71_@5 = JSX <read $69:TPrimitive>{freeze count$66}{read $70}</read $69:TPrimitive>
101
- [39] Const mutate $72 = "\n "
102
- [40] Const mutate $73 = "\n "
103
- [41] Const mutate t10$74_@6 = JSX <read $67:TPrimitive>{read $68}{read t7$71_@5}{read $72}{freeze renderedItems$32_@0}{read $73}</read $67:TPrimitive>
99
+ [37] Const mutate $70:TPrimitive = " Items"
100
+ [38] Const mutate t7$71_@5 = JSX <read $69:TPrimitive>{freeze count$66}{read $70:TPrimitive}</read $69:TPrimitive>
101
+ [39] Const mutate $72:TPrimitive = "\n "
102
+ [40] Const mutate $73:TPrimitive = "\n "
103
+ [41] Const mutate t10$74_@6 = JSX <read $67:TPrimitive>{read $68:TPrimitive}{read t7$71_@5}{read $72:TPrimitive}{freeze renderedItems$32_@0}{read $73:TPrimitive}</read $67:TPrimitive>
104
[42] Return read t10$74_@6
105
```
106
@@ -155,16 +155,16 @@ function Component(
155
}
156
[33] Const mutate count$66 = read renderedItems$32_@0.length
157
[34] Const mutate $67:TPrimitive = "div"
158
- [35] Const mutate $68 = "\n "
158
+ [35] Const mutate $68:TPrimitive = "\n "
159
[36] Const mutate $69:TPrimitive = "h1"
160
- [37] Const mutate $70 = " Items"
160
+ [37] Const mutate $70:TPrimitive = " Items"
161
scope @5 [38:39] deps=[freeze count$66] out=[$71_@5] {
162
- [38] Const mutate $71_@5 = JSX <read $69:TPrimitive>{freeze count$66}{read $70}</read $69:TPrimitive>
162
+ [38] Const mutate $71_@5 = JSX <read $69:TPrimitive>{freeze count$66}{read $70:TPrimitive}</read $69:TPrimitive>
163
}
164
- [39] Const mutate $72 = "\n "
165
- [40] Const mutate $73 = "\n "
164
+ [39] Const mutate $72:TPrimitive = "\n "
165
+ [40] Const mutate $73:TPrimitive = "\n "
166
scope @6 [41:42] deps=[read $71_@5, freeze renderedItems$32_@0] out=[$74_@6] {
167
- [41] Const mutate $74_@6 = JSX <read $67:TPrimitive>{read $68}{read $71_@5}{read $72}{freeze renderedItems$32_@0}{read $73}</read $67:TPrimitive>
167
+ [41] Const mutate $74_@6 = JSX <read $67:TPrimitive>{read $68:TPrimitive}{read $71_@5}{read $72:TPrimitive}{freeze renderedItems$32_@0}{read $73:TPrimitive}</read $67:TPrimitive>
168
}
169
return read $74_@6
170
}
compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md
+8
-8
@@ -72,10 +72,10 @@ bb0:
72
[1] Const mutate x$11_@0 = Array []
73
[2] Const mutate y$12_@1 = Call read useFreeze$3:TFunction(freeze x$11_@0)
74
[3] Call mutate foo$5:TFunction(read y$12_@1, read x$11_@0)
75
- [4] Const mutate $13 = "\n "
76
- [5] Const mutate $14 = "\n "
77
- [6] Const mutate $15 = "\n "
78
- [7] Const mutate t5$16_@2 = JSX <read Component$0>{read $13}{read x$11_@0}{read $14}{read y$12_@1}{read $15}</read Component$0>
75
+ [4] Const mutate $13:TPrimitive = "\n "
76
+ [5] Const mutate $14:TPrimitive = "\n "
77
+ [6] Const mutate $15:TPrimitive = "\n "
78
+ [7] Const mutate t5$16_@2 = JSX <read Component$0>{read $13:TPrimitive}{read x$11_@0}{read $14:TPrimitive}{read y$12_@1}{read $15:TPrimitive}</read Component$0>
79
[8] Return read t5$16_@2
80
```
81
@@ -92,11 +92,11 @@ function Component(
92
[2] Const mutate y$12_@1 = Call read useFreeze$3:TFunction(freeze x$11_@0)
93
}
94
[3] Call mutate foo$5:TFunction(read y$12_@1, read x$11_@0)
95
- [4] Const mutate $13 = "\n "
96
- [5] Const mutate $14 = "\n "
97
- [6] Const mutate $15 = "\n "
95
+ [4] Const mutate $13:TPrimitive = "\n "
96
+ [5] Const mutate $14:TPrimitive = "\n "
97
+ [6] Const mutate $15:TPrimitive = "\n "
98
scope @2 [7:8] deps=[read x$11_@0, read y$12_@1] out=[$16_@2] {
99
- [7] Const mutate $16_@2 = JSX <read Component$0>{read $13}{read x$11_@0}{read $14}{read y$12_@1}{read $15}</read Component$0>
99
+ [7] Const mutate $16_@2 = JSX <read Component$0>{read $13:TPrimitive}{read x$11_@0}{read $14:TPrimitive}{read y$12_@1}{read $15:TPrimitive}</read Component$0>
100
}
101
return read $16_@2
102
}
compiler/forget/src/__tests__/fixtures/hir/jsx-fragment.expect.md
+18
-18
@@ -19,17 +19,17 @@ function Foo(props) {
19
20
```
21
bb0:
22
- [1] Const mutate $14 = "\n Hello "
22
+ [1] Const mutate $14:TPrimitive = "\n Hello "
23
[2] Const mutate $15:TPrimitive = " "
24
- [3] Const mutate $16 = "\n "
24
+ [3] Const mutate $16:TPrimitive = "\n "
25
[4] Const mutate $17:TPrimitive = "div"
26
- [5] Const mutate $18 = "\n "
27
- [6] Const mutate $19 = "Text"
28
- [7] Const mutate t0$20_@0 = JsxFragment [read $19]
29
- [8] Const mutate $21 = "\n "
30
- [9] Const mutate t2$22_@1 = JSX <read $17:TPrimitive>{read $18}{read t0$20_@0}{read $21}</read $17:TPrimitive>
31
- [10] Const mutate $23 = "\n "
32
- [11] Const mutate t5$24_@2 = JsxFragment [read $14, read props$13.greeting, read $15:TPrimitive, read $16, read t2$22_@1, read $23]
26
+ [5] Const mutate $18:TPrimitive = "\n "
27
+ [6] Const mutate $19:TPrimitive = "Text"
28
+ [7] Const mutate t0$20_@0 = JsxFragment [read $19:TPrimitive]
29
+ [8] Const mutate $21:TPrimitive = "\n "
30
+ [9] Const mutate t2$22_@1 = JSX <read $17:TPrimitive>{read $18:TPrimitive}{read t0$20_@0}{read $21:TPrimitive}</read $17:TPrimitive>
31
+ [10] Const mutate $23:TPrimitive = "\n "
32
+ [11] Const mutate t5$24_@2 = JsxFragment [read $14:TPrimitive, read props$13.greeting, read $15:TPrimitive, read $16:TPrimitive, read t2$22_@1, read $23:TPrimitive]
33
[12] Return read t5$24_@2
34
```
35
@@ -39,22 +39,22 @@ bb0:
39
function Foo(
40
props,
41
) {
42
- [1] Const mutate $14 = "\n Hello "
42
+ [1] Const mutate $14:TPrimitive = "\n Hello "
43
[2] Const mutate $15:TPrimitive = " "
44
- [3] Const mutate $16 = "\n "
44
+ [3] Const mutate $16:TPrimitive = "\n "
45
[4] Const mutate $17:TPrimitive = "div"
46
- [5] Const mutate $18 = "\n "
47
- [6] Const mutate $19 = "Text"
46
+ [5] Const mutate $18:TPrimitive = "\n "
47
+ [6] Const mutate $19:TPrimitive = "Text"
48
scope @0 [7:8] deps=[] out=[$20_@0] {
49
- [7] Const mutate $20_@0 = JsxFragment [read $19]
49
+ [7] Const mutate $20_@0 = JsxFragment [read $19:TPrimitive]
50
}
51
- [8] Const mutate $21 = "\n "
51
+ [8] Const mutate $21:TPrimitive = "\n "
52
scope @1 [9:10] deps=[read $20_@0] out=[$22_@1] {
53
- [9] Const mutate $22_@1 = JSX <read $17:TPrimitive>{read $18}{read $20_@0}{read $21}</read $17:TPrimitive>
53
+ [9] Const mutate $22_@1 = JSX <read $17:TPrimitive>{read $18:TPrimitive}{read $20_@0}{read $21:TPrimitive}</read $17:TPrimitive>
54
}
55
- [10] Const mutate $23 = "\n "
55
+ [10] Const mutate $23:TPrimitive = "\n "
56
scope @2 [11:12] deps=[read props$13.greeting, read $22_@1] out=[$24_@2] {
57
- [11] Const mutate $24_@2 = JsxFragment [read $14, read props$13.greeting, read $15:TPrimitive, read $16, read $22_@1, read $23]
57
+ [11] Const mutate $24_@2 = JsxFragment [read $14:TPrimitive, read props$13.greeting, read $15:TPrimitive, read $16:TPrimitive, read $22_@1, read $23:TPrimitive]
58
}
59
return read $24_@2
60
}
compiler/forget/src/__tests__/fixtures/hir/reassignment-separate-scopes.expect.md
+8
-8
@@ -65,10 +65,10 @@ bb4:
65
bb3:
66
predecessor blocks: bb5 bb4
67
[15] Const mutate $25:TPrimitive = "div"
68
- [16] Const mutate $26 = "\n "
69
- [17] Const mutate $27 = "\n "
70
- [18] Const mutate $28 = "\n "
71
- [19] Const mutate t13$31_@5 = JSX <read $25:TPrimitive>{read $26}{read y$19_@1}{read $27}{freeze x$30_@2}{read $28}</read $25:TPrimitive>
68
+ [16] Const mutate $26:TPrimitive = "\n "
69
+ [17] Const mutate $27:TPrimitive = "\n "
70
+ [18] Const mutate $28:TPrimitive = "\n "
71
+ [19] Const mutate t13$31_@5 = JSX <read $25:TPrimitive>{read $26:TPrimitive}{read y$19_@1}{read $27:TPrimitive}{freeze x$30_@2}{read $28:TPrimitive}</read $25:TPrimitive>
72
[20] Return read t13$31_@5
73
```
74
@@ -112,11 +112,11 @@ function foo(
112
}
113
}
114
[15] Const mutate $25:TPrimitive = "div"
115
- [16] Const mutate $26 = "\n "
116
- [17] Const mutate $27 = "\n "
117
- [18] Const mutate $28 = "\n "
115
+ [16] Const mutate $26:TPrimitive = "\n "
116
+ [17] Const mutate $27:TPrimitive = "\n "
117
+ [18] Const mutate $28:TPrimitive = "\n "
118
scope @5 [19:20] deps=[read y$19_@1, freeze x$30_@2] out=[$31_@5] {
119
- [19] Const mutate $31_@5 = JSX <read $25:TPrimitive>{read $26}{read y$19_@1}{read $27}{freeze x$30_@2}{read $28}</read $25:TPrimitive>
119
+ [19] Const mutate $31_@5 = JSX <read $25:TPrimitive>{read $26:TPrimitive}{read y$19_@1}{read $27:TPrimitive}{freeze x$30_@2}{read $28:TPrimitive}</read $25:TPrimitive>
120
}
121
return read $31_@5
122
}