enable includes to have multiple targets #35

Merged
alex-eg merged 1 commits from make-include-take-multiple-args into main 2026-09-26 17:22:45 +02:00
2 changed files with 25 additions and 1 deletions

View File

@@ -72,7 +72,7 @@
((or ('var . _) ((or ('var . _)
('pub 'var . _) ('pub 'var . _)
('extern 'var . _)) (process-global-var sex-form acc)) ('extern 'var . _)) (process-global-var sex-form acc))
(('include _) (cons sex-form acc)) (('include . includes) (process-includes sex-form includes acc))
((or ('define name . _) ((or ('define name . _)
('pub 'define name . _)) ('pub 'define name . _))
(add-define name sex-form) (add-define name sex-form)
@@ -92,6 +92,17 @@
(else (sex-error sex-form "unknown top level form" sex-form)))) (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 <inc>) 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) (define (process-imports module-public-forms acc)
;; consume (import ...) form and process imports so ;; consume (import ...) form and process imports so
;; data types end up in types db ;; data types end up in types db

View File

@@ -115,4 +115,17 @@
(union t-doc-val ((i int) (f float)))) (union t-doc-val ((i int) (f float))))
(semen-process (semen-process
'((union t-doc-val "Either." ((i int) (f float)))))) '((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))))
) )