010986e8ca
This commit adds just enough namespacing to resolve a macro first in the macro's defining module's namespace (i.e. the module assigned to the `HyASTCompiler`), then in the namespace/module it's evaluated in. Namespacing is accomplished by adding a `module` attribute to `HySymbol`, so that `HyExpression`s can be checked for this definition namespace attribute and their car symbol resolved per the above. As well, a couple tests have been added that cover - the loading of module-level macros - e.g. that only macros defined in the `require`d module are added - the AST generated for `require` - using macros loaded from modules imported via bytecode - the non-local macro namespace resolution described above - a `require`d macro that uses a macro `require` exclusively in its module-level namespace - and that (second-degree `require`d) macros can reference variables within their module-level namespaces. Closes hylang/hy#1268, closes hylang/hy#1650, closes hylang/hy#1416.
26 lines
980 B
Hy
26 lines
980 B
Hy
;; Require all the macros and make sure they don't pollute namespaces/modules
|
|
;; that require `*` from this.
|
|
(require [tests.resources.macros [*]])
|
|
|
|
(defmacro test-module-macro [a]
|
|
"The variable `macro-level-var' here should not bind to the same-named symbol
|
|
in the expansion of `nonlocal-test-macro'."
|
|
(setv macro-level-var "tests.resources.macros.macro-with-require")
|
|
`(nonlocal-test-macro ~a))
|
|
|
|
(deftag test-module-tag [a]
|
|
"The variable `macro-level-var' here should not bind to the same-named symbol
|
|
in the expansion of `nonlocal-test-macro'."
|
|
(setv macro-level-var "tests.resources.macros.macro-with-require")
|
|
`(nonlocal-test-macro ~a))
|
|
|
|
(defmacro test-module-macro-2 [a]
|
|
"The macro `local-test-macro` isn't in this module's namespace, so it better
|
|
be in the expansion's!"
|
|
`(local-test-macro ~a))
|
|
|
|
(deftag test-module-tag-2 [a]
|
|
"The macro `local-test-macro` isn't in this module's namespace, so it better
|
|
be in the expansion's!"
|
|
`(local-test-macro ~a))
|