Skip to content

Commit cf8f5fa

Browse files
authored
update builtins.jl and add some simple tests for using/import evaluation (#688)
Adjusts for JuliaLang/julia#57965.
1 parent 4ad9cbb commit cf8f5fa

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

bin/generate_builtins.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ const RECENTLY_ADDED = Core.Builtin[
2323
setglobalonce!,
2424
swapglobal!,
2525
Core._defaultctors,
26+
Core._import,
27+
Core._using,
2628
# Recently became builtins
2729
Base.invokelatest,
2830
Base.invoke_in_world,

src/builtins.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ function maybe_evaluate_builtin(interp::Interpreter, frame::Frame, call_expr::Ex
9292
return Some{Any}(Core._equiv_typedef(getargs(interp, args, frame)...))
9393
elseif f === Core._expr
9494
return Some{Any}(Core._expr(getargs(interp, args, frame)...))
95+
elseif @static isdefinedglobal(Core, :_import) && f === Core._import
96+
return Some{Any}(Core._import(getargs(interp, args, frame)...))
9597
elseif f === Core._primitivetype
9698
return Some{Any}(Core._primitivetype(getargs(interp, args, frame)...))
9799
elseif f === Core._setsuper!
@@ -112,6 +114,8 @@ function maybe_evaluate_builtin(interp::Interpreter, frame::Frame, call_expr::Ex
112114
else
113115
return Some{Any}(Core._typevar(getargs(interp, args, frame)...))
114116
end
117+
elseif @static isdefinedglobal(Core, :_using) && f === Core._using
118+
return Some{Any}(Core._using(getargs(interp, args, frame)...))
115119
elseif f === Core.apply_type
116120
return Some{Any}(Core.apply_type(getargs(interp, args, frame)...))
117121
elseif f === Core.compilerbarrier

test/toplevel.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,3 +638,14 @@ end
638638
let ex = :(const ___symbol___ = :___symbol___)
639639
@test JuliaInterpreter.finish_and_return!(Frame(@__MODULE__, ex), true) === :___symbol___
640640
end
641+
642+
module UsingTest end
643+
module ImportTest end
644+
let ex = quote using Test end
645+
JuliaInterpreter.finish_and_return!(Frame(UsingTest, ex), true)
646+
@test @invokelatest JuliaInterpreter.isdefinedglobal(UsingTest, :Test)
647+
end
648+
let ex = quote import Test end
649+
JuliaInterpreter.finish_and_return!(Frame(ImportTest, ex), true)
650+
@test @invokelatest JuliaInterpreter.isdefinedglobal(ImportTest, :Test)
651+
end

0 commit comments

Comments
 (0)