]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/parser.cpp
Refactor adding types in SL::Parser
[libs/gl.git] / source / glsl / parser.cpp
index 4e8ff97aa894864632fcb47e044b3102d04b9f70..46bee183f9c061330dc984efd3e88d7ef6773202 100644 (file)
@@ -605,6 +605,15 @@ RefPtr<FunctionCall> 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<TypeDeclaration> Parser::parse_type_declaration()
 {
        tokenizer.expect("typedef");
@@ -616,11 +625,7 @@ RefPtr<TypeDeclaration> 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<StructDeclaration> 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;
 }