Updated RubySpec submodule to 9f66d0b1.
[rbx.git] / kernel / core / exception.rb
blob472bbadcf18590bf538d59bc45a5f2de141cd62d
1 # depends on: class.rb
3 class Exception
4   
5   ivar_as_index :__ivars => 0, :message => 1, :context => 2
6   def message; @message ; end
8   def initialize(message = nil)
9     @message = message
10     @context = nil
11   end
13   def backtrace
14     return nil unless @context
15     return @context if @context.kind_of? Array
16     awesome_backtrace.to_mri
17   end
18   
19   def awesome_backtrace
20     return nil unless @context
21     unless @context.kind_of? Backtrace
22       @context = Backtrace.backtrace(@context)
23     end
24     @context
25   end
27   def set_backtrace(bt)
28     @context = bt
29   end
30   
31   def to_s
32     @message || self.class.to_s
33   end
34   
35   def inspect
36     "#<#{self.class.name}: #{self.to_s}>"
37   end
38   
39   alias_method :message, :to_s
40   alias_method :to_str, :to_s
41   
42   def self.exception(message=nil)
43     self.new(message)
44   end
45   
46   def exception(message=nil)
47     if message
48       self.class.new(message)
49     else 
50       self
51     end
52   end
53   
54   def context
55     if @context.kind_of? Backtrace
56       return @context.top_context
57     end
58     
59     return @context
60   end
61   
62   def location
63     ctx = self.context
64     [ctx.file.to_s, ctx.line]
65   end
66 end
69 # Primitive fails from opcode "send_primitive"
71 class PrimitiveFailure < Exception
72 end
74 class ScriptError < Exception
75 end
77 class StandardError < Exception
78 end
80 class SignalException < Exception
81 end
83 class NoMemoryError < Exception
84 end
86 class ZeroDivisionError < StandardError
87 end
89 class ArgumentError < StandardError
90 end
92 class IndexError < StandardError
93 end
95 class RangeError < StandardError
96 end
98 class FloatDomainError < RangeError
99 end
101 class LocalJumpError < StandardError
104 class NameError < StandardError
105   attr_reader :name
106   def initialize(*args)
107     super(args.shift)
108     @name = args.shift
109   end
112 class NoMethodError < NameError
113   attr_reader :name
114   attr_reader :args
115   def initialize(*arguments)
116     super(arguments.shift)
117     @name = arguments.shift
118     @args = arguments.shift
119   end
122 class RuntimeError < StandardError
125 class SecurityError < StandardError
128 class SystemStackError < StandardError
131 class ThreadError < StandardError
134 class TypeError < StandardError
137 class FloatDomainError < RangeError
140 class RegexpError < StandardError
143 class LoadError < ScriptError
146 class NotImplementedError < ScriptError
149 class Interrupt < SignalException
152 class IOError < StandardError
155 class EOFError < IOError
158 class LocalJumpError < StandardError
161 class NotImplementedError < ScriptError
164 class SyntaxError < ScriptError
165   attr_accessor :column
166   attr_accessor :line
167   attr_accessor :file
168   attr_accessor :code
170   def import_position(c,l, code)
171     @column = c
172     @line = l
173     @code = code
174   end
176   def message
177     msg = super
178     msg = "#{file}:#{@line}: #{msg}" if file && @line
179     msg
180   end
183 class SystemCallError < StandardError
184   def errno; @errno ; end
186   def initialize(message, errno = nil)
187     if message.is_a?(Integer) && errno.nil?
188       errno   = message
189       message = "Unknown error"
190     end
191     super(message)
192     @errno = errno
193   end
196 class IllegalLongReturn
197   attr_reader :return_value
200 class ReturnException
201   attr_reader :return_value
203   def initialize(val)
204     super(nil) # HACK
205     @return_value = val
206   end
209 class LongReturnException
210   attr_reader :value
211   attr_reader :is_return
213   def return_value=(val)
214     @value = val
215     @is_return = true
216   end
218   def break_value=(val)
219     @value = val
220     @is_return = false
221   end