diff --git a/base/arrayshow.jl b/base/arrayshow.jl index e731588de8e85..245a2056b62f4 100644 --- a/base/arrayshow.jl +++ b/base/arrayshow.jl @@ -345,6 +345,7 @@ function _display(io::IO, X::AbstractArray) print_array(io, X) end +show(io::IO, ::MIME"text/plain", X::AbstractArray) = _display(io, X) ## printing with `show` diff --git a/base/client.jl b/base/client.jl index 755ade852d765..c84efabae00e1 100644 --- a/base/client.jl +++ b/base/client.jl @@ -139,6 +139,16 @@ function repl_cmd(cmd, out) nothing end +function ip_matches_func(ip, func::Symbol) + for fr in StackTraces.lookup(ip) + if fr === StackTraces.UNKNOWN || fr.from_c + return false + end + fr.func === func && return true + end + return false +end + function display_error(io::IO, er, bt) if !isempty(bt) st = stacktrace(bt) @@ -148,7 +158,7 @@ function display_error(io::IO, er, bt) end print_with_color(Base.error_color(), io, "ERROR: "; bold = true) # remove REPL-related frames from interactive printing - eval_ind = findlast(addr->Base.REPL.ip_matches_func(addr, :eval), bt) + eval_ind = findlast(addr->ip_matches_func(addr, :eval), bt) if eval_ind !== nothing bt = bt[1:eval_ind-1] end @@ -339,9 +349,6 @@ function load_juliarc() nothing end -import .Terminals -import .REPL - const repl_hooks = [] """ @@ -366,7 +373,11 @@ function __atreplinit(repl) end _atreplinit(repl) = invokelatest(__atreplinit, repl) +# The REPL stdlib hooks into Base using this Ref +const REPL_MODULE_REF = Ref{Module}() + function _start() + repl_stdlib_loaded = isassigned(REPL_MODULE_REF) empty!(ARGS) append!(ARGS, Core.ARGS) opts = JLOptions() @@ -383,22 +394,25 @@ function _start() banner |= opts.banner != 0 && is_interactive color_set || (global have_color = false) else + if !repl_stdlib_loaded + error("REPL standard library not loaded, cannot start a REPL.") + end term_env = get(ENV, "TERM", @static Sys.iswindows() ? "" : "dumb") - term = Terminals.TTYTerminal(term_env, STDIN, STDOUT, STDERR) + term = REPL_MODULE_REF[].Terminals.TTYTerminal(term_env, STDIN, STDOUT, STDERR) global is_interactive = true banner |= opts.banner != 0 - color_set || (global have_color = Terminals.hascolor(term)) - banner && REPL.banner(term,term) + color_set || (global have_color = REPL_MODULE_REF[].Terminals.hascolor(term)) + banner && REPL_MODULE_REF[].banner(term,term) if term.term_type == "dumb" - active_repl = REPL.BasicREPL(term) + active_repl = REPL_MODULE_REF[].BasicREPL(term) quiet || @warn "Terminal not fully functional" else - active_repl = REPL.LineEditREPL(term, have_color, true) + active_repl = REPL_MODULE_REF[].LineEditREPL(term, have_color, true) active_repl.history_file = history_file end # Make sure any displays pushed in .juliarc.jl ends up above the # REPLDisplay - pushdisplay(REPL.REPLDisplay(active_repl)) + pushdisplay(REPL_MODULE_REF[].REPLDisplay(active_repl)) end else banner |= opts.banner != 0 && is_interactive @@ -417,8 +431,11 @@ function _start() end end else + if !repl_stdlib_loaded + error("REPL standard library not loaded") + end _atreplinit(active_repl) - REPL.run_repl(active_repl, backend->(global active_repl_backend = backend)) + REPL_MODULE_REF[].run_repl(active_repl, backend->(global active_repl_backend = backend)) end end catch err diff --git a/base/docs/utils.jl b/base/docs/utils.jl index 85db2c97ed81d..de39577fe7d12 100644 --- a/base/docs/utils.jl +++ b/base/docs/utils.jl @@ -134,8 +134,8 @@ repl_corrections(s) = repl_corrections(STDOUT, s) # inverse of latex_symbols Dict, lazily created as needed const symbols_latex = Dict{String,String}() function symbol_latex(s::String) - if isempty(symbols_latex) - for (k,v) in Base.REPLCompletions.latex_symbols + if isempty(symbols_latex) && isassigned(Base.REPL_MODULE_REF) + for (k,v) in Base.REPL_MODULE_REF[].REPLCompletions.latex_symbols symbols_latex[v] = k end end diff --git a/base/replutil.jl b/base/errorshow.jl similarity index 80% rename from base/replutil.jl rename to base/errorshow.jl index 7e8a6ed4f1628..b4b579c0cc87d 100644 --- a/base/replutil.jl +++ b/base/errorshow.jl @@ -1,163 +1,5 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license -# fallback text/plain representation of any type: -show(io::IO, ::MIME"text/plain", x) = show(io, x) - -# multiline show functions for types defined before multimedia.jl: -function show(io::IO, ::MIME"text/plain", iter::Union{KeySet,ValueIterator}) - print(io, summary(iter)) - isempty(iter) && return - print(io, ". ", isa(iter,KeySet) ? "Keys" : "Values", ":") - limit::Bool = get(io, :limit, false) - if limit - sz = displaysize(io) - rows, cols = sz[1] - 3, sz[2] - rows < 2 && (print(io, " …"); return) - cols < 4 && (cols = 4) - cols -= 2 # For prefix " " - rows -= 1 # For summary - else - rows = cols = typemax(Int) - end - - for (i, v) in enumerate(iter) - print(io, "\n ") - i == rows < length(iter) && (print(io, "⋮"); break) - - if limit - str = sprint(show, v, context=io, sizehint=0) - str = _truncate_at_width_or_chars(str, cols, "\r\n") - print(io, str) - else - show(io, v) - end - end -end - -function show(io::IO, ::MIME"text/plain", t::AbstractDict{K,V}) where {K,V} - # show more descriptively, with one line per key/value pair - recur_io = IOContext(io, :SHOWN_SET => t) - limit::Bool = get(io, :limit, false) - if !haskey(io, :compact) - recur_io = IOContext(recur_io, :compact => true) - end - - print(io, summary(t)) - isempty(t) && return - print(io, ":") - show_circular(io, t) && return - if limit - sz = displaysize(io) - rows, cols = sz[1] - 3, sz[2] - rows < 2 && (print(io, " …"); return) - cols < 12 && (cols = 12) # Minimum widths of 2 for key, 4 for value - cols -= 6 # Subtract the widths of prefix " " separator " => " - rows -= 1 # Subtract the summary - - # determine max key width to align the output, caching the strings - ks = Vector{AbstractString}(uninitialized, min(rows, length(t))) - vs = Vector{AbstractString}(uninitialized, min(rows, length(t))) - keylen = 0 - vallen = 0 - for (i, (k, v)) in enumerate(t) - i > rows && break - ks[i] = sprint(show, k, context=recur_io, sizehint=0) - vs[i] = sprint(show, v, context=recur_io, sizehint=0) - keylen = clamp(length(ks[i]), keylen, cols) - vallen = clamp(length(vs[i]), vallen, cols) - end - if keylen > max(div(cols, 2), cols - vallen) - keylen = max(cld(cols, 3), cols - vallen) - end - else - rows = cols = typemax(Int) - end - - for (i, (k, v)) in enumerate(t) - print(io, "\n ") - i == rows < length(t) && (print(io, rpad("⋮", keylen), " => ⋮"); break) - - if limit - key = rpad(_truncate_at_width_or_chars(ks[i], keylen, "\r\n"), keylen) - else - key = sprint(show, k, context=recur_io, sizehint=0) - end - print(recur_io, key) - print(io, " => ") - - if limit - val = _truncate_at_width_or_chars(vs[i], cols - keylen, "\r\n") - print(io, val) - else - show(recur_io, v) - end - end -end - -function show(io::IO, ::MIME"text/plain", f::Function) - ft = typeof(f) - mt = ft.name.mt - if isa(f, Core.IntrinsicFunction) - show(io, f) - id = Core.Intrinsics.bitcast(Int32, f) - print(io, " (intrinsic function #$id)") - elseif isa(f, Core.Builtin) - print(io, mt.name, " (built-in function)") - else - name = mt.name - isself = isdefined(ft.name.module, name) && - ft == typeof(getfield(ft.name.module, name)) - n = length(methods(f)) - m = n==1 ? "method" : "methods" - sname = string(name) - ns = (isself || '#' in sname) ? sname : string("(::", ft, ")") - what = startswith(ns, '@') ? "macro" : "generic function" - print(io, ns, " (", what, " with $n $m)") - end -end - -function show(io::IO, ::MIME"text/plain", r::LinSpace) - # show for linspace, e.g. - # linspace(1,3,7) - # 7-element LinSpace{Float64}: - # 1.0,1.33333,1.66667,2.0,2.33333,2.66667,3.0 - print(io, summary(r)) - if !isempty(r) - println(io, ":") - print_range(io, r) - end -end - -function show(io::IO, ::MIME"text/plain", t::Task) - show(io, t) - if t.state == :failed - println(io) - showerror(io, CapturedException(t.result, t.backtrace)) - end -end - -show(io::IO, ::MIME"text/plain", X::AbstractArray) = _display(io, X) -show(io::IO, ::MIME"text/plain", r::AbstractRange) = show(io, r) # always use the compact form for printing ranges - -function show(io::IO, ::MIME"text/plain", opt::JLOptions) - println(io, "JLOptions(") - fields = fieldnames(JLOptions) - nfields = length(fields) - for (i, f) in enumerate(fields) - v = getfield(opt, i) - if isa(v, Ptr{UInt8}) - v = (v != C_NULL) ? unsafe_string(v) : "" - elseif isa(v, Ptr{Ptr{UInt8}}) - v = unsafe_load_commands(v) - end - println(io, " ", f, " = ", repr(v), i < nfields ? "," : "") - end - print(io, ")") -end - - -# showing exception objects as descriptive error messages - """ showerror(io, e) diff --git a/base/precompile.jl b/base/precompile.jl index 9cddf6bcaf808..8bb4263961909 100644 --- a/base/precompile.jl +++ b/base/precompile.jl @@ -8,6 +8,7 @@ # 5. Run `grep -v '#[0-9]' precompiles.txt >> base/precompile.jl` (filters out closures, which # might have different generated names in different environments) +precompile(Tuple{typeof(ip_matches_func), Ptr{Cvoid}, Symbol}) precompile(Tuple{typeof(Base.pointer), Array{UInt8, 1}, UInt64}) precompile(Tuple{typeof(Base.convert), Type{Ptr{Int32}}, Ptr{UInt8}}) precompile(Tuple{Type{Base.Multimedia.TextDisplay}, Base.TTY}) @@ -156,7 +157,6 @@ precompile(Tuple{typeof(Core.Compiler.getindex), Tuple{DataType, DataType, DataT precompile(Tuple{typeof(Base.unpreserve_handle), Base.Process}) precompile(Tuple{typeof(Base.stream_wait), Base.Process, Base.Condition}) precompile(Tuple{typeof(Base.kill), Base.Process, Int64}) -precompile(Tuple{typeof(Base.banner), Base.Terminals.TTYTerminal}) precompile(Tuple{typeof(Core.Compiler.isbits), Base.Dict{Any, Any}}) precompile(Tuple{typeof(Base.answer_color)}) precompile(Tuple{typeof(Base.input_color)}) @@ -164,7 +164,6 @@ precompile(Tuple{typeof(Base.show_circular), Base.IOContext{Base.GenericIOBuffer precompile(Tuple{typeof(Base.show_delim_array), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, Tuple{}, Char, Char, Char, Bool, Int64, Int64}) precompile(Tuple{typeof(Base.throw_boundserror), Array{Base.StackTraces.StackFrame, 1}, Tuple{Base.UnitRange{Int64}}}) precompile(Tuple{typeof(Base.splice!), Array{Base.StackTraces.StackFrame, 1}, Base.UnitRange{Int64}, Array{Any, 1}}) -precompile(Tuple{typeof(Base.REPL.ip_matches_func), Ptr{Cvoid}, Symbol}) precompile(Tuple{typeof(Base.throw_boundserror), Array{Ptr{Cvoid}, 1}, Tuple{Base.UnitRange{Int64}}}) precompile(Tuple{typeof(Base.unsafe_copyto!), Array{Ptr{Cvoid}, 1}, Int64, Array{Ptr{Cvoid}, 1}, Int64, Int64}) precompile(Tuple{Type{Base.Channel{Any}}, Int64}) @@ -179,11 +178,7 @@ precompile(Tuple{typeof(Base._rsearch), Array{Int8, 1}, Array{UInt8, 1}, Int64}) precompile(Tuple{typeof(Base._rsearch), Array{UInt8, 1}, Char, Int64}) precompile(Tuple{typeof(Base._rsearch), Array{Int8, 1}, Char, Int64}) precompile(Tuple{typeof(Base.splice!), Array{Base.Multimedia.AbstractDisplay, 1}, Int64, Array{Any, 1}}) -precompile(Tuple{typeof(Core.Compiler.isbits), Base.LineEdit.EmptyCompletionProvider}) -precompile(Tuple{typeof(Core.Compiler.isbits), Base.LineEdit.EmptyHistoryProvider}) -precompile(Tuple{typeof(Base._setindex!), Base.Dict{Symbol, Any}, Base.LineEdit.Prompt, Symbol, Int64}) precompile(Tuple{typeof(Base.sizehint!), Base.Dict{Symbol, Any}, Int64}) -precompile(Tuple{typeof(Base.setindex!), Base.Dict{Symbol, Any}, Base.LineEdit.Prompt, Symbol}) precompile(Tuple{typeof(Base.copyto!), Base.IndexLinear, Array{Symbol, 1}, Base.IndexLinear, Array{UInt8, 1}}) precompile(Tuple{getfield(Base, Symbol("#kw##readline")), Array{Any, 1}, typeof(Base.readline), Base.IOStream}) precompile(Tuple{Type{Core.Compiler.Generator{I, F} where F where I}, Type{Core.Compiler.Const}, Tuple{Nothing}}) @@ -223,38 +218,15 @@ precompile(Tuple{typeof(Core.Compiler.indexed_next), Tuple{typeof(Base.info), In precompile(Tuple{typeof(Core.Compiler.getindex), Tuple{typeof(Base.info), Int64}, Int64}) precompile(Tuple{typeof(Base.print), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, Base.SubString{String}, Char}) precompile(Tuple{typeof(Base.sizehint!), Base.Dict{Any, Any}, Int64}) -precompile(Tuple{typeof(Base.LineEdit.getEntry), Base.Dict{Char, Any}, Char}) -precompile(Tuple{typeof(Base.LineEdit.getEntry), Base.Dict{Char, Any}, String}) precompile(Tuple{typeof(Base.unsafe_copyto!), Array{Base.Dict{Any, Any}, 1}, Int64, Array{Base.Dict{Any, Any}, 1}, Int64, Int64}) precompile(Tuple{typeof(Base.copyto!), Array{Base.Dict{Any, Any}, 1}, Int64, Array{Base.Dict{Any, Any}, 1}, Int64, Int64}) -precompile(Tuple{typeof(Base.promote_type), Type{Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}}, Type{Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}}) -precompile(Tuple{typeof(Base.promote_rule), Type{Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}}, Type{Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}}) -precompile(Tuple{typeof(Base.promote_rule), Type{Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}, Type{Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}}}) -precompile(Tuple{typeof(Base.promote_result), Type{Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}}, Type{Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}, Type{Union{}}, Type{Union{}}}) -precompile(Tuple{typeof(Base.promote_type), Type{Base.LineEdit.Prompt}, Type{Base.LineEdit.TextInterface}}) -precompile(Tuple{typeof(Base.promote_rule), Type{Base.LineEdit.Prompt}, Type{Base.LineEdit.TextInterface}}) -precompile(Tuple{typeof(Base.promote_rule), Type{Base.LineEdit.TextInterface}, Type{Base.LineEdit.Prompt}}) -precompile(Tuple{typeof(Base.promote_result), Type{Base.LineEdit.Prompt}, Type{Base.LineEdit.TextInterface}, Type{Union{}}, Type{Union{}}}) -precompile(Tuple{typeof(Base.setindex!), Array{Base.LineEdit.TextInterface, 1}, Base.LineEdit.Prompt, Int64}) -precompile(Tuple{typeof(Base.setindex!), Array{Base.LineEdit.TextInterface, 1}, Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}, Int64}) -precompile(Tuple{typeof(Base.setindex!), Array{Base.LineEdit.TextInterface, 1}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}, Int64}) -precompile(Tuple{typeof(Base.copyto!), Array{Base.LineEdit.TextInterface, 1}, Tuple{Base.LineEdit.Prompt, Base.LineEdit.Prompt, Base.LineEdit.Prompt, Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}}) precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, String, Int64, String, Bool}) precompile(Tuple{typeof(Base.uv_status_string), Base.UDPSocket}) -precompile(Tuple{typeof(Base.Terminals.cmove_up), Base.Terminals.TerminalBuffer, Int64}) -precompile(Tuple{typeof(Base.Terminals.cmove_down), Base.Terminals.TerminalBuffer, Int64}) precompile(Tuple{typeof(Base.readuntil), Base.GenericIOBuffer{Array{UInt8, 1}}, UInt8}) -precompile(Tuple{typeof(Base.Terminals.cmove_right), Base.Terminals.TerminalBuffer, Int64}) -precompile(Tuple{typeof(Base.LineEdit._clear_input_area), Base.Terminals.TerminalBuffer, Base.LineEdit.InputAreaState}) precompile(Tuple{typeof(Base.seek), Base.GenericIOBuffer{Array{UInt8, 1}}, Int64}) precompile(Tuple{getfield(Base, Symbol("#kw##readline")), Array{Any, 1}, typeof(Base.readline), Base.GenericIOBuffer{Array{UInt8, 1}}}) precompile(Tuple{typeof(Base.endswith), String, String}) -precompile(Tuple{getfield(Base, Symbol("#kw##readline")), Array{Any, 1}, typeof(Base.readline), Base.Terminals.TerminalBuffer}) -precompile(Tuple{typeof(Base.LineEdit.write_prompt), Base.Terminals.TerminalBuffer, Base.LineEdit.Prompt}) -precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TerminalBuffer, Base.Terminals.TerminalBuffer, Base.LineEdit.InputAreaState, String}) precompile(Tuple{typeof(Base.:(==)), Array{Char, 1}, Array{Char, 1}}) -precompile(Tuple{typeof(Base.LineEdit.update_key_repeats), Base.LineEdit.MIState, Array{Char, 1}}) -precompile(Tuple{typeof(Base.LineEdit.reset_state), Base.LineEdit.MIState}) precompile(Tuple{Type{Base.Dict{Any, Any}}, Array{Any, 1}}) precompile(Tuple{typeof(Base.sync_end)}) precompile(Tuple{typeof(Base.wait), Task}) @@ -273,43 +245,23 @@ precompile(Tuple{typeof(Base.load_juliarc)}) precompile(Tuple{typeof(Base.popfirst!), Array{String, 1}}) precompile(Tuple{typeof(Base.print), Base.IOContext{Base.GenericIOBuffer{Array{UInt8, 1}}}, String, String, Char}) precompile(Tuple{typeof(Base.read), Base.GenericIOBuffer{Array{UInt8, 1}}, Type{Char}}) -precompile(Tuple{typeof(Base.write), Base.Terminals.TerminalBuffer, Array{UInt8, 1}}) -precompile(Tuple{typeof(Base.LineEdit.keymap), Array{Base.Dict{Any, Any}, 1}}) -precompile(Tuple{typeof(Base.LineEdit.add_specialisations), Base.Dict{Char, Any}, Base.Dict{Char, Any}, Int64}) precompile(Tuple{typeof(Base.setindex!), Base.Dict{Char, Any}, Base.Dict{Char, Any}, Char}) precompile(Tuple{typeof(Base.ht_keyindex2!), Base.Dict{Char, Any}, Char}) precompile(Tuple{typeof(Base._setindex!), Base.Dict{Char, Any}, Base.Dict{Char, Any}, Char, Int64}) precompile(Tuple{typeof(Base.setdiff), Base.KeySet{Any, Base.Dict{Any, Any}}, Base.KeySet{Any, Base.Dict{Any, Any}}}) -precompile(Tuple{typeof(Base.LineEdit.keymap_merge), Base.Dict{Char, Any}, Base.Dict{Any, Any}}) -precompile(Tuple{typeof(Base.LineEdit.postprocess!), Base.Dict{Char, Any}}) -precompile(Tuple{typeof(Base.LineEdit.keymap_unify), Array{Base.Dict{Any, Any}, 1}}) -precompile(Tuple{typeof(Base.LineEdit.validate_keymap), Base.Dict{Char, Any}}) precompile(Tuple{Type{Expr}, Symbol, GlobalRef, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue, SSAValue}) precompile(Tuple{typeof(Core.Compiler.isbits), Tuple{String, typeof(Base.info)}}) precompile(Tuple{typeof(Base.:(==)), Nothing, String}) precompile(Tuple{Type{Symbol}, Nothing}) precompile(Tuple{Type{Symbol}, Base.SubString{String}}) -precompile(Tuple{typeof(Core.Compiler.isbits), Base.REPL.REPLCompletionProvider}) -precompile(Tuple{getfield(Core, Symbol("#kw#Type")), Array{Any, 1}, Type{Base.LineEdit.Prompt}, String}) -precompile(Tuple{typeof(Core.Compiler.isbits), Base.REPL.ShellCompletionProvider}) -precompile(Tuple{Type{Base.Dict{Symbol, Any}}, Base.Pair{Symbol, Base.LineEdit.Prompt}, Base.Pair{Symbol, Base.LineEdit.Prompt}, Base.Pair{Symbol, Base.LineEdit.Prompt}}) -precompile(Tuple{Type{Base.REPL.REPLHistoryProvider}, Base.Dict{Symbol, Any}}) -precompile(Tuple{typeof(Base.REPL.find_hist_file)}) -precompile(Tuple{typeof(Base.REPL.history_reset_state), Base.REPL.REPLHistoryProvider}) -precompile(Tuple{typeof(Base.LineEdit.setup_search_keymap), Base.REPL.REPLHistoryProvider}) -precompile(Tuple{typeof(Core.Compiler.isbits), Base.REPL.LatexCompletions}) -precompile(Tuple{typeof(Base.LineEdit.setup_prefix_keymap), Base.REPL.REPLHistoryProvider, Base.LineEdit.Prompt}) precompile(Tuple{typeof(Base.getindex), Type{Base.Dict{Any, Any}}, Base.Dict{Any, Any}, Base.Dict{Any, Any}, Base.Dict{Any, Any}, Base.Dict{Any, Any}, Base.Dict{Any, Any}, Base.Dict{Any, Any}}) precompile(Tuple{typeof(Base.prepend!), Array{Base.Dict{Any, Any}, 1}, Array{Base.Dict{Any, Any}, 1}}) -precompile(Tuple{typeof(Base.REPL.mode_keymap), Base.LineEdit.Prompt}) precompile(Tuple{typeof(Core.Compiler.isbits), Array{Base.Multimedia.AbstractDisplay, 1}}) -precompile(Tuple{typeof(Base.Multimedia.popdisplay), Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}}) precompile(Tuple{Type{String}, Base.BitArray{1}}) -precompile(Tuple{typeof(Base.REPL.ends_with_semicolon), String}) precompile(Tuple{typeof(Core.Compiler.isbits), Tuple{Nothing, Int64}}) -precompile(Tuple{typeof(Base.Multimedia.popdisplay), Base.REPL.REPLDisplay{Base.REPL.BasicREPL}}) -precompile(Tuple{typeof(Base.Multimedia.popdisplay), Base.REPL.REPLDisplay{Base.REPL.StreamREPL}}) -precompile(Tuple{typeof(Base.REPL.start_repl_backend), Base.Channel{Any}, Base.Channel{Any}}) +precompile(Tuple{typeof(Base.getindex), Type{Base.Dict{Any, Any}}, Base.Dict{Any, Any}, Base.Dict{Any, Any}, Base.Dict{Any, Any}, Base.Dict{Any, Any}, Base.Dict{Any, Any}, Base.Dict{Any, Any}}) +precompile(Tuple{typeof(Base.prepend!), Array{Base.Dict{Any, Any}, 1}, Array{Base.Dict{Any, Any}, 1}}) +precompile(Tuple{Type{String}, Base.BitArray{1}}) precompile(Tuple{typeof(Base._collect), Array{Ptr{Cvoid}, 1}, Base.Generator{Array{Ptr{Cvoid}, 1}, typeof(Base.StackTraces.lookup)}, Base.EltypeUnknown, Base.HasShape}) precompile(Tuple{typeof(Base.popfirst!), Array{Base.StackTraces.StackFrame, 1}}) precompile(Tuple{typeof(Base.StackTraces.stacktrace), Array{Ptr{Cvoid}, 1}, Bool}) @@ -334,8 +286,6 @@ precompile(Tuple{typeof(Core.Compiler.isbits), Tuple{Tuple{String}, Tuple{String precompile(Tuple{typeof(Base.cmd_gen), Tuple{Tuple{String}, Tuple{String}, Tuple{String}}}) precompile(Tuple{typeof(Base.append!), Array{String, 1}, Array{Any, 1}}) precompile(Tuple{typeof(Base.process_options), Base.JLOptions}) -precompile(Tuple{typeof(Base.Terminals.hascolor), Base.Terminals.TTYTerminal}) -precompile(Tuple{Type{Base.REPL.LineEditREPL}, Base.Terminals.TTYTerminal, Bool}) precompile(Tuple{typeof(Base.close), Base.IOStream}) precompile(Tuple{typeof(Base._atexit)}) precompile(Tuple{getfield(Base, Symbol("#kw##notify")), Array{Any, 1}, typeof(Base.notify), Base.Condition, Nothing}) @@ -348,64 +298,27 @@ precompile(Tuple{typeof(Base.isopen), Base.TTY}) precompile(Tuple{typeof(Base.stream_wait), Base.TTY, Base.Condition}) precompile(Tuple{typeof(Base.close), Base.TTY}) precompile(Tuple{typeof(Base.unsafe_store!), Ptr{Int32}, Int64}) -precompile(Tuple{Type{Base.Terminals.TTYTerminal}, String, Base.TTY, Base.TTY, Base.IOStream}) precompile(Tuple{typeof(Base.unsafe_write), Base.TTY, Ptr{UInt8}, UInt64}) precompile(Tuple{typeof(Base.unpreserve_handle), Task}) precompile(Tuple{typeof(Base.check_open), Base.TTY}) precompile(Tuple{typeof(Base.stream_wait), Task}) precompile(Tuple{typeof(Base.uv_write), Base.TTY, Ptr{UInt8}, UInt64}) precompile(Tuple{typeof(Base.flush), Base.TTY}) -precompile(Tuple{typeof(Base.__atreplinit), Base.REPL.LineEditREPL}) -precompile(Tuple{typeof(Base.:(==)), Base.Multimedia.TextDisplay, Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}}) -precompile(Tuple{typeof(Base.:(==)), Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}}) -precompile(Tuple{typeof(Base.REPL.hist_from_file), Base.REPL.REPLHistoryProvider, Base.IOStream, String}) -precompile(Tuple{typeof(Base.REPL.hist_getline), Base.IOStream}) precompile(Tuple{typeof(Base.push!), Array{String, 1}, Base.SubString{String}}) precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Char, Char}) precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Char, Char, Int64}) -precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Base.LineEdit.KeyAlias, Int64}) precompile(Tuple{typeof(Base.ht_keyindex2!), Base.Dict{Any, Any}, Int64}) -precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Base.LineEdit.KeyAlias, Int64, Int64}) precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, String, String}) precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, String, String, Int64}) precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Nothing, String}) precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Nothing, String, Int64}) -precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Base.LineEdit.KeyAlias, String}) -precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Base.LineEdit.KeyAlias, String, Int64}) precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Char, String}) precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Char, String, Int64}) -precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##add_nested_key!")), Array{Any, 1}, typeof(Base.LineEdit.add_nested_key!), Base.Dict{Char, Any}, String, Nothing}) precompile(Tuple{typeof(Base._setindex!), Base.Dict{Char, Any}, Nothing, Char, Int64}) precompile(Tuple{typeof(Base.setindex!), Base.Dict{Char, Any}, Nothing, Char}) -precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##add_nested_key!")), Array{Any, 1}, typeof(Base.LineEdit.add_nested_key!), Base.Dict{Char, Any}, String, Base.LineEdit.KeyAlias}) -precompile(Tuple{typeof(Base._setindex!), Base.Dict{Char, Any}, Base.LineEdit.KeyAlias, Char, Int64}) -precompile(Tuple{typeof(Base.setindex!), Base.Dict{Char, Any}, Base.LineEdit.KeyAlias, Char}) precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Nothing}, Nothing, String}) precompile(Tuple{typeof(Base.ht_keyindex2!), Base.Dict{Any, Nothing}, String}) precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Nothing}, Nothing, String, Int64}) -precompile(Tuple{typeof(Base.LineEdit.fixup_keymaps!), Base.Dict{Char, Any}, Int64, Char, Nothing}) -precompile(Tuple{typeof(Base.LineEdit.run_interface), Base.Terminals.TTYTerminal, Base.LineEdit.ModalInterface}) -precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.GenericIOBuffer{Array{UInt8, 1}}, Base.LineEdit.InputAreaState, Base.LineEdit.PromptState}) -precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.GenericIOBuffer{Array{UInt8, 1}}, Base.LineEdit.InputAreaState, Base.LineEdit.PrefixSearchState}) -precompile(Tuple{typeof(Base.write), Base.Terminals.TTYTerminal, Array{UInt8, 1}}) -precompile(Tuple{typeof(Base.LineEdit.init_state), Base.Terminals.TTYTerminal, Base.LineEdit.ModalInterface}) -precompile(Tuple{typeof(Base.LineEdit.prompt!), Base.Terminals.TTYTerminal, Base.LineEdit.ModalInterface, Base.LineEdit.MIState}) -precompile(Tuple{typeof(Base.getindex), Array{Base.LineEdit.TextInterface, 1}, Int64}) -precompile(Tuple{typeof(Base.start), Array{Base.LineEdit.TextInterface, 1}}) -precompile(Tuple{typeof(Base.done), Array{Base.LineEdit.TextInterface, 1}, Int64}) -precompile(Tuple{typeof(Base.next), Array{Base.LineEdit.TextInterface, 1}, Int64}) -precompile(Tuple{typeof(Base.LineEdit.init_state), Base.Terminals.TTYTerminal, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Base.LineEdit.PromptState, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base.ht_keyindex2!), Base.Dict{Any, Any}, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Base.LineEdit.PromptState, Base.LineEdit.Prompt, Int64}) -precompile(Tuple{typeof(Base.LineEdit.init_state), Base.Terminals.TTYTerminal, Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Base.LineEdit.SearchState, Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base.ht_keyindex2!), Base.Dict{Any, Any}, Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Base.LineEdit.SearchState, Base.LineEdit.HistoryPrompt{Base.REPL.REPLHistoryProvider}, Int64}) -precompile(Tuple{typeof(Base.LineEdit.init_state), Base.Terminals.TTYTerminal, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, Base.LineEdit.PrefixSearchState, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base.ht_keyindex2!), Base.Dict{Any, Any}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, Base.LineEdit.PrefixSearchState, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}, Int64}) precompile(Tuple{typeof(Core.Compiler.isbits), Tuple{Tuple{}, Nothing}}) precompile(Tuple{typeof(Base.take!), Base.Channel{Any}}) precompile(Tuple{typeof(Base.n_avail), Base.Channel{Any}}) @@ -414,22 +327,8 @@ precompile(Tuple{typeof(Base.wait_impl), Base.Channel{Any}}) precompile(Tuple{typeof(Base.wait_unbuffered), Base.Channel{Any}}) precompile(Tuple{typeof(Base.wait), Base.Channel{Any}}) precompile(Tuple{typeof(Base.take_unbuffered), Base.Channel{Any}}) -precompile(Tuple{typeof(Base.LineEdit.activate), Base.LineEdit.Prompt, Base.LineEdit.MIState, Base.Terminals.TTYTerminal, Base.Terminals.TTYTerminal}) -precompile(Tuple{typeof(Base.:(==)), Base.LineEdit.Prompt, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base.getindex), Base.Dict{Any, Any}, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base.ht_keyindex), Base.Dict{Any, Any}, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base.LineEdit.activate), Base.LineEdit.Prompt, Base.LineEdit.PromptState, Base.Terminals.TTYTerminal, Base.Terminals.TTYTerminal}) -precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PromptState}) -precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PromptState}) -precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PromptState}) precompile(Tuple{typeof(Base.displaysize), Base.TTY}) precompile(Tuple{typeof(Base.divrem), Int64, Int64}) -precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState}) -precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState, Base.GenericIOBuffer{Array{UInt8, 1}}, Array{Char, 1}, Base.Dict{Char, Any}}) -precompile(Tuple{typeof(Base.LineEdit.terminal), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState, Base.Terminals.TTYTerminal, Array{Char, 1}, Base.Dict{Char, Any}}) -precompile(Tuple{typeof(Base.read), Base.Terminals.TTYTerminal, Type{Char}}) precompile(Tuple{typeof(Base.eof), Base.TTY}) precompile(Tuple{typeof(Base.isreadable), Base.TTY}) precompile(Tuple{typeof(Base.start_reading), Base.TTY}) @@ -439,97 +338,30 @@ precompile(Tuple{typeof(Base.read), Base.TTY, Type{UInt8}}) precompile(Tuple{typeof(Base.throw_boundserror), Array{UInt8, 1}, Tuple{Base.UnitRange{Int64}}}) precompile(Tuple{typeof(Base.deleteat!), Array{UInt8, 1}, Base.UnitRange{Int64}}) precompile(Tuple{typeof(Base.splice!), Array{UInt8, 1}, Base.UnitRange{Int64}, Array{UInt8, 1}}) -precompile(Tuple{typeof(Base.LineEdit.edit_splice!), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Pair{Int,Int}, String}) -precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.edit_insert), Base.GenericIOBuffer{Array{UInt8, 1}}, String}) -precompile(Tuple{typeof(Base.LineEdit.edit_insert), Base.LineEdit.PromptState, String}) -precompile(Tuple{typeof(Base.Terminals.width), Base.Terminals.TTYTerminal}) precompile(Tuple{Type{Base.Libc.TmStruct}, Float64}) precompile(Tuple{typeof(Base.Libc.strftime), String, Base.Libc.TmStruct}) precompile(Tuple{typeof(Base.replace), String, Pair{Base.Regex,String}}) -precompile(Tuple{typeof(Base.REPL.mode_idx), Base.REPL.REPLHistoryProvider, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base.LineEdit.commit_line), Base.LineEdit.MIState}) -precompile(Tuple{typeof(Base.LineEdit.on_enter), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.REPL.return_callback), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TTYTerminal, Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.println), Base.Terminals.TTYTerminal}) -precompile(Tuple{typeof(Base.write), Base.Terminals.TTYTerminal, Char}) precompile(Tuple{typeof(Base.write), Base.TTY, UInt8}) precompile(Tuple{typeof(Base.unsafe_write), Base.TTY, Base.RefValue{UInt8}, Int64}) -precompile(Tuple{typeof(Base.LineEdit.add_history), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.add_history), Base.REPL.REPLHistoryProvider, Base.LineEdit.PromptState}) precompile(Tuple{typeof(Base.start), Base.Pair{Symbol, Any}}) precompile(Tuple{typeof(Base.print), Base.IOStream, String}) precompile(Tuple{typeof(Base.unsafe_write), Base.IOStream, Ptr{UInt8}, UInt64}) precompile(Tuple{typeof(Base.flush), Base.IOStream}) -precompile(Tuple{typeof(Base.LineEdit.mode), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.REPL.reset), Base.REPL.LineEditREPL}) precompile(Tuple{getfield(Base, Symbol("#kw##parse_input_line")), Array{Any, 1}, typeof(Base.parse_input_line), String}) precompile(Tuple{typeof(Base.put!), Base.Channel{Any}, Tuple{Expr, Int64}}) precompile(Tuple{typeof(Base.put_buffered), Base.Channel{Any}, Tuple{Expr, Int64}}) precompile(Tuple{typeof(Base.put_unbuffered), Base.Channel{Any}, Tuple{Expr, Int64}}) -precompile(Tuple{typeof(Base.REPL.eval_user_input), Expr, Base.REPL.REPLBackend}) precompile(Tuple{typeof(Base.put!), Base.Channel{Any}, Tuple{Int64, Nothing}}) precompile(Tuple{typeof(Base.put_buffered), Base.Channel{Any}, Tuple{Int64, Nothing}}) precompile(Tuple{typeof(Base.put_unbuffered), Base.Channel{Any}, Tuple{Int64, Nothing}}) precompile(Tuple{typeof(Base.start), Tuple{Int64, Nothing}}) -precompile(Tuple{typeof(Base.REPL.print_response), Base.REPL.LineEditREPL, Int64, Nothing, Bool, Bool}) -precompile(Tuple{typeof(Base.REPL.print_response), Base.Terminals.TTYTerminal, Int64, Nothing, Bool, Bool, Nothing}) -precompile(Tuple{typeof(Base.print), Base.Terminals.TTYTerminal, DataType}) -precompile(Tuple{typeof(Base.print), Base.Terminals.TTYTerminal, Char}) -precompile(Tuple{typeof(Base.print), Base.Terminals.TTYTerminal, String, DataType, String, Char}) -precompile(Tuple{typeof(Base.print), Base.Terminals.TTYTerminal, String, Char}) -precompile(Tuple{Type{Base.IOContext{Base.Terminals.TTYTerminal}}, Base.Terminals.TTYTerminal, Base.ImmutableDict{Symbol, Any}}) -precompile(Tuple{getfield(Base, Symbol("#kw##with_output_color")), Array{Any, 1}, typeof(Base.with_output_color), typeof(Base.print), Symbol, Base.IOContext{Base.Terminals.TTYTerminal}, String}) -precompile(Tuple{getfield(Base, Symbol("#kw##with_output_color")), Array{Any, 1}, typeof(Base.with_output_color), typeof(Base.print), Int64, Base.IOContext{Base.Terminals.TTYTerminal}, String}) -precompile(Tuple{typeof(Base.write), Base.IOContext{Base.Terminals.TTYTerminal}, Symbol}) -precompile(Tuple{typeof(Base.show), Base.IOContext{Base.Terminals.TTYTerminal}, Module}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, String}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, Module}) -precompile(Tuple{typeof(Base.show), Base.IOContext{Base.Terminals.TTYTerminal}, Int32}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, Symbol}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, Int32}) -precompile(Tuple{typeof(Base.show), Base.IOContext{Base.Terminals.TTYTerminal}, Int64}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, Int64}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, String, Int64, String}) -precompile(Tuple{typeof(Base.write), Base.IOContext{Base.Terminals.TTYTerminal}, Char}) -precompile(Tuple{typeof(Base.show_circular), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Any, 1}}) -precompile(Tuple{typeof(Base.show_delim_array), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Any, 1}, Char, Char, Char, Bool, Int64, Int64}) -precompile(Tuple{typeof(Base.join), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Any, 1}, String, String}) -precompile(Tuple{typeof(Base.join), Base.IOContext{Base.Terminals.TTYTerminal}, Tuple{}, String, String}) -precompile(Tuple{typeof(Base.show_method_params), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Any, 1}}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, String, Module}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, String, Symbol, String, Int32}) -precompile(Tuple{typeof(Base.show_tuple_as_call), Base.IOContext{Base.Terminals.TTYTerminal}, Symbol, Type}) -precompile(Tuple{typeof(Base.print_with_color), Symbol, Base.IOContext{Base.Terminals.TTYTerminal}, String}) -precompile(Tuple{typeof(Base.print_with_color), Int64, Base.IOContext{Base.Terminals.TTYTerminal}, String}) -precompile(Tuple{typeof(Base.show), Base.IOContext{Base.Terminals.TTYTerminal}, Core.MethodInstance}) -precompile(Tuple{typeof(Base.StackTraces.show_spec_linfo), Base.IOContext{Base.Terminals.TTYTerminal}, Base.StackTraces.StackFrame}) -precompile(Tuple{getfield(Base, Symbol("#kw##show")), Array{Any, 1}, typeof(Base.show), Base.IOContext{Base.Terminals.TTYTerminal}, Base.StackTraces.StackFrame}) -precompile(Tuple{getfield(Base, Symbol("#kw##show_trace_entry")), Array{Any, 1}, typeof(Base.show_trace_entry), Base.IOContext{Base.Terminals.TTYTerminal}, Base.StackTraces.StackFrame, Int64}) -precompile(Tuple{typeof(Base.show_backtrace), Base.Terminals.TTYTerminal, Array{Ptr{Cvoid}, 1}}) precompile(Tuple{typeof(Base.Multimedia.display), Int64}) precompile(Tuple{typeof(Core.Compiler.isbits), Base.MIME{Symbol("text/plain")}}) precompile(Tuple{typeof(Core.Compiler.isbits), Tuple{typeof(Base.Multimedia.display), typeof(Base.show)}}) -precompile(Tuple{typeof(Base.Multimedia.display), Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, Int64}) precompile(Tuple{Type{Base.MIME{Symbol("text/plain")}}}) -precompile(Tuple{typeof(Base.Multimedia.display), Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, Base.MIME{Symbol("text/plain")}, Int64}) precompile(Tuple{typeof(Base.start), Base.Pair{Any, Any}}) -precompile(Tuple{typeof(Base.LineEdit.reset_state), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.reset_state), Base.LineEdit.SearchState}) -precompile(Tuple{typeof(Base.LineEdit.reset_state), Base.REPL.REPLHistoryProvider}) -precompile(Tuple{typeof(Base.LineEdit.reset_state), Base.LineEdit.PrefixSearchState}) -precompile(Tuple{typeof(Base.haskey), Base.Dict{Any, Any}, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base.LineEdit.deactivate), Base.LineEdit.Prompt, Base.LineEdit.PromptState, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal}) -precompile(Tuple{typeof(Base.LineEdit.activate), Base.LineEdit.Prompt, Base.LineEdit.PromptState, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal}) -precompile(Tuple{typeof(Base.LineEdit.commit_changes), Base.Terminals.TTYTerminal, Base.Terminals.TerminalBuffer}) -precompile(Tuple{typeof(Base.LineEdit.complete_line), Base.LineEdit.PromptState, Int64}) -precompile(Tuple{typeof(Base.LineEdit.input_string_newlines_aftercursor), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.complete_line), Base.REPL.REPLCompletionProvider, Base.LineEdit.PromptState}) precompile(Tuple{getfield(Base, Symbol("#kw##parse")), Array{Any, 1}, typeof(Base.parse), String}) precompile(Tuple{typeof(Base._rsearch), String, Array{Char, 1}, Int64}) -precompile(Tuple{getfield(Base.REPLCompletions, Symbol("#kw##find_start_brace")), Array{Any, 1}, typeof(Base.REPLCompletions.find_start_brace), String}) precompile(Tuple{typeof(Core.Compiler.isbits), Tuple{Nothing, Nothing, Nothing}}) precompile(Tuple{typeof(Base.isidentifier), Base.SubString{String}}) precompile(Tuple{typeof(Core.Compiler.isbits), Tuple{Bool, Nothing, Nothing}}) @@ -590,17 +422,10 @@ precompile(Tuple{typeof(Base._setindex!), Base.Dict{String, Nothing}, Nothing, S precompile(Tuple{typeof(Base.setindex!), Base.Dict{String, Nothing}, Nothing, String}) precompile(Tuple{typeof(Base.Filesystem.realpath), Base.SubString{String}}) precompile(Tuple{typeof(Base.Filesystem.readdir), Base.SubString{String}}) -precompile(Tuple{typeof(Base.REPLCompletions.dict_identifier_key), String, Symbol}) precompile(Tuple{typeof(Base.Filesystem.expanduser), String}) -precompile(Tuple{typeof(Base.REPLCompletions.bslash_completions), String, Int64}) -precompile(Tuple{typeof(Base.REPLCompletions.should_method_complete), String}) -precompile(Tuple{typeof(Base.REPLCompletions.afterusing), String, Int64}) -precompile(Tuple{typeof(Base.REPLCompletions.complete_keyword), String}) precompile(Tuple{typeof(Base.in), Char, Array{Any, 1}}) precompile(Tuple{typeof(Base.string), Char, Char}) precompile(Tuple{typeof(Base.unique), Array{String, 1}}) -precompile(Tuple{typeof(Base.REPL.beforecursor), Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.REPLCompletions.completions), String, Int64}) precompile(Tuple{typeof(Base.incomplete_tag), Symbol}) precompile(Tuple{typeof(Base._rsearch), String, String, Int64}) precompile(Tuple{typeof(Base.pushfirst!), Array{Base.SubString{String}, 1}, Base.SubString{String}}) @@ -612,66 +437,16 @@ precompile(Tuple{typeof(Base.sort!), Array{String, 1}, Int64, Int64, Base.Sort.I precompile(Tuple{typeof(Base.sort!), Array{String, 1}, Int64, Int64, Base.Sort.MergeSortAlg, Base.Order.ForwardOrdering, Array{String, 1}}) precompile(Tuple{typeof(Base.start), Tuple{Array{String, 1}, String, Bool}}) precompile(Tuple{typeof(Base.indexed_next), Tuple{Array{String, 1}, String, Bool}, Int64, Int64}) -precompile(Tuple{typeof(Base.LineEdit.common_prefix), Array{String, 1}}) -precompile(Tuple{typeof(Base.LineEdit.show_completions), Base.LineEdit.PromptState, Array{String, 1}}) precompile(Tuple{typeof(Base.collect_to!), Array{Int64, 1}, Base.Generator{Array{String, 1}, typeof(Base.length)}, Int64, Int64}) precompile(Tuple{typeof(Base._collect), Array{String, 1}, Base.Generator{Array{String, 1}, typeof(Base.length)}, Base.EltypeUnknown, Base.HasShape}) -precompile(Tuple{typeof(Base.Terminals.cmove_down), Base.Terminals.TTYTerminal, Int64}) -precompile(Tuple{typeof(Base.Terminals.cmove_col), Base.Terminals.TTYTerminal, Int64}) -precompile(Tuple{typeof(Base.Terminals.cmove_right), Base.Terminals.TTYTerminal, Int64}) precompile(Tuple{typeof(Base.write), Base.TTY, Char}) -precompile(Tuple{typeof(Base.LineEdit.match_input), Base.LineEdit.KeyAlias, Base.LineEdit.MIState, Base.Terminals.TTYTerminal, Array{Char, 1}, Base.Dict{Char, Any}}) precompile(Tuple{typeof(Base.peek), Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.char_move_left), Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.edit_backspace), Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.edit_backspace), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.Terminals.beep), Base.Terminals.TTYTerminal}) -precompile(Tuple{typeof(Base.LineEdit.edit_move_down), Base.GenericIOBuffer{Array{UInt8, 1}}}) precompile(Tuple{typeof(Core.Compiler.length), Tuple{Core.Compiler.Const, Core.Compiler.Const, Core.Compiler.Const, DataType}}) precompile(Tuple{typeof(Core.Compiler.getindex), Tuple{Core.Compiler.Const, Core.Compiler.Const, Core.Compiler.Const, DataType}, Int64}) -precompile(Tuple{typeof(Base.LineEdit.replace_line), Base.LineEdit.PrefixSearchState, String}) -precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.LineEdit.PrefixSearchState}) precompile(Tuple{typeof(Base.copy), Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.REPL.history_move), Base.LineEdit.PrefixSearchState, Base.REPL.REPLHistoryProvider, Int64, Int64}) -precompile(Tuple{typeof(Base.LineEdit.edit_move_down), Base.LineEdit.MIState}) -precompile(Tuple{typeof(Base.LineEdit.enter_prefix_search), Base.LineEdit.MIState, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}, Bool}) -precompile(Tuple{typeof(Base.haskey), Base.Dict{Any, Any}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base.ht_keyindex), Base.Dict{Any, Any}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base.getindex), Base.Dict{Any, Any}, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base.LineEdit.copybuf!), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.activate), Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}, Base.LineEdit.PrefixSearchState, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal}) -precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PrefixSearchState}) -precompile(Tuple{typeof(Base.LineEdit.history_next_prefix), Base.LineEdit.PrefixSearchState, Base.REPL.REPLHistoryProvider, String}) -precompile(Tuple{typeof(Base.REPL.history_move_prefix), Base.LineEdit.PrefixSearchState, Base.REPL.REPLHistoryProvider, String, Bool, Int64}) -precompile(Tuple{typeof(Base.LineEdit.keymap), Base.LineEdit.PrefixSearchState, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base.LineEdit.terminal), Base.LineEdit.PrefixSearchState}) -precompile(Tuple{typeof(Base.LineEdit.keymap_data), Base.LineEdit.PrefixSearchState, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}) -precompile(Tuple{typeof(Base.LineEdit.history_prev_prefix), Base.LineEdit.PrefixSearchState, Base.REPL.REPLHistoryProvider, String}) precompile(Tuple{typeof(Base.getindex), Base.Dict{Symbol, Any}, Symbol}) -precompile(Tuple{typeof(Base.LineEdit.transition), Base.LineEdit.MIState, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base.LineEdit.deactivate), Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}, Base.LineEdit.PrefixSearchState, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal}) -precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TTYTerminal, Base.LineEdit.PrefixSearchState}) -precompile(Tuple{typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PrefixSearchState}) -precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PrefixSearchState}) -precompile(Tuple{getfield(Base.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(Base.LineEdit.refresh_multi_line), Base.Terminals.TerminalBuffer, Base.Terminals.TTYTerminal, Base.LineEdit.PrefixSearchState}) -precompile(Tuple{typeof(Base.LineEdit.replace_line), Base.LineEdit.PrefixSearchState, Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.accept_result), Base.LineEdit.MIState, Base.LineEdit.PrefixHistoryPrompt{Base.REPL.REPLHistoryProvider}}) precompile(Tuple{typeof(Core.Compiler.length), Tuple{Core.Compiler.Const, Core.Compiler.Const, DataType}}) precompile(Tuple{typeof(Core.Compiler.getindex), Tuple{Core.Compiler.Const, Core.Compiler.Const, DataType}, Int64}) -precompile(Tuple{typeof(Base.LineEdit.replace_line), Base.LineEdit.PromptState, Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.match_input), Base.Dict{Char, Any}, Base.LineEdit.MIState, Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.edit_move_left), Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.edit_move_left), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.edit_move_right), Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.edit_move_right), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.move_line_start), Base.LineEdit.MIState}) -precompile(Tuple{typeof(Base.LineEdit.move_line_end), Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.move_line_end), Base.LineEdit.MIState}) -precompile(Tuple{typeof(Base.LineEdit.edit_move_up), Base.GenericIOBuffer{Array{UInt8, 1}}}) -precompile(Tuple{typeof(Base.LineEdit.edit_move_up), Base.LineEdit.MIState}) -precompile(Tuple{typeof(Base.:(==)), Symbol, Base.LineEdit.Prompt}) -precompile(Tuple{typeof(Base.isempty), Base.LineEdit.PromptState}) -precompile(Tuple{typeof(Base.LineEdit.default_enter_cb), Base.LineEdit.PromptState}) precompile(Tuple{typeof(Base.Docs.helpmode), String}) precompile(Tuple{typeof(Base.ht_keyindex), Base.Dict{Symbol, Base.Docs.DocStr}, Symbol}) precompile(Tuple{typeof(Base.Docs.helpmode), Base.TTY, String}) @@ -968,15 +743,6 @@ precompile(Tuple{typeof(Base.put_unbuffered), Base.Channel{Any}, Tuple{Base.Mark precompile(Tuple{typeof(Base.start), Tuple{Base.Markdown.MD, Nothing}}) precompile(Tuple{typeof(Base.indexed_next), Tuple{Base.Markdown.MD, Nothing}, Int64, Int64}) precompile(Tuple{typeof(Base.Multimedia.display), Base.Markdown.MD}) -precompile(Tuple{typeof(Base.Multimedia.display), Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, Base.Markdown.MD}) -precompile(Tuple{typeof(Base.displaysize), Base.Terminals.TTYTerminal}) -precompile(Tuple{typeof(Base.Markdown.term), Base.Terminals.TTYTerminal, Array{Any, 1}, Int64}) -precompile(Tuple{typeof(Base.Markdown.term), Base.Terminals.TTYTerminal, Base.Markdown.MD, Int64}) -precompile(Tuple{typeof(Base.Markdown.term), Base.Terminals.TTYTerminal, Base.Markdown.Code, Int64}) -precompile(Tuple{typeof(Base.write), Base.Terminals.TTYTerminal, Base.SubString{String}}) -precompile(Tuple{typeof(Base.print), Base.Terminals.TTYTerminal, Base.SubString{String}}) -precompile(Tuple{typeof(Base.print), Base.Terminals.TTYTerminal, Base.SubString{String}, Char}) -precompile(Tuple{typeof(Base.Markdown.term), Base.Terminals.TTYTerminal, Base.Markdown.Paragraph, Int64}) precompile(Tuple{typeof(Core.Compiler.eltype), Type{Array{T, 2} where T}}) precompile(Tuple{getfield(Base.Markdown, Symbol("#kw##wrapped_lines")), Array{Any, 1}, typeof(Base.Markdown.wrapped_lines), String}) precompile(Tuple{typeof(Base.start), Tuple{Symbol, String}}) @@ -1307,35 +1073,19 @@ precompile(Tuple{typeof(Base.isassigned), Array{Int64, 1}, Int64}) precompile(Tuple{typeof(Base.summary), Array{Int64, 1}, Tuple{Base.OneTo{Int64}}}) precompile(Tuple{typeof(Base.isassigned), Array{Int64, 1}, Int64, Int64}) precompile(Tuple{typeof(Base.isassigned), Array{Int64, 1}}) -precompile(Tuple{typeof(Base.Multimedia.display), Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, Array{Int64, 1}}) -precompile(Tuple{typeof(Base.Multimedia.display), Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, Base.MIME{Symbol("text/plain")}, Array{Int64, 1}}) -precompile(Tuple{typeof(Base.show_delim_array), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Int64, 1}, String, String, String, Bool, Int64, Int64}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, Char}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, String, Char}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, String, String}) -precompile(Tuple{typeof(Base.print), Base.IOContext{Base.Terminals.TTYTerminal}, String, String, Char}) -precompile(Tuple{typeof(Base.show_vector), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Int64, 1}, String, String}) -precompile(Tuple{typeof(Base._show_nonempty), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Int64, 1}, String}) -precompile(Tuple{typeof(Base._show_empty), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Int64, 1}}) -precompile(Tuple{typeof(Base.print_matrix), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Int64, 1}, String, String, String}) precompile(Tuple{typeof(Base.getindex), Base.ImmutableDict{Symbol, Any}, Symbol}) precompile(Tuple{typeof(Base.vcat), Base.OneTo{Int64}}) precompile(Tuple{typeof(Base.collect_to!), Array{Int64, 1}, Base.Generator{Array{Tuple{Int64, Int64}, 1}, typeof(Base.sum)}, Int64, Int64}) precompile(Tuple{typeof(Base._collect), Array{Tuple{Int64, Int64}, 1}, Base.Generator{Array{Tuple{Int64, Int64}, 1}, typeof(Base.sum)}, Base.EltypeUnknown, Base.HasShape}) precompile(Tuple{typeof(Base.pop!), Array{Tuple{Int64, Int64}, 1}}) precompile(Tuple{typeof(Base.reverse), Array{Tuple{Int64, Int64}, 1}, Int64, Int64}) -precompile(Tuple{typeof(Base.print_matrix_vdots), Base.IOContext{Base.Terminals.TTYTerminal}, String, Array{Tuple{Int64, Int64}, 1}, String, Int64, Int64}) -precompile(Tuple{typeof(Base.print_matrix), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Int64, 1}, String, String, String, String, String, String, Int64, Int64}) -precompile(Tuple{typeof(Base.alignment), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Int64, 1}, Array{Int64, 1}, Array{Int64, 1}, Int64, Int64, Int64}) precompile(Tuple{getfield(Base, Symbol("#kw##sprint")), Array{Any, 1}, typeof(Base.sprint), Int64, typeof(Base.show), Int64}) precompile(Tuple{typeof(Base._sub2ind), Tuple{Int64}, Int64, Int64}) precompile(Tuple{typeof(Base._sub2ind_recurse), Tuple{Int64}, Int64, Int64, Int64, Int64}) precompile(Tuple{typeof(Base._sub2ind_recurse), Tuple{}, Int64, Int64, Int64}) precompile(Tuple{typeof(Base.first), Array{Int64, 1}}) -precompile(Tuple{typeof(Base.print_matrix_row), Base.IOContext{Base.Terminals.TTYTerminal}, Array{Int64, 1}, Array{Tuple{Int64, Int64}, 1}, Int64, Array{Int64, 1}, String}) precompile(Tuple{typeof(Base.print), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.OneTo{Int64}}) precompile(Tuple{typeof(Base.last), Array{Int64, 1}}) -precompile(Tuple{typeof(Base.LineEdit.edit_delete), Base.GenericIOBuffer{Array{UInt8, 1}}}) precompile(Tuple{typeof(Base.print), String}) precompile(Tuple{typeof(Base.vcat), Array{Int64, 1}}) precompile(Tuple{typeof(Core.Compiler.eltype), Type{Array{Int64, 1}}}) diff --git a/base/show.jl b/base/show.jl index da03ed53c0bdd..4ba28a7bbb5c7 100644 --- a/base/show.jl +++ b/base/show.jl @@ -1,5 +1,158 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license +# first a few multiline show functions for types defined before the MIME type: + +show(io::IO, ::MIME"text/plain", r::AbstractRange) = show(io, r) # always use the compact form for printing ranges + +function show(io::IO, ::MIME"text/plain", r::LinSpace) + # show for linspace, e.g. + # linspace(1,3,7) + # 7-element LinSpace{Float64}: + # 1.0,1.33333,1.66667,2.0,2.33333,2.66667,3.0 + print(io, summary(r)) + if !isempty(r) + println(io, ":") + print_range(io, r) + end +end + +function show(io::IO, ::MIME"text/plain", f::Function) + ft = typeof(f) + mt = ft.name.mt + if isa(f, Core.IntrinsicFunction) + show(io, f) + id = Core.Intrinsics.bitcast(Int32, f) + print(io, " (intrinsic function #$id)") + elseif isa(f, Core.Builtin) + print(io, mt.name, " (built-in function)") + else + name = mt.name + isself = isdefined(ft.name.module, name) && + ft == typeof(getfield(ft.name.module, name)) + n = length(methods(f)) + m = n==1 ? "method" : "methods" + sname = string(name) + ns = (isself || '#' in sname) ? sname : string("(::", ft, ")") + what = startswith(ns, '@') ? "macro" : "generic function" + print(io, ns, " (", what, " with $n $m)") + end +end + +function show(io::IO, ::MIME"text/plain", iter::Union{KeySet,ValueIterator}) + print(io, summary(iter)) + isempty(iter) && return + print(io, ". ", isa(iter,KeySet) ? "Keys" : "Values", ":") + limit::Bool = get(io, :limit, false) + if limit + sz = displaysize(io) + rows, cols = sz[1] - 3, sz[2] + rows < 2 && (print(io, " …"); return) + cols < 4 && (cols = 4) + cols -= 2 # For prefix " " + rows -= 1 # For summary + else + rows = cols = typemax(Int) + end + + for (i, v) in enumerate(iter) + print(io, "\n ") + i == rows < length(iter) && (print(io, "⋮"); break) + + if limit + str = sprint(show, v, context=io, sizehint=0) + str = _truncate_at_width_or_chars(str, cols, "\r\n") + print(io, str) + else + show(io, v) + end + end +end + +function show(io::IO, ::MIME"text/plain", t::AbstractDict{K,V}) where {K,V} + # show more descriptively, with one line per key/value pair + recur_io = IOContext(io, :SHOWN_SET => t) + limit::Bool = get(io, :limit, false) + if !haskey(io, :compact) + recur_io = IOContext(recur_io, :compact => true) + end + + print(io, summary(t)) + isempty(t) && return + print(io, ":") + show_circular(io, t) && return + if limit + sz = displaysize(io) + rows, cols = sz[1] - 3, sz[2] + rows < 2 && (print(io, " …"); return) + cols < 12 && (cols = 12) # Minimum widths of 2 for key, 4 for value + cols -= 6 # Subtract the widths of prefix " " separator " => " + rows -= 1 # Subtract the summary + + # determine max key width to align the output, caching the strings + ks = Vector{AbstractString}(uninitialized, min(rows, length(t))) + vs = Vector{AbstractString}(uninitialized, min(rows, length(t))) + keylen = 0 + vallen = 0 + for (i, (k, v)) in enumerate(t) + i > rows && break + ks[i] = sprint(show, k, context=recur_io, sizehint=0) + vs[i] = sprint(show, v, context=recur_io, sizehint=0) + keylen = clamp(length(ks[i]), keylen, cols) + vallen = clamp(length(vs[i]), vallen, cols) + end + if keylen > max(div(cols, 2), cols - vallen) + keylen = max(cld(cols, 3), cols - vallen) + end + else + rows = cols = typemax(Int) + end + + for (i, (k, v)) in enumerate(t) + print(io, "\n ") + i == rows < length(t) && (print(io, rpad("⋮", keylen), " => ⋮"); break) + + if limit + key = rpad(_truncate_at_width_or_chars(ks[i], keylen, "\r\n"), keylen) + else + key = sprint(show, k, context=recur_io, sizehint=0) + end + print(recur_io, key) + print(io, " => ") + + if limit + val = _truncate_at_width_or_chars(vs[i], cols - keylen, "\r\n") + print(io, val) + else + show(recur_io, v) + end + end +end + +function show(io::IO, ::MIME"text/plain", opt::JLOptions) + println(io, "JLOptions(") + fields = fieldnames(JLOptions) + nfields = length(fields) + for (i, f) in enumerate(fields) + v = getfield(opt, i) + if isa(v, Ptr{UInt8}) + v = (v != C_NULL) ? unsafe_string(v) : "" + elseif isa(v, Ptr{Ptr{UInt8}}) + v = unsafe_load_commands(v) + end + println(io, " ", f, " = ", repr(v), i < nfields ? "," : "") + end + print(io, ")") +end + +function show(io::IO, ::MIME"text/plain", t::Task) + show(io, t) + if t.state == :failed + println(io) + showerror(io, CapturedException(t.result, t.backtrace)) + end +end + + print(io::IO, s::Symbol) = (write(io,s); nothing) """ diff --git a/base/sysimg.jl b/base/sysimg.jl index ed86a0e128cc9..87b1bc5ffe5bb 100644 --- a/base/sysimg.jl +++ b/base/sysimg.jl @@ -182,6 +182,8 @@ struct MIME{mime} end macro MIME_str(s) :(MIME{$(Expr(:quote, Symbol(s)))}) end +# fallback text/plain representation of any type: +show(io::IO, ::MIME"text/plain", x) = show(io, x) # SIMD loops include("simdloop.jl") @@ -416,7 +418,7 @@ include("channels.jl") include("deepcopy.jl") include("interactiveutil.jl") include("summarysize.jl") -include("replutil.jl") +include("errorshow.jl") include("i18n.jl") using .I18n @@ -466,12 +468,6 @@ include("asyncmap.jl") include("multimedia.jl") using .Multimedia -# frontend -include("repl/Terminals.jl") -include("repl/LineEdit.jl") -include("repl/REPLCompletions.jl") -include("repl/REPL.jl") - # deprecated functions include("deprecated.jl") @@ -528,6 +524,7 @@ Base.require(Base, :SparseArrays) Base.require(Base, :SuiteSparse) Base.require(Base, :Test) Base.require(Base, :Unicode) +Base.require(Base, :REPL) @eval Base begin @deprecate_binding Test root_module(Base, :Test) true ", run `using Test` instead" @@ -555,6 +552,12 @@ Base.require(Base, :Unicode) @deprecate_binding LinAlg root_module(Base, :LinearAlgebra) true ", run `using LinearAlgebra` instead" @deprecate_binding(I, root_module(Base, :LinearAlgebra).I, true, ", run `using LinearAlgebra` to load linear algebra functionality.") + + # PR 25544 + @deprecate_binding REPL root_module(Base, :REPL) true ", run `using REPL` instead" + @deprecate_binding LineEdit root_module(Base, :REPL).LineEdit true ", use `REPL.LineEdit` instead" + @deprecate_binding REPLCompletions root_module(Base, :REPL).REPLCompletions true ", use `REPL.REPLCompletions` instead" + @deprecate_binding Terminals root_module(Base, :REPL).Terminals true ", use `REPL.Terminals` instead" end empty!(DEPOT_PATH) diff --git a/doc/make.jl b/doc/make.jl index 09233810b49f2..120d8c81db4a0 100644 --- a/doc/make.jl +++ b/doc/make.jl @@ -72,7 +72,6 @@ const PAGES = [ "manual/networking-and-streams.md", "manual/parallel-computing.md", "manual/dates.md", - "manual/interacting-with-julia.md", "manual/running-external-programs.md", "manual/calling-c-and-fortran-code.md", "manual/handling-operating-system-variation.md", diff --git a/doc/src/base/base.md b/doc/src/base/base.md index ccc12b94cb7b5..e92cb39e08841 100644 --- a/doc/src/base/base.md +++ b/doc/src/base/base.md @@ -21,7 +21,6 @@ Some general notes: Base.exit Base.quit Base.atexit -Base.atreplinit Base.isinteractive Base.varinfo Base.summarysize diff --git a/doc/src/index.md b/doc/src/index.md index 11af7ef880d41..3dca8a7eb7d15 100644 --- a/doc/src/index.md +++ b/doc/src/index.md @@ -38,7 +38,6 @@ Please read the [release notes](NEWS.md) to see what has changed since the last * [Calling C and Fortran Code](@ref) * [Handling Operating System Variation](@ref) * [Environment Variables](@ref) - * [Interacting With Julia](@ref) * [Embedding Julia](@ref) * [Packages](@ref) * [Profiling](@ref) @@ -77,6 +76,7 @@ Please read the [release notes](NEWS.md) to see what has changed since the last ## Standard Library + * [The Julia REPL](@ref) * [Base64](@ref) * [CRC32c](@ref) * [Dates and Time](@ref stdlib-dates) diff --git a/doc/src/manual/environment-variables.md b/doc/src/manual/environment-variables.md index 201147c1473ad..ba9569e8f1a80 100644 --- a/doc/src/manual/environment-variables.md +++ b/doc/src/manual/environment-variables.md @@ -207,7 +207,7 @@ Environment variables that determine how REPL output should be formatted at the terminal. Generally, these variables should be set to [ANSI terminal escape sequences](http://ascii-table.com/ansi-escape-sequences.php). Julia provides a high-level interface with much of the same functionality: see the section on -[Interacting With Julia](@ref). +[The Julia REPL](@ref). ### `JULIA_ERROR_COLOR` diff --git a/doc/src/manual/index.md b/doc/src/manual/index.md index a23117dd2c1e0..5d776d5dbf22e 100644 --- a/doc/src/manual/index.md +++ b/doc/src/manual/index.md @@ -27,7 +27,6 @@ * [Calling C and Fortran Code](@ref) * [Handling Operating System Variation](@ref) * [Environment Variables](@ref) - * [Interacting With Julia](@ref) * [Embedding Julia](@ref) * [Packages](@ref) * [Package Development](@ref) diff --git a/doc/src/manual/unicode-input.md b/doc/src/manual/unicode-input.md index 0952f6324b831..b95130160478c 100644 --- a/doc/src/manual/unicode-input.md +++ b/doc/src/manual/unicode-input.md @@ -19,7 +19,7 @@ the symbol). # # Generate a table containing all LaTeX and Emoji tab completions available in the REPL. # - +import REPL const NBSP = '\u00A0' function tab_completions(symbols...) @@ -75,8 +75,8 @@ end table_entries( tab_completions( - Base.REPLCompletions.latex_symbols, - Base.REPLCompletions.emoji_symbols + REPL.REPLCompletions.latex_symbols, + REPL.REPLCompletions.emoji_symbols ), unicode_data() ) diff --git a/doc/src/manual/workflow-tips.md b/doc/src/manual/workflow-tips.md index a3878b853f47e..bd00c03828b57 100644 --- a/doc/src/manual/workflow-tips.md +++ b/doc/src/manual/workflow-tips.md @@ -4,7 +4,7 @@ Here are some tips for working with Julia efficiently. ## REPL-based workflow -As already elaborated in [Interacting With Julia](@ref), Julia's REPL provides rich functionality +As already elaborated in [The Julia REPL](@ref), Julia's REPL provides rich functionality that facilitates an efficient interactive workflow. Here are some tips that might further enhance your experience at the command line. diff --git a/doc/src/manual/interacting-with-julia.md b/stdlib/REPL/docs/src/index.md similarity index 97% rename from doc/src/manual/interacting-with-julia.md rename to stdlib/REPL/docs/src/index.md index 1f4b067e939ce..a21d2cb70fd32 100644 --- a/doc/src/manual/interacting-with-julia.md +++ b/stdlib/REPL/docs/src/index.md @@ -1,4 +1,4 @@ -# Interacting With Julia +# The Julia REPL Julia comes with a full-featured interactive command-line REPL (read-eval-print loop) built into the `julia` executable. In addition to allowing quick and easy evaluation of Julia statements, @@ -196,16 +196,17 @@ to do so). ### Customizing keybindings Julia's REPL keybindings may be fully customized to a user's preferences by passing a dictionary -to `REPL.setup_interface()`. The keys of this dictionary may be characters or strings. The key +to `REPL.setup_interface`. The keys of this dictionary may be characters or strings. The key `'*'` refers to the default action. Control plus character `x` bindings are indicated with `"^x"`. Meta plus `x` can be written `"\\Mx"`. The values of the custom keymap must be `nothing` (indicating that the input should be ignored) or functions that accept the signature `(PromptState, AbstractREPL, Char)`. -The `REPL.setup_interface()` function must be called before the REPL is initialized, by registering -the operation with `atreplinit()`. For example, to bind the up and down arrow keys to move through +The `REPL.setup_interface` function must be called before the REPL is initialized, by registering +the operation with [`atreplinit`](@ref) . For example, to bind the up and down arrow keys to move through history without prefix search, one could put the following code in `.juliarc.jl`: ```julia -import Base: LineEdit, REPL +import REPL +import REPL.LineEdit const mykeys = Dict{Any,Any}( # Up Arrow @@ -255,7 +256,7 @@ julia> e¹ = [1 0] 1×2 Array{Int64,2}: 1 0 -julia> \sqrt[TAB]2 # √ is equivalent to the sqrt() function +julia> \sqrt[TAB]2 # √ is equivalent to the sqrt function julia> √2 1.4142135623730951 @@ -375,3 +376,9 @@ ENV["JULIA_ERROR_COLOR"] = :magenta ENV["JULIA_WARN_COLOR"] = :yellow ENV["JULIA_INFO_COLOR"] = :cyan ``` + +## References + +```@docs +Base.atreplinit +``` diff --git a/base/repl/LineEdit.jl b/stdlib/REPL/src/LineEdit.jl similarity index 99% rename from base/repl/LineEdit.jl rename to stdlib/REPL/src/LineEdit.jl index d8bbbc7d4a03c..d0a5c069f3208 100644 --- a/base/repl/LineEdit.jl +++ b/stdlib/REPL/src/LineEdit.jl @@ -2,6 +2,7 @@ module LineEdit +import ..REPL using ..Terminals import ..Terminals: raw!, width, height, cmove, getX, @@ -85,7 +86,7 @@ options(s::PromptState) = # in the REPL module s.p.repl.options else - Base.REPL.GlobalOptions + REPL.GlobalOptions end function setmark(s::MIState, guess_region_active::Bool=true) diff --git a/base/repl/REPL.jl b/stdlib/REPL/src/REPL.jl similarity index 99% rename from base/repl/REPL.jl rename to stdlib/REPL/src/REPL.jl index 5866f1151728c..def4fb4dc0eac 100644 --- a/base/repl/REPL.jl +++ b/stdlib/REPL/src/REPL.jl @@ -3,9 +3,6 @@ module REPL using Base.Meta -using ..Terminals -using ..LineEdit -using ..REPLCompletions export AbstractREPL, @@ -20,6 +17,12 @@ import Base: AnyDict, == + +include("Terminals.jl") +using .Terminals + +include("LineEdit.jl") +using .LineEdit import ..LineEdit: CompletionProvider, HistoryProvider, @@ -36,6 +39,13 @@ import ..LineEdit: terminal, MIState +include("REPLCompletions.jl") +using .REPLCompletions + +function __init__() + Base.REPL_MODULE_REF[] = REPL +end + abstract type AbstractREPL end answer_color(::AbstractREPL) = "" @@ -103,17 +113,6 @@ function start_repl_backend(repl_channel::Channel, response_channel::Channel) end backend end - -function ip_matches_func(ip, func::Symbol) - for fr in StackTraces.lookup(ip) - if fr === StackTraces.UNKNOWN || fr.from_c - return false - end - fr.func === func && return true - end - return false -end - struct REPLDisplay{R<:AbstractREPL} <: AbstractDisplay repl::R end @@ -1138,4 +1137,7 @@ function start_repl_server(port::Int) end end +include("precompile.jl") +_precompile_() + end # module diff --git a/base/repl/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl similarity index 99% rename from base/repl/REPLCompletions.jl rename to stdlib/REPL/src/REPLCompletions.jl index 3d152b66e3621..82cdfefbb991e 100644 --- a/base/repl/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -274,7 +274,7 @@ end # Returns the value in a expression if sym is defined in current namespace fn. # This method is used to iterate to the value of a expression like: -# :(Base.REPLCompletions.whitespace_chars) a `dump` of this expression +# :(REPL.REPLCompletions.whitespace_chars) a `dump` of this expression # will show it consist of Expr, QuoteNode's and Symbol's which all needs to # be handled differently to iterate down to get the value of whitespace_chars. function get_value(sym::Expr, fn) diff --git a/base/repl/Terminals.jl b/stdlib/REPL/src/Terminals.jl similarity index 100% rename from base/repl/Terminals.jl rename to stdlib/REPL/src/Terminals.jl diff --git a/base/repl/emoji_symbols.jl b/stdlib/REPL/src/emoji_symbols.jl similarity index 100% rename from base/repl/emoji_symbols.jl rename to stdlib/REPL/src/emoji_symbols.jl diff --git a/base/repl/latex_symbols.jl b/stdlib/REPL/src/latex_symbols.jl similarity index 99% rename from base/repl/latex_symbols.jl rename to stdlib/REPL/src/latex_symbols.jl index c3719e49c7149..b9b00b6bbb118 100644 --- a/base/repl/latex_symbols.jl +++ b/stdlib/REPL/src/latex_symbols.jl @@ -7,6 +7,7 @@ # http://www.w3.org/Math/characters/unicode.xml # by the following Julia script: #= +import REPL using LightXML xdoc = parse_file("unicode.xml") latexsym = [] @@ -49,7 +50,7 @@ end #= fname = "unicode-math-table.tex" isfile(fname) || download("http://mirror.math.ku.edu/tex-archive/macros/latex/contrib/unicode-math/$fname", fname) -const latex_strings = Set(values(Base.REPLCompletions.latex_symbols)) +const latex_strings = Set(values(REPL.REPLCompletions.latex_symbols)) open(fname) do f for L in eachline(f) x = map(s -> rstrip(s, [' ','\t','\n']), diff --git a/stdlib/REPL/src/precompile.jl b/stdlib/REPL/src/precompile.jl new file mode 100644 index 0000000000000..87042ba8aff2d --- /dev/null +++ b/stdlib/REPL/src/precompile.jl @@ -0,0 +1,251 @@ +function _precompile_() + ccall(:jl_generating_output, Cint, ()) == 1 || return nothing + precompile(Tuple{typeof(Base.__atreplinit), REPL.LineEditREPL}) + precompile(Tuple{typeof(Base.banner), REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(Base._setindex!), Base.Dict{Symbol, Any}, REPL.LineEdit.Prompt, Symbol, Int64}) + precompile(Tuple{typeof(Base.setindex!), Base.Dict{Symbol, Any}, REPL.LineEdit.Prompt, Symbol}) + precompile(Tuple{typeof(REPL.LineEdit.getEntry), Base.Dict{Char, Any}, Char}) + precompile(Tuple{typeof(REPL.LineEdit.getEntry), Base.Dict{Char, Any}, String}) + precompile(Tuple{typeof(Base.promote_type), Type{REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}}, Type{REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}}) + precompile(Tuple{typeof(Base.promote_rule), Type{REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}}, Type{REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}}) + precompile(Tuple{typeof(Base.promote_rule), Type{REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}, Type{REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}}}) + precompile(Tuple{typeof(Base.promote_result), Type{REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}}, Type{REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}, Type{Union{}}, Type{Union{}}}) + precompile(Tuple{typeof(Base.promote_type), Type{REPL.LineEdit.Prompt}, Type{REPL.LineEdit.TextInterface}}) + precompile(Tuple{typeof(Base.promote_rule), Type{REPL.LineEdit.Prompt}, Type{REPL.LineEdit.TextInterface}}) + precompile(Tuple{typeof(Base.promote_rule), Type{REPL.LineEdit.TextInterface}, Type{REPL.LineEdit.Prompt}}) + precompile(Tuple{typeof(Base.promote_result), Type{REPL.LineEdit.Prompt}, Type{REPL.LineEdit.TextInterface}, Type{Union{}}, Type{Union{}}}) + precompile(Tuple{typeof(Base.setindex!), Array{REPL.LineEdit.TextInterface, 1}, REPL.LineEdit.Prompt, Int64}) + precompile(Tuple{typeof(Base.setindex!), Array{REPL.LineEdit.TextInterface, 1}, REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}, Int64}) + precompile(Tuple{typeof(Base.setindex!), Array{REPL.LineEdit.TextInterface, 1}, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}, Int64}) + precompile(Tuple{typeof(Base.copyto!), Array{REPL.LineEdit.TextInterface, 1}, Tuple{REPL.LineEdit.Prompt, REPL.LineEdit.Prompt, REPL.LineEdit.Prompt, REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}}) + precompile(Tuple{typeof(REPL.Terminals.cmove_up), REPL.Terminals.TerminalBuffer, Int64}) + precompile(Tuple{typeof(REPL.Terminals.cmove_down), REPL.Terminals.TerminalBuffer, Int64}) + precompile(Tuple{typeof(REPL.Terminals.cmove_right), REPL.Terminals.TerminalBuffer, Int64}) + precompile(Tuple{typeof(REPL.LineEdit._clear_input_area), REPL.Terminals.TerminalBuffer, REPL.LineEdit.InputAreaState}) + precompile(Tuple{getfield(Base, Symbol("#kw##readline")), Array{Any, 1}, typeof(Base.readline), REPL.Terminals.TerminalBuffer}) + precompile(Tuple{typeof(REPL.LineEdit.write_prompt), REPL.Terminals.TerminalBuffer, REPL.LineEdit.Prompt}) + precompile(Tuple{getfield(REPL.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TerminalBuffer, REPL.Terminals.TerminalBuffer, REPL.LineEdit.InputAreaState, String}) + precompile(Tuple{typeof(REPL.LineEdit.update_key_repeats), REPL.LineEdit.MIState, Array{Char, 1}}) + precompile(Tuple{typeof(REPL.LineEdit.reset_state), REPL.LineEdit.MIState}) + precompile(Tuple{typeof(Base.write), REPL.Terminals.TerminalBuffer, Array{UInt8, 1}}) + precompile(Tuple{typeof(REPL.LineEdit.keymap), Array{Base.Dict{Any, Any}, 1}}) + precompile(Tuple{typeof(REPL.LineEdit.add_specialisations), Base.Dict{Char, Any}, Base.Dict{Char, Any}, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.keymap_merge), Base.Dict{Char, Any}, Base.Dict{Any, Any}}) + precompile(Tuple{typeof(REPL.LineEdit.postprocess!), Base.Dict{Char, Any}}) + precompile(Tuple{typeof(REPL.LineEdit.keymap_unify), Array{Base.Dict{Any, Any}, 1}}) + precompile(Tuple{typeof(REPL.LineEdit.validate_keymap), Base.Dict{Char, Any}}) + precompile(Tuple{getfield(Core, Symbol("#kw#Type")), Array{Any, 1}, Type{REPL.LineEdit.Prompt}, String}) + precompile(Tuple{Type{Base.Dict{Symbol, Any}}, Base.Pair{Symbol, REPL.LineEdit.Prompt}, Base.Pair{Symbol, REPL.LineEdit.Prompt}, Base.Pair{Symbol, REPL.LineEdit.Prompt}}) + precompile(Tuple{Type{REPLHistoryProvider}, Base.Dict{Symbol, Any}}) + precompile(Tuple{typeof(find_hist_file)}) + precompile(Tuple{typeof(history_reset_state), REPLHistoryProvider}) + precompile(Tuple{typeof(REPL.LineEdit.setup_search_keymap), REPLHistoryProvider}) + precompile(Tuple{typeof(REPL.LineEdit.setup_prefix_keymap), REPLHistoryProvider, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(mode_keymap), REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(Base.Multimedia.popdisplay), REPLDisplay{REPL.LineEditREPL}}) + precompile(Tuple{typeof(ends_with_semicolon), String}) + precompile(Tuple{typeof(Base.Multimedia.popdisplay), REPLDisplay{BasicREPL}}) + precompile(Tuple{typeof(Base.Multimedia.popdisplay), REPLDisplay{StreamREPL}}) + precompile(Tuple{typeof(start_repl_backend), Base.Channel{Any}, Base.Channel{Any}}) + precompile(Tuple{typeof(REPL.Terminals.hascolor), REPL.Terminals.TTYTerminal}) + precompile(Tuple{Type{REPL.LineEditREPL}, REPL.Terminals.TTYTerminal, Bool}) + precompile(Tuple{Type{REPL.Terminals.TTYTerminal}, String, Base.TTY, Base.TTY, Base.IOStream}) + precompile(Tuple{typeof(Base.:(==)), Base.Multimedia.TextDisplay, REPLDisplay{REPL.LineEditREPL}}) + precompile(Tuple{typeof(Base.:(==)), REPLDisplay{REPL.LineEditREPL}, REPLDisplay{REPL.LineEditREPL}}) + precompile(Tuple{typeof(hist_from_file), REPLHistoryProvider, Base.IOStream, String}) + precompile(Tuple{typeof(hist_getline), Base.IOStream}) + precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, REPL.LineEdit.KeyAlias, Int64}) + precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, REPL.LineEdit.KeyAlias, Int64, Int64}) + precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, REPL.LineEdit.KeyAlias, String}) + precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, REPL.LineEdit.KeyAlias, String, Int64}) + precompile(Tuple{getfield(REPL.LineEdit, Symbol("#kw##add_nested_key!")), Array{Any, 1}, typeof(REPL.LineEdit.add_nested_key!), Base.Dict{Char, Any}, String, Nothing}) + precompile(Tuple{getfield(REPL.LineEdit, Symbol("#kw##add_nested_key!")), Array{Any, 1}, typeof(REPL.LineEdit.add_nested_key!), Base.Dict{Char, Any}, String, REPL.LineEdit.KeyAlias}) + precompile(Tuple{typeof(Base._setindex!), Base.Dict{Char, Any}, REPL.LineEdit.KeyAlias, Char, Int64}) + precompile(Tuple{typeof(Base.setindex!), Base.Dict{Char, Any}, REPL.LineEdit.KeyAlias, Char}) + precompile(Tuple{typeof(REPL.LineEdit.fixup_keymaps!), Base.Dict{Char, Any}, Int64, Char, Nothing}) + precompile(Tuple{typeof(REPL.LineEdit.run_interface), REPL.Terminals.TTYTerminal, REPL.LineEdit.ModalInterface}) + precompile(Tuple{getfield(REPL.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, Base.GenericIOBuffer{Array{UInt8, 1}}, REPL.LineEdit.InputAreaState, REPL.LineEdit.PromptState}) + precompile(Tuple{getfield(REPL.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, Base.GenericIOBuffer{Array{UInt8, 1}}, REPL.LineEdit.InputAreaState, REPL.LineEdit.PrefixSearchState}) + precompile(Tuple{typeof(Base.write), REPL.Terminals.TTYTerminal, Array{UInt8, 1}}) + precompile(Tuple{typeof(REPL.LineEdit.init_state), REPL.Terminals.TTYTerminal, REPL.LineEdit.ModalInterface}) + precompile(Tuple{typeof(REPL.LineEdit.prompt!), REPL.Terminals.TTYTerminal, REPL.LineEdit.ModalInterface, REPL.LineEdit.MIState}) + precompile(Tuple{typeof(Base.getindex), Array{REPL.LineEdit.TextInterface, 1}, Int64}) + precompile(Tuple{typeof(Base.start), Array{REPL.LineEdit.TextInterface, 1}}) + precompile(Tuple{typeof(Base.done), Array{REPL.LineEdit.TextInterface, 1}, Int64}) + precompile(Tuple{typeof(Base.next), Array{REPL.LineEdit.TextInterface, 1}, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.init_state), REPL.Terminals.TTYTerminal, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, REPL.LineEdit.PromptState, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(Base.ht_keyindex2!), Base.Dict{Any, Any}, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, REPL.LineEdit.PromptState, REPL.LineEdit.Prompt, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.init_state), REPL.Terminals.TTYTerminal, REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, REPL.LineEdit.SearchState, REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(Base.ht_keyindex2!), Base.Dict{Any, Any}, REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, REPL.LineEdit.SearchState, REPL.LineEdit.HistoryPrompt{REPLHistoryProvider}, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.init_state), REPL.Terminals.TTYTerminal, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(Base.setindex!), Base.Dict{Any, Any}, REPL.LineEdit.PrefixSearchState, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(Base.ht_keyindex2!), Base.Dict{Any, Any}, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(Base._setindex!), Base.Dict{Any, Any}, REPL.LineEdit.PrefixSearchState, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.activate), REPL.LineEdit.Prompt, REPL.LineEdit.MIState, REPL.Terminals.TTYTerminal, REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(Base.:(==)), REPL.LineEdit.Prompt, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(Base.getindex), Base.Dict{Any, Any}, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(Base.ht_keyindex), Base.Dict{Any, Any}, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(REPL.LineEdit.activate), REPL.LineEdit.Prompt, REPL.LineEdit.PromptState, REPL.Terminals.TTYTerminal, REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, REPL.LineEdit.PromptState}) + precompile(Tuple{getfield(REPL.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, REPL.LineEdit.PromptState}) + precompile(Tuple{getfield(REPL.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.match_input), Base.Dict{Char, Any}, REPL.LineEdit.MIState}) + precompile(Tuple{typeof(REPL.LineEdit.match_input), Base.Dict{Char, Any}, REPL.LineEdit.MIState, Base.GenericIOBuffer{Array{UInt8, 1}}, Array{Char, 1}, Base.Dict{Char, Any}}) + precompile(Tuple{typeof(REPL.LineEdit.terminal), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.match_input), Base.Dict{Char, Any}, REPL.LineEdit.MIState, REPL.Terminals.TTYTerminal, Array{Char, 1}, Base.Dict{Char, Any}}) + precompile(Tuple{typeof(Base.read), REPL.Terminals.TTYTerminal, Type{Char}}) + precompile(Tuple{typeof(REPL.LineEdit.edit_splice!), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.Pair{Int,Int}, String}) + precompile(Tuple{typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.edit_insert), Base.GenericIOBuffer{Array{UInt8, 1}}, String}) + precompile(Tuple{typeof(REPL.LineEdit.edit_insert), REPL.LineEdit.PromptState, String}) + precompile(Tuple{typeof(REPL.Terminals.width), REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(mode_idx), REPLHistoryProvider, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(REPL.LineEdit.commit_line), REPL.LineEdit.MIState}) + precompile(Tuple{typeof(REPL.LineEdit.on_enter), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(return_callback), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.refresh_multi_line), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TTYTerminal, REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(Base.println), REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(Base.write), REPL.Terminals.TTYTerminal, Char}) + precompile(Tuple{typeof(REPL.LineEdit.add_history), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.add_history), REPLHistoryProvider, REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.mode), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(reset), REPL.LineEditREPL}) + precompile(Tuple{typeof(eval_user_input), Expr, REPLBackend}) + precompile(Tuple{typeof(print_response), REPL.LineEditREPL, Int64, Nothing, Bool, Bool}) + precompile(Tuple{typeof(print_response), REPL.Terminals.TTYTerminal, Int64, Nothing, Bool, Bool, Nothing}) + precompile(Tuple{typeof(Base.print), REPL.Terminals.TTYTerminal, DataType}) + precompile(Tuple{typeof(Base.print), REPL.Terminals.TTYTerminal, Char}) + precompile(Tuple{typeof(Base.print), REPL.Terminals.TTYTerminal, String, DataType, String, Char}) + precompile(Tuple{typeof(Base.print), REPL.Terminals.TTYTerminal, String, Char}) + precompile(Tuple{Type{Base.IOContext{REPL.Terminals.TTYTerminal}}, REPL.Terminals.TTYTerminal, Base.ImmutableDict{Symbol, Any}}) + precompile(Tuple{getfield(Base, Symbol("#kw##with_output_color")), Array{Any, 1}, typeof(Base.with_output_color), typeof(Base.print), Symbol, Base.IOContext{REPL.Terminals.TTYTerminal}, String}) + precompile(Tuple{getfield(Base, Symbol("#kw##with_output_color")), Array{Any, 1}, typeof(Base.with_output_color), typeof(Base.print), Int64, Base.IOContext{REPL.Terminals.TTYTerminal}, String}) + precompile(Tuple{typeof(Base.write), Base.IOContext{REPL.Terminals.TTYTerminal}, Symbol}) + precompile(Tuple{typeof(Base.show), Base.IOContext{REPL.Terminals.TTYTerminal}, Module}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, String}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, Module}) + precompile(Tuple{typeof(Base.show), Base.IOContext{REPL.Terminals.TTYTerminal}, Int32}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, Symbol}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, Int32}) + precompile(Tuple{typeof(Base.show), Base.IOContext{REPL.Terminals.TTYTerminal}, Int64}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, Int64}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, String, Int64, String}) + precompile(Tuple{typeof(Base.write), Base.IOContext{REPL.Terminals.TTYTerminal}, Char}) + precompile(Tuple{typeof(Base.show_circular), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Any, 1}}) + precompile(Tuple{typeof(Base.show_delim_array), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Any, 1}, Char, Char, Char, Bool, Int64, Int64}) + precompile(Tuple{typeof(Base.join), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Any, 1}, String, String}) + precompile(Tuple{typeof(Base.join), Base.IOContext{REPL.Terminals.TTYTerminal}, Tuple{}, String, String}) + precompile(Tuple{typeof(Base.show_method_params), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Any, 1}}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, String, Module}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, String, Symbol, String, Int32}) + precompile(Tuple{typeof(Base.show_tuple_as_call), Base.IOContext{REPL.Terminals.TTYTerminal}, Symbol, Type}) + precompile(Tuple{typeof(Base.print_with_color), Symbol, Base.IOContext{REPL.Terminals.TTYTerminal}, String}) + precompile(Tuple{typeof(Base.print_with_color), Int64, Base.IOContext{REPL.Terminals.TTYTerminal}, String}) + precompile(Tuple{typeof(Base.show), Base.IOContext{REPL.Terminals.TTYTerminal}, Core.MethodInstance}) + precompile(Tuple{typeof(Base.StackTraces.show_spec_linfo), Base.IOContext{REPL.Terminals.TTYTerminal}, Base.StackTraces.StackFrame}) + precompile(Tuple{getfield(Base, Symbol("#kw##show")), Array{Any, 1}, typeof(Base.show), Base.IOContext{REPL.Terminals.TTYTerminal}, Base.StackTraces.StackFrame}) + precompile(Tuple{getfield(Base, Symbol("#kw##show_trace_entry")), Array{Any, 1}, typeof(Base.show_trace_entry), Base.IOContext{REPL.Terminals.TTYTerminal}, Base.StackTraces.StackFrame, Int64}) + precompile(Tuple{typeof(Base.show_backtrace), REPL.Terminals.TTYTerminal, Array{Ptr{Cvoid}, 1}}) + precompile(Tuple{typeof(Base.Multimedia.display), REPLDisplay{REPL.LineEditREPL}, Int64}) + precompile(Tuple{typeof(Base.Multimedia.display), REPLDisplay{REPL.LineEditREPL}, Base.MIME{Symbol("text/plain")}, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.reset_state), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.reset_state), REPL.LineEdit.SearchState}) + precompile(Tuple{typeof(REPL.LineEdit.reset_state), REPLHistoryProvider}) + precompile(Tuple{typeof(REPL.LineEdit.reset_state), REPL.LineEdit.PrefixSearchState}) + precompile(Tuple{typeof(Base.haskey), Base.Dict{Any, Any}, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(REPL.LineEdit.deactivate), REPL.LineEdit.Prompt, REPL.LineEdit.PromptState, REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(REPL.LineEdit.activate), REPL.LineEdit.Prompt, REPL.LineEdit.PromptState, REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(REPL.LineEdit.commit_changes), REPL.Terminals.TTYTerminal, REPL.Terminals.TerminalBuffer}) + precompile(Tuple{typeof(REPL.LineEdit.complete_line), REPL.LineEdit.PromptState, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.input_string_newlines_aftercursor), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.complete_line), REPL.REPLCompletionProvider, REPL.LineEdit.PromptState}) + precompile(Tuple{getfield(REPLCompletions, Symbol("#kw##find_start_brace")), Array{Any, 1}, typeof(REPLCompletions.find_start_brace), String}) + precompile(Tuple{typeof(REPLCompletions.dict_identifier_key), String, Symbol}) + precompile(Tuple{typeof(REPLCompletions.bslash_completions), String, Int64}) + precompile(Tuple{typeof(REPLCompletions.should_method_complete), String}) + precompile(Tuple{typeof(REPLCompletions.afterusing), String, Int64}) + precompile(Tuple{typeof(REPLCompletions.complete_keyword), String}) + precompile(Tuple{typeof(beforecursor), Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPLCompletions.completions), String, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.common_prefix), Array{String, 1}}) + precompile(Tuple{typeof(REPL.LineEdit.show_completions), REPL.LineEdit.PromptState, Array{String, 1}}) + precompile(Tuple{typeof(REPL.Terminals.cmove_down), REPL.Terminals.TTYTerminal, Int64}) + precompile(Tuple{typeof(REPL.Terminals.cmove_col), REPL.Terminals.TTYTerminal, Int64}) + precompile(Tuple{typeof(REPL.Terminals.cmove_right), REPL.Terminals.TTYTerminal, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.match_input), REPL.LineEdit.KeyAlias, REPL.LineEdit.MIState, REPL.Terminals.TTYTerminal, Array{Char, 1}, Base.Dict{Char, Any}}) + precompile(Tuple{typeof(REPL.LineEdit.char_move_left), Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.edit_backspace), Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.edit_backspace), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.Terminals.beep), REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(REPL.LineEdit.edit_move_down), Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.replace_line), REPL.LineEdit.PrefixSearchState, String}) + precompile(Tuple{typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.LineEdit.PrefixSearchState}) + precompile(Tuple{typeof(history_move), REPL.LineEdit.PrefixSearchState, REPLHistoryProvider, Int64, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.edit_move_down), REPL.LineEdit.MIState}) + precompile(Tuple{typeof(REPL.LineEdit.enter_prefix_search), REPL.LineEdit.MIState, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}, Bool}) + precompile(Tuple{typeof(Base.haskey), Base.Dict{Any, Any}, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(Base.ht_keyindex), Base.Dict{Any, Any}, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(Base.getindex), Base.Dict{Any, Any}, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(REPL.LineEdit.copybuf!), Base.GenericIOBuffer{Array{UInt8, 1}}, Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.activate), REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}, REPL.LineEdit.PrefixSearchState, REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, REPL.LineEdit.PrefixSearchState}) + precompile(Tuple{typeof(REPL.LineEdit.history_next_prefix), REPL.LineEdit.PrefixSearchState, REPLHistoryProvider, String}) + precompile(Tuple{typeof(history_move_prefix), REPL.LineEdit.PrefixSearchState, REPLHistoryProvider, String, Bool, Int64}) + precompile(Tuple{typeof(REPL.LineEdit.keymap), REPL.LineEdit.PrefixSearchState, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(REPL.LineEdit.terminal), REPL.LineEdit.PrefixSearchState}) + precompile(Tuple{typeof(REPL.LineEdit.keymap_data), REPL.LineEdit.PrefixSearchState, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(REPL.LineEdit.history_prev_prefix), REPL.LineEdit.PrefixSearchState, REPLHistoryProvider, String}) + precompile(Tuple{typeof(REPL.LineEdit.transition), REPL.LineEdit.MIState, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(REPL.LineEdit.deactivate), REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}, REPL.LineEdit.PrefixSearchState, REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TTYTerminal, REPL.LineEdit.PrefixSearchState}) + precompile(Tuple{typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, REPL.LineEdit.PrefixSearchState}) + precompile(Tuple{getfield(REPL.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, REPL.LineEdit.PrefixSearchState}) + precompile(Tuple{getfield(REPL.LineEdit, Symbol("#kw##refresh_multi_line")), Array{Any, 1}, typeof(REPL.LineEdit.refresh_multi_line), REPL.Terminals.TerminalBuffer, REPL.Terminals.TTYTerminal, REPL.LineEdit.PrefixSearchState}) + precompile(Tuple{typeof(REPL.LineEdit.replace_line), REPL.LineEdit.PrefixSearchState, Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.accept_result), REPL.LineEdit.MIState, REPL.LineEdit.PrefixHistoryPrompt{REPLHistoryProvider}}) + precompile(Tuple{typeof(REPL.LineEdit.replace_line), REPL.LineEdit.PromptState, Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.match_input), Base.Dict{Char, Any}, REPL.LineEdit.MIState, Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.edit_move_left), Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.edit_move_left), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.edit_move_right), Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.edit_move_right), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.move_line_start), REPL.LineEdit.MIState}) + precompile(Tuple{typeof(REPL.LineEdit.move_line_end), Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.move_line_end), REPL.LineEdit.MIState}) + precompile(Tuple{typeof(REPL.LineEdit.edit_move_up), Base.GenericIOBuffer{Array{UInt8, 1}}}) + precompile(Tuple{typeof(REPL.LineEdit.edit_move_up), REPL.LineEdit.MIState}) + precompile(Tuple{typeof(Base.:(==)), Symbol, REPL.LineEdit.Prompt}) + precompile(Tuple{typeof(Base.isempty), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(REPL.LineEdit.default_enter_cb), REPL.LineEdit.PromptState}) + precompile(Tuple{typeof(Base.Multimedia.display), REPLDisplay{REPL.LineEditREPL}, Base.Markdown.MD}) + precompile(Tuple{typeof(Base.displaysize), REPL.Terminals.TTYTerminal}) + precompile(Tuple{typeof(Base.Markdown.term), REPL.Terminals.TTYTerminal, Array{Any, 1}, Int64}) + precompile(Tuple{typeof(Base.Markdown.term), REPL.Terminals.TTYTerminal, Base.Markdown.MD, Int64}) + precompile(Tuple{typeof(Base.Markdown.term), REPL.Terminals.TTYTerminal, Base.Markdown.Code, Int64}) + precompile(Tuple{typeof(Base.write), REPL.Terminals.TTYTerminal, Base.SubString{String}}) + precompile(Tuple{typeof(Base.print), REPL.Terminals.TTYTerminal, Base.SubString{String}}) + precompile(Tuple{typeof(Base.print), REPL.Terminals.TTYTerminal, Base.SubString{String}, Char}) + precompile(Tuple{typeof(Base.Markdown.term), REPL.Terminals.TTYTerminal, Base.Markdown.Paragraph, Int64}) + precompile(Tuple{typeof(Base.Multimedia.display), REPLDisplay{REPL.LineEditREPL}, Array{Int64, 1}}) + precompile(Tuple{typeof(Base.Multimedia.display), REPLDisplay{REPL.LineEditREPL}, Base.MIME{Symbol("text/plain")}, Array{Int64, 1}}) + precompile(Tuple{typeof(Base.show_delim_array), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Int64, 1}, String, String, String, Bool, Int64, Int64}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, Char}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, String, Char}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, String, String}) + precompile(Tuple{typeof(Base.print), Base.IOContext{REPL.Terminals.TTYTerminal}, String, String, Char}) + precompile(Tuple{typeof(Base.show_vector), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Int64, 1}, String, String}) + precompile(Tuple{typeof(Base._show_nonempty), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Int64, 1}, String}) + precompile(Tuple{typeof(Base._show_empty), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Int64, 1}}) + precompile(Tuple{typeof(Base.print_matrix), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Int64, 1}, String, String, String}) + precompile(Tuple{typeof(Base.print_matrix_vdots), Base.IOContext{REPL.Terminals.TTYTerminal}, String, Array{Tuple{Int64, Int64}, 1}, String, Int64, Int64}) + precompile(Tuple{typeof(Base.print_matrix), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Int64, 1}, String, String, String, String, String, String, Int64, Int64}) + precompile(Tuple{typeof(Base.alignment), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Int64, 1}, Array{Int64, 1}, Array{Int64, 1}, Int64, Int64, Int64}) + precompile(Tuple{typeof(Base.print_matrix_row), Base.IOContext{REPL.Terminals.TTYTerminal}, Array{Int64, 1}, Array{Tuple{Int64, Int64}, 1}, Int64, Array{Int64, 1}, String}) + precompile(Tuple{typeof(REPL.LineEdit.edit_delete), Base.GenericIOBuffer{Array{UInt8, 1}}}) +end diff --git a/stdlib/REPL/test/FakeTerminals.jl b/stdlib/REPL/test/FakeTerminals.jl new file mode 100644 index 0000000000000..1fe587b144642 --- /dev/null +++ b/stdlib/REPL/test/FakeTerminals.jl @@ -0,0 +1,19 @@ +module FakeTerminals + +import REPL + +mutable struct FakeTerminal <: REPL.Terminals.UnixTerminal + in_stream::Base.IO + out_stream::Base.IO + err_stream::Base.IO + hascolor::Bool + raw::Bool + FakeTerminal(stdin,stdout,stderr,hascolor=true) = + new(stdin,stdout,stderr,hascolor,false) +end + +REPL.Terminals.hascolor(t::FakeTerminal) = t.hascolor +REPL.Terminals.raw!(t::FakeTerminal, raw::Bool) = t.raw = raw +REPL.Terminals.size(t::FakeTerminal) = (24, 80) + +end diff --git a/test/lineedit.jl b/stdlib/REPL/test/lineedit.jl similarity index 95% rename from test/lineedit.jl rename to stdlib/REPL/test/lineedit.jl index e5d5432a3ff8c..3f2807253579c 100644 --- a/test/lineedit.jl +++ b/stdlib/REPL/test/lineedit.jl @@ -1,19 +1,25 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license -using Base.LineEdit -using Base.LineEdit: edit_insert, buffer, content, setmark, getmark, region +using Test +using REPL +import REPL.LineEdit +import REPL.LineEdit: edit_insert, buffer, content, setmark, getmark, region -isdefined(Main, :TestHelpers) || @eval Main include(joinpath(dirname(@__FILE__), "TestHelpers.jl")) -using .Main.TestHelpers +include("FakeTerminals.jl") +import .FakeTerminals.FakeTerminal + +const BASE_TEST_PATH = joinpath(@__DIR__, "..", "..", "..", "test") +isdefined(Main, :TestHelpers) || @eval Main include(joinpath($(BASE_TEST_PATH), "TestHelpers.jl")) +import .Main.TestHelpers # no need to have animation in tests -Base.REPL.GlobalOptions.region_animation_duration=0.001 +REPL.GlobalOptions.region_animation_duration=0.001 ## helper functions function new_state() - term = TestHelpers.FakeTerminal(IOBuffer(), IOBuffer(), IOBuffer()) - LineEdit.init_state(term, ModalInterface([Prompt("test> ")])) + term = FakeTerminal(IOBuffer(), IOBuffer(), IOBuffer()) + LineEdit.init_state(term, LineEdit.ModalInterface([LineEdit.Prompt("test> ")])) end charseek(buf, i) = seek(buf, nextind(content(buf), 0, i+1)-1) @@ -144,7 +150,7 @@ const test_cycle = Dict( "b" => "a" ) -@test_throws ErrorException keymap([test_cycle]) +@test_throws ErrorException LineEdit.keymap([test_cycle]) # Lazy redirection with Cycles @@ -160,8 +166,8 @@ const level2b = Dict( "b" => LineEdit.KeyAlias("a") ) -@test_throws ErrorException keymap([level2a,level1]) -@test_throws ErrorException keymap([level2b,level1]) +@test_throws ErrorException LineEdit.keymap([level2a,level1]) +@test_throws ErrorException LineEdit.keymap([level2b,level1]) # Lazy redirection functionality test @@ -454,17 +460,17 @@ let buf = IOBuffer( "begin\nprint(\"A very very very very very very very very very very very very ve\")\nend") seek(buf, 4) outbuf = IOBuffer() - termbuf = Base.Terminals.TerminalBuffer(outbuf) - term = TestHelpers.FakeTerminal(IOBuffer(), IOBuffer(), IOBuffer()) + termbuf = REPL.Terminals.TerminalBuffer(outbuf) + term = FakeTerminal(IOBuffer(), IOBuffer(), IOBuffer()) s = LineEdit.refresh_multi_line(termbuf, term, buf, - Base.LineEdit.InputAreaState(0,0), "julia> ", indent = 7) - @test s == Base.LineEdit.InputAreaState(3,1) + REPL.LineEdit.InputAreaState(0,0), "julia> ", indent = 7) + @test s == REPL.LineEdit.InputAreaState(3,1) end @testset "function prompt indentation" begin local s, term, ps, buf, outbuf, termbuf s = new_state() - term = Base.LineEdit.terminal(s) + term = REPL.LineEdit.terminal(s) # default prompt: PromptState.indent should not be set to a final fixed value ps::LineEdit.PromptState = s.mode_state[s.current_mode] @test ps.indent == -1 @@ -475,7 +481,7 @@ end buf = buffer(ps) write(buf, "begin\n julia = :fun\nend") outbuf = IOBuffer() - termbuf = Base.Terminals.TerminalBuffer(outbuf) + termbuf = REPL.Terminals.TerminalBuffer(outbuf) LineEdit.refresh_multi_line(termbuf, term, ps) @test String(take!(outbuf)) == "\r\e[0K\e[1mJulia is Fun! > \e[0m\r\e[16Cbegin\n" * @@ -812,7 +818,7 @@ end @test transform!(buf->LineEdit.edit_indent(buf, -2, true), buf) == ("1\n22\n 333", 5, 0) @test transform!(buf->LineEdit.edit_indent(buf, +2, true), buf) == (" 1\n 22\n 333", 11, 0) @test transform!(buf->LineEdit.edit_indent(buf, -1, true), buf) == (" 1\n 22\n 333", 8, 0) - Base.LineEdit.edit_exchange_point_and_mark(buf) + REPL.LineEdit.edit_exchange_point_and_mark(buf) seek(buf, 5) @test transform!(buf->LineEdit.edit_indent(buf, -1, true), buf) == (" 1\n22\n 333", 4, 6) @@ -849,7 +855,7 @@ end # multiline @test transpose_lines_up_reg!(buf) == false @test transform!(transpose_lines_down_reg!, buf) == ("l2\nl1\nl3", 5, 0) - Base.LineEdit.edit_exchange_point_and_mark(buf) + REPL.LineEdit.edit_exchange_point_and_mark(buf) seek(buf, 1) @test transpose_lines_up_reg!(buf) == false @test transform!(transpose_lines_down_reg!, buf) == ("l3\nl2\nl1", 4, 8) diff --git a/test/repl.jl b/stdlib/REPL/test/repl.jl similarity index 96% rename from test/repl.jl rename to stdlib/REPL/test/repl.jl index a70831c2f01ed..8914d9b99d044 100644 --- a/test/repl.jl +++ b/stdlib/REPL/test/repl.jl @@ -1,14 +1,20 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license +using Test +using REPL +using Random +import REPL.LineEdit + +const BASE_TEST_PATH = joinpath(Sys.BINDIR, "..", "share", "julia", "test") +isdefined(Main, :TestHelpers) || @eval Main include(joinpath($(BASE_TEST_PATH), "TestHelpers.jl")) +import .Main.TestHelpers # For curmod_* -include("testenv.jl") +include(joinpath(BASE_TEST_PATH, "testenv.jl")) -# REPL tests -isdefined(Main, :TestHelpers) || @eval Main include(joinpath(dirname(@__FILE__), "TestHelpers.jl")) -using .Main.TestHelpers -import Base: REPL, LineEdit -using Random +include("FakeTerminals.jl") +import .FakeTerminals.FakeTerminal +# REPL tests function fake_repl(f; options::REPL.Options=REPL.Options(confirm_exit=false)) # Use pipes so we can easily do blocking reads # In the future if we want we can add a test that the right object @@ -20,7 +26,7 @@ function fake_repl(f; options::REPL.Options=REPL.Options(confirm_exit=false)) Base.link_pipe(stdout, julia_only_read=true, julia_only_write=true) Base.link_pipe(stderr, julia_only_read=true, julia_only_write=true) - repl = Base.REPL.LineEditREPL(TestHelpers.FakeTerminal(stdin.out, stdout.in, stderr.in), true) + repl = REPL.LineEditREPL(FakeTerminal(stdin.out, stdout.in, stderr.in), true) repl.options = options f(stdin.in, stdout.out, repl) @@ -44,11 +50,11 @@ ccall(:jl_exit_on_sigint, Cvoid, (Cint,), 0) # this should make sure nothing crashes without depending on how exactly the control # characters are being used. fake_repl() do stdin_write, stdout_read, repl - repl.specialdisplay = Base.REPL.REPLDisplay(repl) + repl.specialdisplay = REPL.REPLDisplay(repl) repl.history_file = false repltask = @async begin - Base.REPL.run_repl(repl) + REPL.run_repl(repl) end global inc = false @@ -70,7 +76,7 @@ fake_repl() do stdin_write, stdout_read, repl write(stdin_write, '\x03') # Test basic completion in main mode write(stdin_write, "Base.REP\t") - readuntil(stdout_read, "Base.REPL") + readuntil(stdout_read, "REPL") write(stdin_write, '\x03') write(stdin_write, "\\alpha\t") readuntil(stdout_read,"α") @@ -322,7 +328,7 @@ for prompt = ["TestΠ", () -> randstring(rand(1:10))] fake_repl() do stdin_write, stdout_read, repl # In the future if we want we can add a test that the right object # gets displayed by intercepting the display - repl.specialdisplay = Base.REPL.REPLDisplay(repl) + repl.specialdisplay = REPL.REPLDisplay(repl) repl.interface = REPL.setup_interface(repl) repl_mode = repl.interface.modes[1] @@ -544,7 +550,7 @@ fake_repl() do stdin_write, stdout_read, repl help_mode = repl.interface.modes[3] repltask = @async begin - Base.REPL.run_repl(repl) + REPL.run_repl(repl) end global c = Condition() @@ -629,7 +635,7 @@ fake_repl() do stdin_write, stdout_read, repl return notify(c,line) end - repltask = @async Base.REPL.run_interface(repl.t, LineEdit.ModalInterface([panel,search_prompt])) + repltask = @async REPL.run_interface(repl.t, LineEdit.ModalInterface([panel,search_prompt])) write(stdin_write,"a\n") @test wait(c) == "a" @@ -702,7 +708,7 @@ fake_repl() do stdin_write, stdout_read, repl slot = Ref(false) # Create a closure from a newer world to check if `_atreplinit` # can run it correctly - atreplinit(@eval(repl::Base.REPL.LineEditREPL -> ($slot[] = true))) + atreplinit(@eval(repl::REPL.LineEditREPL -> ($slot[] = true))) Base._atreplinit(repl) @test slot[] @test_throws MethodError Base.repl_hooks[1](repl) @@ -710,7 +716,7 @@ fake_repl() do stdin_write, stdout_read, repl nothing end -let ends_with_semicolon = Base.REPL.ends_with_semicolon +let ends_with_semicolon = REPL.ends_with_semicolon @test !ends_with_semicolon("") @test ends_with_semicolon(";") @test !ends_with_semicolon("a") @@ -726,8 +732,8 @@ let ends_with_semicolon = Base.REPL.ends_with_semicolon end # PR #20794, TTYTerminal with other kinds of streams -let term = Base.Terminals.TTYTerminal("dumb",IOBuffer("1+2\n"),IOContext(IOBuffer(),:foo=>true),IOBuffer()) - r = Base.REPL.BasicREPL(term) +let term = REPL.Terminals.TTYTerminal("dumb",IOBuffer("1+2\n"),IOContext(IOBuffer(),:foo=>true),IOBuffer()) + r = REPL.BasicREPL(term) REPL.run_repl(r) @test String(take!(term.out_stream.io)) == "julia> 3\n\njulia> \n" @test haskey(term, :foo) == true @@ -742,7 +748,8 @@ end # a small module for alternative keymap tests module AltLE -import Base: LineEdit, REPL +import REPL +import REPL.LineEdit function history_move_prefix(s::LineEdit.MIState, hist::REPL.REPLHistoryProvider, @@ -791,7 +798,7 @@ for keys = [altkeys, merge(altkeys...)], histfile = tempname() try fake_repl() do stdin_write, stdout_read, repl - repl.specialdisplay = Base.REPL.REPLDisplay(repl) + repl.specialdisplay = REPL.REPLDisplay(repl) repl.history_file = true withenv("JULIA_HISTORY" => histfile) do repl.interface = REPL.setup_interface(repl, extra_repl_keymap = altkeys) @@ -799,7 +806,7 @@ for keys = [altkeys, merge(altkeys...)], repl.interface.modes[1].prompt = altprompt repltask = @async begin - Base.REPL.run_repl(repl) + REPL.run_repl(repl) end sendrepl3(cmd) = write(stdin_write,"$cmd\n") @@ -849,11 +856,11 @@ end # Test that module prefix is omitted when type is reachable from Main (PR #23806) fake_repl() do stdin_write, stdout_read, repl - repl.specialdisplay = Base.REPL.REPLDisplay(repl) + repl.specialdisplay = REPL.REPLDisplay(repl) repl.history_file = false repltask = @async begin - Base.REPL.run_repl(repl) + REPL.run_repl(repl) end @eval Main module TestShowTypeREPL; export TypeA; struct TypeA end; end diff --git a/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl similarity index 99% rename from test/replcompletions.jl rename to stdlib/REPL/test/replcompletions.jl index 27d600b132a2f..34fea57bfcac5 100644 --- a/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -1,6 +1,7 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license -using Base.REPLCompletions +using REPL.REPLCompletions +using Test using Random let ex = quote diff --git a/stdlib/REPL/test/runtests.jl b/stdlib/REPL/test/runtests.jl new file mode 100644 index 0000000000000..548018ece9ce9 --- /dev/null +++ b/stdlib/REPL/test/runtests.jl @@ -0,0 +1,9 @@ +module REPLTests + include("repl.jl") +end +module REPLCompletionsTest + include("replcompletions.jl") +end +module LineEditTest + include("lineedit.jl") +end diff --git a/test/TestHelpers.jl b/test/TestHelpers.jl index d2fb0f3a99eb5..5a58c33408a93 100644 --- a/test/TestHelpers.jl +++ b/test/TestHelpers.jl @@ -7,20 +7,6 @@ using Serialization include("dimensionful.jl") export Furlong -mutable struct FakeTerminal <: Base.Terminals.UnixTerminal - in_stream::Base.IO - out_stream::Base.IO - err_stream::Base.IO - hascolor::Bool - raw::Bool - FakeTerminal(stdin,stdout,stderr,hascolor=true) = - new(stdin,stdout,stderr,hascolor,false) -end - -Base.Terminals.hascolor(t::FakeTerminal) = t.hascolor -Base.Terminals.raw!(t::FakeTerminal, raw::Bool) = t.raw = raw -Base.Terminals.size(t::FakeTerminal) = (24, 80) - function open_fake_pty() @static if Sys.iswindows() error("Unable to create a fake PTY in Windows") diff --git a/test/choosetests.jl b/test/choosetests.jl index 1d33a94539032..0dae90ff4e05a 100644 --- a/test/choosetests.jl +++ b/test/choosetests.jl @@ -46,8 +46,8 @@ function choosetests(choices = []) "mpfr", "broadcast", "complex", "socket", "floatapprox", "stdlib", "reflection", "regex", "float16", "combinatorics", "sysinfo", "env", "rounding", "ranges", "mod2pi", - "euler", "show", "lineedit", "replcompletions", "repl", - "replutil", "sets", "goto", "llvmcall", "llvmcall2", "grisu", + "euler", "show", + "errorshow", "sets", "goto", "llvmcall", "llvmcall2", "grisu", "some", "meta", "stacktraces", "libgit2", "docs", "markdown", "misc", "threads", "enums", "cmdlineargs", "i18n", "int", diff --git a/test/compile.jl b/test/compile.jl index a4a84186d1737..e21218855576a 100644 --- a/test/compile.jl +++ b/test/compile.jl @@ -216,7 +216,8 @@ try end for s in [:Base64, :CRC32c, :Dates, :DelimitedFiles, :Distributed, :FileWatching, :Future, :IterativeEigensolvers, :Libdl, :LinearAlgebra, :Logging, :Mmap, :Printf, - :Profile, :Random, :Serialization, :SharedArrays, :SparseArrays, :SuiteSparse, :Test, :Unicode])) + :Profile, :Random, :Serialization, :SharedArrays, :SparseArrays, :SuiteSparse, :Test, + :Unicode, :REPL])) @test discard_module.(deps) == deps1 @test current_task()(0x01, 0x4000, 0x30031234) == 2 diff --git a/test/dict.jl b/test/dict.jl index e1be57a292953..dd1aa158abbba 100644 --- a/test/dict.jl +++ b/test/dict.jl @@ -864,4 +864,45 @@ end @test findfirst(equalto(1), Dict(:a=>1, :b=>1, :c=>3)) in (:a, :b) @test findfirst(equalto(1), Dict()) === nothing @test findfirst(equalto(1), Dict(:a=>2, :b=>3)) === nothing -end \ No newline at end of file +end + +@testset "Dict printing with limited rows" begin + local buf + buf = IOBuffer() + io = IOContext(buf, :displaysize => (4, 80), :limit => true) + d = Base.ImmutableDict(1=>2) + show(io, MIME"text/plain"(), d) + @test String(take!(buf)) == "Base.ImmutableDict{$Int,$Int} with 1 entry: …" + show(io, MIME"text/plain"(), keys(d)) + @test String(take!(buf)) == + "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 1 entry. Keys: …" + + io = IOContext(io, :displaysize => (5, 80)) + show(io, MIME"text/plain"(), d) + @test String(take!(buf)) == "Base.ImmutableDict{$Int,$Int} with 1 entry:\n 1 => 2" + show(io, MIME"text/plain"(), keys(d)) + @test String(take!(buf)) == + "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 1 entry. Keys:\n 1" + d = Base.ImmutableDict(d, 3=>4) + show(io, MIME"text/plain"(), d) + @test String(take!(buf)) == "Base.ImmutableDict{$Int,$Int} with 2 entries:\n ⋮ => ⋮" + show(io, MIME"text/plain"(), keys(d)) + @test String(take!(buf)) == + "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 2 entries. Keys:\n ⋮" + + io = IOContext(io, :displaysize => (6, 80)) + show(io, MIME"text/plain"(), d) + @test String(take!(buf)) == + "Base.ImmutableDict{$Int,$Int} with 2 entries:\n 3 => 4\n 1 => 2" + show(io, MIME"text/plain"(), keys(d)) + @test String(take!(buf)) == + "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 2 entries. Keys:\n 3\n 1" + d = Base.ImmutableDict(d, 5=>6) + show(io, MIME"text/plain"(), d) + @test String(take!(buf)) == + "Base.ImmutableDict{$Int,$Int} with 3 entries:\n 5 => 6\n ⋮ => ⋮" + show(io, MIME"text/plain"(), keys(d)) + @test String(take!(buf)) == + "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 3 entries. Keys:\n 5\n ⋮" +end + diff --git a/test/replutil.jl b/test/errorshow.jl similarity index 90% rename from test/replutil.jl rename to test/errorshow.jl index 5e630a0390542..440c9c902a27c 100644 --- a/test/replutil.jl +++ b/test/errorshow.jl @@ -416,21 +416,6 @@ withenv("JULIA_EDITOR" => nothing, "VISUAL" => nothing, "EDITOR" => nothing) do @test Base.editor() == ["/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl", "-w"] end -# Issue #14684: `display` should print associative types in full. -let d = Dict(1 => 2, 3 => 45), - buf = IOBuffer(), - td = TextDisplay(buf) - - display(td, d) - result = String(take!(td.io)) - @test contains(result, summary(d)) - - # Is every pair in the string? - for el in d - @test contains(result, string(el)) - end -end - # Issue #20108 let err, buf = IOBuffer() try Array() catch err end @@ -439,12 +424,6 @@ let err, buf = IOBuffer() @test contains(String(take!(buf)), "Closest candidates are:") end -# Issue 20111 -let K20111(x) = y -> x, buf = IOBuffer() - show(buf, methods(K20111(1))) - @test contains(String(take!(buf)), " 1 method for generic function") -end - # @macroexpand tests macro seven_dollar(ex) # simonbyrne example 18240 @@ -513,6 +492,7 @@ foo_9965(x::Int) = 2x end # Issue #20556 +import REPL module EnclosingModule abstract type AbstractTypeNoConstructors end end @@ -533,7 +513,7 @@ let @test !contains(sprint(showerror, method_error), "where T at sysimg.jl") # Test that tab-completion will not show the 'default' sysimg.jl method. - for method_string in Base.REPLCompletions.complete_methods(:(EnclosingModule.AbstractTypeNoConstructors())) + for method_string in REPL.REPLCompletions.complete_methods(:(EnclosingModule.AbstractTypeNoConstructors())) @test !startswith(method_string, "(::Type{T})(arg) where T in Base at sysimg.jl") end end @@ -580,49 +560,3 @@ end end end -# issue #22798 -@generated f22798(x::Integer, y) = :x -let buf = IOBuffer() - show(buf, methods(f22798)) - @test contains(String(take!(buf)), "f22798(x::Integer, y)") -end - -@testset "Dict printing with limited rows" begin - local buf - buf = IOBuffer() - io = IOContext(buf, :displaysize => (4, 80), :limit => true) - d = Base.ImmutableDict(1=>2) - show(io, MIME"text/plain"(), d) - @test String(take!(buf)) == "Base.ImmutableDict{$Int,$Int} with 1 entry: …" - show(io, MIME"text/plain"(), keys(d)) - @test String(take!(buf)) == - "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 1 entry. Keys: …" - - io = IOContext(io, :displaysize => (5, 80)) - show(io, MIME"text/plain"(), d) - @test String(take!(buf)) == "Base.ImmutableDict{$Int,$Int} with 1 entry:\n 1 => 2" - show(io, MIME"text/plain"(), keys(d)) - @test String(take!(buf)) == - "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 1 entry. Keys:\n 1" - d = Base.ImmutableDict(d, 3=>4) - show(io, MIME"text/plain"(), d) - @test String(take!(buf)) == "Base.ImmutableDict{$Int,$Int} with 2 entries:\n ⋮ => ⋮" - show(io, MIME"text/plain"(), keys(d)) - @test String(take!(buf)) == - "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 2 entries. Keys:\n ⋮" - - io = IOContext(io, :displaysize => (6, 80)) - show(io, MIME"text/plain"(), d) - @test String(take!(buf)) == - "Base.ImmutableDict{$Int,$Int} with 2 entries:\n 3 => 4\n 1 => 2" - show(io, MIME"text/plain"(), keys(d)) - @test String(take!(buf)) == - "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 2 entries. Keys:\n 3\n 1" - d = Base.ImmutableDict(d, 5=>6) - show(io, MIME"text/plain"(), d) - @test String(take!(buf)) == - "Base.ImmutableDict{$Int,$Int} with 3 entries:\n 5 => 6\n ⋮ => ⋮" - show(io, MIME"text/plain"(), keys(d)) - @test String(take!(buf)) == - "Base.KeySet for a Base.ImmutableDict{$Int,$Int} with 3 entries. Keys:\n 5\n ⋮" -end diff --git a/test/runtests.jl b/test/runtests.jl index 71507ec947b90..e7b249dff2f7d 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,6 +2,7 @@ using Test using Distributed +import REPL using Base.Printf: @sprintf include("choosetests.jl") @@ -102,9 +103,9 @@ cd(dirname(@__FILE__)) do t = current_task() # Monitor STDIN and kill this task on ^C stdin_monitor = @async begin - term = Base.Terminals.TTYTerminal("xterm", STDIN, STDOUT, STDERR) + term = REPL.Terminals.TTYTerminal("xterm", STDIN, STDOUT, STDERR) try - Base.Terminals.raw!(term, true) + REPL.Terminals.raw!(term, true) while true if read(term, Char) == '\x3' Base.throwto(t, InterruptException()) @@ -114,7 +115,7 @@ cd(dirname(@__FILE__)) do catch e isa(e, InterruptException) || rethrow(e) finally - Base.Terminals.raw!(term, false) + REPL.Terminals.raw!(term, false) end end end diff --git a/test/show.jl b/test/show.jl index 3d44191442522..4511150548cf6 100644 --- a/test/show.jl +++ b/test/show.jl @@ -1110,3 +1110,33 @@ end A = [0.0, 1.0] @test replstr(view(A, [1], :)) == "1×1 view(::Array{Float64,2}, [1], :) with eltype Float64:\n 0.0" end + +@testset "#14684: `display` should print associative types in full" begin + d = Dict(1 => 2, 3 => 45) + buf = IOBuffer() + td = TextDisplay(buf) + + display(td, d) + result = String(take!(td.io)) + @test contains(result, summary(d)) + + # Is every pair in the string? + for el in d + @test contains(result, string(el)) + end +end + +@testset "#20111 show for function" begin + K20111(x) = y -> x + buf = IOBuffer() + show(buf, methods(K20111(1))) + @test contains(String(take!(buf)), " 1 method for generic function") +end + +@generated f22798(x::Integer, y) = :x +@testset "#22798" begin + buf = IOBuffer() + show(buf, methods(f22798)) + @test contains(String(take!(buf)), "f22798(x::Integer, y)") +end +