ÿØÿà JFIF ÿÛ „ ( %!1!%*+...983,7(-.-
PK ]r1 1
context.rbnu [ # frozen_string_literal: false
#
# irb/context.rb - irb context
# $Release Version: 0.9.6$
# $Revision: 53141 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
require "irb/workspace"
require "irb/inspector"
module IRB
# A class that wraps the current state of the irb session, including the
# configuration of IRB.conf.
class Context
# Creates a new IRB context.
#
# The optional +input_method+ argument:
#
# +nil+:: uses stdin or Readline
# +String+:: uses a File
# +other+:: uses this as InputMethod
def initialize(irb, workspace = nil, input_method = nil, output_method = nil)
@irb = irb
if workspace
@workspace = workspace
else
@workspace = WorkSpace.new
end
@thread = Thread.current if defined? Thread
# copy of default configuration
@ap_name = IRB.conf[:AP_NAME]
@rc = IRB.conf[:RC]
@load_modules = IRB.conf[:LOAD_MODULES]
@use_readline = IRB.conf[:USE_READLINE]
@verbose = IRB.conf[:VERBOSE]
@io = nil
self.inspect_mode = IRB.conf[:INSPECT_MODE]
self.math_mode = IRB.conf[:MATH_MODE] if IRB.conf[:MATH_MODE]
self.use_tracer = IRB.conf[:USE_TRACER] if IRB.conf[:USE_TRACER]
self.use_loader = IRB.conf[:USE_LOADER] if IRB.conf[:USE_LOADER]
self.eval_history = IRB.conf[:EVAL_HISTORY] if IRB.conf[:EVAL_HISTORY]
@ignore_sigint = IRB.conf[:IGNORE_SIGINT]
@ignore_eof = IRB.conf[:IGNORE_EOF]
@back_trace_limit = IRB.conf[:BACK_TRACE_LIMIT]
self.prompt_mode = IRB.conf[:PROMPT_MODE]
if IRB.conf[:SINGLE_IRB] or !defined?(IRB::JobManager)
@irb_name = IRB.conf[:IRB_NAME]
else
@irb_name = IRB.conf[:IRB_NAME]+"#"+IRB.JobManager.n_jobs.to_s
end
@irb_path = "(" + @irb_name + ")"
case input_method
when nil
case use_readline?
when nil
if (defined?(ReadlineInputMethod) && STDIN.tty? &&
IRB.conf[:PROMPT_MODE] != :INF_RUBY)
@io = ReadlineInputMethod.new
else
@io = StdioInputMethod.new
end
when false
@io = StdioInputMethod.new
when true
if defined?(ReadlineInputMethod)
@io = ReadlineInputMethod.new
else
@io = StdioInputMethod.new
end
end
when String
@io = FileInputMethod.new(input_method)
@irb_name = File.basename(input_method)
@irb_path = input_method
else
@io = input_method
end
self.save_history = IRB.conf[:SAVE_HISTORY] if IRB.conf[:SAVE_HISTORY]
if output_method
@output_method = output_method
else
@output_method = StdioOutputMethod.new
end
@echo = IRB.conf[:ECHO]
if @echo.nil?
@echo = true
end
self.debug_level = IRB.conf[:DEBUG_LEVEL]
end
# The top-level workspace, see WorkSpace#main
def main
@workspace.main
end
# The toplevel workspace, see #home_workspace
attr_reader :workspace_home
# WorkSpace in the current context
attr_accessor :workspace
# The current thread in this context
attr_reader :thread
# The current input method
#
# Can be either StdioInputMethod, ReadlineInputMethod, FileInputMethod or
# other specified when the context is created. See ::new for more
# information on +input_method+.
attr_accessor :io
# Current irb session
attr_accessor :irb
# A copy of the default IRB.conf[:AP_NAME]
attr_accessor :ap_name
# A copy of the default IRB.conf[:RC]
attr_accessor :rc
# A copy of the default IRB.conf[:LOAD_MODULES]
attr_accessor :load_modules
# Can be either name from IRB.conf[:IRB_NAME], or the number of
# the current job set by JobManager, such as irb#2
attr_accessor :irb_name
# Can be either the #irb_name surrounded by parenthesis, or the
# +input_method+ passed to Context.new
attr_accessor :irb_path
# Whether +Readline+ is enabled or not.
#
# A copy of the default IRB.conf[:USE_READLINE]
#
# See #use_readline= for more information.
attr_reader :use_readline
# A copy of the default IRB.conf[:INSPECT_MODE]
attr_reader :inspect_mode
# A copy of the default IRB.conf[:PROMPT_MODE]
attr_reader :prompt_mode
# Standard IRB prompt
#
# See IRB@Customizing+the+IRB+Prompt for more information.
attr_accessor :prompt_i
# IRB prompt for continuated strings
#
# See IRB@Customizing+the+IRB+Prompt for more information.
attr_accessor :prompt_s
# IRB prompt for continuated statement (e.g. immediately after an +if+)
#
# See IRB@Customizing+the+IRB+Prompt for more information.
attr_accessor :prompt_c
# See IRB@Customizing+the+IRB+Prompt for more information.
attr_accessor :prompt_n
# Can be either the default IRB.conf[:AUTO_INDENT], or the
# mode set by #prompt_mode=
#
# To enable auto-indentation in irb:
#
# IRB.conf[:AUTO_INDENT] = true
#
# or
#
# irb_context.auto_indent_mode = true
#
# or
#
# IRB.CurrentContext.auto_indent_mode = true
#
# See IRB@Configuration for more information.
attr_accessor :auto_indent_mode
# The format of the return statement, set by #prompt_mode= using the
# +:RETURN+ of the +mode+ passed to set the current #prompt_mode.
attr_accessor :return_format
# Whether ^C (+control-c+) will be ignored or not.
#
# If set to +false+, ^C will quit irb.
#
# If set to +true+,
#
# * during input: cancel input then return to top level.
# * during execute: abandon current execution.
attr_accessor :ignore_sigint
# Whether ^D (+control-d+) will be ignored or not.
#
# If set to +false+, ^D will quit irb.
attr_accessor :ignore_eof
# Whether to echo the return value to output or not.
#
# Uses IRB.conf[:ECHO] if available, or defaults to +true+.
#
# puts "hello"
# # hello
# #=> nil
# IRB.CurrentContext.echo = false
# puts "omg"
# # omg
attr_accessor :echo
# Whether verbose messages are displayed or not.
#
# A copy of the default IRB.conf[:VERBOSE]
attr_accessor :verbose
# The debug level of irb
#
# See #debug_level= for more information.
attr_reader :debug_level
# The limit of backtrace lines displayed as top +n+ and tail +n+.
#
# The default value is 16.
#
# Can also be set using the +--back-trace-limit+ command line option.
#
# See IRB@Command+line+options for more command line options.
attr_accessor :back_trace_limit
# Alias for #use_readline
alias use_readline? use_readline
# Alias for #rc
alias rc? rc
alias ignore_sigint? ignore_sigint
alias ignore_eof? ignore_eof
alias echo? echo
# Returns whether messages are displayed or not.
def verbose?
if @verbose.nil?
if defined?(ReadlineInputMethod) && @io.kind_of?(ReadlineInputMethod)
false
elsif !STDIN.tty? or @io.kind_of?(FileInputMethod)
true
else
false
end
else
@verbose
end
end
# Whether #verbose? is +true+, and +input_method+ is either
# StdioInputMethod or ReadlineInputMethod, see #io for more information.
def prompting?
verbose? || (STDIN.tty? && @io.kind_of?(StdioInputMethod) ||
(defined?(ReadlineInputMethod) && @io.kind_of?(ReadlineInputMethod)))
end
# The return value of the last statement evaluated.
attr_reader :last_value
# Sets the return value from the last statement evaluated in this context
# to #last_value.
def set_last_value(value)
@last_value = value
@workspace.evaluate self, "_ = IRB.CurrentContext.last_value"
end
# Sets the +mode+ of the prompt in this context.
#
# See IRB@Customizing+the+IRB+Prompt for more information.
def prompt_mode=(mode)
@prompt_mode = mode
pconf = IRB.conf[:PROMPT][mode]
@prompt_i = pconf[:PROMPT_I]
@prompt_s = pconf[:PROMPT_S]
@prompt_c = pconf[:PROMPT_C]
@prompt_n = pconf[:PROMPT_N]
@return_format = pconf[:RETURN]
if ai = pconf.include?(:AUTO_INDENT)
@auto_indent_mode = ai
else
@auto_indent_mode = IRB.conf[:AUTO_INDENT]
end
end
# Whether #inspect_mode is set or not, see #inspect_mode= for more detail.
def inspect?
@inspect_mode.nil? or @inspect_mode
end
# Whether #io uses a File for the +input_method+ passed when creating the
# current context, see ::new
def file_input?
@io.class == FileInputMethod
end
# Specifies the inspect mode with +opt+:
#
# +true+:: display +inspect+
# +false+:: display +to_s+
# +nil+:: inspect mode in non-math mode,
# non-inspect mode in math mode
#
# See IRB::Inspector for more information.
#
# Can also be set using the +--inspect+ and +--noinspect+ command line
# options.
#
# See IRB@Command+line+options for more command line options.
def inspect_mode=(opt)
if i = Inspector::INSPECTORS[opt]
@inspect_mode = opt
@inspect_method = i
i.init
else
case opt
when nil
if Inspector.keys_with_inspector(Inspector::INSPECTORS[true]).include?(@inspect_mode)
self.inspect_mode = false
elsif Inspector.keys_with_inspector(Inspector::INSPECTORS[false]).include?(@inspect_mode)
self.inspect_mode = true
else
puts "Can't switch inspect mode."
return
end
when /^\s*\{.*\}\s*$/
begin
inspector = eval "proc#{opt}"
rescue Exception
puts "Can't switch inspect mode(#{opt})."
return
end
self.inspect_mode = inspector
when Proc
self.inspect_mode = IRB::Inspector(opt)
when Inspector
prefix = "usr%d"
i = 1
while Inspector::INSPECTORS[format(prefix, i)]; i += 1; end
@inspect_mode = format(prefix, i)
@inspect_method = opt
Inspector.def_inspector(format(prefix, i), @inspect_method)
else
puts "Can't switch inspect mode(#{opt})."
return
end
end
print "Switch to#{unless @inspect_mode; ' non';end} inspect mode.\n" if verbose?
@inspect_mode
end
# Obsolete method.
#
# Can be set using the +--noreadline+ and +--readline+ command line
# options.
#
# See IRB@Command+line+options for more command line options.
def use_readline=(opt)
print "This method is obsolete."
print "Do nothing."
end
# Sets the debug level of irb
#
# Can also be set using the +--irb_debug+ command line option.
#
# See IRB@Command+line+options for more command line options.
def debug_level=(value)
@debug_level = value
RubyLex.debug_level = value
end
# Whether or not debug mode is enabled, see #debug_level=.
def debug?
@debug_level > 0
end
def evaluate(line, line_no) # :nodoc:
@line_no = line_no
set_last_value(@workspace.evaluate(self, line, irb_path, line_no))
end
def inspect_last_value # :nodoc:
@inspect_method.inspect_value(@last_value)
end
alias __exit__ exit
# Exits the current session, see IRB.irb_exit
def exit(ret = 0)
IRB.irb_exit(@irb, ret)
end
NOPRINTING_IVARS = ["@last_value"] # :nodoc:
NO_INSPECTING_IVARS = ["@irb", "@io"] # :nodoc:
IDNAME_IVARS = ["@prompt_mode"] # :nodoc:
alias __inspect__ inspect
def inspect # :nodoc:
array = []
for ivar in instance_variables.sort{|e1, e2| e1 <=> e2}
ivar = ivar.to_s
name = ivar.sub(/^@(.*)$/, '\1')
val = instance_eval(ivar)
case ivar
when *NOPRINTING_IVARS
array.push format("conf.%s=%s", name, "...")
when *NO_INSPECTING_IVARS
array.push format("conf.%s=%s", name, val.to_s)
when *IDNAME_IVARS
array.push format("conf.%s=:%s", name, val.id2name)
else
array.push format("conf.%s=%s", name, val.inspect)
end
end
array.join("\n")
end
alias __to_s__ to_s
alias to_s inspect
end
end
PK ]F_ help.rbnu [ # frozen_string_literal: false
#
# irb/help.rb - print usage module
# $Release Version: 0.9.6$
# $Revision: 53141 $
# by Keiju ISHITSUKA(keiju@ishitsuka.com)
#
# --
#
#
#
require 'irb/magic-file'
module IRB
# Outputs the irb help message, see IRB@Command+line+options.
def IRB.print_usage
lc = IRB.conf[:LC_MESSAGES]
path = lc.find("irb/help-message")
space_line = false
IRB::MagicFile.open(path){|f|
f.each_line do |l|
if /^\s*$/ =~ l
lc.puts l unless space_line
space_line = true
next
end
space_line = false
l.sub!(/#.*$/, "")
next if /^\s*$/ =~ l
lc.puts l
end
}
end
end
PK ](E lc/error.rbnu [ # frozen_string_literal: false
#
# irb/lc/error.rb -
# $Release Version: 0.9.6$
# $Revision: 53141 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
require "e2mmap"
# :stopdoc:
module IRB
# exceptions
extend Exception2MessageMapper
def_exception :UnrecognizedSwitch, "Unrecognized switch: %s"
def_exception :NotImplementedError, "Need to define `%s'"
def_exception :CantReturnToNormalMode, "Can't return to normal mode."
def_exception :IllegalParameter, "Invalid parameter(%s)."
def_exception :IrbAlreadyDead, "Irb is already dead."
def_exception :IrbSwitchedToCurrentThread, "Switched to current thread."
def_exception :NoSuchJob, "No such job(%s)."
def_exception :CantShiftToMultiIrbMode, "Can't shift to multi irb mode."
def_exception :CantChangeBinding, "Can't change binding to (%s)."
def_exception :UndefinedPromptMode, "Undefined prompt mode(%s)."
def_exception :IllegalRCGenerator, 'Define illegal RC_NAME_GENERATOR.'
end
# :startdoc:
PK ]^ lc/ja/error.rbnu [ # -*- coding: utf-8 -*-
# frozen_string_literal: false
# irb/lc/ja/error.rb -
# $Release Version: 0.9.6$
# $Revision: 53141 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
require "e2mmap"
# :stopdoc:
module IRB
# exceptions
extend Exception2MessageMapper
def_exception :UnrecognizedSwitch, 'スイッチ(%s)が分りません'
def_exception :NotImplementedError, '`%s\'の定義が必要です'
def_exception :CantReturnToNormalMode, 'Normalモードに戻れません.'
def_exception :IllegalParameter, 'パラメータ(%s)が間違っています.'
def_exception :IrbAlreadyDead, 'Irbは既に死んでいます.'
def_exception :IrbSwitchedToCurrentThread, 'カレントスレッドに切り替わりました.'
def_exception :NoSuchJob, 'そのようなジョブ(%s)はありません.'
def_exception :CantShiftToMultiIrbMode, 'multi-irb modeに移れません.'
def_exception :CantChangeBinding, 'バインディング(%s)に変更できません.'
def_exception :UndefinedPromptMode, 'プロンプトモード(%s)は定義されていません.'
def_exception :IllegalRCNameGenerator, 'RC_NAME_GENERATORが正しく定義されていません.'
end
# :startdoc:
# vim:fileencoding=utf-8
PK ] lc/ja/help-messagenu [ # -*- coding: utf-8 -*-
# irb/lc/ja/help-message.rb -
# $Release Version: 0.9.6$
# $Revision: 41071 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
Usage: irb.rb [options] [programfile] [arguments]
-f ~/.irbrc を読み込まない.
-m bcモード(分数, 行列の計算ができる)
-d $DEBUG をtrueにする(ruby -d と同じ)
-r load-module ruby -r と同じ.
-I path $LOAD_PATH に path を追加する.
-U ruby -U と同じ.
-E enc ruby -E と同じ.
-w ruby -w と同じ.
-W[level=2] ruby -W と同じ.
--context-mode n 新しいワークスペースを作成した時に関連する Binding
オブジェクトの作成方法を 0 から 3 のいずれかに設定する.
--echo 実行結果を表示する(デフォルト).
--noecho 実行結果を表示しない.
--inspect 結果出力にinspectを用いる(bcモード以外はデフォルト).
--noinspect 結果出力にinspectを用いない.
--readline readlineライブラリを利用する.
--noreadline readlineライブラリを利用しない.
--prompt prompt-mode/--prompt-mode prompt-mode
プロンプトモードを切替えます. 現在定義されているプ
ロンプトモードは, default, simple, xmp, inf-rubyが
用意されています.
--inf-ruby-mode emacsのinf-ruby-mode用のプロンプト表示を行なう. 特
に指定がない限り, readlineライブラリは使わなくなる.
--sample-book-mode/--simple-prompt
非常にシンプルなプロンプトを用いるモードです.
--noprompt プロンプト表示を行なわない.
--single-irb irb 中で self を実行して得られるオブジェクトをサ
ブ irb と共有する.
--tracer コマンド実行時にトレースを行なう.
--back-trace-limit n
バックトレース表示をバックトレースの頭から n, 後ろ
からnだけ行なう. デフォルトは16
--irb_debug n irbのデバッグレベルをnに設定する(非推奨).
--verbose 詳細なメッセージを出力する.
--noverbose 詳細なメッセージを出力しない(デフォルト).
-v, --version irbのバージョンを表示する.
-h, --help irb のヘルプを表示する.
-- 以降のコマンドライン引数をオプションとして扱わない.
# vim:fileencoding=utf-8
PK ]sXU lc/help-messagenu [ # -*- coding: utf-8 -*-
#
# irb/lc/help-message.rb -
# $Release Version: 0.9.6$
# $Revision: 41028 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
Usage: irb.rb [options] [programfile] [arguments]
-f Suppress read of ~/.irbrc
-m Bc mode (load mathn, fraction or matrix are available)
-d Set $DEBUG to true (same as `ruby -d')
-r load-module Same as `ruby -r'
-I path Specify $LOAD_PATH directory
-U Same as `ruby -U`
-E enc Same as `ruby -E`
-w Same as `ruby -w`
-W[level=2] Same as `ruby -W`
--context-mode n Set n[0-3] to method to create Binding Object,
when new workspace was created
--echo Show result(default)
--noecho Don't show result
--inspect Use `inspect' for output (default except for bc mode)
--noinspect Don't use inspect for output
--readline Use Readline extension module
--noreadline Don't use Readline extension module
--prompt prompt-mode/--prompt-mode prompt-mode
Switch prompt mode. Pre-defined prompt modes are
`default', `simple', `xmp' and `inf-ruby'
--inf-ruby-mode Use prompt appropriate for inf-ruby-mode on emacs.
Suppresses --readline.
--sample-book-mode/--simple-prompt
Simple prompt mode
--noprompt No prompt mode
--single-irb Share self with sub-irb.
--tracer Display trace for each execution of commands.
--back-trace-limit n
Display backtrace top n and tail n. The default
value is 16.
--irb_debug n Set internal debug level to n (not for popular use)
--verbose Show details
--noverbose Don't show details
-v, --version Print the version of irb
-h, --help Print help
-- Separate options of irb from the list of command-line args
# vim:fileencoding=utf-8
PK ]" input-method.rbnu [ # frozen_string_literal: false
#
# irb/input-method.rb - input methods used irb
# $Release Version: 0.9.6$
# $Revision: 53141 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
require 'irb/src_encoding'
require 'irb/magic-file'
module IRB
STDIN_FILE_NAME = "(line)" # :nodoc:
class InputMethod
# Creates a new input method object
def initialize(file = STDIN_FILE_NAME)
@file_name = file
end
# The file name of this input method, usually given during initialization.
attr_reader :file_name
# The irb prompt associated with this input method
attr_accessor :prompt
# Reads the next line from this input method.
#
# See IO#gets for more information.
def gets
IRB.fail NotImplementedError, "gets"
end
public :gets
# Whether this input method is still readable when there is no more data to
# read.
#
# See IO#eof for more information.
def readable_after_eof?
false
end
end
class StdioInputMethod < InputMethod
# Creates a new input method object
def initialize
super
@line_no = 0
@line = []
@stdin = IO.open(STDIN.to_i, :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
@stdout = IO.open(STDOUT.to_i, 'w', :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
end
# Reads the next line from this input method.
#
# See IO#gets for more information.
def gets
print @prompt
line = @stdin.gets
@line[@line_no += 1] = line
end
# Whether the end of this input method has been reached, returns +true+ if
# there is no more data to read.
#
# See IO#eof? for more information.
def eof?
@stdin.eof?
end
# Whether this input method is still readable when there is no more data to
# read.
#
# See IO#eof for more information.
def readable_after_eof?
true
end
# Returns the current line number for #io.
#
# #line counts the number of times #gets is called.
#
# See IO#lineno for more information.
def line(line_no)
@line[line_no]
end
# The external encoding for standard input.
def encoding
@stdin.external_encoding
end
end
# Use a File for IO with irb, see InputMethod
class FileInputMethod < InputMethod
# Creates a new input method object
def initialize(file)
super
@io = IRB::MagicFile.open(file)
end
# The file name of this input method, usually given during initialization.
attr_reader :file_name
# Whether the end of this input method has been reached, returns +true+ if
# there is no more data to read.
#
# See IO#eof? for more information.
def eof?
@io.eof?
end
# Reads the next line from this input method.
#
# See IO#gets for more information.
def gets
print @prompt
l = @io.gets
l
end
# The external encoding for standard input.
def encoding
@io.external_encoding
end
end
begin
require "readline"
class ReadlineInputMethod < InputMethod
include Readline
# Creates a new input method object using Readline
def initialize
super
@line_no = 0
@line = []
@eof = false
@stdin = IO.open(STDIN.to_i, :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
@stdout = IO.open(STDOUT.to_i, 'w', :external_encoding => IRB.conf[:LC_MESSAGES].encoding, :internal_encoding => "-")
end
# Reads the next line from this input method.
#
# See IO#gets for more information.
def gets
Readline.input = @stdin
Readline.output = @stdout
if l = readline(@prompt, false)
HISTORY.push(l) if !l.empty?
@line[@line_no += 1] = l + "\n"
else
@eof = true
l
end
end
# Whether the end of this input method has been reached, returns +true+
# if there is no more data to read.
#
# See IO#eof? for more information.
def eof?
@eof
end
# Whether this input method is still readable when there is no more data to
# read.
#
# See IO#eof for more information.
def readable_after_eof?
true
end
# Returns the current line number for #io.
#
# #line counts the number of times #gets is called.
#
# See IO#lineno for more information.
def line(line_no)
@line[line_no]
end
# The external encoding for standard input.
def encoding
@stdin.external_encoding
end
end
rescue LoadError
end
end
PK ]w.d ext/math-mode.rbnu [ # frozen_string_literal: false
#
# math-mode.rb -
# $Release Version: 0.9.6$
# $Revision: 53141 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
require "mathn"
module IRB
class Context
# Returns whether bc mode is enabled.
#
# See #math_mode=
attr_reader :math_mode
# Alias for #math_mode
alias math? math_mode
# Sets bc mode, which loads +lib/mathn.rb+ so fractions or matrix are
# available.
#
# Also available as the +-m+ command line option.
#
# See IRB@Command+line+options and the unix manpage bc(1) for
# more information.
def math_mode=(opt)
if @math_mode == true && !opt
IRB.fail CantReturnToNormalMode
return
end
@math_mode = opt
if math_mode
main.extend Math
print "start math mode\n" if verbose?
end
end
def inspect?
@inspect_mode.nil? && !@math_mode or @inspect_mode
end
end
end
PK ]iS
ext/tracer.rbnu [ # frozen_string_literal: false
#
# irb/lib/tracer.rb -
# $Release Version: 0.9.6$
# $Revision: 53141 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
require "tracer"
module IRB
# initialize tracing function
def IRB.initialize_tracer
Tracer.verbose = false
Tracer.add_filter {
|event, file, line, id, binding, *rests|
/^#{Regexp.quote(@CONF[:IRB_LIB_PATH])}/ !~ file and
File::basename(file) != "irb.rb"
}
end
class Context
# Whether Tracer is used when evaluating statements in this context.
#
# See +lib/tracer.rb+ for more information.
attr_reader :use_tracer
alias use_tracer? use_tracer
# Sets whether or not to use the Tracer library when evaluating statements
# in this context.
#
# See +lib/tracer.rb+ for more information.
def use_tracer=(opt)
if opt
Tracer.set_get_line_procs(@irb_path) {
|line_no, *rests|
@io.line(line_no)
}
elsif !opt && @use_tracer
Tracer.off
end
@use_tracer=opt
end
end
class WorkSpace
alias __evaluate__ evaluate
# Evaluate the context of this workspace and use the Tracer library to
# output the exact lines of code are being executed in chronological order.
#
# See +lib/tracer.rb+ for more information.
def evaluate(context, statements, file = nil, line = nil)
if context.use_tracer? && file != nil && line != nil
Tracer.on
begin
__evaluate__(context, statements, file, line)
ensure
Tracer.off
end
else
__evaluate__(context, statements, file || __FILE__, line || __LINE__)
end
end
end
IRB.initialize_tracer
end
PK ] \\
ext/loader.rbnu [ # frozen_string_literal: false
#
# loader.rb -
# $Release Version: 0.9.6$
# $Revision: 53141 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
module IRB # :nodoc:
# Raised in the event of an exception in a file loaded from an Irb session
class LoadAbort < Exception;end
# Provides a few commands for loading files within an irb session.
#
# See ExtendCommandBundle for more information.
module IrbLoader
alias ruby_load load
alias ruby_require require
# Loads the given file similarly to Kernel#load
def irb_load(fn, priv = nil)
path = search_file_from_ruby_path(fn)
raise LoadError, "No such file to load -- #{fn}" unless path
load_file(path, priv)
end
def search_file_from_ruby_path(fn) # :nodoc:
if /^#{Regexp.quote(File::Separator)}/ =~ fn
return fn if File.exist?(fn)
return nil
end
for path in $:
if File.exist?(f = File.join(path, fn))
return f
end
end
return nil
end
# Loads a given file in the current session and displays the source lines
#
# See Irb#suspend_input_method for more information.
def source_file(path)
irb.suspend_name(path, File.basename(path)) do
irb.suspend_input_method(FileInputMethod.new(path)) do
|back_io|
irb.signal_status(:IN_LOAD) do
if back_io.kind_of?(FileInputMethod)
irb.eval_input
else
begin
irb.eval_input
rescue LoadAbort
print "load abort!!\n"
end
end
end
end
end
end
# Loads the given file in the current session's context and evaluates it.
#
# See Irb#suspend_input_method for more information.
def load_file(path, priv = nil)
irb.suspend_name(path, File.basename(path)) do
if priv
ws = WorkSpace.new(Module.new)
else
ws = WorkSpace.new
end
irb.suspend_workspace(ws) do
irb.suspend_input_method(FileInputMethod.new(path)) do
|back_io|
irb.signal_status(:IN_LOAD) do
if back_io.kind_of?(FileInputMethod)
irb.eval_input
else
begin
irb.eval_input
rescue LoadAbort
print "load abort!!\n"
end
end
end
end
end
end
end
def old # :nodoc:
back_io = @io
back_path = @irb_path
back_name = @irb_name
back_scanner = @irb.scanner
begin
@io = FileInputMethod.new(path)
@irb_name = File.basename(path)
@irb_path = path
@irb.signal_status(:IN_LOAD) do
if back_io.kind_of?(FileInputMethod)
@irb.eval_input
else
begin
@irb.eval_input
rescue LoadAbort
print "load abort!!\n"
end
end
end
ensure
@io = back_io
@irb_name = back_name
@irb_path = back_path
@irb.scanner = back_scanner
end
end
end
end
PK ]Kj ext/change-ws.rbnu [ # frozen_string_literal: false
#
# irb/ext/cb.rb -
# $Release Version: 0.9.6$
# $Revision: 53141 $
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
#
# --
#
#
#
module IRB # :nodoc:
class Context
# Inherited from +TOPLEVEL_BINDING+.
def home_workspace
if defined? @home_workspace
@home_workspace
else
@home_workspace = @workspace
end
end
# Changes the current workspace to given object or binding.
#
# If the optional argument is omitted, the workspace will be
# #home_workspace which is inherited from +TOPLEVEL_BINDING+ or the main
# object, IRB.conf[:MAIN_CONTEXT] when irb was initialized.
#
# See IRB::WorkSpace.new for more information.
def change_workspace(*_main)
if _main.empty?
@workspace = home_workspace
return main
end
@workspace = WorkSpace.new(_main[0])
if !(class<