Исправлен OptimizationVisitor при обходе присваиваний

This commit is contained in:
Victor 2016-07-22 20:31:23 +03:00
parent 0921d8cb17
commit 6d6db55055
2 changed files with 5 additions and 4 deletions

View File

@ -2,7 +2,7 @@ package com.annimon.ownlang.parser.ast;
import com.annimon.ownlang.lib.Value; import com.annimon.ownlang.lib.Value;
public interface Accessible { public interface Accessible extends Node {
Value get(); Value get();

View File

@ -29,9 +29,10 @@ public abstract class OptimizationVisitor<T> implements ResultVisitor<Node, T> {
@Override @Override
public Node visit(AssignmentExpression s, T t) { public Node visit(AssignmentExpression s, T t) {
final Node node = s.expression.accept(this, t); final Node exprNode = s.expression.accept(this, t);
if (node != s.expression) { final Node targetNode = s.target.accept(this, t);
return new AssignmentExpression(s.operation, s.target, (Expression) node); if ( (exprNode != s.expression || targetNode != s.target) && (targetNode instanceof Accessible) ) {
return new AssignmentExpression(s.operation, (Accessible) targetNode, (Expression) exprNode);
} }
return s; return s;
} }