From 62316e1e3d6413d03151c3bf851e0f5ba9461843 Mon Sep 17 00:00:00 2001 From: alex-eg Date: Sat, 26 Sep 2026 16:54:51 +0300 Subject: [PATCH] enable includes to have multiple targets --- semen.scm | 13 ++++++++++++- tests/semen.scm | 13 +++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/semen.scm b/semen.scm index 1b4ad85..c6e0da8 100644 --- a/semen.scm +++ b/semen.scm @@ -72,7 +72,7 @@ ((or ('var . _) ('pub 'var . _) ('extern 'var . _)) (process-global-var sex-form acc)) - (('include _) (cons sex-form acc)) + (('include . includes) (process-includes sex-form includes acc)) ((or ('define name . _) ('pub 'define name . _)) (add-define name sex-form) @@ -92,6 +92,17 @@ (else (sex-error sex-form "unknown top level form" sex-form)))) +(define (process-includes sex-form includes acc) + ;; consume (include ...) form and add to acc + ;; (include ) for each include + (let process ((includes includes) + (acc acc)) + (if (null? includes) + acc + (process (cdr includes) + (cons (copy-form-source! sex-form `(include ,(car includes))) + acc))))) + (define (process-imports module-public-forms acc) ;; consume (import ...) form and process imports so ;; data types end up in types db diff --git a/tests/semen.scm b/tests/semen.scm index 3235477..3e685ec 100644 --- a/tests/semen.scm +++ b/tests/semen.scm @@ -115,4 +115,17 @@ (union t-doc-val ((i int) (f float)))) (semen-process '((union t-doc-val "Either." ((i int) (f float)))))) + + ;; Includes + (test '((include stdio.h)) + (semen-process + '((include stdio.h)))) + (test '((include stdio.h) + (include stdlib.h)) + (semen-process + '((include stdio.h + stdlib.h)))) + (test '() + (semen-process + '((include)))) )