aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/stackir
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-10-21 13:44:25 +0100
committerMichael Williamson <mike@zwobble.org>2023-10-21 13:44:25 +0100
commit317f6fa18dfb5dd0020a086d2815c538fcb558ff (patch)
tree8b6907bfccf8866a3b2f7987aa05b72ce56ffda8 /src/main/java/org/shedlang/compiler/stackir
parent2759cad35ee775aa655f06598172603797571a9e (diff)
Generate stack IR for imports
Diffstat (limited to 'src/main/java/org/shedlang/compiler/stackir')
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/StackCompiler.java18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
index 5746fa34..7a9fc502 100644
--- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
+++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
@@ -246,7 +246,7 @@ public class StackCompiler {
context = context.addInstruction(new ReturnInstruction(node.source()));
return context;
}
-
+
public static Context compileFunctionStatement(
TypedFunctionStatementNode node,
Context context
@@ -257,7 +257,7 @@ public class StackCompiler {
case TypedBlockReturnNode blockReturn ->
compileBlockReturn(blockReturn, context);
-
+
case TypedExpressionStatementNode expressionStatement ->
compileExpressionStatement(expressionStatement, context);
@@ -342,6 +342,20 @@ public class StackCompiler {
context = context.addShedVariable(boundVariableName);
}
+ for (var importNode : node.imports()) {
+ var localName = context.shedVariableToLocal(importNode.variableName());
+ context = context
+ .addInstruction(new NamespaceImportInstruction(
+ importNode.namespaceName(),
+ importNode.source()
+ ))
+ .addInstruction(new LocalStoreInstruction(
+ localName,
+ importNode.source()
+ ));
+
+ }
+
var statementsAfterHoisting = Iterables.sortedBy(node.body(), statement -> switch (statement) {
case TypedAssignNode assign ->
1;