Silence SyntaxWarning and DeprecationWarning in pydoc triggered by tuple
[python.git] / Python / ceval.c
blob6eef7efa84b11ab40a4692548c670b8e00ed3898
2 /* Execute compiled code */
4 /* XXX TO DO:
5 XXX speed up searching for keywords by using a dictionary
6 XXX document it!
7 */
9 /* enable more aggressive intra-module optimizations, where available */
10 #define PY_LOCAL_AGGRESSIVE
12 #include "Python.h"
14 #include "code.h"
15 #include "frameobject.h"
16 #include "eval.h"
17 #include "opcode.h"
18 #include "structmember.h"
20 #include <ctype.h>
22 #ifndef WITH_TSC
24 #define READ_TIMESTAMP(var)
26 #else
28 typedef unsigned long long uint64;
30 #if defined(__ppc__) /* <- Don't know if this is the correct symbol; this
31 section should work for GCC on any PowerPC
32 platform, irrespective of OS.
33 POWER? Who knows :-) */
35 #define READ_TIMESTAMP(var) ppc_getcounter(&var)
37 static void
38 ppc_getcounter(uint64 *v)
40 register unsigned long tbu, tb, tbu2;
42 loop:
43 asm volatile ("mftbu %0" : "=r" (tbu) );
44 asm volatile ("mftb %0" : "=r" (tb) );
45 asm volatile ("mftbu %0" : "=r" (tbu2));
46 if (__builtin_expect(tbu != tbu2, 0)) goto loop;
48 /* The slightly peculiar way of writing the next lines is
49 compiled better by GCC than any other way I tried. */
50 ((long*)(v))[0] = tbu;
51 ((long*)(v))[1] = tb;
54 #else /* this is for linux/x86 (and probably any other GCC/x86 combo) */
56 #define READ_TIMESTAMP(val) \
57 __asm__ __volatile__("rdtsc" : "=A" (val))
59 #endif
61 void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1,
62 uint64 loop0, uint64 loop1, uint64 intr0, uint64 intr1)
64 uint64 intr, inst, loop;
65 PyThreadState *tstate = PyThreadState_Get();
66 if (!tstate->interp->tscdump)
67 return;
68 intr = intr1 - intr0;
69 inst = inst1 - inst0 - intr;
70 loop = loop1 - loop0 - intr;
71 fprintf(stderr, "opcode=%03d t=%d inst=%06lld loop=%06lld\n",
72 opcode, ticked, inst, loop);
75 #endif
77 /* Turn this on if your compiler chokes on the big switch: */
78 /* #define CASE_TOO_BIG 1 */
80 #ifdef Py_DEBUG
81 /* For debugging the interpreter: */
82 #define LLTRACE 1 /* Low-level trace feature */
83 #define CHECKEXC 1 /* Double-check exception checking */
84 #endif
86 typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
88 /* Forward declarations */
89 #ifdef WITH_TSC
90 static PyObject * call_function(PyObject ***, int, uint64*, uint64*);
91 #else
92 static PyObject * call_function(PyObject ***, int);
93 #endif
94 static PyObject * fast_function(PyObject *, PyObject ***, int, int, int);
95 static PyObject * do_call(PyObject *, PyObject ***, int, int);
96 static PyObject * ext_do_call(PyObject *, PyObject ***, int, int, int);
97 static PyObject * update_keyword_args(PyObject *, int, PyObject ***,
98 PyObject *);
99 static PyObject * update_star_args(int, int, PyObject *, PyObject ***);
100 static PyObject * load_args(PyObject ***, int);
101 #define CALL_FLAG_VAR 1
102 #define CALL_FLAG_KW 2
104 #ifdef LLTRACE
105 static int lltrace;
106 static int prtrace(PyObject *, char *);
107 #endif
108 static int call_trace(Py_tracefunc, PyObject *, PyFrameObject *,
109 int, PyObject *);
110 static int call_trace_protected(Py_tracefunc, PyObject *,
111 PyFrameObject *, int, PyObject *);
112 static void call_exc_trace(Py_tracefunc, PyObject *, PyFrameObject *);
113 static int maybe_call_line_trace(Py_tracefunc, PyObject *,
114 PyFrameObject *, int *, int *, int *);
116 static PyObject * apply_slice(PyObject *, PyObject *, PyObject *);
117 static int assign_slice(PyObject *, PyObject *,
118 PyObject *, PyObject *);
119 static PyObject * cmp_outcome(int, PyObject *, PyObject *);
120 static PyObject * import_from(PyObject *, PyObject *);
121 static int import_all_from(PyObject *, PyObject *);
122 static PyObject * build_class(PyObject *, PyObject *, PyObject *);
123 static int exec_statement(PyFrameObject *,
124 PyObject *, PyObject *, PyObject *);
125 static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *);
126 static void reset_exc_info(PyThreadState *);
127 static void format_exc_check_arg(PyObject *, char *, PyObject *);
128 static PyObject * string_concatenate(PyObject *, PyObject *,
129 PyFrameObject *, unsigned char *);
131 #define NAME_ERROR_MSG \
132 "name '%.200s' is not defined"
133 #define GLOBAL_NAME_ERROR_MSG \
134 "global name '%.200s' is not defined"
135 #define UNBOUNDLOCAL_ERROR_MSG \
136 "local variable '%.200s' referenced before assignment"
137 #define UNBOUNDFREE_ERROR_MSG \
138 "free variable '%.200s' referenced before assignment" \
139 " in enclosing scope"
141 /* Dynamic execution profile */
142 #ifdef DYNAMIC_EXECUTION_PROFILE
143 #ifdef DXPAIRS
144 static long dxpairs[257][256];
145 #define dxp dxpairs[256]
146 #else
147 static long dxp[256];
148 #endif
149 #endif
151 /* Function call profile */
152 #ifdef CALL_PROFILE
153 #define PCALL_NUM 11
154 static int pcall[PCALL_NUM];
156 #define PCALL_ALL 0
157 #define PCALL_FUNCTION 1
158 #define PCALL_FAST_FUNCTION 2
159 #define PCALL_FASTER_FUNCTION 3
160 #define PCALL_METHOD 4
161 #define PCALL_BOUND_METHOD 5
162 #define PCALL_CFUNCTION 6
163 #define PCALL_TYPE 7
164 #define PCALL_GENERATOR 8
165 #define PCALL_OTHER 9
166 #define PCALL_POP 10
168 /* Notes about the statistics
170 PCALL_FAST stats
172 FAST_FUNCTION means no argument tuple needs to be created.
173 FASTER_FUNCTION means that the fast-path frame setup code is used.
175 If there is a method call where the call can be optimized by changing
176 the argument tuple and calling the function directly, it gets recorded
177 twice.
179 As a result, the relationship among the statistics appears to be
180 PCALL_ALL == PCALL_FUNCTION + PCALL_METHOD - PCALL_BOUND_METHOD +
181 PCALL_CFUNCTION + PCALL_TYPE + PCALL_GENERATOR + PCALL_OTHER
182 PCALL_FUNCTION > PCALL_FAST_FUNCTION > PCALL_FASTER_FUNCTION
183 PCALL_METHOD > PCALL_BOUND_METHOD
186 #define PCALL(POS) pcall[POS]++
188 PyObject *
189 PyEval_GetCallStats(PyObject *self)
191 return Py_BuildValue("iiiiiiiiiii",
192 pcall[0], pcall[1], pcall[2], pcall[3],
193 pcall[4], pcall[5], pcall[6], pcall[7],
194 pcall[8], pcall[9], pcall[10]);
196 #else
197 #define PCALL(O)
199 PyObject *
200 PyEval_GetCallStats(PyObject *self)
202 Py_INCREF(Py_None);
203 return Py_None;
205 #endif
208 #ifdef WITH_THREAD
210 #ifdef HAVE_ERRNO_H
211 #include <errno.h>
212 #endif
213 #include "pythread.h"
215 static PyThread_type_lock interpreter_lock = 0; /* This is the GIL */
216 static long main_thread = 0;
219 PyEval_ThreadsInitialized(void)
221 return interpreter_lock != 0;
224 void
225 PyEval_InitThreads(void)
227 if (interpreter_lock)
228 return;
229 interpreter_lock = PyThread_allocate_lock();
230 PyThread_acquire_lock(interpreter_lock, 1);
231 main_thread = PyThread_get_thread_ident();
234 void
235 PyEval_AcquireLock(void)
237 PyThread_acquire_lock(interpreter_lock, 1);
240 void
241 PyEval_ReleaseLock(void)
243 PyThread_release_lock(interpreter_lock);
246 void
247 PyEval_AcquireThread(PyThreadState *tstate)
249 if (tstate == NULL)
250 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
251 /* Check someone has called PyEval_InitThreads() to create the lock */
252 assert(interpreter_lock);
253 PyThread_acquire_lock(interpreter_lock, 1);
254 if (PyThreadState_Swap(tstate) != NULL)
255 Py_FatalError(
256 "PyEval_AcquireThread: non-NULL old thread state");
259 void
260 PyEval_ReleaseThread(PyThreadState *tstate)
262 if (tstate == NULL)
263 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
264 if (PyThreadState_Swap(NULL) != tstate)
265 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
266 PyThread_release_lock(interpreter_lock);
269 /* This function is called from PyOS_AfterFork to ensure that newly
270 created child processes don't hold locks referring to threads which
271 are not running in the child process. (This could also be done using
272 pthread_atfork mechanism, at least for the pthreads implementation.) */
274 void
275 PyEval_ReInitThreads(void)
277 PyObject *threading, *result;
278 PyThreadState *tstate;
280 if (!interpreter_lock)
281 return;
282 /*XXX Can't use PyThread_free_lock here because it does too
283 much error-checking. Doing this cleanly would require
284 adding a new function to each thread_*.h. Instead, just
285 create a new lock and waste a little bit of memory */
286 interpreter_lock = PyThread_allocate_lock();
287 PyThread_acquire_lock(interpreter_lock, 1);
288 main_thread = PyThread_get_thread_ident();
290 /* Update the threading module with the new state.
292 tstate = PyThreadState_GET();
293 threading = PyMapping_GetItemString(tstate->interp->modules,
294 "threading");
295 if (threading == NULL) {
296 /* threading not imported */
297 PyErr_Clear();
298 return;
300 result = PyObject_CallMethod(threading, "_after_fork", NULL);
301 if (result == NULL)
302 PyErr_WriteUnraisable(threading);
303 else
304 Py_DECREF(result);
305 Py_DECREF(threading);
307 #endif
309 /* Functions save_thread and restore_thread are always defined so
310 dynamically loaded modules needn't be compiled separately for use
311 with and without threads: */
313 PyThreadState *
314 PyEval_SaveThread(void)
316 PyThreadState *tstate = PyThreadState_Swap(NULL);
317 if (tstate == NULL)
318 Py_FatalError("PyEval_SaveThread: NULL tstate");
319 #ifdef WITH_THREAD
320 if (interpreter_lock)
321 PyThread_release_lock(interpreter_lock);
322 #endif
323 return tstate;
326 void
327 PyEval_RestoreThread(PyThreadState *tstate)
329 if (tstate == NULL)
330 Py_FatalError("PyEval_RestoreThread: NULL tstate");
331 #ifdef WITH_THREAD
332 if (interpreter_lock) {
333 int err = errno;
334 PyThread_acquire_lock(interpreter_lock, 1);
335 errno = err;
337 #endif
338 PyThreadState_Swap(tstate);
342 /* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
343 signal handlers or Mac I/O completion routines) can schedule calls
344 to a function to be called synchronously.
345 The synchronous function is called with one void* argument.
346 It should return 0 for success or -1 for failure -- failure should
347 be accompanied by an exception.
349 If registry succeeds, the registry function returns 0; if it fails
350 (e.g. due to too many pending calls) it returns -1 (without setting
351 an exception condition).
353 Note that because registry may occur from within signal handlers,
354 or other asynchronous events, calling malloc() is unsafe!
356 #ifdef WITH_THREAD
357 Any thread can schedule pending calls, but only the main thread
358 will execute them.
359 #endif
361 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
362 There are two possible race conditions:
363 (1) nested asynchronous registry calls;
364 (2) registry calls made while pending calls are being processed.
365 While (1) is very unlikely, (2) is a real possibility.
366 The current code is safe against (2), but not against (1).
367 The safety against (2) is derived from the fact that only one
368 thread (the main thread) ever takes things out of the queue.
370 XXX Darn! With the advent of thread state, we should have an array
371 of pending calls per thread in the thread state! Later...
374 #define NPENDINGCALLS 32
375 static struct {
376 int (*func)(void *);
377 void *arg;
378 } pendingcalls[NPENDINGCALLS];
379 static volatile int pendingfirst = 0;
380 static volatile int pendinglast = 0;
381 static volatile int things_to_do = 0;
384 Py_AddPendingCall(int (*func)(void *), void *arg)
386 static volatile int busy = 0;
387 int i, j;
388 /* XXX Begin critical section */
389 /* XXX If you want this to be safe against nested
390 XXX asynchronous calls, you'll have to work harder! */
391 if (busy)
392 return -1;
393 busy = 1;
394 i = pendinglast;
395 j = (i + 1) % NPENDINGCALLS;
396 if (j == pendingfirst) {
397 busy = 0;
398 return -1; /* Queue full */
400 pendingcalls[i].func = func;
401 pendingcalls[i].arg = arg;
402 pendinglast = j;
404 _Py_Ticker = 0;
405 things_to_do = 1; /* Signal main loop */
406 busy = 0;
407 /* XXX End critical section */
408 return 0;
412 Py_MakePendingCalls(void)
414 static int busy = 0;
415 #ifdef WITH_THREAD
416 if (main_thread && PyThread_get_thread_ident() != main_thread)
417 return 0;
418 #endif
419 if (busy)
420 return 0;
421 busy = 1;
422 things_to_do = 0;
423 for (;;) {
424 int i;
425 int (*func)(void *);
426 void *arg;
427 i = pendingfirst;
428 if (i == pendinglast)
429 break; /* Queue empty */
430 func = pendingcalls[i].func;
431 arg = pendingcalls[i].arg;
432 pendingfirst = (i + 1) % NPENDINGCALLS;
433 if (func(arg) < 0) {
434 busy = 0;
435 things_to_do = 1; /* We're not done yet */
436 return -1;
439 busy = 0;
440 return 0;
444 /* The interpreter's recursion limit */
446 #ifndef Py_DEFAULT_RECURSION_LIMIT
447 #define Py_DEFAULT_RECURSION_LIMIT 1000
448 #endif
449 static int recursion_limit = Py_DEFAULT_RECURSION_LIMIT;
450 int _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
453 Py_GetRecursionLimit(void)
455 return recursion_limit;
458 void
459 Py_SetRecursionLimit(int new_limit)
461 recursion_limit = new_limit;
462 _Py_CheckRecursionLimit = recursion_limit;
465 /* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
466 if the recursion_depth reaches _Py_CheckRecursionLimit.
467 If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit
468 to guarantee that _Py_CheckRecursiveCall() is regularly called.
469 Without USE_STACKCHECK, there is no need for this. */
471 _Py_CheckRecursiveCall(char *where)
473 PyThreadState *tstate = PyThreadState_GET();
475 #ifdef USE_STACKCHECK
476 if (PyOS_CheckStack()) {
477 --tstate->recursion_depth;
478 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
479 return -1;
481 #endif
482 if (tstate->recursion_depth > recursion_limit) {
483 --tstate->recursion_depth;
484 PyErr_Format(PyExc_RuntimeError,
485 "maximum recursion depth exceeded%s",
486 where);
487 return -1;
489 _Py_CheckRecursionLimit = recursion_limit;
490 return 0;
493 /* Status code for main loop (reason for stack unwind) */
494 enum why_code {
495 WHY_NOT = 0x0001, /* No error */
496 WHY_EXCEPTION = 0x0002, /* Exception occurred */
497 WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */
498 WHY_RETURN = 0x0008, /* 'return' statement */
499 WHY_BREAK = 0x0010, /* 'break' statement */
500 WHY_CONTINUE = 0x0020, /* 'continue' statement */
501 WHY_YIELD = 0x0040 /* 'yield' operator */
504 static enum why_code do_raise(PyObject *, PyObject *, PyObject *);
505 static int unpack_iterable(PyObject *, int, PyObject **);
507 /* for manipulating the thread switch and periodic "stuff" - used to be
508 per thread, now just a pair o' globals */
509 int _Py_CheckInterval = 100;
510 volatile int _Py_Ticker = 100;
512 PyObject *
513 PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)
515 return PyEval_EvalCodeEx(co,
516 globals, locals,
517 (PyObject **)NULL, 0,
518 (PyObject **)NULL, 0,
519 (PyObject **)NULL, 0,
520 NULL);
524 /* Interpreter main loop */
526 PyObject *
527 PyEval_EvalFrame(PyFrameObject *f) {
528 /* This is for backward compatibility with extension modules that
529 used this API; core interpreter code should call
530 PyEval_EvalFrameEx() */
531 return PyEval_EvalFrameEx(f, 0);
534 PyObject *
535 PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
537 #ifdef DXPAIRS
538 int lastopcode = 0;
539 #endif
540 register PyObject **stack_pointer; /* Next free slot in value stack */
541 register unsigned char *next_instr;
542 register int opcode; /* Current opcode */
543 register int oparg; /* Current opcode argument, if any */
544 register enum why_code why; /* Reason for block stack unwind */
545 register int err; /* Error status -- nonzero if error */
546 register PyObject *x; /* Result object -- NULL if error */
547 register PyObject *v; /* Temporary objects popped off stack */
548 register PyObject *w;
549 register PyObject *u;
550 register PyObject *t;
551 register PyObject *stream = NULL; /* for PRINT opcodes */
552 register PyObject **fastlocals, **freevars;
553 PyObject *retval = NULL; /* Return value */
554 PyThreadState *tstate = PyThreadState_GET();
555 PyCodeObject *co;
557 /* when tracing we set things up so that
559 not (instr_lb <= current_bytecode_offset < instr_ub)
561 is true when the line being executed has changed. The
562 initial values are such as to make this false the first
563 time it is tested. */
564 int instr_ub = -1, instr_lb = 0, instr_prev = -1;
566 unsigned char *first_instr;
567 PyObject *names;
568 PyObject *consts;
569 #if defined(Py_DEBUG) || defined(LLTRACE)
570 /* Make it easier to find out where we are with a debugger */
571 char *filename;
572 #endif
574 /* Tuple access macros */
576 #ifndef Py_DEBUG
577 #define GETITEM(v, i) PyTuple_GET_ITEM((PyTupleObject *)(v), (i))
578 #else
579 #define GETITEM(v, i) PyTuple_GetItem((v), (i))
580 #endif
582 #ifdef WITH_TSC
583 /* Use Pentium timestamp counter to mark certain events:
584 inst0 -- beginning of switch statement for opcode dispatch
585 inst1 -- end of switch statement (may be skipped)
586 loop0 -- the top of the mainloop
587 loop1 -- place where control returns again to top of mainloop
588 (may be skipped)
589 intr1 -- beginning of long interruption
590 intr2 -- end of long interruption
592 Many opcodes call out to helper C functions. In some cases, the
593 time in those functions should be counted towards the time for the
594 opcode, but not in all cases. For example, a CALL_FUNCTION opcode
595 calls another Python function; there's no point in charge all the
596 bytecode executed by the called function to the caller.
598 It's hard to make a useful judgement statically. In the presence
599 of operator overloading, it's impossible to tell if a call will
600 execute new Python code or not.
602 It's a case-by-case judgement. I'll use intr1 for the following
603 cases:
605 EXEC_STMT
606 IMPORT_STAR
607 IMPORT_FROM
608 CALL_FUNCTION (and friends)
611 uint64 inst0, inst1, loop0, loop1, intr0 = 0, intr1 = 0;
612 int ticked = 0;
614 READ_TIMESTAMP(inst0);
615 READ_TIMESTAMP(inst1);
616 READ_TIMESTAMP(loop0);
617 READ_TIMESTAMP(loop1);
619 /* shut up the compiler */
620 opcode = 0;
621 #endif
623 /* Code access macros */
625 #define INSTR_OFFSET() ((int)(next_instr - first_instr))
626 #define NEXTOP() (*next_instr++)
627 #define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
628 #define PEEKARG() ((next_instr[2]<<8) + next_instr[1])
629 #define JUMPTO(x) (next_instr = first_instr + (x))
630 #define JUMPBY(x) (next_instr += (x))
632 /* OpCode prediction macros
633 Some opcodes tend to come in pairs thus making it possible to
634 predict the second code when the first is run. For example,
635 COMPARE_OP is often followed by JUMP_IF_FALSE or JUMP_IF_TRUE. And,
636 those opcodes are often followed by a POP_TOP.
638 Verifying the prediction costs a single high-speed test of a register
639 variable against a constant. If the pairing was good, then the
640 processor's own internal branch predication has a high likelihood of
641 success, resulting in a nearly zero-overhead transition to the
642 next opcode. A successful prediction saves a trip through the eval-loop
643 including its two unpredictable branches, the HAS_ARG test and the
644 switch-case. Combined with the processor's internal branch prediction,
645 a successful PREDICT has the effect of making the two opcodes run as if
646 they were a single new opcode with the bodies combined.
648 If collecting opcode statistics, your choices are to either keep the
649 predictions turned-on and interpret the results as if some opcodes
650 had been combined or turn-off predictions so that the opcode frequency
651 counter updates for both opcodes.
654 #ifdef DYNAMIC_EXECUTION_PROFILE
655 #define PREDICT(op) if (0) goto PRED_##op
656 #else
657 #define PREDICT(op) if (*next_instr == op) goto PRED_##op
658 #endif
660 #define PREDICTED(op) PRED_##op: next_instr++
661 #define PREDICTED_WITH_ARG(op) PRED_##op: oparg = PEEKARG(); next_instr += 3
663 /* Stack manipulation macros */
665 /* The stack can grow at most MAXINT deep, as co_nlocals and
666 co_stacksize are ints. */
667 #define STACK_LEVEL() ((int)(stack_pointer - f->f_valuestack))
668 #define EMPTY() (STACK_LEVEL() == 0)
669 #define TOP() (stack_pointer[-1])
670 #define SECOND() (stack_pointer[-2])
671 #define THIRD() (stack_pointer[-3])
672 #define FOURTH() (stack_pointer[-4])
673 #define SET_TOP(v) (stack_pointer[-1] = (v))
674 #define SET_SECOND(v) (stack_pointer[-2] = (v))
675 #define SET_THIRD(v) (stack_pointer[-3] = (v))
676 #define SET_FOURTH(v) (stack_pointer[-4] = (v))
677 #define BASIC_STACKADJ(n) (stack_pointer += n)
678 #define BASIC_PUSH(v) (*stack_pointer++ = (v))
679 #define BASIC_POP() (*--stack_pointer)
681 #ifdef LLTRACE
682 #define PUSH(v) { (void)(BASIC_PUSH(v), \
683 lltrace && prtrace(TOP(), "push")); \
684 assert(STACK_LEVEL() <= co->co_stacksize); }
685 #define POP() ((void)(lltrace && prtrace(TOP(), "pop")), \
686 BASIC_POP())
687 #define STACKADJ(n) { (void)(BASIC_STACKADJ(n), \
688 lltrace && prtrace(TOP(), "stackadj")); \
689 assert(STACK_LEVEL() <= co->co_stacksize); }
690 #define EXT_POP(STACK_POINTER) ((void)(lltrace && \
691 prtrace((STACK_POINTER)[-1], "ext_pop")), \
692 *--(STACK_POINTER))
693 #else
694 #define PUSH(v) BASIC_PUSH(v)
695 #define POP() BASIC_POP()
696 #define STACKADJ(n) BASIC_STACKADJ(n)
697 #define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))
698 #endif
700 /* Local variable macros */
702 #define GETLOCAL(i) (fastlocals[i])
704 /* The SETLOCAL() macro must not DECREF the local variable in-place and
705 then store the new value; it must copy the old value to a temporary
706 value, then store the new value, and then DECREF the temporary value.
707 This is because it is possible that during the DECREF the frame is
708 accessed by other code (e.g. a __del__ method or gc.collect()) and the
709 variable would be pointing to already-freed memory. */
710 #define SETLOCAL(i, value) do { PyObject *tmp = GETLOCAL(i); \
711 GETLOCAL(i) = value; \
712 Py_XDECREF(tmp); } while (0)
714 /* Start of code */
716 if (f == NULL)
717 return NULL;
719 /* push frame */
720 if (Py_EnterRecursiveCall(""))
721 return NULL;
723 tstate->frame = f;
725 if (tstate->use_tracing) {
726 if (tstate->c_tracefunc != NULL) {
727 /* tstate->c_tracefunc, if defined, is a
728 function that will be called on *every* entry
729 to a code block. Its return value, if not
730 None, is a function that will be called at
731 the start of each executed line of code.
732 (Actually, the function must return itself
733 in order to continue tracing.) The trace
734 functions are called with three arguments:
735 a pointer to the current frame, a string
736 indicating why the function is called, and
737 an argument which depends on the situation.
738 The global trace function is also called
739 whenever an exception is detected. */
740 if (call_trace_protected(tstate->c_tracefunc,
741 tstate->c_traceobj,
742 f, PyTrace_CALL, Py_None)) {
743 /* Trace function raised an error */
744 goto exit_eval_frame;
747 if (tstate->c_profilefunc != NULL) {
748 /* Similar for c_profilefunc, except it needn't
749 return itself and isn't called for "line" events */
750 if (call_trace_protected(tstate->c_profilefunc,
751 tstate->c_profileobj,
752 f, PyTrace_CALL, Py_None)) {
753 /* Profile function raised an error */
754 goto exit_eval_frame;
759 co = f->f_code;
760 names = co->co_names;
761 consts = co->co_consts;
762 fastlocals = f->f_localsplus;
763 freevars = f->f_localsplus + co->co_nlocals;
764 first_instr = (unsigned char*) PyString_AS_STRING(co->co_code);
765 /* An explanation is in order for the next line.
767 f->f_lasti now refers to the index of the last instruction
768 executed. You might think this was obvious from the name, but
769 this wasn't always true before 2.3! PyFrame_New now sets
770 f->f_lasti to -1 (i.e. the index *before* the first instruction)
771 and YIELD_VALUE doesn't fiddle with f_lasti any more. So this
772 does work. Promise.
774 When the PREDICT() macros are enabled, some opcode pairs follow in
775 direct succession without updating f->f_lasti. A successful
776 prediction effectively links the two codes together as if they
777 were a single new opcode; accordingly,f->f_lasti will point to
778 the first code in the pair (for instance, GET_ITER followed by
779 FOR_ITER is effectively a single opcode and f->f_lasti will point
780 at to the beginning of the combined pair.)
782 next_instr = first_instr + f->f_lasti + 1;
783 stack_pointer = f->f_stacktop;
784 assert(stack_pointer != NULL);
785 f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */
787 #ifdef LLTRACE
788 lltrace = PyDict_GetItemString(f->f_globals, "__lltrace__") != NULL;
789 #endif
790 #if defined(Py_DEBUG) || defined(LLTRACE)
791 filename = PyString_AsString(co->co_filename);
792 #endif
794 why = WHY_NOT;
795 err = 0;
796 x = Py_None; /* Not a reference, just anything non-NULL */
797 w = NULL;
799 if (throwflag) { /* support for generator.throw() */
800 why = WHY_EXCEPTION;
801 goto on_error;
804 for (;;) {
805 #ifdef WITH_TSC
806 if (inst1 == 0) {
807 /* Almost surely, the opcode executed a break
808 or a continue, preventing inst1 from being set
809 on the way out of the loop.
811 READ_TIMESTAMP(inst1);
812 loop1 = inst1;
814 dump_tsc(opcode, ticked, inst0, inst1, loop0, loop1,
815 intr0, intr1);
816 ticked = 0;
817 inst1 = 0;
818 intr0 = 0;
819 intr1 = 0;
820 READ_TIMESTAMP(loop0);
821 #endif
822 assert(stack_pointer >= f->f_valuestack); /* else underflow */
823 assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */
825 /* Do periodic things. Doing this every time through
826 the loop would add too much overhead, so we do it
827 only every Nth instruction. We also do it if
828 ``things_to_do'' is set, i.e. when an asynchronous
829 event needs attention (e.g. a signal handler or
830 async I/O handler); see Py_AddPendingCall() and
831 Py_MakePendingCalls() above. */
833 if (--_Py_Ticker < 0) {
834 if (*next_instr == SETUP_FINALLY) {
835 /* Make the last opcode before
836 a try: finally: block uninterruptable. */
837 goto fast_next_opcode;
839 _Py_Ticker = _Py_CheckInterval;
840 tstate->tick_counter++;
841 #ifdef WITH_TSC
842 ticked = 1;
843 #endif
844 if (things_to_do) {
845 if (Py_MakePendingCalls() < 0) {
846 why = WHY_EXCEPTION;
847 goto on_error;
849 if (things_to_do)
850 /* MakePendingCalls() didn't succeed.
851 Force early re-execution of this
852 "periodic" code, possibly after
853 a thread switch */
854 _Py_Ticker = 0;
856 #ifdef WITH_THREAD
857 if (interpreter_lock) {
858 /* Give another thread a chance */
860 if (PyThreadState_Swap(NULL) != tstate)
861 Py_FatalError("ceval: tstate mix-up");
862 PyThread_release_lock(interpreter_lock);
864 /* Other threads may run now */
866 PyThread_acquire_lock(interpreter_lock, 1);
867 if (PyThreadState_Swap(tstate) != NULL)
868 Py_FatalError("ceval: orphan tstate");
870 /* Check for thread interrupts */
872 if (tstate->async_exc != NULL) {
873 x = tstate->async_exc;
874 tstate->async_exc = NULL;
875 PyErr_SetNone(x);
876 Py_DECREF(x);
877 why = WHY_EXCEPTION;
878 goto on_error;
881 #endif
884 fast_next_opcode:
885 f->f_lasti = INSTR_OFFSET();
887 /* line-by-line tracing support */
889 if (tstate->c_tracefunc != NULL && !tstate->tracing) {
890 /* see maybe_call_line_trace
891 for expository comments */
892 f->f_stacktop = stack_pointer;
894 err = maybe_call_line_trace(tstate->c_tracefunc,
895 tstate->c_traceobj,
896 f, &instr_lb, &instr_ub,
897 &instr_prev);
898 /* Reload possibly changed frame fields */
899 JUMPTO(f->f_lasti);
900 if (f->f_stacktop != NULL) {
901 stack_pointer = f->f_stacktop;
902 f->f_stacktop = NULL;
904 if (err) {
905 /* trace function raised an exception */
906 goto on_error;
910 /* Extract opcode and argument */
912 opcode = NEXTOP();
913 oparg = 0; /* allows oparg to be stored in a register because
914 it doesn't have to be remembered across a full loop */
915 if (HAS_ARG(opcode))
916 oparg = NEXTARG();
917 dispatch_opcode:
918 #ifdef DYNAMIC_EXECUTION_PROFILE
919 #ifdef DXPAIRS
920 dxpairs[lastopcode][opcode]++;
921 lastopcode = opcode;
922 #endif
923 dxp[opcode]++;
924 #endif
926 #ifdef LLTRACE
927 /* Instruction tracing */
929 if (lltrace) {
930 if (HAS_ARG(opcode)) {
931 printf("%d: %d, %d\n",
932 f->f_lasti, opcode, oparg);
934 else {
935 printf("%d: %d\n",
936 f->f_lasti, opcode);
939 #endif
941 /* Main switch on opcode */
942 READ_TIMESTAMP(inst0);
944 switch (opcode) {
946 /* BEWARE!
947 It is essential that any operation that fails sets either
948 x to NULL, err to nonzero, or why to anything but WHY_NOT,
949 and that no operation that succeeds does this! */
951 /* case STOP_CODE: this is an error! */
953 case NOP:
954 goto fast_next_opcode;
956 case LOAD_FAST:
957 x = GETLOCAL(oparg);
958 if (x != NULL) {
959 Py_INCREF(x);
960 PUSH(x);
961 goto fast_next_opcode;
963 format_exc_check_arg(PyExc_UnboundLocalError,
964 UNBOUNDLOCAL_ERROR_MSG,
965 PyTuple_GetItem(co->co_varnames, oparg));
966 break;
968 case LOAD_CONST:
969 x = GETITEM(consts, oparg);
970 Py_INCREF(x);
971 PUSH(x);
972 goto fast_next_opcode;
974 PREDICTED_WITH_ARG(STORE_FAST);
975 case STORE_FAST:
976 v = POP();
977 SETLOCAL(oparg, v);
978 goto fast_next_opcode;
980 PREDICTED(POP_TOP);
981 case POP_TOP:
982 v = POP();
983 Py_DECREF(v);
984 goto fast_next_opcode;
986 case ROT_TWO:
987 v = TOP();
988 w = SECOND();
989 SET_TOP(w);
990 SET_SECOND(v);
991 goto fast_next_opcode;
993 case ROT_THREE:
994 v = TOP();
995 w = SECOND();
996 x = THIRD();
997 SET_TOP(w);
998 SET_SECOND(x);
999 SET_THIRD(v);
1000 goto fast_next_opcode;
1002 case ROT_FOUR:
1003 u = TOP();
1004 v = SECOND();
1005 w = THIRD();
1006 x = FOURTH();
1007 SET_TOP(v);
1008 SET_SECOND(w);
1009 SET_THIRD(x);
1010 SET_FOURTH(u);
1011 goto fast_next_opcode;
1013 case DUP_TOP:
1014 v = TOP();
1015 Py_INCREF(v);
1016 PUSH(v);
1017 goto fast_next_opcode;
1019 case DUP_TOPX:
1020 if (oparg == 2) {
1021 x = TOP();
1022 Py_INCREF(x);
1023 w = SECOND();
1024 Py_INCREF(w);
1025 STACKADJ(2);
1026 SET_TOP(x);
1027 SET_SECOND(w);
1028 goto fast_next_opcode;
1029 } else if (oparg == 3) {
1030 x = TOP();
1031 Py_INCREF(x);
1032 w = SECOND();
1033 Py_INCREF(w);
1034 v = THIRD();
1035 Py_INCREF(v);
1036 STACKADJ(3);
1037 SET_TOP(x);
1038 SET_SECOND(w);
1039 SET_THIRD(v);
1040 goto fast_next_opcode;
1042 Py_FatalError("invalid argument to DUP_TOPX"
1043 " (bytecode corruption?)");
1044 break;
1046 case UNARY_POSITIVE:
1047 v = TOP();
1048 x = PyNumber_Positive(v);
1049 Py_DECREF(v);
1050 SET_TOP(x);
1051 if (x != NULL) continue;
1052 break;
1054 case UNARY_NEGATIVE:
1055 v = TOP();
1056 x = PyNumber_Negative(v);
1057 Py_DECREF(v);
1058 SET_TOP(x);
1059 if (x != NULL) continue;
1060 break;
1062 case UNARY_NOT:
1063 v = TOP();
1064 err = PyObject_IsTrue(v);
1065 Py_DECREF(v);
1066 if (err == 0) {
1067 Py_INCREF(Py_True);
1068 SET_TOP(Py_True);
1069 continue;
1071 else if (err > 0) {
1072 Py_INCREF(Py_False);
1073 SET_TOP(Py_False);
1074 err = 0;
1075 continue;
1077 STACKADJ(-1);
1078 break;
1080 case UNARY_CONVERT:
1081 v = TOP();
1082 x = PyObject_Repr(v);
1083 Py_DECREF(v);
1084 SET_TOP(x);
1085 if (x != NULL) continue;
1086 break;
1088 case UNARY_INVERT:
1089 v = TOP();
1090 x = PyNumber_Invert(v);
1091 Py_DECREF(v);
1092 SET_TOP(x);
1093 if (x != NULL) continue;
1094 break;
1096 case BINARY_POWER:
1097 w = POP();
1098 v = TOP();
1099 x = PyNumber_Power(v, w, Py_None);
1100 Py_DECREF(v);
1101 Py_DECREF(w);
1102 SET_TOP(x);
1103 if (x != NULL) continue;
1104 break;
1106 case BINARY_MULTIPLY:
1107 w = POP();
1108 v = TOP();
1109 x = PyNumber_Multiply(v, w);
1110 Py_DECREF(v);
1111 Py_DECREF(w);
1112 SET_TOP(x);
1113 if (x != NULL) continue;
1114 break;
1116 case BINARY_DIVIDE:
1117 if (!_Py_QnewFlag) {
1118 w = POP();
1119 v = TOP();
1120 x = PyNumber_Divide(v, w);
1121 Py_DECREF(v);
1122 Py_DECREF(w);
1123 SET_TOP(x);
1124 if (x != NULL) continue;
1125 break;
1127 /* -Qnew is in effect: fall through to
1128 BINARY_TRUE_DIVIDE */
1129 case BINARY_TRUE_DIVIDE:
1130 w = POP();
1131 v = TOP();
1132 x = PyNumber_TrueDivide(v, w);
1133 Py_DECREF(v);
1134 Py_DECREF(w);
1135 SET_TOP(x);
1136 if (x != NULL) continue;
1137 break;
1139 case BINARY_FLOOR_DIVIDE:
1140 w = POP();
1141 v = TOP();
1142 x = PyNumber_FloorDivide(v, w);
1143 Py_DECREF(v);
1144 Py_DECREF(w);
1145 SET_TOP(x);
1146 if (x != NULL) continue;
1147 break;
1149 case BINARY_MODULO:
1150 w = POP();
1151 v = TOP();
1152 x = PyNumber_Remainder(v, w);
1153 Py_DECREF(v);
1154 Py_DECREF(w);
1155 SET_TOP(x);
1156 if (x != NULL) continue;
1157 break;
1159 case BINARY_ADD:
1160 w = POP();
1161 v = TOP();
1162 if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
1163 /* INLINE: int + int */
1164 register long a, b, i;
1165 a = PyInt_AS_LONG(v);
1166 b = PyInt_AS_LONG(w);
1167 i = a + b;
1168 if ((i^a) < 0 && (i^b) < 0)
1169 goto slow_add;
1170 x = PyInt_FromLong(i);
1172 else if (PyString_CheckExact(v) &&
1173 PyString_CheckExact(w)) {
1174 x = string_concatenate(v, w, f, next_instr);
1175 /* string_concatenate consumed the ref to v */
1176 goto skip_decref_vx;
1178 else {
1179 slow_add:
1180 x = PyNumber_Add(v, w);
1182 Py_DECREF(v);
1183 skip_decref_vx:
1184 Py_DECREF(w);
1185 SET_TOP(x);
1186 if (x != NULL) continue;
1187 break;
1189 case BINARY_SUBTRACT:
1190 w = POP();
1191 v = TOP();
1192 if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
1193 /* INLINE: int - int */
1194 register long a, b, i;
1195 a = PyInt_AS_LONG(v);
1196 b = PyInt_AS_LONG(w);
1197 i = a - b;
1198 if ((i^a) < 0 && (i^~b) < 0)
1199 goto slow_sub;
1200 x = PyInt_FromLong(i);
1202 else {
1203 slow_sub:
1204 x = PyNumber_Subtract(v, w);
1206 Py_DECREF(v);
1207 Py_DECREF(w);
1208 SET_TOP(x);
1209 if (x != NULL) continue;
1210 break;
1212 case BINARY_SUBSCR:
1213 w = POP();
1214 v = TOP();
1215 if (PyList_CheckExact(v) && PyInt_CheckExact(w)) {
1216 /* INLINE: list[int] */
1217 Py_ssize_t i = PyInt_AsSsize_t(w);
1218 if (i < 0)
1219 i += PyList_GET_SIZE(v);
1220 if (i >= 0 && i < PyList_GET_SIZE(v)) {
1221 x = PyList_GET_ITEM(v, i);
1222 Py_INCREF(x);
1224 else
1225 goto slow_get;
1227 else
1228 slow_get:
1229 x = PyObject_GetItem(v, w);
1230 Py_DECREF(v);
1231 Py_DECREF(w);
1232 SET_TOP(x);
1233 if (x != NULL) continue;
1234 break;
1236 case BINARY_LSHIFT:
1237 w = POP();
1238 v = TOP();
1239 x = PyNumber_Lshift(v, w);
1240 Py_DECREF(v);
1241 Py_DECREF(w);
1242 SET_TOP(x);
1243 if (x != NULL) continue;
1244 break;
1246 case BINARY_RSHIFT:
1247 w = POP();
1248 v = TOP();
1249 x = PyNumber_Rshift(v, w);
1250 Py_DECREF(v);
1251 Py_DECREF(w);
1252 SET_TOP(x);
1253 if (x != NULL) continue;
1254 break;
1256 case BINARY_AND:
1257 w = POP();
1258 v = TOP();
1259 x = PyNumber_And(v, w);
1260 Py_DECREF(v);
1261 Py_DECREF(w);
1262 SET_TOP(x);
1263 if (x != NULL) continue;
1264 break;
1266 case BINARY_XOR:
1267 w = POP();
1268 v = TOP();
1269 x = PyNumber_Xor(v, w);
1270 Py_DECREF(v);
1271 Py_DECREF(w);
1272 SET_TOP(x);
1273 if (x != NULL) continue;
1274 break;
1276 case BINARY_OR:
1277 w = POP();
1278 v = TOP();
1279 x = PyNumber_Or(v, w);
1280 Py_DECREF(v);
1281 Py_DECREF(w);
1282 SET_TOP(x);
1283 if (x != NULL) continue;
1284 break;
1286 case LIST_APPEND:
1287 w = POP();
1288 v = POP();
1289 err = PyList_Append(v, w);
1290 Py_DECREF(v);
1291 Py_DECREF(w);
1292 if (err == 0) {
1293 PREDICT(JUMP_ABSOLUTE);
1294 continue;
1296 break;
1298 case INPLACE_POWER:
1299 w = POP();
1300 v = TOP();
1301 x = PyNumber_InPlacePower(v, w, Py_None);
1302 Py_DECREF(v);
1303 Py_DECREF(w);
1304 SET_TOP(x);
1305 if (x != NULL) continue;
1306 break;
1308 case INPLACE_MULTIPLY:
1309 w = POP();
1310 v = TOP();
1311 x = PyNumber_InPlaceMultiply(v, w);
1312 Py_DECREF(v);
1313 Py_DECREF(w);
1314 SET_TOP(x);
1315 if (x != NULL) continue;
1316 break;
1318 case INPLACE_DIVIDE:
1319 if (!_Py_QnewFlag) {
1320 w = POP();
1321 v = TOP();
1322 x = PyNumber_InPlaceDivide(v, w);
1323 Py_DECREF(v);
1324 Py_DECREF(w);
1325 SET_TOP(x);
1326 if (x != NULL) continue;
1327 break;
1329 /* -Qnew is in effect: fall through to
1330 INPLACE_TRUE_DIVIDE */
1331 case INPLACE_TRUE_DIVIDE:
1332 w = POP();
1333 v = TOP();
1334 x = PyNumber_InPlaceTrueDivide(v, w);
1335 Py_DECREF(v);
1336 Py_DECREF(w);
1337 SET_TOP(x);
1338 if (x != NULL) continue;
1339 break;
1341 case INPLACE_FLOOR_DIVIDE:
1342 w = POP();
1343 v = TOP();
1344 x = PyNumber_InPlaceFloorDivide(v, w);
1345 Py_DECREF(v);
1346 Py_DECREF(w);
1347 SET_TOP(x);
1348 if (x != NULL) continue;
1349 break;
1351 case INPLACE_MODULO:
1352 w = POP();
1353 v = TOP();
1354 x = PyNumber_InPlaceRemainder(v, w);
1355 Py_DECREF(v);
1356 Py_DECREF(w);
1357 SET_TOP(x);
1358 if (x != NULL) continue;
1359 break;
1361 case INPLACE_ADD:
1362 w = POP();
1363 v = TOP();
1364 if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
1365 /* INLINE: int + int */
1366 register long a, b, i;
1367 a = PyInt_AS_LONG(v);
1368 b = PyInt_AS_LONG(w);
1369 i = a + b;
1370 if ((i^a) < 0 && (i^b) < 0)
1371 goto slow_iadd;
1372 x = PyInt_FromLong(i);
1374 else if (PyString_CheckExact(v) &&
1375 PyString_CheckExact(w)) {
1376 x = string_concatenate(v, w, f, next_instr);
1377 /* string_concatenate consumed the ref to v */
1378 goto skip_decref_v;
1380 else {
1381 slow_iadd:
1382 x = PyNumber_InPlaceAdd(v, w);
1384 Py_DECREF(v);
1385 skip_decref_v:
1386 Py_DECREF(w);
1387 SET_TOP(x);
1388 if (x != NULL) continue;
1389 break;
1391 case INPLACE_SUBTRACT:
1392 w = POP();
1393 v = TOP();
1394 if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
1395 /* INLINE: int - int */
1396 register long a, b, i;
1397 a = PyInt_AS_LONG(v);
1398 b = PyInt_AS_LONG(w);
1399 i = a - b;
1400 if ((i^a) < 0 && (i^~b) < 0)
1401 goto slow_isub;
1402 x = PyInt_FromLong(i);
1404 else {
1405 slow_isub:
1406 x = PyNumber_InPlaceSubtract(v, w);
1408 Py_DECREF(v);
1409 Py_DECREF(w);
1410 SET_TOP(x);
1411 if (x != NULL) continue;
1412 break;
1414 case INPLACE_LSHIFT:
1415 w = POP();
1416 v = TOP();
1417 x = PyNumber_InPlaceLshift(v, w);
1418 Py_DECREF(v);
1419 Py_DECREF(w);
1420 SET_TOP(x);
1421 if (x != NULL) continue;
1422 break;
1424 case INPLACE_RSHIFT:
1425 w = POP();
1426 v = TOP();
1427 x = PyNumber_InPlaceRshift(v, w);
1428 Py_DECREF(v);
1429 Py_DECREF(w);
1430 SET_TOP(x);
1431 if (x != NULL) continue;
1432 break;
1434 case INPLACE_AND:
1435 w = POP();
1436 v = TOP();
1437 x = PyNumber_InPlaceAnd(v, w);
1438 Py_DECREF(v);
1439 Py_DECREF(w);
1440 SET_TOP(x);
1441 if (x != NULL) continue;
1442 break;
1444 case INPLACE_XOR:
1445 w = POP();
1446 v = TOP();
1447 x = PyNumber_InPlaceXor(v, w);
1448 Py_DECREF(v);
1449 Py_DECREF(w);
1450 SET_TOP(x);
1451 if (x != NULL) continue;
1452 break;
1454 case INPLACE_OR:
1455 w = POP();
1456 v = TOP();
1457 x = PyNumber_InPlaceOr(v, w);
1458 Py_DECREF(v);
1459 Py_DECREF(w);
1460 SET_TOP(x);
1461 if (x != NULL) continue;
1462 break;
1464 case SLICE+0:
1465 case SLICE+1:
1466 case SLICE+2:
1467 case SLICE+3:
1468 if ((opcode-SLICE) & 2)
1469 w = POP();
1470 else
1471 w = NULL;
1472 if ((opcode-SLICE) & 1)
1473 v = POP();
1474 else
1475 v = NULL;
1476 u = TOP();
1477 x = apply_slice(u, v, w);
1478 Py_DECREF(u);
1479 Py_XDECREF(v);
1480 Py_XDECREF(w);
1481 SET_TOP(x);
1482 if (x != NULL) continue;
1483 break;
1485 case STORE_SLICE+0:
1486 case STORE_SLICE+1:
1487 case STORE_SLICE+2:
1488 case STORE_SLICE+3:
1489 if ((opcode-STORE_SLICE) & 2)
1490 w = POP();
1491 else
1492 w = NULL;
1493 if ((opcode-STORE_SLICE) & 1)
1494 v = POP();
1495 else
1496 v = NULL;
1497 u = POP();
1498 t = POP();
1499 err = assign_slice(u, v, w, t); /* u[v:w] = t */
1500 Py_DECREF(t);
1501 Py_DECREF(u);
1502 Py_XDECREF(v);
1503 Py_XDECREF(w);
1504 if (err == 0) continue;
1505 break;
1507 case DELETE_SLICE+0:
1508 case DELETE_SLICE+1:
1509 case DELETE_SLICE+2:
1510 case DELETE_SLICE+3:
1511 if ((opcode-DELETE_SLICE) & 2)
1512 w = POP();
1513 else
1514 w = NULL;
1515 if ((opcode-DELETE_SLICE) & 1)
1516 v = POP();
1517 else
1518 v = NULL;
1519 u = POP();
1520 err = assign_slice(u, v, w, (PyObject *)NULL);
1521 /* del u[v:w] */
1522 Py_DECREF(u);
1523 Py_XDECREF(v);
1524 Py_XDECREF(w);
1525 if (err == 0) continue;
1526 break;
1528 case STORE_SUBSCR:
1529 w = TOP();
1530 v = SECOND();
1531 u = THIRD();
1532 STACKADJ(-3);
1533 /* v[w] = u */
1534 err = PyObject_SetItem(v, w, u);
1535 Py_DECREF(u);
1536 Py_DECREF(v);
1537 Py_DECREF(w);
1538 if (err == 0) continue;
1539 break;
1541 case DELETE_SUBSCR:
1542 w = TOP();
1543 v = SECOND();
1544 STACKADJ(-2);
1545 /* del v[w] */
1546 err = PyObject_DelItem(v, w);
1547 Py_DECREF(v);
1548 Py_DECREF(w);
1549 if (err == 0) continue;
1550 break;
1552 case PRINT_EXPR:
1553 v = POP();
1554 w = PySys_GetObject("displayhook");
1555 if (w == NULL) {
1556 PyErr_SetString(PyExc_RuntimeError,
1557 "lost sys.displayhook");
1558 err = -1;
1559 x = NULL;
1561 if (err == 0) {
1562 x = PyTuple_Pack(1, v);
1563 if (x == NULL)
1564 err = -1;
1566 if (err == 0) {
1567 w = PyEval_CallObject(w, x);
1568 Py_XDECREF(w);
1569 if (w == NULL)
1570 err = -1;
1572 Py_DECREF(v);
1573 Py_XDECREF(x);
1574 break;
1576 case PRINT_ITEM_TO:
1577 w = stream = POP();
1578 /* fall through to PRINT_ITEM */
1580 case PRINT_ITEM:
1581 v = POP();
1582 if (stream == NULL || stream == Py_None) {
1583 w = PySys_GetObject("stdout");
1584 if (w == NULL) {
1585 PyErr_SetString(PyExc_RuntimeError,
1586 "lost sys.stdout");
1587 err = -1;
1590 /* PyFile_SoftSpace() can exececute arbitrary code
1591 if sys.stdout is an instance with a __getattr__.
1592 If __getattr__ raises an exception, w will
1593 be freed, so we need to prevent that temporarily. */
1594 Py_XINCREF(w);
1595 if (w != NULL && PyFile_SoftSpace(w, 0))
1596 err = PyFile_WriteString(" ", w);
1597 if (err == 0)
1598 err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
1599 if (err == 0) {
1600 /* XXX move into writeobject() ? */
1601 if (PyString_Check(v)) {
1602 char *s = PyString_AS_STRING(v);
1603 Py_ssize_t len = PyString_GET_SIZE(v);
1604 if (len == 0 ||
1605 !isspace(Py_CHARMASK(s[len-1])) ||
1606 s[len-1] == ' ')
1607 PyFile_SoftSpace(w, 1);
1609 #ifdef Py_USING_UNICODE
1610 else if (PyUnicode_Check(v)) {
1611 Py_UNICODE *s = PyUnicode_AS_UNICODE(v);
1612 Py_ssize_t len = PyUnicode_GET_SIZE(v);
1613 if (len == 0 ||
1614 !Py_UNICODE_ISSPACE(s[len-1]) ||
1615 s[len-1] == ' ')
1616 PyFile_SoftSpace(w, 1);
1618 #endif
1619 else
1620 PyFile_SoftSpace(w, 1);
1622 Py_XDECREF(w);
1623 Py_DECREF(v);
1624 Py_XDECREF(stream);
1625 stream = NULL;
1626 if (err == 0)
1627 continue;
1628 break;
1630 case PRINT_NEWLINE_TO:
1631 w = stream = POP();
1632 /* fall through to PRINT_NEWLINE */
1634 case PRINT_NEWLINE:
1635 if (stream == NULL || stream == Py_None) {
1636 w = PySys_GetObject("stdout");
1637 if (w == NULL)
1638 PyErr_SetString(PyExc_RuntimeError,
1639 "lost sys.stdout");
1641 if (w != NULL) {
1642 /* w.write() may replace sys.stdout, so we
1643 * have to keep our reference to it */
1644 Py_INCREF(w);
1645 err = PyFile_WriteString("\n", w);
1646 if (err == 0)
1647 PyFile_SoftSpace(w, 0);
1648 Py_DECREF(w);
1650 Py_XDECREF(stream);
1651 stream = NULL;
1652 break;
1655 #ifdef CASE_TOO_BIG
1656 default: switch (opcode) {
1657 #endif
1658 case RAISE_VARARGS:
1659 u = v = w = NULL;
1660 switch (oparg) {
1661 case 3:
1662 u = POP(); /* traceback */
1663 /* Fallthrough */
1664 case 2:
1665 v = POP(); /* value */
1666 /* Fallthrough */
1667 case 1:
1668 w = POP(); /* exc */
1669 case 0: /* Fallthrough */
1670 why = do_raise(w, v, u);
1671 break;
1672 default:
1673 PyErr_SetString(PyExc_SystemError,
1674 "bad RAISE_VARARGS oparg");
1675 why = WHY_EXCEPTION;
1676 break;
1678 break;
1680 case LOAD_LOCALS:
1681 if ((x = f->f_locals) != NULL) {
1682 Py_INCREF(x);
1683 PUSH(x);
1684 continue;
1686 PyErr_SetString(PyExc_SystemError, "no locals");
1687 break;
1689 case RETURN_VALUE:
1690 retval = POP();
1691 why = WHY_RETURN;
1692 goto fast_block_end;
1694 case YIELD_VALUE:
1695 retval = POP();
1696 f->f_stacktop = stack_pointer;
1697 why = WHY_YIELD;
1698 goto fast_yield;
1700 case EXEC_STMT:
1701 w = TOP();
1702 v = SECOND();
1703 u = THIRD();
1704 STACKADJ(-3);
1705 READ_TIMESTAMP(intr0);
1706 err = exec_statement(f, u, v, w);
1707 READ_TIMESTAMP(intr1);
1708 Py_DECREF(u);
1709 Py_DECREF(v);
1710 Py_DECREF(w);
1711 break;
1713 case POP_BLOCK:
1715 PyTryBlock *b = PyFrame_BlockPop(f);
1716 while (STACK_LEVEL() > b->b_level) {
1717 v = POP();
1718 Py_DECREF(v);
1721 continue;
1723 PREDICTED(END_FINALLY);
1724 case END_FINALLY:
1725 v = POP();
1726 if (PyInt_Check(v)) {
1727 why = (enum why_code) PyInt_AS_LONG(v);
1728 assert(why != WHY_YIELD);
1729 if (why == WHY_RETURN ||
1730 why == WHY_CONTINUE)
1731 retval = POP();
1733 else if (PyExceptionClass_Check(v) ||
1734 PyString_Check(v)) {
1735 w = POP();
1736 u = POP();
1737 PyErr_Restore(v, w, u);
1738 why = WHY_RERAISE;
1739 break;
1741 else if (v != Py_None) {
1742 PyErr_SetString(PyExc_SystemError,
1743 "'finally' pops bad exception");
1744 why = WHY_EXCEPTION;
1746 Py_DECREF(v);
1747 break;
1749 case BUILD_CLASS:
1750 u = TOP();
1751 v = SECOND();
1752 w = THIRD();
1753 STACKADJ(-2);
1754 x = build_class(u, v, w);
1755 SET_TOP(x);
1756 Py_DECREF(u);
1757 Py_DECREF(v);
1758 Py_DECREF(w);
1759 break;
1761 case STORE_NAME:
1762 w = GETITEM(names, oparg);
1763 v = POP();
1764 if ((x = f->f_locals) != NULL) {
1765 if (PyDict_CheckExact(x))
1766 err = PyDict_SetItem(x, w, v);
1767 else
1768 err = PyObject_SetItem(x, w, v);
1769 Py_DECREF(v);
1770 if (err == 0) continue;
1771 break;
1773 PyErr_Format(PyExc_SystemError,
1774 "no locals found when storing %s",
1775 PyObject_REPR(w));
1776 break;
1778 case DELETE_NAME:
1779 w = GETITEM(names, oparg);
1780 if ((x = f->f_locals) != NULL) {
1781 if ((err = PyObject_DelItem(x, w)) != 0)
1782 format_exc_check_arg(PyExc_NameError,
1783 NAME_ERROR_MSG,
1785 break;
1787 PyErr_Format(PyExc_SystemError,
1788 "no locals when deleting %s",
1789 PyObject_REPR(w));
1790 break;
1792 PREDICTED_WITH_ARG(UNPACK_SEQUENCE);
1793 case UNPACK_SEQUENCE:
1794 v = POP();
1795 if (PyTuple_CheckExact(v) &&
1796 PyTuple_GET_SIZE(v) == oparg) {
1797 PyObject **items = \
1798 ((PyTupleObject *)v)->ob_item;
1799 while (oparg--) {
1800 w = items[oparg];
1801 Py_INCREF(w);
1802 PUSH(w);
1804 Py_DECREF(v);
1805 continue;
1806 } else if (PyList_CheckExact(v) &&
1807 PyList_GET_SIZE(v) == oparg) {
1808 PyObject **items = \
1809 ((PyListObject *)v)->ob_item;
1810 while (oparg--) {
1811 w = items[oparg];
1812 Py_INCREF(w);
1813 PUSH(w);
1815 } else if (unpack_iterable(v, oparg,
1816 stack_pointer + oparg)) {
1817 stack_pointer += oparg;
1818 } else {
1819 /* unpack_iterable() raised an exception */
1820 why = WHY_EXCEPTION;
1822 Py_DECREF(v);
1823 break;
1825 case STORE_ATTR:
1826 w = GETITEM(names, oparg);
1827 v = TOP();
1828 u = SECOND();
1829 STACKADJ(-2);
1830 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1831 Py_DECREF(v);
1832 Py_DECREF(u);
1833 if (err == 0) continue;
1834 break;
1836 case DELETE_ATTR:
1837 w = GETITEM(names, oparg);
1838 v = POP();
1839 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1840 /* del v.w */
1841 Py_DECREF(v);
1842 break;
1844 case STORE_GLOBAL:
1845 w = GETITEM(names, oparg);
1846 v = POP();
1847 err = PyDict_SetItem(f->f_globals, w, v);
1848 Py_DECREF(v);
1849 if (err == 0) continue;
1850 break;
1852 case DELETE_GLOBAL:
1853 w = GETITEM(names, oparg);
1854 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
1855 format_exc_check_arg(
1856 PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w);
1857 break;
1859 case LOAD_NAME:
1860 w = GETITEM(names, oparg);
1861 if ((v = f->f_locals) == NULL) {
1862 PyErr_Format(PyExc_SystemError,
1863 "no locals when loading %s",
1864 PyObject_REPR(w));
1865 break;
1867 if (PyDict_CheckExact(v)) {
1868 x = PyDict_GetItem(v, w);
1869 Py_XINCREF(x);
1871 else {
1872 x = PyObject_GetItem(v, w);
1873 if (x == NULL && PyErr_Occurred()) {
1874 if (!PyErr_ExceptionMatches(
1875 PyExc_KeyError))
1876 break;
1877 PyErr_Clear();
1880 if (x == NULL) {
1881 x = PyDict_GetItem(f->f_globals, w);
1882 if (x == NULL) {
1883 x = PyDict_GetItem(f->f_builtins, w);
1884 if (x == NULL) {
1885 format_exc_check_arg(
1886 PyExc_NameError,
1887 NAME_ERROR_MSG, w);
1888 break;
1891 Py_INCREF(x);
1893 PUSH(x);
1894 continue;
1896 case LOAD_GLOBAL:
1897 w = GETITEM(names, oparg);
1898 if (PyString_CheckExact(w)) {
1899 /* Inline the PyDict_GetItem() calls.
1900 WARNING: this is an extreme speed hack.
1901 Do not try this at home. */
1902 long hash = ((PyStringObject *)w)->ob_shash;
1903 if (hash != -1) {
1904 PyDictObject *d;
1905 PyDictEntry *e;
1906 d = (PyDictObject *)(f->f_globals);
1907 e = d->ma_lookup(d, w, hash);
1908 if (e == NULL) {
1909 x = NULL;
1910 break;
1912 x = e->me_value;
1913 if (x != NULL) {
1914 Py_INCREF(x);
1915 PUSH(x);
1916 continue;
1918 d = (PyDictObject *)(f->f_builtins);
1919 e = d->ma_lookup(d, w, hash);
1920 if (e == NULL) {
1921 x = NULL;
1922 break;
1924 x = e->me_value;
1925 if (x != NULL) {
1926 Py_INCREF(x);
1927 PUSH(x);
1928 continue;
1930 goto load_global_error;
1933 /* This is the un-inlined version of the code above */
1934 x = PyDict_GetItem(f->f_globals, w);
1935 if (x == NULL) {
1936 x = PyDict_GetItem(f->f_builtins, w);
1937 if (x == NULL) {
1938 load_global_error:
1939 format_exc_check_arg(
1940 PyExc_NameError,
1941 GLOBAL_NAME_ERROR_MSG, w);
1942 break;
1945 Py_INCREF(x);
1946 PUSH(x);
1947 continue;
1949 case DELETE_FAST:
1950 x = GETLOCAL(oparg);
1951 if (x != NULL) {
1952 SETLOCAL(oparg, NULL);
1953 continue;
1955 format_exc_check_arg(
1956 PyExc_UnboundLocalError,
1957 UNBOUNDLOCAL_ERROR_MSG,
1958 PyTuple_GetItem(co->co_varnames, oparg)
1960 break;
1962 case LOAD_CLOSURE:
1963 x = freevars[oparg];
1964 Py_INCREF(x);
1965 PUSH(x);
1966 if (x != NULL) continue;
1967 break;
1969 case LOAD_DEREF:
1970 x = freevars[oparg];
1971 w = PyCell_Get(x);
1972 if (w != NULL) {
1973 PUSH(w);
1974 continue;
1976 err = -1;
1977 /* Don't stomp existing exception */
1978 if (PyErr_Occurred())
1979 break;
1980 if (oparg < PyTuple_GET_SIZE(co->co_cellvars)) {
1981 v = PyTuple_GET_ITEM(co->co_cellvars,
1982 oparg);
1983 format_exc_check_arg(
1984 PyExc_UnboundLocalError,
1985 UNBOUNDLOCAL_ERROR_MSG,
1987 } else {
1988 v = PyTuple_GET_ITEM(co->co_freevars, oparg -
1989 PyTuple_GET_SIZE(co->co_cellvars));
1990 format_exc_check_arg(PyExc_NameError,
1991 UNBOUNDFREE_ERROR_MSG, v);
1993 break;
1995 case STORE_DEREF:
1996 w = POP();
1997 x = freevars[oparg];
1998 PyCell_Set(x, w);
1999 Py_DECREF(w);
2000 continue;
2002 case BUILD_TUPLE:
2003 x = PyTuple_New(oparg);
2004 if (x != NULL) {
2005 for (; --oparg >= 0;) {
2006 w = POP();
2007 PyTuple_SET_ITEM(x, oparg, w);
2009 PUSH(x);
2010 continue;
2012 break;
2014 case BUILD_LIST:
2015 x = PyList_New(oparg);
2016 if (x != NULL) {
2017 for (; --oparg >= 0;) {
2018 w = POP();
2019 PyList_SET_ITEM(x, oparg, w);
2021 PUSH(x);
2022 continue;
2024 break;
2026 case BUILD_MAP:
2027 x = _PyDict_NewPresized((Py_ssize_t)oparg);
2028 PUSH(x);
2029 if (x != NULL) continue;
2030 break;
2032 case STORE_MAP:
2033 w = TOP(); /* key */
2034 u = SECOND(); /* value */
2035 v = THIRD(); /* dict */
2036 STACKADJ(-2);
2037 assert (PyDict_CheckExact(v));
2038 err = PyDict_SetItem(v, w, u); /* v[w] = u */
2039 Py_DECREF(u);
2040 Py_DECREF(w);
2041 if (err == 0) continue;
2042 break;
2044 case LOAD_ATTR:
2045 w = GETITEM(names, oparg);
2046 v = TOP();
2047 x = PyObject_GetAttr(v, w);
2048 Py_DECREF(v);
2049 SET_TOP(x);
2050 if (x != NULL) continue;
2051 break;
2053 case COMPARE_OP:
2054 w = POP();
2055 v = TOP();
2056 if (PyInt_CheckExact(w) && PyInt_CheckExact(v)) {
2057 /* INLINE: cmp(int, int) */
2058 register long a, b;
2059 register int res;
2060 a = PyInt_AS_LONG(v);
2061 b = PyInt_AS_LONG(w);
2062 switch (oparg) {
2063 case PyCmp_LT: res = a < b; break;
2064 case PyCmp_LE: res = a <= b; break;
2065 case PyCmp_EQ: res = a == b; break;
2066 case PyCmp_NE: res = a != b; break;
2067 case PyCmp_GT: res = a > b; break;
2068 case PyCmp_GE: res = a >= b; break;
2069 case PyCmp_IS: res = v == w; break;
2070 case PyCmp_IS_NOT: res = v != w; break;
2071 default: goto slow_compare;
2073 x = res ? Py_True : Py_False;
2074 Py_INCREF(x);
2076 else {
2077 slow_compare:
2078 x = cmp_outcome(oparg, v, w);
2080 Py_DECREF(v);
2081 Py_DECREF(w);
2082 SET_TOP(x);
2083 if (x == NULL) break;
2084 PREDICT(JUMP_IF_FALSE);
2085 PREDICT(JUMP_IF_TRUE);
2086 continue;
2088 case IMPORT_NAME:
2089 w = GETITEM(names, oparg);
2090 x = PyDict_GetItemString(f->f_builtins, "__import__");
2091 if (x == NULL) {
2092 PyErr_SetString(PyExc_ImportError,
2093 "__import__ not found");
2094 break;
2096 Py_INCREF(x);
2097 v = POP();
2098 u = TOP();
2099 if (PyInt_AsLong(u) != -1 || PyErr_Occurred())
2100 w = PyTuple_Pack(5,
2102 f->f_globals,
2103 f->f_locals == NULL ?
2104 Py_None : f->f_locals,
2107 else
2108 w = PyTuple_Pack(4,
2110 f->f_globals,
2111 f->f_locals == NULL ?
2112 Py_None : f->f_locals,
2114 Py_DECREF(v);
2115 Py_DECREF(u);
2116 if (w == NULL) {
2117 u = POP();
2118 Py_DECREF(x);
2119 x = NULL;
2120 break;
2122 READ_TIMESTAMP(intr0);
2123 v = x;
2124 x = PyEval_CallObject(v, w);
2125 Py_DECREF(v);
2126 READ_TIMESTAMP(intr1);
2127 Py_DECREF(w);
2128 SET_TOP(x);
2129 if (x != NULL) continue;
2130 break;
2132 case IMPORT_STAR:
2133 v = POP();
2134 PyFrame_FastToLocals(f);
2135 if ((x = f->f_locals) == NULL) {
2136 PyErr_SetString(PyExc_SystemError,
2137 "no locals found during 'import *'");
2138 break;
2140 READ_TIMESTAMP(intr0);
2141 err = import_all_from(x, v);
2142 READ_TIMESTAMP(intr1);
2143 PyFrame_LocalsToFast(f, 0);
2144 Py_DECREF(v);
2145 if (err == 0) continue;
2146 break;
2148 case IMPORT_FROM:
2149 w = GETITEM(names, oparg);
2150 v = TOP();
2151 READ_TIMESTAMP(intr0);
2152 x = import_from(v, w);
2153 READ_TIMESTAMP(intr1);
2154 PUSH(x);
2155 if (x != NULL) continue;
2156 break;
2158 case JUMP_FORWARD:
2159 JUMPBY(oparg);
2160 goto fast_next_opcode;
2162 PREDICTED_WITH_ARG(JUMP_IF_FALSE);
2163 case JUMP_IF_FALSE:
2164 w = TOP();
2165 if (w == Py_True) {
2166 PREDICT(POP_TOP);
2167 goto fast_next_opcode;
2169 if (w == Py_False) {
2170 JUMPBY(oparg);
2171 goto fast_next_opcode;
2173 err = PyObject_IsTrue(w);
2174 if (err > 0)
2175 err = 0;
2176 else if (err == 0)
2177 JUMPBY(oparg);
2178 else
2179 break;
2180 continue;
2182 PREDICTED_WITH_ARG(JUMP_IF_TRUE);
2183 case JUMP_IF_TRUE:
2184 w = TOP();
2185 if (w == Py_False) {
2186 PREDICT(POP_TOP);
2187 goto fast_next_opcode;
2189 if (w == Py_True) {
2190 JUMPBY(oparg);
2191 goto fast_next_opcode;
2193 err = PyObject_IsTrue(w);
2194 if (err > 0) {
2195 err = 0;
2196 JUMPBY(oparg);
2198 else if (err == 0)
2200 else
2201 break;
2202 continue;
2204 PREDICTED_WITH_ARG(JUMP_ABSOLUTE);
2205 case JUMP_ABSOLUTE:
2206 JUMPTO(oparg);
2207 #if FAST_LOOPS
2208 /* Enabling this path speeds-up all while and for-loops by bypassing
2209 the per-loop checks for signals. By default, this should be turned-off
2210 because it prevents detection of a control-break in tight loops like
2211 "while 1: pass". Compile with this option turned-on when you need
2212 the speed-up and do not need break checking inside tight loops (ones
2213 that contain only instructions ending with goto fast_next_opcode).
2215 goto fast_next_opcode;
2216 #else
2217 continue;
2218 #endif
2220 case GET_ITER:
2221 /* before: [obj]; after [getiter(obj)] */
2222 v = TOP();
2223 x = PyObject_GetIter(v);
2224 Py_DECREF(v);
2225 if (x != NULL) {
2226 SET_TOP(x);
2227 PREDICT(FOR_ITER);
2228 continue;
2230 STACKADJ(-1);
2231 break;
2233 PREDICTED_WITH_ARG(FOR_ITER);
2234 case FOR_ITER:
2235 /* before: [iter]; after: [iter, iter()] *or* [] */
2236 v = TOP();
2237 x = (*v->ob_type->tp_iternext)(v);
2238 if (x != NULL) {
2239 PUSH(x);
2240 PREDICT(STORE_FAST);
2241 PREDICT(UNPACK_SEQUENCE);
2242 continue;
2244 if (PyErr_Occurred()) {
2245 if (!PyErr_ExceptionMatches(
2246 PyExc_StopIteration))
2247 break;
2248 PyErr_Clear();
2250 /* iterator ended normally */
2251 x = v = POP();
2252 Py_DECREF(v);
2253 JUMPBY(oparg);
2254 continue;
2256 case BREAK_LOOP:
2257 why = WHY_BREAK;
2258 goto fast_block_end;
2260 case CONTINUE_LOOP:
2261 retval = PyInt_FromLong(oparg);
2262 if (!retval) {
2263 x = NULL;
2264 break;
2266 why = WHY_CONTINUE;
2267 goto fast_block_end;
2269 case SETUP_LOOP:
2270 case SETUP_EXCEPT:
2271 case SETUP_FINALLY:
2272 /* NOTE: If you add any new block-setup opcodes that
2273 are not try/except/finally handlers, you may need
2274 to update the PyGen_NeedsFinalizing() function.
2277 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
2278 STACK_LEVEL());
2279 continue;
2281 case WITH_CLEANUP:
2283 /* At the top of the stack are 1-3 values indicating
2284 how/why we entered the finally clause:
2285 - TOP = None
2286 - (TOP, SECOND) = (WHY_{RETURN,CONTINUE}), retval
2287 - TOP = WHY_*; no retval below it
2288 - (TOP, SECOND, THIRD) = exc_info()
2289 Below them is EXIT, the context.__exit__ bound method.
2290 In the last case, we must call
2291 EXIT(TOP, SECOND, THIRD)
2292 otherwise we must call
2293 EXIT(None, None, None)
2295 In all cases, we remove EXIT from the stack, leaving
2296 the rest in the same order.
2298 In addition, if the stack represents an exception,
2299 *and* the function call returns a 'true' value, we
2300 "zap" this information, to prevent END_FINALLY from
2301 re-raising the exception. (But non-local gotos
2302 should still be resumed.)
2305 PyObject *exit_func;
2307 u = POP();
2308 if (u == Py_None) {
2309 exit_func = TOP();
2310 SET_TOP(u);
2311 v = w = Py_None;
2313 else if (PyInt_Check(u)) {
2314 switch(PyInt_AS_LONG(u)) {
2315 case WHY_RETURN:
2316 case WHY_CONTINUE:
2317 /* Retval in TOP. */
2318 exit_func = SECOND();
2319 SET_SECOND(TOP());
2320 SET_TOP(u);
2321 break;
2322 default:
2323 exit_func = TOP();
2324 SET_TOP(u);
2325 break;
2327 u = v = w = Py_None;
2329 else {
2330 v = TOP();
2331 w = SECOND();
2332 exit_func = THIRD();
2333 SET_TOP(u);
2334 SET_SECOND(v);
2335 SET_THIRD(w);
2337 /* XXX Not the fastest way to call it... */
2338 x = PyObject_CallFunctionObjArgs(exit_func, u, v, w,
2339 NULL);
2340 if (x == NULL) {
2341 Py_DECREF(exit_func);
2342 break; /* Go to error exit */
2344 if (u != Py_None && PyObject_IsTrue(x)) {
2345 /* There was an exception and a true return */
2346 STACKADJ(-2);
2347 Py_INCREF(Py_None);
2348 SET_TOP(Py_None);
2349 Py_DECREF(u);
2350 Py_DECREF(v);
2351 Py_DECREF(w);
2352 } else {
2353 /* The stack was rearranged to remove EXIT
2354 above. Let END_FINALLY do its thing */
2356 Py_DECREF(x);
2357 Py_DECREF(exit_func);
2358 PREDICT(END_FINALLY);
2359 break;
2362 case CALL_FUNCTION:
2364 PyObject **sp;
2365 PCALL(PCALL_ALL);
2366 sp = stack_pointer;
2367 #ifdef WITH_TSC
2368 x = call_function(&sp, oparg, &intr0, &intr1);
2369 #else
2370 x = call_function(&sp, oparg);
2371 #endif
2372 stack_pointer = sp;
2373 PUSH(x);
2374 if (x != NULL)
2375 continue;
2376 break;
2379 case CALL_FUNCTION_VAR:
2380 case CALL_FUNCTION_KW:
2381 case CALL_FUNCTION_VAR_KW:
2383 int na = oparg & 0xff;
2384 int nk = (oparg>>8) & 0xff;
2385 int flags = (opcode - CALL_FUNCTION) & 3;
2386 int n = na + 2 * nk;
2387 PyObject **pfunc, *func, **sp;
2388 PCALL(PCALL_ALL);
2389 if (flags & CALL_FLAG_VAR)
2390 n++;
2391 if (flags & CALL_FLAG_KW)
2392 n++;
2393 pfunc = stack_pointer - n - 1;
2394 func = *pfunc;
2396 if (PyMethod_Check(func)
2397 && PyMethod_GET_SELF(func) != NULL) {
2398 PyObject *self = PyMethod_GET_SELF(func);
2399 Py_INCREF(self);
2400 func = PyMethod_GET_FUNCTION(func);
2401 Py_INCREF(func);
2402 Py_DECREF(*pfunc);
2403 *pfunc = self;
2404 na++;
2405 n++;
2406 } else
2407 Py_INCREF(func);
2408 sp = stack_pointer;
2409 READ_TIMESTAMP(intr0);
2410 x = ext_do_call(func, &sp, flags, na, nk);
2411 READ_TIMESTAMP(intr1);
2412 stack_pointer = sp;
2413 Py_DECREF(func);
2415 while (stack_pointer > pfunc) {
2416 w = POP();
2417 Py_DECREF(w);
2419 PUSH(x);
2420 if (x != NULL)
2421 continue;
2422 break;
2425 case MAKE_FUNCTION:
2426 v = POP(); /* code object */
2427 x = PyFunction_New(v, f->f_globals);
2428 Py_DECREF(v);
2429 /* XXX Maybe this should be a separate opcode? */
2430 if (x != NULL && oparg > 0) {
2431 v = PyTuple_New(oparg);
2432 if (v == NULL) {
2433 Py_DECREF(x);
2434 x = NULL;
2435 break;
2437 while (--oparg >= 0) {
2438 w = POP();
2439 PyTuple_SET_ITEM(v, oparg, w);
2441 err = PyFunction_SetDefaults(x, v);
2442 Py_DECREF(v);
2444 PUSH(x);
2445 break;
2447 case MAKE_CLOSURE:
2449 v = POP(); /* code object */
2450 x = PyFunction_New(v, f->f_globals);
2451 Py_DECREF(v);
2452 if (x != NULL) {
2453 v = POP();
2454 err = PyFunction_SetClosure(x, v);
2455 Py_DECREF(v);
2457 if (x != NULL && oparg > 0) {
2458 v = PyTuple_New(oparg);
2459 if (v == NULL) {
2460 Py_DECREF(x);
2461 x = NULL;
2462 break;
2464 while (--oparg >= 0) {
2465 w = POP();
2466 PyTuple_SET_ITEM(v, oparg, w);
2468 err = PyFunction_SetDefaults(x, v);
2469 Py_DECREF(v);
2471 PUSH(x);
2472 break;
2475 case BUILD_SLICE:
2476 if (oparg == 3)
2477 w = POP();
2478 else
2479 w = NULL;
2480 v = POP();
2481 u = TOP();
2482 x = PySlice_New(u, v, w);
2483 Py_DECREF(u);
2484 Py_DECREF(v);
2485 Py_XDECREF(w);
2486 SET_TOP(x);
2487 if (x != NULL) continue;
2488 break;
2490 case EXTENDED_ARG:
2491 opcode = NEXTOP();
2492 oparg = oparg<<16 | NEXTARG();
2493 goto dispatch_opcode;
2495 default:
2496 fprintf(stderr,
2497 "XXX lineno: %d, opcode: %d\n",
2498 PyCode_Addr2Line(f->f_code, f->f_lasti),
2499 opcode);
2500 PyErr_SetString(PyExc_SystemError, "unknown opcode");
2501 why = WHY_EXCEPTION;
2502 break;
2504 #ifdef CASE_TOO_BIG
2506 #endif
2508 } /* switch */
2510 on_error:
2512 READ_TIMESTAMP(inst1);
2514 /* Quickly continue if no error occurred */
2516 if (why == WHY_NOT) {
2517 if (err == 0 && x != NULL) {
2518 #ifdef CHECKEXC
2519 /* This check is expensive! */
2520 if (PyErr_Occurred())
2521 fprintf(stderr,
2522 "XXX undetected error\n");
2523 else {
2524 #endif
2525 READ_TIMESTAMP(loop1);
2526 continue; /* Normal, fast path */
2527 #ifdef CHECKEXC
2529 #endif
2531 why = WHY_EXCEPTION;
2532 x = Py_None;
2533 err = 0;
2536 /* Double-check exception status */
2538 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
2539 if (!PyErr_Occurred()) {
2540 PyErr_SetString(PyExc_SystemError,
2541 "error return without exception set");
2542 why = WHY_EXCEPTION;
2545 #ifdef CHECKEXC
2546 else {
2547 /* This check is expensive! */
2548 if (PyErr_Occurred()) {
2549 char buf[128];
2550 sprintf(buf, "Stack unwind with exception "
2551 "set and why=%d", why);
2552 Py_FatalError(buf);
2555 #endif
2557 /* Log traceback info if this is a real exception */
2559 if (why == WHY_EXCEPTION) {
2560 PyTraceBack_Here(f);
2562 if (tstate->c_tracefunc != NULL)
2563 call_exc_trace(tstate->c_tracefunc,
2564 tstate->c_traceobj, f);
2567 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
2569 if (why == WHY_RERAISE)
2570 why = WHY_EXCEPTION;
2572 /* Unwind stacks if a (pseudo) exception occurred */
2574 fast_block_end:
2575 while (why != WHY_NOT && f->f_iblock > 0) {
2576 PyTryBlock *b = PyFrame_BlockPop(f);
2578 assert(why != WHY_YIELD);
2579 if (b->b_type == SETUP_LOOP && why == WHY_CONTINUE) {
2580 /* For a continue inside a try block,
2581 don't pop the block for the loop. */
2582 PyFrame_BlockSetup(f, b->b_type, b->b_handler,
2583 b->b_level);
2584 why = WHY_NOT;
2585 JUMPTO(PyInt_AS_LONG(retval));
2586 Py_DECREF(retval);
2587 break;
2590 while (STACK_LEVEL() > b->b_level) {
2591 v = POP();
2592 Py_XDECREF(v);
2594 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
2595 why = WHY_NOT;
2596 JUMPTO(b->b_handler);
2597 break;
2599 if (b->b_type == SETUP_FINALLY ||
2600 (b->b_type == SETUP_EXCEPT &&
2601 why == WHY_EXCEPTION)) {
2602 if (why == WHY_EXCEPTION) {
2603 PyObject *exc, *val, *tb;
2604 PyErr_Fetch(&exc, &val, &tb);
2605 if (val == NULL) {
2606 val = Py_None;
2607 Py_INCREF(val);
2609 /* Make the raw exception data
2610 available to the handler,
2611 so a program can emulate the
2612 Python main loop. Don't do
2613 this for 'finally'. */
2614 if (b->b_type == SETUP_EXCEPT) {
2615 PyErr_NormalizeException(
2616 &exc, &val, &tb);
2617 set_exc_info(tstate,
2618 exc, val, tb);
2620 if (tb == NULL) {
2621 Py_INCREF(Py_None);
2622 PUSH(Py_None);
2623 } else
2624 PUSH(tb);
2625 PUSH(val);
2626 PUSH(exc);
2628 else {
2629 if (why & (WHY_RETURN | WHY_CONTINUE))
2630 PUSH(retval);
2631 v = PyInt_FromLong((long)why);
2632 PUSH(v);
2634 why = WHY_NOT;
2635 JUMPTO(b->b_handler);
2636 break;
2638 } /* unwind stack */
2640 /* End the loop if we still have an error (or return) */
2642 if (why != WHY_NOT)
2643 break;
2644 READ_TIMESTAMP(loop1);
2646 } /* main loop */
2648 assert(why != WHY_YIELD);
2649 /* Pop remaining stack entries. */
2650 while (!EMPTY()) {
2651 v = POP();
2652 Py_XDECREF(v);
2655 if (why != WHY_RETURN)
2656 retval = NULL;
2658 fast_yield:
2659 if (tstate->use_tracing) {
2660 if (tstate->c_tracefunc) {
2661 if (why == WHY_RETURN || why == WHY_YIELD) {
2662 if (call_trace(tstate->c_tracefunc,
2663 tstate->c_traceobj, f,
2664 PyTrace_RETURN, retval)) {
2665 Py_XDECREF(retval);
2666 retval = NULL;
2667 why = WHY_EXCEPTION;
2670 else if (why == WHY_EXCEPTION) {
2671 call_trace_protected(tstate->c_tracefunc,
2672 tstate->c_traceobj, f,
2673 PyTrace_RETURN, NULL);
2676 if (tstate->c_profilefunc) {
2677 if (why == WHY_EXCEPTION)
2678 call_trace_protected(tstate->c_profilefunc,
2679 tstate->c_profileobj, f,
2680 PyTrace_RETURN, NULL);
2681 else if (call_trace(tstate->c_profilefunc,
2682 tstate->c_profileobj, f,
2683 PyTrace_RETURN, retval)) {
2684 Py_XDECREF(retval);
2685 retval = NULL;
2686 why = WHY_EXCEPTION;
2691 if (tstate->frame->f_exc_type != NULL)
2692 reset_exc_info(tstate);
2693 else {
2694 assert(tstate->frame->f_exc_value == NULL);
2695 assert(tstate->frame->f_exc_traceback == NULL);
2698 /* pop frame */
2699 exit_eval_frame:
2700 Py_LeaveRecursiveCall();
2701 tstate->frame = f->f_back;
2703 return retval;
2706 /* This is gonna seem *real weird*, but if you put some other code between
2707 PyEval_EvalFrame() and PyEval_EvalCodeEx() you will need to adjust
2708 the test in the if statements in Misc/gdbinit (pystack and pystackv). */
2710 PyObject *
2711 PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals,
2712 PyObject **args, int argcount, PyObject **kws, int kwcount,
2713 PyObject **defs, int defcount, PyObject *closure)
2715 register PyFrameObject *f;
2716 register PyObject *retval = NULL;
2717 register PyObject **fastlocals, **freevars;
2718 PyThreadState *tstate = PyThreadState_GET();
2719 PyObject *x, *u;
2721 if (globals == NULL) {
2722 PyErr_SetString(PyExc_SystemError,
2723 "PyEval_EvalCodeEx: NULL globals");
2724 return NULL;
2727 assert(tstate != NULL);
2728 assert(globals != NULL);
2729 f = PyFrame_New(tstate, co, globals, locals);
2730 if (f == NULL)
2731 return NULL;
2733 fastlocals = f->f_localsplus;
2734 freevars = f->f_localsplus + co->co_nlocals;
2736 if (co->co_argcount > 0 ||
2737 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
2738 int i;
2739 int n = argcount;
2740 PyObject *kwdict = NULL;
2741 if (co->co_flags & CO_VARKEYWORDS) {
2742 kwdict = PyDict_New();
2743 if (kwdict == NULL)
2744 goto fail;
2745 i = co->co_argcount;
2746 if (co->co_flags & CO_VARARGS)
2747 i++;
2748 SETLOCAL(i, kwdict);
2750 if (argcount > co->co_argcount) {
2751 if (!(co->co_flags & CO_VARARGS)) {
2752 PyErr_Format(PyExc_TypeError,
2753 "%.200s() takes %s %d "
2754 "%sargument%s (%d given)",
2755 PyString_AsString(co->co_name),
2756 defcount ? "at most" : "exactly",
2757 co->co_argcount,
2758 kwcount ? "non-keyword " : "",
2759 co->co_argcount == 1 ? "" : "s",
2760 argcount);
2761 goto fail;
2763 n = co->co_argcount;
2765 for (i = 0; i < n; i++) {
2766 x = args[i];
2767 Py_INCREF(x);
2768 SETLOCAL(i, x);
2770 if (co->co_flags & CO_VARARGS) {
2771 u = PyTuple_New(argcount - n);
2772 if (u == NULL)
2773 goto fail;
2774 SETLOCAL(co->co_argcount, u);
2775 for (i = n; i < argcount; i++) {
2776 x = args[i];
2777 Py_INCREF(x);
2778 PyTuple_SET_ITEM(u, i-n, x);
2781 for (i = 0; i < kwcount; i++) {
2782 PyObject **co_varnames;
2783 PyObject *keyword = kws[2*i];
2784 PyObject *value = kws[2*i + 1];
2785 int j;
2786 if (keyword == NULL || !PyString_Check(keyword)) {
2787 PyErr_Format(PyExc_TypeError,
2788 "%.200s() keywords must be strings",
2789 PyString_AsString(co->co_name));
2790 goto fail;
2792 /* Speed hack: do raw pointer compares. As names are
2793 normally interned this should almost always hit. */
2794 co_varnames = PySequence_Fast_ITEMS(co->co_varnames);
2795 for (j = 0; j < co->co_argcount; j++) {
2796 PyObject *nm = co_varnames[j];
2797 if (nm == keyword)
2798 goto kw_found;
2800 /* Slow fallback, just in case */
2801 for (j = 0; j < co->co_argcount; j++) {
2802 PyObject *nm = co_varnames[j];
2803 int cmp = PyObject_RichCompareBool(
2804 keyword, nm, Py_EQ);
2805 if (cmp > 0)
2806 goto kw_found;
2807 else if (cmp < 0)
2808 goto fail;
2810 /* Check errors from Compare */
2811 if (PyErr_Occurred())
2812 goto fail;
2813 if (j >= co->co_argcount) {
2814 if (kwdict == NULL) {
2815 PyErr_Format(PyExc_TypeError,
2816 "%.200s() got an unexpected "
2817 "keyword argument '%.400s'",
2818 PyString_AsString(co->co_name),
2819 PyString_AsString(keyword));
2820 goto fail;
2822 PyDict_SetItem(kwdict, keyword, value);
2823 continue;
2825 kw_found:
2826 if (GETLOCAL(j) != NULL) {
2827 PyErr_Format(PyExc_TypeError,
2828 "%.200s() got multiple "
2829 "values for keyword "
2830 "argument '%.400s'",
2831 PyString_AsString(co->co_name),
2832 PyString_AsString(keyword));
2833 goto fail;
2835 Py_INCREF(value);
2836 SETLOCAL(j, value);
2838 if (argcount < co->co_argcount) {
2839 int m = co->co_argcount - defcount;
2840 for (i = argcount; i < m; i++) {
2841 if (GETLOCAL(i) == NULL) {
2842 PyErr_Format(PyExc_TypeError,
2843 "%.200s() takes %s %d "
2844 "%sargument%s (%d given)",
2845 PyString_AsString(co->co_name),
2846 ((co->co_flags & CO_VARARGS) ||
2847 defcount) ? "at least"
2848 : "exactly",
2849 m, kwcount ? "non-keyword " : "",
2850 m == 1 ? "" : "s", i);
2851 goto fail;
2854 if (n > m)
2855 i = n - m;
2856 else
2857 i = 0;
2858 for (; i < defcount; i++) {
2859 if (GETLOCAL(m+i) == NULL) {
2860 PyObject *def = defs[i];
2861 Py_INCREF(def);
2862 SETLOCAL(m+i, def);
2867 else {
2868 if (argcount > 0 || kwcount > 0) {
2869 PyErr_Format(PyExc_TypeError,
2870 "%.200s() takes no arguments (%d given)",
2871 PyString_AsString(co->co_name),
2872 argcount + kwcount);
2873 goto fail;
2876 /* Allocate and initialize storage for cell vars, and copy free
2877 vars into frame. This isn't too efficient right now. */
2878 if (PyTuple_GET_SIZE(co->co_cellvars)) {
2879 int i, j, nargs, found;
2880 char *cellname, *argname;
2881 PyObject *c;
2883 nargs = co->co_argcount;
2884 if (co->co_flags & CO_VARARGS)
2885 nargs++;
2886 if (co->co_flags & CO_VARKEYWORDS)
2887 nargs++;
2889 /* Initialize each cell var, taking into account
2890 cell vars that are initialized from arguments.
2892 Should arrange for the compiler to put cellvars
2893 that are arguments at the beginning of the cellvars
2894 list so that we can march over it more efficiently?
2896 for (i = 0; i < PyTuple_GET_SIZE(co->co_cellvars); ++i) {
2897 cellname = PyString_AS_STRING(
2898 PyTuple_GET_ITEM(co->co_cellvars, i));
2899 found = 0;
2900 for (j = 0; j < nargs; j++) {
2901 argname = PyString_AS_STRING(
2902 PyTuple_GET_ITEM(co->co_varnames, j));
2903 if (strcmp(cellname, argname) == 0) {
2904 c = PyCell_New(GETLOCAL(j));
2905 if (c == NULL)
2906 goto fail;
2907 GETLOCAL(co->co_nlocals + i) = c;
2908 found = 1;
2909 break;
2912 if (found == 0) {
2913 c = PyCell_New(NULL);
2914 if (c == NULL)
2915 goto fail;
2916 SETLOCAL(co->co_nlocals + i, c);
2920 if (PyTuple_GET_SIZE(co->co_freevars)) {
2921 int i;
2922 for (i = 0; i < PyTuple_GET_SIZE(co->co_freevars); ++i) {
2923 PyObject *o = PyTuple_GET_ITEM(closure, i);
2924 Py_INCREF(o);
2925 freevars[PyTuple_GET_SIZE(co->co_cellvars) + i] = o;
2929 if (co->co_flags & CO_GENERATOR) {
2930 /* Don't need to keep the reference to f_back, it will be set
2931 * when the generator is resumed. */
2932 Py_XDECREF(f->f_back);
2933 f->f_back = NULL;
2935 PCALL(PCALL_GENERATOR);
2937 /* Create a new generator that owns the ready to run frame
2938 * and return that as the value. */
2939 return PyGen_New(f);
2942 retval = PyEval_EvalFrameEx(f,0);
2944 fail: /* Jump here from prelude on failure */
2946 /* decref'ing the frame can cause __del__ methods to get invoked,
2947 which can call back into Python. While we're done with the
2948 current Python frame (f), the associated C stack is still in use,
2949 so recursion_depth must be boosted for the duration.
2951 assert(tstate != NULL);
2952 ++tstate->recursion_depth;
2953 Py_DECREF(f);
2954 --tstate->recursion_depth;
2955 return retval;
2959 /* Implementation notes for set_exc_info() and reset_exc_info():
2961 - Below, 'exc_ZZZ' stands for 'exc_type', 'exc_value' and
2962 'exc_traceback'. These always travel together.
2964 - tstate->curexc_ZZZ is the "hot" exception that is set by
2965 PyErr_SetString(), cleared by PyErr_Clear(), and so on.
2967 - Once an exception is caught by an except clause, it is transferred
2968 from tstate->curexc_ZZZ to tstate->exc_ZZZ, from which sys.exc_info()
2969 can pick it up. This is the primary task of set_exc_info().
2970 XXX That can't be right: set_exc_info() doesn't look at tstate->curexc_ZZZ.
2972 - Now let me explain the complicated dance with frame->f_exc_ZZZ.
2974 Long ago, when none of this existed, there were just a few globals:
2975 one set corresponding to the "hot" exception, and one set
2976 corresponding to sys.exc_ZZZ. (Actually, the latter weren't C
2977 globals; they were simply stored as sys.exc_ZZZ. For backwards
2978 compatibility, they still are!) The problem was that in code like
2979 this:
2981 try:
2982 "something that may fail"
2983 except "some exception":
2984 "do something else first"
2985 "print the exception from sys.exc_ZZZ."
2987 if "do something else first" invoked something that raised and caught
2988 an exception, sys.exc_ZZZ were overwritten. That was a frequent
2989 cause of subtle bugs. I fixed this by changing the semantics as
2990 follows:
2992 - Within one frame, sys.exc_ZZZ will hold the last exception caught
2993 *in that frame*.
2995 - But initially, and as long as no exception is caught in a given
2996 frame, sys.exc_ZZZ will hold the last exception caught in the
2997 previous frame (or the frame before that, etc.).
2999 The first bullet fixed the bug in the above example. The second
3000 bullet was for backwards compatibility: it was (and is) common to
3001 have a function that is called when an exception is caught, and to
3002 have that function access the caught exception via sys.exc_ZZZ.
3003 (Example: traceback.print_exc()).
3005 At the same time I fixed the problem that sys.exc_ZZZ weren't
3006 thread-safe, by introducing sys.exc_info() which gets it from tstate;
3007 but that's really a separate improvement.
3009 The reset_exc_info() function in ceval.c restores the tstate->exc_ZZZ
3010 variables to what they were before the current frame was called. The
3011 set_exc_info() function saves them on the frame so that
3012 reset_exc_info() can restore them. The invariant is that
3013 frame->f_exc_ZZZ is NULL iff the current frame never caught an
3014 exception (where "catching" an exception applies only to successful
3015 except clauses); and if the current frame ever caught an exception,
3016 frame->f_exc_ZZZ is the exception that was stored in tstate->exc_ZZZ
3017 at the start of the current frame.
3021 static void
3022 set_exc_info(PyThreadState *tstate,
3023 PyObject *type, PyObject *value, PyObject *tb)
3025 PyFrameObject *frame = tstate->frame;
3026 PyObject *tmp_type, *tmp_value, *tmp_tb;
3028 assert(type != NULL);
3029 assert(frame != NULL);
3030 if (frame->f_exc_type == NULL) {
3031 assert(frame->f_exc_value == NULL);
3032 assert(frame->f_exc_traceback == NULL);
3033 /* This frame didn't catch an exception before. */
3034 /* Save previous exception of this thread in this frame. */
3035 if (tstate->exc_type == NULL) {
3036 /* XXX Why is this set to Py_None? */
3037 Py_INCREF(Py_None);
3038 tstate->exc_type = Py_None;
3040 Py_INCREF(tstate->exc_type);
3041 Py_XINCREF(tstate->exc_value);
3042 Py_XINCREF(tstate->exc_traceback);
3043 frame->f_exc_type = tstate->exc_type;
3044 frame->f_exc_value = tstate->exc_value;
3045 frame->f_exc_traceback = tstate->exc_traceback;
3047 /* Set new exception for this thread. */
3048 tmp_type = tstate->exc_type;
3049 tmp_value = tstate->exc_value;
3050 tmp_tb = tstate->exc_traceback;
3051 Py_INCREF(type);
3052 Py_XINCREF(value);
3053 Py_XINCREF(tb);
3054 tstate->exc_type = type;
3055 tstate->exc_value = value;
3056 tstate->exc_traceback = tb;
3057 Py_XDECREF(tmp_type);
3058 Py_XDECREF(tmp_value);
3059 Py_XDECREF(tmp_tb);
3060 /* For b/w compatibility */
3061 PySys_SetObject("exc_type", type);
3062 PySys_SetObject("exc_value", value);
3063 PySys_SetObject("exc_traceback", tb);
3066 static void
3067 reset_exc_info(PyThreadState *tstate)
3069 PyFrameObject *frame;
3070 PyObject *tmp_type, *tmp_value, *tmp_tb;
3072 /* It's a precondition that the thread state's frame caught an
3073 * exception -- verify in a debug build.
3075 assert(tstate != NULL);
3076 frame = tstate->frame;
3077 assert(frame != NULL);
3078 assert(frame->f_exc_type != NULL);
3080 /* Copy the frame's exception info back to the thread state. */
3081 tmp_type = tstate->exc_type;
3082 tmp_value = tstate->exc_value;
3083 tmp_tb = tstate->exc_traceback;
3084 Py_INCREF(frame->f_exc_type);
3085 Py_XINCREF(frame->f_exc_value);
3086 Py_XINCREF(frame->f_exc_traceback);
3087 tstate->exc_type = frame->f_exc_type;
3088 tstate->exc_value = frame->f_exc_value;
3089 tstate->exc_traceback = frame->f_exc_traceback;
3090 Py_XDECREF(tmp_type);
3091 Py_XDECREF(tmp_value);
3092 Py_XDECREF(tmp_tb);
3094 /* For b/w compatibility */
3095 PySys_SetObject("exc_type", frame->f_exc_type);
3096 PySys_SetObject("exc_value", frame->f_exc_value);
3097 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
3099 /* Clear the frame's exception info. */
3100 tmp_type = frame->f_exc_type;
3101 tmp_value = frame->f_exc_value;
3102 tmp_tb = frame->f_exc_traceback;
3103 frame->f_exc_type = NULL;
3104 frame->f_exc_value = NULL;
3105 frame->f_exc_traceback = NULL;
3106 Py_DECREF(tmp_type);
3107 Py_XDECREF(tmp_value);
3108 Py_XDECREF(tmp_tb);
3111 /* Logic for the raise statement (too complicated for inlining).
3112 This *consumes* a reference count to each of its arguments. */
3113 static enum why_code
3114 do_raise(PyObject *type, PyObject *value, PyObject *tb)
3116 if (type == NULL) {
3117 /* Reraise */
3118 PyThreadState *tstate = PyThreadState_GET();
3119 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
3120 value = tstate->exc_value;
3121 tb = tstate->exc_traceback;
3122 Py_XINCREF(type);
3123 Py_XINCREF(value);
3124 Py_XINCREF(tb);
3127 /* We support the following forms of raise:
3128 raise <class>, <classinstance>
3129 raise <class>, <argument tuple>
3130 raise <class>, None
3131 raise <class>, <argument>
3132 raise <classinstance>, None
3133 raise <string>, <object>
3134 raise <string>, None
3136 An omitted second argument is the same as None.
3138 In addition, raise <tuple>, <anything> is the same as
3139 raising the tuple's first item (and it better have one!);
3140 this rule is applied recursively.
3142 Finally, an optional third argument can be supplied, which
3143 gives the traceback to be substituted (useful when
3144 re-raising an exception after examining it). */
3146 /* First, check the traceback argument, replacing None with
3147 NULL. */
3148 if (tb == Py_None) {
3149 Py_DECREF(tb);
3150 tb = NULL;
3152 else if (tb != NULL && !PyTraceBack_Check(tb)) {
3153 PyErr_SetString(PyExc_TypeError,
3154 "raise: arg 3 must be a traceback or None");
3155 goto raise_error;
3158 /* Next, replace a missing value with None */
3159 if (value == NULL) {
3160 value = Py_None;
3161 Py_INCREF(value);
3164 /* Next, repeatedly, replace a tuple exception with its first item */
3165 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
3166 PyObject *tmp = type;
3167 type = PyTuple_GET_ITEM(type, 0);
3168 Py_INCREF(type);
3169 Py_DECREF(tmp);
3172 if (PyExceptionClass_Check(type))
3173 PyErr_NormalizeException(&type, &value, &tb);
3175 else if (PyExceptionInstance_Check(type)) {
3176 /* Raising an instance. The value should be a dummy. */
3177 if (value != Py_None) {
3178 PyErr_SetString(PyExc_TypeError,
3179 "instance exception may not have a separate value");
3180 goto raise_error;
3182 else {
3183 /* Normalize to raise <class>, <instance> */
3184 Py_DECREF(value);
3185 value = type;
3186 type = PyExceptionInstance_Class(type);
3187 Py_INCREF(type);
3190 else {
3191 /* Not something you can raise. You get an exception
3192 anyway, just not what you specified :-) */
3193 PyErr_Format(PyExc_TypeError,
3194 "exceptions must be classes or instances, not %s",
3195 type->ob_type->tp_name);
3196 goto raise_error;
3199 assert(PyExceptionClass_Check(type));
3200 if (Py_Py3kWarningFlag && PyClass_Check(type)) {
3201 if (PyErr_WarnEx(PyExc_DeprecationWarning,
3202 "exceptions must derive from BaseException "
3203 "in 3.x", 1) < 0)
3204 goto raise_error;
3207 PyErr_Restore(type, value, tb);
3208 if (tb == NULL)
3209 return WHY_EXCEPTION;
3210 else
3211 return WHY_RERAISE;
3212 raise_error:
3213 Py_XDECREF(value);
3214 Py_XDECREF(type);
3215 Py_XDECREF(tb);
3216 return WHY_EXCEPTION;
3219 /* Iterate v argcnt times and store the results on the stack (via decreasing
3220 sp). Return 1 for success, 0 if error. */
3222 static int
3223 unpack_iterable(PyObject *v, int argcnt, PyObject **sp)
3225 int i = 0;
3226 PyObject *it; /* iter(v) */
3227 PyObject *w;
3229 assert(v != NULL);
3231 it = PyObject_GetIter(v);
3232 if (it == NULL)
3233 goto Error;
3235 for (; i < argcnt; i++) {
3236 w = PyIter_Next(it);
3237 if (w == NULL) {
3238 /* Iterator done, via error or exhaustion. */
3239 if (!PyErr_Occurred()) {
3240 PyErr_Format(PyExc_ValueError,
3241 "need more than %d value%s to unpack",
3242 i, i == 1 ? "" : "s");
3244 goto Error;
3246 *--sp = w;
3249 /* We better have exhausted the iterator now. */
3250 w = PyIter_Next(it);
3251 if (w == NULL) {
3252 if (PyErr_Occurred())
3253 goto Error;
3254 Py_DECREF(it);
3255 return 1;
3257 Py_DECREF(w);
3258 PyErr_SetString(PyExc_ValueError, "too many values to unpack");
3259 /* fall through */
3260 Error:
3261 for (; i > 0; i--, sp++)
3262 Py_DECREF(*sp);
3263 Py_XDECREF(it);
3264 return 0;
3268 #ifdef LLTRACE
3269 static int
3270 prtrace(PyObject *v, char *str)
3272 printf("%s ", str);
3273 if (PyObject_Print(v, stdout, 0) != 0)
3274 PyErr_Clear(); /* Don't know what else to do */
3275 printf("\n");
3276 return 1;
3278 #endif
3280 static void
3281 call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f)
3283 PyObject *type, *value, *traceback, *arg;
3284 int err;
3285 PyErr_Fetch(&type, &value, &traceback);
3286 if (value == NULL) {
3287 value = Py_None;
3288 Py_INCREF(value);
3290 arg = PyTuple_Pack(3, type, value, traceback);
3291 if (arg == NULL) {
3292 PyErr_Restore(type, value, traceback);
3293 return;
3295 err = call_trace(func, self, f, PyTrace_EXCEPTION, arg);
3296 Py_DECREF(arg);
3297 if (err == 0)
3298 PyErr_Restore(type, value, traceback);
3299 else {
3300 Py_XDECREF(type);
3301 Py_XDECREF(value);
3302 Py_XDECREF(traceback);
3306 static int
3307 call_trace_protected(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
3308 int what, PyObject *arg)
3310 PyObject *type, *value, *traceback;
3311 int err;
3312 PyErr_Fetch(&type, &value, &traceback);
3313 err = call_trace(func, obj, frame, what, arg);
3314 if (err == 0)
3316 PyErr_Restore(type, value, traceback);
3317 return 0;
3319 else {
3320 Py_XDECREF(type);
3321 Py_XDECREF(value);
3322 Py_XDECREF(traceback);
3323 return -1;
3327 static int
3328 call_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
3329 int what, PyObject *arg)
3331 register PyThreadState *tstate = frame->f_tstate;
3332 int result;
3333 if (tstate->tracing)
3334 return 0;
3335 tstate->tracing++;
3336 tstate->use_tracing = 0;
3337 result = func(obj, frame, what, arg);
3338 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3339 || (tstate->c_profilefunc != NULL));
3340 tstate->tracing--;
3341 return result;
3344 PyObject *
3345 _PyEval_CallTracing(PyObject *func, PyObject *args)
3347 PyFrameObject *frame = PyEval_GetFrame();
3348 PyThreadState *tstate = frame->f_tstate;
3349 int save_tracing = tstate->tracing;
3350 int save_use_tracing = tstate->use_tracing;
3351 PyObject *result;
3353 tstate->tracing = 0;
3354 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3355 || (tstate->c_profilefunc != NULL));
3356 result = PyObject_Call(func, args, NULL);
3357 tstate->tracing = save_tracing;
3358 tstate->use_tracing = save_use_tracing;
3359 return result;
3362 static int
3363 maybe_call_line_trace(Py_tracefunc func, PyObject *obj,
3364 PyFrameObject *frame, int *instr_lb, int *instr_ub,
3365 int *instr_prev)
3367 int result = 0;
3369 /* If the last instruction executed isn't in the current
3370 instruction window, reset the window. If the last
3371 instruction happens to fall at the start of a line or if it
3372 represents a jump backwards, call the trace function.
3374 if ((frame->f_lasti < *instr_lb || frame->f_lasti >= *instr_ub)) {
3375 int line;
3376 PyAddrPair bounds;
3378 line = PyCode_CheckLineNumber(frame->f_code, frame->f_lasti,
3379 &bounds);
3380 if (line >= 0) {
3381 frame->f_lineno = line;
3382 result = call_trace(func, obj, frame,
3383 PyTrace_LINE, Py_None);
3385 *instr_lb = bounds.ap_lower;
3386 *instr_ub = bounds.ap_upper;
3388 else if (frame->f_lasti <= *instr_prev) {
3389 result = call_trace(func, obj, frame, PyTrace_LINE, Py_None);
3391 *instr_prev = frame->f_lasti;
3392 return result;
3395 void
3396 PyEval_SetProfile(Py_tracefunc func, PyObject *arg)
3398 PyThreadState *tstate = PyThreadState_GET();
3399 PyObject *temp = tstate->c_profileobj;
3400 Py_XINCREF(arg);
3401 tstate->c_profilefunc = NULL;
3402 tstate->c_profileobj = NULL;
3403 /* Must make sure that tracing is not ignored if 'temp' is freed */
3404 tstate->use_tracing = tstate->c_tracefunc != NULL;
3405 Py_XDECREF(temp);
3406 tstate->c_profilefunc = func;
3407 tstate->c_profileobj = arg;
3408 /* Flag that tracing or profiling is turned on */
3409 tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
3412 void
3413 PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
3415 PyThreadState *tstate = PyThreadState_GET();
3416 PyObject *temp = tstate->c_traceobj;
3417 Py_XINCREF(arg);
3418 tstate->c_tracefunc = NULL;
3419 tstate->c_traceobj = NULL;
3420 /* Must make sure that profiling is not ignored if 'temp' is freed */
3421 tstate->use_tracing = tstate->c_profilefunc != NULL;
3422 Py_XDECREF(temp);
3423 tstate->c_tracefunc = func;
3424 tstate->c_traceobj = arg;
3425 /* Flag that tracing or profiling is turned on */
3426 tstate->use_tracing = ((func != NULL)
3427 || (tstate->c_profilefunc != NULL));
3430 PyObject *
3431 PyEval_GetBuiltins(void)
3433 PyFrameObject *current_frame = PyEval_GetFrame();
3434 if (current_frame == NULL)
3435 return PyThreadState_GET()->interp->builtins;
3436 else
3437 return current_frame->f_builtins;
3440 PyObject *
3441 PyEval_GetLocals(void)
3443 PyFrameObject *current_frame = PyEval_GetFrame();
3444 if (current_frame == NULL)
3445 return NULL;
3446 PyFrame_FastToLocals(current_frame);
3447 return current_frame->f_locals;
3450 PyObject *
3451 PyEval_GetGlobals(void)
3453 PyFrameObject *current_frame = PyEval_GetFrame();
3454 if (current_frame == NULL)
3455 return NULL;
3456 else
3457 return current_frame->f_globals;
3460 PyFrameObject *
3461 PyEval_GetFrame(void)
3463 PyThreadState *tstate = PyThreadState_GET();
3464 return _PyThreadState_GetFrame(tstate);
3468 PyEval_GetRestricted(void)
3470 PyFrameObject *current_frame = PyEval_GetFrame();
3471 return current_frame == NULL ? 0 : PyFrame_IsRestricted(current_frame);
3475 PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
3477 PyFrameObject *current_frame = PyEval_GetFrame();
3478 int result = cf->cf_flags != 0;
3480 if (current_frame != NULL) {
3481 const int codeflags = current_frame->f_code->co_flags;
3482 const int compilerflags = codeflags & PyCF_MASK;
3483 if (compilerflags) {
3484 result = 1;
3485 cf->cf_flags |= compilerflags;
3487 #if 0 /* future keyword */
3488 if (codeflags & CO_GENERATOR_ALLOWED) {
3489 result = 1;
3490 cf->cf_flags |= CO_GENERATOR_ALLOWED;
3492 #endif
3494 return result;
3498 Py_FlushLine(void)
3500 PyObject *f = PySys_GetObject("stdout");
3501 if (f == NULL)
3502 return 0;
3503 if (!PyFile_SoftSpace(f, 0))
3504 return 0;
3505 return PyFile_WriteString("\n", f);
3509 /* External interface to call any callable object.
3510 The arg must be a tuple or NULL. */
3512 #undef PyEval_CallObject
3513 /* for backward compatibility: export this interface */
3515 PyObject *
3516 PyEval_CallObject(PyObject *func, PyObject *arg)
3518 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
3520 #define PyEval_CallObject(func,arg) \
3521 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
3523 PyObject *
3524 PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
3526 PyObject *result;
3528 if (arg == NULL) {
3529 arg = PyTuple_New(0);
3530 if (arg == NULL)
3531 return NULL;
3533 else if (!PyTuple_Check(arg)) {
3534 PyErr_SetString(PyExc_TypeError,
3535 "argument list must be a tuple");
3536 return NULL;
3538 else
3539 Py_INCREF(arg);
3541 if (kw != NULL && !PyDict_Check(kw)) {
3542 PyErr_SetString(PyExc_TypeError,
3543 "keyword list must be a dictionary");
3544 Py_DECREF(arg);
3545 return NULL;
3548 result = PyObject_Call(func, arg, kw);
3549 Py_DECREF(arg);
3550 return result;
3553 const char *
3554 PyEval_GetFuncName(PyObject *func)
3556 if (PyMethod_Check(func))
3557 return PyEval_GetFuncName(PyMethod_GET_FUNCTION(func));
3558 else if (PyFunction_Check(func))
3559 return PyString_AsString(((PyFunctionObject*)func)->func_name);
3560 else if (PyCFunction_Check(func))
3561 return ((PyCFunctionObject*)func)->m_ml->ml_name;
3562 else if (PyClass_Check(func))
3563 return PyString_AsString(((PyClassObject*)func)->cl_name);
3564 else if (PyInstance_Check(func)) {
3565 return PyString_AsString(
3566 ((PyInstanceObject*)func)->in_class->cl_name);
3567 } else {
3568 return func->ob_type->tp_name;
3572 const char *
3573 PyEval_GetFuncDesc(PyObject *func)
3575 if (PyMethod_Check(func))
3576 return "()";
3577 else if (PyFunction_Check(func))
3578 return "()";
3579 else if (PyCFunction_Check(func))
3580 return "()";
3581 else if (PyClass_Check(func))
3582 return " constructor";
3583 else if (PyInstance_Check(func)) {
3584 return " instance";
3585 } else {
3586 return " object";
3590 static void
3591 err_args(PyObject *func, int flags, int nargs)
3593 if (flags & METH_NOARGS)
3594 PyErr_Format(PyExc_TypeError,
3595 "%.200s() takes no arguments (%d given)",
3596 ((PyCFunctionObject *)func)->m_ml->ml_name,
3597 nargs);
3598 else
3599 PyErr_Format(PyExc_TypeError,
3600 "%.200s() takes exactly one argument (%d given)",
3601 ((PyCFunctionObject *)func)->m_ml->ml_name,
3602 nargs);
3605 #define C_TRACE(x, call) \
3606 if (tstate->use_tracing && tstate->c_profilefunc) { \
3607 if (call_trace(tstate->c_profilefunc, \
3608 tstate->c_profileobj, \
3609 tstate->frame, PyTrace_C_CALL, \
3610 func)) { \
3611 x = NULL; \
3613 else { \
3614 x = call; \
3615 if (tstate->c_profilefunc != NULL) { \
3616 if (x == NULL) { \
3617 call_trace_protected(tstate->c_profilefunc, \
3618 tstate->c_profileobj, \
3619 tstate->frame, PyTrace_C_EXCEPTION, \
3620 func); \
3621 /* XXX should pass (type, value, tb) */ \
3622 } else { \
3623 if (call_trace(tstate->c_profilefunc, \
3624 tstate->c_profileobj, \
3625 tstate->frame, PyTrace_C_RETURN, \
3626 func)) { \
3627 Py_DECREF(x); \
3628 x = NULL; \
3633 } else { \
3634 x = call; \
3637 static PyObject *
3638 call_function(PyObject ***pp_stack, int oparg
3639 #ifdef WITH_TSC
3640 , uint64* pintr0, uint64* pintr1
3641 #endif
3644 int na = oparg & 0xff;
3645 int nk = (oparg>>8) & 0xff;
3646 int n = na + 2 * nk;
3647 PyObject **pfunc = (*pp_stack) - n - 1;
3648 PyObject *func = *pfunc;
3649 PyObject *x, *w;
3651 /* Always dispatch PyCFunction first, because these are
3652 presumed to be the most frequent callable object.
3654 if (PyCFunction_Check(func) && nk == 0) {
3655 int flags = PyCFunction_GET_FLAGS(func);
3656 PyThreadState *tstate = PyThreadState_GET();
3658 PCALL(PCALL_CFUNCTION);
3659 if (flags & (METH_NOARGS | METH_O)) {
3660 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
3661 PyObject *self = PyCFunction_GET_SELF(func);
3662 if (flags & METH_NOARGS && na == 0) {
3663 C_TRACE(x, (*meth)(self,NULL));
3665 else if (flags & METH_O && na == 1) {
3666 PyObject *arg = EXT_POP(*pp_stack);
3667 C_TRACE(x, (*meth)(self,arg));
3668 Py_DECREF(arg);
3670 else {
3671 err_args(func, flags, na);
3672 x = NULL;
3675 else {
3676 PyObject *callargs;
3677 callargs = load_args(pp_stack, na);
3678 READ_TIMESTAMP(*pintr0);
3679 C_TRACE(x, PyCFunction_Call(func,callargs,NULL));
3680 READ_TIMESTAMP(*pintr1);
3681 Py_XDECREF(callargs);
3683 } else {
3684 if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) {
3685 /* optimize access to bound methods */
3686 PyObject *self = PyMethod_GET_SELF(func);
3687 PCALL(PCALL_METHOD);
3688 PCALL(PCALL_BOUND_METHOD);
3689 Py_INCREF(self);
3690 func = PyMethod_GET_FUNCTION(func);
3691 Py_INCREF(func);
3692 Py_DECREF(*pfunc);
3693 *pfunc = self;
3694 na++;
3695 n++;
3696 } else
3697 Py_INCREF(func);
3698 READ_TIMESTAMP(*pintr0);
3699 if (PyFunction_Check(func))
3700 x = fast_function(func, pp_stack, n, na, nk);
3701 else
3702 x = do_call(func, pp_stack, na, nk);
3703 READ_TIMESTAMP(*pintr1);
3704 Py_DECREF(func);
3707 /* Clear the stack of the function object. Also removes
3708 the arguments in case they weren't consumed already
3709 (fast_function() and err_args() leave them on the stack).
3711 while ((*pp_stack) > pfunc) {
3712 w = EXT_POP(*pp_stack);
3713 Py_DECREF(w);
3714 PCALL(PCALL_POP);
3716 return x;
3719 /* The fast_function() function optimize calls for which no argument
3720 tuple is necessary; the objects are passed directly from the stack.
3721 For the simplest case -- a function that takes only positional
3722 arguments and is called with only positional arguments -- it
3723 inlines the most primitive frame setup code from
3724 PyEval_EvalCodeEx(), which vastly reduces the checks that must be
3725 done before evaluating the frame.
3728 static PyObject *
3729 fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
3731 PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
3732 PyObject *globals = PyFunction_GET_GLOBALS(func);
3733 PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
3734 PyObject **d = NULL;
3735 int nd = 0;
3737 PCALL(PCALL_FUNCTION);
3738 PCALL(PCALL_FAST_FUNCTION);
3739 if (argdefs == NULL && co->co_argcount == n && nk==0 &&
3740 co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
3741 PyFrameObject *f;
3742 PyObject *retval = NULL;
3743 PyThreadState *tstate = PyThreadState_GET();
3744 PyObject **fastlocals, **stack;
3745 int i;
3747 PCALL(PCALL_FASTER_FUNCTION);
3748 assert(globals != NULL);
3749 /* XXX Perhaps we should create a specialized
3750 PyFrame_New() that doesn't take locals, but does
3751 take builtins without sanity checking them.
3753 assert(tstate != NULL);
3754 f = PyFrame_New(tstate, co, globals, NULL);
3755 if (f == NULL)
3756 return NULL;
3758 fastlocals = f->f_localsplus;
3759 stack = (*pp_stack) - n;
3761 for (i = 0; i < n; i++) {
3762 Py_INCREF(*stack);
3763 fastlocals[i] = *stack++;
3765 retval = PyEval_EvalFrameEx(f,0);
3766 ++tstate->recursion_depth;
3767 Py_DECREF(f);
3768 --tstate->recursion_depth;
3769 return retval;
3771 if (argdefs != NULL) {
3772 d = &PyTuple_GET_ITEM(argdefs, 0);
3773 nd = Py_SIZE(argdefs);
3775 return PyEval_EvalCodeEx(co, globals,
3776 (PyObject *)NULL, (*pp_stack)-n, na,
3777 (*pp_stack)-2*nk, nk, d, nd,
3778 PyFunction_GET_CLOSURE(func));
3781 static PyObject *
3782 update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack,
3783 PyObject *func)
3785 PyObject *kwdict = NULL;
3786 if (orig_kwdict == NULL)
3787 kwdict = PyDict_New();
3788 else {
3789 kwdict = PyDict_Copy(orig_kwdict);
3790 Py_DECREF(orig_kwdict);
3792 if (kwdict == NULL)
3793 return NULL;
3794 while (--nk >= 0) {
3795 int err;
3796 PyObject *value = EXT_POP(*pp_stack);
3797 PyObject *key = EXT_POP(*pp_stack);
3798 if (PyDict_GetItem(kwdict, key) != NULL) {
3799 PyErr_Format(PyExc_TypeError,
3800 "%.200s%s got multiple values "
3801 "for keyword argument '%.200s'",
3802 PyEval_GetFuncName(func),
3803 PyEval_GetFuncDesc(func),
3804 PyString_AsString(key));
3805 Py_DECREF(key);
3806 Py_DECREF(value);
3807 Py_DECREF(kwdict);
3808 return NULL;
3810 err = PyDict_SetItem(kwdict, key, value);
3811 Py_DECREF(key);
3812 Py_DECREF(value);
3813 if (err) {
3814 Py_DECREF(kwdict);
3815 return NULL;
3818 return kwdict;
3821 static PyObject *
3822 update_star_args(int nstack, int nstar, PyObject *stararg,
3823 PyObject ***pp_stack)
3825 PyObject *callargs, *w;
3827 callargs = PyTuple_New(nstack + nstar);
3828 if (callargs == NULL) {
3829 return NULL;
3831 if (nstar) {
3832 int i;
3833 for (i = 0; i < nstar; i++) {
3834 PyObject *a = PyTuple_GET_ITEM(stararg, i);
3835 Py_INCREF(a);
3836 PyTuple_SET_ITEM(callargs, nstack + i, a);
3839 while (--nstack >= 0) {
3840 w = EXT_POP(*pp_stack);
3841 PyTuple_SET_ITEM(callargs, nstack, w);
3843 return callargs;
3846 static PyObject *
3847 load_args(PyObject ***pp_stack, int na)
3849 PyObject *args = PyTuple_New(na);
3850 PyObject *w;
3852 if (args == NULL)
3853 return NULL;
3854 while (--na >= 0) {
3855 w = EXT_POP(*pp_stack);
3856 PyTuple_SET_ITEM(args, na, w);
3858 return args;
3861 static PyObject *
3862 do_call(PyObject *func, PyObject ***pp_stack, int na, int nk)
3864 PyObject *callargs = NULL;
3865 PyObject *kwdict = NULL;
3866 PyObject *result = NULL;
3868 if (nk > 0) {
3869 kwdict = update_keyword_args(NULL, nk, pp_stack, func);
3870 if (kwdict == NULL)
3871 goto call_fail;
3873 callargs = load_args(pp_stack, na);
3874 if (callargs == NULL)
3875 goto call_fail;
3876 #ifdef CALL_PROFILE
3877 /* At this point, we have to look at the type of func to
3878 update the call stats properly. Do it here so as to avoid
3879 exposing the call stats machinery outside ceval.c
3881 if (PyFunction_Check(func))
3882 PCALL(PCALL_FUNCTION);
3883 else if (PyMethod_Check(func))
3884 PCALL(PCALL_METHOD);
3885 else if (PyType_Check(func))
3886 PCALL(PCALL_TYPE);
3887 else
3888 PCALL(PCALL_OTHER);
3889 #endif
3890 result = PyObject_Call(func, callargs, kwdict);
3891 call_fail:
3892 Py_XDECREF(callargs);
3893 Py_XDECREF(kwdict);
3894 return result;
3897 static PyObject *
3898 ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
3900 int nstar = 0;
3901 PyObject *callargs = NULL;
3902 PyObject *stararg = NULL;
3903 PyObject *kwdict = NULL;
3904 PyObject *result = NULL;
3906 if (flags & CALL_FLAG_KW) {
3907 kwdict = EXT_POP(*pp_stack);
3908 if (!PyDict_Check(kwdict)) {
3909 PyObject *d;
3910 d = PyDict_New();
3911 if (d == NULL)
3912 goto ext_call_fail;
3913 if (PyDict_Update(d, kwdict) != 0) {
3914 Py_DECREF(d);
3915 /* PyDict_Update raises attribute
3916 * error (percolated from an attempt
3917 * to get 'keys' attribute) instead of
3918 * a type error if its second argument
3919 * is not a mapping.
3921 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
3922 PyErr_Format(PyExc_TypeError,
3923 "%.200s%.200s argument after ** "
3924 "must be a mapping, not %.200s",
3925 PyEval_GetFuncName(func),
3926 PyEval_GetFuncDesc(func),
3927 kwdict->ob_type->tp_name);
3929 goto ext_call_fail;
3931 Py_DECREF(kwdict);
3932 kwdict = d;
3935 if (flags & CALL_FLAG_VAR) {
3936 stararg = EXT_POP(*pp_stack);
3937 if (!PyTuple_Check(stararg)) {
3938 PyObject *t = NULL;
3939 t = PySequence_Tuple(stararg);
3940 if (t == NULL) {
3941 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
3942 PyErr_Format(PyExc_TypeError,
3943 "%.200s%.200s argument after * "
3944 "must be a sequence, not %200s",
3945 PyEval_GetFuncName(func),
3946 PyEval_GetFuncDesc(func),
3947 stararg->ob_type->tp_name);
3949 goto ext_call_fail;
3951 Py_DECREF(stararg);
3952 stararg = t;
3954 nstar = PyTuple_GET_SIZE(stararg);
3956 if (nk > 0) {
3957 kwdict = update_keyword_args(kwdict, nk, pp_stack, func);
3958 if (kwdict == NULL)
3959 goto ext_call_fail;
3961 callargs = update_star_args(na, nstar, stararg, pp_stack);
3962 if (callargs == NULL)
3963 goto ext_call_fail;
3964 #ifdef CALL_PROFILE
3965 /* At this point, we have to look at the type of func to
3966 update the call stats properly. Do it here so as to avoid
3967 exposing the call stats machinery outside ceval.c
3969 if (PyFunction_Check(func))
3970 PCALL(PCALL_FUNCTION);
3971 else if (PyMethod_Check(func))
3972 PCALL(PCALL_METHOD);
3973 else if (PyType_Check(func))
3974 PCALL(PCALL_TYPE);
3975 else
3976 PCALL(PCALL_OTHER);
3977 #endif
3978 result = PyObject_Call(func, callargs, kwdict);
3979 ext_call_fail:
3980 Py_XDECREF(callargs);
3981 Py_XDECREF(kwdict);
3982 Py_XDECREF(stararg);
3983 return result;
3986 /* Extract a slice index from a PyInt or PyLong or an object with the
3987 nb_index slot defined, and store in *pi.
3988 Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX,
3989 and silently boost values less than -PY_SSIZE_T_MAX-1 to -PY_SSIZE_T_MAX-1.
3990 Return 0 on error, 1 on success.
3992 /* Note: If v is NULL, return success without storing into *pi. This
3993 is because_PyEval_SliceIndex() is called by apply_slice(), which can be
3994 called by the SLICE opcode with v and/or w equal to NULL.
3997 _PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
3999 if (v != NULL) {
4000 Py_ssize_t x;
4001 if (PyInt_Check(v)) {
4002 /* XXX(nnorwitz): I think PyInt_AS_LONG is correct,
4003 however, it looks like it should be AsSsize_t.
4004 There should be a comment here explaining why.
4006 x = PyInt_AS_LONG(v);
4008 else if (PyIndex_Check(v)) {
4009 x = PyNumber_AsSsize_t(v, NULL);
4010 if (x == -1 && PyErr_Occurred())
4011 return 0;
4013 else {
4014 PyErr_SetString(PyExc_TypeError,
4015 "slice indices must be integers or "
4016 "None or have an __index__ method");
4017 return 0;
4019 *pi = x;
4021 return 1;
4024 #undef ISINDEX
4025 #define ISINDEX(x) ((x) == NULL || \
4026 PyInt_Check(x) || PyLong_Check(x) || PyIndex_Check(x))
4028 static PyObject *
4029 apply_slice(PyObject *u, PyObject *v, PyObject *w) /* return u[v:w] */
4031 PyTypeObject *tp = u->ob_type;
4032 PySequenceMethods *sq = tp->tp_as_sequence;
4034 if (sq && sq->sq_slice && ISINDEX(v) && ISINDEX(w)) {
4035 Py_ssize_t ilow = 0, ihigh = PY_SSIZE_T_MAX;
4036 if (!_PyEval_SliceIndex(v, &ilow))
4037 return NULL;
4038 if (!_PyEval_SliceIndex(w, &ihigh))
4039 return NULL;
4040 return PySequence_GetSlice(u, ilow, ihigh);
4042 else {
4043 PyObject *slice = PySlice_New(v, w, NULL);
4044 if (slice != NULL) {
4045 PyObject *res = PyObject_GetItem(u, slice);
4046 Py_DECREF(slice);
4047 return res;
4049 else
4050 return NULL;
4054 static int
4055 assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x)
4056 /* u[v:w] = x */
4058 PyTypeObject *tp = u->ob_type;
4059 PySequenceMethods *sq = tp->tp_as_sequence;
4061 if (sq && sq->sq_ass_slice && ISINDEX(v) && ISINDEX(w)) {
4062 Py_ssize_t ilow = 0, ihigh = PY_SSIZE_T_MAX;
4063 if (!_PyEval_SliceIndex(v, &ilow))
4064 return -1;
4065 if (!_PyEval_SliceIndex(w, &ihigh))
4066 return -1;
4067 if (x == NULL)
4068 return PySequence_DelSlice(u, ilow, ihigh);
4069 else
4070 return PySequence_SetSlice(u, ilow, ihigh, x);
4072 else {
4073 PyObject *slice = PySlice_New(v, w, NULL);
4074 if (slice != NULL) {
4075 int res;
4076 if (x != NULL)
4077 res = PyObject_SetItem(u, slice, x);
4078 else
4079 res = PyObject_DelItem(u, slice);
4080 Py_DECREF(slice);
4081 return res;
4083 else
4084 return -1;
4088 #define Py3kExceptionClass_Check(x) \
4089 (PyType_Check((x)) && \
4090 PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
4092 #define CANNOT_CATCH_MSG "catching classes that don't inherit from " \
4093 "BaseException is not allowed in 3.x"
4095 static PyObject *
4096 cmp_outcome(int op, register PyObject *v, register PyObject *w)
4098 int res = 0;
4099 switch (op) {
4100 case PyCmp_IS:
4101 res = (v == w);
4102 break;
4103 case PyCmp_IS_NOT:
4104 res = (v != w);
4105 break;
4106 case PyCmp_IN:
4107 res = PySequence_Contains(w, v);
4108 if (res < 0)
4109 return NULL;
4110 break;
4111 case PyCmp_NOT_IN:
4112 res = PySequence_Contains(w, v);
4113 if (res < 0)
4114 return NULL;
4115 res = !res;
4116 break;
4117 case PyCmp_EXC_MATCH:
4118 if (PyTuple_Check(w)) {
4119 Py_ssize_t i, length;
4120 length = PyTuple_Size(w);
4121 for (i = 0; i < length; i += 1) {
4122 PyObject *exc = PyTuple_GET_ITEM(w, i);
4123 if (PyString_Check(exc)) {
4124 int ret_val;
4125 ret_val = PyErr_WarnEx(
4126 PyExc_DeprecationWarning,
4127 "catching of string "
4128 "exceptions is deprecated", 1);
4129 if (ret_val < 0)
4130 return NULL;
4132 else if (Py_Py3kWarningFlag &&
4133 !PyTuple_Check(exc) &&
4134 !Py3kExceptionClass_Check(exc))
4136 int ret_val;
4137 ret_val = PyErr_WarnEx(
4138 PyExc_DeprecationWarning,
4139 CANNOT_CATCH_MSG, 1);
4140 if (ret_val < 0)
4141 return NULL;
4145 else {
4146 if (PyString_Check(w)) {
4147 int ret_val;
4148 ret_val = PyErr_WarnEx(
4149 PyExc_DeprecationWarning,
4150 "catching of string "
4151 "exceptions is deprecated", 1);
4152 if (ret_val < 0)
4153 return NULL;
4155 else if (Py_Py3kWarningFlag &&
4156 !PyTuple_Check(w) &&
4157 !Py3kExceptionClass_Check(w))
4159 int ret_val;
4160 ret_val = PyErr_WarnEx(
4161 PyExc_DeprecationWarning,
4162 CANNOT_CATCH_MSG, 1);
4163 if (ret_val < 0)
4164 return NULL;
4167 res = PyErr_GivenExceptionMatches(v, w);
4168 break;
4169 default:
4170 return PyObject_RichCompare(v, w, op);
4172 v = res ? Py_True : Py_False;
4173 Py_INCREF(v);
4174 return v;
4177 static PyObject *
4178 import_from(PyObject *v, PyObject *name)
4180 PyObject *x;
4182 x = PyObject_GetAttr(v, name);
4183 if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
4184 PyErr_Format(PyExc_ImportError,
4185 "cannot import name %.230s",
4186 PyString_AsString(name));
4188 return x;
4191 static int
4192 import_all_from(PyObject *locals, PyObject *v)
4194 PyObject *all = PyObject_GetAttrString(v, "__all__");
4195 PyObject *dict, *name, *value;
4196 int skip_leading_underscores = 0;
4197 int pos, err;
4199 if (all == NULL) {
4200 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
4201 return -1; /* Unexpected error */
4202 PyErr_Clear();
4203 dict = PyObject_GetAttrString(v, "__dict__");
4204 if (dict == NULL) {
4205 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
4206 return -1;
4207 PyErr_SetString(PyExc_ImportError,
4208 "from-import-* object has no __dict__ and no __all__");
4209 return -1;
4211 all = PyMapping_Keys(dict);
4212 Py_DECREF(dict);
4213 if (all == NULL)
4214 return -1;
4215 skip_leading_underscores = 1;
4218 for (pos = 0, err = 0; ; pos++) {
4219 name = PySequence_GetItem(all, pos);
4220 if (name == NULL) {
4221 if (!PyErr_ExceptionMatches(PyExc_IndexError))
4222 err = -1;
4223 else
4224 PyErr_Clear();
4225 break;
4227 if (skip_leading_underscores &&
4228 PyString_Check(name) &&
4229 PyString_AS_STRING(name)[0] == '_')
4231 Py_DECREF(name);
4232 continue;
4234 value = PyObject_GetAttr(v, name);
4235 if (value == NULL)
4236 err = -1;
4237 else if (PyDict_CheckExact(locals))
4238 err = PyDict_SetItem(locals, name, value);
4239 else
4240 err = PyObject_SetItem(locals, name, value);
4241 Py_DECREF(name);
4242 Py_XDECREF(value);
4243 if (err != 0)
4244 break;
4246 Py_DECREF(all);
4247 return err;
4250 static PyObject *
4251 build_class(PyObject *methods, PyObject *bases, PyObject *name)
4253 PyObject *metaclass = NULL, *result, *base;
4255 if (PyDict_Check(methods))
4256 metaclass = PyDict_GetItemString(methods, "__metaclass__");
4257 if (metaclass != NULL)
4258 Py_INCREF(metaclass);
4259 else if (PyTuple_Check(bases) && PyTuple_GET_SIZE(bases) > 0) {
4260 base = PyTuple_GET_ITEM(bases, 0);
4261 metaclass = PyObject_GetAttrString(base, "__class__");
4262 if (metaclass == NULL) {
4263 PyErr_Clear();
4264 metaclass = (PyObject *)base->ob_type;
4265 Py_INCREF(metaclass);
4268 else {
4269 PyObject *g = PyEval_GetGlobals();
4270 if (g != NULL && PyDict_Check(g))
4271 metaclass = PyDict_GetItemString(g, "__metaclass__");
4272 if (metaclass == NULL)
4273 metaclass = (PyObject *) &PyClass_Type;
4274 Py_INCREF(metaclass);
4276 result = PyObject_CallFunctionObjArgs(metaclass, name, bases, methods,
4277 NULL);
4278 Py_DECREF(metaclass);
4279 if (result == NULL && PyErr_ExceptionMatches(PyExc_TypeError)) {
4280 /* A type error here likely means that the user passed
4281 in a base that was not a class (such the random module
4282 instead of the random.random type). Help them out with
4283 by augmenting the error message with more information.*/
4285 PyObject *ptype, *pvalue, *ptraceback;
4287 PyErr_Fetch(&ptype, &pvalue, &ptraceback);
4288 if (PyString_Check(pvalue)) {
4289 PyObject *newmsg;
4290 newmsg = PyString_FromFormat(
4291 "Error when calling the metaclass bases\n"
4292 " %s",
4293 PyString_AS_STRING(pvalue));
4294 if (newmsg != NULL) {
4295 Py_DECREF(pvalue);
4296 pvalue = newmsg;
4299 PyErr_Restore(ptype, pvalue, ptraceback);
4301 return result;
4304 static int
4305 exec_statement(PyFrameObject *f, PyObject *prog, PyObject *globals,
4306 PyObject *locals)
4308 int n;
4309 PyObject *v;
4310 int plain = 0;
4312 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
4313 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
4314 /* Backward compatibility hack */
4315 globals = PyTuple_GetItem(prog, 1);
4316 if (n == 3)
4317 locals = PyTuple_GetItem(prog, 2);
4318 prog = PyTuple_GetItem(prog, 0);
4320 if (globals == Py_None) {
4321 globals = PyEval_GetGlobals();
4322 if (locals == Py_None) {
4323 locals = PyEval_GetLocals();
4324 plain = 1;
4326 if (!globals || !locals) {
4327 PyErr_SetString(PyExc_SystemError,
4328 "globals and locals cannot be NULL");
4329 return -1;
4332 else if (locals == Py_None)
4333 locals = globals;
4334 if (!PyString_Check(prog) &&
4335 !PyUnicode_Check(prog) &&
4336 !PyCode_Check(prog) &&
4337 !PyFile_Check(prog)) {
4338 PyErr_SetString(PyExc_TypeError,
4339 "exec: arg 1 must be a string, file, or code object");
4340 return -1;
4342 if (!PyDict_Check(globals)) {
4343 PyErr_SetString(PyExc_TypeError,
4344 "exec: arg 2 must be a dictionary or None");
4345 return -1;
4347 if (!PyMapping_Check(locals)) {
4348 PyErr_SetString(PyExc_TypeError,
4349 "exec: arg 3 must be a mapping or None");
4350 return -1;
4352 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
4353 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
4354 if (PyCode_Check(prog)) {
4355 if (PyCode_GetNumFree((PyCodeObject *)prog) > 0) {
4356 PyErr_SetString(PyExc_TypeError,
4357 "code object passed to exec may not contain free variables");
4358 return -1;
4360 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
4362 else if (PyFile_Check(prog)) {
4363 FILE *fp = PyFile_AsFile(prog);
4364 char *name = PyString_AsString(PyFile_Name(prog));
4365 PyCompilerFlags cf;
4366 if (name == NULL)
4367 return -1;
4368 cf.cf_flags = 0;
4369 if (PyEval_MergeCompilerFlags(&cf))
4370 v = PyRun_FileFlags(fp, name, Py_file_input, globals,
4371 locals, &cf);
4372 else
4373 v = PyRun_File(fp, name, Py_file_input, globals,
4374 locals);
4376 else {
4377 PyObject *tmp = NULL;
4378 char *str;
4379 PyCompilerFlags cf;
4380 cf.cf_flags = 0;
4381 #ifdef Py_USING_UNICODE
4382 if (PyUnicode_Check(prog)) {
4383 tmp = PyUnicode_AsUTF8String(prog);
4384 if (tmp == NULL)
4385 return -1;
4386 prog = tmp;
4387 cf.cf_flags |= PyCF_SOURCE_IS_UTF8;
4389 #endif
4390 if (PyString_AsStringAndSize(prog, &str, NULL))
4391 return -1;
4392 if (PyEval_MergeCompilerFlags(&cf))
4393 v = PyRun_StringFlags(str, Py_file_input, globals,
4394 locals, &cf);
4395 else
4396 v = PyRun_String(str, Py_file_input, globals, locals);
4397 Py_XDECREF(tmp);
4399 if (plain)
4400 PyFrame_LocalsToFast(f, 0);
4401 if (v == NULL)
4402 return -1;
4403 Py_DECREF(v);
4404 return 0;
4407 static void
4408 format_exc_check_arg(PyObject *exc, char *format_str, PyObject *obj)
4410 char *obj_str;
4412 if (!obj)
4413 return;
4415 obj_str = PyString_AsString(obj);
4416 if (!obj_str)
4417 return;
4419 PyErr_Format(exc, format_str, obj_str);
4422 static PyObject *
4423 string_concatenate(PyObject *v, PyObject *w,
4424 PyFrameObject *f, unsigned char *next_instr)
4426 /* This function implements 'variable += expr' when both arguments
4427 are strings. */
4428 Py_ssize_t v_len = PyString_GET_SIZE(v);
4429 Py_ssize_t w_len = PyString_GET_SIZE(w);
4430 Py_ssize_t new_len = v_len + w_len;
4431 if (new_len < 0) {
4432 PyErr_SetString(PyExc_OverflowError,
4433 "strings are too large to concat");
4434 return NULL;
4437 if (v->ob_refcnt == 2) {
4438 /* In the common case, there are 2 references to the value
4439 * stored in 'variable' when the += is performed: one on the
4440 * value stack (in 'v') and one still stored in the
4441 * 'variable'. We try to delete the variable now to reduce
4442 * the refcnt to 1.
4444 switch (*next_instr) {
4445 case STORE_FAST:
4447 int oparg = PEEKARG();
4448 PyObject **fastlocals = f->f_localsplus;
4449 if (GETLOCAL(oparg) == v)
4450 SETLOCAL(oparg, NULL);
4451 break;
4453 case STORE_DEREF:
4455 PyObject **freevars = (f->f_localsplus +
4456 f->f_code->co_nlocals);
4457 PyObject *c = freevars[PEEKARG()];
4458 if (PyCell_GET(c) == v)
4459 PyCell_Set(c, NULL);
4460 break;
4462 case STORE_NAME:
4464 PyObject *names = f->f_code->co_names;
4465 PyObject *name = GETITEM(names, PEEKARG());
4466 PyObject *locals = f->f_locals;
4467 if (PyDict_CheckExact(locals) &&
4468 PyDict_GetItem(locals, name) == v) {
4469 if (PyDict_DelItem(locals, name) != 0) {
4470 PyErr_Clear();
4473 break;
4478 if (v->ob_refcnt == 1 && !PyString_CHECK_INTERNED(v)) {
4479 /* Now we own the last reference to 'v', so we can resize it
4480 * in-place.
4482 if (_PyString_Resize(&v, new_len) != 0) {
4483 /* XXX if _PyString_Resize() fails, 'v' has been
4484 * deallocated so it cannot be put back into
4485 * 'variable'. The MemoryError is raised when there
4486 * is no value in 'variable', which might (very
4487 * remotely) be a cause of incompatibilities.
4489 return NULL;
4491 /* copy 'w' into the newly allocated area of 'v' */
4492 memcpy(PyString_AS_STRING(v) + v_len,
4493 PyString_AS_STRING(w), w_len);
4494 return v;
4496 else {
4497 /* When in-place resizing is not an option. */
4498 PyString_Concat(&v, w);
4499 return v;
4503 #ifdef DYNAMIC_EXECUTION_PROFILE
4505 static PyObject *
4506 getarray(long a[256])
4508 int i;
4509 PyObject *l = PyList_New(256);
4510 if (l == NULL) return NULL;
4511 for (i = 0; i < 256; i++) {
4512 PyObject *x = PyInt_FromLong(a[i]);
4513 if (x == NULL) {
4514 Py_DECREF(l);
4515 return NULL;
4517 PyList_SetItem(l, i, x);
4519 for (i = 0; i < 256; i++)
4520 a[i] = 0;
4521 return l;
4524 PyObject *
4525 _Py_GetDXProfile(PyObject *self, PyObject *args)
4527 #ifndef DXPAIRS
4528 return getarray(dxp);
4529 #else
4530 int i;
4531 PyObject *l = PyList_New(257);
4532 if (l == NULL) return NULL;
4533 for (i = 0; i < 257; i++) {
4534 PyObject *x = getarray(dxpairs[i]);
4535 if (x == NULL) {
4536 Py_DECREF(l);
4537 return NULL;
4539 PyList_SetItem(l, i, x);
4541 return l;
4542 #endif
4545 #endif