@@ -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
373374end
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-
389376macro api (cmd:: Symbol , exprs... )
390377 _api ((@static V6_COMPAT ? current_module () : @__MODULE__ ), cmd, exprs)
391378end
0 commit comments