@@ -165,7 +165,6 @@ function _add_symbols(curmod, grp, exprs)
165165 error (" @api $grp : syntax error $ex " )
166166 end
167167 end
168- # println("symbols: ", symbols)
169168 if grp == :base
170169 for sym in symbols
171170 eval (curmod, :( import Base.$ sym ))
@@ -209,23 +208,24 @@ function _api(curmod::Module, cmd::Symbol, exprs)
209208
210209 for nam in modules
211210 mod = eval (curmod, nam)
212- api = eval (mod, :__api__ )
213- lst = getfield (api, :define_module )
214- for sym in lst
215- eval (curmod, :(using $ mod.$ sym))
211+ for sym in getfield (eval (mod, :__api__ ), :define_module )
212+ eval (curmod, :(using $ nam.$ sym))
216213 end
217214 end
218215
216+ imp = :import
217+ use = :using
218+
219219 if cmd == :extend
220220 for nam in modules
221221 mod = eval (curmod, nam)
222222 if isdefined (mod, :__api__ )
223223 api = eval (mod, :__api__ )
224- _import_list (curmod, api, :Base , :base )
225- _import_list (curmod, api, nam, :public )
226- _import_list (curmod, api, nam, :develop )
227- _using_list (curmod, api, nam, :define_public )
228- _using_list (curmod, api, nam, :define_develop )
224+ _do_list (curmod, imp , api, :Base , :base )
225+ _do_list (curmod, imp , api, nam, :public )
226+ _do_list (curmod, imp , api, nam, :develop )
227+ _do_list (curmod, use, api, nam, :define_public )
228+ _do_list (curmod, use, api, nam, :define_develop )
229229 else
230230 println (" API not found for module: $mod " )
231231 end
@@ -240,28 +240,37 @@ function _api(curmod::Module, cmd::Symbol, exprs)
240240 mod = eval (curmod, nam)
241241 if isdefined (mod, :__api__ )
242242 api = eval (mod, :__api__ )
243- _using_list (curmod, api, nam, :public )
244- _using_list (curmod, api, nam, :define_public )
243+ _do_list (curmod, use , api, nam, :public )
244+ _do_list (curmod, use , api, nam, :define_public )
245245 if cmd == :test
246- _using_list (curmod, api, nam, :public )
247- _using_list (curmod, api, nam, :define_public )
246+ _do_list (curmod, use , api, nam, :public )
247+ _do_list (curmod, use , api, nam, :define_public )
248248 end
249249 end
250250 end
251251
252252 nothing
253253end
254254
255- function _using_list (curmod, api, mod, grp)
256- lst = getfield (api, grp)
257- for sym in lst
258- eval (curmod, :(using $ mod.$ sym))
259- end
260- end
261- function _import_list (curmod, api, mod, grp)
255+ @static V6_COMPAT || (_dot_name (nam) = Expr (:., nam))
256+
257+ function _do_list (curmod, cmd, api, mod, grp)
262258 lst = getfield (api, grp)
263- for sym in lst
264- eval (curmod, :(import $ mod.$ sym))
259+ isempty (lst) && return
260+ @static if V6_COMPAT
261+ length (lst) == 1 && return eval (curmod, Expr (cmd, mod, lst[1 ]))
262+ for nam in lst
263+ eval (curmod, Expr (cmd, mod, nam))
264+ end
265+ else
266+ exp = Expr (cmd, Expr (:(:), _dot_name (mod), _dot_name .(lst)... ))
267+ println (exp)
268+ try
269+ eval (curmod, exp)
270+ catch ex
271+ dump (exp)
272+ println (sprint (showerror, ex, catch_backtrace ()))
273+ end
265274 end
266275end
267276
0 commit comments