You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Use a curried helper for module-local eval/include
In #55466, the automatically added `include` method for non-bare modules
was adjusted to conform the signature to the version of those methods
in Main (defined in sysimg.jl, since `Main` is technically a bare module).
Unfortunately, this broke some downstream packages which overload Base.include
with additional functionality and got broken by the additional type restriction.
The motivation in #55466 was to give a slightly nicer MethodError. While I don't
think this is per-se a particularly strong justification, I do agree that it's
awkward for the `Main` version of these functions to have (marginally) different
behavior than the version of these functions that gets introduced automatically in
new modules (Which has been the case ever since [1], which added the AbstractString
restriction in `Main`, but not in the auto-generated versions). This is particularly
true, because we use the `Main` version to document the auto-introduction of these
methods, which has regularly been a point of confusion.
This PR tries to address this problem once and for all, but just not generating
special methods into every new module. Instead, there are curried helpers for
eval and include in Core and Base (respectively), which can be added to a module
simply by doing `const include = IncludeInto(MyModule)` (and similarly for `eval`).
As before, this happens automatically for non-bare modules. It thus conforms the
behavior of the `Main` version of these functions and the auto-generated versions
by construction. Additionally, it saves us having to generate all the additional
code/types/objects, etc associated with having extra generic functions in each
new module. The impact of this isn't huge, because there aren't that many modules,
but it feels conceptually nicer.
There is a little bit of extra work in this PR because we have special snowflake
backtrace printing code for the `include` machinery, which needs adjusting, but
other than that the change is straightforward.
[1] 957848b
0 commit comments