aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-23 21:23:47 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-23 21:23:47 +0100
commit22920bf229662df1faa59ec50e9a92ce9f3fc715 (patch)
treeaacb3a1b4b569139bd0d5006721bbabd72a71c67 /src/main/java
parent23a4308c22a0b8bff2400909449e3e34acc78cff (diff)
Convert bool to int after int equality in Patio code gen
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java24
1 files changed, 20 insertions, 4 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
index 475831c6..1b4aa18c 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
@@ -318,13 +318,29 @@ public class PatioCodeGen {
case IntEqualsInstruction intEquals ->
generateBinaryOperation(
- (target, left, right, operationContext) ->
- operationContext.addInstruction(new PatioIntEquals(
- target,
+ (target, left, right, operationContext) -> {
+ var targetBoolResult = operationContext.allocateLocal(
+ PatioCodeGenLocalSpace.TEMPORARY,
+ PatioTypes.INT
+ );
+ var targetBool = targetBoolResult.value();
+ operationContext = targetBoolResult.context();
+
+ operationContext = operationContext.addInstruction(new PatioIntEquals(
+ targetBool,
left,
right,
intEquals.source()
- )),
+ ));
+
+ operationContext = operationContext.addInstruction(new PatioBoolToInt(
+ target,
+ targetBool,
+ intEquals.source()
+ ));
+
+ return operationContext;
+ },
context
);