aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-11 18:03:47 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-11 18:03:47 +0000
commit041d35ae5b61d3dd94bcd164b72158de2049ff18 (patch)
tree47bb69c4d678c43a316dcfdad0ff33458a4a32d9 /src/main/java
parentaeb5658434d8090ec8e5cfc054ba6b13758c4da2 (diff)
Generate stack IR for effect definition
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/StackCompiler.java13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
index bad4f72c..da20c770 100644
--- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
+++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
@@ -114,6 +114,17 @@ public class StackCompiler {
return context;
}
+ private static Context compileEffectDefinition(
+ TypedEffectDefinitionNode node,
+ Context context
+ ) {
+ var localName = context.shedVariableToLocal(node.effect().name());
+
+ return context
+ .addInstruction(new DefineEffectInstruction(node.effect(), node.source()))
+ .addInstruction(new LocalStoreInstruction(localName, node.source()));
+ }
+
public static Context compileExpression(TypedExpressionNode node, Context context) {
return switch (node) {
case TypedBinaryOperationNode typedBinaryOperationNode ->
@@ -450,7 +461,7 @@ public class StackCompiler {
compileAssign(assign, context);
case TypedEffectDefinitionNode effectDefinition ->
- throw new UnsupportedOperationException("TODO");
+ compileEffectDefinition(effectDefinition, context);
case TypedFunctionDefinitionNode functionDefinition ->
compileFunctionDefinition(functionDefinition, context);