X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fparser.cpp;h=46bee183f9c061330dc984efd3e88d7ef6773202;hb=4ecc965177df174ed2d26cfedf24665c8879acda;hp=626a65424532e189aa30e6b376f5ca041425ef24;hpb=02918a66cd589e3f73810a51f8cd62e7441e310d;p=libs%2Fgl.git diff --git a/source/glsl/parser.cpp b/source/glsl/parser.cpp index 626a6542..46bee183 100644 --- a/source/glsl/parser.cpp +++ b/source/glsl/parser.cpp @@ -58,8 +58,8 @@ void Parser::parse_source(const string &name, int index) if(const Stage *builtin = get_builtins(Stage::SHARED)) { - for(map::const_iterator i=builtin->types.begin(); i!=builtin->types.end(); ++i) - global_types.insert(i->first); + for(const auto &kvp: builtin->types) + global_types.insert(kvp.first); } tokenizer.begin(source, name); @@ -99,13 +99,13 @@ void Parser::stage_change(Stage::Type stage) cur_stage = &module->stages.back(); stage_types.clear(); - for(vector::const_iterator i=imported_modules.begin(); i!=imported_modules.end(); ++i) + for(const Module *m: imported_modules) { - list::const_iterator j = find_member((*i)->stages, stage, &Stage::type); - if(j!=(*i)->stages.end()) + auto j = find_member(m->stages, stage, &Stage::type); + if(j!=m->stages.end()) { - for(map::const_iterator k=j->types.begin(); k!=j->types.end(); ++k) - stage_types.insert(k->first); + for(const auto &kvp: j->types) + stage_types.insert(kvp.first); } } } @@ -194,7 +194,7 @@ bool Parser::is_type(const string &token) bool Parser::is_identifier(const string &token) { static Regex re("^[a-zA-Z_][a-zA-Z0-9_]*$"); - return re.match(token); + return static_cast(re.match(token)); } template @@ -369,8 +369,8 @@ RefPtr Parser::parse_import() { const Module &imported_mod = mod_cache->get_module(import->module); imported_modules.push_back(&imported_mod); - for(map::const_iterator i=imported_mod.shared.types.begin(); i!=imported_mod.shared.types.end(); ++i) - global_types.insert(i->first); + for(const auto &kvp: imported_mod.shared.types) + global_types.insert(kvp.first); } return import; @@ -605,6 +605,15 @@ RefPtr Parser::parse_function_call(const VariableReference &var) return call; } +void Parser::add_type(TypeDeclaration &type) +{ + cur_stage->types[type.name] = &type; + if(cur_stage->type==Stage::SHARED) + global_types.insert(type.name); + else + stage_types.insert(type.name); +} + RefPtr Parser::parse_type_declaration() { tokenizer.expect("typedef"); @@ -616,11 +625,7 @@ RefPtr Parser::parse_type_declaration() type = parse_basic_type_declaration(); tokenizer.expect(";"); - cur_stage->types[type->name] = type.get(); - if(cur_stage->type==Stage::SHARED) - global_types.insert(type->name); - else - stage_types.insert(type->name); + add_type(*type); return type; } @@ -710,11 +715,7 @@ RefPtr Parser::parse_struct_declaration() parse_block(strct->members, true, &Parser::parse_variable_declaration); tokenizer.expect(";"); - cur_stage->types[strct->name] = strct.get(); - if(cur_stage->type==Stage::SHARED) - global_types.insert(strct->name); - else - stage_types.insert(strct->name); + add_type(*strct); return strct; }