Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions bin/generate_builtins.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ const RECENTLY_ADDED = Core.Builtin[
setglobalonce!,
swapglobal!,
Core._defaultctors,
Core._import,
Core._using,
# Recently became builtins
Base.invokelatest,
Base.invoke_in_world,
Expand Down
4 changes: 4 additions & 0 deletions src/builtins.jl
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ function maybe_evaluate_builtin(interp::Interpreter, frame::Frame, call_expr::Ex
return Some{Any}(Core._equiv_typedef(getargs(interp, args, frame)...))
elseif f === Core._expr
return Some{Any}(Core._expr(getargs(interp, args, frame)...))
elseif @static isdefinedglobal(Core, :_import) && f === Core._import
return Some{Any}(Core._import(getargs(interp, args, frame)...))
elseif f === Core._primitivetype
return Some{Any}(Core._primitivetype(getargs(interp, args, frame)...))
elseif f === Core._setsuper!
Expand All @@ -112,6 +114,8 @@ function maybe_evaluate_builtin(interp::Interpreter, frame::Frame, call_expr::Ex
else
return Some{Any}(Core._typevar(getargs(interp, args, frame)...))
end
elseif @static isdefinedglobal(Core, :_using) && f === Core._using
return Some{Any}(Core._using(getargs(interp, args, frame)...))
elseif f === Core.apply_type
return Some{Any}(Core.apply_type(getargs(interp, args, frame)...))
elseif f === Core.compilerbarrier
Expand Down
11 changes: 11 additions & 0 deletions test/toplevel.jl
Original file line number Diff line number Diff line change
Expand Up @@ -638,3 +638,14 @@ end
let ex = :(const ___symbol___ = :___symbol___)
@test JuliaInterpreter.finish_and_return!(Frame(@__MODULE__, ex), true) === :___symbol___
end

module UsingTest end
module ImportTest end
let ex = quote using Test end
JuliaInterpreter.finish_and_return!(Frame(UsingTest, ex), true)
@test @invokelatest JuliaInterpreter.isdefinedglobal(UsingTest, :Test)
end
let ex = quote import Test end
JuliaInterpreter.finish_and_return!(Frame(ImportTest, ex), true)
@test @invokelatest JuliaInterpreter.isdefinedglobal(ImportTest, :Test)
end
Loading