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(";");
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");