X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fparser.cpp;h=6a055c0cd3ebb718830e65175efa15aa3bf10ca1;hb=eb7ffda6876bd2eeeb64dcb7c82236f36fe5cf43;hp=8f2160a626674675b1f63b76ce5dc992d92451ff;hpb=2e0ed3f7d23f09de7b4b09c2f132c316ce703d9a;p=libs%2Fgl.git diff --git a/source/glsl/parser.cpp b/source/glsl/parser.cpp index 8f2160a6..6a055c0c 100644 --- a/source/glsl/parser.cpp +++ b/source/glsl/parser.cpp @@ -268,11 +268,19 @@ RefPtr Parser::parse_global_declaration() if(is_interface_qualifier(token) && tokenizer.peek_token(1)==";") { RefPtr iface_lo = create_node(); + iface_lo->layout.source = layout->source; + iface_lo->layout.line = layout->line; iface_lo->layout.qualifiers = layout->qualifiers; iface_lo->interface = tokenizer.parse_token(); tokenizer.expect(";"); return iface_lo; } + else if(is_interface_qualifier(token) && tokenizer.peek_token(2)=="{") + { + RefPtr iface = parse_interface_block(); + iface->layout = layout; + return iface; + } else { RefPtr var = parse_variable_declaration(); @@ -389,9 +397,8 @@ RefPtr Parser::parse_layout() if(token==")") throw parse_error(tokenizer.get_location(), token, "a layout qualifier name"); - layout->qualifiers.push_back(Layout::Qualifier()); + layout->qualifiers.push_back(token); Layout::Qualifier &qual = layout->qualifiers.back(); - qual.name = token; if((qual.has_value = check("="))) { @@ -792,7 +799,7 @@ RefPtr Parser::parse_interface_block() if(!is_interface_qualifier(iface->interface)) throw parse_error(tokenizer.get_location(), iface->interface, "an interface qualifier"); - iface->name = expect_identifier(); + iface->block_name = expect_identifier(); iface->members = new Block; parse_block(*iface->members, true, &Parser::parse_variable_declaration_with_layout); if(!check(";"))