]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programsyntax.h
Refactor block modification operations into an intermediate base class
[libs/gl.git] / source / programsyntax.h
index 03b5aa8863d1e70af4e9be52383431ed9b331a96..089683323c507b81573b0c908163f9b28337de7d 100644 (file)
@@ -52,6 +52,7 @@ public:
 
 struct StructDeclaration;
 struct VariableDeclaration;
+struct FunctionDeclaration;
 
 struct Block: Node
 {
@@ -145,6 +146,7 @@ struct Assignment: BinaryExpression
 struct FunctionCall: Expression
 {
        std::string name;
+       FunctionDeclaration *declaration;
        bool constructor;
        std::vector<NodePtr<Expression> > arguments;
 
@@ -162,6 +164,14 @@ struct ExpressionStatement: Node
        virtual void visit(NodeVisitor &);
 };
 
+struct Import: Node
+{
+       std::string module;
+
+       virtual Import *clone() const { return new Import(*this); }
+       virtual void visit(NodeVisitor &);
+};
+
 struct Layout: Node
 {
        struct Qualifier
@@ -226,10 +236,11 @@ struct FunctionDeclaration: Node
        std::string return_type;
        std::string name;
        std::vector<NodePtr<VariableDeclaration> > parameters;
-       bool definition;
+       FunctionDeclaration *definition;
        Block body;
 
        FunctionDeclaration();
+       FunctionDeclaration(const FunctionDeclaration &);
 
        virtual FunctionDeclaration *clone() const { return new FunctionDeclaration(*this); }
        virtual void visit(NodeVisitor &);
@@ -286,6 +297,7 @@ struct NodeVisitor
        virtual void visit(Assignment &);
        virtual void visit(FunctionCall &) { }
        virtual void visit(ExpressionStatement &) { }
+       virtual void visit(Import &) { }
        virtual void visit(Layout &) { }
        virtual void visit(StructDeclaration &) { }
        virtual void visit(VariableDeclaration &) { }