aboutsummaryrefslogtreecommitdiff
path: root/src/cljcc/tacky.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/cljcc/tacky.clj')
-rw-r--r--src/cljcc/tacky.clj8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/cljcc/tacky.clj b/src/cljcc/tacky.clj
index 5451f78..1b339d9 100644
--- a/src/cljcc/tacky.clj
+++ b/src/cljcc/tacky.clj
@@ -4,7 +4,8 @@
[cljcc.lexer :as l]
[cljcc.util :as u]
[cljcc.parser :as p]
- [cljcc.analyzer :as a]))
+ [cljcc.analyzer :as a]
+ [cljcc.symbols :as symbols]))
(defn- variable
([]
@@ -379,8 +380,9 @@
(dissoc :body)
(assoc :instructions instructions))))
-(defn tacky-generate [{ast :block}]
- (let [defined? (fn [x] (seq (:body x)))]
+(defn tacky-generate [{ast :block symbols :decl-name->symbol}]
+ (let [_ (symbols/reset-symbols symbols)
+ defined? (fn [x] (or (= (:identifier x) "main") (seq (:body x))))]
(->> ast
(filter defined?)
(map function-definition->tacky-function))))