]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/syntax.h
Assign a result type to all expressions
[libs/gl.git] / source / glsl / syntax.h
index 62c289d9fbb6ec48f61be268b7eec67072718e98..2c832c149e2467ba346867eb453cc8850b7a11a6 100644 (file)
@@ -7,6 +7,7 @@
 #include <string>
 #include <vector>
 #include <msp/core/refptr.h>
+#include <msp/core/variant.h>
 #include "features.h"
 #include "glsl_error.h"
 #include "sourcemap.h"
@@ -101,7 +102,7 @@ template<typename T>
 class NodeArray: public NodeContainer<std::vector<RefPtr<T> > >
 { };
 
-struct StructDeclaration;
+struct TypeDeclaration;
 struct VariableDeclaration;
 struct InterfaceBlock;
 struct FunctionDeclaration;
@@ -130,6 +131,9 @@ struct Expression: Node
 {
        const Operator *oper;
 
+       TypeDeclaration *type;
+       bool lvalue;
+
        Expression();
 
        virtual Expression *clone() const = 0;
@@ -138,6 +142,7 @@ struct Expression: Node
 struct Literal: Expression
 {
        std::string token;
+       Variant value;
 
        virtual Literal *clone() const { return new Literal(*this); }
        virtual void visit(NodeVisitor &);
@@ -404,6 +409,7 @@ struct FunctionDeclaration: Statement
        Block body;
 
        FunctionDeclaration *definition;
+       TypeDeclaration *return_type_declaration;
 
        FunctionDeclaration();
        FunctionDeclaration(const FunctionDeclaration &);