summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-06-11 03:51:05 +0200
committerkdx <kikoodx@paranoici.org>2023-06-11 03:51:05 +0200
commit6d375a705510f3e7a92f300f2534b5d682f2a564 (patch)
tree462a1e4d339b210f6d1a8a695b25fc82afde3130
parent0fc731ad0f750e944513b77abfa0a8938667a31c (diff)
downloadgolem-6d375a705510f3e7a92f300f2534b5d682f2a564.tar.gz
slp statement
-rw-r--r--samples/move.golem9
-rw-r--r--src/main.c14
2 files changed, 23 insertions, 0 deletions
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"))
@@ -663,6 +667,13 @@ break_stmt(Token **rest, Token *tok)
}
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)
{
tok = skip(tok, "wrt");
@@ -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");