X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fsyntax.h;h=25b7e4a0450d8d89e940579a87af356a74ee5ac1;hb=7a16308e72aef363727b21348779673edf8e5c07;hp=a2630ef06b52111b407daa8dd8d1c73ea7583260;hpb=c1b0303f65ee966a973197cbdbf177c571478674;p=libs%2Fgl.git diff --git a/source/glsl/syntax.h b/source/glsl/syntax.h index a2630ef0..25b7e4a0 100644 --- a/source/glsl/syntax.h +++ b/source/glsl/syntax.h @@ -16,6 +16,30 @@ namespace Msp { namespace GL { namespace SL { +struct Operator +{ + enum Type + { + NO_OPERATOR, + BINARY, + PREFIX, + POSTFIX + }; + + enum Associativity + { + LEFT_TO_RIGHT, + RIGHT_TO_LEFT + }; + + char token[4]; + unsigned precedence; + Type type; + Associativity assoc; + + static const Operator operators[]; +}; + struct NodeVisitor; struct Node @@ -336,67 +360,17 @@ 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; @@ -405,7 +379,7 @@ struct Stage Version required_version; std::vector required_extensions; - Stage(StageType); + Stage(Type); }; struct Module