InferTypes traverses function expressions
Joe Savona committed
Jun 8, 2023 at 14:02 UTC
5775102b852ea53c53a0d1bc3349c85a735f246e
3 files changed
+7
-5
compiler/forget/packages/babel-plugin-react-forget/src/Inference/AnalyseFunctions.ts
-2
@@ -16,7 +16,6 @@ import {
16
Place,
17
ReactiveScopeDependency,
18
} from "../HIR";
19
-import { inferTypes } from "../TypeInference";
19
import { logHIRFunction } from "../Utils/logger";
20
import { inferMutableRanges } from "./InferMutableRanges";
21
import inferReferenceEffects from "./InferReferenceEffects";
@@ -87,7 +86,6 @@ export default function analyseFunctions(func: HIRFunction): void {
86
}
87
88
function lower(func: HIRFunction): void {
90
- inferTypes(func);
89
analyseFunctions(func);
90
inferReferenceEffects(func, { isFunctionExpression: true });
91
inferMutableRanges(func);
compiler/forget/packages/babel-plugin-react-forget/src/TypeInference/InferTypes.ts
+6
-2
@@ -45,7 +45,7 @@ function isPrimitiveBinaryOp(op: t.BinaryExpression["operator"]): boolean {
45
}
46
}
47
48
-export default function (func: HIRFunction): void {
48
+export function inferTypes(func: HIRFunction): void {
49
const unifier = new Unifier(func.env);
50
for (const e of generate(func)) {
51
unifier.unify(e.left, e.right);
@@ -244,6 +244,11 @@ function* generateInstructionTypes(
244
break;
245
}
246
247
+ case "FunctionExpression": {
248
+ inferTypes(value.loweredFunc);
249
+ break;
250
+ }
251
+
252
case "DeclareLocal":
253
case "DeclareContext":
254
case "NewExpression":
@@ -253,7 +258,6 @@ function* generateInstructionTypes(
258
case "PropertyStore":
259
case "ComputedStore":
260
case "ComputedLoad":
256
- case "FunctionExpression":
261
case "TaggedTemplateExpression":
262
case "Await":
263
case "NextIterableOf":
compiler/forget/packages/babel-plugin-react-forget/src/TypeInference/index.ts
+1
-1
@@ -5,4 +5,4 @@
5
* LICENSE file in the root directory of this source tree.
6
*/
7
8
-export { default as inferTypes } from "./InferTypes";
8
+export { inferTypes } from "./InferTypes";