зеркало из https://github.com/github/ruby.git
119 строки
2.2 KiB
Ruby
119 строки
2.2 KiB
Ruby
#
|
|
# irb/loader.rb - irb loader
|
|
# $Release Version: 0.7.3$
|
|
# $Revision$
|
|
# $Date$
|
|
# by Keiju ISHITSUKA(keiju@ishitsuka.com)
|
|
#
|
|
# --
|
|
#
|
|
#
|
|
#
|
|
|
|
module IRB
|
|
class LoadAbort < GlobalExit;end
|
|
|
|
module Loader
|
|
@RCS_ID='-$Id$-'
|
|
|
|
alias ruby_load load
|
|
alias ruby_require require
|
|
|
|
def irb_load(file_name)
|
|
return ruby_load(file_name) unless IRB.conf[:USE_LOADER]
|
|
|
|
load_sub(file_name)
|
|
return true
|
|
end
|
|
|
|
def irb_require(file_name)
|
|
return ruby_require(file_name) unless IRB.conf[:USE_LOADER]
|
|
|
|
rex = Regexp.new("#{Regexp.quote(file_name)}(\.o|\.rb)?")
|
|
return false if $".find{|f| f =~ rex}
|
|
|
|
case file_name
|
|
when /\.rb$/
|
|
begin
|
|
load_sub(file_name)
|
|
$".push file_name
|
|
return true
|
|
rescue LoadError
|
|
end
|
|
when /\.(so|o|sl)$/
|
|
return ruby_require(file_name)
|
|
end
|
|
|
|
begin
|
|
load_sub(f = file_name + ".rb")
|
|
$".push f
|
|
return true
|
|
rescue LoadError
|
|
return ruby_require(file_name)
|
|
end
|
|
end
|
|
|
|
def load_sub(fn)
|
|
if fn =~ /^#{Regexp.quote(File::Separator)}/
|
|
return false unless File.exist?(fn)
|
|
return irb_context.load_file(fn)
|
|
end
|
|
|
|
for path in $:
|
|
if File.exist?(f = File.join(path, fn))
|
|
return irb_context.load_file(f)
|
|
end
|
|
end
|
|
raise LoadError, "No such file to load -- #{file_name}"
|
|
end
|
|
|
|
alias load irb_load
|
|
alias require irb_require
|
|
end
|
|
|
|
# class Context
|
|
# def load_from(file_name)
|
|
# io = FileInputMethod.new(file_name)
|
|
# @irb.signal_status(:IN_LOAD) do
|
|
# switch_io(io, file_name) do
|
|
# eval_input
|
|
# end
|
|
# end
|
|
# end
|
|
# end
|
|
|
|
class Context
|
|
def load_file(path)
|
|
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
|
|
|
|
module ExtendCommand
|
|
include Loader
|
|
end
|
|
end
|