From 6d375a705510f3e7a92f300f2534b5d682f2a564 Mon Sep 17 00:00:00 2001 From: kdx Date: Sun, 11 Jun 2023 03:51:05 +0200 Subject: slp statement --- samples/move.golem | 9 +++++++++ src/main.c | 14 ++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 samples/move.golem diff --git a/samples/move.golem b/samples/move.golem new file mode 100644 index 0000000..2efbe80 --- /dev/null +++ b/samples/move.golem @@ -0,0 +1,9 @@ +define input = 0xbffe; +define screen = 0xbfff; + +main() + loop { + slp; + update(); + draw(); + } diff --git a/src/main.c b/src/main.c index eaa4bf3..89089f5 100644 --- a/src/main.c +++ b/src/main.c @@ -178,6 +178,7 @@ typedef enum { NOD_EXPR_STMT, NOD_RETURN_STMT, NOD_BREAK_STMT, + NOD_SLP_STMT, NOD_WRT_STMT, NOD_ASSIGN_STMT, NOD_IFELSE_STMT, @@ -302,6 +303,7 @@ static Node *block_stmt(Token **rest, Token *tok); 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 *wrt_stmt(Token **rest, Token *tok); static Node *assign_stmt(Token **rest, Token *tok); static Node *ifelse_stmt(Token **rest, Token *tok); @@ -593,6 +595,8 @@ stmt(Token **rest, Token *tok) return block_stmt(rest, tok); if (equal(tok, "if")) return ifelse_stmt(rest, tok); + if (equal(tok, "slp")) + return slp_stmt(rest, tok); if (equal(tok, "wrt")) return wrt_stmt(rest, tok); if (equal(tok, "loop")) @@ -662,6 +666,13 @@ break_stmt(Token **rest, Token *tok) return new_node(NOD_BREAK_STMT); } +static Node * +slp_stmt(Token **rest, Token *tok) +{ + *rest = skip(skip(tok, "slp"), ";"); + return new_node(NOD_SLP_STMT); +} + static Node * wrt_stmt(Token **rest, Token *tok) { @@ -898,6 +909,9 @@ gen_stmt(Node *node, Node *fname, int break_lbl) error("break statement outside of loop"); printf("\tJMP ,__lbl_%x\n", break_lbl); break; + case NOD_SLP_STMT: + printf("\tSLP\n"); + break; case NOD_WRT_STMT: gen_expr(node->lhs); printf("\tWRT\n"); -- cgit v1.2.3