diff options
author | kdx <kikoodx@paranoici.org> | 2023-06-10 15:09:52 +0200 |
---|---|---|
committer | kdx <kikoodx@paranoici.org> | 2023-06-10 15:09:52 +0200 |
commit | e999ab159ff54d45f91c8c7c10ee2367a504c233 (patch) | |
tree | fae2607121e523059a6464add123dc855eedd545 /src | |
parent | 11a2e237efbadd3877f94e4352bc894ef9e77a2b (diff) | |
download | golem-e999ab159ff54d45f91c8c7c10ee2367a504c233.tar.gz |
global array
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -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 |