From 9a2d749472c0de64cee12b1dc6c1556536bde93f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 19 Dec 2023 11:58:58 +0000 Subject: Add and use PatioInstruction::isBlockTerminator() --- .../shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java | 2 +- .../org/shedlang/compiler/patio/ast/instructions/PatioAllocHeap.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioAllocStack.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioBlock.java | 5 +++++ .../org/shedlang/compiler/patio/ast/instructions/PatioBoolToInt.java | 4 ++++ .../java/org/shedlang/compiler/patio/ast/instructions/PatioCall.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioCallPointer.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java | 4 ++++ .../java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioInstruction.java | 1 + .../org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioIntEquals.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioIntNotEqual.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioIntSub.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioIntToBool.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioLocalStore.java | 4 ++++ .../java/org/shedlang/compiler/patio/ast/instructions/PatioLoop.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioLoopBreak.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioLoopContinue.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioResume.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioReturn.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioReturnVoid.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioSwitch.java | 5 +++++ .../org/shedlang/compiler/patio/ast/instructions/PatioThrow.java | 4 ++++ .../java/org/shedlang/compiler/patio/ast/instructions/PatioTry.java | 4 ++++ .../shedlang/compiler/patio/ast/instructions/PatioUnreachable.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioVarLoad.java | 4 ++++ .../org/shedlang/compiler/patio/ast/instructions/PatioVarStore.java | 4 ++++ 31 files changed, 120 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java index d16dabcf..b7e160b3 100644 --- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/LlvmPatioCodeGen.java @@ -873,7 +873,7 @@ public class LlvmPatioCodeGen { } var endIsUnreachable = branch.body.body().stream() - .anyMatch(instruction -> instruction instanceof PatioUnreachable); + .anyMatch(instruction -> instruction.isBlockTerminator()); if (!endIsUnreachable) { context = context.startBasicBlock(branch.endLabel); diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAllocHeap.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAllocHeap.java index fa045fb5..65f3b4c5 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAllocHeap.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAllocHeap.java @@ -17,4 +17,8 @@ public record PatioAllocHeap( int gcChildrenCount, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAllocStack.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAllocStack.java index 0725a5cb..2473b679 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAllocStack.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioAllocStack.java @@ -14,4 +14,8 @@ public record PatioAllocStack( PatioDataLayout layout, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioBlock.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioBlock.java index 4fd8d2c5..ce4a2407 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioBlock.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioBlock.java @@ -23,4 +23,9 @@ public record PatioBlock( this.source ); } + + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioBoolToInt.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioBoolToInt.java index 5edf01e9..d3b6baf1 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioBoolToInt.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioBoolToInt.java @@ -9,4 +9,8 @@ public record PatioBoolToInt( PatioOperand value, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCall.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCall.java index c74613bb..f920c319 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCall.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCall.java @@ -17,4 +17,8 @@ public record PatioCall( List args, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCallPointer.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCallPointer.java index fcd3fb0b..5ff10331 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCallPointer.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioCallPointer.java @@ -16,4 +16,8 @@ public record PatioCallPointer( List args, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java index 481cdcd0..3d21f005 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioDataPtrToInt.java @@ -9,4 +9,8 @@ public record PatioDataPtrToInt( PatioOperand value, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } 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 index 16e2e9b3..fc5a0dc7 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIf.java @@ -20,4 +20,8 @@ public record PatioIf( PatioBlock falseBody, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } 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 202948ea..088282d4 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 @@ -3,5 +3,6 @@ package org.shedlang.compiler.patio.ast.instructions; import org.shedlang.compiler.sources.Source; public sealed interface PatioInstruction permits PatioAllocHeap, PatioAllocStack, PatioBlock, PatioBoolToInt, PatioCall, PatioCallPointer, PatioDataPtrToInt, PatioIf, PatioIntAdd, PatioIntEquals, PatioIntNotEqual, PatioIntSub, PatioIntToBool, PatioIntToDataPtr, PatioLocalStore, PatioLoop, PatioLoopBreak, PatioLoopContinue, PatioMemoryLoad, PatioMemoryStore, PatioResume, PatioReturn, PatioReturnVoid, PatioSwitch, PatioThrow, PatioTry, PatioUnreachable, PatioVarLoad, PatioVarStore { + boolean isBlockTerminator(); Source source(); } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java index 55abf764..fda748c5 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntAdd.java @@ -10,4 +10,8 @@ public record PatioIntAdd( PatioOperand right, Source source ) implements PatioInstructionBinaryOperation, PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntEquals.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntEquals.java index 5dd0c8a5..a261d854 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntEquals.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntEquals.java @@ -10,4 +10,8 @@ public record PatioIntEquals( PatioOperand right, Source source ) implements PatioInstructionBinaryOperation, PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntNotEqual.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntNotEqual.java index 28313111..cc426c8e 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntNotEqual.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntNotEqual.java @@ -14,4 +14,8 @@ public record PatioIntNotEqual( PatioOperand right, Source source ) implements PatioInstructionBinaryOperation, PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntSub.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntSub.java index e5e3eaa2..35aa51a9 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntSub.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntSub.java @@ -14,4 +14,8 @@ public record PatioIntSub( PatioOperand right, Source source ) implements PatioInstructionBinaryOperation, PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToBool.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToBool.java index 43bdca03..fe5205ed 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToBool.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToBool.java @@ -9,4 +9,8 @@ public record PatioIntToBool( PatioOperand value, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java index 60ae81de..bf66c616 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioIntToDataPtr.java @@ -9,4 +9,8 @@ public record PatioIntToDataPtr( PatioOperand value, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLocalStore.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLocalStore.java index 22939cd5..6c4b4ba9 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLocalStore.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLocalStore.java @@ -12,4 +12,8 @@ public record PatioLocalStore( PatioOperand value, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoop.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoop.java index 94d33a24..d849fa8c 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoop.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoop.java @@ -13,4 +13,8 @@ public record PatioLoop( List body, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoopBreak.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoopBreak.java index a276a5ad..2f4ed046 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoopBreak.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoopBreak.java @@ -6,4 +6,8 @@ import org.shedlang.compiler.sources.Source; * Jump to the end of the enclosing loop instruction's body. */ public record PatioLoopBreak(Source source) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return true; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoopContinue.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoopContinue.java index f8afd614..7d6eeaaf 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoopContinue.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioLoopContinue.java @@ -6,4 +6,8 @@ import org.shedlang.compiler.sources.Source; * Jump to the start of the enclosing loop instruction's body. */ public record PatioLoopContinue(Source source) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return true; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java index 977bf6c9..3339b7e2 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryLoad.java @@ -18,4 +18,8 @@ public record PatioMemoryLoad( List offset, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java index ca283284..3bff3fe6 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioMemoryStore.java @@ -16,4 +16,8 @@ public record PatioMemoryStore( PatioOperand value, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioResume.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioResume.java index 3f19908f..fca36a7f 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioResume.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioResume.java @@ -8,4 +8,8 @@ import org.shedlang.compiler.sources.Source; * call. */ public record PatioResume(PatioOperand value, Source source) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return true; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturn.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturn.java index 1d5cbcd2..355715c2 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturn.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturn.java @@ -7,4 +7,8 @@ import org.shedlang.compiler.sources.Source; * Return with the given value from the current function. */ public record PatioReturn(PatioOperand value, Source source) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return true; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturnVoid.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturnVoid.java index 0fc8c0cb..2d3001af 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturnVoid.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioReturnVoid.java @@ -6,4 +6,8 @@ import org.shedlang.compiler.sources.Source; * Return with no value from the current function. */ public record PatioReturnVoid(Source source) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return true; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioSwitch.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioSwitch.java index d68b44a3..14220320 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioSwitch.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioSwitch.java @@ -23,4 +23,9 @@ public record PatioSwitch( ) implements PatioInstruction { public record Case(int value, PatioBlock body, Source source) { } + + @Override + public boolean isBlockTerminator() { + return true; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioThrow.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioThrow.java index d08f82fc..10c627a6 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioThrow.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioThrow.java @@ -14,4 +14,8 @@ public record PatioThrow( PatioOperand value, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return true; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioTry.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioTry.java index ebd1ca95..4eab249c 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioTry.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioTry.java @@ -22,4 +22,8 @@ public record PatioTry( PatioBlock body, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioUnreachable.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioUnreachable.java index 55821afe..20f990cb 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioUnreachable.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioUnreachable.java @@ -7,4 +7,8 @@ import org.shedlang.compiler.sources.Source; * that an instruction sequence is unreachable. */ public record PatioUnreachable(Source source) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return true; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioVarLoad.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioVarLoad.java index 1b30a576..6169ff18 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioVarLoad.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioVarLoad.java @@ -11,4 +11,8 @@ public record PatioVarLoad( PatioLocalRef var, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } diff --git a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioVarStore.java b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioVarStore.java index 104e8ca5..51e4993f 100644 --- a/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioVarStore.java +++ b/src/main/java/org/shedlang/compiler/patio/ast/instructions/PatioVarStore.java @@ -12,4 +12,8 @@ public record PatioVarStore( PatioOperand value, Source source ) implements PatioInstruction { + @Override + public boolean isBlockTerminator() { + return false; + } } -- cgit v1.2.3