diff --git a/src/main/rascal/lang/jimple/toolkit/ssa/VariableRenaming.rsc b/src/main/rascal/lang/jimple/toolkit/ssa/VariableRenaming.rsc index 4f6fb054..4605848c 100644 --- a/src/main/rascal/lang/jimple/toolkit/ssa/VariableRenaming.rsc +++ b/src/main/rascal/lang/jimple/toolkit/ssa/VariableRenaming.rsc @@ -50,8 +50,8 @@ public map[Node, list[Node]] replace(Node X) { // Deal with all nodes that aren't assigments bug uses a variable in some way if(isNonAssignmentStatementToRename(X)) { - stmtNode(statement) = X; - Node renamedStatement = stmtNode(replaceImmediateUse(statement)); + statementBody = returnStmtNodeBody(X); + Node renamedStatement = stmtNode(replaceImmediateUse(statementBody)); renameNodeOcurrecies(X, renamedStatement); X = renamedStatement; }; @@ -216,7 +216,7 @@ public bool isSkipableStatement(stmtArgument) { } public Node replacePhiFunctionVersion(map[Node, list[Node]] blockTree, Node variableNode) { - stmtNode(assignStatement) = variableNode; + assignStatement = returnStmtNodeBody(variableNode); assign(assignVariable, assignPhiFunction) = assignStatement; phiFunction(phiFunctionVariable, variableVersionList) = assignPhiFunction; variableName = phiFunctionVariable[0]; @@ -430,6 +430,12 @@ public list[Immediate] getExpressionImmediates(Expression expression) { } } +public Statement returnStmtNodeBody(Node stmtNode) { + switch(stmtNode) { + case stmtNode(stmtBody): return stmtBody; + } +} + public Variable returnLeftHandSideVariable(Node stmtNode) { switch(stmtNode) { case stmtNode(assign(leftHandSide, _)): return leftHandSide;