BlockContext's caller is now stored in sender field
[panda.git] / st / LargeInteger.st
blob6e70a332fe4111d232f38d576c76a7bf54a4aff4
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 isMemberOf: LargeInteger)
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         (anInteger isMemberOf: SmallInteger)
46                 ifTrue: [^ self gcd: (self coerce: anInteger)]
47             ifFalse: [ self error: 'primitive failed']!
49 LargeInteger method!
50 lcm: anInteger
51         <primitive: 'LargeInteger_lcm'>
52         ^ super lcm: anInteger!
55 "comparing"
57 LargeInteger method!
58 < aNumber
59      <primitive: 'LargeInteger_lt'>
60          ^ super < aNumber!
62 LargeInteger method!
63 > aNumber
64      <primitive: 'LargeInteger_gt'>
65          ^ super > aNumber!
67 LargeInteger method!
68 <= aNumber
69      <primitive: 'LargeInteger_le'>
70          ^ super <= aNumber!
72 LargeInteger method!
73 >= aNumber
74      <primitive: 'LargeInteger_ge'>
75          ^ super >= aNumber!
77 LargeInteger method!
78 = aNumber
79      <primitive: 'LargeInteger_eq'>
80          ^ super = aNumber!
82 LargeInteger method!
83 ~= aNumber
84      <primitive: 'LargeInteger_ne'>
85          ^ super ~= aNumber!
87 LargeInteger method!
88 hash
89      <primitive: 'LargeInteger_hash'>
90          self primitiveFailed!
93 "bit-wise operations"
95 LargeInteger method!
96 bitOr: aNumber
97      <primitive: 'LargeInteger_bitOr'>
98          ^ super bitOr: aNumber!
100 LargeInteger method!
101 bitAnd: aNumber
102      <primitive: 'LargeInteger_bitAnd'>
103          ^ super bitAnd: aNumber!
105 LargeInteger method!
106 bitXor: aNumber
107      <primitive: 'LargeInteger_bitAnd'>
108          ^ super bitXor: aNumber!
110 LargeInteger method!
111 bitShift: aNumber
112      <primitive: 'LargeInteger_bitShift'>
113          ^ super bitShift: aNumber!
116 "coercion"
118 LargeInteger method!
119 asFloat
120         <primitive: 'LargeInteger_asFloat'>
121         self primitiveFailed!
123 LargeInteger method!
124 asLargeInteger
125     ^ self!
127 LargeInteger method!
128 asInteger
129     ^ self!
131 LargeInteger method!
132 generality
133     ^ 20!
135 LargeInteger method!
136 zero
137     ^ 0 asLargeInteger!
139 LargeInteger method!
140 unity
141     ^ 1 asLargeInteger!
143 LargeInteger method!
144 coerce: aNumber
145     ^ aNumber asLargeInteger!
148 "printing"
149 LargeInteger method!
150 printStringBase: anInteger
151         <primitive: 'LargeInteger_printStringBase'>
152         anInteger isSmallInteger
153                 ifTrue: [ self error: 'expected a large integer' ]!
155 LargeInteger method!
156 printOn: aStream base: anInteger
157         aStream nextPutAll: (self printStringBase: anInteger)!