@@ -165,7 +165,6 @@ function _add_symbols(curmod, grp, exprs)
165
165
error (" @api $grp : syntax error $ex " )
166
166
end
167
167
end
168
- # println("symbols: ", symbols)
169
168
if grp == :base
170
169
for sym in symbols
171
170
eval (curmod, :( import Base.$ sym ))
@@ -209,23 +208,24 @@ function _api(curmod::Module, cmd::Symbol, exprs)
209
208
210
209
for nam in modules
211
210
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))
216
213
end
217
214
end
218
215
216
+ imp = :import
217
+ use = :using
218
+
219
219
if cmd == :extend
220
220
for nam in modules
221
221
mod = eval (curmod, nam)
222
222
if isdefined (mod, :__api__ )
223
223
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 )
229
229
else
230
230
println (" API not found for module: $mod " )
231
231
end
@@ -240,28 +240,37 @@ function _api(curmod::Module, cmd::Symbol, exprs)
240
240
mod = eval (curmod, nam)
241
241
if isdefined (mod, :__api__ )
242
242
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 )
245
245
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 )
248
248
end
249
249
end
250
250
end
251
251
252
252
nothing
253
253
end
254
254
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)
262
258
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
265
274
end
266
275
end
267
276
0 commit comments