OSDN Git Service

FIRST REPOSITORY
[eos/hostdependOTHERS.git] / I386LINUX / util / I386LINUX / lib / ruby / 1.6 / irb / loader.rb
1 #
2 #   irb/loader.rb - irb loader 
3 #       $Release Version: 0.7.3$
4 #       $Revision: 1.1.1.1 $
5 #       $Date: 2002/02/01 06:36:22 $
6 #       by Keiju ISHITSUKA(keiju@ishitsuka.com)
7 #
8 # --
9 #
10 #   
11 #
12
13 module IRB
14   class LoadAbort < GlobalExit;end
15
16   module Loader
17     @RCS_ID='-$Id: loader.rb,v 1.1.1.1 2002/02/01 06:36:22 tacyas Exp $-'
18
19     alias ruby_load load
20     alias ruby_require require
21
22     def irb_load(file_name)
23       return ruby_load(file_name) unless IRB.conf[:USE_LOADER]
24
25       load_sub(file_name)
26       return true
27     end
28
29     def irb_require(file_name)
30       return ruby_require(file_name) unless IRB.conf[:USE_LOADER]
31
32       rex = Regexp.new("#{Regexp.quote(file_name)}(\.o|\.rb)?")
33       return false if $".find{|f| f =~ rex}
34
35       case file_name
36       when /\.rb$/
37         begin
38           load_sub(file_name)
39           $".push file_name
40           return true
41         rescue LoadError
42         end
43       when /\.(so|o|sl)$/
44         return ruby_require(file_name)
45       end
46       
47       begin
48         load_sub(f = file_name + ".rb")
49         $".push f
50         return true
51       rescue LoadError
52         return ruby_require(file_name)
53       end
54     end
55
56     def load_sub(fn)
57       if fn =~ /^#{Regexp.quote(File::Separator)}/
58         return false unless File.exist?(fn)
59         return irb_context.load_file(fn)
60       end
61       
62       for path in $:
63         if File.exist?(f = File.join(path, fn))
64           return irb_context.load_file(f)
65         end
66       end
67       raise LoadError, "No such file to load -- #{file_name}"
68     end
69
70     alias load irb_load
71     alias require irb_require
72   end
73
74 #   class Context
75 #     def load_from(file_name)
76 #       io = FileInputMethod.new(file_name)
77 #       @irb.signal_status(:IN_LOAD) do
78 #       switch_io(io, file_name) do
79 #         eval_input
80 #       end
81 #       end
82 #     end
83 #   end
84
85   class Context
86     def load_file(path)
87       back_io = @io
88       back_path = @irb_path
89       back_name = @irb_name
90       back_scanner = @irb.scanner
91       begin
92         @io = FileInputMethod.new(path)
93         @irb_name = File.basename(path)
94         @irb_path = path
95         @irb.signal_status(:IN_LOAD) do
96           if back_io.kind_of?(FileInputMethod)
97             @irb.eval_input
98           else
99             begin
100               @irb.eval_input
101             rescue LoadAbort
102               print "load abort!!\n"
103             end
104           end
105         end
106       ensure
107         @io = back_io
108         @irb_name = back_name
109         @irb_path = back_path
110         @irb.scanner = back_scanner
111       end
112     end
113   end
114
115   module ExtendCommand
116     include Loader
117   end
118 end