X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fsyntax.h;h=3fb848d2ceb81a91fdc07ab19f0e072b0b71010c;hb=b482f6d59aca2b4f1d9e2cbcc0f596d62c057509;hp=deb2c78027c0debcddaeac9eb0b24a4f693ec51e;hpb=d3ceb2186dc79130508093b3d0c944771a53534f;p=libs%2Fgl.git diff --git a/source/glsl/syntax.h b/source/glsl/syntax.h index deb2c780..3fb848d2 100644 --- a/source/glsl/syntax.h +++ b/source/glsl/syntax.h @@ -6,8 +6,8 @@ #include #include #include -#include "extension.h" -#include "uniform.h" +#include "features.h" +#include "sourcemap.h" #pragma push_macro("interface") #undef interface @@ -106,10 +106,13 @@ struct Block: Node { NodeList body; bool use_braces; + bool anonymous; std::map types; std::map variables; + Block *parent; Block(); + Block(const Block &); virtual Block *clone() const { return new Block(*this); } virtual void visit(NodeVisitor &); @@ -142,6 +145,7 @@ struct VariableReference: Expression VariableDeclaration *declaration; VariableReference(); + VariableReference(const VariableReference &); virtual VariableReference *clone() const { return new VariableReference(*this); } virtual void visit(NodeVisitor &); @@ -153,6 +157,9 @@ struct MemberAccess: Expression std::string member; VariableDeclaration *declaration; + MemberAccess(); + MemberAccess(const MemberAccess &); + virtual MemberAccess *clone() const { return new MemberAccess(*this); } virtual void visit(NodeVisitor &); }; @@ -186,6 +193,7 @@ struct Assignment: BinaryExpression VariableDeclaration *target_declaration; Assignment(); + Assignment(const Assignment &); virtual Assignment *clone() const { return new Assignment(*this); } virtual void visit(NodeVisitor &); @@ -199,6 +207,7 @@ struct FunctionCall: Expression NodeArray arguments; FunctionCall(); + FunctionCall(const FunctionCall &); virtual FunctionCall *clone() const { return new FunctionCall(*this); } virtual void visit(NodeVisitor &); @@ -281,6 +290,7 @@ struct VariableDeclaration: Statement NodePtr layout; VariableDeclaration(); + VariableDeclaration(const VariableDeclaration &); virtual VariableDeclaration *clone() const { return new VariableDeclaration(*this); } virtual void visit(NodeVisitor &); @@ -360,80 +370,32 @@ struct Jump: Statement virtual void visit(NodeVisitor &); }; -struct NodeVisitor -{ - virtual ~NodeVisitor() { } - - virtual void visit(Block &) { } - virtual void visit(Literal &) { } - virtual void visit(ParenthesizedExpression &) { } - virtual void visit(VariableReference &) { } - 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(Import &) { } - virtual void visit(Precision &) { } - virtual void visit(Layout &) { } - virtual void visit(InterfaceLayout &) { } - virtual void visit(StructDeclaration &) { } - virtual void visit(VariableDeclaration &) { } - virtual void visit(InterfaceBlock &) { } - virtual void visit(FunctionDeclaration &) { } - virtual void visit(Conditional &) { } - virtual void visit(Iteration &) { } - virtual void visit(Passthrough &) { } - virtual void visit(Return &) { } - virtual void visit(Jump &) { } -}; - -struct TraversingVisitor: NodeVisitor -{ - using NodeVisitor::visit; - virtual void visit(Block &); - virtual void visit(ParenthesizedExpression &); - virtual void visit(MemberAccess &); - virtual void visit(UnaryExpression &); - virtual void visit(BinaryExpression &); - virtual void visit(FunctionCall &); - virtual void visit(ExpressionStatement &); - virtual void visit(InterfaceLayout &); - virtual void visit(StructDeclaration &); - virtual void visit(VariableDeclaration &); - virtual void visit(InterfaceBlock &); - virtual void visit(FunctionDeclaration &); - virtual void visit(Conditional &); - virtual void visit(Iteration &); - virtual void visit(Passthrough &); - virtual void visit(Return &); -}; - -enum StageType -{ - SHARED, - VERTEX, - GEOMETRY, - FRAGMENT -}; - struct Stage { - StageType type; + enum Type + { + SHARED, + VERTEX, + GEOMETRY, + FRAGMENT + }; + + Type type; Stage *previous; Block content; std::map in_variables; std::map out_variables; std::map locations; - Version required_version; - std::vector required_extensions; + Features required_features; + + Stage(Type); - Stage(StageType); + static const char *get_stage_name(Type); }; struct Module { + SourceMap source_map; Stage shared; std::list stages;