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=="(")
{
tokenizer.parse_token();
- RefPtr<ParenthesizedExpression> parexpr = create_node<ParenthesizedExpression>();
- parexpr->expression = parse_expression();
+ left = parse_expression();
tokenizer.expect(")");
- left = parexpr;
}
else if(isdigit(token[0]) || token=="true" || token=="false")
left = parse_literal();
binary->left = left;
binary->oper = &oper;
tokenizer.expect(oper.token);
- if(oper.token[0]=='[')
+ if(oper.token2[0])
{
binary->right = parse_expression();
- tokenizer.expect("]");
+ tokenizer.expect(oper.token2);
}
else
binary->right = parse_expression(&oper);
{
RefPtr<FunctionCall> call = create_node<FunctionCall>();
call->name = var.name;
- call->constructor = is_type(call->name);
call->oper = &Operator::get_operator("(", Operator::POSTFIX);
tokenizer.expect("(");
while(tokenizer.peek_token()!=")")
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(";"))