diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-11-18 14:45:25 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-11-18 14:45:25 +0000 |
| commit | 240cf4b6b2c4135d9b6b9150426798f6cc8508df (patch) | |
| tree | 1fa972fb41354d12a2670f3d1dd4cdbdf7c0fa63 /src/main/java | |
| parent | f3caf574b02e54d459374b9750e5791df5549b9f (diff) | |
Add effect as receiver in stack IR
Diffstat (limited to 'src/main/java')
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 {} } |
