@samitouri / QOS-React-2 / commits / f72397b5c1

[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 }