summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-06-11 04:09:27 +0200
committerkdx <kikoodx@paranoici.org>2023-06-11 04:09:27 +0200
commitf5131c24008913591c42dbb8612128172b0ca0f9 (patch)
treec1e72c7298f06d5c6ba9ac96d0244a78f49b9f16
parent6d375a705510f3e7a92f300f2534b5d682f2a564 (diff)
downloadgolem-f5131c24008913591c42dbb8612128172b0ca0f9.tar.gz
dbg statement
-rw-r--r--src/main.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 89089f5..938860c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -179,6 +179,7 @@ typedef enum {
NOD_RETURN_STMT,
NOD_BREAK_STMT,
NOD_SLP_STMT,
+ NOD_DBG_STMT,
NOD_WRT_STMT,
NOD_ASSIGN_STMT,
NOD_IFELSE_STMT,
@@ -304,6 +305,7 @@ static Node *expr_stmt(Token **rest, Token *tok);
static Node *return_stmt(Token **rest, Token *tok);
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 *assign_stmt(Token **rest, Token *tok);
static Node *ifelse_stmt(Token **rest, Token *tok);
@@ -595,6 +597,8 @@ stmt(Token **rest, Token *tok)
return block_stmt(rest, tok);
if (equal(tok, "if"))
return ifelse_stmt(rest, tok);
+ if (equal(tok, "dbg"))
+ return dbg_stmt(rest, tok);
if (equal(tok, "slp"))
return slp_stmt(rest, tok);
if (equal(tok, "wrt"))
@@ -674,6 +678,15 @@ slp_stmt(Token **rest, Token *tok)
}
static Node *
+dbg_stmt(Token **rest, Token *tok)
+{
+ tok = skip(tok, "dbg");
+ Node *const node = new_unary(NOD_DBG_STMT, expr(&tok, tok));
+ *rest = skip(tok, ";");
+ return node;
+}
+
+static Node *
wrt_stmt(Token **rest, Token *tok)
{
tok = skip(tok, "wrt");
@@ -912,6 +925,12 @@ gen_stmt(Node *node, Node *fname, int break_lbl)
case NOD_SLP_STMT:
printf("\tSLP\n");
break;
+ case NOD_DBG_STMT:
+ gen_expr(node->lhs);
+ printf("\tDBG\n");
+ printf("\tPOP\n");
+ depth -= 1;
+ break;
case NOD_WRT_STMT:
gen_expr(node->lhs);
printf("\tWRT\n");