X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fparser.h;h=bce9698f7d608a4b3c18417bf2eef1d149f54a81;hb=9ec831710f64a62ad5f2e896a55ae82a3519f29e;hp=cdb57ebc5b48850bae81f4af251e5a841b669504;hpb=1083ad150c902bd153f88f7fb28660b4f31cf9fe;p=libs%2Fgl.git diff --git a/source/glsl/parser.h b/source/glsl/parser.h index cdb57ebc..bce9698f 100644 --- a/source/glsl/parser.h +++ b/source/glsl/parser.h @@ -16,24 +16,25 @@ class Parser { private: std::string source; - unsigned base_index; - unsigned source_index; + int base_index; + int source_index; Tokenizer tokenizer; Preprocessor preprocessor; bool allow_stage_change; Module *module; Stage *cur_stage; std::set declared_types; + std::vector errors; public: Parser(); ~Parser(); - Module &parse(const std::string &, const std::string &, unsigned = 0); - Module &parse(IO::Base &, const std::string &, unsigned = 0); + Module &parse(const std::string &, const std::string &, int); + Module &parse(IO::Base &, const std::string &, int); private: - void parse_source(const std::string &, unsigned); + void parse_source(const std::string &, int); void set_required_version(const Version &); void source_reference(unsigned, const std::string &); void stage_change(Stage::Type); @@ -41,6 +42,7 @@ private: std::string expect_type(); std::string expect_identifier(); + int expect_integer(); bool check(const std::string &); static bool is_interface_qualifier(const std::string &); @@ -59,16 +61,20 @@ private: void preprocess_stage(); RefPtr parse_global_declaration(); + template + RefPtr parse_with_recovery(RefPtr (Parser::*)()); RefPtr parse_statement(); RefPtr parse_import(); RefPtr parse_precision(); RefPtr parse_layout(); - void parse_block(Block &, bool); + template + void parse_block(Block &, bool, RefPtr (Parser::*)()); RefPtr parse_expression(unsigned = 0); RefPtr parse_binary(const RefPtr &, const Operator *); RefPtr parse_function_call(const VariableReference &); RefPtr parse_struct_declaration(); RefPtr parse_variable_declaration(); + RefPtr parse_variable_declaration_with_layout(); RefPtr parse_function_declaration(); RefPtr parse_interface_block(); RefPtr parse_conditional();