mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-23 20:15:05 +02:00
Issue #154 - Handle many top-level prog imports
This commit is contained in:
parent
ca048d5538
commit
ca3074e6bc
1 changed files with 35 additions and 7 deletions
42
cyclone.scm
42
cyclone.scm
|
@ -80,13 +80,11 @@
|
|||
input-program)))
|
||||
(reverse includes))))) ;; Append code in same order as the library's includes
|
||||
(else
|
||||
;; Handle import, if present
|
||||
(cond
|
||||
((tagged-list? 'import (car input-program))
|
||||
(set! imports (cdar input-program))
|
||||
(set! input-program (cdr input-program))
|
||||
;(error (list 'imports (cdar input-program)))
|
||||
))
|
||||
;; Handle imports, if present
|
||||
(let ((reduction (import-reduction input-program)))
|
||||
(set! imports (car reduction))
|
||||
(set! input-program (cdr reduction)))
|
||||
|
||||
;; Handle any C headers
|
||||
(let ((headers (lib:include-c-headers `(dummy dummy ,@input-program))))
|
||||
(cond
|
||||
|
@ -285,6 +283,36 @@
|
|||
src-file)
|
||||
(return '())))) ;; No codes to return
|
||||
|
||||
;; Read top-level imports from a program and return a cons of:
|
||||
;; - imports
|
||||
;; - remaining program
|
||||
(define (import-reduction expr)
|
||||
(let ((results
|
||||
(foldl
|
||||
(lambda (ex accum)
|
||||
(define (process e)
|
||||
(cond
|
||||
((tagged-list? 'import e)
|
||||
(cons (cons (cdr e) (car accum)) (cdr accum)))
|
||||
(else
|
||||
(cons (car accum) (cons e (cdr accum))))))
|
||||
(cond
|
||||
;; TODO: this part does not work yet, would need to load
|
||||
;; the base macro environment first
|
||||
;((tagged-list? 'cond-expand ex)
|
||||
; (let ((ex* (expand ex (macro:get-env) '())))
|
||||
; (trace:info `(DEBUG ,ex* ,ex))
|
||||
; (if (tagged-list? 'import ex*)
|
||||
; (process ex*)
|
||||
; (process ex))))
|
||||
(else
|
||||
(process ex))))
|
||||
(cons '() '())
|
||||
expr)))
|
||||
(cons
|
||||
(apply append (reverse (car results)))
|
||||
(reverse (cdr results)))))
|
||||
|
||||
;; TODO: longer-term, will be used to find where cyclone's data is installed
|
||||
(define (get-data-path)
|
||||
".")
|
||||
|
|
Loading…
Add table
Reference in a new issue