aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-11-18 14:45:25 +0000
committerMichael Williamson <mike@zwobble.org>2023-11-18 14:45:25 +0000
commit240cf4b6b2c4135d9b6b9150426798f6cc8508df (patch)
tree1fa972fb41354d12a2670f3d1dd4cdbdf7c0fa63 /src/main/java
parentf3caf574b02e54d459374b9750e5791df5549b9f (diff)
Add effect as receiver in stack IR
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java4
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java6
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/instructions/FieldLoadInstruction.java2
3 files changed, 12 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
index d8244758..497f059d 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
@@ -271,6 +271,10 @@ public class PatioCodeGen {
context = targetResult.context();
switch (fieldLoad.receiver()) {
+ case FieldLoadInstruction.Receiver.Effect receiverEffect -> {
+ throw new UnsupportedOperationException("TODO");
+ }
+
case FieldLoadInstruction.Receiver.Namespace receiverNamespace -> {
context = PatioCodeGenNamespaces.fieldLoad(
target,
diff --git a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
index 10b39832..86e64df5 100644
--- a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
+++ b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
@@ -104,6 +104,12 @@ public class InstructionSerializer {
treeList(
treeIdentifier("field-load"),
switch (fieldLoad.receiver()) {
+ case FieldLoadInstruction.Receiver.Effect effect ->
+ treeList(
+ treeIdentifier("effect"),
+ userDefinedEffectToTree(effect.effect())
+ );
+
case FieldLoadInstruction.Receiver.Namespace namespace ->
treeList(
treeIdentifier("namespace"),
diff --git a/src/main/java/org/shedlang/compiler/stackir/instructions/FieldLoadInstruction.java b/src/main/java/org/shedlang/compiler/stackir/instructions/FieldLoadInstruction.java
index 816da14e..7729d1d7 100644
--- a/src/main/java/org/shedlang/compiler/stackir/instructions/FieldLoadInstruction.java
+++ b/src/main/java/org/shedlang/compiler/stackir/instructions/FieldLoadInstruction.java
@@ -3,6 +3,7 @@ package org.shedlang.compiler.stackir.instructions;
import org.shedlang.compiler.sources.Source;
import org.shedlang.compiler.types.NamespaceName;
import org.shedlang.compiler.types.StructType;
+import org.shedlang.compiler.types.UserDefinedEffect;
/**
* Pop a value from the stack, get the given field from the popped value, and
@@ -14,6 +15,7 @@ public record FieldLoadInstruction(
Source source
) implements Instruction {
public sealed interface Receiver {
+ record Effect(UserDefinedEffect effect) implements Receiver {}
record Namespace(NamespaceName name) implements Receiver {}
record Struct(StructType type) implements Receiver {}
}