blob: cf2147a31c5edce7c6c4d577df78a759be77a81f [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Execute compiled code */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003
Guido van Rossum681d79a1995-07-18 14:51:37 +00004/* XXX TO DO:
Guido van Rossum681d79a1995-07-18 14:51:37 +00005 XXX speed up searching for keywords by using a dictionary
Guido van Rossum681d79a1995-07-18 14:51:37 +00006 XXX document it!
7 */
8
Thomas Wouters477c8d52006-05-27 19:21:47 +00009/* enable more aggressive intra-module optimizations, where available */
10#define PY_LOCAL_AGGRESSIVE
11
Guido van Rossumb209a111997-04-29 18:18:01 +000012#include "Python.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000013
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000014#include "code.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000015#include "frameobject.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000016#include "eval.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000017#include "opcode.h"
Tim Peters6d6c1a32001-08-02 04:15:00 +000018#include "structmember.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000019
Guido van Rossumc6004111993-11-05 10:22:19 +000020#include <ctype.h>
21
Thomas Wouters477c8d52006-05-27 19:21:47 +000022#ifndef WITH_TSC
Michael W. Hudson75eabd22005-01-18 15:56:11 +000023
24#define READ_TIMESTAMP(var)
25
26#else
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000027
28typedef unsigned long long uint64;
29
Michael W. Hudson800ba232004-08-12 18:19:17 +000030#if defined(__ppc__) /* <- Don't know if this is the correct symbol; this
Thomas Wouters8ce81f72007-09-20 18:22:40 +000031 section should work for GCC on any PowerPC
32 platform, irrespective of OS.
33 POWER? Who knows :-) */
Michael W. Hudson800ba232004-08-12 18:19:17 +000034
Michael W. Hudson75eabd22005-01-18 15:56:11 +000035#define READ_TIMESTAMP(var) ppc_getcounter(&var)
Michael W. Hudson800ba232004-08-12 18:19:17 +000036
37static void
38ppc_getcounter(uint64 *v)
39{
40 register unsigned long tbu, tb, tbu2;
41
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;
47
Thomas Wouters477c8d52006-05-27 19:21:47 +000048 /* The slightly peculiar way of writing the next lines is
Michael W. Hudson800ba232004-08-12 18:19:17 +000049 compiled better by GCC than any other way I tried. */
50 ((long*)(v))[0] = tbu;
51 ((long*)(v))[1] = tb;
52}
53
Michael W. Hudson75eabd22005-01-18 15:56:11 +000054#else /* this is for linux/x86 (and probably any other GCC/x86 combo) */
Michael W. Hudson800ba232004-08-12 18:19:17 +000055
Michael W. Hudson75eabd22005-01-18 15:56:11 +000056#define READ_TIMESTAMP(val) \
57 __asm__ __volatile__("rdtsc" : "=A" (val))
Michael W. Hudson800ba232004-08-12 18:19:17 +000058
59#endif
60
Thomas Wouters477c8d52006-05-27 19:21:47 +000061void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1,
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000062 uint64 loop0, uint64 loop1, uint64 intr0, uint64 intr1)
63{
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);
73}
Michael W. Hudson800ba232004-08-12 18:19:17 +000074
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000075#endif
76
Guido van Rossum04691fc1992-08-12 15:35:34 +000077/* Turn this on if your compiler chokes on the big switch: */
Guido van Rossum1ae940a1995-01-02 19:04:15 +000078/* #define CASE_TOO_BIG 1 */
Guido van Rossum04691fc1992-08-12 15:35:34 +000079
Guido van Rossum408027e1996-12-30 16:17:54 +000080#ifdef Py_DEBUG
Guido van Rossum96a42c81992-01-12 02:29:51 +000081/* For debugging the interpreter: */
82#define LLTRACE 1 /* Low-level trace feature */
83#define CHECKEXC 1 /* Double-check exception checking */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000084#endif
85
Jeremy Hylton52820442001-01-03 23:52:36 +000086typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
Guido van Rossum5b722181993-03-30 17:46:03 +000087
Guido van Rossum374a9221991-04-04 10:40:29 +000088/* Forward declarations */
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000089#ifdef WITH_TSC
Thomas Wouters477c8d52006-05-27 19:21:47 +000090static PyObject * call_function(PyObject ***, int, uint64*, uint64*);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000091#else
Thomas Wouters477c8d52006-05-27 19:21:47 +000092static PyObject * call_function(PyObject ***, int);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000093#endif
Thomas Wouters477c8d52006-05-27 19:21:47 +000094static PyObject * fast_function(PyObject *, PyObject ***, int, int, int);
95static PyObject * do_call(PyObject *, PyObject ***, int, int);
96static PyObject * ext_do_call(PyObject *, PyObject ***, int, int, int);
Thomas Wouters8ce81f72007-09-20 18:22:40 +000097static PyObject * update_keyword_args(PyObject *, int, PyObject ***,
98 PyObject *);
Thomas Wouters477c8d52006-05-27 19:21:47 +000099static PyObject * update_star_args(int, int, PyObject *, PyObject ***);
100static PyObject * load_args(PyObject ***, int);
Jeremy Hylton52820442001-01-03 23:52:36 +0000101#define CALL_FLAG_VAR 1
102#define CALL_FLAG_KW 2
103
Guido van Rossum0a066c01992-03-27 17:29:15 +0000104#ifdef LLTRACE
Guido van Rossumc2e20742006-02-27 22:32:47 +0000105static int lltrace;
Tim Petersdbd9ba62000-07-09 03:09:57 +0000106static int prtrace(PyObject *, char *);
Guido van Rossum0a066c01992-03-27 17:29:15 +0000107#endif
Fred Drake5755ce62001-06-27 19:19:46 +0000108static int call_trace(Py_tracefunc, PyObject *, PyFrameObject *,
109 int, PyObject *);
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +0000110static int call_trace_protected(Py_tracefunc, PyObject *,
Armin Rigo1c2d7e52005-09-20 18:34:01 +0000111 PyFrameObject *, int, PyObject *);
Fred Drake5755ce62001-06-27 19:19:46 +0000112static void call_exc_trace(Py_tracefunc, PyObject *, PyFrameObject *);
Tim Peters8a5c3c72004-04-05 19:36:21 +0000113static int maybe_call_line_trace(Py_tracefunc, PyObject *,
Armin Rigobf57a142004-03-22 19:24:58 +0000114 PyFrameObject *, int *, int *, int *);
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000115
Thomas Wouters477c8d52006-05-27 19:21:47 +0000116static PyObject * cmp_outcome(int, PyObject *, PyObject *);
117static PyObject * import_from(PyObject *, PyObject *);
Thomas Wouters52152252000-08-17 22:55:00 +0000118static int import_all_from(PyObject *, PyObject *);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000119static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *);
120static void reset_exc_info(PyThreadState *);
Neal Norwitzda059e32007-08-26 05:33:45 +0000121static void format_exc_check_arg(PyObject *, const char *, PyObject *);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000122static PyObject * unicode_concatenate(PyObject *, PyObject *,
123 PyFrameObject *, unsigned char *);
Guido van Rossum374a9221991-04-04 10:40:29 +0000124
Paul Prescode68140d2000-08-30 20:25:01 +0000125#define NAME_ERROR_MSG \
Fred Drake661ea262000-10-24 19:57:45 +0000126 "name '%.200s' is not defined"
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000127#define GLOBAL_NAME_ERROR_MSG \
128 "global name '%.200s' is not defined"
Paul Prescode68140d2000-08-30 20:25:01 +0000129#define UNBOUNDLOCAL_ERROR_MSG \
Fred Drake661ea262000-10-24 19:57:45 +0000130 "local variable '%.200s' referenced before assignment"
Jeremy Hyltonc76770c2001-04-13 16:51:46 +0000131#define UNBOUNDFREE_ERROR_MSG \
132 "free variable '%.200s' referenced before assignment" \
133 " in enclosing scope"
Guido van Rossum374a9221991-04-04 10:40:29 +0000134
Guido van Rossum950361c1997-01-24 13:49:28 +0000135/* Dynamic execution profile */
136#ifdef DYNAMIC_EXECUTION_PROFILE
137#ifdef DXPAIRS
138static long dxpairs[257][256];
139#define dxp dxpairs[256]
140#else
141static long dxp[256];
142#endif
143#endif
144
Jeremy Hylton985eba52003-02-05 23:13:00 +0000145/* Function call profile */
146#ifdef CALL_PROFILE
147#define PCALL_NUM 11
148static int pcall[PCALL_NUM];
149
150#define PCALL_ALL 0
151#define PCALL_FUNCTION 1
152#define PCALL_FAST_FUNCTION 2
153#define PCALL_FASTER_FUNCTION 3
154#define PCALL_METHOD 4
155#define PCALL_BOUND_METHOD 5
156#define PCALL_CFUNCTION 6
157#define PCALL_TYPE 7
158#define PCALL_GENERATOR 8
159#define PCALL_OTHER 9
160#define PCALL_POP 10
161
162/* Notes about the statistics
163
164 PCALL_FAST stats
165
166 FAST_FUNCTION means no argument tuple needs to be created.
167 FASTER_FUNCTION means that the fast-path frame setup code is used.
168
169 If there is a method call where the call can be optimized by changing
170 the argument tuple and calling the function directly, it gets recorded
171 twice.
172
173 As a result, the relationship among the statistics appears to be
174 PCALL_ALL == PCALL_FUNCTION + PCALL_METHOD - PCALL_BOUND_METHOD +
175 PCALL_CFUNCTION + PCALL_TYPE + PCALL_GENERATOR + PCALL_OTHER
176 PCALL_FUNCTION > PCALL_FAST_FUNCTION > PCALL_FASTER_FUNCTION
177 PCALL_METHOD > PCALL_BOUND_METHOD
178*/
179
180#define PCALL(POS) pcall[POS]++
181
182PyObject *
183PyEval_GetCallStats(PyObject *self)
184{
Thomas Wouters89f507f2006-12-13 04:49:30 +0000185 return Py_BuildValue("iiiiiiiiiii",
Jeremy Hylton985eba52003-02-05 23:13:00 +0000186 pcall[0], pcall[1], pcall[2], pcall[3],
187 pcall[4], pcall[5], pcall[6], pcall[7],
Thomas Wouters89f507f2006-12-13 04:49:30 +0000188 pcall[8], pcall[9], pcall[10]);
Jeremy Hylton985eba52003-02-05 23:13:00 +0000189}
190#else
191#define PCALL(O)
192
193PyObject *
194PyEval_GetCallStats(PyObject *self)
195{
196 Py_INCREF(Py_None);
197 return Py_None;
198}
199#endif
200
Tim Peters5ca576e2001-06-18 22:08:13 +0000201
Guido van Rossume59214e1994-08-30 08:01:59 +0000202#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +0000203
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000204#ifdef HAVE_ERRNO_H
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000205#include <errno.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +0000206#endif
Guido van Rossum49b56061998-10-01 20:42:43 +0000207#include "pythread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +0000208
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000209static PyThread_type_lock interpreter_lock = 0; /* This is the GIL */
Guido van Rossuma9672091994-09-14 13:31:22 +0000210static long main_thread = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000211
Tim Peters7f468f22004-10-11 02:40:51 +0000212int
213PyEval_ThreadsInitialized(void)
214{
215 return interpreter_lock != 0;
216}
217
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000218void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000219PyEval_InitThreads(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000220{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000221 if (interpreter_lock)
Sjoerd Mullendered59d201993-01-06 13:36:38 +0000222 return;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000223 interpreter_lock = PyThread_allocate_lock();
224 PyThread_acquire_lock(interpreter_lock, 1);
225 main_thread = PyThread_get_thread_ident();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000226}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000227
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000228void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000229PyEval_AcquireLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000230{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000231 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000232}
233
234void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000235PyEval_ReleaseLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000236{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000237 PyThread_release_lock(interpreter_lock);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000238}
239
240void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000241PyEval_AcquireThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000242{
243 if (tstate == NULL)
244 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000245 /* Check someone has called PyEval_InitThreads() to create the lock */
246 assert(interpreter_lock);
Guido van Rossum65d5b571998-12-21 19:32:43 +0000247 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000248 if (PyThreadState_Swap(tstate) != NULL)
249 Py_FatalError(
250 "PyEval_AcquireThread: non-NULL old thread state");
251}
252
253void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000254PyEval_ReleaseThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000255{
256 if (tstate == NULL)
257 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
258 if (PyThreadState_Swap(NULL) != tstate)
259 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000260 PyThread_release_lock(interpreter_lock);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000261}
Guido van Rossumfee3a2d2000-08-27 17:34:07 +0000262
263/* This function is called from PyOS_AfterFork to ensure that newly
264 created child processes don't hold locks referring to threads which
265 are not running in the child process. (This could also be done using
266 pthread_atfork mechanism, at least for the pthreads implementation.) */
267
268void
269PyEval_ReInitThreads(void)
270{
271 if (!interpreter_lock)
272 return;
273 /*XXX Can't use PyThread_free_lock here because it does too
274 much error-checking. Doing this cleanly would require
275 adding a new function to each thread_*.h. Instead, just
276 create a new lock and waste a little bit of memory */
277 interpreter_lock = PyThread_allocate_lock();
278 PyThread_acquire_lock(interpreter_lock, 1);
279 main_thread = PyThread_get_thread_ident();
280}
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000281#endif
282
Guido van Rossumff4949e1992-08-05 19:58:53 +0000283/* Functions save_thread and restore_thread are always defined so
284 dynamically loaded modules needn't be compiled separately for use
285 with and without threads: */
286
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000287PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000288PyEval_SaveThread(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000289{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000290 PyThreadState *tstate = PyThreadState_Swap(NULL);
291 if (tstate == NULL)
292 Py_FatalError("PyEval_SaveThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000293#ifdef WITH_THREAD
Guido van Rossumb74eca91997-09-30 22:03:16 +0000294 if (interpreter_lock)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000295 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000296#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000297 return tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000298}
299
300void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000301PyEval_RestoreThread(PyThreadState *tstate)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000302{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000303 if (tstate == NULL)
304 Py_FatalError("PyEval_RestoreThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000305#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000306 if (interpreter_lock) {
Guido van Rossumb74eca91997-09-30 22:03:16 +0000307 int err = errno;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000308 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000309 errno = err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000310 }
311#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000312 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000313}
314
315
Guido van Rossuma9672091994-09-14 13:31:22 +0000316/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
317 signal handlers or Mac I/O completion routines) can schedule calls
318 to a function to be called synchronously.
319 The synchronous function is called with one void* argument.
320 It should return 0 for success or -1 for failure -- failure should
321 be accompanied by an exception.
322
323 If registry succeeds, the registry function returns 0; if it fails
324 (e.g. due to too many pending calls) it returns -1 (without setting
325 an exception condition).
326
327 Note that because registry may occur from within signal handlers,
328 or other asynchronous events, calling malloc() is unsafe!
329
330#ifdef WITH_THREAD
331 Any thread can schedule pending calls, but only the main thread
332 will execute them.
333#endif
334
335 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
336 There are two possible race conditions:
337 (1) nested asynchronous registry calls;
338 (2) registry calls made while pending calls are being processed.
339 While (1) is very unlikely, (2) is a real possibility.
340 The current code is safe against (2), but not against (1).
341 The safety against (2) is derived from the fact that only one
342 thread (the main thread) ever takes things out of the queue.
Guido van Rossuma9672091994-09-14 13:31:22 +0000343
Guido van Rossuma027efa1997-05-05 20:56:21 +0000344 XXX Darn! With the advent of thread state, we should have an array
345 of pending calls per thread in the thread state! Later...
346*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000347
Guido van Rossuma9672091994-09-14 13:31:22 +0000348#define NPENDINGCALLS 32
349static struct {
Thomas Wouters334fb892000-07-25 12:56:38 +0000350 int (*func)(void *);
351 void *arg;
Guido van Rossuma9672091994-09-14 13:31:22 +0000352} pendingcalls[NPENDINGCALLS];
353static volatile int pendingfirst = 0;
354static volatile int pendinglast = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000355static volatile int things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000356
357int
Thomas Wouters334fb892000-07-25 12:56:38 +0000358Py_AddPendingCall(int (*func)(void *), void *arg)
Guido van Rossuma9672091994-09-14 13:31:22 +0000359{
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000360 static volatile int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000361 int i, j;
362 /* XXX Begin critical section */
363 /* XXX If you want this to be safe against nested
364 XXX asynchronous calls, you'll have to work harder! */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000365 if (busy)
366 return -1;
367 busy = 1;
Guido van Rossuma9672091994-09-14 13:31:22 +0000368 i = pendinglast;
369 j = (i + 1) % NPENDINGCALLS;
Guido van Rossum04e70322002-07-17 16:57:13 +0000370 if (j == pendingfirst) {
371 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000372 return -1; /* Queue full */
Guido van Rossum04e70322002-07-17 16:57:13 +0000373 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000374 pendingcalls[i].func = func;
375 pendingcalls[i].arg = arg;
376 pendinglast = j;
Skip Montanarod581d772002-09-03 20:10:45 +0000377
378 _Py_Ticker = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000379 things_to_do = 1; /* Signal main loop */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000380 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000381 /* XXX End critical section */
382 return 0;
383}
384
Guido van Rossum180d7b41994-09-29 09:45:57 +0000385int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000386Py_MakePendingCalls(void)
Guido van Rossuma9672091994-09-14 13:31:22 +0000387{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000388 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000389#ifdef WITH_THREAD
Guido van Rossum65d5b571998-12-21 19:32:43 +0000390 if (main_thread && PyThread_get_thread_ident() != main_thread)
Guido van Rossuma9672091994-09-14 13:31:22 +0000391 return 0;
392#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000393 if (busy)
Guido van Rossum180d7b41994-09-29 09:45:57 +0000394 return 0;
395 busy = 1;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000396 things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000397 for (;;) {
398 int i;
Thomas Wouters334fb892000-07-25 12:56:38 +0000399 int (*func)(void *);
400 void *arg;
Guido van Rossuma9672091994-09-14 13:31:22 +0000401 i = pendingfirst;
402 if (i == pendinglast)
403 break; /* Queue empty */
404 func = pendingcalls[i].func;
405 arg = pendingcalls[i].arg;
406 pendingfirst = (i + 1) % NPENDINGCALLS;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000407 if (func(arg) < 0) {
408 busy = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000409 things_to_do = 1; /* We're not done yet */
Guido van Rossuma9672091994-09-14 13:31:22 +0000410 return -1;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000411 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000412 }
Guido van Rossum180d7b41994-09-29 09:45:57 +0000413 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000414 return 0;
415}
416
417
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000418/* The interpreter's recursion limit */
419
Hye-Shik Changb6fa2812005-04-04 15:49:02 +0000420#ifndef Py_DEFAULT_RECURSION_LIMIT
421#define Py_DEFAULT_RECURSION_LIMIT 1000
422#endif
423static int recursion_limit = Py_DEFAULT_RECURSION_LIMIT;
424int _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000425
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000426int
427Py_GetRecursionLimit(void)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000428{
429 return recursion_limit;
430}
431
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000432void
433Py_SetRecursionLimit(int new_limit)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000434{
435 recursion_limit = new_limit;
Thomas Woutersce272b62007-09-19 21:19:28 +0000436 _Py_CheckRecursionLimit = recursion_limit;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000437}
438
Armin Rigo2b3eb402003-10-28 12:05:48 +0000439/* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
440 if the recursion_depth reaches _Py_CheckRecursionLimit.
441 If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit
442 to guarantee that _Py_CheckRecursiveCall() is regularly called.
443 Without USE_STACKCHECK, there is no need for this. */
444int
445_Py_CheckRecursiveCall(char *where)
446{
447 PyThreadState *tstate = PyThreadState_GET();
448
449#ifdef USE_STACKCHECK
450 if (PyOS_CheckStack()) {
451 --tstate->recursion_depth;
452 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
453 return -1;
454 }
455#endif
Martin v. Löwis5b222132007-06-10 09:51:05 +0000456 if (tstate->recursion_critical)
457 /* Somebody asked that we don't check for recursion. */
458 return 0;
459 if (tstate->overflowed) {
460 if (tstate->recursion_depth > recursion_limit + 50) {
461 /* Overflowing while handling an overflow. Give up. */
462 Py_FatalError("Cannot recover from stack overflow.");
463 }
464 return 0;
465 }
Armin Rigo2b3eb402003-10-28 12:05:48 +0000466 if (tstate->recursion_depth > recursion_limit) {
467 --tstate->recursion_depth;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000468 tstate->overflowed = 1;
Armin Rigo2b3eb402003-10-28 12:05:48 +0000469 PyErr_Format(PyExc_RuntimeError,
470 "maximum recursion depth exceeded%s",
471 where);
472 return -1;
473 }
Thomas Woutersce272b62007-09-19 21:19:28 +0000474 _Py_CheckRecursionLimit = recursion_limit;
Armin Rigo2b3eb402003-10-28 12:05:48 +0000475 return 0;
476}
477
Guido van Rossum374a9221991-04-04 10:40:29 +0000478/* Status code for main loop (reason for stack unwind) */
Raymond Hettinger7c958652004-04-06 10:11:10 +0000479enum why_code {
480 WHY_NOT = 0x0001, /* No error */
481 WHY_EXCEPTION = 0x0002, /* Exception occurred */
482 WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */
483 WHY_RETURN = 0x0008, /* 'return' statement */
484 WHY_BREAK = 0x0010, /* 'break' statement */
485 WHY_CONTINUE = 0x0020, /* 'continue' statement */
486 WHY_YIELD = 0x0040 /* 'yield' operator */
487};
Guido van Rossum374a9221991-04-04 10:40:29 +0000488
Collin Winter828f04a2007-08-31 00:04:24 +0000489static enum why_code do_raise(PyObject *, PyObject *);
Guido van Rossum0368b722007-05-11 16:50:42 +0000490static int unpack_iterable(PyObject *, int, int, PyObject **);
Guido van Rossum1aa14831997-01-21 05:34:20 +0000491
Skip Montanarod581d772002-09-03 20:10:45 +0000492/* for manipulating the thread switch and periodic "stuff" - used to be
493 per thread, now just a pair o' globals */
Skip Montanaro99dba272002-09-03 20:19:06 +0000494int _Py_CheckInterval = 100;
495volatile int _Py_Ticker = 100;
Guido van Rossum374a9221991-04-04 10:40:29 +0000496
Guido van Rossumb209a111997-04-29 18:18:01 +0000497PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000498PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000499{
Tim Peters6d6c1a32001-08-02 04:15:00 +0000500 return PyEval_EvalCodeEx(co,
Guido van Rossum681d79a1995-07-18 14:51:37 +0000501 globals, locals,
Guido van Rossumb209a111997-04-29 18:18:01 +0000502 (PyObject **)NULL, 0,
503 (PyObject **)NULL, 0,
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000504 (PyObject **)NULL, 0,
Guido van Rossum4f72a782006-10-27 23:31:49 +0000505 NULL, NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000506}
507
508
509/* Interpreter main loop */
510
Martin v. Löwis8d97e332004-06-27 15:43:12 +0000511PyObject *
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000512PyEval_EvalFrame(PyFrameObject *f) {
513 /* This is for backward compatibility with extension modules that
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000514 used this API; core interpreter code should call
515 PyEval_EvalFrameEx() */
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000516 return PyEval_EvalFrameEx(f, 0);
517}
518
519PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000520PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
Guido van Rossum374a9221991-04-04 10:40:29 +0000521{
Guido van Rossum950361c1997-01-24 13:49:28 +0000522#ifdef DXPAIRS
523 int lastopcode = 0;
524#endif
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000525 register PyObject **stack_pointer; /* Next free slot in value stack */
Guido van Rossum374a9221991-04-04 10:40:29 +0000526 register unsigned char *next_instr;
Armin Rigo8817fcd2004-06-17 10:22:40 +0000527 register int opcode; /* Current opcode */
528 register int oparg; /* Current opcode argument, if any */
Raymond Hettinger7c958652004-04-06 10:11:10 +0000529 register enum why_code why; /* Reason for block stack unwind */
Guido van Rossum374a9221991-04-04 10:40:29 +0000530 register int err; /* Error status -- nonzero if error */
Guido van Rossumb209a111997-04-29 18:18:01 +0000531 register PyObject *x; /* Result object -- NULL if error */
532 register PyObject *v; /* Temporary objects popped off stack */
533 register PyObject *w;
534 register PyObject *u;
535 register PyObject *t;
Jeremy Hylton2b724da2001-01-29 22:51:52 +0000536 register PyObject **fastlocals, **freevars;
Guido van Rossum014518f1998-11-23 21:09:51 +0000537 PyObject *retval = NULL; /* Return value */
Guido van Rossum885553e1998-12-21 18:33:30 +0000538 PyThreadState *tstate = PyThreadState_GET();
Tim Peters5ca576e2001-06-18 22:08:13 +0000539 PyCodeObject *co;
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000540
Tim Peters8a5c3c72004-04-05 19:36:21 +0000541 /* when tracing we set things up so that
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000542
543 not (instr_lb <= current_bytecode_offset < instr_ub)
544
Tim Peters8a5c3c72004-04-05 19:36:21 +0000545 is true when the line being executed has changed. The
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000546 initial values are such as to make this false the first
547 time it is tested. */
Armin Rigobf57a142004-03-22 19:24:58 +0000548 int instr_ub = -1, instr_lb = 0, instr_prev = -1;
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000549
Guido van Rossumd076c731998-10-07 19:42:25 +0000550 unsigned char *first_instr;
Skip Montanaro04d80f82002-08-04 21:03:35 +0000551 PyObject *names;
552 PyObject *consts;
Neal Norwitz5f5153e2005-10-21 04:28:38 +0000553#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000554 /* Make it easier to find out where we are with a debugger */
Tim Peters5ca576e2001-06-18 22:08:13 +0000555 char *filename;
Guido van Rossum99bec951992-09-03 20:29:45 +0000556#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000557
Neal Norwitza81d2202002-07-14 00:27:26 +0000558/* Tuple access macros */
559
560#ifndef Py_DEBUG
561#define GETITEM(v, i) PyTuple_GET_ITEM((PyTupleObject *)(v), (i))
562#else
563#define GETITEM(v, i) PyTuple_GetItem((v), (i))
564#endif
565
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000566#ifdef WITH_TSC
567/* Use Pentium timestamp counter to mark certain events:
568 inst0 -- beginning of switch statement for opcode dispatch
569 inst1 -- end of switch statement (may be skipped)
570 loop0 -- the top of the mainloop
Thomas Wouters477c8d52006-05-27 19:21:47 +0000571 loop1 -- place where control returns again to top of mainloop
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000572 (may be skipped)
573 intr1 -- beginning of long interruption
574 intr2 -- end of long interruption
575
576 Many opcodes call out to helper C functions. In some cases, the
577 time in those functions should be counted towards the time for the
578 opcode, but not in all cases. For example, a CALL_FUNCTION opcode
579 calls another Python function; there's no point in charge all the
580 bytecode executed by the called function to the caller.
581
582 It's hard to make a useful judgement statically. In the presence
583 of operator overloading, it's impossible to tell if a call will
584 execute new Python code or not.
585
586 It's a case-by-case judgement. I'll use intr1 for the following
587 cases:
588
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000589 IMPORT_STAR
590 IMPORT_FROM
591 CALL_FUNCTION (and friends)
592
593 */
594 uint64 inst0, inst1, loop0, loop1, intr0 = 0, intr1 = 0;
595 int ticked = 0;
596
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000597 READ_TIMESTAMP(inst0);
598 READ_TIMESTAMP(inst1);
599 READ_TIMESTAMP(loop0);
600 READ_TIMESTAMP(loop1);
Michael W. Hudson800ba232004-08-12 18:19:17 +0000601
602 /* shut up the compiler */
603 opcode = 0;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000604#endif
605
Guido van Rossum374a9221991-04-04 10:40:29 +0000606/* Code access macros */
607
Martin v. Löwis18e16552006-02-15 17:27:45 +0000608#define INSTR_OFFSET() ((int)(next_instr - first_instr))
Guido van Rossum374a9221991-04-04 10:40:29 +0000609#define NEXTOP() (*next_instr++)
Raymond Hettinger5bed4562004-04-10 23:34:17 +0000610#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
Raymond Hettinger52a21b82004-08-06 18:43:09 +0000611#define PEEKARG() ((next_instr[2]<<8) + next_instr[1])
Guido van Rossumd076c731998-10-07 19:42:25 +0000612#define JUMPTO(x) (next_instr = first_instr + (x))
Guido van Rossum374a9221991-04-04 10:40:29 +0000613#define JUMPBY(x) (next_instr += (x))
614
Raymond Hettingerf606f872003-03-16 03:11:04 +0000615/* OpCode prediction macros
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000616 Some opcodes tend to come in pairs thus making it possible to
617 predict the second code when the first is run. For example,
618 COMPARE_OP is often followed by JUMP_IF_FALSE or JUMP_IF_TRUE. And,
619 those opcodes are often followed by a POP_TOP.
Raymond Hettingerf606f872003-03-16 03:11:04 +0000620
621 Verifying the prediction costs a single high-speed test of register
Raymond Hettingerac2072922003-03-16 15:41:11 +0000622 variable against a constant. If the pairing was good, then the
Raymond Hettingerf606f872003-03-16 03:11:04 +0000623 processor has a high likelihood of making its own successful branch
624 prediction which results in a nearly zero overhead transition to the
625 next opcode.
626
627 A successful prediction saves a trip through the eval-loop including
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000628 its two unpredictable branches, the HAS_ARG test and the switch-case.
Raymond Hettingera7216982004-02-08 19:59:27 +0000629
Tim Peters8a5c3c72004-04-05 19:36:21 +0000630 If collecting opcode statistics, turn off prediction so that
631 statistics are accurately maintained (the predictions bypass
Raymond Hettingera7216982004-02-08 19:59:27 +0000632 the opcode frequency counter updates).
Raymond Hettingerf606f872003-03-16 03:11:04 +0000633*/
634
Raymond Hettingera7216982004-02-08 19:59:27 +0000635#ifdef DYNAMIC_EXECUTION_PROFILE
636#define PREDICT(op) if (0) goto PRED_##op
637#else
Raymond Hettingerac2072922003-03-16 15:41:11 +0000638#define PREDICT(op) if (*next_instr == op) goto PRED_##op
Raymond Hettingera7216982004-02-08 19:59:27 +0000639#endif
640
Raymond Hettingerf606f872003-03-16 03:11:04 +0000641#define PREDICTED(op) PRED_##op: next_instr++
Raymond Hettinger52a21b82004-08-06 18:43:09 +0000642#define PREDICTED_WITH_ARG(op) PRED_##op: oparg = PEEKARG(); next_instr += 3
Raymond Hettingerf606f872003-03-16 03:11:04 +0000643
Guido van Rossum374a9221991-04-04 10:40:29 +0000644/* Stack manipulation macros */
645
Martin v. Löwis18e16552006-02-15 17:27:45 +0000646/* The stack can grow at most MAXINT deep, as co_nlocals and
647 co_stacksize are ints. */
648#define STACK_LEVEL() ((int)(stack_pointer - f->f_valuestack))
Guido van Rossum374a9221991-04-04 10:40:29 +0000649#define EMPTY() (STACK_LEVEL() == 0)
650#define TOP() (stack_pointer[-1])
Raymond Hettinger663004b2003-01-09 15:24:30 +0000651#define SECOND() (stack_pointer[-2])
652#define THIRD() (stack_pointer[-3])
653#define FOURTH() (stack_pointer[-4])
Raymond Hettinger663004b2003-01-09 15:24:30 +0000654#define SET_TOP(v) (stack_pointer[-1] = (v))
655#define SET_SECOND(v) (stack_pointer[-2] = (v))
656#define SET_THIRD(v) (stack_pointer[-3] = (v))
657#define SET_FOURTH(v) (stack_pointer[-4] = (v))
Raymond Hettinger663004b2003-01-09 15:24:30 +0000658#define BASIC_STACKADJ(n) (stack_pointer += n)
Guido van Rossum374a9221991-04-04 10:40:29 +0000659#define BASIC_PUSH(v) (*stack_pointer++ = (v))
660#define BASIC_POP() (*--stack_pointer)
661
Guido van Rossum96a42c81992-01-12 02:29:51 +0000662#ifdef LLTRACE
Jeremy Hylton14368152001-10-17 13:29:30 +0000663#define PUSH(v) { (void)(BASIC_PUSH(v), \
664 lltrace && prtrace(TOP(), "push")); \
Thomas Wouters477c8d52006-05-27 19:21:47 +0000665 assert(STACK_LEVEL() <= co->co_stacksize); }
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000666#define POP() ((void)(lltrace && prtrace(TOP(), "pop")), \
667 BASIC_POP())
Raymond Hettinger663004b2003-01-09 15:24:30 +0000668#define STACKADJ(n) { (void)(BASIC_STACKADJ(n), \
669 lltrace && prtrace(TOP(), "stackadj")); \
Thomas Wouters477c8d52006-05-27 19:21:47 +0000670 assert(STACK_LEVEL() <= co->co_stacksize); }
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000671#define EXT_POP(STACK_POINTER) (lltrace && prtrace((STACK_POINTER)[-1], \
672 "ext_pop"), *--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +0000673#else
674#define PUSH(v) BASIC_PUSH(v)
675#define POP() BASIC_POP()
Raymond Hettinger663004b2003-01-09 15:24:30 +0000676#define STACKADJ(n) BASIC_STACKADJ(n)
Guido van Rossumc2e20742006-02-27 22:32:47 +0000677#define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +0000678#endif
679
Guido van Rossum681d79a1995-07-18 14:51:37 +0000680/* Local variable macros */
681
682#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumcfbf1a32002-03-28 20:17:52 +0000683
684/* The SETLOCAL() macro must not DECREF the local variable in-place and
685 then store the new value; it must copy the old value to a temporary
686 value, then store the new value, and then DECREF the temporary value.
687 This is because it is possible that during the DECREF the frame is
688 accessed by other code (e.g. a __del__ method or gc.collect()) and the
689 variable would be pointing to already-freed memory. */
690#define SETLOCAL(i, value) do { PyObject *tmp = GETLOCAL(i); \
691 GETLOCAL(i) = value; \
692 Py_XDECREF(tmp); } while (0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000693
Guido van Rossuma027efa1997-05-05 20:56:21 +0000694/* Start of code */
695
Tim Peters5ca576e2001-06-18 22:08:13 +0000696 if (f == NULL)
697 return NULL;
698
Armin Rigo1d313ab2003-10-25 14:33:09 +0000699 /* push frame */
Armin Rigo2b3eb402003-10-28 12:05:48 +0000700 if (Py_EnterRecursiveCall(""))
Armin Rigo1d313ab2003-10-25 14:33:09 +0000701 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +0000702
Tim Peters5ca576e2001-06-18 22:08:13 +0000703 tstate->frame = f;
Tim Peters5ca576e2001-06-18 22:08:13 +0000704
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000705 if (tstate->use_tracing) {
706 if (tstate->c_tracefunc != NULL) {
707 /* tstate->c_tracefunc, if defined, is a
708 function that will be called on *every* entry
709 to a code block. Its return value, if not
710 None, is a function that will be called at
711 the start of each executed line of code.
712 (Actually, the function must return itself
713 in order to continue tracing.) The trace
714 functions are called with three arguments:
715 a pointer to the current frame, a string
716 indicating why the function is called, and
717 an argument which depends on the situation.
718 The global trace function is also called
719 whenever an exception is detected. */
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +0000720 if (call_trace_protected(tstate->c_tracefunc,
721 tstate->c_traceobj,
722 f, PyTrace_CALL, Py_None)) {
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000723 /* Trace function raised an error */
Armin Rigo2b3eb402003-10-28 12:05:48 +0000724 goto exit_eval_frame;
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000725 }
726 }
727 if (tstate->c_profilefunc != NULL) {
728 /* Similar for c_profilefunc, except it needn't
729 return itself and isn't called for "line" events */
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +0000730 if (call_trace_protected(tstate->c_profilefunc,
731 tstate->c_profileobj,
732 f, PyTrace_CALL, Py_None)) {
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000733 /* Profile function raised an error */
Armin Rigo2b3eb402003-10-28 12:05:48 +0000734 goto exit_eval_frame;
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000735 }
736 }
737 }
738
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000739 co = f->f_code;
740 names = co->co_names;
741 consts = co->co_consts;
742 fastlocals = f->f_localsplus;
Thomas Wouters477c8d52006-05-27 19:21:47 +0000743 freevars = f->f_localsplus + co->co_nlocals;
Brett Cannonc9371d42005-06-25 08:23:41 +0000744 first_instr = (unsigned char*) PyString_AS_STRING(co->co_code);
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000745 /* An explanation is in order for the next line.
746
747 f->f_lasti now refers to the index of the last instruction
748 executed. You might think this was obvious from the name, but
749 this wasn't always true before 2.3! PyFrame_New now sets
750 f->f_lasti to -1 (i.e. the index *before* the first instruction)
751 and YIELD_VALUE doesn't fiddle with f_lasti any more. So this
Thomas Wouters902d6eb2007-01-09 23:18:33 +0000752 does work. Promise.
753
754 When the PREDICT() macros are enabled, some opcode pairs follow in
755 direct succession without updating f->f_lasti. A successful
756 prediction effectively links the two codes together as if they
757 were a single new opcode; accordingly,f->f_lasti will point to
758 the first code in the pair (for instance, GET_ITER followed by
759 FOR_ITER is effectively a single opcode and f->f_lasti will point
760 at to the beginning of the combined pair.)
761 */
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000762 next_instr = first_instr + f->f_lasti + 1;
763 stack_pointer = f->f_stacktop;
764 assert(stack_pointer != NULL);
765 f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */
766
Tim Peters5ca576e2001-06-18 22:08:13 +0000767#ifdef LLTRACE
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000768 lltrace = PyDict_GetItemString(f->f_globals, "__lltrace__") != NULL;
Tim Peters5ca576e2001-06-18 22:08:13 +0000769#endif
Neal Norwitz5f5153e2005-10-21 04:28:38 +0000770#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum00bc0e02007-10-15 02:52:41 +0000771 filename = PyUnicode_AsString(co->co_filename);
Tim Peters5ca576e2001-06-18 22:08:13 +0000772#endif
Guido van Rossumac7be682001-01-17 15:42:30 +0000773
Guido van Rossum374a9221991-04-04 10:40:29 +0000774 why = WHY_NOT;
775 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000776 x = Py_None; /* Not a reference, just anything non-NULL */
Fred Drake48fba732000-10-11 13:54:07 +0000777 w = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +0000778
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000779 if (throwflag) { /* support for generator.throw() */
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000780 why = WHY_EXCEPTION;
781 goto on_error;
782 }
Thomas Wouters477c8d52006-05-27 19:21:47 +0000783
Guido van Rossum374a9221991-04-04 10:40:29 +0000784 for (;;) {
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000785#ifdef WITH_TSC
786 if (inst1 == 0) {
787 /* Almost surely, the opcode executed a break
788 or a continue, preventing inst1 from being set
789 on the way out of the loop.
790 */
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000791 READ_TIMESTAMP(inst1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000792 loop1 = inst1;
793 }
794 dump_tsc(opcode, ticked, inst0, inst1, loop0, loop1,
795 intr0, intr1);
796 ticked = 0;
797 inst1 = 0;
798 intr0 = 0;
799 intr1 = 0;
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000800 READ_TIMESTAMP(loop0);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000801#endif
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000802 assert(stack_pointer >= f->f_valuestack); /* else underflow */
Thomas Wouters477c8d52006-05-27 19:21:47 +0000803 assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000804
Guido van Rossuma027efa1997-05-05 20:56:21 +0000805 /* Do periodic things. Doing this every time through
806 the loop would add too much overhead, so we do it
807 only every Nth instruction. We also do it if
808 ``things_to_do'' is set, i.e. when an asynchronous
809 event needs attention (e.g. a signal handler or
810 async I/O handler); see Py_AddPendingCall() and
811 Py_MakePendingCalls() above. */
Guido van Rossumac7be682001-01-17 15:42:30 +0000812
Skip Montanarod581d772002-09-03 20:10:45 +0000813 if (--_Py_Ticker < 0) {
Thomas Woutersce272b62007-09-19 21:19:28 +0000814 if (*next_instr == SETUP_FINALLY) {
815 /* Make the last opcode before
816 a try: finally: block uninterruptable. */
817 goto fast_next_opcode;
818 }
Skip Montanarod581d772002-09-03 20:10:45 +0000819 _Py_Ticker = _Py_CheckInterval;
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000820 tstate->tick_counter++;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000821#ifdef WITH_TSC
822 ticked = 1;
823#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000824 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000825 if (Py_MakePendingCalls() < 0) {
826 why = WHY_EXCEPTION;
827 goto on_error;
828 }
Kurt B. Kaiser4c79a832004-11-23 18:06:08 +0000829 if (things_to_do)
830 /* MakePendingCalls() didn't succeed.
831 Force early re-execution of this
832 "periodic" code, possibly after
833 a thread switch */
834 _Py_Ticker = 0;
Guido van Rossum8861b741996-07-30 16:49:37 +0000835 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000836#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000837 if (interpreter_lock) {
838 /* Give another thread a chance */
839
Guido van Rossum25ce5661997-08-02 03:10:38 +0000840 if (PyThreadState_Swap(NULL) != tstate)
841 Py_FatalError("ceval: tstate mix-up");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000842 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000843
844 /* Other threads may run now */
845
Guido van Rossum65d5b571998-12-21 19:32:43 +0000846 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000847 if (PyThreadState_Swap(tstate) != NULL)
848 Py_FatalError("ceval: orphan tstate");
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000849
850 /* Check for thread interrupts */
851
852 if (tstate->async_exc != NULL) {
853 x = tstate->async_exc;
854 tstate->async_exc = NULL;
855 PyErr_SetNone(x);
856 Py_DECREF(x);
857 why = WHY_EXCEPTION;
858 goto on_error;
859 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000860 }
861#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000862 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000863
Neil Schemenauer63543862002-02-17 19:10:14 +0000864 fast_next_opcode:
Guido van Rossum99bec951992-09-03 20:29:45 +0000865 f->f_lasti = INSTR_OFFSET();
Guido van Rossumac7be682001-01-17 15:42:30 +0000866
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000867 /* line-by-line tracing support */
868
869 if (tstate->c_tracefunc != NULL && !tstate->tracing) {
870 /* see maybe_call_line_trace
871 for expository comments */
872 f->f_stacktop = stack_pointer;
Tim Peters8a5c3c72004-04-05 19:36:21 +0000873
Michael W. Hudson58ee2af2003-04-29 16:18:47 +0000874 err = maybe_call_line_trace(tstate->c_tracefunc,
875 tstate->c_traceobj,
Armin Rigobf57a142004-03-22 19:24:58 +0000876 f, &instr_lb, &instr_ub,
877 &instr_prev);
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000878 /* Reload possibly changed frame fields */
879 JUMPTO(f->f_lasti);
Michael W. Hudson58ee2af2003-04-29 16:18:47 +0000880 if (f->f_stacktop != NULL) {
881 stack_pointer = f->f_stacktop;
882 f->f_stacktop = NULL;
883 }
884 if (err) {
885 /* trace function raised an exception */
886 goto on_error;
887 }
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000888 }
889
890 /* Extract opcode and argument */
891
Guido van Rossum374a9221991-04-04 10:40:29 +0000892 opcode = NEXTOP();
Armin Rigo8817fcd2004-06-17 10:22:40 +0000893 oparg = 0; /* allows oparg to be stored in a register because
894 it doesn't have to be remembered across a full loop */
Raymond Hettinger5bed4562004-04-10 23:34:17 +0000895 if (HAS_ARG(opcode))
896 oparg = NEXTARG();
Fred Drakeef8ace32000-08-24 00:32:09 +0000897 dispatch_opcode:
Guido van Rossum950361c1997-01-24 13:49:28 +0000898#ifdef DYNAMIC_EXECUTION_PROFILE
899#ifdef DXPAIRS
900 dxpairs[lastopcode][opcode]++;
901 lastopcode = opcode;
902#endif
903 dxp[opcode]++;
904#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000905
Guido van Rossum96a42c81992-01-12 02:29:51 +0000906#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000907 /* Instruction tracing */
Guido van Rossumac7be682001-01-17 15:42:30 +0000908
Guido van Rossum96a42c81992-01-12 02:29:51 +0000909 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000910 if (HAS_ARG(opcode)) {
911 printf("%d: %d, %d\n",
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000912 f->f_lasti, opcode, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +0000913 }
914 else {
915 printf("%d: %d\n",
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000916 f->f_lasti, opcode);
Guido van Rossum374a9221991-04-04 10:40:29 +0000917 }
918 }
919#endif
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000920
Guido van Rossum374a9221991-04-04 10:40:29 +0000921 /* Main switch on opcode */
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000922 READ_TIMESTAMP(inst0);
Jeremy Hylton52820442001-01-03 23:52:36 +0000923
Guido van Rossum374a9221991-04-04 10:40:29 +0000924 switch (opcode) {
Guido van Rossumac7be682001-01-17 15:42:30 +0000925
Guido van Rossum374a9221991-04-04 10:40:29 +0000926 /* BEWARE!
927 It is essential that any operation that fails sets either
928 x to NULL, err to nonzero, or why to anything but WHY_NOT,
929 and that no operation that succeeds does this! */
Guido van Rossumac7be682001-01-17 15:42:30 +0000930
Guido van Rossum374a9221991-04-04 10:40:29 +0000931 /* case STOP_CODE: this is an error! */
Guido van Rossumac7be682001-01-17 15:42:30 +0000932
Raymond Hettinger9c18e812004-06-21 16:31:15 +0000933 case NOP:
934 goto fast_next_opcode;
935
Neil Schemenauer63543862002-02-17 19:10:14 +0000936 case LOAD_FAST:
937 x = GETLOCAL(oparg);
938 if (x != NULL) {
939 Py_INCREF(x);
940 PUSH(x);
941 goto fast_next_opcode;
942 }
943 format_exc_check_arg(PyExc_UnboundLocalError,
944 UNBOUNDLOCAL_ERROR_MSG,
945 PyTuple_GetItem(co->co_varnames, oparg));
946 break;
947
948 case LOAD_CONST:
Skip Montanaro04d80f82002-08-04 21:03:35 +0000949 x = GETITEM(consts, oparg);
Neil Schemenauer63543862002-02-17 19:10:14 +0000950 Py_INCREF(x);
951 PUSH(x);
952 goto fast_next_opcode;
953
Raymond Hettinger7dc52212003-03-16 20:14:44 +0000954 PREDICTED_WITH_ARG(STORE_FAST);
Neil Schemenauer63543862002-02-17 19:10:14 +0000955 case STORE_FAST:
956 v = POP();
957 SETLOCAL(oparg, v);
958 goto fast_next_opcode;
959
Raymond Hettingerf606f872003-03-16 03:11:04 +0000960 PREDICTED(POP_TOP);
Guido van Rossum374a9221991-04-04 10:40:29 +0000961 case POP_TOP:
962 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000963 Py_DECREF(v);
Neil Schemenauer63543862002-02-17 19:10:14 +0000964 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000965
Guido van Rossum374a9221991-04-04 10:40:29 +0000966 case ROT_TWO:
Raymond Hettinger663004b2003-01-09 15:24:30 +0000967 v = TOP();
968 w = SECOND();
969 SET_TOP(w);
970 SET_SECOND(v);
Raymond Hettinger080cb322003-03-14 01:37:42 +0000971 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000972
Guido van Rossum374a9221991-04-04 10:40:29 +0000973 case ROT_THREE:
Raymond Hettinger663004b2003-01-09 15:24:30 +0000974 v = TOP();
975 w = SECOND();
976 x = THIRD();
977 SET_TOP(w);
978 SET_SECOND(x);
979 SET_THIRD(v);
Raymond Hettinger080cb322003-03-14 01:37:42 +0000980 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000981
Thomas Wouters434d0822000-08-24 20:11:32 +0000982 case ROT_FOUR:
Raymond Hettinger663004b2003-01-09 15:24:30 +0000983 u = TOP();
984 v = SECOND();
985 w = THIRD();
986 x = FOURTH();
987 SET_TOP(v);
988 SET_SECOND(w);
989 SET_THIRD(x);
990 SET_FOURTH(u);
Raymond Hettinger080cb322003-03-14 01:37:42 +0000991 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000992
Guido van Rossum374a9221991-04-04 10:40:29 +0000993 case DUP_TOP:
994 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000995 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000996 PUSH(v);
Raymond Hettinger080cb322003-03-14 01:37:42 +0000997 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000998
Thomas Wouters434d0822000-08-24 20:11:32 +0000999 case DUP_TOPX:
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00001000 if (oparg == 2) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00001001 x = TOP();
Tim Peters35ba6892000-10-11 07:04:49 +00001002 Py_INCREF(x);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001003 w = SECOND();
Tim Peters35ba6892000-10-11 07:04:49 +00001004 Py_INCREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001005 STACKADJ(2);
1006 SET_TOP(x);
1007 SET_SECOND(w);
Raymond Hettingerf606f872003-03-16 03:11:04 +00001008 goto fast_next_opcode;
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00001009 } else if (oparg == 3) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00001010 x = TOP();
Tim Peters35ba6892000-10-11 07:04:49 +00001011 Py_INCREF(x);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001012 w = SECOND();
Tim Peters35ba6892000-10-11 07:04:49 +00001013 Py_INCREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001014 v = THIRD();
Tim Peters35ba6892000-10-11 07:04:49 +00001015 Py_INCREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001016 STACKADJ(3);
1017 SET_TOP(x);
1018 SET_SECOND(w);
1019 SET_THIRD(v);
Raymond Hettingerf606f872003-03-16 03:11:04 +00001020 goto fast_next_opcode;
Thomas Wouters434d0822000-08-24 20:11:32 +00001021 }
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00001022 Py_FatalError("invalid argument to DUP_TOPX"
1023 " (bytecode corruption?)");
Tim Peters35ba6892000-10-11 07:04:49 +00001024 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001025
Guido van Rossum374a9221991-04-04 10:40:29 +00001026 case UNARY_POSITIVE:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001027 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001028 x = PyNumber_Positive(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001029 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001030 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001031 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001032 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001033
Guido van Rossum374a9221991-04-04 10:40:29 +00001034 case UNARY_NEGATIVE:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001035 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001036 x = PyNumber_Negative(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001037 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001038 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001039 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001040 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001041
Guido van Rossum374a9221991-04-04 10:40:29 +00001042 case UNARY_NOT:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001043 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001044 err = PyObject_IsTrue(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001045 Py_DECREF(v);
Guido van Rossumfc490731997-05-06 15:06:49 +00001046 if (err == 0) {
1047 Py_INCREF(Py_True);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001048 SET_TOP(Py_True);
Guido van Rossumfc490731997-05-06 15:06:49 +00001049 continue;
1050 }
1051 else if (err > 0) {
1052 Py_INCREF(Py_False);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001053 SET_TOP(Py_False);
Guido van Rossumfc490731997-05-06 15:06:49 +00001054 err = 0;
1055 continue;
1056 }
Raymond Hettinger8bb90a52003-01-14 12:43:10 +00001057 STACKADJ(-1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001058 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001059
Guido van Rossum7928cd71991-10-24 14:59:31 +00001060 case UNARY_INVERT:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001061 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001062 x = PyNumber_Invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001063 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001064 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001065 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001066 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001067
Guido van Rossum50564e81996-01-12 01:13:16 +00001068 case BINARY_POWER:
1069 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001070 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001071 x = PyNumber_Power(v, w, Py_None);
Guido van Rossumb209a111997-04-29 18:18:01 +00001072 Py_DECREF(v);
1073 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001074 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001075 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +00001076 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001077
Guido van Rossum374a9221991-04-04 10:40:29 +00001078 case BINARY_MULTIPLY:
1079 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001080 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001081 x = PyNumber_Multiply(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001082 Py_DECREF(v);
1083 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001084 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001085 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001086 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001087
Tim Peters3caca232001-12-06 06:23:26 +00001088 case BINARY_TRUE_DIVIDE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001089 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001090 v = TOP();
Tim Peters3caca232001-12-06 06:23:26 +00001091 x = PyNumber_TrueDivide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001092 Py_DECREF(v);
1093 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001094 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001095 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001096 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001097
Guido van Rossum4668b002001-08-08 05:00:18 +00001098 case BINARY_FLOOR_DIVIDE:
1099 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001100 v = TOP();
Guido van Rossum4668b002001-08-08 05:00:18 +00001101 x = PyNumber_FloorDivide(v, w);
1102 Py_DECREF(v);
1103 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001104 SET_TOP(x);
Guido van Rossum4668b002001-08-08 05:00:18 +00001105 if (x != NULL) continue;
1106 break;
1107
Guido van Rossum374a9221991-04-04 10:40:29 +00001108 case BINARY_MODULO:
1109 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001110 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001111 x = PyNumber_Remainder(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001112 Py_DECREF(v);
1113 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001114 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001115 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001116 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001117
Guido van Rossum374a9221991-04-04 10:40:29 +00001118 case BINARY_ADD:
1119 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001120 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001121 if (PyUnicode_CheckExact(v) &&
Guido van Rossum98297ee2007-11-06 21:34:58 +00001122 PyUnicode_CheckExact(w)) {
1123 x = unicode_concatenate(v, w, f, next_instr);
1124 /* unicode_concatenate consumed the ref to v */
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001125 goto skip_decref_vx;
1126 }
Guido van Rossum87780df2001-08-23 02:58:07 +00001127 else {
Guido van Rossumc12da691997-07-17 23:12:42 +00001128 x = PyNumber_Add(v, w);
Guido van Rossum87780df2001-08-23 02:58:07 +00001129 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001130 Py_DECREF(v);
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001131 skip_decref_vx:
Guido van Rossumb209a111997-04-29 18:18:01 +00001132 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001133 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001134 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001135 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001136
Guido van Rossum374a9221991-04-04 10:40:29 +00001137 case BINARY_SUBTRACT:
1138 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001139 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001140 x = PyNumber_Subtract(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001141 Py_DECREF(v);
1142 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001143 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001144 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001145 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001146
Guido van Rossum374a9221991-04-04 10:40:29 +00001147 case BINARY_SUBSCR:
1148 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001149 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001150 x = PyObject_GetItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001151 Py_DECREF(v);
1152 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001153 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001154 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001155 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001156
Guido van Rossum7928cd71991-10-24 14:59:31 +00001157 case BINARY_LSHIFT:
1158 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001159 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001160 x = PyNumber_Lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001161 Py_DECREF(v);
1162 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001163 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001164 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001165 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001166
Guido van Rossum7928cd71991-10-24 14:59:31 +00001167 case BINARY_RSHIFT:
1168 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001169 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001170 x = PyNumber_Rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001171 Py_DECREF(v);
1172 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001173 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001174 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001175 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001176
Guido van Rossum7928cd71991-10-24 14:59:31 +00001177 case BINARY_AND:
1178 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001179 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001180 x = PyNumber_And(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001181 Py_DECREF(v);
1182 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001183 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001184 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001185 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001186
Guido van Rossum7928cd71991-10-24 14:59:31 +00001187 case BINARY_XOR:
1188 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001189 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001190 x = PyNumber_Xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001191 Py_DECREF(v);
1192 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001193 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001194 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001195 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001196
Guido van Rossum7928cd71991-10-24 14:59:31 +00001197 case BINARY_OR:
1198 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001199 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001200 x = PyNumber_Or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001201 Py_DECREF(v);
1202 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001203 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001204 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001205 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001206
Raymond Hettingerdd80f762004-03-07 07:31:06 +00001207 case LIST_APPEND:
1208 w = POP();
1209 v = POP();
1210 err = PyList_Append(v, w);
1211 Py_DECREF(v);
1212 Py_DECREF(w);
Raymond Hettingerfba1cfc2004-03-12 16:33:17 +00001213 if (err == 0) {
1214 PREDICT(JUMP_ABSOLUTE);
1215 continue;
1216 }
Raymond Hettingerdd80f762004-03-07 07:31:06 +00001217 break;
1218
Nick Coghlan650f0d02007-04-15 12:05:43 +00001219 case SET_ADD:
1220 w = POP();
1221 v = POP();
1222 err = PySet_Add(v, w);
1223 Py_DECREF(v);
1224 Py_DECREF(w);
1225 if (err == 0) {
1226 PREDICT(JUMP_ABSOLUTE);
1227 continue;
1228 }
1229 break;
1230
Thomas Wouters434d0822000-08-24 20:11:32 +00001231 case INPLACE_POWER:
1232 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001233 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001234 x = PyNumber_InPlacePower(v, w, Py_None);
1235 Py_DECREF(v);
1236 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001237 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001238 if (x != NULL) continue;
1239 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001240
Thomas Wouters434d0822000-08-24 20:11:32 +00001241 case INPLACE_MULTIPLY:
1242 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001243 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001244 x = PyNumber_InPlaceMultiply(v, w);
1245 Py_DECREF(v);
1246 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001247 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001248 if (x != NULL) continue;
1249 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001250
Tim Peters54b11912001-12-25 18:49:11 +00001251 case INPLACE_TRUE_DIVIDE:
Thomas Wouters434d0822000-08-24 20:11:32 +00001252 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001253 v = TOP();
Tim Peters54b11912001-12-25 18:49:11 +00001254 x = PyNumber_InPlaceTrueDivide(v, w);
Thomas Wouters434d0822000-08-24 20:11:32 +00001255 Py_DECREF(v);
1256 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001257 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001258 if (x != NULL) continue;
1259 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001260
Guido van Rossum4668b002001-08-08 05:00:18 +00001261 case INPLACE_FLOOR_DIVIDE:
1262 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001263 v = TOP();
Guido van Rossum4668b002001-08-08 05:00:18 +00001264 x = PyNumber_InPlaceFloorDivide(v, w);
1265 Py_DECREF(v);
1266 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001267 SET_TOP(x);
Guido van Rossum4668b002001-08-08 05:00:18 +00001268 if (x != NULL) continue;
1269 break;
1270
Thomas Wouters434d0822000-08-24 20:11:32 +00001271 case INPLACE_MODULO:
1272 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001273 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001274 x = PyNumber_InPlaceRemainder(v, w);
1275 Py_DECREF(v);
1276 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001277 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001278 if (x != NULL) continue;
1279 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001280
Thomas Wouters434d0822000-08-24 20:11:32 +00001281 case INPLACE_ADD:
1282 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001283 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001284 if (PyUnicode_CheckExact(v) &&
Guido van Rossum98297ee2007-11-06 21:34:58 +00001285 PyUnicode_CheckExact(w)) {
1286 x = unicode_concatenate(v, w, f, next_instr);
1287 /* unicode_concatenate consumed the ref to v */
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001288 goto skip_decref_v;
1289 }
Guido van Rossum87780df2001-08-23 02:58:07 +00001290 else {
Thomas Wouters434d0822000-08-24 20:11:32 +00001291 x = PyNumber_InPlaceAdd(v, w);
Guido van Rossum87780df2001-08-23 02:58:07 +00001292 }
Thomas Wouters434d0822000-08-24 20:11:32 +00001293 Py_DECREF(v);
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001294 skip_decref_v:
Thomas Wouters434d0822000-08-24 20:11:32 +00001295 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001296 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001297 if (x != NULL) continue;
1298 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001299
Thomas Wouters434d0822000-08-24 20:11:32 +00001300 case INPLACE_SUBTRACT:
1301 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001302 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001303 x = PyNumber_InPlaceSubtract(v, w);
Thomas Wouters434d0822000-08-24 20:11:32 +00001304 Py_DECREF(v);
1305 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001306 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001307 if (x != NULL) continue;
1308 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001309
Thomas Wouters434d0822000-08-24 20:11:32 +00001310 case INPLACE_LSHIFT:
1311 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001312 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001313 x = PyNumber_InPlaceLshift(v, w);
1314 Py_DECREF(v);
1315 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001316 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001317 if (x != NULL) continue;
1318 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001319
Thomas Wouters434d0822000-08-24 20:11:32 +00001320 case INPLACE_RSHIFT:
1321 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001322 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001323 x = PyNumber_InPlaceRshift(v, w);
1324 Py_DECREF(v);
1325 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001326 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001327 if (x != NULL) continue;
1328 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001329
Thomas Wouters434d0822000-08-24 20:11:32 +00001330 case INPLACE_AND:
1331 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001332 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001333 x = PyNumber_InPlaceAnd(v, w);
1334 Py_DECREF(v);
1335 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001336 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001337 if (x != NULL) continue;
1338 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001339
Thomas Wouters434d0822000-08-24 20:11:32 +00001340 case INPLACE_XOR:
1341 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001342 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001343 x = PyNumber_InPlaceXor(v, w);
1344 Py_DECREF(v);
1345 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001346 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001347 if (x != NULL) continue;
1348 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001349
Thomas Wouters434d0822000-08-24 20:11:32 +00001350 case INPLACE_OR:
1351 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001352 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001353 x = PyNumber_InPlaceOr(v, w);
1354 Py_DECREF(v);
1355 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001356 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001357 if (x != NULL) continue;
1358 break;
1359
Guido van Rossum374a9221991-04-04 10:40:29 +00001360 case STORE_SUBSCR:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001361 w = TOP();
1362 v = SECOND();
1363 u = THIRD();
1364 STACKADJ(-3);
Guido van Rossum374a9221991-04-04 10:40:29 +00001365 /* v[w] = u */
Guido van Rossumfc490731997-05-06 15:06:49 +00001366 err = PyObject_SetItem(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001367 Py_DECREF(u);
1368 Py_DECREF(v);
1369 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001370 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001371 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001372
Guido van Rossum374a9221991-04-04 10:40:29 +00001373 case DELETE_SUBSCR:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001374 w = TOP();
1375 v = SECOND();
1376 STACKADJ(-2);
Guido van Rossum374a9221991-04-04 10:40:29 +00001377 /* del v[w] */
Guido van Rossumfc490731997-05-06 15:06:49 +00001378 err = PyObject_DelItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001379 Py_DECREF(v);
1380 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001381 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001382 break;
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001383
Guido van Rossum374a9221991-04-04 10:40:29 +00001384 case PRINT_EXPR:
1385 v = POP();
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001386 w = PySys_GetObject("displayhook");
1387 if (w == NULL) {
1388 PyErr_SetString(PyExc_RuntimeError,
1389 "lost sys.displayhook");
1390 err = -1;
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001391 x = NULL;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001392 }
1393 if (err == 0) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001394 x = PyTuple_Pack(1, v);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001395 if (x == NULL)
1396 err = -1;
1397 }
1398 if (err == 0) {
1399 w = PyEval_CallObject(w, x);
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001400 Py_XDECREF(w);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001401 if (w == NULL)
1402 err = -1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001403 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001404 Py_DECREF(v);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001405 Py_XDECREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001406 break;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001407
Thomas Wouters434d0822000-08-24 20:11:32 +00001408#ifdef CASE_TOO_BIG
1409 default: switch (opcode) {
1410#endif
Guido van Rossumf10570b1995-07-07 22:53:21 +00001411 case RAISE_VARARGS:
Collin Winter828f04a2007-08-31 00:04:24 +00001412 v = w = NULL;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001413 switch (oparg) {
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00001414 case 2:
1415 v = POP(); /* cause */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001416 case 1:
1417 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001418 case 0: /* Fallthrough */
Collin Winter828f04a2007-08-31 00:04:24 +00001419 why = do_raise(w, v);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001420 break;
1421 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001422 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001423 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001424 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001425 break;
1426 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001427 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001428
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001429 case STORE_LOCALS:
1430 x = POP();
1431 v = f->f_locals;
1432 Py_XDECREF(v);
1433 f->f_locals = x;
1434 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001435
Guido van Rossum374a9221991-04-04 10:40:29 +00001436 case RETURN_VALUE:
1437 retval = POP();
1438 why = WHY_RETURN;
Raymond Hettinger1dd83092004-02-06 18:32:33 +00001439 goto fast_block_end;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001440
Tim Peters5ca576e2001-06-18 22:08:13 +00001441 case YIELD_VALUE:
1442 retval = POP();
Tim Peters8c963692001-06-23 05:26:56 +00001443 f->f_stacktop = stack_pointer;
Tim Peters5ca576e2001-06-18 22:08:13 +00001444 why = WHY_YIELD;
Raymond Hettinger1dd83092004-02-06 18:32:33 +00001445 goto fast_yield;
Tim Peters5ca576e2001-06-18 22:08:13 +00001446
Guido van Rossum374a9221991-04-04 10:40:29 +00001447 case POP_BLOCK:
1448 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001449 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001450 while (STACK_LEVEL() > b->b_level) {
1451 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001452 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001453 }
1454 }
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001455 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001456
Guido van Rossum374a9221991-04-04 10:40:29 +00001457 case END_FINALLY:
1458 v = POP();
Christian Heimes217cfd12007-12-02 14:31:20 +00001459 if (PyLong_Check(v)) {
1460 why = (enum why_code) PyLong_AS_LONG(v);
Tim Peters8a5c3c72004-04-05 19:36:21 +00001461 assert(why != WHY_YIELD);
Raymond Hettingerc8aa08b2004-04-11 14:59:33 +00001462 if (why == WHY_RETURN ||
1463 why == WHY_CONTINUE)
Guido van Rossum374a9221991-04-04 10:40:29 +00001464 retval = POP();
1465 }
Brett Cannonf74225d2007-02-26 21:10:16 +00001466 else if (PyExceptionClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001467 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001468 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001469 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001470 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001471 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001472 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001473 else if (v != Py_None) {
1474 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001475 "'finally' pops bad exception");
1476 why = WHY_EXCEPTION;
1477 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001478 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001479 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001480
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001481 case LOAD_BUILD_CLASS:
1482 x = PyDict_GetItemString(f->f_builtins,
1483 "__build_class__");
1484 if (x == NULL) {
1485 PyErr_SetString(PyExc_ImportError,
1486 "__build_class__ not found");
1487 break;
1488 }
1489 Py_INCREF(x);
1490 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001491 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001492
Guido van Rossum374a9221991-04-04 10:40:29 +00001493 case STORE_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001494 w = GETITEM(names, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001495 v = POP();
Raymond Hettinger467a6982004-04-07 11:39:21 +00001496 if ((x = f->f_locals) != NULL) {
Raymond Hettinger66bd2332004-08-02 08:30:07 +00001497 if (PyDict_CheckExact(x))
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001498 err = PyDict_SetItem(x, w, v);
1499 else
1500 err = PyObject_SetItem(x, w, v);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001501 Py_DECREF(v);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001502 if (err == 0) continue;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001503 break;
1504 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001505 PyErr_Format(PyExc_SystemError,
Guido van Rossum98297ee2007-11-06 21:34:58 +00001506 "no locals found when storing %R", w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001507 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001508
Guido van Rossum374a9221991-04-04 10:40:29 +00001509 case DELETE_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001510 w = GETITEM(names, oparg);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001511 if ((x = f->f_locals) != NULL) {
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001512 if ((err = PyObject_DelItem(x, w)) != 0)
Raymond Hettinger467a6982004-04-07 11:39:21 +00001513 format_exc_check_arg(PyExc_NameError,
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001514 NAME_ERROR_MSG,
1515 w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001516 break;
1517 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001518 PyErr_Format(PyExc_SystemError,
Guido van Rossum98297ee2007-11-06 21:34:58 +00001519 "no locals when deleting %R", w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001520 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001521
Raymond Hettinger7dc52212003-03-16 20:14:44 +00001522 PREDICTED_WITH_ARG(UNPACK_SEQUENCE);
Thomas Wouters0be5aab2000-08-11 22:15:52 +00001523 case UNPACK_SEQUENCE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001524 v = POP();
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001525 if (PyTuple_CheckExact(v) &&
1526 PyTuple_GET_SIZE(v) == oparg) {
1527 PyObject **items = \
1528 ((PyTupleObject *)v)->ob_item;
Raymond Hettingerf114a3a2004-03-08 23:25:30 +00001529 while (oparg--) {
1530 w = items[oparg];
1531 Py_INCREF(w);
1532 PUSH(w);
Barry Warsawe42b18f1997-08-25 22:13:04 +00001533 }
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001534 Py_DECREF(v);
1535 continue;
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001536 } else if (PyList_CheckExact(v) &&
1537 PyList_GET_SIZE(v) == oparg) {
1538 PyObject **items = \
1539 ((PyListObject *)v)->ob_item;
Raymond Hettingerf114a3a2004-03-08 23:25:30 +00001540 while (oparg--) {
1541 w = items[oparg];
1542 Py_INCREF(w);
1543 PUSH(w);
Barry Warsawe42b18f1997-08-25 22:13:04 +00001544 }
Guido van Rossum0368b722007-05-11 16:50:42 +00001545 } else if (unpack_iterable(v, oparg, -1,
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001546 stack_pointer + oparg)) {
Tim Petersd6d010b2001-06-21 02:49:55 +00001547 stack_pointer += oparg;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001548 } else {
1549 /* unpack_iterable() raised an exception */
Barry Warsawe42b18f1997-08-25 22:13:04 +00001550 why = WHY_EXCEPTION;
Tim Peters8b13b3e2001-09-30 05:58:42 +00001551 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001552 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001553 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001554
Guido van Rossum0368b722007-05-11 16:50:42 +00001555 case UNPACK_EX:
1556 {
1557 int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8);
1558 v = POP();
1559
1560 if (unpack_iterable(v, oparg & 0xFF, oparg >> 8,
1561 stack_pointer + totalargs)) {
1562 stack_pointer += totalargs;
1563 } else {
1564 why = WHY_EXCEPTION;
1565 }
1566 Py_DECREF(v);
1567 break;
1568 }
1569
Guido van Rossum374a9221991-04-04 10:40:29 +00001570 case STORE_ATTR:
Skip Montanaro496e6582002-08-06 17:47:40 +00001571 w = GETITEM(names, oparg);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001572 v = TOP();
1573 u = SECOND();
1574 STACKADJ(-2);
Guido van Rossumb209a111997-04-29 18:18:01 +00001575 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1576 Py_DECREF(v);
1577 Py_DECREF(u);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001578 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001579 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001580
Guido van Rossum374a9221991-04-04 10:40:29 +00001581 case DELETE_ATTR:
Skip Montanaro496e6582002-08-06 17:47:40 +00001582 w = GETITEM(names, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001583 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001584 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1585 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001586 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001587 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001588
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001589 case STORE_GLOBAL:
Skip Montanaro496e6582002-08-06 17:47:40 +00001590 w = GETITEM(names, oparg);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001591 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001592 err = PyDict_SetItem(f->f_globals, w, v);
1593 Py_DECREF(v);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001594 if (err == 0) continue;
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001595 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001596
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001597 case DELETE_GLOBAL:
Skip Montanaro496e6582002-08-06 17:47:40 +00001598 w = GETITEM(names, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001599 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
Paul Prescode68140d2000-08-30 20:25:01 +00001600 format_exc_check_arg(
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001601 PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001602 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001603
Guido van Rossum374a9221991-04-04 10:40:29 +00001604 case LOAD_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001605 w = GETITEM(names, oparg);
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001606 if ((v = f->f_locals) == NULL) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +00001607 PyErr_Format(PyExc_SystemError,
Guido van Rossum98297ee2007-11-06 21:34:58 +00001608 "no locals when loading %R", w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001609 break;
1610 }
Michael W. Hudsona3711f72004-08-02 14:50:43 +00001611 if (PyDict_CheckExact(v)) {
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001612 x = PyDict_GetItem(v, w);
Michael W. Hudsona3711f72004-08-02 14:50:43 +00001613 Py_XINCREF(x);
1614 }
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001615 else {
1616 x = PyObject_GetItem(v, w);
1617 if (x == NULL && PyErr_Occurred()) {
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001618 if (!PyErr_ExceptionMatches(
1619 PyExc_KeyError))
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001620 break;
1621 PyErr_Clear();
1622 }
1623 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001624 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001625 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001626 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001627 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001628 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001629 format_exc_check_arg(
Guido van Rossumac7be682001-01-17 15:42:30 +00001630 PyExc_NameError,
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001631 NAME_ERROR_MSG, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001632 break;
1633 }
1634 }
Michael W. Hudsona3711f72004-08-02 14:50:43 +00001635 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001636 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001637 PUSH(x);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001638 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001639
Guido van Rossum374a9221991-04-04 10:40:29 +00001640 case LOAD_GLOBAL:
Skip Montanaro496e6582002-08-06 17:47:40 +00001641 w = GETITEM(names, oparg);
Neal Norwitzda059e32007-08-26 05:33:45 +00001642 if (PyUnicode_CheckExact(w)) {
Guido van Rossumd8dbf842002-08-19 21:17:53 +00001643 /* Inline the PyDict_GetItem() calls.
1644 WARNING: this is an extreme speed hack.
1645 Do not try this at home. */
Neal Norwitzda059e32007-08-26 05:33:45 +00001646 long hash = ((PyUnicodeObject *)w)->hash;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001647 if (hash != -1) {
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001648 PyDictObject *d;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001649 PyDictEntry *e;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001650 d = (PyDictObject *)(f->f_globals);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001651 e = d->ma_lookup(d, w, hash);
1652 if (e == NULL) {
1653 x = NULL;
1654 break;
1655 }
1656 x = e->me_value;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001657 if (x != NULL) {
1658 Py_INCREF(x);
1659 PUSH(x);
1660 continue;
1661 }
1662 d = (PyDictObject *)(f->f_builtins);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001663 e = d->ma_lookup(d, w, hash);
1664 if (e == NULL) {
1665 x = NULL;
1666 break;
1667 }
1668 x = e->me_value;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001669 if (x != NULL) {
1670 Py_INCREF(x);
1671 PUSH(x);
1672 continue;
1673 }
1674 goto load_global_error;
1675 }
1676 }
1677 /* This is the un-inlined version of the code above */
Guido van Rossumb209a111997-04-29 18:18:01 +00001678 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001679 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001680 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001681 if (x == NULL) {
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001682 load_global_error:
Paul Prescode68140d2000-08-30 20:25:01 +00001683 format_exc_check_arg(
Guido van Rossumac7be682001-01-17 15:42:30 +00001684 PyExc_NameError,
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001685 GLOBAL_NAME_ERROR_MSG, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001686 break;
1687 }
1688 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001689 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001690 PUSH(x);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001691 continue;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001692
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001693 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001694 x = GETLOCAL(oparg);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001695 if (x != NULL) {
1696 SETLOCAL(oparg, NULL);
1697 continue;
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001698 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001699 format_exc_check_arg(
1700 PyExc_UnboundLocalError,
1701 UNBOUNDLOCAL_ERROR_MSG,
1702 PyTuple_GetItem(co->co_varnames, oparg)
1703 );
1704 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001705
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001706 case LOAD_CLOSURE:
Jeremy Hylton2b724da2001-01-29 22:51:52 +00001707 x = freevars[oparg];
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001708 Py_INCREF(x);
1709 PUSH(x);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001710 if (x != NULL) continue;
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001711 break;
1712
1713 case LOAD_DEREF:
Jeremy Hylton2b724da2001-01-29 22:51:52 +00001714 x = freevars[oparg];
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001715 w = PyCell_Get(x);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001716 if (w != NULL) {
1717 PUSH(w);
1718 continue;
Jeremy Hylton2524d692001-02-05 17:23:16 +00001719 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001720 err = -1;
1721 /* Don't stomp existing exception */
1722 if (PyErr_Occurred())
1723 break;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001724 if (oparg < PyTuple_GET_SIZE(co->co_cellvars)) {
1725 v = PyTuple_GET_ITEM(co->co_cellvars,
Raymond Hettinger467a6982004-04-07 11:39:21 +00001726 oparg);
1727 format_exc_check_arg(
1728 PyExc_UnboundLocalError,
1729 UNBOUNDLOCAL_ERROR_MSG,
1730 v);
1731 } else {
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001732 v = PyTuple_GET_ITEM(co->co_freevars, oparg -
1733 PyTuple_GET_SIZE(co->co_cellvars));
1734 format_exc_check_arg(PyExc_NameError,
1735 UNBOUNDFREE_ERROR_MSG, v);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001736 }
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001737 break;
1738
1739 case STORE_DEREF:
1740 w = POP();
Jeremy Hylton2b724da2001-01-29 22:51:52 +00001741 x = freevars[oparg];
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001742 PyCell_Set(x, w);
Jeremy Hylton30c9f392001-03-13 01:58:22 +00001743 Py_DECREF(w);
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001744 continue;
1745
Guido van Rossum374a9221991-04-04 10:40:29 +00001746 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001747 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001748 if (x != NULL) {
Raymond Hettinger5bed4562004-04-10 23:34:17 +00001749 for (; --oparg >= 0;) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001750 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001751 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001752 }
1753 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001754 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001755 }
1756 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001757
Guido van Rossum374a9221991-04-04 10:40:29 +00001758 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001759 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001760 if (x != NULL) {
Raymond Hettinger5bed4562004-04-10 23:34:17 +00001761 for (; --oparg >= 0;) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001762 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001763 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001764 }
1765 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001766 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001767 }
1768 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001769
Guido van Rossum86e58e22006-08-28 15:27:34 +00001770 case BUILD_SET:
1771 x = PySet_New(NULL);
1772 if (x != NULL) {
1773 for (; --oparg >= 0;) {
1774 w = POP();
1775 if (err == 0)
1776 err = PySet_Add(x, w);
1777 Py_DECREF(w);
1778 }
1779 if (err != 0) {
1780 Py_DECREF(x);
1781 break;
1782 }
1783 PUSH(x);
1784 continue;
1785 }
1786 break;
1787
Guido van Rossum374a9221991-04-04 10:40:29 +00001788 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001789 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001790 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001791 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001792 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001793
Guido van Rossum374a9221991-04-04 10:40:29 +00001794 case LOAD_ATTR:
Skip Montanaro496e6582002-08-06 17:47:40 +00001795 w = GETITEM(names, oparg);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001796 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001797 x = PyObject_GetAttr(v, w);
1798 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001799 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001800 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001801 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001802
Guido van Rossum374a9221991-04-04 10:40:29 +00001803 case COMPARE_OP:
1804 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001805 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001806 x = cmp_outcome(oparg, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001807 Py_DECREF(v);
1808 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001809 SET_TOP(x);
Raymond Hettingerf606f872003-03-16 03:11:04 +00001810 if (x == NULL) break;
1811 PREDICT(JUMP_IF_FALSE);
1812 PREDICT(JUMP_IF_TRUE);
1813 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001814
Guido van Rossum374a9221991-04-04 10:40:29 +00001815 case IMPORT_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001816 w = GETITEM(names, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001817 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001818 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001819 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001820 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001821 break;
1822 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001823 v = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001824 u = TOP();
Christian Heimes217cfd12007-12-02 14:31:20 +00001825 if (PyLong_AsLong(u) != -1 || PyErr_Occurred())
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001826 w = PyTuple_Pack(5,
1827 w,
1828 f->f_globals,
1829 f->f_locals == NULL ?
1830 Py_None : f->f_locals,
1831 v,
1832 u);
1833 else
1834 w = PyTuple_Pack(4,
1835 w,
1836 f->f_globals,
1837 f->f_locals == NULL ?
1838 Py_None : f->f_locals,
1839 v);
1840 Py_DECREF(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001841 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001842 if (w == NULL) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00001843 u = POP();
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001844 x = NULL;
1845 break;
1846 }
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001847 READ_TIMESTAMP(intr0);
Guido van Rossumb209a111997-04-29 18:18:01 +00001848 x = PyEval_CallObject(x, w);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001849 READ_TIMESTAMP(intr1);
Guido van Rossumb209a111997-04-29 18:18:01 +00001850 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001851 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001852 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001853 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001854
Thomas Wouters52152252000-08-17 22:55:00 +00001855 case IMPORT_STAR:
1856 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001857 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001858 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001859 PyErr_SetString(PyExc_SystemError,
Jeremy Hyltonc862cf42001-01-19 03:25:05 +00001860 "no locals found during 'import *'");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001861 break;
1862 }
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001863 READ_TIMESTAMP(intr0);
Thomas Wouters52152252000-08-17 22:55:00 +00001864 err = import_all_from(x, v);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001865 READ_TIMESTAMP(intr1);
Guido van Rossumb209a111997-04-29 18:18:01 +00001866 PyFrame_LocalsToFast(f, 0);
Thomas Wouters52152252000-08-17 22:55:00 +00001867 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001868 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001869 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001870
Thomas Wouters52152252000-08-17 22:55:00 +00001871 case IMPORT_FROM:
Skip Montanaro496e6582002-08-06 17:47:40 +00001872 w = GETITEM(names, oparg);
Thomas Wouters52152252000-08-17 22:55:00 +00001873 v = TOP();
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001874 READ_TIMESTAMP(intr0);
Thomas Wouters52152252000-08-17 22:55:00 +00001875 x = import_from(v, w);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001876 READ_TIMESTAMP(intr1);
Thomas Wouters52152252000-08-17 22:55:00 +00001877 PUSH(x);
1878 if (x != NULL) continue;
1879 break;
1880
Guido van Rossum374a9221991-04-04 10:40:29 +00001881 case JUMP_FORWARD:
1882 JUMPBY(oparg);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00001883 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +00001884
Raymond Hettingerf606f872003-03-16 03:11:04 +00001885 PREDICTED_WITH_ARG(JUMP_IF_FALSE);
Guido van Rossum374a9221991-04-04 10:40:29 +00001886 case JUMP_IF_FALSE:
Raymond Hettinger21012b82003-02-26 18:11:50 +00001887 w = TOP();
Raymond Hettingerf606f872003-03-16 03:11:04 +00001888 if (w == Py_True) {
1889 PREDICT(POP_TOP);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00001890 goto fast_next_opcode;
Raymond Hettingerf606f872003-03-16 03:11:04 +00001891 }
Raymond Hettinger21012b82003-02-26 18:11:50 +00001892 if (w == Py_False) {
1893 JUMPBY(oparg);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00001894 goto fast_next_opcode;
Raymond Hettinger21012b82003-02-26 18:11:50 +00001895 }
1896 err = PyObject_IsTrue(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001897 if (err > 0)
1898 err = 0;
1899 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00001900 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001901 else
1902 break;
1903 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001904
Raymond Hettingerf606f872003-03-16 03:11:04 +00001905 PREDICTED_WITH_ARG(JUMP_IF_TRUE);
Guido van Rossum374a9221991-04-04 10:40:29 +00001906 case JUMP_IF_TRUE:
Raymond Hettinger21012b82003-02-26 18:11:50 +00001907 w = TOP();
Raymond Hettingerf606f872003-03-16 03:11:04 +00001908 if (w == Py_False) {
1909 PREDICT(POP_TOP);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00001910 goto fast_next_opcode;
Raymond Hettingerf606f872003-03-16 03:11:04 +00001911 }
Raymond Hettinger21012b82003-02-26 18:11:50 +00001912 if (w == Py_True) {
1913 JUMPBY(oparg);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00001914 goto fast_next_opcode;
Raymond Hettinger21012b82003-02-26 18:11:50 +00001915 }
1916 err = PyObject_IsTrue(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001917 if (err > 0) {
1918 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00001919 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001920 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001921 else if (err == 0)
1922 ;
1923 else
1924 break;
1925 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001926
Raymond Hettingerfba1cfc2004-03-12 16:33:17 +00001927 PREDICTED_WITH_ARG(JUMP_ABSOLUTE);
Guido van Rossum374a9221991-04-04 10:40:29 +00001928 case JUMP_ABSOLUTE:
1929 JUMPTO(oparg);
Guido van Rossum58da9312007-11-10 23:39:45 +00001930#if FAST_LOOPS
1931 /* Enabling this path speeds-up all while and for-loops by bypassing
1932 the per-loop checks for signals. By default, this should be turned-off
1933 because it prevents detection of a control-break in tight loops like
1934 "while 1: pass". Compile with this option turned-on when you need
1935 the speed-up and do not need break checking inside tight loops (ones
1936 that contain only instructions ending with goto fast_next_opcode).
1937 */
1938 goto fast_next_opcode;
1939#else
Neil Schemenauerca2a2f12003-05-30 23:59:44 +00001940 continue;
Guido van Rossum58da9312007-11-10 23:39:45 +00001941#endif
Guido van Rossumac7be682001-01-17 15:42:30 +00001942
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001943 case GET_ITER:
1944 /* before: [obj]; after [getiter(obj)] */
Raymond Hettinger663004b2003-01-09 15:24:30 +00001945 v = TOP();
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001946 x = PyObject_GetIter(v);
1947 Py_DECREF(v);
1948 if (x != NULL) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00001949 SET_TOP(x);
Raymond Hettinger7dc52212003-03-16 20:14:44 +00001950 PREDICT(FOR_ITER);
Guido van Rossum213c7a62001-04-23 14:08:49 +00001951 continue;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001952 }
Raymond Hettinger8bb90a52003-01-14 12:43:10 +00001953 STACKADJ(-1);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001954 break;
1955
Raymond Hettinger7dc52212003-03-16 20:14:44 +00001956 PREDICTED_WITH_ARG(FOR_ITER);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001957 case FOR_ITER:
1958 /* before: [iter]; after: [iter, iter()] *or* [] */
1959 v = TOP();
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00001960 x = (*v->ob_type->tp_iternext)(v);
Guido van Rossum213c7a62001-04-23 14:08:49 +00001961 if (x != NULL) {
1962 PUSH(x);
Raymond Hettinger7dc52212003-03-16 20:14:44 +00001963 PREDICT(STORE_FAST);
1964 PREDICT(UNPACK_SEQUENCE);
Guido van Rossum213c7a62001-04-23 14:08:49 +00001965 continue;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001966 }
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00001967 if (PyErr_Occurred()) {
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001968 if (!PyErr_ExceptionMatches(
1969 PyExc_StopIteration))
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00001970 break;
1971 PyErr_Clear();
Guido van Rossum213c7a62001-04-23 14:08:49 +00001972 }
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00001973 /* iterator ended normally */
1974 x = v = POP();
1975 Py_DECREF(v);
1976 JUMPBY(oparg);
1977 continue;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00001978
Raymond Hettinger2d783e92004-03-12 09:12:22 +00001979 case BREAK_LOOP:
1980 why = WHY_BREAK;
1981 goto fast_block_end;
1982
1983 case CONTINUE_LOOP:
Christian Heimes217cfd12007-12-02 14:31:20 +00001984 retval = PyLong_FromLong(oparg);
Thomas Wouters477c8d52006-05-27 19:21:47 +00001985 if (!retval) {
1986 x = NULL;
1987 break;
1988 }
Raymond Hettinger2d783e92004-03-12 09:12:22 +00001989 why = WHY_CONTINUE;
1990 goto fast_block_end;
1991
Guido van Rossum374a9221991-04-04 10:40:29 +00001992 case SETUP_LOOP:
1993 case SETUP_EXCEPT:
1994 case SETUP_FINALLY:
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001995 /* NOTE: If you add any new block-setup opcodes that
1996 are not try/except/finally handlers, you may need
1997 to update the PyGen_NeedsFinalizing() function.
1998 */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001999
Guido van Rossumb209a111997-04-29 18:18:01 +00002000 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002001 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002002 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00002003
Guido van Rossumc2e20742006-02-27 22:32:47 +00002004 case WITH_CLEANUP:
2005 {
2006 /* TOP is the context.__exit__ bound method.
2007 Below that are 1-3 values indicating how/why
2008 we entered the finally clause:
2009 - SECOND = None
Guido van Rossumf6694362006-03-10 02:28:35 +00002010 - (SECOND, THIRD) = (WHY_{RETURN,CONTINUE}), retval
Guido van Rossumc2e20742006-02-27 22:32:47 +00002011 - SECOND = WHY_*; no retval below it
2012 - (SECOND, THIRD, FOURTH) = exc_info()
2013 In the last case, we must call
2014 TOP(SECOND, THIRD, FOURTH)
2015 otherwise we must call
2016 TOP(None, None, None)
Guido van Rossum1a5e21e2006-02-28 21:57:43 +00002017
2018 In addition, if the stack represents an exception,
Guido van Rossumf6694362006-03-10 02:28:35 +00002019 *and* the function call returns a 'true' value, we
2020 "zap" this information, to prevent END_FINALLY from
2021 re-raising the exception. (But non-local gotos
2022 should still be resumed.)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002023 */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002024
Guido van Rossumc2e20742006-02-27 22:32:47 +00002025 x = TOP();
2026 u = SECOND();
Christian Heimes217cfd12007-12-02 14:31:20 +00002027 if (PyLong_Check(u) || u == Py_None) {
Guido van Rossumc2e20742006-02-27 22:32:47 +00002028 u = v = w = Py_None;
2029 }
2030 else {
2031 v = THIRD();
2032 w = FOURTH();
2033 }
Guido van Rossumf6694362006-03-10 02:28:35 +00002034 /* XXX Not the fastest way to call it... */
2035 x = PyObject_CallFunctionObjArgs(x, u, v, w, NULL);
2036 if (x == NULL)
2037 break; /* Go to error exit */
2038 if (u != Py_None && PyObject_IsTrue(x)) {
2039 /* There was an exception and a true return */
2040 Py_DECREF(x);
2041 x = TOP(); /* Again */
2042 STACKADJ(-3);
2043 Py_INCREF(Py_None);
2044 SET_TOP(Py_None);
2045 Py_DECREF(x);
2046 Py_DECREF(u);
2047 Py_DECREF(v);
2048 Py_DECREF(w);
2049 } else {
2050 /* Let END_FINALLY do its thing */
2051 Py_DECREF(x);
2052 x = POP();
2053 Py_DECREF(x);
2054 }
Guido van Rossumc2e20742006-02-27 22:32:47 +00002055 break;
2056 }
2057
Guido van Rossumf10570b1995-07-07 22:53:21 +00002058 case CALL_FUNCTION:
Armin Rigo8817fcd2004-06-17 10:22:40 +00002059 {
2060 PyObject **sp;
Jeremy Hylton985eba52003-02-05 23:13:00 +00002061 PCALL(PCALL_ALL);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002062 sp = stack_pointer;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002063#ifdef WITH_TSC
Armin Rigo8817fcd2004-06-17 10:22:40 +00002064 x = call_function(&sp, oparg, &intr0, &intr1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002065#else
Armin Rigo8817fcd2004-06-17 10:22:40 +00002066 x = call_function(&sp, oparg);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002067#endif
Armin Rigo8817fcd2004-06-17 10:22:40 +00002068 stack_pointer = sp;
Jeremy Hyltone8c04322002-08-16 17:47:26 +00002069 PUSH(x);
2070 if (x != NULL)
2071 continue;
2072 break;
Armin Rigo8817fcd2004-06-17 10:22:40 +00002073 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002074
Jeremy Hylton76901512000-03-28 23:49:17 +00002075 case CALL_FUNCTION_VAR:
2076 case CALL_FUNCTION_KW:
2077 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00002078 {
Jeremy Hylton76901512000-03-28 23:49:17 +00002079 int na = oparg & 0xff;
2080 int nk = (oparg>>8) & 0xff;
2081 int flags = (opcode - CALL_FUNCTION) & 3;
Jeremy Hylton52820442001-01-03 23:52:36 +00002082 int n = na + 2 * nk;
Armin Rigo8817fcd2004-06-17 10:22:40 +00002083 PyObject **pfunc, *func, **sp;
Jeremy Hylton985eba52003-02-05 23:13:00 +00002084 PCALL(PCALL_ALL);
Jeremy Hylton52820442001-01-03 23:52:36 +00002085 if (flags & CALL_FLAG_VAR)
2086 n++;
2087 if (flags & CALL_FLAG_KW)
2088 n++;
2089 pfunc = stack_pointer - n - 1;
2090 func = *pfunc;
Jeremy Hylton52820442001-01-03 23:52:36 +00002091
Guido van Rossumac7be682001-01-17 15:42:30 +00002092 if (PyMethod_Check(func)
Jeremy Hylton52820442001-01-03 23:52:36 +00002093 && PyMethod_GET_SELF(func) != NULL) {
2094 PyObject *self = PyMethod_GET_SELF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00002095 Py_INCREF(self);
Jeremy Hylton52820442001-01-03 23:52:36 +00002096 func = PyMethod_GET_FUNCTION(func);
2097 Py_INCREF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00002098 Py_DECREF(*pfunc);
2099 *pfunc = self;
2100 na++;
2101 n++;
Guido van Rossumac7be682001-01-17 15:42:30 +00002102 } else
Jeremy Hylton52820442001-01-03 23:52:36 +00002103 Py_INCREF(func);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002104 sp = stack_pointer;
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002105 READ_TIMESTAMP(intr0);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002106 x = ext_do_call(func, &sp, flags, na, nk);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002107 READ_TIMESTAMP(intr1);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002108 stack_pointer = sp;
Jeremy Hylton76901512000-03-28 23:49:17 +00002109 Py_DECREF(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00002110
Jeremy Hylton76901512000-03-28 23:49:17 +00002111 while (stack_pointer > pfunc) {
Jeremy Hylton52820442001-01-03 23:52:36 +00002112 w = POP();
2113 Py_DECREF(w);
Jeremy Hylton76901512000-03-28 23:49:17 +00002114 }
2115 PUSH(x);
Guido van Rossumac7be682001-01-17 15:42:30 +00002116 if (x != NULL)
Jeremy Hylton52820442001-01-03 23:52:36 +00002117 continue;
Jeremy Hylton76901512000-03-28 23:49:17 +00002118 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00002119 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002120
Guido van Rossum0240b922007-02-26 21:23:50 +00002121 case MAKE_CLOSURE:
Guido van Rossum681d79a1995-07-18 14:51:37 +00002122 case MAKE_FUNCTION:
Guido van Rossum4f72a782006-10-27 23:31:49 +00002123 {
2124 int posdefaults = oparg & 0xff;
2125 int kwdefaults = (oparg>>8) & 0xff;
Neal Norwitzc1505362006-12-28 06:47:50 +00002126 int num_annotations = (oparg >> 16) & 0x7fff;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002127
Guido van Rossum681d79a1995-07-18 14:51:37 +00002128 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00002129 x = PyFunction_New(v, f->f_globals);
2130 Py_DECREF(v);
Guido van Rossum0240b922007-02-26 21:23:50 +00002131
2132 if (x != NULL && opcode == MAKE_CLOSURE) {
2133 v = POP();
2134 err = PyFunction_SetClosure(x, v);
2135 Py_DECREF(v);
2136 }
Neal Norwitzc1505362006-12-28 06:47:50 +00002137
2138 if (x != NULL && num_annotations > 0) {
2139 Py_ssize_t name_ix;
2140 u = POP(); /* names of args with annotations */
2141 v = PyDict_New();
2142 if (v == NULL) {
2143 Py_DECREF(x);
2144 x = NULL;
2145 break;
2146 }
2147 name_ix = PyTuple_Size(u);
2148 assert(num_annotations == name_ix+1);
2149 while (name_ix > 0) {
2150 --name_ix;
2151 t = PyTuple_GET_ITEM(u, name_ix);
2152 w = POP();
2153 /* XXX(nnorwitz): check for errors */
2154 PyDict_SetItem(v, t, w);
2155 Py_DECREF(w);
2156 }
2157
2158 err = PyFunction_SetAnnotations(x, v);
2159 Py_DECREF(v);
2160 Py_DECREF(u);
2161 }
2162
Guido van Rossum681d79a1995-07-18 14:51:37 +00002163 /* XXX Maybe this should be a separate opcode? */
Guido van Rossum4f72a782006-10-27 23:31:49 +00002164 if (x != NULL && posdefaults > 0) {
2165 v = PyTuple_New(posdefaults);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002166 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002167 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002168 x = NULL;
2169 break;
2170 }
Guido van Rossum4f72a782006-10-27 23:31:49 +00002171 while (--posdefaults >= 0) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002172 w = POP();
Guido van Rossum4f72a782006-10-27 23:31:49 +00002173 PyTuple_SET_ITEM(v, posdefaults, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002174 }
2175 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00002176 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002177 }
Guido van Rossum4f72a782006-10-27 23:31:49 +00002178 if (x != NULL && kwdefaults > 0) {
2179 v = PyDict_New();
2180 if (v == NULL) {
2181 Py_DECREF(x);
2182 x = NULL;
2183 break;
2184 }
2185 while (--kwdefaults >= 0) {
2186 w = POP(); /* default value */
2187 u = POP(); /* kw only arg name */
Neal Norwitzc1505362006-12-28 06:47:50 +00002188 /* XXX(nnorwitz): check for errors */
Guido van Rossum4f72a782006-10-27 23:31:49 +00002189 PyDict_SetItem(v, u, w);
Georg Brandl94ab0002007-02-26 13:58:18 +00002190 Py_DECREF(w);
2191 Py_DECREF(u);
Guido van Rossum4f72a782006-10-27 23:31:49 +00002192 }
2193 err = PyFunction_SetKwDefaults(x, v);
2194 Py_DECREF(v);
2195 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002196 PUSH(x);
2197 break;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002198 }
Guido van Rossum8861b741996-07-30 16:49:37 +00002199
2200 case BUILD_SLICE:
2201 if (oparg == 3)
2202 w = POP();
2203 else
2204 w = NULL;
2205 v = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00002206 u = TOP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00002207 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002208 Py_DECREF(u);
2209 Py_DECREF(v);
2210 Py_XDECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00002211 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002212 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00002213 break;
2214
Fred Drakeef8ace32000-08-24 00:32:09 +00002215 case EXTENDED_ARG:
2216 opcode = NEXTOP();
Raymond Hettinger5bed4562004-04-10 23:34:17 +00002217 oparg = oparg<<16 | NEXTARG();
Fred Drakeef8ace32000-08-24 00:32:09 +00002218 goto dispatch_opcode;
Guido van Rossum8861b741996-07-30 16:49:37 +00002219
Guido van Rossum374a9221991-04-04 10:40:29 +00002220 default:
2221 fprintf(stderr,
2222 "XXX lineno: %d, opcode: %d\n",
Michael W. Hudsondd32a912002-08-15 14:59:02 +00002223 PyCode_Addr2Line(f->f_code, f->f_lasti),
2224 opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00002225 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00002226 why = WHY_EXCEPTION;
2227 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002228
2229#ifdef CASE_TOO_BIG
2230 }
2231#endif
2232
Guido van Rossum374a9221991-04-04 10:40:29 +00002233 } /* switch */
2234
2235 on_error:
Guido van Rossumac7be682001-01-17 15:42:30 +00002236
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002237 READ_TIMESTAMP(inst1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002238
Guido van Rossum374a9221991-04-04 10:40:29 +00002239 /* Quickly continue if no error occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002240
Guido van Rossum374a9221991-04-04 10:40:29 +00002241 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002242 if (err == 0 && x != NULL) {
2243#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002244 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00002245 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00002246 fprintf(stderr,
2247 "XXX undetected error\n");
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002248 else {
2249#endif
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002250 READ_TIMESTAMP(loop1);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002251 continue; /* Normal, fast path */
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002252#ifdef CHECKEXC
2253 }
2254#endif
Guido van Rossum681d79a1995-07-18 14:51:37 +00002255 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002256 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00002257 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00002258 err = 0;
2259 }
2260
Guido van Rossum374a9221991-04-04 10:40:29 +00002261 /* Double-check exception status */
Guido van Rossumac7be682001-01-17 15:42:30 +00002262
Raymond Hettingerc8aa08b2004-04-11 14:59:33 +00002263 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002264 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002265 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002266 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00002267 why = WHY_EXCEPTION;
2268 }
2269 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002270#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00002271 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002272 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00002273 if (PyErr_Occurred()) {
Jeremy Hylton904ed862003-11-05 17:29:35 +00002274 char buf[1024];
2275 sprintf(buf, "Stack unwind with exception "
2276 "set and why=%d", why);
2277 Py_FatalError(buf);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002278 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002279 }
2280#endif
2281
2282 /* Log traceback info if this is a real exception */
Guido van Rossumac7be682001-01-17 15:42:30 +00002283
Guido van Rossum374a9221991-04-04 10:40:29 +00002284 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002285 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002286
Fred Drake8f51f542001-10-04 14:48:42 +00002287 if (tstate->c_tracefunc != NULL)
2288 call_exc_trace(tstate->c_tracefunc,
2289 tstate->c_traceobj, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00002290 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002291
Guido van Rossum374a9221991-04-04 10:40:29 +00002292 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
Guido van Rossumac7be682001-01-17 15:42:30 +00002293
Guido van Rossum374a9221991-04-04 10:40:29 +00002294 if (why == WHY_RERAISE)
2295 why = WHY_EXCEPTION;
2296
2297 /* Unwind stacks if a (pseudo) exception occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002298
Raymond Hettinger1dd83092004-02-06 18:32:33 +00002299fast_block_end:
Tim Peters8a5c3c72004-04-05 19:36:21 +00002300 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002301 PyTryBlock *b = PyFrame_BlockPop(f);
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002302
Tim Peters8a5c3c72004-04-05 19:36:21 +00002303 assert(why != WHY_YIELD);
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002304 if (b->b_type == SETUP_LOOP && why == WHY_CONTINUE) {
2305 /* For a continue inside a try block,
2306 don't pop the block for the loop. */
Thomas Wouters1ee64222001-09-24 19:32:01 +00002307 PyFrame_BlockSetup(f, b->b_type, b->b_handler,
2308 b->b_level);
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002309 why = WHY_NOT;
Christian Heimes217cfd12007-12-02 14:31:20 +00002310 JUMPTO(PyLong_AS_LONG(retval));
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002311 Py_DECREF(retval);
2312 break;
2313 }
2314
Guido van Rossum374a9221991-04-04 10:40:29 +00002315 while (STACK_LEVEL() > b->b_level) {
2316 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00002317 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00002318 }
2319 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
2320 why = WHY_NOT;
2321 JUMPTO(b->b_handler);
2322 break;
2323 }
2324 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00002325 (b->b_type == SETUP_EXCEPT &&
2326 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00002327 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002328 PyObject *exc, *val, *tb;
2329 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002330 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002331 val = Py_None;
2332 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00002333 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002334 /* Make the raw exception data
2335 available to the handler,
2336 so a program can emulate the
2337 Python main loop. Don't do
2338 this for 'finally'. */
2339 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00002340 PyErr_NormalizeException(
2341 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002342 set_exc_info(tstate,
2343 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002344 }
Jeremy Hyltonc6314892001-09-26 19:24:45 +00002345 if (tb == NULL) {
2346 Py_INCREF(Py_None);
2347 PUSH(Py_None);
2348 } else
2349 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002350 PUSH(val);
2351 PUSH(exc);
2352 }
2353 else {
Raymond Hettinger06032cb2004-04-06 09:37:35 +00002354 if (why & (WHY_RETURN | WHY_CONTINUE))
Guido van Rossum374a9221991-04-04 10:40:29 +00002355 PUSH(retval);
Christian Heimes217cfd12007-12-02 14:31:20 +00002356 v = PyLong_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00002357 PUSH(v);
2358 }
2359 why = WHY_NOT;
2360 JUMPTO(b->b_handler);
2361 break;
2362 }
2363 } /* unwind stack */
2364
2365 /* End the loop if we still have an error (or return) */
Guido van Rossumac7be682001-01-17 15:42:30 +00002366
Guido van Rossum374a9221991-04-04 10:40:29 +00002367 if (why != WHY_NOT)
2368 break;
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002369 READ_TIMESTAMP(loop1);
Guido van Rossumac7be682001-01-17 15:42:30 +00002370
Guido van Rossum374a9221991-04-04 10:40:29 +00002371 } /* main loop */
Guido van Rossumac7be682001-01-17 15:42:30 +00002372
Tim Peters8a5c3c72004-04-05 19:36:21 +00002373 assert(why != WHY_YIELD);
2374 /* Pop remaining stack entries. */
2375 while (!EMPTY()) {
2376 v = POP();
2377 Py_XDECREF(v);
Guido van Rossum35974fb2001-12-06 21:28:18 +00002378 }
2379
Tim Peters8a5c3c72004-04-05 19:36:21 +00002380 if (why != WHY_RETURN)
Guido van Rossum96a42c81992-01-12 02:29:51 +00002381 retval = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +00002382
Raymond Hettinger1dd83092004-02-06 18:32:33 +00002383fast_yield:
Fred Drake9e3ad782001-07-03 23:39:52 +00002384 if (tstate->use_tracing) {
Barry Warsawe2eca0b2005-08-15 18:14:19 +00002385 if (tstate->c_tracefunc) {
2386 if (why == WHY_RETURN || why == WHY_YIELD) {
2387 if (call_trace(tstate->c_tracefunc,
2388 tstate->c_traceobj, f,
2389 PyTrace_RETURN, retval)) {
2390 Py_XDECREF(retval);
2391 retval = NULL;
2392 why = WHY_EXCEPTION;
2393 }
2394 }
2395 else if (why == WHY_EXCEPTION) {
2396 call_trace_protected(tstate->c_tracefunc,
2397 tstate->c_traceobj, f,
Armin Rigo1c2d7e52005-09-20 18:34:01 +00002398 PyTrace_RETURN, NULL);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002399 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002400 }
Fred Drake8f51f542001-10-04 14:48:42 +00002401 if (tstate->c_profilefunc) {
Fred Drake4ec5d562001-10-04 19:26:43 +00002402 if (why == WHY_EXCEPTION)
2403 call_trace_protected(tstate->c_profilefunc,
2404 tstate->c_profileobj, f,
Armin Rigo1c2d7e52005-09-20 18:34:01 +00002405 PyTrace_RETURN, NULL);
Fred Drake4ec5d562001-10-04 19:26:43 +00002406 else if (call_trace(tstate->c_profilefunc,
2407 tstate->c_profileobj, f,
2408 PyTrace_RETURN, retval)) {
Fred Drake9e3ad782001-07-03 23:39:52 +00002409 Py_XDECREF(retval);
2410 retval = NULL;
2411 why = WHY_EXCEPTION;
2412 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002413 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002414 }
Guido van Rossuma4240131997-01-21 21:18:36 +00002415
Thomas Wouters477c8d52006-05-27 19:21:47 +00002416 if (tstate->frame->f_exc_type != NULL)
2417 reset_exc_info(tstate);
2418 else {
2419 assert(tstate->frame->f_exc_value == NULL);
2420 assert(tstate->frame->f_exc_traceback == NULL);
2421 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00002422
Tim Peters5ca576e2001-06-18 22:08:13 +00002423 /* pop frame */
Thomas Woutersce272b62007-09-19 21:19:28 +00002424exit_eval_frame:
Armin Rigo2b3eb402003-10-28 12:05:48 +00002425 Py_LeaveRecursiveCall();
Guido van Rossuma027efa1997-05-05 20:56:21 +00002426 tstate->frame = f->f_back;
Guido van Rossumac7be682001-01-17 15:42:30 +00002427
Guido van Rossum96a42c81992-01-12 02:29:51 +00002428 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00002429}
2430
Guido van Rossumc2e20742006-02-27 22:32:47 +00002431/* This is gonna seem *real weird*, but if you put some other code between
Martin v. Löwis8d97e332004-06-27 15:43:12 +00002432 PyEval_EvalFrame() and PyEval_EvalCodeEx() you will need to adjust
Guido van Rossumc2e20742006-02-27 22:32:47 +00002433 the test in the if statements in Misc/gdbinit (pystack and pystackv). */
Skip Montanaro786ea6b2004-03-01 15:44:05 +00002434
Tim Peters6d6c1a32001-08-02 04:15:00 +00002435PyObject *
2436PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals,
Tim Peters5ca576e2001-06-18 22:08:13 +00002437 PyObject **args, int argcount, PyObject **kws, int kwcount,
Guido van Rossum4f72a782006-10-27 23:31:49 +00002438 PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure)
Tim Peters5ca576e2001-06-18 22:08:13 +00002439{
2440 register PyFrameObject *f;
2441 register PyObject *retval = NULL;
2442 register PyObject **fastlocals, **freevars;
2443 PyThreadState *tstate = PyThreadState_GET();
2444 PyObject *x, *u;
2445
2446 if (globals == NULL) {
Tim Peters8a5c3c72004-04-05 19:36:21 +00002447 PyErr_SetString(PyExc_SystemError,
Jeremy Hylton910d7d42001-08-12 21:52:24 +00002448 "PyEval_EvalCodeEx: NULL globals");
Tim Peters5ca576e2001-06-18 22:08:13 +00002449 return NULL;
2450 }
2451
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00002452 assert(tstate != NULL);
Jeremy Hylton985eba52003-02-05 23:13:00 +00002453 assert(globals != NULL);
2454 f = PyFrame_New(tstate, co, globals, locals);
Tim Peters5ca576e2001-06-18 22:08:13 +00002455 if (f == NULL)
2456 return NULL;
2457
2458 fastlocals = f->f_localsplus;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002459 freevars = f->f_localsplus + co->co_nlocals;
Tim Peters5ca576e2001-06-18 22:08:13 +00002460
2461 if (co->co_argcount > 0 ||
Guido van Rossum4f72a782006-10-27 23:31:49 +00002462 co->co_kwonlyargcount > 0 ||
Tim Peters5ca576e2001-06-18 22:08:13 +00002463 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
2464 int i;
2465 int n = argcount;
2466 PyObject *kwdict = NULL;
2467 if (co->co_flags & CO_VARKEYWORDS) {
2468 kwdict = PyDict_New();
2469 if (kwdict == NULL)
2470 goto fail;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002471 i = co->co_argcount + co->co_kwonlyargcount;
Tim Peters5ca576e2001-06-18 22:08:13 +00002472 if (co->co_flags & CO_VARARGS)
2473 i++;
2474 SETLOCAL(i, kwdict);
2475 }
2476 if (argcount > co->co_argcount) {
2477 if (!(co->co_flags & CO_VARARGS)) {
2478 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002479 "%U() takes %s %d "
Guido van Rossum4f72a782006-10-27 23:31:49 +00002480 "%spositional argument%s (%d given)",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002481 co->co_name,
Tim Peters5ca576e2001-06-18 22:08:13 +00002482 defcount ? "at most" : "exactly",
2483 co->co_argcount,
2484 kwcount ? "non-keyword " : "",
2485 co->co_argcount == 1 ? "" : "s",
2486 argcount);
2487 goto fail;
2488 }
2489 n = co->co_argcount;
2490 }
2491 for (i = 0; i < n; i++) {
2492 x = args[i];
2493 Py_INCREF(x);
2494 SETLOCAL(i, x);
2495 }
2496 if (co->co_flags & CO_VARARGS) {
2497 u = PyTuple_New(argcount - n);
2498 if (u == NULL)
2499 goto fail;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002500 SETLOCAL(co->co_argcount + co->co_kwonlyargcount, u);
Tim Peters5ca576e2001-06-18 22:08:13 +00002501 for (i = n; i < argcount; i++) {
2502 x = args[i];
2503 Py_INCREF(x);
2504 PyTuple_SET_ITEM(u, i-n, x);
2505 }
2506 }
2507 for (i = 0; i < kwcount; i++) {
2508 PyObject *keyword = kws[2*i];
2509 PyObject *value = kws[2*i + 1];
2510 int j;
Neal Norwitzda059e32007-08-26 05:33:45 +00002511 if (keyword == NULL || !PyUnicode_Check(keyword)) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002512 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002513 "%U() keywords must be strings",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002514 co->co_name);
Tim Peters5ca576e2001-06-18 22:08:13 +00002515 goto fail;
2516 }
2517 /* XXX slow -- speed up using dictionary? */
Guido van Rossum4f72a782006-10-27 23:31:49 +00002518 for (j = 0;
2519 j < co->co_argcount + co->co_kwonlyargcount;
2520 j++) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002521 PyObject *nm = PyTuple_GET_ITEM(
2522 co->co_varnames, j);
2523 int cmp = PyObject_RichCompareBool(
2524 keyword, nm, Py_EQ);
2525 if (cmp > 0)
2526 break;
2527 else if (cmp < 0)
2528 goto fail;
2529 }
2530 /* Check errors from Compare */
2531 if (PyErr_Occurred())
2532 goto fail;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002533 if (j >= co->co_argcount + co->co_kwonlyargcount) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002534 if (kwdict == NULL) {
2535 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002536 "%U() got an unexpected "
Walter Dörwald573c08c2007-05-25 15:46:59 +00002537 "keyword argument '%S'",
2538 co->co_name,
2539 keyword);
Tim Peters5ca576e2001-06-18 22:08:13 +00002540 goto fail;
2541 }
2542 PyDict_SetItem(kwdict, keyword, value);
2543 }
2544 else {
2545 if (GETLOCAL(j) != NULL) {
2546 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002547 "%U() got multiple "
Tim Peters5ca576e2001-06-18 22:08:13 +00002548 "values for keyword "
Walter Dörwald573c08c2007-05-25 15:46:59 +00002549 "argument '%S'",
2550 co->co_name,
2551 keyword);
Tim Peters5ca576e2001-06-18 22:08:13 +00002552 goto fail;
2553 }
2554 Py_INCREF(value);
2555 SETLOCAL(j, value);
2556 }
2557 }
Guido van Rossum4f72a782006-10-27 23:31:49 +00002558 if (co->co_kwonlyargcount > 0) {
2559 for (i = co->co_argcount;
2560 i < co->co_argcount + co->co_kwonlyargcount;
2561 i++) {
Guido van Rossum29602e42006-11-22 04:45:33 +00002562 PyObject *name, *def;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002563 if (GETLOCAL(i) != NULL)
2564 continue;
Guido van Rossum29602e42006-11-22 04:45:33 +00002565 name = PyTuple_GET_ITEM(co->co_varnames, i);
2566 def = NULL;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002567 if (kwdefs != NULL)
2568 def = PyDict_GetItem(kwdefs, name);
2569 if (def != NULL) {
2570 Py_INCREF(def);
2571 SETLOCAL(i, def);
2572 continue;
2573 }
2574 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002575 "%U() needs keyword-only argument %S",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002576 co->co_name, name);
Guido van Rossum4f72a782006-10-27 23:31:49 +00002577 goto fail;
2578 }
2579 }
Tim Peters5ca576e2001-06-18 22:08:13 +00002580 if (argcount < co->co_argcount) {
2581 int m = co->co_argcount - defcount;
2582 for (i = argcount; i < m; i++) {
2583 if (GETLOCAL(i) == NULL) {
2584 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002585 "%U() takes %s %d "
Guido van Rossum4f72a782006-10-27 23:31:49 +00002586 "%spositional argument%s "
2587 "(%d given)",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002588 co->co_name,
Tim Peters5ca576e2001-06-18 22:08:13 +00002589 ((co->co_flags & CO_VARARGS) ||
2590 defcount) ? "at least"
2591 : "exactly",
2592 m, kwcount ? "non-keyword " : "",
2593 m == 1 ? "" : "s", i);
2594 goto fail;
2595 }
2596 }
2597 if (n > m)
2598 i = n - m;
2599 else
2600 i = 0;
2601 for (; i < defcount; i++) {
2602 if (GETLOCAL(m+i) == NULL) {
2603 PyObject *def = defs[i];
2604 Py_INCREF(def);
2605 SETLOCAL(m+i, def);
2606 }
2607 }
2608 }
2609 }
2610 else {
2611 if (argcount > 0 || kwcount > 0) {
2612 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002613 "%U() takes no arguments (%d given)",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002614 co->co_name,
Tim Peters5ca576e2001-06-18 22:08:13 +00002615 argcount + kwcount);
2616 goto fail;
2617 }
2618 }
2619 /* Allocate and initialize storage for cell vars, and copy free
2620 vars into frame. This isn't too efficient right now. */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002621 if (PyTuple_GET_SIZE(co->co_cellvars)) {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002622 int i, j, nargs, found;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002623 Py_UNICODE *cellname, *argname;
Tim Peters5ca576e2001-06-18 22:08:13 +00002624 PyObject *c;
2625
Amaury Forgeot d'Arce670bd42007-11-24 00:29:24 +00002626 nargs = co->co_argcount + co->co_kwonlyargcount;
Tim Peters5ca576e2001-06-18 22:08:13 +00002627 if (co->co_flags & CO_VARARGS)
2628 nargs++;
2629 if (co->co_flags & CO_VARKEYWORDS)
2630 nargs++;
2631
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002632 /* Initialize each cell var, taking into account
2633 cell vars that are initialized from arguments.
2634
2635 Should arrange for the compiler to put cellvars
2636 that are arguments at the beginning of the cellvars
2637 list so that we can march over it more efficiently?
2638 */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002639 for (i = 0; i < PyTuple_GET_SIZE(co->co_cellvars); ++i) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002640 cellname = PyUnicode_AS_UNICODE(
Tim Peters5ca576e2001-06-18 22:08:13 +00002641 PyTuple_GET_ITEM(co->co_cellvars, i));
2642 found = 0;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002643 for (j = 0; j < nargs; j++) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002644 argname = PyUnicode_AS_UNICODE(
Tim Peters5ca576e2001-06-18 22:08:13 +00002645 PyTuple_GET_ITEM(co->co_varnames, j));
Martin v. Löwis5b222132007-06-10 09:51:05 +00002646 if (Py_UNICODE_strcmp(cellname, argname) == 0) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002647 c = PyCell_New(GETLOCAL(j));
2648 if (c == NULL)
2649 goto fail;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002650 GETLOCAL(co->co_nlocals + i) = c;
Tim Peters5ca576e2001-06-18 22:08:13 +00002651 found = 1;
2652 break;
2653 }
Tim Peters5ca576e2001-06-18 22:08:13 +00002654 }
2655 if (found == 0) {
2656 c = PyCell_New(NULL);
2657 if (c == NULL)
2658 goto fail;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002659 SETLOCAL(co->co_nlocals + i, c);
Tim Peters5ca576e2001-06-18 22:08:13 +00002660 }
2661 }
Tim Peters5ca576e2001-06-18 22:08:13 +00002662 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002663 if (PyTuple_GET_SIZE(co->co_freevars)) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002664 int i;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002665 for (i = 0; i < PyTuple_GET_SIZE(co->co_freevars); ++i) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002666 PyObject *o = PyTuple_GET_ITEM(closure, i);
2667 Py_INCREF(o);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002668 freevars[PyTuple_GET_SIZE(co->co_cellvars) + i] = o;
Tim Peters5ca576e2001-06-18 22:08:13 +00002669 }
2670 }
2671
Tim Peters5ca576e2001-06-18 22:08:13 +00002672 if (co->co_flags & CO_GENERATOR) {
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00002673 /* Don't need to keep the reference to f_back, it will be set
2674 * when the generator is resumed. */
Tim Peters5ba58662001-07-16 02:29:45 +00002675 Py_XDECREF(f->f_back);
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00002676 f->f_back = NULL;
2677
Jeremy Hylton985eba52003-02-05 23:13:00 +00002678 PCALL(PCALL_GENERATOR);
2679
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00002680 /* Create a new generator that owns the ready to run frame
2681 * and return that as the value. */
Martin v. Löwise440e472004-06-01 15:22:42 +00002682 return PyGen_New(f);
Tim Peters5ca576e2001-06-18 22:08:13 +00002683 }
2684
Thomas Woutersce272b62007-09-19 21:19:28 +00002685 retval = PyEval_EvalFrameEx(f,0);
Tim Peters5ca576e2001-06-18 22:08:13 +00002686
Thomas Woutersce272b62007-09-19 21:19:28 +00002687fail: /* Jump here from prelude on failure */
Tim Peters5ca576e2001-06-18 22:08:13 +00002688
Tim Petersb13680b2001-11-27 23:29:29 +00002689 /* decref'ing the frame can cause __del__ methods to get invoked,
2690 which can call back into Python. While we're done with the
2691 current Python frame (f), the associated C stack is still in use,
2692 so recursion_depth must be boosted for the duration.
2693 */
2694 assert(tstate != NULL);
2695 ++tstate->recursion_depth;
Thomas Woutersce272b62007-09-19 21:19:28 +00002696 Py_DECREF(f);
Tim Petersb13680b2001-11-27 23:29:29 +00002697 --tstate->recursion_depth;
Tim Peters5ca576e2001-06-18 22:08:13 +00002698 return retval;
2699}
2700
2701
Guido van Rossumc9fbb722003-03-01 03:36:33 +00002702/* Implementation notes for set_exc_info() and reset_exc_info():
2703
2704- Below, 'exc_ZZZ' stands for 'exc_type', 'exc_value' and
2705 'exc_traceback'. These always travel together.
2706
2707- tstate->curexc_ZZZ is the "hot" exception that is set by
2708 PyErr_SetString(), cleared by PyErr_Clear(), and so on.
2709
2710- Once an exception is caught by an except clause, it is transferred
2711 from tstate->curexc_ZZZ to tstate->exc_ZZZ, from which sys.exc_info()
2712 can pick it up. This is the primary task of set_exc_info().
Thomas Wouters477c8d52006-05-27 19:21:47 +00002713 XXX That can't be right: set_exc_info() doesn't look at tstate->curexc_ZZZ.
Guido van Rossumc9fbb722003-03-01 03:36:33 +00002714
2715- Now let me explain the complicated dance with frame->f_exc_ZZZ.
2716
2717 Long ago, when none of this existed, there were just a few globals:
2718 one set corresponding to the "hot" exception, and one set
2719 corresponding to sys.exc_ZZZ. (Actually, the latter weren't C
2720 globals; they were simply stored as sys.exc_ZZZ. For backwards
2721 compatibility, they still are!) The problem was that in code like
2722 this:
2723
2724 try:
2725 "something that may fail"
2726 except "some exception":
2727 "do something else first"
2728 "print the exception from sys.exc_ZZZ."
2729
2730 if "do something else first" invoked something that raised and caught
2731 an exception, sys.exc_ZZZ were overwritten. That was a frequent
2732 cause of subtle bugs. I fixed this by changing the semantics as
2733 follows:
2734
2735 - Within one frame, sys.exc_ZZZ will hold the last exception caught
2736 *in that frame*.
2737
2738 - But initially, and as long as no exception is caught in a given
2739 frame, sys.exc_ZZZ will hold the last exception caught in the
2740 previous frame (or the frame before that, etc.).
2741
2742 The first bullet fixed the bug in the above example. The second
2743 bullet was for backwards compatibility: it was (and is) common to
2744 have a function that is called when an exception is caught, and to
2745 have that function access the caught exception via sys.exc_ZZZ.
2746 (Example: traceback.print_exc()).
2747
2748 At the same time I fixed the problem that sys.exc_ZZZ weren't
2749 thread-safe, by introducing sys.exc_info() which gets it from tstate;
2750 but that's really a separate improvement.
2751
2752 The reset_exc_info() function in ceval.c restores the tstate->exc_ZZZ
2753 variables to what they were before the current frame was called. The
2754 set_exc_info() function saves them on the frame so that
2755 reset_exc_info() can restore them. The invariant is that
2756 frame->f_exc_ZZZ is NULL iff the current frame never caught an
2757 exception (where "catching" an exception applies only to successful
2758 except clauses); and if the current frame ever caught an exception,
2759 frame->f_exc_ZZZ is the exception that was stored in tstate->exc_ZZZ
2760 at the start of the current frame.
2761
2762*/
2763
Guido van Rossuma027efa1997-05-05 20:56:21 +00002764static void
Guido van Rossumac7be682001-01-17 15:42:30 +00002765set_exc_info(PyThreadState *tstate,
2766 PyObject *type, PyObject *value, PyObject *tb)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002767{
Thomas Wouters477c8d52006-05-27 19:21:47 +00002768 PyFrameObject *frame = tstate->frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002769 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00002770
Thomas Wouters477c8d52006-05-27 19:21:47 +00002771 assert(type != NULL);
2772 assert(frame != NULL);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002773 if (frame->f_exc_type == NULL) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00002774 assert(frame->f_exc_value == NULL);
2775 assert(frame->f_exc_traceback == NULL);
2776 /* This frame didn't catch an exception before. */
2777 /* Save previous exception of this thread in this frame. */
Guido van Rossuma027efa1997-05-05 20:56:21 +00002778 if (tstate->exc_type == NULL) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00002779 /* XXX Why is this set to Py_None? */
Guido van Rossuma027efa1997-05-05 20:56:21 +00002780 Py_INCREF(Py_None);
2781 tstate->exc_type = Py_None;
2782 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002783 Py_INCREF(tstate->exc_type);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002784 Py_XINCREF(tstate->exc_value);
2785 Py_XINCREF(tstate->exc_traceback);
2786 frame->f_exc_type = tstate->exc_type;
2787 frame->f_exc_value = tstate->exc_value;
2788 frame->f_exc_traceback = tstate->exc_traceback;
2789 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002790 /* Set new exception for this thread. */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002791 tmp_type = tstate->exc_type;
2792 tmp_value = tstate->exc_value;
2793 tmp_tb = tstate->exc_traceback;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002794 Py_INCREF(type);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002795 Py_XINCREF(value);
2796 Py_XINCREF(tb);
2797 tstate->exc_type = type;
2798 tstate->exc_value = value;
2799 tstate->exc_traceback = tb;
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002800 PyException_SetTraceback(value, tb);
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002801 Py_XDECREF(tmp_type);
2802 Py_XDECREF(tmp_value);
2803 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002804}
2805
2806static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002807reset_exc_info(PyThreadState *tstate)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002808{
2809 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002810 PyObject *tmp_type, *tmp_value, *tmp_tb;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002811
2812 /* It's a precondition that the thread state's frame caught an
2813 * exception -- verify in a debug build.
2814 */
2815 assert(tstate != NULL);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002816 frame = tstate->frame;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002817 assert(frame != NULL);
2818 assert(frame->f_exc_type != NULL);
2819
2820 /* Copy the frame's exception info back to the thread state. */
2821 tmp_type = tstate->exc_type;
2822 tmp_value = tstate->exc_value;
2823 tmp_tb = tstate->exc_traceback;
2824 Py_INCREF(frame->f_exc_type);
2825 Py_XINCREF(frame->f_exc_value);
2826 Py_XINCREF(frame->f_exc_traceback);
2827 tstate->exc_type = frame->f_exc_type;
2828 tstate->exc_value = frame->f_exc_value;
2829 tstate->exc_traceback = frame->f_exc_traceback;
2830 Py_XDECREF(tmp_type);
2831 Py_XDECREF(tmp_value);
2832 Py_XDECREF(tmp_tb);
2833
Thomas Wouters477c8d52006-05-27 19:21:47 +00002834 /* Clear the frame's exception info. */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002835 tmp_type = frame->f_exc_type;
2836 tmp_value = frame->f_exc_value;
2837 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002838 frame->f_exc_type = NULL;
2839 frame->f_exc_value = NULL;
2840 frame->f_exc_traceback = NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002841 Py_DECREF(tmp_type);
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002842 Py_XDECREF(tmp_value);
2843 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002844}
2845
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002846/* Logic for the raise statement (too complicated for inlining).
2847 This *consumes* a reference count to each of its arguments. */
Raymond Hettinger7c958652004-04-06 10:11:10 +00002848static enum why_code
Collin Winter828f04a2007-08-31 00:04:24 +00002849do_raise(PyObject *exc, PyObject *cause)
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002850{
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002851 PyObject *type = NULL, *value = NULL, *tb = NULL;
Collin Winter828f04a2007-08-31 00:04:24 +00002852
2853 if (exc == NULL) {
Guido van Rossumd295f121998-04-09 21:39:57 +00002854 /* Reraise */
Nicholas Bastine5662ae2004-03-24 22:22:12 +00002855 PyThreadState *tstate = PyThreadState_GET();
Collin Winter828f04a2007-08-31 00:04:24 +00002856 type = tstate->exc_type;
Guido van Rossumd295f121998-04-09 21:39:57 +00002857 value = tstate->exc_value;
2858 tb = tstate->exc_traceback;
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002859 if (type == Py_None) {
2860 PyErr_SetString(PyExc_RuntimeError,
2861 "No active exception to reraise");
2862 return WHY_EXCEPTION;
2863 }
2864 Py_XINCREF(type);
Guido van Rossumd295f121998-04-09 21:39:57 +00002865 Py_XINCREF(value);
2866 Py_XINCREF(tb);
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002867 PyErr_Restore(type, value, tb);
2868 return WHY_RERAISE;
Guido van Rossumd295f121998-04-09 21:39:57 +00002869 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002870
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002871 /* We support the following forms of raise:
Collin Winter828f04a2007-08-31 00:04:24 +00002872 raise
2873 raise <instance>
2874 raise <type> */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002875
Collin Winter828f04a2007-08-31 00:04:24 +00002876 if (PyExceptionClass_Check(exc)) {
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002877 type = exc;
2878 value = PyObject_CallObject(exc, NULL);
Collin Winter828f04a2007-08-31 00:04:24 +00002879 if (value == NULL)
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002880 goto raise_error;
2881 }
Collin Winter828f04a2007-08-31 00:04:24 +00002882 else if (PyExceptionInstance_Check(exc)) {
2883 value = exc;
2884 type = PyExceptionInstance_Class(exc);
Guido van Rossumb209a111997-04-29 18:18:01 +00002885 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002886 }
2887 else {
2888 /* Not something you can raise. You get an exception
2889 anyway, just not what you specified :-) */
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002890 Py_DECREF(exc);
Guido van Rossum45aecf42006-03-15 04:58:47 +00002891 PyErr_SetString(PyExc_TypeError,
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002892 "exceptions must derive from BaseException");
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002893 goto raise_error;
2894 }
Collin Winter828f04a2007-08-31 00:04:24 +00002895
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002896 tb = PyException_GetTraceback(value);
2897 if (cause) {
2898 PyObject *fixed_cause;
2899 if (PyExceptionClass_Check(cause)) {
2900 fixed_cause = PyObject_CallObject(cause, NULL);
2901 if (fixed_cause == NULL)
2902 goto raise_error;
2903 Py_DECREF(cause);
2904 }
2905 else if (PyExceptionInstance_Check(cause)) {
2906 fixed_cause = cause;
2907 }
2908 else {
2909 PyErr_SetString(PyExc_TypeError,
2910 "exception causes must derive from "
2911 "BaseException");
2912 goto raise_error;
2913 }
2914 PyException_SetCause(value, fixed_cause);
2915 }
Collin Winter828f04a2007-08-31 00:04:24 +00002916
Guido van Rossumb209a111997-04-29 18:18:01 +00002917 PyErr_Restore(type, value, tb);
Collin Winter828f04a2007-08-31 00:04:24 +00002918 return WHY_EXCEPTION;
2919
2920raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002921 Py_XDECREF(value);
2922 Py_XDECREF(type);
2923 Py_XDECREF(tb);
Collin Winter1966f1c2007-09-01 20:26:44 +00002924 Py_XDECREF(cause);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002925 return WHY_EXCEPTION;
2926}
2927
Tim Petersd6d010b2001-06-21 02:49:55 +00002928/* Iterate v argcnt times and store the results on the stack (via decreasing
Guido van Rossum0368b722007-05-11 16:50:42 +00002929 sp). Return 1 for success, 0 if error.
2930
2931 If argcntafter == -1, do a simple unpack. If it is >= 0, do an unpack
2932 with a variable target.
2933*/
Tim Petersd6d010b2001-06-21 02:49:55 +00002934
Barry Warsawe42b18f1997-08-25 22:13:04 +00002935static int
Guido van Rossum0368b722007-05-11 16:50:42 +00002936unpack_iterable(PyObject *v, int argcnt, int argcntafter, PyObject **sp)
Barry Warsawe42b18f1997-08-25 22:13:04 +00002937{
Guido van Rossum0368b722007-05-11 16:50:42 +00002938 int i = 0, j = 0;
2939 Py_ssize_t ll = 0;
Tim Petersd6d010b2001-06-21 02:49:55 +00002940 PyObject *it; /* iter(v) */
Barry Warsawe42b18f1997-08-25 22:13:04 +00002941 PyObject *w;
Guido van Rossum0368b722007-05-11 16:50:42 +00002942 PyObject *l = NULL; /* variable list */
Guido van Rossumac7be682001-01-17 15:42:30 +00002943
Tim Petersd6d010b2001-06-21 02:49:55 +00002944 assert(v != NULL);
2945
2946 it = PyObject_GetIter(v);
2947 if (it == NULL)
2948 goto Error;
2949
2950 for (; i < argcnt; i++) {
2951 w = PyIter_Next(it);
2952 if (w == NULL) {
2953 /* Iterator done, via error or exhaustion. */
2954 if (!PyErr_Occurred()) {
2955 PyErr_Format(PyExc_ValueError,
2956 "need more than %d value%s to unpack",
2957 i, i == 1 ? "" : "s");
2958 }
2959 goto Error;
Barry Warsawe42b18f1997-08-25 22:13:04 +00002960 }
2961 *--sp = w;
2962 }
Tim Petersd6d010b2001-06-21 02:49:55 +00002963
Guido van Rossum0368b722007-05-11 16:50:42 +00002964 if (argcntafter == -1) {
2965 /* We better have exhausted the iterator now. */
2966 w = PyIter_Next(it);
2967 if (w == NULL) {
2968 if (PyErr_Occurred())
2969 goto Error;
2970 Py_DECREF(it);
2971 return 1;
2972 }
2973 Py_DECREF(w);
2974 PyErr_SetString(PyExc_ValueError, "too many values to unpack");
2975 goto Error;
Barry Warsawe42b18f1997-08-25 22:13:04 +00002976 }
Guido van Rossum0368b722007-05-11 16:50:42 +00002977
2978 l = PySequence_List(it);
2979 if (l == NULL)
2980 goto Error;
2981 *--sp = l;
2982 i++;
2983
2984 ll = PyList_GET_SIZE(l);
2985 if (ll < argcntafter) {
2986 PyErr_Format(PyExc_ValueError, "need more than %zd values to unpack",
2987 argcnt + ll);
2988 goto Error;
2989 }
2990
2991 /* Pop the "after-variable" args off the list. */
2992 for (j = argcntafter; j > 0; j--, i++) {
2993 *--sp = PyList_GET_ITEM(l, ll - j);
2994 }
2995 /* Resize the list. */
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00002996 Py_Size(l) = ll - argcntafter;
Guido van Rossum0368b722007-05-11 16:50:42 +00002997 Py_DECREF(it);
2998 return 1;
2999
Tim Petersd6d010b2001-06-21 02:49:55 +00003000Error:
Barry Warsaw91010551997-08-25 22:30:51 +00003001 for (; i > 0; i--, sp++)
3002 Py_DECREF(*sp);
Tim Petersd6d010b2001-06-21 02:49:55 +00003003 Py_XDECREF(it);
Barry Warsawe42b18f1997-08-25 22:13:04 +00003004 return 0;
3005}
3006
3007
Guido van Rossum96a42c81992-01-12 02:29:51 +00003008#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00003009static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003010prtrace(PyObject *v, char *str)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003011{
Guido van Rossum3f5da241990-12-20 15:06:42 +00003012 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00003013 if (PyObject_Print(v, stdout, 0) != 0)
3014 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00003015 printf("\n");
Guido van Rossumcc229ea2000-05-04 00:55:17 +00003016 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003017}
Guido van Rossum3f5da241990-12-20 15:06:42 +00003018#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003019
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003020static void
Fred Drake5755ce62001-06-27 19:19:46 +00003021call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003022{
Guido van Rossumb209a111997-04-29 18:18:01 +00003023 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003024 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00003025 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00003026 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003027 value = Py_None;
3028 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00003029 }
Raymond Hettinger8ae46892003-10-12 19:09:37 +00003030 arg = PyTuple_Pack(3, type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003031 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003032 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003033 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003034 }
Fred Drake5755ce62001-06-27 19:19:46 +00003035 err = call_trace(func, self, f, PyTrace_EXCEPTION, arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00003036 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003037 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00003038 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003039 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00003040 Py_XDECREF(type);
3041 Py_XDECREF(value);
3042 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003043 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003044}
3045
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003046static int
Fred Drake4ec5d562001-10-04 19:26:43 +00003047call_trace_protected(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003048 int what, PyObject *arg)
Fred Drake4ec5d562001-10-04 19:26:43 +00003049{
3050 PyObject *type, *value, *traceback;
3051 int err;
3052 PyErr_Fetch(&type, &value, &traceback);
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003053 err = call_trace(func, obj, frame, what, arg);
Fred Drake4ec5d562001-10-04 19:26:43 +00003054 if (err == 0)
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003055 {
Fred Drake4ec5d562001-10-04 19:26:43 +00003056 PyErr_Restore(type, value, traceback);
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003057 return 0;
3058 }
Fred Drake4ec5d562001-10-04 19:26:43 +00003059 else {
3060 Py_XDECREF(type);
3061 Py_XDECREF(value);
3062 Py_XDECREF(traceback);
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003063 return -1;
Fred Drake4ec5d562001-10-04 19:26:43 +00003064 }
3065}
3066
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003067static int
Fred Drake5755ce62001-06-27 19:19:46 +00003068call_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
3069 int what, PyObject *arg)
Guido van Rossum96a42c81992-01-12 02:29:51 +00003070{
Fred Drake5755ce62001-06-27 19:19:46 +00003071 register PyThreadState *tstate = frame->f_tstate;
3072 int result;
3073 if (tstate->tracing)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003074 return 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +00003075 tstate->tracing++;
Fred Drake9e3ad782001-07-03 23:39:52 +00003076 tstate->use_tracing = 0;
Fred Drake5755ce62001-06-27 19:19:46 +00003077 result = func(obj, frame, what, arg);
Fred Drake9e3ad782001-07-03 23:39:52 +00003078 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3079 || (tstate->c_profilefunc != NULL));
Guido van Rossuma027efa1997-05-05 20:56:21 +00003080 tstate->tracing--;
Fred Drake5755ce62001-06-27 19:19:46 +00003081 return result;
Guido van Rossum96a42c81992-01-12 02:29:51 +00003082}
3083
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00003084PyObject *
3085_PyEval_CallTracing(PyObject *func, PyObject *args)
3086{
3087 PyFrameObject *frame = PyEval_GetFrame();
3088 PyThreadState *tstate = frame->f_tstate;
3089 int save_tracing = tstate->tracing;
3090 int save_use_tracing = tstate->use_tracing;
3091 PyObject *result;
3092
3093 tstate->tracing = 0;
3094 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3095 || (tstate->c_profilefunc != NULL));
3096 result = PyObject_Call(func, args, NULL);
3097 tstate->tracing = save_tracing;
3098 tstate->use_tracing = save_use_tracing;
3099 return result;
3100}
3101
Michael W. Hudson006c7522002-11-08 13:08:46 +00003102static int
Tim Peters8a5c3c72004-04-05 19:36:21 +00003103maybe_call_line_trace(Py_tracefunc func, PyObject *obj,
Armin Rigobf57a142004-03-22 19:24:58 +00003104 PyFrameObject *frame, int *instr_lb, int *instr_ub,
3105 int *instr_prev)
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003106{
Michael W. Hudson006c7522002-11-08 13:08:46 +00003107 int result = 0;
3108
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003109 /* If the last instruction executed isn't in the current
3110 instruction window, reset the window. If the last
3111 instruction happens to fall at the start of a line or if it
3112 represents a jump backwards, call the trace function.
3113 */
Michael W. Hudson53d58bb2002-08-30 13:09:51 +00003114 if ((frame->f_lasti < *instr_lb || frame->f_lasti >= *instr_ub)) {
Thomas Woutersce272b62007-09-19 21:19:28 +00003115 int line;
3116 PyAddrPair bounds;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003117
Thomas Woutersce272b62007-09-19 21:19:28 +00003118 line = PyCode_CheckLineNumber(frame->f_code, frame->f_lasti,
3119 &bounds);
3120 if (line >= 0) {
Michael W. Hudson02ff6a92002-09-11 15:36:32 +00003121 frame->f_lineno = line;
Tim Peters8a5c3c72004-04-05 19:36:21 +00003122 result = call_trace(func, obj, frame,
Michael W. Hudson006c7522002-11-08 13:08:46 +00003123 PyTrace_LINE, Py_None);
Thomas Woutersce272b62007-09-19 21:19:28 +00003124 }
3125 *instr_lb = bounds.ap_lower;
3126 *instr_ub = bounds.ap_upper;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003127 }
Armin Rigobf57a142004-03-22 19:24:58 +00003128 else if (frame->f_lasti <= *instr_prev) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003129 result = call_trace(func, obj, frame, PyTrace_LINE, Py_None);
Armin Rigobf57a142004-03-22 19:24:58 +00003130 }
3131 *instr_prev = frame->f_lasti;
Michael W. Hudson006c7522002-11-08 13:08:46 +00003132 return result;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003133}
3134
Fred Drake5755ce62001-06-27 19:19:46 +00003135void
3136PyEval_SetProfile(Py_tracefunc func, PyObject *arg)
Fred Draked0838392001-06-16 21:02:31 +00003137{
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003138 PyThreadState *tstate = PyThreadState_GET();
Fred Drake5755ce62001-06-27 19:19:46 +00003139 PyObject *temp = tstate->c_profileobj;
3140 Py_XINCREF(arg);
3141 tstate->c_profilefunc = NULL;
3142 tstate->c_profileobj = NULL;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003143 /* Must make sure that tracing is not ignored if 'temp' is freed */
Fred Drake9e3ad782001-07-03 23:39:52 +00003144 tstate->use_tracing = tstate->c_tracefunc != NULL;
Fred Drake5755ce62001-06-27 19:19:46 +00003145 Py_XDECREF(temp);
3146 tstate->c_profilefunc = func;
3147 tstate->c_profileobj = arg;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003148 /* Flag that tracing or profiling is turned on */
Fred Drake9e3ad782001-07-03 23:39:52 +00003149 tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
Fred Drake5755ce62001-06-27 19:19:46 +00003150}
3151
3152void
3153PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
3154{
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003155 PyThreadState *tstate = PyThreadState_GET();
Fred Drake5755ce62001-06-27 19:19:46 +00003156 PyObject *temp = tstate->c_traceobj;
3157 Py_XINCREF(arg);
3158 tstate->c_tracefunc = NULL;
3159 tstate->c_traceobj = NULL;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003160 /* Must make sure that profiling is not ignored if 'temp' is freed */
Fred Drake9e3ad782001-07-03 23:39:52 +00003161 tstate->use_tracing = tstate->c_profilefunc != NULL;
Fred Drake5755ce62001-06-27 19:19:46 +00003162 Py_XDECREF(temp);
3163 tstate->c_tracefunc = func;
3164 tstate->c_traceobj = arg;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003165 /* Flag that tracing or profiling is turned on */
Fred Drake9e3ad782001-07-03 23:39:52 +00003166 tstate->use_tracing = ((func != NULL)
3167 || (tstate->c_profilefunc != NULL));
Fred Draked0838392001-06-16 21:02:31 +00003168}
3169
Guido van Rossumb209a111997-04-29 18:18:01 +00003170PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003171PyEval_GetBuiltins(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00003172{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003173 PyFrameObject *current_frame = PyEval_GetFrame();
Guido van Rossum6135a871995-01-09 17:53:26 +00003174 if (current_frame == NULL)
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003175 return PyThreadState_GET()->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00003176 else
3177 return current_frame->f_builtins;
3178}
3179
Guido van Rossumb209a111997-04-29 18:18:01 +00003180PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003181PyEval_GetLocals(void)
Guido van Rossum5b722181993-03-30 17:46:03 +00003182{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003183 PyFrameObject *current_frame = PyEval_GetFrame();
Guido van Rossum5b722181993-03-30 17:46:03 +00003184 if (current_frame == NULL)
3185 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00003186 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00003187 return current_frame->f_locals;
3188}
3189
Guido van Rossumb209a111997-04-29 18:18:01 +00003190PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003191PyEval_GetGlobals(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003192{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003193 PyFrameObject *current_frame = PyEval_GetFrame();
Guido van Rossum3f5da241990-12-20 15:06:42 +00003194 if (current_frame == NULL)
3195 return NULL;
3196 else
3197 return current_frame->f_globals;
3198}
3199
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003200PyFrameObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003201PyEval_GetFrame(void)
Guido van Rossume59214e1994-08-30 08:01:59 +00003202{
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003203 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003204 return _PyThreadState_GetFrame(tstate);
Guido van Rossume59214e1994-08-30 08:01:59 +00003205}
3206
Guido van Rossum6135a871995-01-09 17:53:26 +00003207int
Tim Peters5ba58662001-07-16 02:29:45 +00003208PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
Jeremy Hylton061d1062001-03-22 02:32:48 +00003209{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003210 PyFrameObject *current_frame = PyEval_GetFrame();
Just van Rossum3aaf42c2003-02-10 08:21:10 +00003211 int result = cf->cf_flags != 0;
Tim Peters5ba58662001-07-16 02:29:45 +00003212
3213 if (current_frame != NULL) {
3214 const int codeflags = current_frame->f_code->co_flags;
Tim Peterse2c18e92001-08-17 20:47:47 +00003215 const int compilerflags = codeflags & PyCF_MASK;
3216 if (compilerflags) {
Tim Peters5ba58662001-07-16 02:29:45 +00003217 result = 1;
Tim Peterse2c18e92001-08-17 20:47:47 +00003218 cf->cf_flags |= compilerflags;
Tim Peters5ba58662001-07-16 02:29:45 +00003219 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003220#if 0 /* future keyword */
Martin v. Löwis7198a522002-01-01 19:59:11 +00003221 if (codeflags & CO_GENERATOR_ALLOWED) {
3222 result = 1;
3223 cf->cf_flags |= CO_GENERATOR_ALLOWED;
3224 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003225#endif
Tim Peters5ba58662001-07-16 02:29:45 +00003226 }
3227 return result;
Jeremy Hylton061d1062001-03-22 02:32:48 +00003228}
3229
Guido van Rossum3f5da241990-12-20 15:06:42 +00003230
Guido van Rossum681d79a1995-07-18 14:51:37 +00003231/* External interface to call any callable object.
3232 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00003233
Guido van Rossumd7ed6831997-08-30 15:02:50 +00003234#undef PyEval_CallObject
3235/* for backward compatibility: export this interface */
3236
Guido van Rossumb209a111997-04-29 18:18:01 +00003237PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003238PyEval_CallObject(PyObject *func, PyObject *arg)
Guido van Rossum83bf35c1991-07-27 21:32:34 +00003239{
Guido van Rossumb209a111997-04-29 18:18:01 +00003240 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003241}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00003242#define PyEval_CallObject(func,arg) \
3243 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00003244
Guido van Rossumb209a111997-04-29 18:18:01 +00003245PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003246PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum681d79a1995-07-18 14:51:37 +00003247{
Jeremy Hylton52820442001-01-03 23:52:36 +00003248 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00003249
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003250 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003251 arg = PyTuple_New(0);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003252 if (arg == NULL)
3253 return NULL;
3254 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003255 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003256 PyErr_SetString(PyExc_TypeError,
3257 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00003258 return NULL;
3259 }
3260 else
Guido van Rossumb209a111997-04-29 18:18:01 +00003261 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003262
Guido van Rossumb209a111997-04-29 18:18:01 +00003263 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003264 PyErr_SetString(PyExc_TypeError,
3265 "keyword list must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00003266 Py_DECREF(arg);
Guido van Rossume3e61c11995-08-04 04:14:47 +00003267 return NULL;
3268 }
3269
Tim Peters6d6c1a32001-08-02 04:15:00 +00003270 result = PyObject_Call(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00003271 Py_DECREF(arg);
Jeremy Hylton52820442001-01-03 23:52:36 +00003272 return result;
3273}
3274
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003275const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003276PyEval_GetFuncName(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003277{
3278 if (PyMethod_Check(func))
Tim Peters6d6c1a32001-08-02 04:15:00 +00003279 return PyEval_GetFuncName(PyMethod_GET_FUNCTION(func));
Jeremy Hylton512a2372001-04-11 13:52:29 +00003280 else if (PyFunction_Check(func))
Martin v. Löwis5b222132007-06-10 09:51:05 +00003281 return PyUnicode_AsString(((PyFunctionObject*)func)->func_name);
Jeremy Hylton512a2372001-04-11 13:52:29 +00003282 else if (PyCFunction_Check(func))
3283 return ((PyCFunctionObject*)func)->m_ml->ml_name;
Guido van Rossum50e9fb92006-08-17 05:42:55 +00003284 else
Jeremy Hylton512a2372001-04-11 13:52:29 +00003285 return func->ob_type->tp_name;
Jeremy Hylton512a2372001-04-11 13:52:29 +00003286}
3287
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003288const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003289PyEval_GetFuncDesc(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003290{
3291 if (PyMethod_Check(func))
3292 return "()";
3293 else if (PyFunction_Check(func))
3294 return "()";
3295 else if (PyCFunction_Check(func))
3296 return "()";
Guido van Rossum50e9fb92006-08-17 05:42:55 +00003297 else
Jeremy Hylton512a2372001-04-11 13:52:29 +00003298 return " object";
Jeremy Hylton512a2372001-04-11 13:52:29 +00003299}
3300
Neal Norwitzaddfe0c2002-11-10 14:33:26 +00003301static void
Jeremy Hylton192690e2002-08-16 18:36:11 +00003302err_args(PyObject *func, int flags, int nargs)
3303{
3304 if (flags & METH_NOARGS)
Tim Peters8a5c3c72004-04-05 19:36:21 +00003305 PyErr_Format(PyExc_TypeError,
Guido van Rossum86c659a2002-08-23 14:11:35 +00003306 "%.200s() takes no arguments (%d given)",
Tim Peters8a5c3c72004-04-05 19:36:21 +00003307 ((PyCFunctionObject *)func)->m_ml->ml_name,
Jeremy Hylton192690e2002-08-16 18:36:11 +00003308 nargs);
3309 else
Tim Peters8a5c3c72004-04-05 19:36:21 +00003310 PyErr_Format(PyExc_TypeError,
Guido van Rossum86c659a2002-08-23 14:11:35 +00003311 "%.200s() takes exactly one argument (%d given)",
Tim Peters8a5c3c72004-04-05 19:36:21 +00003312 ((PyCFunctionObject *)func)->m_ml->ml_name,
Jeremy Hylton192690e2002-08-16 18:36:11 +00003313 nargs);
3314}
3315
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003316#define C_TRACE(x, call) \
Nicholas Bastind858a772004-06-25 23:31:06 +00003317if (tstate->use_tracing && tstate->c_profilefunc) { \
3318 if (call_trace(tstate->c_profilefunc, \
3319 tstate->c_profileobj, \
3320 tstate->frame, PyTrace_C_CALL, \
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003321 func)) { \
3322 x = NULL; \
3323 } \
3324 else { \
3325 x = call; \
3326 if (tstate->c_profilefunc != NULL) { \
3327 if (x == NULL) { \
3328 call_trace_protected(tstate->c_profilefunc, \
3329 tstate->c_profileobj, \
3330 tstate->frame, PyTrace_C_EXCEPTION, \
3331 func); \
3332 /* XXX should pass (type, value, tb) */ \
3333 } else { \
3334 if (call_trace(tstate->c_profilefunc, \
3335 tstate->c_profileobj, \
3336 tstate->frame, PyTrace_C_RETURN, \
3337 func)) { \
3338 Py_DECREF(x); \
3339 x = NULL; \
3340 } \
3341 } \
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003342 } \
Nicholas Bastind858a772004-06-25 23:31:06 +00003343 } \
3344} else { \
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003345 x = call; \
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003346 }
3347
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003348static PyObject *
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00003349call_function(PyObject ***pp_stack, int oparg
3350#ifdef WITH_TSC
3351 , uint64* pintr0, uint64* pintr1
3352#endif
3353 )
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003354{
3355 int na = oparg & 0xff;
3356 int nk = (oparg>>8) & 0xff;
3357 int n = na + 2 * nk;
3358 PyObject **pfunc = (*pp_stack) - n - 1;
3359 PyObject *func = *pfunc;
3360 PyObject *x, *w;
3361
Jeremy Hylton985eba52003-02-05 23:13:00 +00003362 /* Always dispatch PyCFunction first, because these are
3363 presumed to be the most frequent callable object.
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003364 */
3365 if (PyCFunction_Check(func) && nk == 0) {
3366 int flags = PyCFunction_GET_FLAGS(func);
Nicholas Bastind858a772004-06-25 23:31:06 +00003367 PyThreadState *tstate = PyThreadState_GET();
Raymond Hettingera7f56bc2004-06-26 04:34:33 +00003368
3369 PCALL(PCALL_CFUNCTION);
Jeremy Hylton192690e2002-08-16 18:36:11 +00003370 if (flags & (METH_NOARGS | METH_O)) {
3371 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
3372 PyObject *self = PyCFunction_GET_SELF(func);
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003373 if (flags & METH_NOARGS && na == 0) {
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003374 C_TRACE(x, (*meth)(self,NULL));
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003375 }
Jeremy Hylton192690e2002-08-16 18:36:11 +00003376 else if (flags & METH_O && na == 1) {
3377 PyObject *arg = EXT_POP(*pp_stack);
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003378 C_TRACE(x, (*meth)(self,arg));
Jeremy Hylton192690e2002-08-16 18:36:11 +00003379 Py_DECREF(arg);
3380 }
3381 else {
3382 err_args(func, flags, na);
3383 x = NULL;
3384 }
3385 }
3386 else {
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003387 PyObject *callargs;
3388 callargs = load_args(pp_stack, na);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003389 READ_TIMESTAMP(*pintr0);
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003390 C_TRACE(x, PyCFunction_Call(func,callargs,NULL));
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003391 READ_TIMESTAMP(*pintr1);
Tim Peters8a5c3c72004-04-05 19:36:21 +00003392 Py_XDECREF(callargs);
3393 }
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003394 } else {
3395 if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) {
3396 /* optimize access to bound methods */
3397 PyObject *self = PyMethod_GET_SELF(func);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003398 PCALL(PCALL_METHOD);
3399 PCALL(PCALL_BOUND_METHOD);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003400 Py_INCREF(self);
3401 func = PyMethod_GET_FUNCTION(func);
3402 Py_INCREF(func);
3403 Py_DECREF(*pfunc);
3404 *pfunc = self;
3405 na++;
3406 n++;
3407 } else
3408 Py_INCREF(func);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003409 READ_TIMESTAMP(*pintr0);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003410 if (PyFunction_Check(func))
3411 x = fast_function(func, pp_stack, n, na, nk);
Tim Peters8a5c3c72004-04-05 19:36:21 +00003412 else
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003413 x = do_call(func, pp_stack, na, nk);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003414 READ_TIMESTAMP(*pintr1);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003415 Py_DECREF(func);
3416 }
Tim Peters8a5c3c72004-04-05 19:36:21 +00003417
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003418 /* Clear the stack of the function object. Also removes
3419 the arguments in case they weren't consumed already
3420 (fast_function() and err_args() leave them on the stack).
Thomas Wouters7f597322006-03-01 05:32:33 +00003421 */
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003422 while ((*pp_stack) > pfunc) {
3423 w = EXT_POP(*pp_stack);
3424 Py_DECREF(w);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003425 PCALL(PCALL_POP);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003426 }
3427 return x;
3428}
3429
Jeremy Hylton192690e2002-08-16 18:36:11 +00003430/* The fast_function() function optimize calls for which no argument
Jeremy Hylton52820442001-01-03 23:52:36 +00003431 tuple is necessary; the objects are passed directly from the stack.
Jeremy Hylton985eba52003-02-05 23:13:00 +00003432 For the simplest case -- a function that takes only positional
3433 arguments and is called with only positional arguments -- it
3434 inlines the most primitive frame setup code from
3435 PyEval_EvalCodeEx(), which vastly reduces the checks that must be
3436 done before evaluating the frame.
Jeremy Hylton52820442001-01-03 23:52:36 +00003437*/
3438
3439static PyObject *
Guido van Rossumac7be682001-01-17 15:42:30 +00003440fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
Jeremy Hylton52820442001-01-03 23:52:36 +00003441{
Jeremy Hylton985eba52003-02-05 23:13:00 +00003442 PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003443 PyObject *globals = PyFunction_GET_GLOBALS(func);
3444 PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003445 PyObject *kwdefs = PyFunction_GET_KW_DEFAULTS(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003446 PyObject **d = NULL;
3447 int nd = 0;
3448
Jeremy Hylton985eba52003-02-05 23:13:00 +00003449 PCALL(PCALL_FUNCTION);
3450 PCALL(PCALL_FAST_FUNCTION);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003451 if (argdefs == NULL && co->co_argcount == n &&
3452 co->co_kwonlyargcount == 0 && nk==0 &&
Jeremy Hylton985eba52003-02-05 23:13:00 +00003453 co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
3454 PyFrameObject *f;
3455 PyObject *retval = NULL;
3456 PyThreadState *tstate = PyThreadState_GET();
3457 PyObject **fastlocals, **stack;
3458 int i;
3459
3460 PCALL(PCALL_FASTER_FUNCTION);
3461 assert(globals != NULL);
3462 /* XXX Perhaps we should create a specialized
3463 PyFrame_New() that doesn't take locals, but does
3464 take builtins without sanity checking them.
3465 */
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003466 assert(tstate != NULL);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003467 f = PyFrame_New(tstate, co, globals, NULL);
3468 if (f == NULL)
3469 return NULL;
3470
3471 fastlocals = f->f_localsplus;
3472 stack = (*pp_stack) - n;
3473
3474 for (i = 0; i < n; i++) {
3475 Py_INCREF(*stack);
3476 fastlocals[i] = *stack++;
3477 }
Phillip J. Eby0d6615f2005-08-02 00:46:46 +00003478 retval = PyEval_EvalFrameEx(f,0);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003479 ++tstate->recursion_depth;
3480 Py_DECREF(f);
3481 --tstate->recursion_depth;
3482 return retval;
3483 }
Jeremy Hylton52820442001-01-03 23:52:36 +00003484 if (argdefs != NULL) {
3485 d = &PyTuple_GET_ITEM(argdefs, 0);
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003486 nd = Py_Size(argdefs);
Jeremy Hylton52820442001-01-03 23:52:36 +00003487 }
Jeremy Hylton985eba52003-02-05 23:13:00 +00003488 return PyEval_EvalCodeEx(co, globals,
3489 (PyObject *)NULL, (*pp_stack)-n, na,
Guido van Rossum4f72a782006-10-27 23:31:49 +00003490 (*pp_stack)-2*nk, nk, d, nd, kwdefs,
Jeremy Hylton985eba52003-02-05 23:13:00 +00003491 PyFunction_GET_CLOSURE(func));
Jeremy Hylton52820442001-01-03 23:52:36 +00003492}
3493
3494static PyObject *
Ka-Ping Yee20579702001-01-15 22:14:16 +00003495update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack,
3496 PyObject *func)
Jeremy Hylton52820442001-01-03 23:52:36 +00003497{
3498 PyObject *kwdict = NULL;
3499 if (orig_kwdict == NULL)
3500 kwdict = PyDict_New();
3501 else {
3502 kwdict = PyDict_Copy(orig_kwdict);
3503 Py_DECREF(orig_kwdict);
3504 }
3505 if (kwdict == NULL)
3506 return NULL;
Raymond Hettinger5bed4562004-04-10 23:34:17 +00003507 while (--nk >= 0) {
Jeremy Hylton52820442001-01-03 23:52:36 +00003508 int err;
3509 PyObject *value = EXT_POP(*pp_stack);
3510 PyObject *key = EXT_POP(*pp_stack);
3511 if (PyDict_GetItem(kwdict, key) != NULL) {
Thomas Woutersce272b62007-09-19 21:19:28 +00003512 PyErr_Format(PyExc_TypeError,
3513 "%.200s%s got multiple values "
3514 "for keyword argument '%.200s'",
Tim Peters6d6c1a32001-08-02 04:15:00 +00003515 PyEval_GetFuncName(func),
3516 PyEval_GetFuncDesc(func),
Neal Norwitzda059e32007-08-26 05:33:45 +00003517 PyUnicode_AsString(key));
Jeremy Hylton52820442001-01-03 23:52:36 +00003518 Py_DECREF(key);
3519 Py_DECREF(value);
3520 Py_DECREF(kwdict);
3521 return NULL;
3522 }
3523 err = PyDict_SetItem(kwdict, key, value);
3524 Py_DECREF(key);
3525 Py_DECREF(value);
3526 if (err) {
3527 Py_DECREF(kwdict);
3528 return NULL;
3529 }
3530 }
3531 return kwdict;
3532}
3533
3534static PyObject *
3535update_star_args(int nstack, int nstar, PyObject *stararg,
3536 PyObject ***pp_stack)
3537{
3538 PyObject *callargs, *w;
3539
3540 callargs = PyTuple_New(nstack + nstar);
3541 if (callargs == NULL) {
3542 return NULL;
3543 }
3544 if (nstar) {
3545 int i;
3546 for (i = 0; i < nstar; i++) {
3547 PyObject *a = PyTuple_GET_ITEM(stararg, i);
3548 Py_INCREF(a);
3549 PyTuple_SET_ITEM(callargs, nstack + i, a);
3550 }
3551 }
Raymond Hettinger5bed4562004-04-10 23:34:17 +00003552 while (--nstack >= 0) {
Jeremy Hylton52820442001-01-03 23:52:36 +00003553 w = EXT_POP(*pp_stack);
3554 PyTuple_SET_ITEM(callargs, nstack, w);
3555 }
3556 return callargs;
3557}
3558
3559static PyObject *
3560load_args(PyObject ***pp_stack, int na)
3561{
3562 PyObject *args = PyTuple_New(na);
3563 PyObject *w;
3564
3565 if (args == NULL)
3566 return NULL;
Raymond Hettinger5bed4562004-04-10 23:34:17 +00003567 while (--na >= 0) {
Jeremy Hylton52820442001-01-03 23:52:36 +00003568 w = EXT_POP(*pp_stack);
3569 PyTuple_SET_ITEM(args, na, w);
3570 }
3571 return args;
3572}
3573
3574static PyObject *
3575do_call(PyObject *func, PyObject ***pp_stack, int na, int nk)
3576{
3577 PyObject *callargs = NULL;
3578 PyObject *kwdict = NULL;
3579 PyObject *result = NULL;
3580
3581 if (nk > 0) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00003582 kwdict = update_keyword_args(NULL, nk, pp_stack, func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003583 if (kwdict == NULL)
3584 goto call_fail;
3585 }
3586 callargs = load_args(pp_stack, na);
3587 if (callargs == NULL)
3588 goto call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00003589#ifdef CALL_PROFILE
3590 /* At this point, we have to look at the type of func to
3591 update the call stats properly. Do it here so as to avoid
3592 exposing the call stats machinery outside ceval.c
3593 */
3594 if (PyFunction_Check(func))
3595 PCALL(PCALL_FUNCTION);
3596 else if (PyMethod_Check(func))
3597 PCALL(PCALL_METHOD);
3598 else if (PyType_Check(func))
3599 PCALL(PCALL_TYPE);
3600 else
3601 PCALL(PCALL_OTHER);
3602#endif
Tim Peters6d6c1a32001-08-02 04:15:00 +00003603 result = PyObject_Call(func, callargs, kwdict);
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00003604call_fail:
Jeremy Hylton52820442001-01-03 23:52:36 +00003605 Py_XDECREF(callargs);
3606 Py_XDECREF(kwdict);
3607 return result;
3608}
3609
3610static PyObject *
3611ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
3612{
3613 int nstar = 0;
3614 PyObject *callargs = NULL;
3615 PyObject *stararg = NULL;
3616 PyObject *kwdict = NULL;
3617 PyObject *result = NULL;
3618
3619 if (flags & CALL_FLAG_KW) {
3620 kwdict = EXT_POP(*pp_stack);
Guido van Rossumd59da4b2007-05-22 18:11:13 +00003621 if (!PyDict_Check(kwdict)) {
3622 PyObject *d;
3623 d = PyDict_New();
3624 if (d == NULL)
3625 goto ext_call_fail;
3626 if (PyDict_Update(d, kwdict) != 0) {
3627 Py_DECREF(d);
3628 /* PyDict_Update raises attribute
3629 * error (percolated from an attempt
3630 * to get 'keys' attribute) instead of
3631 * a type error if its second argument
3632 * is not a mapping.
3633 */
3634 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
3635 PyErr_Format(PyExc_TypeError,
3636 "%.200s%.200s argument after ** "
3637 "must be a mapping, not %.200s",
3638 PyEval_GetFuncName(func),
3639 PyEval_GetFuncDesc(func),
3640 kwdict->ob_type->tp_name);
3641 }
3642 goto ext_call_fail;
3643 }
3644 Py_DECREF(kwdict);
3645 kwdict = d;
Jeremy Hylton52820442001-01-03 23:52:36 +00003646 }
3647 }
3648 if (flags & CALL_FLAG_VAR) {
3649 stararg = EXT_POP(*pp_stack);
3650 if (!PyTuple_Check(stararg)) {
3651 PyObject *t = NULL;
3652 t = PySequence_Tuple(stararg);
3653 if (t == NULL) {
Jeremy Hylton512a2372001-04-11 13:52:29 +00003654 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
3655 PyErr_Format(PyExc_TypeError,
Guido van Rossumd59da4b2007-05-22 18:11:13 +00003656 "%.200s%.200s argument after * "
3657 "must be a sequence, not %200s",
Tim Peters6d6c1a32001-08-02 04:15:00 +00003658 PyEval_GetFuncName(func),
Guido van Rossumd59da4b2007-05-22 18:11:13 +00003659 PyEval_GetFuncDesc(func),
3660 stararg->ob_type->tp_name);
Jeremy Hylton512a2372001-04-11 13:52:29 +00003661 }
Jeremy Hylton52820442001-01-03 23:52:36 +00003662 goto ext_call_fail;
3663 }
3664 Py_DECREF(stararg);
3665 stararg = t;
3666 }
3667 nstar = PyTuple_GET_SIZE(stararg);
3668 }
3669 if (nk > 0) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00003670 kwdict = update_keyword_args(kwdict, nk, pp_stack, func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003671 if (kwdict == NULL)
3672 goto ext_call_fail;
3673 }
3674 callargs = update_star_args(na, nstar, stararg, pp_stack);
3675 if (callargs == NULL)
3676 goto ext_call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00003677#ifdef CALL_PROFILE
3678 /* At this point, we have to look at the type of func to
3679 update the call stats properly. Do it here so as to avoid
3680 exposing the call stats machinery outside ceval.c
3681 */
3682 if (PyFunction_Check(func))
3683 PCALL(PCALL_FUNCTION);
3684 else if (PyMethod_Check(func))
3685 PCALL(PCALL_METHOD);
3686 else if (PyType_Check(func))
3687 PCALL(PCALL_TYPE);
3688 else
3689 PCALL(PCALL_OTHER);
3690#endif
Tim Peters6d6c1a32001-08-02 04:15:00 +00003691 result = PyObject_Call(func, callargs, kwdict);
Thomas Woutersce272b62007-09-19 21:19:28 +00003692ext_call_fail:
Jeremy Hylton52820442001-01-03 23:52:36 +00003693 Py_XDECREF(callargs);
3694 Py_XDECREF(kwdict);
3695 Py_XDECREF(stararg);
3696 return result;
3697}
3698
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003699/* Extract a slice index from a PyInt or PyLong or an object with the
3700 nb_index slot defined, and store in *pi.
3701 Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX,
3702 and silently boost values less than -PY_SSIZE_T_MAX-1 to -PY_SSIZE_T_MAX-1.
Martin v. Löwisdde99d22006-02-17 15:57:41 +00003703 Return 0 on error, 1 on success.
Tim Peterscb479e72001-12-16 19:11:44 +00003704*/
Tim Petersb5196382001-12-16 19:44:20 +00003705/* Note: If v is NULL, return success without storing into *pi. This
3706 is because_PyEval_SliceIndex() is called by apply_slice(), which can be
3707 called by the SLICE opcode with v and/or w equal to NULL.
Tim Peterscb479e72001-12-16 19:11:44 +00003708*/
Guido van Rossum20c6add2000-05-08 14:06:50 +00003709int
Martin v. Löwis18e16552006-02-15 17:27:45 +00003710_PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003711{
Tim Petersb5196382001-12-16 19:44:20 +00003712 if (v != NULL) {
Martin v. Löwisdde99d22006-02-17 15:57:41 +00003713 Py_ssize_t x;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00003714 if (PyIndex_Check(v)) {
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003715 x = PyNumber_AsSsize_t(v, NULL);
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003716 if (x == -1 && PyErr_Occurred())
3717 return 0;
3718 }
3719 else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003720 PyErr_SetString(PyExc_TypeError,
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003721 "slice indices must be integers or "
3722 "None or have an __index__ method");
Guido van Rossum20c6add2000-05-08 14:06:50 +00003723 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003724 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00003725 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003726 }
Guido van Rossum20c6add2000-05-08 14:06:50 +00003727 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003728}
3729
Guido van Rossum486364b2007-06-30 05:01:58 +00003730#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
Brett Cannon39590462007-02-26 22:01:14 +00003731 "BaseException is not allowed"
Brett Cannonf74225d2007-02-26 21:10:16 +00003732
Guido van Rossumb209a111997-04-29 18:18:01 +00003733static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003734cmp_outcome(int op, register PyObject *v, register PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003735{
Guido van Rossumac7be682001-01-17 15:42:30 +00003736 int res = 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003737 switch (op) {
Martin v. Löwis7198a522002-01-01 19:59:11 +00003738 case PyCmp_IS:
Guido van Rossum3f5da241990-12-20 15:06:42 +00003739 res = (v == w);
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00003740 break;
3741 case PyCmp_IS_NOT:
3742 res = (v != w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00003743 break;
Martin v. Löwis7198a522002-01-01 19:59:11 +00003744 case PyCmp_IN:
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00003745 res = PySequence_Contains(w, v);
3746 if (res < 0)
3747 return NULL;
3748 break;
Martin v. Löwis7198a522002-01-01 19:59:11 +00003749 case PyCmp_NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00003750 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00003751 if (res < 0)
3752 return NULL;
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00003753 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003754 break;
Martin v. Löwis7198a522002-01-01 19:59:11 +00003755 case PyCmp_EXC_MATCH:
Thomas Wouters9fe394c2007-02-05 01:24:16 +00003756 if (PyTuple_Check(w)) {
3757 Py_ssize_t i, length;
3758 length = PyTuple_Size(w);
3759 for (i = 0; i < length; i += 1) {
3760 PyObject *exc = PyTuple_GET_ITEM(w, i);
Brett Cannon39590462007-02-26 22:01:14 +00003761 if (!PyExceptionClass_Check(exc)) {
3762 PyErr_SetString(PyExc_TypeError,
3763 CANNOT_CATCH_MSG);
Brett Cannonf74225d2007-02-26 21:10:16 +00003764 return NULL;
Thomas Wouters9fe394c2007-02-05 01:24:16 +00003765 }
3766 }
3767 }
3768 else {
Brett Cannon39590462007-02-26 22:01:14 +00003769 if (!PyExceptionClass_Check(w)) {
3770 PyErr_SetString(PyExc_TypeError,
3771 CANNOT_CATCH_MSG);
Brett Cannonf74225d2007-02-26 21:10:16 +00003772 return NULL;
Thomas Wouters9fe394c2007-02-05 01:24:16 +00003773 }
3774 }
Barry Warsaw4249f541997-08-22 21:26:19 +00003775 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003776 break;
3777 default:
Guido van Rossumac7be682001-01-17 15:42:30 +00003778 return PyObject_RichCompare(v, w, op);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003779 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003780 v = res ? Py_True : Py_False;
3781 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003782 return v;
3783}
3784
Thomas Wouters52152252000-08-17 22:55:00 +00003785static PyObject *
3786import_from(PyObject *v, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00003787{
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003788 PyObject *x;
3789
3790 x = PyObject_GetAttr(v, name);
3791 if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
Walter Dörwald573c08c2007-05-25 15:46:59 +00003792 PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003793 }
Thomas Wouters52152252000-08-17 22:55:00 +00003794 return x;
3795}
Guido van Rossumac7be682001-01-17 15:42:30 +00003796
Thomas Wouters52152252000-08-17 22:55:00 +00003797static int
3798import_all_from(PyObject *locals, PyObject *v)
3799{
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003800 PyObject *all = PyObject_GetAttrString(v, "__all__");
3801 PyObject *dict, *name, *value;
3802 int skip_leading_underscores = 0;
3803 int pos, err;
Thomas Wouters52152252000-08-17 22:55:00 +00003804
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003805 if (all == NULL) {
3806 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
3807 return -1; /* Unexpected error */
3808 PyErr_Clear();
3809 dict = PyObject_GetAttrString(v, "__dict__");
3810 if (dict == NULL) {
3811 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
3812 return -1;
3813 PyErr_SetString(PyExc_ImportError,
3814 "from-import-* object has no __dict__ and no __all__");
Guido van Rossum3f5da241990-12-20 15:06:42 +00003815 return -1;
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003816 }
3817 all = PyMapping_Keys(dict);
3818 Py_DECREF(dict);
3819 if (all == NULL)
3820 return -1;
3821 skip_leading_underscores = 1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003822 }
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003823
3824 for (pos = 0, err = 0; ; pos++) {
3825 name = PySequence_GetItem(all, pos);
3826 if (name == NULL) {
3827 if (!PyErr_ExceptionMatches(PyExc_IndexError))
3828 err = -1;
3829 else
3830 PyErr_Clear();
3831 break;
3832 }
3833 if (skip_leading_underscores &&
Martin v. Löwis5b222132007-06-10 09:51:05 +00003834 PyUnicode_Check(name) &&
3835 PyUnicode_AS_UNICODE(name)[0] == '_')
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003836 {
3837 Py_DECREF(name);
3838 continue;
3839 }
3840 value = PyObject_GetAttr(v, name);
3841 if (value == NULL)
3842 err = -1;
Thomas Wouters89f507f2006-12-13 04:49:30 +00003843 else if (PyDict_CheckExact(locals))
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003844 err = PyDict_SetItem(locals, name, value);
Thomas Wouters89f507f2006-12-13 04:49:30 +00003845 else
3846 err = PyObject_SetItem(locals, name, value);
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003847 Py_DECREF(name);
3848 Py_XDECREF(value);
3849 if (err != 0)
3850 break;
3851 }
3852 Py_DECREF(all);
3853 return err;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003854}
3855
Guido van Rossumac7be682001-01-17 15:42:30 +00003856static void
Neal Norwitzda059e32007-08-26 05:33:45 +00003857format_exc_check_arg(PyObject *exc, const char *format_str, PyObject *obj)
Paul Prescode68140d2000-08-30 20:25:01 +00003858{
Neal Norwitzda059e32007-08-26 05:33:45 +00003859 const char *obj_str;
Paul Prescode68140d2000-08-30 20:25:01 +00003860
3861 if (!obj)
3862 return;
3863
Neal Norwitzda059e32007-08-26 05:33:45 +00003864 obj_str = PyUnicode_AsString(obj);
Paul Prescode68140d2000-08-30 20:25:01 +00003865 if (!obj_str)
3866 return;
3867
3868 PyErr_Format(exc, format_str, obj_str);
3869}
Guido van Rossum950361c1997-01-24 13:49:28 +00003870
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003871static PyObject *
Guido van Rossum98297ee2007-11-06 21:34:58 +00003872unicode_concatenate(PyObject *v, PyObject *w,
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003873 PyFrameObject *f, unsigned char *next_instr)
3874{
3875 /* This function implements 'variable += expr' when both arguments
Guido van Rossum98297ee2007-11-06 21:34:58 +00003876 are (Unicode) strings. */
3877 Py_ssize_t v_len = PyUnicode_GET_SIZE(v);
3878 Py_ssize_t w_len = PyUnicode_GET_SIZE(w);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003879 Py_ssize_t new_len = v_len + w_len;
3880 if (new_len < 0) {
3881 PyErr_SetString(PyExc_OverflowError,
3882 "strings are too large to concat");
3883 return NULL;
3884 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00003885
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003886 if (v->ob_refcnt == 2) {
3887 /* In the common case, there are 2 references to the value
3888 * stored in 'variable' when the += is performed: one on the
Thomas Wouters8ce81f72007-09-20 18:22:40 +00003889 * value stack (in 'v') and one still stored in the
3890 * 'variable'. We try to delete the variable now to reduce
3891 * the refcnt to 1.
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003892 */
3893 switch (*next_instr) {
3894 case STORE_FAST:
3895 {
3896 int oparg = PEEKARG();
3897 PyObject **fastlocals = f->f_localsplus;
3898 if (GETLOCAL(oparg) == v)
3899 SETLOCAL(oparg, NULL);
3900 break;
3901 }
3902 case STORE_DEREF:
3903 {
Thomas Wouters8ce81f72007-09-20 18:22:40 +00003904 PyObject **freevars = (f->f_localsplus +
3905 f->f_code->co_nlocals);
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003906 PyObject *c = freevars[PEEKARG()];
3907 if (PyCell_GET(c) == v)
3908 PyCell_Set(c, NULL);
3909 break;
3910 }
3911 case STORE_NAME:
3912 {
3913 PyObject *names = f->f_code->co_names;
3914 PyObject *name = GETITEM(names, PEEKARG());
3915 PyObject *locals = f->f_locals;
3916 if (PyDict_CheckExact(locals) &&
3917 PyDict_GetItem(locals, name) == v) {
3918 if (PyDict_DelItem(locals, name) != 0) {
3919 PyErr_Clear();
3920 }
3921 }
3922 break;
3923 }
3924 }
3925 }
3926
Guido van Rossum98297ee2007-11-06 21:34:58 +00003927 if (v->ob_refcnt == 1 && !PyUnicode_CHECK_INTERNED(v)) {
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003928 /* Now we own the last reference to 'v', so we can resize it
3929 * in-place.
3930 */
Guido van Rossum98297ee2007-11-06 21:34:58 +00003931 if (PyUnicode_Resize(&v, new_len) != 0) {
3932 /* XXX if PyUnicode_Resize() fails, 'v' has been
Thomas Wouters8ce81f72007-09-20 18:22:40 +00003933 * deallocated so it cannot be put back into
3934 * 'variable'. The MemoryError is raised when there
3935 * is no value in 'variable', which might (very
3936 * remotely) be a cause of incompatibilities.
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003937 */
3938 return NULL;
3939 }
3940 /* copy 'w' into the newly allocated area of 'v' */
Guido van Rossum98297ee2007-11-06 21:34:58 +00003941 memcpy(PyUnicode_AS_UNICODE(v) + v_len,
3942 PyUnicode_AS_UNICODE(w), w_len*sizeof(Py_UNICODE));
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003943 return v;
3944 }
3945 else {
3946 /* When in-place resizing is not an option. */
Guido van Rossum98297ee2007-11-06 21:34:58 +00003947 w = PyUnicode_Concat(v, w);
3948 Py_DECREF(v);
3949 return w;
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003950 }
3951}
3952
Guido van Rossum950361c1997-01-24 13:49:28 +00003953#ifdef DYNAMIC_EXECUTION_PROFILE
3954
Skip Montanarof118cb12001-10-15 20:51:38 +00003955static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003956getarray(long a[256])
Guido van Rossum950361c1997-01-24 13:49:28 +00003957{
3958 int i;
3959 PyObject *l = PyList_New(256);
3960 if (l == NULL) return NULL;
3961 for (i = 0; i < 256; i++) {
Christian Heimes217cfd12007-12-02 14:31:20 +00003962 PyObject *x = PyLong_FromLong(a[i]);
Guido van Rossum950361c1997-01-24 13:49:28 +00003963 if (x == NULL) {
3964 Py_DECREF(l);
3965 return NULL;
3966 }
3967 PyList_SetItem(l, i, x);
3968 }
3969 for (i = 0; i < 256; i++)
3970 a[i] = 0;
3971 return l;
3972}
3973
3974PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003975_Py_GetDXProfile(PyObject *self, PyObject *args)
Guido van Rossum950361c1997-01-24 13:49:28 +00003976{
3977#ifndef DXPAIRS
3978 return getarray(dxp);
3979#else
3980 int i;
3981 PyObject *l = PyList_New(257);
3982 if (l == NULL) return NULL;
3983 for (i = 0; i < 257; i++) {
3984 PyObject *x = getarray(dxpairs[i]);
3985 if (x == NULL) {
3986 Py_DECREF(l);
3987 return NULL;
3988 }
3989 PyList_SetItem(l, i, x);
3990 }
3991 return l;
3992#endif
3993}
3994
3995#endif