Skip to content

Commit eb11d3c

Browse files
committed
Ensure that modules are copied
1 parent 15b76b9 commit eb11d3c

File tree

1 file changed

+11
-24
lines changed

1 file changed

+11
-24
lines changed

src/ModuleInterfaceTools.jl

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,14 @@ m_eval(expr) = m_eval(cur_mod(), expr)
9494
9595
* freeze # use at end of module to freeze API
9696
97-
* list <modules>... # list API(s) of given modules (or current if none given)
97+
* list <modules>... # list API(s) of given modules (or current if none given)
9898
99-
* use <modules>... # use, without importing (i.e. can't extend)
100-
* use! <modules>... # use, without importing (i.e. can't extend), "export"
101-
* test <modules>... # using public and develop APIs, for testing purposes
102-
* extend <modules>... # for development, imports api & dev, use api & dev definitions
99+
* use <modules>... # use, without importing (i.e. can't extend)
100+
* use! <modules>... # use, without importing (i.e. can't extend), "export"
101+
* test <modules>... # using public and develop APIs, for testing purposes
102+
* extend <modules>... # for development, imports api & dev, use api & dev definitions
103103
* extend! <modules>... # for development, imports api & dev, use api & dev definitions, "export"
104-
* export <modules>... # export public definitions
104+
* export <modules>... # export public definitions
105105
106106
* base <names...> # Add functions from Base that are part of the API (extendible)
107107
* base! <names...> # Add functions from Base or define them if not in Base
@@ -263,8 +263,8 @@ function _api_use(curmod, modules, cpy::Bool)
263263
mod = m_eval(curmod, nam)
264264
if has_api(mod)
265265
api = get_api(mod)
266-
_do_list(curmod, cpy, :using, mod, nam, :public, api)
267-
_do_list(curmod, cpy, :using, mod, nam, :public!, api)
266+
_do_list(curmod, cpy, :using, mod, nam, :public, api)
267+
_do_list(curmod, cpy, :using, mod, nam, :public!, api)
268268
else
269269
_do_list(curmod, cpy, :using, mod, nam, :public!, names(mod))
270270
end
@@ -335,21 +335,22 @@ function _api(curmod::Module, cmd::Symbol, exprs)
335335
cmd == :export && return _api_export(curmod, modules)
336336
cmd == :list && return _api_list(curmod, modules)
337337

338+
cpy = (cmd == :use!) || (cmd == :extend!)
339+
338340
for nam in modules
339341
mod = m_eval(curmod, nam)
340342
if has_api(mod)
341343
for sym in getfield(get_api(mod), :modules)
342344
if isdefined(mod, sym)
343345
m_eval(curmod, :(using $nam.$sym))
346+
cpy && m_eval(curmod, :( push!(__tmp_api__.modules, $(QuoteNode(sym)) )))
344347
else
345348
println(_stderr(), "Warning: Exported symbol $sym is not defined in $nam")
346349
end
347350
end
348351
end
349352
end
350353

351-
cpy = (cmd == :use!) || (cmd == :extend!)
352-
353354
cpy && _init_api(curmod)
354355
((cmd == :use || cmd == :use!)
355356
? _api_use(curmod, modules, cpy)
@@ -372,20 +373,6 @@ function _do_list(curmod, cpy, cmd, mod, nam, grp, lst)
372373
end
373374
end
374375

375-
#=
376-
function _do_list(curmod, cpy, cmd, mod, nam, grp, lst)
377-
exp = Expr(cmd, Expr(:(:), _dot_name(nam), _dot_name.(lst)...))
378-
try
379-
m_eval(curmod, exp)
380-
catch ex
381-
println("ModuleInterfaceTools: Error evaluating $exp")
382-
dump(exp)
383-
println(sprint(showerror, ex, catch_backtrace()))
384-
end
385-
cpy && for sym in lst; m_eval(curmod, :( push!(__tmp_api__.$grp, $(QuoteNode(sym)) ))); end
386-
end
387-
=#
388-
389376
macro api(cmd::Symbol, exprs...)
390377
_api((@static V6_COMPAT ? current_module() : @__MODULE__), cmd, exprs)
391378
end

0 commit comments

Comments
 (0)