about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMel <mel@rnrd.eu>2026-05-24 18:39:19 +0200
committerMel <mel@rnrd.eu>2026-05-24 18:39:19 +0200
commit99d57398863ab1734a9f81c2d336f82dab556383 (patch)
treeb6cde2a4ccb5a8fb174faf58a6019aa5a11bdd31
parenta76fd9b5af153773273121c7aec2a9cbeed1dfb7 (diff)
downloadcatskill-99d57398863ab1734a9f81c2d336f82dab556383.tar.zst
catskill-99d57398863ab1734a9f81c2d336f82dab556383.zip
Emit c-header pragmas as includes
Signed-off-by: Mel <mel@rnrd.eu>
-rw-r--r--boot/lower.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/boot/lower.c b/boot/lower.c
index 65eb18c..c72ad97 100644
--- a/boot/lower.c
+++ b/boot/lower.c
@@ -783,13 +783,25 @@ lower_pass_1_fill_bodies(struct Lower_Context* ctx, struct Tree* tree)
         }
 
         if (stmt->kind == TREE_STATEMENT_PRAGMA) {
-            lower_push_error(
-                ctx->unit,
-                (struct Lower_Error){
-                    .kind = LOWER_ERROR_UNIMPLEMENTED,
-                    .span = stmt->span,
-                    .detail = string_from_static_c_string("top-level pragmas"),
-                });
+            for (struct Tree_Pragma* pragma = stmt->value.pragma.inner; pragma;
+                 pragma = pragma->next) {
+                if (pragma->type == TREE_PRAGMA_C_HEADER && pragma->argument_count >= 1
+                    && pragma->arguments[0].type == TREE_PRAGMA_ARGUMENT_NAME_OR_STRING) {
+                    struct Import import = {
+                        .path = pragma->arguments[0].value.name_or_string,
+                        .span = pragma->span,
+                    };
+                    array_push(&ctx->unit->imports, &import);
+                } else {
+                    lower_push_error(
+                        ctx->unit,
+                        (struct Lower_Error){
+                            .kind = LOWER_ERROR_UNIMPLEMENTED,
+                            .span = pragma->span,
+                            .detail = string_from_static_c_string("this pragma kind"),
+                        });
+                }
+            }
             continue;
         }