From ca7932c4f05bb7e790ab1f2234052e966c458614 Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Wed, 14 Dec 2022 22:33:16 +0100 Subject: [PATCH] no longer do return value optimization with tempvar, this caused invalid code sometimes. --- .../src/prog8/optimizer/StatementOptimizer.kt | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/codeOptimizers/src/prog8/optimizer/StatementOptimizer.kt b/codeOptimizers/src/prog8/optimizer/StatementOptimizer.kt index ceccc2620..847a56027 100644 --- a/codeOptimizers/src/prog8/optimizer/StatementOptimizer.kt +++ b/codeOptimizers/src/prog8/optimizer/StatementOptimizer.kt @@ -374,31 +374,4 @@ class StatementOptimizer(private val program: Program, return noModifications } - - override fun after(returnStmt: Return, parent: Node): Iterable { - - if(compTarget.name==VMTarget.NAME) - return noModifications - - val returnvalue = returnStmt.value - if (returnvalue!=null) { - val dt = returnvalue.inferType(program).getOr(DataType.UNDEFINED) - if(dt!=DataType.UNDEFINED) { - if (returnvalue is BinaryExpression || (returnvalue is TypecastExpression && !returnvalue.expression.isSimple)) { - // first assign to intermediary variable, then return that - val (returnVarName, _) = program.getTempVar(dt) - val returnValueIntermediary = IdentifierReference(returnVarName, returnStmt.position) - val tgt = AssignTarget(returnValueIntermediary, null, null, returnStmt.position) - val assign = Assignment(tgt, returnvalue, AssignmentOrigin.OPTIMIZER, returnStmt.position) - val returnReplacement = Return(returnValueIntermediary.copy(), returnStmt.position) - return listOf( - IAstModification.InsertBefore(returnStmt, assign, parent as IStatementContainer), - IAstModification.ReplaceNode(returnStmt, returnReplacement, parent) - ) - } - } - } - - return noModifications - } }