summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-06-10 15:09:52 +0200
committerkdx <kikoodx@paranoici.org>2023-06-10 15:09:52 +0200
commite999ab159ff54d45f91c8c7c10ee2367a504c233 (patch)
treefae2607121e523059a6464add123dc855eedd545 /src
parent11a2e237efbadd3877f94e4352bc894ef9e77a2b (diff)
downloadgolem-e999ab159ff54d45f91c8c7c10ee2367a504c233.tar.gz
global array
Diffstat (limited to 'src')
-rw-r--r--src/main.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/main.c b/src/main.c
index a67f00c..3c39975 100644
--- a/src/main.c
+++ b/src/main.c
@@ -87,7 +87,7 @@ is_punct(const char *p)
if (strchr("=!<>", p[0]) != NULL && p[1] == '=')
return 2;
- return (strchr("+-/*()<>,;{}=", p[0]) != NULL);
+ return (strchr("+-/*()<>,;{}[]=", p[0]) != NULL);
}
static Token *
@@ -324,6 +324,13 @@ global(Token **rest, Token *tok)
node->type = NOD_GLOBAL;
tok = tok->next;
+
+ if (equal(tok, "[")) {
+ tok = tok->next;
+ node->lhs = new_num(get_number(tok));
+ tok = skip(tok->next, "]");
+ }
+
if (equal(tok, "=")) {
tok = tok->next;
node->val = get_number(tok);
@@ -687,7 +694,13 @@ static void
gen_globaldec(Node *node)
{
printf("@__gl_%.*s\n", node->len, node->loc);
- printf("\tLIT %04x\n", node->val);
+ if (node->lhs != NULL) {
+ printf("\tLIT ,__gla_%.*s\n", node->len, node->loc);
+ printf("@__gla_%.*s\n", node->len, node->loc);
+ for (int i = 0; i < node->lhs->val; i++)
+ printf("\tLIT %04x\n", node->val);
+ } else
+ printf("\tLIT %04x\n", node->val);
}
static void