38 lines
911 B
Text
38 lines
911 B
Text
|
#!/usr/bin/env hy
|
||
|
|
||
|
(import os.path)
|
||
|
|
||
|
(import hy.compiler)
|
||
|
(import hy.core)
|
||
|
|
||
|
|
||
|
;; absolute path for 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"))))
|