aboutsummaryrefslogtreecommitdiff
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;
}