Another fix for evaluation order in AST optimizer

See #330
This commit is contained in:
Alexey Andreev 2018-02-17 10:29:33 +03:00
parent 788e506175
commit de88541b64

View File

@ -367,7 +367,7 @@ class OptimizingVisitor implements StatementVisitor, ExprVisitor {
public void visit(InvocationExpr expr) { public void visit(InvocationExpr expr) {
pushLocation(expr.getLocation()); pushLocation(expr.getLocation());
try { try {
Expr[] args = new Expr[expr.getArguments().size()]; Expr[] args = expr.getArguments().toArray(new Expr[0]);
int barrierPos; int barrierPos;
for (barrierPos = 0; barrierPos < args.length; ++barrierPos) { for (barrierPos = 0; barrierPos < args.length; ++barrierPos) {
@ -383,7 +383,7 @@ class OptimizingVisitor implements StatementVisitor, ExprVisitor {
} }
for (int i = args.length - 1; i >= 0; --i) { for (int i = args.length - 1; i >= 0; --i) {
expr.getArguments().get(i).acceptVisitor(this); args[i].acceptVisitor(this);
args[i] = resultExpr; args[i] = resultExpr;
if (i == barrierPos) { if (i == barrierPos) {
removeBarrier(barrier); removeBarrier(barrier);