declared_types.insert("void");
declared_types.insert("bool");
declared_types.insert("int");
+ declared_types.insert("uint");
declared_types.insert("float");
}
if(is_interface_qualifier(token) && tokenizer.peek_token(1)==";")
{
RefPtr<InterfaceLayout> iface_lo = create_node<InterfaceLayout>();
+ 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<InterfaceBlock> iface = parse_interface_block();
+ iface->layout = layout;
+ return iface;
+ }
else
{
RefPtr<VariableDeclaration> var = parse_variable_declaration();
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("=")))
{
if(isdigit(literal->token[0]))
{
// TODO have the tokenizer return the type of the token
- if(isnumrc(literal->token))
- literal->value = lexical_cast<int>(literal->token);
- else
+ if(literal->token.back()=='u')
+ literal->value = lexical_cast<unsigned>(literal->token.substr(0, literal->token.size()-1));
+ else if(literal->token.back()=='f')
+ literal->value = lexical_cast<float>(literal->token.substr(0, literal->token.size()-1));
+ else if(literal->token.find('.')!=string::npos)
literal->value = lexical_cast<float>(literal->token);
+ else
+ literal->value = lexical_cast<int>(literal->token);
}
else if(literal->token=="true" || literal->token=="false")
literal->value = (literal->token=="true");
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(";"))