42 lines
1.0 KiB
Plaintext
42 lines
1.0 KiB
Plaintext
(import "./stdlib.phi" (slice contains indent))
|
|
(import "./compiler/parse.phi" (Parser tokenize))
|
|
(import "./compiler/emit_js.phi" (JsEmitter))
|
|
|
|
(fn print_expr (expr depth) (do
|
|
(let (ty line value) expr)
|
|
(if (== ty "list") (do
|
|
(println "%(% %" (indent depth) ty line)
|
|
(for e value (do
|
|
(print_expr e (+ depth 1))
|
|
))
|
|
(println "%)" (indent depth))
|
|
) (do
|
|
(println "%%" (indent depth) expr)
|
|
))
|
|
))
|
|
|
|
(let (input_filename_rel output_filename_rel) (get_args))
|
|
|
|
(let input_filename (fs_resolve (fs_cwd) input_filename_rel))
|
|
(let output_filename (fs_resolve (fs_cwd) output_filename_rel))
|
|
|
|
(println "compiling '%'..." input_filename)
|
|
(let text (read_text_file input_filename))
|
|
|
|
(let tokens (tokenize text))
|
|
(let parser (Parser tokens))
|
|
(let (parse) parser)
|
|
(let ast (parse))
|
|
(let emitter (JsEmitter ast input_filename))
|
|
(let (emit) emitter)
|
|
(let js_code (emit))
|
|
|
|
// (println "=== js ===")
|
|
// (println js_code)
|
|
|
|
(write_text_file output_filename js_code)
|
|
(println "writing '%'" output_filename)
|
|
|
|
|
|
|