Inline some arithmetic primitives in the interpreter. Fix oversight
[panda.git] / st / LargeInteger.st
blob9fb13b2253ce1aad03465eb39a48d0a663bfca3b
3 "arithmetic"
5 LargeInteger method!
6 + aNumber
7         <primitive: 'LargeInteger_add'>
8         ^ super + aNumber!
10 LargeInteger method!
11 - aNumber
12         <primitive: 'LargeInteger_sub'>
13         ^ super + aNumber!
15 LargeInteger method!
16 * aNumber
17         <primitive: 'LargeInteger_mul'>
18         ^ super * aNumber!
20 LargeInteger method!
21 / aNumber
22         <primitive: 'LargeInteger_div'>
23         aNumber = 0
24                 ifTrue: [ self error: 'cannot divide by 0' ].
25         aNumber isInteger
26                 ifTrue: [ ^ Fraction numerator: self denominator: aNumber ]
27                 ifFalse: [ ^ super / aNumber ]!
29 LargeInteger method!
30 // aNumber
31      <primitive: 'LargeInteger_intDiv'>
32         ^ super // aNumber!
34 LargeInteger method!
35 \\ aNumber
36         <primitive: 'LargeInteger_mod'>
37         ^ super / aNumber!
40 "mathematics"
42 LargeInteger method!
43 gcd: anInteger
44         <primitive: 'LargeInteger_gcd'>
45         ^ super gcd: anInteger!
47 LargeInteger method!
48 lcm: anInteger
49         <primitive: 'LargeInteger_lcm'>
50         ^ super lcm: anInteger!
53 "comparing"
55 LargeInteger method!
56 < aNumber
57      <primitive: 'LargeInteger_lt'>
58          ^ super < aNumber!
60 LargeInteger method!
61 > aNumber
62      <primitive: 'LargeInteger_gt'>
63          ^ super > aNumber!
65 LargeInteger method!
66 <= aNumber
67      <primitive: 'LargeInteger_le'>
68          ^ super <= aNumber!
70 LargeInteger method!
71 >= aNumber
72      <primitive: 'LargeInteger_ge'>
73          ^ super >= aNumber!
75 LargeInteger method!
76 = aNumber
77      <primitive: 'LargeInteger_eq'>
78          ^ super = aNumber!
80 LargeInteger method!
81 ~= aNumber
82      <primitive: 'LargeInteger_ne'>
83          ^ super ~= aNumber!
85 LargeInteger method!
86 hash
87      <primitive: 'LargeInteger_hash'>
88          self primitiveFailed!
91 "bit-wise operations"
93 LargeInteger method!
94 bitOr: aNumber
95      <primitive: 'LargeInteger_bitOr'>
96          ^ super bitOr: aNumber!
98 LargeInteger method!
99 bitAnd: aNumber
100      <primitive: 'LargeInteger_bitAnd'>
101          ^ super bitAnd: aNumber!
103 LargeInteger method!
104 bitXor: aNumber
105      <primitive: 'LargeInteger_bitAnd'>
106          ^ super bitXor: aNumber!
108 LargeInteger method!
109 bitShift: aNumber
110      <primitive: 'LargeInteger_bitShift'>
111          ^ super bitShift: aNumber!
114 "coercion"
116 LargeInteger method!
117 asFloat
118         <primitive: 'LargeInteger_asFloat'>
119         self primitiveFailed!
121 LargeInteger method!
122 asLargeInteger
123     ^ self!
125 LargeInteger method!
126 asInteger
127     ^ self!
129 LargeInteger method!
130 generality
131     ^ 20!
133 LargeInteger method!
134 zero
135     ^ 0 asLargeInteger!
137 LargeInteger method!
138 unity
139     ^ 1 asLargeInteger!
141 LargeInteger method!
142 coerce: aNumber
143     ^ aNumber asLargeInteger!
146 "printing"
148 LargeInteger method!
149 printStringRadix: anInteger
150         <primitive: 'LargeInteger_printString'>
151         anInteger isSmallInteger
152                 ifFalse: [ self error: 'expected a small integer' ]!