summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-07-23 01:24:26 +0200
committerkdx <kikoodx@paranoici.org>2023-07-23 01:24:30 +0200
commit6d44bcf1b9cdd2ad7eb9bf9bafea4df34d122c98 (patch)
tree511a42f1279791355f4f3d13e466dcfcac89f482
parent9a5df4a563eace94aa461d6eb96ee3a29c92a6a7 (diff)
downloadgolem-6d44bcf1b9cdd2ad7eb9bf9bafea4df34d122c98.tar.gz
err builtin
-rw-r--r--src/main.c19
-rwxr-xr-xtesting.sh1
2 files changed, 20 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 1733b6e..10a78fc 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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);
diff --git a/testing.sh b/testing.sh
index 4b3955f..9a248e7 100755
--- a/testing.sh
+++ b/testing.sh
@@ -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.*