]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programsyntax.h
Overhaul assignment tracking to work properly with conditionals
[libs/gl.git] / source / programsyntax.h
index 88f333ac1559d2e662dbaeca7903aecfbdbfa1ed..03b5aa8863d1e70af4e9be52383431ed9b331a96 100644 (file)
@@ -126,14 +126,22 @@ struct BinaryExpression: Expression
        std::string oper;
        NodePtr<Expression> right;
        std::string after;
-       bool assignment;
-
-       BinaryExpression();
 
        virtual BinaryExpression *clone() const { return new BinaryExpression(*this); }
        virtual void visit(NodeVisitor &);
 };
 
+struct Assignment: BinaryExpression
+{
+       bool self_referencing;
+       VariableDeclaration *target_declaration;
+
+       Assignment();
+
+       virtual Assignment *clone() const { return new Assignment(*this); }
+       virtual void visit(NodeVisitor &);
+};
+
 struct FunctionCall: Expression
 {
        std::string name;
@@ -275,6 +283,7 @@ struct NodeVisitor
        virtual void visit(MemberAccess &) { }
        virtual void visit(UnaryExpression &) { }
        virtual void visit(BinaryExpression &) { }
+       virtual void visit(Assignment &);
        virtual void visit(FunctionCall &) { }
        virtual void visit(ExpressionStatement &) { }
        virtual void visit(Layout &) { }