blob: 6fcbe6973381a96ff2b847537b51d300946cb705 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossume5372401993-03-16 12:15:04 +00002Copyright 1991, 1992, 1993 by Stichting Mathematisch Centrum,
3Amsterdam, The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
7Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
9provided that the above copyright notice appear in all copies and that
10both that copyright notice and this permission notice appear in
11supporting documentation, and that the names of Stichting Mathematisch
12Centrum or CWI not be used in advertising or publicity pertaining to
13distribution of the software without specific, written prior permission.
14
15STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
16THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
18FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
23******************************************************************/
24
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000025/* Integer object implementation */
26
Guido van Rossum3f5da241990-12-20 15:06:42 +000027#include "allobjects.h"
Guido van Rossume5372401993-03-16 12:15:04 +000028#include "modsupport.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000029
30/* Standard Booleans */
Guido van Rossum3f5da241990-12-20 15:06:42 +000031
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000032intobject FalseObject = {
33 OB_HEAD_INIT(&Inttype)
34 0
35};
Guido van Rossum3f5da241990-12-20 15:06:42 +000036
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000037intobject TrueObject = {
38 OB_HEAD_INIT(&Inttype)
39 1
40};
41
Guido van Rossum165e67e1990-10-14 20:02:26 +000042static object *
Guido van Rossum3a628451991-12-10 13:57:36 +000043err_ovf(msg)
44 char *msg;
Guido van Rossum165e67e1990-10-14 20:02:26 +000045{
Guido van Rossum3a628451991-12-10 13:57:36 +000046 err_setstr(OverflowError, msg);
Guido van Rossum165e67e1990-10-14 20:02:26 +000047 return NULL;
48}
49
Guido van Rossum3f5da241990-12-20 15:06:42 +000050/* Integers are quite normal objects, to make object handling uniform.
51 (Using odd pointers to represent integers would save much space
52 but require extra checks for this special case throughout the code.)
53 Since, a typical Python program spends much of its time allocating
54 and deallocating integers, these operations should be very fast.
55 Therefore we use a dedicated allocation scheme with a much lower
56 overhead (in space and time) than straight malloc(): a simple
57 dedicated free list, filled when necessary with memory from malloc().
58*/
59
60#define BLOCK_SIZE 1000 /* 1K less typical malloc overhead */
61#define N_INTOBJECTS (BLOCK_SIZE / sizeof(intobject))
62
63static intobject *
64fill_free_list()
65{
66 intobject *p, *q;
67 p = NEW(intobject, N_INTOBJECTS);
68 if (p == NULL)
69 return (intobject *)err_nomem();
70 q = p + N_INTOBJECTS;
71 while (--q > p)
72 *(intobject **)q = q-1;
73 *(intobject **)q = NULL;
74 return p + N_INTOBJECTS - 1;
75}
76
77static intobject *free_list = NULL;
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +000078#ifndef NSMALLPOSINTS
79#define NSMALLPOSINTS 100
80#endif
81#ifndef NSMALLNEGINTS
82#define NSMALLNEGINTS 1
83#endif
84#if NSMALLNEGINTS + NSMALLPOSINTS > 0
85/* References to small integers are saved in this array so that they
86 can be shared.
87 The integers that are saved are those in the range
88 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
89*/
90static intobject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
91#endif
92#ifdef COUNT_ALLOCS
93int quick_int_allocs, quick_neg_int_allocs;
94#endif
Guido van Rossum3f5da241990-12-20 15:06:42 +000095
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000096object *
97newintobject(ival)
98 long ival;
99{
Guido van Rossum3f5da241990-12-20 15:06:42 +0000100 register intobject *v;
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +0000101#if NSMALLNEGINTS + NSMALLPOSINTS > 0
102 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS &&
103 (v = small_ints[ival + NSMALLNEGINTS]) != NULL) {
104 INCREF(v);
105#ifdef COUNT_ALLOCS
106 if (ival >= 0)
107 quick_int_allocs++;
108 else
109 quick_neg_int_allocs++;
110#endif
111 return (object *) v;
112 }
113#endif
Guido van Rossum3f5da241990-12-20 15:06:42 +0000114 if (free_list == NULL) {
115 if ((free_list = fill_free_list()) == NULL)
116 return NULL;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000117 }
Guido van Rossum3f5da241990-12-20 15:06:42 +0000118 v = free_list;
119 free_list = *(intobject **)free_list;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000120 v->ob_type = &Inttype;
121 v->ob_ival = ival;
Sjoerd Mullendera9c3c221993-10-11 12:54:31 +0000122 NEWREF(v);
Sjoerd Mullender842d2cc1993-10-15 16:18:48 +0000123#if NSMALLNEGINTS + NSMALLPOSINTS > 0
124 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
125 /* save this one for a following allocation */
126 INCREF(v);
127 small_ints[ival + NSMALLNEGINTS] = v;
128 }
129#endif
Guido van Rossum3f5da241990-12-20 15:06:42 +0000130 return (object *) v;
131}
132
133static void
134int_dealloc(v)
135 intobject *v;
136{
137 *(intobject **)v = free_list;
138 free_list = v;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000139}
140
141long
142getintvalue(op)
143 register object *op;
144{
145 if (!is_intobject(op)) {
Guido van Rossum5c52b6a1990-10-21 22:11:03 +0000146 err_badcall();
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000147 return -1;
148 }
149 else
150 return ((intobject *)op) -> ob_ival;
151}
152
153/* Methods */
154
Guido van Rossum719f5fa1992-03-27 17:31:02 +0000155/* ARGSUSED */
Guido van Rossum90933611991-06-07 16:10:43 +0000156static int
Guido van Rossum3f5da241990-12-20 15:06:42 +0000157int_print(v, fp, flags)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000158 intobject *v;
159 FILE *fp;
Guido van Rossum719f5fa1992-03-27 17:31:02 +0000160 int flags; /* Not used but required by interface */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000161{
162 fprintf(fp, "%ld", v->ob_ival);
Guido van Rossum90933611991-06-07 16:10:43 +0000163 return 0;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000164}
165
166static object *
Guido van Rossum3f5da241990-12-20 15:06:42 +0000167int_repr(v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000168 intobject *v;
169{
170 char buf[20];
171 sprintf(buf, "%ld", v->ob_ival);
172 return newstringobject(buf);
173}
174
175static int
Guido van Rossum3f5da241990-12-20 15:06:42 +0000176int_compare(v, w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000177 intobject *v, *w;
178{
179 register long i = v->ob_ival;
180 register long j = w->ob_ival;
181 return (i < j) ? -1 : (i > j) ? 1 : 0;
182}
183
Guido van Rossum9bfef441993-03-29 10:43:31 +0000184static long
185int_hash(v)
186 intobject *v;
187{
188 long x = v -> ob_ival;
189 if (x == -1)
190 x = -2;
191 return x;
192}
193
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000194static object *
Guido van Rossum3f5da241990-12-20 15:06:42 +0000195int_add(v, w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000196 intobject *v;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000197 intobject *w;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000198{
199 register long a, b, x;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000200 a = v->ob_ival;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000201 b = w->ob_ival;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000202 x = a + b;
Guido van Rossum165e67e1990-10-14 20:02:26 +0000203 if ((x^a) < 0 && (x^b) < 0)
Guido van Rossum3a628451991-12-10 13:57:36 +0000204 return err_ovf("integer addition");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000205 return newintobject(x);
206}
207
208static object *
Guido van Rossum3f5da241990-12-20 15:06:42 +0000209int_sub(v, w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000210 intobject *v;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000211 intobject *w;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000212{
213 register long a, b, x;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000214 a = v->ob_ival;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000215 b = w->ob_ival;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000216 x = a - b;
Guido van Rossum165e67e1990-10-14 20:02:26 +0000217 if ((x^a) < 0 && (x^~b) < 0)
Guido van Rossum3a628451991-12-10 13:57:36 +0000218 return err_ovf("integer subtraction");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000219 return newintobject(x);
220}
221
222static object *
Guido van Rossum3f5da241990-12-20 15:06:42 +0000223int_mul(v, w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000224 intobject *v;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000225 intobject *w;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000226{
227 register long a, b;
228 double x;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000229 a = v->ob_ival;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000230 b = w->ob_ival;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000231 x = (double)a * (double)b;
Guido van Rossum165e67e1990-10-14 20:02:26 +0000232 if (x > 0x7fffffff || x < (double) (long) 0x80000000)
Guido van Rossum3a628451991-12-10 13:57:36 +0000233 return err_ovf("integer multiplication");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000234 return newintobject(a * b);
235}
236
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000237static int
238i_divmod(x, y, p_xdivy, p_xmody)
239 register intobject *x, *y;
240 long *p_xdivy, *p_xmody;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000241{
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000242 long xi = x->ob_ival;
243 long yi = y->ob_ival;
244 long xdivy, xmody;
245
246 if (yi == 0) {
247 err_setstr(ZeroDivisionError, "integer division or modulo");
248 return -1;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000249 }
Guido van Rossum00466951991-05-05 20:08:27 +0000250 if (yi < 0) {
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000251 if (xi < 0)
252 xdivy = -xi / -yi;
253 else
254 xdivy = - (xi / -yi);
Guido van Rossum00466951991-05-05 20:08:27 +0000255 }
256 else {
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000257 if (xi < 0)
258 xdivy = - (-xi / yi);
259 else
260 xdivy = xi / yi;
Guido van Rossum00466951991-05-05 20:08:27 +0000261 }
262 xmody = xi - xdivy*yi;
263 if (xmody < 0 && yi > 0 || xmody > 0 && yi < 0) {
264 xmody += yi;
265 xdivy -= 1;
266 }
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000267 *p_xdivy = xdivy;
268 *p_xmody = xmody;
269 return 0;
270}
271
272static object *
273int_div(x, y)
274 intobject *x;
275 intobject *y;
276{
277 long d, m;
278 if (i_divmod(x, y, &d, &m) < 0)
279 return NULL;
280 return newintobject(d);
281}
282
283static object *
284int_mod(x, y)
285 intobject *x;
286 intobject *y;
287{
288 long d, m;
289 if (i_divmod(x, y, &d, &m) < 0)
290 return NULL;
Guido van Rossum719f5fa1992-03-27 17:31:02 +0000291 return newintobject(m);
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000292}
293
294static object *
295int_divmod(x, y)
296 intobject *x;
297 intobject *y;
298{
299 object *v, *v0, *v1;
300 long d, m;
301 if (i_divmod(x, y, &d, &m) < 0)
302 return NULL;
Guido van Rossume5372401993-03-16 12:15:04 +0000303 return mkvalue("(ll)", d, m);
Guido van Rossum00466951991-05-05 20:08:27 +0000304}
305
306static object *
Guido van Rossum3f5da241990-12-20 15:06:42 +0000307int_pow(v, w)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000308 intobject *v;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000309 intobject *w;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000310{
311 register long iv, iw, ix;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000312 iv = v->ob_ival;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000313 iw = w->ob_ival;
Guido van Rossum00466951991-05-05 20:08:27 +0000314 if (iw < 0) {
Guido van Rossum3a628451991-12-10 13:57:36 +0000315 err_setstr(ValueError, "integer to the negative power");
Guido van Rossum00466951991-05-05 20:08:27 +0000316 return NULL;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000317 }
Guido van Rossum00466951991-05-05 20:08:27 +0000318 ix = 1;
319 while (--iw >= 0) {
320 long prev = ix;
321 ix = ix * iv;
322 if (iv == 0)
323 break; /* 0 to some power -- avoid ix / 0 */
324 if (ix / iv != prev)
Guido van Rossum3a628451991-12-10 13:57:36 +0000325 return err_ovf("integer pow()");
Guido van Rossum00466951991-05-05 20:08:27 +0000326 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000327 return newintobject(ix);
328}
329
330static object *
Guido van Rossum3f5da241990-12-20 15:06:42 +0000331int_neg(v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000332 intobject *v;
333{
334 register long a, x;
335 a = v->ob_ival;
336 x = -a;
Guido van Rossum165e67e1990-10-14 20:02:26 +0000337 if (a < 0 && x < 0)
Guido van Rossum3a628451991-12-10 13:57:36 +0000338 return err_ovf("integer negation");
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000339 return newintobject(x);
340}
341
342static object *
Guido van Rossum3f5da241990-12-20 15:06:42 +0000343int_pos(v)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000344 intobject *v;
345{
346 INCREF(v);
347 return (object *)v;
348}
349
Guido van Rossum00466951991-05-05 20:08:27 +0000350static object *
351int_abs(v)
352 intobject *v;
353{
354 if (v->ob_ival >= 0)
355 return int_pos(v);
356 else
357 return int_neg(v);
358}
359
Guido van Rossum0bff0151991-05-14 12:05:32 +0000360static int
361int_nonzero(v)
362 intobject *v;
363{
364 return v->ob_ival != 0;
365}
366
Guido van Rossum7928cd71991-10-24 14:59:31 +0000367static object *
368int_invert(v)
369 intobject *v;
370{
371 return newintobject(~v->ob_ival);
372}
373
374static object *
375int_lshift(v, w)
376 intobject *v;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000377 intobject *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000378{
379 register long a, b;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000380 a = v->ob_ival;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000381 b = w->ob_ival;
Guido van Rossumf3b351f1992-01-14 18:33:22 +0000382 if (b < 0) {
383 err_setstr(ValueError, "negative shift count");
384 return NULL;
385 }
386 if (a == 0 || b == 0) {
387 INCREF(v);
388 return (object *) v;
389 }
390 if (b >= 32) {
391 return newintobject(0L);
392 }
393 a = (unsigned long)a << b;
394 return newintobject(a);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000395}
396
397static object *
398int_rshift(v, w)
399 intobject *v;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000400 intobject *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000401{
402 register long a, b;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000403 a = v->ob_ival;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000404 b = w->ob_ival;
Guido van Rossumf3b351f1992-01-14 18:33:22 +0000405 if (b < 0) {
406 err_setstr(ValueError, "negative shift count");
407 return NULL;
408 }
409 if (a == 0 || b == 0) {
410 INCREF(v);
411 return (object *) v;
412 }
413 if (b >= 32) {
414 if (a < 0)
415 a = -1;
416 else
417 a = 0;
418 }
419 else {
420 if (a < 0)
421 a = ~( ~(unsigned long)a >> b );
422 else
423 a = (unsigned long)a >> b;
424 }
425 return newintobject(a);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000426}
427
428static object *
429int_and(v, w)
430 intobject *v;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000431 intobject *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000432{
433 register long a, b;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000434 a = v->ob_ival;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000435 b = w->ob_ival;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000436 return newintobject(a & b);
437}
438
439static object *
440int_xor(v, w)
441 intobject *v;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000442 intobject *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000443{
444 register long a, b;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000445 a = v->ob_ival;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000446 b = w->ob_ival;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000447 return newintobject(a ^ b);
448}
449
450static object *
451int_or(v, w)
452 intobject *v;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000453 intobject *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000454{
455 register long a, b;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000456 a = v->ob_ival;
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000457 b = w->ob_ival;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000458 return newintobject(a | b);
459}
460
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000461static object *
462int_int(v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000463 intobject *v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000464{
465 INCREF(v);
Guido van Rossum9575a441993-04-07 14:06:14 +0000466 return (object *)v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000467}
468
469static object *
470int_long(v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000471 intobject *v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000472{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000473 return newlongobject((v -> ob_ival));
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000474}
475
476static object *
477int_float(v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000478 intobject *v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000479{
Guido van Rossum9bfef441993-03-29 10:43:31 +0000480 return newfloatobject((double)(v -> ob_ival));
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000481}
482
483static object *
484int_oct(v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000485 intobject *v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000486{
487 char buf[20];
Guido van Rossum9bfef441993-03-29 10:43:31 +0000488 long x = v -> ob_ival;
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000489 if (x == 0)
490 strcpy(buf, "0");
491 else if (x > 0)
492 sprintf(buf, "0%lo", x);
493 else
494 sprintf(buf, "-0%lo", -x);
495 return newstringobject(buf);
496}
497
498static object *
499int_hex(v)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000500 intobject *v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000501{
502 char buf[20];
Guido van Rossum9bfef441993-03-29 10:43:31 +0000503 long x = v -> ob_ival;
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000504 if (x >= 0)
505 sprintf(buf, "0x%lx", x);
506 else
507 sprintf(buf, "-0x%lx", -x);
508 return newstringobject(buf);
509}
510
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000511static number_methods int_as_number = {
Guido van Rossum00466951991-05-05 20:08:27 +0000512 int_add, /*nb_add*/
513 int_sub, /*nb_subtract*/
514 int_mul, /*nb_multiply*/
515 int_div, /*nb_divide*/
Guido van Rossum2b16a6f1992-01-19 16:28:51 +0000516 int_mod, /*nb_remainder*/
Guido van Rossum00466951991-05-05 20:08:27 +0000517 int_divmod, /*nb_divmod*/
518 int_pow, /*nb_power*/
519 int_neg, /*nb_negative*/
520 int_pos, /*nb_positive*/
521 int_abs, /*nb_absolute*/
Guido van Rossum0bff0151991-05-14 12:05:32 +0000522 int_nonzero, /*nb_nonzero*/
Guido van Rossum7928cd71991-10-24 14:59:31 +0000523 int_invert, /*nb_invert*/
524 int_lshift, /*nb_lshift*/
525 int_rshift, /*nb_rshift*/
526 int_and, /*nb_and*/
527 int_xor, /*nb_xor*/
528 int_or, /*nb_or*/
Guido van Rossum1899c2e1992-09-12 11:09:23 +0000529 0, /*nb_coerce*/
530 int_int, /*nb_int*/
531 int_long, /*nb_long*/
532 int_float, /*nb_float*/
533 int_oct, /*nb_oct*/
534 int_hex, /*nb_hex*/
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000535};
536
537typeobject Inttype = {
538 OB_HEAD_INIT(&Typetype)
539 0,
540 "int",
541 sizeof(intobject),
542 0,
Guido van Rossum3f5da241990-12-20 15:06:42 +0000543 int_dealloc, /*tp_dealloc*/
544 int_print, /*tp_print*/
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000545 0, /*tp_getattr*/
546 0, /*tp_setattr*/
Guido van Rossum3f5da241990-12-20 15:06:42 +0000547 int_compare, /*tp_compare*/
548 int_repr, /*tp_repr*/
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000549 &int_as_number, /*tp_as_number*/
550 0, /*tp_as_sequence*/
551 0, /*tp_as_mapping*/
Guido van Rossum9575a441993-04-07 14:06:14 +0000552 int_hash, /*tp_hash*/
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000553};