Added unary ++ --, prefix and postfix, working on running a program
This commit is contained in:
@@ -263,8 +263,13 @@ parse_block(){
|
||||
result = parse_init_stmt((Ast_Expr *)result);
|
||||
}
|
||||
|
||||
if(result) stmts.add(result);
|
||||
else parsing_error(token, "Unexpected token [%s] while parsing statement", name(token->kind));
|
||||
if(result) {
|
||||
result->flags = set_flag(result->flags, AST_STMT);
|
||||
stmts.add(result);
|
||||
}
|
||||
else {
|
||||
parsing_error(token, "Unexpected token [%s] while parsing statement", name(token->kind));
|
||||
}
|
||||
|
||||
}
|
||||
} while(token_match(SAME_SCOPE));
|
||||
@@ -320,6 +325,8 @@ binding_power(Binding binding, Token_Kind kind){
|
||||
else invalid_codepath;
|
||||
|
||||
Prefix: switch(kind){
|
||||
case TK_Increment:
|
||||
case TK_Decrement:
|
||||
case TK_Pointer:
|
||||
case TK_Dereference:
|
||||
case TK_OpenBracket:
|
||||
@@ -361,6 +368,8 @@ binding_power(Binding binding, Token_Kind kind){
|
||||
default: return {};
|
||||
}
|
||||
Postfix: switch(kind){
|
||||
case TK_Increment:
|
||||
case TK_Decrement:
|
||||
case TK_OpenBracket:
|
||||
case TK_OpenParen:
|
||||
return {21, -2};
|
||||
@@ -387,6 +396,8 @@ parse_expr(S64 min_bp){
|
||||
case TK_Add : left = ast_expr_unary(token, TK_Add, parse_expr(prefix_bp.right)); break;
|
||||
case TK_Not : left = ast_expr_unary(token, TK_Not, parse_expr(prefix_bp.right)); break;
|
||||
case TK_Neg : left = ast_expr_unary(token, TK_Neg, parse_expr(prefix_bp.right)); break;
|
||||
case TK_Increment : left = ast_expr_unary(token, TK_Increment, parse_expr(prefix_bp.right)); break;
|
||||
case TK_Decrement : left = ast_expr_unary(token, TK_Decrement, parse_expr(prefix_bp.right)); break;
|
||||
|
||||
case TK_OpenBracket: {
|
||||
Ast_Array *result = ast_array(token, parse_expr(0));
|
||||
@@ -482,7 +493,7 @@ parse_struct(Token *pos){
|
||||
token_match(OPEN_SCOPE);
|
||||
do{
|
||||
Token *token = token_get();
|
||||
|
||||
|
||||
Ast_Named *named = parse_named(false);
|
||||
if(!named) parsing_error(token, "Failed to parse struct member");
|
||||
named->flags = set_flag(named->flags, AST_AGGREGATE_CHILD);
|
||||
|
||||
Reference in New Issue
Block a user