X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fprogramparser.h;h=0a46c09ece6202e18c71625afd916b8680f4806a;hp=4bd6b70e99e1b9e2064eb9de9416a253ae5286bc;hb=6a045019fbd68738b77849629e6dfd3dfd9a4d93;hpb=73ce62f3b9c2bbfc1e655a9df343389a733dc795 diff --git a/source/programparser.h b/source/programparser.h index 4bd6b70e..0a46c09e 100644 --- a/source/programparser.h +++ b/source/programparser.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include "programsyntax.h" @@ -38,17 +39,21 @@ private: std::string source; std::string::const_iterator iter; std::deque next_tokens; - ProgramSyntax::Module main_module; - ProgramSyntax::Module *cur_module; + ProgramSyntax::Module *module; + ProgramSyntax::Stage *cur_stage; + std::set declared_types; static Operator operators[]; public: + ProgramParser(); + ~ProgramParser(); + ProgramSyntax::Module &parse(const std::string &); ProgramSyntax::Module &parse(IO::Base &); private: - void parse_source(ProgramSyntax::Module &); + void parse_source(); const std::string &peek_token(unsigned = 0); std::string parse_token(); @@ -69,21 +74,22 @@ private: bool is_type(const std::string &); bool is_identifier(const std::string &); - ProgramSyntax::Node *parse_global_declaration(); - ProgramSyntax::Node *parse_statement(); - ProgramSyntax::Layout *parse_layout(); + RefPtr parse_global_declaration(); + RefPtr parse_statement(); + RefPtr parse_import(); + RefPtr parse_layout(); void parse_block(ProgramSyntax::Block &, bool); - ProgramSyntax::Expression *parse_expression(unsigned = 0); - ProgramSyntax::BinaryExpression *parse_binary(ProgramSyntax::Expression *, const Operator *); - ProgramSyntax::FunctionCall *parse_function_call(ProgramSyntax::VariableReference *); - ProgramSyntax::StructDeclaration *parse_struct_declaration(); - ProgramSyntax::VariableDeclaration *parse_variable_declaration(); - ProgramSyntax::FunctionDeclaration *parse_function_declaration(); - void parse_function_parameter_list(ProgramSyntax::FunctionDeclaration &); - ProgramSyntax::InterfaceBlock *parse_interface_block(); - ProgramSyntax::Conditional *parse_conditional(); - ProgramSyntax::Iteration *parse_iteration(); - ProgramSyntax::Return *parse_return(); + RefPtr parse_expression(unsigned = 0); + RefPtr parse_binary(const RefPtr &, const Operator *); + RefPtr parse_function_call(const ProgramSyntax::VariableReference &); + RefPtr parse_struct_declaration(); + RefPtr parse_variable_declaration(); + RefPtr parse_function_declaration(); + RefPtr parse_interface_block(); + RefPtr parse_conditional(); + RefPtr parse_iteration(); + RefPtr parse_passthrough(); + RefPtr parse_return(); }; } // namespace GL