diff options
Diffstat (limited to '')
-rw-r--r-- | src/lux/compiler.clj | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/lux/compiler.clj b/src/lux/compiler.clj index 9f6a6cd6c..6d8cd08ff 100644 --- a/src/lux/compiler.clj +++ b/src/lux/compiler.clj @@ -20,7 +20,7 @@ MethodVisitor))) (declare compile-form - compile) + compile-file) (def +prefix+ "lux") @@ -961,10 +961,12 @@ (defcompiler compile-use [::&analyser/use ?file ?alias] (let [module-name (re-find #"[^/]+$" ?file) - source-code (slurp (str "source/" module-name ".lux")) - tokens (&lexer/lex source-code) - syntax (&parser/parse tokens) - bytecode (compile module-name syntax)] + ;; source-code (slurp (str "source/" module-name ".lux")) + ;; tokens (&lexer/lex source-code) + ;; syntax (&parser/parse tokens) + ;; bytecode (compile module-name syntax) + ] + (compile-file module-name) nil)) (let [+int-class+ (->class "java.lang.Integer")] @@ -1075,10 +1077,14 @@ )))) (defn compile-file [name] - (->> (slurp (str "source/" name ".lux")) - &lexer/lex - &parser/parse - (compile name))) + (match ((&parser/parse-all) {::&lexer/source (slurp (str "source/" name ".lux"))}) + [::&util/ok [?state ?forms]] + (let [?forms* (filter identity ?forms)] + (prn '?forms ?forms*) + (compile name ?forms*)) + + [::&util/failure ?message] + (assert false ?message))) (defn compile-all [files] (reset! !state {:name nil @@ -1091,3 +1097,7 @@ :env (list (&analyser/fresh-env 0)) :types &type/+init+}) (dorun (map compile-file files))) + +(comment + (compile-all ["lux"]) + ) |