From dac5e14a0ebe873cbf454b24d3c9001d1f3a4428 Mon Sep 17 00:00:00 2001 From: Fredrik Robertsen Date: Sun, 29 Mar 2026 17:57:22 +0200 Subject: [PATCH] ps5: generate_statement --- ps5/src/generator.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ps5/src/generator.c b/ps5/src/generator.c index 9d17000..8ed1c59 100644 --- a/ps5/src/generator.c +++ b/ps5/src/generator.c @@ -146,6 +146,7 @@ static void generate_function(symbol_t* function) } // TODO (Task 4): the function body can be sent to generate_statement() + generate_statement(function->node); // TODO (Task 3.2): Emit the epilogue, including a label and a default return value (0) LABEL(".%s.epilogue", function->name); @@ -197,6 +198,28 @@ static void generate_statement(node_t* node) // The statements you must handle are BLOCK, ASSIGNMENT_STATEMENT, // PRINT_STATEMENT, RETURN_STATEMENT and FUNCTION_CALL. // Statements of type LOCAL_VARIABLE should be ignored. + for (int i = 0; i < node->n_children; i++) { + node_t *child = node->children[i]; + switch (child->type) { + case BLOCK: + node_t list = child->children[0]; + for (int j = 0; j < list->n_children; j++) + generate_statement(list->children[j]); + break; + case ASSIGNMENT_STATEMENT: + generate_assignment_statement(child); + break; + case PRINT_STATEMENT: + generate_print_statement(child); + break; + case RETURN_STATEMENT: + generate_return_statement(child); + break; + case FUNCTION_CALL: + generate_function_call(child); + break; + } + } } static void generate_safe_printf(void)