forked from hylang/hy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement minimal macro namespacing and add tests
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#1268, closes hylang#1650, closes hylang#1416.
- Loading branch information
1 parent
fc94254
commit 20393df
Showing
7 changed files
with
258 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
;; 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)) |
Oops, something went wrong.