From 0110c68debe431369dcd4f107daf142d478b8496 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 27 Aug 2023 21:36:57 +0100 Subject: Extract generateCondition() --- .../org/shedlang/compiler/patio/PatioCodeGen.java | 53 +++++++++++++--------- 1 file changed, 32 insertions(+), 21 deletions(-) (limited to 'src/main/java') 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 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(); -- cgit v1.2.3