]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programsyntax.cpp
Implement an actual expression parser
[libs/gl.git] / source / programsyntax.cpp
index 09ba82c31fddd42bd10ab2d524ae8f9154e37035..5b39d7f3036a4f90e9f495f9ff2f172e02cc59e2 100644 (file)
@@ -10,13 +10,61 @@ Block::Block():
        use_braces(false)
 { }
 
-Block::~Block()
+void Block::visit(NodeVisitor &visitor)
 {
-       for(vector<Node *>::iterator i=body.begin(); i!=body.end(); ++i)
-               delete *i;
+       visitor.visit(*this);
 }
 
-void Block::visit(NodeVisitor &visitor)
+
+void Literal::visit(NodeVisitor &visitor)
+{
+       visitor.visit(*this);
+}
+
+
+void ParenthesizedExpression::visit(NodeVisitor &visitor)
+{
+       visitor.visit(*this);
+}
+
+
+void VariableReference::visit(NodeVisitor &visitor)
+{
+       visitor.visit(*this);
+}
+
+
+void MemberAccess::visit(NodeVisitor &visitor)
+{
+       visitor.visit(*this);
+}
+
+
+UnaryExpression::UnaryExpression():
+       prefix(true)
+{ }
+
+void UnaryExpression::visit(NodeVisitor &visitor)
+{
+       visitor.visit(*this);
+}
+
+
+BinaryExpression::BinaryExpression():
+       assignment(false)
+{ }
+
+void BinaryExpression::visit(NodeVisitor &visitor)
+{
+       visitor.visit(*this);
+}
+
+
+FunctionCall::FunctionCall():
+       constructor(false)
+{ }
+
+void FunctionCall::visit(NodeVisitor &visitor)
 {
        visitor.visit(*this);
 }
@@ -71,12 +119,6 @@ FunctionDeclaration::FunctionDeclaration():
        definition(false)
 { }
 
-FunctionDeclaration::~FunctionDeclaration()
-{
-       for(vector<VariableDeclaration *>::iterator i=parameters.begin(); i!=parameters.end(); ++i)
-               delete *i;
-}
-
 void FunctionDeclaration::visit(NodeVisitor &visitor)
 {
        visitor.visit(*this);
@@ -95,15 +137,6 @@ void Return::visit(NodeVisitor &visitor)
 }
 
 
-Iteration::Iteration():
-       init_statement(0)
-{ }
-
-Iteration::~Iteration()
-{
-       delete init_statement;
-}
-
 void Iteration::visit(NodeVisitor &visitor)
 {
        visitor.visit(*this);