aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-08-27 21:36:57 +0100
committerMichael Williamson <mike@zwobble.org>2023-08-27 21:36:57 +0100
commit0110c68debe431369dcd4f107daf142d478b8496 (patch)
tree6d0db7abd540136b2cda58966c7a50962d1e03d5 /src/main/java
parentcbd1422f9102ed878886163d1c300061a7fdfbd8 (diff)
Extract generateCondition()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java53
1 files changed, 32 insertions, 21 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
index c16dbc4a..3bd8b430 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
@@ -252,30 +252,10 @@ public class PatioCodeGen {
}
case IfInstruction if_ -> {
- var conditionIntResult = context.allocateVal(
- PatioCodeGenLocalSpace.TEMPORARY,
- "conditionInt",
- PatioTypes.INT
- );
- var conditionInt = conditionIntResult.value();
- context = conditionIntResult.context();
-
- context = context.temporaryPopIntoLocal(conditionInt, if_.source());
-
- var conditionBoolResult = context.allocateVal(
- PatioCodeGenLocalSpace.TEMPORARY,
- "conditionBool",
- PatioTypes.BOOL
- );
+ var conditionBoolResult = generateCondition(if_.source(), context);
var conditionBool = conditionBoolResult.value();
context = conditionBoolResult.context();
- context = context.addInstruction(new PatioIntToBool(
- conditionBool,
- conditionInt,
- if_.source()
- ));
-
var valueResult = context.allocateVal(
PatioCodeGenLocalSpace.TEMPORARY,
PatioCodeGenTypes.VALUE_TYPE
@@ -598,6 +578,37 @@ public class PatioCodeGen {
));
}
+ private static PatioCodeGenResult<PatioLocalRef> generateCondition(
+ Source source,
+ PatioCodeGenContext context
+ ) {
+ var conditionIntResult = context.allocateVal(
+ PatioCodeGenLocalSpace.TEMPORARY,
+ "conditionInt",
+ PatioTypes.INT
+ );
+ var conditionInt = conditionIntResult.value();
+ context = conditionIntResult.context();
+
+ context = context.temporaryPopIntoLocal(conditionInt, source);
+
+ var conditionBoolResult = context.allocateVal(
+ PatioCodeGenLocalSpace.TEMPORARY,
+ "conditionBool",
+ PatioTypes.BOOL
+ );
+ var conditionBool = conditionBoolResult.value();
+ context = conditionBoolResult.context();
+
+ context = context.addInstruction(new PatioIntToBool(
+ conditionBool,
+ conditionInt,
+ source
+ ));
+
+ return context.toResult(conditionBool);
+ }
+
private static PatioCodeGenContext pushValue(int value, Source source, PatioCodeGenContext context) {
var localResult = context.allocateVal(PatioCodeGenLocalSpace.TEMPORARY, PatioCodeGenTypes.VALUE_TYPE);
var local = localResult.value();