1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
<span class="hljs-meta">#!/usr/bin/env hy</span>
(<span class="hljs-name"><span class="hljs-builtin-name">import</span></span> os.path)
(<span class="hljs-name"><span class="hljs-builtin-name">import</span></span> hy.compiler)
(<span class="hljs-name"><span class="hljs-builtin-name">import</span></span> hy.core)
<span class="hljs-comment">;; absolute path for Hy core</span>
(<span class="hljs-name"><span class="hljs-builtin-name">setv</span></span> *core-path* (<span class="hljs-name">os.path.dirname</span> hy.core.--file--))
(<span class="hljs-name"><span class="hljs-builtin-name">defn</span></span> collect-macros [collected-names opened-file]
(<span class="hljs-name"><span class="hljs-builtin-name">while</span></span> <span class="hljs-literal">True</span>
(<span class="hljs-name"><span class="hljs-builtin-name">try</span></span>
(<span class="hljs-name"><span class="hljs-builtin-name">let</span></span> [data (<span class="hljs-name"><span class="hljs-builtin-name">read</span></span> opened-file)]
(<span class="hljs-name"><span class="hljs-builtin-name">if</span></span> (<span class="hljs-name"><span class="hljs-builtin-name">and</span></span> (<span class="hljs-name"><span class="hljs-builtin-name">in</span></span> (<span class="hljs-name"><span class="hljs-builtin-name">first</span></span> data)
'(<span class="hljs-name"><span class="hljs-builtin-name">defmacro</span></span> defmacro/g! defn))
(<span class="hljs-name"><span class="hljs-builtin-name">not</span></span> (<span class="hljs-name">.startswith</span> (<span class="hljs-name"><span class="hljs-builtin-name">second</span></span> data) <span class="hljs-string">"_"</span>)))
(<span class="hljs-name">.add</span> collected-names (<span class="hljs-name"><span class="hljs-builtin-name">second</span></span> data))))
(<span class="hljs-name"><span class="hljs-builtin-name">except</span></span> [e EOFError] (<span class="hljs-name"><span class="hljs-builtin-name">break</span></span>)))))
(<span class="hljs-name"><span class="hljs-builtin-name">defmacro</span></span> core-file [filename]
`(<span class="hljs-name"><span class="hljs-builtin-name">open</span></span> (<span class="hljs-name">os.path.join</span> *core-path* ~filename)))
(<span class="hljs-name"><span class="hljs-builtin-name">defmacro</span></span> contrib-file [filename]
`(<span class="hljs-name"><span class="hljs-builtin-name">open</span></span> (<span class="hljs-name">os.path.join</span> *core-path* <span class="hljs-string">".."</span> <span class="hljs-string">"contrib"</span> ~filename)))
(<span class="hljs-name"><span class="hljs-builtin-name">defn</span></span> collect-core-names []
(<span class="hljs-name"><span class="hljs-builtin-name">doto</span></span> (<span class="hljs-name">set</span>)
(<span class="hljs-name">.update</span> hy.core.language.*exports*)
(<span class="hljs-name">.update</span> hy.core.shadow.*exports*)
(<span class="hljs-name">collect-macros</span> (<span class="hljs-name">core-file</span> <span class="hljs-string">"macros.hy"</span>))
(<span class="hljs-name">collect-macros</span> (<span class="hljs-name">core-file</span> <span class="hljs-string">"bootstrap.hy"</span>))))
|