Исправлен 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;
public interface Accessible {
public interface Accessible extends Node {
Value get();

View File

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