Added unary ++ --, prefix and postfix, working on running a program

This commit is contained in:
Krzosa Karol
2022-06-07 09:05:02 +02:00
parent d3da979d64
commit c5b82c0532
6 changed files with 51 additions and 15 deletions

View File

@@ -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);