From 6d6db550552faf54c9d4519a46cf03181efd4aea Mon Sep 17 00:00:00 2001 From: Victor Date: Fri, 22 Jul 2016 20:31:23 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20OptimizationVisitor=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=85=D0=BE=D0=B4=D0=B5=20=D0=BF=D1=80=D0=B8=D1=81?= =?UTF-8?q?=D0=B2=D0=B0=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/annimon/ownlang/parser/ast/Accessible.java | 2 +- .../ownlang/parser/optimization/OptimizationVisitor.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/com/annimon/ownlang/parser/ast/Accessible.java b/src/com/annimon/ownlang/parser/ast/Accessible.java index 77ccac9..6798089 100644 --- a/src/com/annimon/ownlang/parser/ast/Accessible.java +++ b/src/com/annimon/ownlang/parser/ast/Accessible.java @@ -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(); diff --git a/src/com/annimon/ownlang/parser/optimization/OptimizationVisitor.java b/src/com/annimon/ownlang/parser/optimization/OptimizationVisitor.java index aac9781..164664e 100644 --- a/src/com/annimon/ownlang/parser/optimization/OptimizationVisitor.java +++ b/src/com/annimon/ownlang/parser/optimization/OptimizationVisitor.java @@ -29,9 +29,10 @@ public abstract class OptimizationVisitor implements ResultVisitor { @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; }