#!/usr/bin/env hy
(import os.path)
(import hy.compiler)
(import hy.core)
(setv *core-path* (os.path.dirname hy.core.--file--))
(defn collect-macros [collected-names opened-file]
(while True
(try
(let [data (read opened-file)]
(if (and (in (first data)
'(defmacro defmacro/g! defn))
(not (.startswith (second data) "_")))
(.add collected-names (second data))))
(except [e EOFError] (break)))))
(defmacro core-file [filename]
`(open (os.path.join *core-path* ~filename)))
(defmacro contrib-file [filename]
`(open (os.path.join *core-path* ".." "contrib" ~filename)))
(defn collect-core-names []
(doto (set)
(.update hy.core.language.*exports*)
(.update hy.core.shadow.*exports*)
(collect-macros (core-file "macros.hy"))
(collect-macros (core-file "bootstrap.hy"))))