summaryrefslogtreecommitdiff
path: root/src/ast_pretty_printer.c
diff options
context:
space:
mode:
authorCarlos Maniero <carlos@maniero.me>2023-05-10 16:07:39 -0300
committerCarlos Maniero <carlos@maniero.me>2023-05-10 17:35:03 -0300
commit75639fbf01bd6ae1212521b6cf822025eb8b598d (patch)
tree49709154c437cfbc01568f1e0c9abc8574fd3a54 /src/ast_pretty_printer.c
parent2cf0bcb409f3a1fd298b664103d57c945c6349f5 (diff)
namespaces: Add a namespace structure that represents a file
We have been always parsing a single function. Since we want to have multiple functions in a near future, this patch introduces an namespace that represents an entire file. To ensure a function is defined inside a namespace, a helper function was created. Today our ast_node structure is highly exposed, and this is something that Johnny and I have been discussed. So then, this is a first step to try to protected the code generation from our ast tree. Signed-off-by: Carlos Maniero <carlos@maniero.me>
Diffstat (limited to 'src/ast_pretty_printer.c')
-rw-r--r--src/ast_pretty_printer.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/ast_pretty_printer.c b/src/ast_pretty_printer.c
index b14bf34..f5fcf70 100644
--- a/src/ast_pretty_printer.c
+++ b/src/ast_pretty_printer.c
@@ -65,6 +65,19 @@ ast_pretty_printer_print_ast(ast_pretty_printer_t *printer, ast_node_t *ast)
assert(ast);
switch (ast->kind) {
+ case AST_NAMESPACE:
+ ast_pretty_printer_printf(printer, "Namespace\n");
+ ast_pretty_printer_add_indentation(printer);
+ {
+ for (size_t i = 0; i < ast->data.ns.nodes->size; ++i) {
+ if (i + 1 >= ast->data.ns.nodes->size) {
+ ast_pretty_printer_set_lst_children(printer);
+ }
+ ast_pretty_printer_print_ast(printer, vector_at(ast->data.ns.nodes, i));
+ }
+ ast_pretty_printer_rm_indentation(printer);
+ }
+ break;
case AST_IF_STMT: {
ast_if_stmt_t if_stmt = ast->data.if_stmt;
ast_pretty_printer_printf(printer, "IfStmt\n");