}
else if(is_qualifier(token))
return parse_variable_declaration();
+ else if(token=="virtual")
+ return parse_function_declaration();
else if(is_type(token))
{
if(tokenizer.peek_token(2)=="(")
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()!=")")
{
RefPtr<FunctionDeclaration> func = create_node<FunctionDeclaration>();
+ func->virtua = check("virtual");
func->return_type = expect_type();
func->name = expect_identifier();
tokenizer.expect("(");
}
tokenizer.expect(")");
+ func->overrd = check("override");
+
string token = tokenizer.peek_token();
if(token=="{")
{