application/octet-stream
•
1.38 KB
•
35 lines
#!/usr/bin/env nujel
#| In here we use our bootstrap runtime to load, eval and finally precompile
| the Nujel standard library, the eval is necessary so we can make use of macros
| that are not within our bootstrap runtime (which is just using an old
| precompiled stdlib).
|#
[defn file/compile [path environment]
"Compile a Nujel source file into optimized object code"
[def source [cons 'do [read [file/read path]]]]
[def object-code [-> [macroexpand/forms source environment]
bytecompile
assemble*]]
[file/write [if object-code [str/write object-code] ""]
[cat [path/without-extension path] ".no"]]
object-code]
[def environment [environment*]]
[def ext-nuj? [path/ext?! "nuj"]]
[def stdlib-files [-> [directory/read-recursive "stdlib"]
[append [directory/read-recursive "binlib"]]
[flatten]
[filter ext-nuj?]
[sort]]]
#| If something happens, we just print the responsible error and exit immediately,
| since we can't really fix things, we could only make things worse.
|#
[try [fn [err]
[println "Exception during stdlib compilation"]
[display/error err]
[exit 2]]
[for-in [cur-path stdlib-files]
[println [cat [ansi-green " [NUJ] "] cur-path]]
[file/compile cur-path environment]]]