diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-20 18:28:32 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-20 18:28:32 +0100 |
| commit | 74764070e84869fe8e2480350a76cb8fc58c1aeb (patch) | |
| tree | 47295e75c274e8f6bff5be6af165c494e06bb1ae /src/main/java | |
| parent | cfe6cf895550d85699ac933021cf9f8f0c468dd4 (diff) | |
Add if instruction to Patio
Diffstat (limited to 'src/main/java')
3 files changed, 27 insertions, 1 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java index 850c2fcc..c865cd71 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/PatioSerializer.java @@ -130,6 +130,14 @@ public class PatioSerializer { localRefToTree(dataPtrToInt.value()) ); + case PatioIf if_ -> + treeListIndented( + treeIdentifier("if"), + localRefToTree(if_.condition()), + instructionsToTree(if_.trueBody()), + instructionsToTree(if_.falseBody()) + ); + case PatioIntAdd intAdd -> treeList( treeIdentifier("int-add"), diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java new file mode 100644 index 00000000..4446f3c6 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java @@ -0,0 +1,18 @@ +package org.shedlang.compiler.patio.ast.instructions; + +import org.shedlang.compiler.patio.ast.PatioLocalRef; +import org.shedlang.compiler.sources.Source; + +import java.util.List; + +/** + * If the condition is true, execute the instructions in the "true" body, + * otherwise execute the instructions in the "false" body. + */ +public record PatioIf( + PatioLocalRef condition, + List<PatioInstruction> trueBody, + List<PatioInstruction> falseBody, + Source source +) implements PatioInstruction { +} diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java index c86ff657..28fadebe 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioInstruction.java @@ -2,6 +2,6 @@ package org.shedlang.compiler.patio.ast.instructions; import org.shedlang.compiler.sources.Source; -public sealed interface PatioInstruction permits PatioAlloc, PatioCallPointer, PatioDataPtrToInt, PatioFunctionPointerGet, PatioIntAdd, PatioIntGet, PatioIntToDataPtr, PatioLocalCopy, PatioMemoryLoad, PatioMemoryStore, PatioReturn { +public sealed interface PatioInstruction permits PatioAlloc, PatioCallPointer, PatioDataPtrToInt, PatioFunctionPointerGet, PatioIf, PatioIntAdd, PatioIntGet, PatioIntToDataPtr, PatioLocalCopy, PatioMemoryLoad, PatioMemoryStore, PatioReturn { Source source(); } |
