From 2bbc04529404bedbc2709ba69cc7a060a8b07111 Mon Sep 17 00:00:00 2001 From: Fredrik Robertsen Date: Sat, 28 Mar 2026 21:22:11 +0100 Subject: [PATCH] ps5: task 2 --- ps5/src/generator.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ps5/src/generator.c b/ps5/src/generator.c index 60ba893..22ece16 100644 --- a/ps5/src/generator.c +++ b/ps5/src/generator.c @@ -76,6 +76,25 @@ static void generate_global_variables(void) // As an example, to set aside 16 bytes and label it .myBytes, write: // DIRECTIVE(".myBytes: .zero 16") + for (int i = 0; i < global_symbols->n_children; i++) { + symbol_t *sym = global_symbols->children[i]; + switch (sym->type) { + case SYMBOL_GLOBAL_VAR: + DIRECTIVE(".%s:\t.zero 8", sym.name); + break; + case SYMBOL_GLOBAL_ARRAY: + node_t num = sym->node->children[1]; + assert(num->type == NUMBER_LITERAL); + int len = num->data.number_literal * 8; + DIRECTIVE(".%s:\t.zero %d", sym.name, len); + break; + case SYMBOL_FUNCTION: + break; + default: + fprintf(stderr, "unexpected global symbol"); + exit(EXIT_FAILURE); + } + } } // Global variable used to make the functon currently being generated accessible from anywhere