Updated RubySpec submodule to 9f66d0b1.
[rbx.git] / kernel / bootstrap / fixnum.rb
blobd85dc0fedf2e9dfdb6d1543da2e3f39bf077b4f1
1 class Fixnum < Integer
3   # unary operators
5   def ~
6     Ruby.primitive :fixnum_invert
7     raise PrimitiveFailure, "Fixnum#~ primitive failed"
8   end
10   def -@
11     Ruby.primitive :fixnum_neg
12     raise PrimitiveFailure, "Fixnum#-@ primitive failed"
13   end
14   
15   # binary math operators
17   def +(o)
18     Ruby.primitive :add
19     super(o)
20   end
21   
22   def -(o)
23     Ruby.primitive :sub
24     super(o)
25   end
26   
27   def *(o)
28     Ruby.primitive :fixnum_mul
29     super(o)
30   end
31   
32   # this method is aliased to / in core
33   # see README-DEVELOPERS regarding safe math compiler plugin
34   def divide(o)
35     Ruby.primitive :fixnum_div
36     super(o)
37   end
38   
39   def %(o)
40     Ruby.primitive :fixnum_modulo
41     super(o)
42   end
43   
44   def divmod(other)
45     Ruby.primitive :fixnum_divmod
46     super(other)
47   end
48   
49   # bitwise binary operators
51   def &(o)
52     Ruby.primitive :fixnum_and
53     if o.__kind_of__ Float
54       raise RangeError, ("float %-.10g is out of range of a Fixnum" % o)
55     end
56     super(o)
57   end
59   def |(o)
60     Ruby.primitive :fixnum_or
61     if o.__kind_of__ Float
62       raise RangeError, ("float %-.10g is out of range of a Fixnum" % o)
63     end
64     super(o)
65   end
67   def ^(o)
68     Ruby.primitive :fixnum_xor
69     if o.__kind_of__ Float
70       raise RangeError, ("float %-.10g is out of range of a Fixnum" % o)
71     end
72     super(o)
73   end
75   def __fixnum_left_shift__(c)
76     Ruby.primitive :fixnum_left_shift
77     raise PrimitiveFailure, "primitive failed"
78   end
80   def __fixnum_right_shift__(c)
81     Ruby.primitive :fixnum_right_shift
82     raise PrimitiveFailure, "primitive failed"
83   end
85   def __bignum_new__(value)
86     Ruby.primitive :bignum_new
87     raise PrimitiveFailure, "primitive failed"
88   end
90   # comparison operators
91   
92   def ==(o)
93     Ruby.primitive :equal
94     super(o)
95   end
96   
97   def <=>(other)
98     Ruby.primitive :compare
99     super(other)
100   end
102   def <(o)
103     Ruby.primitive :fixnum_lt
104     super(o)
105   end
106   
107   def <=(o)
108     Ruby.primitive :fixnum_le
109     super(o)
110   end
111   
112   def >(o)
113     Ruby.primitive :fixnum_gt
114     super(o)
115   end
116   
117   def >=(o)
118     Ruby.primitive :fixnum_ge
119     super(o)
120   end
121   
122   # predicates
124   def zero?
125     self == 0
126   end
128   # conversions
130   def to_s(base=10)
131     based_to_s(base)
132   end
133   
134   def based_to_s(base)
135     Ruby.primitive :fixnum_to_s
136     raise PrimitiveFailure, "Fixnum#based_to_s primitive failed"
137   end
138   
139   def to_f
140     Ruby.primitive :fixnum_to_f
141     raise PrimitiveFailure, "Fixnum#to_f primitive failed"
142   end
143   
144   def size
145     Ruby.primitive :fixnum_size
146     raise PrimitiveFailure, "Fixnum#size primitive failed"
147   end
149   def inspect
150     based_to_s(10)
151   end