Prep for destructuring, factor out lowerIdentifier()
Joe Savona committed
Dec 20, 2022 at 16:57 UTC
836211a549e4928645eac0fb4261509f8947dff3
1 file changed
+28
-20
compiler/forget/src/HIR/BuildHIR.ts
+28
-20
@@ -723,7 +723,7 @@ function lowerExpression(
723
switch (exprNode.type) {
724
case "Identifier": {
725
const expr = exprPath as NodePath<t.Identifier>;
726
- return lowerLVal(builder, expr);
726
+ return lowerIdentifier(builder, expr);
727
}
728
case "NullLiteral": {
729
return {
@@ -1285,30 +1285,38 @@ function lowerExpressionToVoid(
1285
});
1286
}
1287
1288
+function lowerIdentifier(
1289
+ builder: HIRBuilder,
1290
+ exprPath: NodePath<t.Identifier>
1291
+): Place {
1292
+ const exprNode = exprPath.node;
1293
+ const exprLoc = exprNode.loc ?? GeneratedSource;
1294
+ const binding =
1295
+ exprPath.scope.getBindingIdentifier(exprNode.name) ??
1296
+ getOrAddGlobal(exprNode.name);
1297
+ invariant(
1298
+ binding != null,
1299
+ `Expected to find a binding for variable '%s'`,
1300
+ exprNode.name
1301
+ );
1302
+ const identifier = builder.resolveIdentifier(binding);
1303
+ const place: Place = {
1304
+ kind: "Identifier",
1305
+ identifier: identifier,
1306
+ memberPath: null,
1307
+ effect: Effect.Unknown,
1308
+ loc: exprLoc,
1309
+ };
1310
+ return place;
1311
+}
1312
+
1313
function lowerLVal(builder: HIRBuilder, exprPath: NodePath<t.LVal>): Place {
1314
const exprNode = exprPath.node;
1315
const exprLoc = exprNode.loc ?? GeneratedSource;
1316
switch (exprNode.type) {
1317
case "Identifier": {
1293
- // const expr = exprPath as NodePath<t.Identifier>;
1294
- // const name: string = expr.get("name");
1295
- const binding =
1296
- exprPath.scope.getBindingIdentifier(exprNode.name) ??
1297
- getOrAddGlobal(exprNode.name);
1298
- invariant(
1299
- binding != null,
1300
- `Expected to find a binding for variable '%s'`,
1301
- exprNode.name
1302
- );
1303
- const identifier = builder.resolveIdentifier(binding);
1304
- const place: Place = {
1305
- kind: "Identifier",
1306
- identifier: identifier,
1307
- memberPath: null,
1308
- effect: Effect.Unknown,
1309
- loc: exprLoc,
1310
- };
1311
- return place;
1318
+ const expr = exprPath as NodePath<t.Identifier>;
1319
+ return lowerIdentifier(builder, expr);
1320
}
1321
case "MemberExpression": {
1322
const expr = exprPath as NodePath<t.MemberExpression>;