+ virtual MemberAccess *clone() const { return new MemberAccess(*this); }
+ virtual void visit(NodeVisitor &);
+};
+
+struct UnaryExpression: Expression
+{
+ std::string oper;
+ NodePtr<Expression> expression;
+ bool prefix;
+
+ UnaryExpression();
+
+ virtual UnaryExpression *clone() const { return new UnaryExpression(*this); }
+ virtual void visit(NodeVisitor &);
+};
+
+struct BinaryExpression: Expression
+{
+ NodePtr<Expression> left;
+ 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 FunctionCall: Expression
+{
+ std::string name;
+ bool constructor;
+ std::vector<NodePtr<Expression> > arguments;
+
+ FunctionCall();
+
+ virtual FunctionCall *clone() const { return new FunctionCall(*this); }
+ virtual void visit(NodeVisitor &);