diff options
author | kdx <kikoodx@paranoici.org> | 2023-07-23 01:24:26 +0200 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-07-23 01:24:30 +0200 |
commit | 6d44bcf1b9cdd2ad7eb9bf9bafea4df34d122c98 (patch) | |
tree | 511a42f1279791355f4f3d13e466dcfcac89f482 | |
parent | 9a5df4a563eace94aa461d6eb96ee3a29c92a6a7 (diff) | |
download | golem-6d44bcf1b9cdd2ad7eb9bf9bafea4df34d122c98.tar.gz |
err builtin
-rw-r--r-- | src/main.c | 19 | ||||
-rwxr-xr-x | testing.sh | 1 |
2 files changed, 20 insertions, 0 deletions
@@ -303,6 +303,7 @@ typedef enum { NOD_SLP_STMT, NOD_DBG_STMT, NOD_WRT_STMT, + NOD_ERR_STMT, NOD_RED_STMT, NOD_ASSIGN_STMT, NOD_POSTFIX, @@ -433,6 +434,7 @@ static Node *break_stmt(Token **rest, Token *tok); static Node *slp_stmt(Token **rest, Token *tok); static Node *dbg_stmt(Token **rest, Token *tok); static Node *wrt_stmt(Token **rest, Token *tok); +static Node *err_stmt(Token **rest, Token *tok); static Node *red_stmt(Token **rest, Token *tok); static Node *postfix(Token **rest, Token *tok); static Node *assign_stmt(Token **rest, Token *tok); @@ -811,6 +813,8 @@ stmt(Token **rest, Token *tok) return slp_stmt(rest, tok); if (equal(tok, "wrt")) return wrt_stmt(rest, tok); + if (equal(tok, "err")) + return err_stmt(rest, tok); if (equal(tok, "loop")) return loop_stmt(rest, tok); if (equal(tok, "break")) @@ -928,6 +932,16 @@ wrt_stmt(Token **rest, Token *tok) } static Node * +err_stmt(Token **rest, Token *tok) +{ + Token *const og = tok; + tok = skip(tok, "err"); + Node *const node = new_unary(NOD_ERR_STMT, og, expr(&tok, tok)); + *rest = skip(tok, ";"); + return node; +} + +static Node * red_stmt(Token **rest, Token *tok) { Token *const og = tok; @@ -1323,6 +1337,11 @@ gen_stmt(Node *node, Node *fname, int break_lbl) printf("\tWRT\n"); depth -= 1; break; + case NOD_ERR_STMT: + gen_expr(node->lhs); + printf("\tERR\n"); + depth -= 1; + break; case NOD_RED_STMT: printf("\tRED\n"); gen_expr(node->lhs); @@ -66,4 +66,5 @@ test "$1" "global a, b = 6, c = 4; main() { dbg b; dbg c; }" test "$1" "main() { local a = 5, b = 7, c; dbg a; dbg b; }" test "$1" "main() { dbg 5 % 3; }" test "$1" "main() { dbg [{1, 2, 3} + 2]; dbg [{1, 2, 3}]; }" +test "$1" "main() { err 'u'; }" rm -f build/tmp.* |