diff options
Diffstat (limited to 'cljcc-compiler/src/cljcc/cljcc.cljc')
| -rw-r--r-- | cljcc-compiler/src/cljcc/cljcc.cljc | 49 |
1 files changed, 0 insertions, 49 deletions
diff --git a/cljcc-compiler/src/cljcc/cljcc.cljc b/cljcc-compiler/src/cljcc/cljcc.cljc deleted file mode 100644 index 742c1c2..0000000 --- a/cljcc-compiler/src/cljcc/cljcc.cljc +++ /dev/null @@ -1,49 +0,0 @@ -(ns cljcc.cljcc - (:require - [cljcc.lexer :as lexer] - [cljcc.parser :as parser] - [cljcc.tacky :as tacky] - [cljcc.analyze.core :as analyzer] - [cljcc.compiler :as codegen] - [cljcc.emit :as emit]) - (:gen-class)) - -#?(:clj (set! *warn-on-reflection* true)) - -(def valid-os-targets #{:mac :linux}) -(def valid-stages #{:lex :parse :validate :tacky :codegen :emit}) - -(defn run - "Compiles source input using specified compiler options. - - Parameters: - source - Source C file. - options - Map of compiler configuration options. - - Options map: - :target - Map of target platform settings - :os - Target OS #{:linux :mac} - :stage - Which stage to generate #{:lex :parse :validate :tacky :codegen :emit} - - Returns generated AST for specified stage." - [source & {:keys [options] :or {options {}}}] - (let [default-options {:target {:os :linux} - :stage :emit} - merged-options (merge default-options options) - stage (:stage merged-options) - target-os (:os (:target merged-options)) - _ (assert (stage valid-stages) "Invalid stage for compilation.") - _ (assert (target-os valid-os-targets) "Invalid operating system.") - stages [lexer/lex parser/parse - analyzer/validate tacky/tacky-generate - codegen/assembly emit/emit] - stage-idx (condp = stage - :lex 1 - :parse 2 - :validate 3 - :tacky 4 - :codegen 5 - :emit 6) - stages-to-run (vec (take stage-idx stages))] - (reduce (fn [acc f] (f acc)) source stages-to-run))) - |
