diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-08-27 21:36:57 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-08-27 21:36:57 +0100 |
| commit | 0110c68debe431369dcd4f107daf142d478b8496 (patch) | |
| tree | 6d0db7abd540136b2cda58966c7a50962d1e03d5 /src/main/java | |
| parent | cbd1422f9102ed878886163d1c300061a7fdfbd8 (diff) | |
Extract generateCondition()
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java | 53 |
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(); |
