From f72397b5c13174d705341d33d5fb64a52a9b4d64 Mon Sep 17 00:00:00 2001 From: Sathya Gunasekaran Date: Wed, 21 Dec 2022 21:13:58 +0000 Subject: [PATCH] [typer] Infer JSXText as a Primitive --- compiler/forget/src/HIR/InferTypes.ts | 1 + .../fixtures/hir/component.expect.md | 24 ++++++------- .../fixtures/hir/hook-call.expect.md | 16 ++++----- .../fixtures/hir/jsx-fragment.expect.md | 36 +++++++++---------- .../reassignment-separate-scopes.expect.md | 16 ++++----- 5 files changed, 47 insertions(+), 46 deletions(-) diff --git a/compiler/forget/src/HIR/InferTypes.ts b/compiler/forget/src/HIR/InferTypes.ts index 63fc5f04a9..0f33e9401e 100644 --- a/compiler/forget/src/HIR/InferTypes.ts +++ b/compiler/forget/src/HIR/InferTypes.ts @@ -95,6 +95,7 @@ function generateTypeEquation( const left = assignType(lvalue?.place); switch (value.kind) { + case "JSXText": case "Primitive": { add(left, { kind: "Primitive" }); break; diff --git a/compiler/forget/src/__tests__/fixtures/hir/component.expect.md b/compiler/forget/src/__tests__/fixtures/hir/component.expect.md index ea335f62cc..ea3bc8646a 100644 --- a/compiler/forget/src/__tests__/fixtures/hir/component.expect.md +++ b/compiler/forget/src/__tests__/fixtures/hir/component.expect.md @@ -94,13 +94,13 @@ bb2: predecessor blocks: bb6 bb1 [33] Const mutate count$66 = read renderedItems$32_@0.length [34] Const mutate $67:TPrimitive = "div" - [35] Const mutate $68 = "\n " + [35] Const mutate $68:TPrimitive = "\n " [36] Const mutate $69:TPrimitive = "h1" - [37] Const mutate $70 = " Items" - [38] Const mutate t7$71_@5 = JSX {freeze count$66}{read $70} - [39] Const mutate $72 = "\n " - [40] Const mutate $73 = "\n " - [41] Const mutate t10$74_@6 = JSX {read $68}{read t7$71_@5}{read $72}{freeze renderedItems$32_@0}{read $73} + [37] Const mutate $70:TPrimitive = " Items" + [38] Const mutate t7$71_@5 = JSX {freeze count$66}{read $70:TPrimitive} + [39] Const mutate $72:TPrimitive = "\n " + [40] Const mutate $73:TPrimitive = "\n " + [41] Const mutate t10$74_@6 = JSX {read $68:TPrimitive}{read t7$71_@5}{read $72:TPrimitive}{freeze renderedItems$32_@0}{read $73:TPrimitive} [42] Return read t10$74_@6 ``` @@ -155,16 +155,16 @@ function Component( } [33] Const mutate count$66 = read renderedItems$32_@0.length [34] Const mutate $67:TPrimitive = "div" - [35] Const mutate $68 = "\n " + [35] Const mutate $68:TPrimitive = "\n " [36] Const mutate $69:TPrimitive = "h1" - [37] Const mutate $70 = " Items" + [37] Const mutate $70:TPrimitive = " Items" scope @5 [38:39] deps=[freeze count$66] out=[$71_@5] { - [38] Const mutate $71_@5 = JSX {freeze count$66}{read $70} + [38] Const mutate $71_@5 = JSX {freeze count$66}{read $70:TPrimitive} } - [39] Const mutate $72 = "\n " - [40] Const mutate $73 = "\n " + [39] Const mutate $72:TPrimitive = "\n " + [40] Const mutate $73:TPrimitive = "\n " scope @6 [41:42] deps=[read $71_@5, freeze renderedItems$32_@0] out=[$74_@6] { - [41] Const mutate $74_@6 = JSX {read $68}{read $71_@5}{read $72}{freeze renderedItems$32_@0}{read $73} + [41] Const mutate $74_@6 = JSX {read $68:TPrimitive}{read $71_@5}{read $72:TPrimitive}{freeze renderedItems$32_@0}{read $73:TPrimitive} } return read $74_@6 } diff --git a/compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md b/compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md index 5267a5bc93..d47421d761 100644 --- a/compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md +++ b/compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md @@ -72,10 +72,10 @@ bb0: [1] Const mutate x$11_@0 = Array [] [2] Const mutate y$12_@1 = Call read useFreeze$3:TFunction(freeze x$11_@0) [3] Call mutate foo$5:TFunction(read y$12_@1, read x$11_@0) - [4] Const mutate $13 = "\n " - [5] Const mutate $14 = "\n " - [6] Const mutate $15 = "\n " - [7] Const mutate t5$16_@2 = JSX {read $13}{read x$11_@0}{read $14}{read y$12_@1}{read $15} + [4] Const mutate $13:TPrimitive = "\n " + [5] Const mutate $14:TPrimitive = "\n " + [6] Const mutate $15:TPrimitive = "\n " + [7] Const mutate t5$16_@2 = JSX {read $13:TPrimitive}{read x$11_@0}{read $14:TPrimitive}{read y$12_@1}{read $15:TPrimitive} [8] Return read t5$16_@2 ``` @@ -92,11 +92,11 @@ function Component( [2] Const mutate y$12_@1 = Call read useFreeze$3:TFunction(freeze x$11_@0) } [3] Call mutate foo$5:TFunction(read y$12_@1, read x$11_@0) - [4] Const mutate $13 = "\n " - [5] Const mutate $14 = "\n " - [6] Const mutate $15 = "\n " + [4] Const mutate $13:TPrimitive = "\n " + [5] Const mutate $14:TPrimitive = "\n " + [6] Const mutate $15:TPrimitive = "\n " scope @2 [7:8] deps=[read x$11_@0, read y$12_@1] out=[$16_@2] { - [7] Const mutate $16_@2 = JSX {read $13}{read x$11_@0}{read $14}{read y$12_@1}{read $15} + [7] Const mutate $16_@2 = JSX {read $13:TPrimitive}{read x$11_@0}{read $14:TPrimitive}{read y$12_@1}{read $15:TPrimitive} } return read $16_@2 } diff --git a/compiler/forget/src/__tests__/fixtures/hir/jsx-fragment.expect.md b/compiler/forget/src/__tests__/fixtures/hir/jsx-fragment.expect.md index f8b024c0ee..39d7756bf0 100644 --- a/compiler/forget/src/__tests__/fixtures/hir/jsx-fragment.expect.md +++ b/compiler/forget/src/__tests__/fixtures/hir/jsx-fragment.expect.md @@ -19,17 +19,17 @@ function Foo(props) { ``` bb0: - [1] Const mutate $14 = "\n Hello " + [1] Const mutate $14:TPrimitive = "\n Hello " [2] Const mutate $15:TPrimitive = " " - [3] Const mutate $16 = "\n " + [3] Const mutate $16:TPrimitive = "\n " [4] Const mutate $17:TPrimitive = "div" - [5] Const mutate $18 = "\n " - [6] Const mutate $19 = "Text" - [7] Const mutate t0$20_@0 = JsxFragment [read $19] - [8] Const mutate $21 = "\n " - [9] Const mutate t2$22_@1 = JSX {read $18}{read t0$20_@0}{read $21} - [10] Const mutate $23 = "\n " - [11] Const mutate t5$24_@2 = JsxFragment [read $14, read props$13.greeting, read $15:TPrimitive, read $16, read t2$22_@1, read $23] + [5] Const mutate $18:TPrimitive = "\n " + [6] Const mutate $19:TPrimitive = "Text" + [7] Const mutate t0$20_@0 = JsxFragment [read $19:TPrimitive] + [8] Const mutate $21:TPrimitive = "\n " + [9] Const mutate t2$22_@1 = JSX {read $18:TPrimitive}{read t0$20_@0}{read $21:TPrimitive} + [10] Const mutate $23:TPrimitive = "\n " + [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] [12] Return read t5$24_@2 ``` @@ -39,22 +39,22 @@ bb0: function Foo( props, ) { - [1] Const mutate $14 = "\n Hello " + [1] Const mutate $14:TPrimitive = "\n Hello " [2] Const mutate $15:TPrimitive = " " - [3] Const mutate $16 = "\n " + [3] Const mutate $16:TPrimitive = "\n " [4] Const mutate $17:TPrimitive = "div" - [5] Const mutate $18 = "\n " - [6] Const mutate $19 = "Text" + [5] Const mutate $18:TPrimitive = "\n " + [6] Const mutate $19:TPrimitive = "Text" scope @0 [7:8] deps=[] out=[$20_@0] { - [7] Const mutate $20_@0 = JsxFragment [read $19] + [7] Const mutate $20_@0 = JsxFragment [read $19:TPrimitive] } - [8] Const mutate $21 = "\n " + [8] Const mutate $21:TPrimitive = "\n " scope @1 [9:10] deps=[read $20_@0] out=[$22_@1] { - [9] Const mutate $22_@1 = JSX {read $18}{read $20_@0}{read $21} + [9] Const mutate $22_@1 = JSX {read $18:TPrimitive}{read $20_@0}{read $21:TPrimitive} } - [10] Const mutate $23 = "\n " + [10] Const mutate $23:TPrimitive = "\n " scope @2 [11:12] deps=[read props$13.greeting, read $22_@1] out=[$24_@2] { - [11] Const mutate $24_@2 = JsxFragment [read $14, read props$13.greeting, read $15:TPrimitive, read $16, read $22_@1, read $23] + [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] } return read $24_@2 } diff --git a/compiler/forget/src/__tests__/fixtures/hir/reassignment-separate-scopes.expect.md b/compiler/forget/src/__tests__/fixtures/hir/reassignment-separate-scopes.expect.md index 99f21381ad..efd857524d 100644 --- a/compiler/forget/src/__tests__/fixtures/hir/reassignment-separate-scopes.expect.md +++ b/compiler/forget/src/__tests__/fixtures/hir/reassignment-separate-scopes.expect.md @@ -65,10 +65,10 @@ bb4: bb3: predecessor blocks: bb5 bb4 [15] Const mutate $25:TPrimitive = "div" - [16] Const mutate $26 = "\n " - [17] Const mutate $27 = "\n " - [18] Const mutate $28 = "\n " - [19] Const mutate t13$31_@5 = JSX {read $26}{read y$19_@1}{read $27}{freeze x$30_@2}{read $28} + [16] Const mutate $26:TPrimitive = "\n " + [17] Const mutate $27:TPrimitive = "\n " + [18] Const mutate $28:TPrimitive = "\n " + [19] Const mutate t13$31_@5 = JSX {read $26:TPrimitive}{read y$19_@1}{read $27:TPrimitive}{freeze x$30_@2}{read $28:TPrimitive} [20] Return read t13$31_@5 ``` @@ -112,11 +112,11 @@ function foo( } } [15] Const mutate $25:TPrimitive = "div" - [16] Const mutate $26 = "\n " - [17] Const mutate $27 = "\n " - [18] Const mutate $28 = "\n " + [16] Const mutate $26:TPrimitive = "\n " + [17] Const mutate $27:TPrimitive = "\n " + [18] Const mutate $28:TPrimitive = "\n " scope @5 [19:20] deps=[read y$19_@1, freeze x$30_@2] out=[$31_@5] { - [19] Const mutate $31_@5 = JSX {read $26}{read y$19_@1}{read $27}{freeze x$30_@2}{read $28} + [19] Const mutate $31_@5 = JSX {read $26:TPrimitive}{read y$19_@1}{read $27:TPrimitive}{freeze x$30_@2}{read $28:TPrimitive} } return read $31_@5 }