-
Andy Wingo authored
Previously I was trying to keep (hoot core-syntax) be just the primitive syntax, and then redefine everything as part of boot. But that does have a downside that we don't have many primitives with which to define the derived syntax, and also that when we're compiling without the macro expander we are bloating the compilation unit with needless definitions. Instead there is a different way, which is to make the expander itself provide the environment for (hoot core-syntax). In this way the definitions stay in one place, which is good for free-identifier=?, and we don't need to mutate those definitions in place. For the core procedures, we also define a module, except there we can swap out their values using set!. So, this un-does some work. On the other hand we define new (hoot gensym) and (hoot inline-wasm) modules.
Andy Wingo authoredPreviously I was trying to keep (hoot core-syntax) be just the primitive syntax, and then redefine everything as part of boot. But that does have a downside that we don't have many primitives with which to define the derived syntax, and also that when we're compiling without the macro expander we are bloating the compilation unit with needless definitions. Instead there is a different way, which is to make the expander itself provide the environment for (hoot core-syntax). In this way the definitions stay in one place, which is good for free-identifier=?, and we don't need to mutate those definitions in place. For the core procedures, we also define a module, except there we can swap out their values using set!. So, this un-does some work. On the other hand we define new (hoot gensym) and (hoot inline-wasm) modules.
Loading