Revert "fixed bug in lib/thread Queue"
[rbx.git] / kernel / bootstrap / bignum.rb
blobbdc5d041311fe3f575fae2fbbfccc86225a3c6e2
1 class Bignum < Integer
3   # unary operators
5   def ~
6     Ruby.primitive :bignum_invert
7     raise PrimitiveFailure, "Bignum#~ primitive failed"
8   end
10   def -@
11     Ruby.primitive :bignum_neg
12     raise PrimitiveFailure, "Bignum#-@ primitive failed"
13   end
15   # binary math operators
17   def +(o)
18     Ruby.primitive :bignum_add
19     super(o)
20   end
22   def -(o)
23     Ruby.primitive :bignum_sub
24     super(o)
25   end
27   def *(o)
28     Ruby.primitive :bignum_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 :bignum_div
36     super(o)
37   end
39   def divmod(other)
40     Ruby.primitive :bignum_divmod
41     super(other)
42   end
44   def mod_primitive(other)
45     Ruby.primitive :bignum_mod
46     raise PrimitiveFailure, "primitive failed"
47   end
49   # bitwise binary operators
51   def &(o)
52     Ruby.primitive :bignum_and
53     super(o)
54   end
56   def |(o)
57     Ruby.primitive :bignum_or
58     super(o)
59   end
61   def ^(o)
62     Ruby.primitive :bignum_xor
63     super(o)
64   end
66   def __bignum_left_shift__(s)
67     Ruby.primitive :bignum_left_shift
68     raise PrimitiveFailure, "primitive failed"
69   end
71   def __bignum_right_shift__(s)
72     Ruby.primitive :bignum_right_shift
73     raise PrimitiveFailure, "primitive failed"
74   end
76   # comparison operators
78   def <(o)
79     Ruby.primitive :bignum_lt
80     super(o)
81   end
83   def <=(o)
84     Ruby.primitive :bignum_le
85     super(o)
86   end
88   def >(o)
89     Ruby.primitive :bignum_gt
90     super(o)
91   end
93   def >=(o)
94     Ruby.primitive :bignum_ge
95     super(o)
96   end
98   def ==(o)
99     Ruby.primitive :bignum_equal
100     super(o)
101   end
103   def <=>(other)
104     Ruby.primitive :bignum_compare
105     super(other)
106   end
108   # conversions
110   def self.from_float(value)
111     Ruby.primitive :bignum_from_float
112     raise PrimitiveFailure, "Bignum.from_float primitive failed"
113   end
115   def to_f
116     Ruby.primitive :bignum_to_float
117     raise PrimitiveFailure, "Bignum#to_f primitive failed"
118   end
120   def radix_to_s(radix)
121     Ruby.primitive :bignum_to_s
122     raise PrimitiveFailure, "Bignum#radix_to_s primitive failed"
123   end
125   def to_s(radix=10)
126     raise ArgumentError, 'base must be between 2 and 36' unless
127       radix.between?(2, 36)
128     radix_to_s(radix)
129   end
131   def inspect
132     radix_to_s(10)
133   end
135   def size
136     Ruby.primitive :bignum_size
137     raise PrimitiveFailure, "Bignum#size primitive failed"
138   end