From 1ab87e6f9bf9ff8f81b101ae95e54cccdda1ba84 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Thu, 14 May 2015 17:29:42 -0400 Subject: [PATCH] Added support for library (include) directives --- cyclone.scm | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/cyclone.scm b/cyclone.scm index abd7bfab..b583e75f 100644 --- a/cyclone.scm +++ b/cyclone.scm @@ -48,11 +48,22 @@ (cond ((library? (car input-program)) - (set! program? #f) - (set! lib-name (lib:name (car input-program))) - (set! lib-exports (lib:exports (car input-program))) - (set! imports (lib:imports (car input-program))) - (set! input-program (lib:body (car input-program)))) + (let ((includes (lib:includes (car input-program)))) + (set! program? #f) + (set! lib-name (lib:name (car input-program))) + (set! lib-exports (lib:exports (car input-program))) + (set! imports (lib:imports (car input-program))) + (set! input-program (lib:body (car input-program))) + ;; Prepend any included files into the begin section + (if (not (null? includes)) + (for-each + (lambda (include) + (set! input-program + (append (read-file (string-append + (lib:import->path lib-name) + include)) + input-program))) + includes)))) ((tagged-list? 'import (car input-program)) (set! imports (cdar input-program)) (set! input-program (cdr input-program))