Skip to content

Commit 4ec036b

Browse files
committed
Further updates to simplify code at compile-time
1 parent bf0502a commit 4ec036b

File tree

1 file changed

+32
-23
lines changed

1 file changed

+32
-23
lines changed

src/APITools.jl

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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
253253
end
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
266275
end
267276

0 commit comments

Comments
 (0)