Reify is hygienic as it stores characters along with identifiers and these trees.
If your macro extension result does not have characters attached to idents (for example, you only have Ident ("x") to point to something named x), then checking the macro extension types will bind x to what is in the area of ββthe call site (or if this area does not have x, you will get a compilation error).
In contrast, when your macro extension has characters for its identifiers, typechecker does not try to re-enable them and simply uses what it has. This means that when re-expressing an expression and using the result in a macro extension, it transfers its characters to the call site. Well, not all characters, for example. local variables or private / protected things cannot be referenced, but references to public declarations are retained.
The bottom line indicates that to check if your macro is hygienic, check to see if your identifiers have these characters either. You can achieve this by confirming or manually assigning symbols to your handmade trees.
source share