blob: eea87a82fb05f5254b336876f7fe3e065d36d1f3 [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
31 section should work for GCC on any PowerPC platform,
32 irrespective of OS. POWER? Who knows :-) */
33
Michael W. Hudson75eabd22005-01-18 15:56:11 +000034#define READ_TIMESTAMP(var) ppc_getcounter(&var)
Michael W. Hudson800ba232004-08-12 18:19:17 +000035
36static void
37ppc_getcounter(uint64 *v)
38{
39 register unsigned long tbu, tb, tbu2;
40
41 loop:
42 asm volatile ("mftbu %0" : "=r" (tbu) );
43 asm volatile ("mftb %0" : "=r" (tb) );
44 asm volatile ("mftbu %0" : "=r" (tbu2));
45 if (__builtin_expect(tbu != tbu2, 0)) goto loop;
46
Thomas Wouters477c8d52006-05-27 19:21:47 +000047 /* The slightly peculiar way of writing the next lines is
Michael W. Hudson800ba232004-08-12 18:19:17 +000048 compiled better by GCC than any other way I tried. */
49 ((long*)(v))[0] = tbu;
50 ((long*)(v))[1] = tb;
51}
52
Michael W. Hudson75eabd22005-01-18 15:56:11 +000053#else /* this is for linux/x86 (and probably any other GCC/x86 combo) */
Michael W. Hudson800ba232004-08-12 18:19:17 +000054
Michael W. Hudson75eabd22005-01-18 15:56:11 +000055#define READ_TIMESTAMP(val) \
56 __asm__ __volatile__("rdtsc" : "=A" (val))
Michael W. Hudson800ba232004-08-12 18:19:17 +000057
58#endif
59
Thomas Wouters477c8d52006-05-27 19:21:47 +000060void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1,
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000061 uint64 loop0, uint64 loop1, uint64 intr0, uint64 intr1)
62{
63 uint64 intr, inst, loop;
64 PyThreadState *tstate = PyThreadState_Get();
65 if (!tstate->interp->tscdump)
66 return;
67 intr = intr1 - intr0;
68 inst = inst1 - inst0 - intr;
69 loop = loop1 - loop0 - intr;
70 fprintf(stderr, "opcode=%03d t=%d inst=%06lld loop=%06lld\n",
71 opcode, ticked, inst, loop);
72}
Michael W. Hudson800ba232004-08-12 18:19:17 +000073
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000074#endif
75
Guido van Rossum04691fc1992-08-12 15:35:34 +000076/* Turn this on if your compiler chokes on the big switch: */
Guido van Rossum1ae940a1995-01-02 19:04:15 +000077/* #define CASE_TOO_BIG 1 */
Guido van Rossum04691fc1992-08-12 15:35:34 +000078
Guido van Rossum408027e1996-12-30 16:17:54 +000079#ifdef Py_DEBUG
Guido van Rossum96a42c81992-01-12 02:29:51 +000080/* For debugging the interpreter: */
81#define LLTRACE 1 /* Low-level trace feature */
82#define CHECKEXC 1 /* Double-check exception checking */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000083#endif
84
Jeremy Hylton52820442001-01-03 23:52:36 +000085typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
Guido van Rossum5b722181993-03-30 17:46:03 +000086
Guido van Rossum374a9221991-04-04 10:40:29 +000087/* Forward declarations */
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000088#ifdef WITH_TSC
Thomas Wouters477c8d52006-05-27 19:21:47 +000089static PyObject * call_function(PyObject ***, int, uint64*, uint64*);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000090#else
Thomas Wouters477c8d52006-05-27 19:21:47 +000091static PyObject * call_function(PyObject ***, int);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000092#endif
Thomas Wouters477c8d52006-05-27 19:21:47 +000093static PyObject * fast_function(PyObject *, PyObject ***, int, int, int);
94static PyObject * do_call(PyObject *, PyObject ***, int, int);
95static PyObject * ext_do_call(PyObject *, PyObject ***, int, int, int);
96static PyObject * update_keyword_args(PyObject *, int, PyObject ***,PyObject *);
97static PyObject * update_star_args(int, int, PyObject *, PyObject ***);
98static PyObject * load_args(PyObject ***, int);
Jeremy Hylton52820442001-01-03 23:52:36 +000099#define CALL_FLAG_VAR 1
100#define CALL_FLAG_KW 2
101
Guido van Rossum0a066c01992-03-27 17:29:15 +0000102#ifdef LLTRACE
Guido van Rossumc2e20742006-02-27 22:32:47 +0000103static int lltrace;
Tim Petersdbd9ba62000-07-09 03:09:57 +0000104static int prtrace(PyObject *, char *);
Guido van Rossum0a066c01992-03-27 17:29:15 +0000105#endif
Fred Drake5755ce62001-06-27 19:19:46 +0000106static int call_trace(Py_tracefunc, PyObject *, PyFrameObject *,
107 int, PyObject *);
Fred Drake4ec5d562001-10-04 19:26:43 +0000108static void call_trace_protected(Py_tracefunc, PyObject *,
Armin Rigo1c2d7e52005-09-20 18:34:01 +0000109 PyFrameObject *, int, PyObject *);
Fred Drake5755ce62001-06-27 19:19:46 +0000110static void call_exc_trace(Py_tracefunc, PyObject *, PyFrameObject *);
Tim Peters8a5c3c72004-04-05 19:36:21 +0000111static int maybe_call_line_trace(Py_tracefunc, PyObject *,
Armin Rigobf57a142004-03-22 19:24:58 +0000112 PyFrameObject *, int *, int *, int *);
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000113
Thomas Wouters477c8d52006-05-27 19:21:47 +0000114static PyObject * apply_slice(PyObject *, PyObject *, PyObject *);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000115static int assign_slice(PyObject *, PyObject *,
116 PyObject *, PyObject *);
Thomas Wouters477c8d52006-05-27 19:21:47 +0000117static PyObject * cmp_outcome(int, PyObject *, PyObject *);
118static PyObject * import_from(PyObject *, PyObject *);
Thomas Wouters52152252000-08-17 22:55:00 +0000119static int import_all_from(PyObject *, PyObject *);
Tim Petersdbd9ba62000-07-09 03:09:57 +0000120static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *);
121static void reset_exc_info(PyThreadState *);
Neal Norwitzda059e32007-08-26 05:33:45 +0000122static void format_exc_check_arg(PyObject *, const char *, PyObject *);
Thomas Wouters477c8d52006-05-27 19:21:47 +0000123static PyObject * string_concatenate(PyObject *, PyObject *,
Raymond Hettinger52a21b82004-08-06 18:43:09 +0000124 PyFrameObject *, unsigned char *);
Guido van Rossum374a9221991-04-04 10:40:29 +0000125
Paul Prescode68140d2000-08-30 20:25:01 +0000126#define NAME_ERROR_MSG \
Fred Drake661ea262000-10-24 19:57:45 +0000127 "name '%.200s' is not defined"
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000128#define GLOBAL_NAME_ERROR_MSG \
129 "global name '%.200s' is not defined"
Paul Prescode68140d2000-08-30 20:25:01 +0000130#define UNBOUNDLOCAL_ERROR_MSG \
Fred Drake661ea262000-10-24 19:57:45 +0000131 "local variable '%.200s' referenced before assignment"
Jeremy Hyltonc76770c2001-04-13 16:51:46 +0000132#define UNBOUNDFREE_ERROR_MSG \
133 "free variable '%.200s' referenced before assignment" \
134 " in enclosing scope"
Guido van Rossum374a9221991-04-04 10:40:29 +0000135
Guido van Rossum950361c1997-01-24 13:49:28 +0000136/* Dynamic execution profile */
137#ifdef DYNAMIC_EXECUTION_PROFILE
138#ifdef DXPAIRS
139static long dxpairs[257][256];
140#define dxp dxpairs[256]
141#else
142static long dxp[256];
143#endif
144#endif
145
Jeremy Hylton985eba52003-02-05 23:13:00 +0000146/* Function call profile */
147#ifdef CALL_PROFILE
148#define PCALL_NUM 11
149static int pcall[PCALL_NUM];
150
151#define PCALL_ALL 0
152#define PCALL_FUNCTION 1
153#define PCALL_FAST_FUNCTION 2
154#define PCALL_FASTER_FUNCTION 3
155#define PCALL_METHOD 4
156#define PCALL_BOUND_METHOD 5
157#define PCALL_CFUNCTION 6
158#define PCALL_TYPE 7
159#define PCALL_GENERATOR 8
160#define PCALL_OTHER 9
161#define PCALL_POP 10
162
163/* Notes about the statistics
164
165 PCALL_FAST stats
166
167 FAST_FUNCTION means no argument tuple needs to be created.
168 FASTER_FUNCTION means that the fast-path frame setup code is used.
169
170 If there is a method call where the call can be optimized by changing
171 the argument tuple and calling the function directly, it gets recorded
172 twice.
173
174 As a result, the relationship among the statistics appears to be
175 PCALL_ALL == PCALL_FUNCTION + PCALL_METHOD - PCALL_BOUND_METHOD +
176 PCALL_CFUNCTION + PCALL_TYPE + PCALL_GENERATOR + PCALL_OTHER
177 PCALL_FUNCTION > PCALL_FAST_FUNCTION > PCALL_FASTER_FUNCTION
178 PCALL_METHOD > PCALL_BOUND_METHOD
179*/
180
181#define PCALL(POS) pcall[POS]++
182
183PyObject *
184PyEval_GetCallStats(PyObject *self)
185{
Thomas Wouters89f507f2006-12-13 04:49:30 +0000186 return Py_BuildValue("iiiiiiiiiii",
Jeremy Hylton985eba52003-02-05 23:13:00 +0000187 pcall[0], pcall[1], pcall[2], pcall[3],
188 pcall[4], pcall[5], pcall[6], pcall[7],
Thomas Wouters89f507f2006-12-13 04:49:30 +0000189 pcall[8], pcall[9], pcall[10]);
Jeremy Hylton985eba52003-02-05 23:13:00 +0000190}
191#else
192#define PCALL(O)
193
194PyObject *
195PyEval_GetCallStats(PyObject *self)
196{
197 Py_INCREF(Py_None);
198 return Py_None;
199}
200#endif
201
Tim Peters5ca576e2001-06-18 22:08:13 +0000202
Guido van Rossume59214e1994-08-30 08:01:59 +0000203#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +0000204
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000205#ifdef HAVE_ERRNO_H
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000206#include <errno.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +0000207#endif
Guido van Rossum49b56061998-10-01 20:42:43 +0000208#include "pythread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +0000209
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000210static PyThread_type_lock interpreter_lock = 0; /* This is the GIL */
Guido van Rossuma9672091994-09-14 13:31:22 +0000211static long main_thread = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000212
Tim Peters7f468f22004-10-11 02:40:51 +0000213int
214PyEval_ThreadsInitialized(void)
215{
216 return interpreter_lock != 0;
217}
218
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000219void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000220PyEval_InitThreads(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000221{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000222 if (interpreter_lock)
Sjoerd Mullendered59d201993-01-06 13:36:38 +0000223 return;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000224 interpreter_lock = PyThread_allocate_lock();
225 PyThread_acquire_lock(interpreter_lock, 1);
226 main_thread = PyThread_get_thread_ident();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000227}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000228
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000229void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000230PyEval_AcquireLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000231{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000232 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000233}
234
235void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000236PyEval_ReleaseLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000237{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000238 PyThread_release_lock(interpreter_lock);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000239}
240
241void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000242PyEval_AcquireThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000243{
244 if (tstate == NULL)
245 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000246 /* Check someone has called PyEval_InitThreads() to create the lock */
247 assert(interpreter_lock);
Guido van Rossum65d5b571998-12-21 19:32:43 +0000248 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000249 if (PyThreadState_Swap(tstate) != NULL)
250 Py_FatalError(
251 "PyEval_AcquireThread: non-NULL old thread state");
252}
253
254void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000255PyEval_ReleaseThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000256{
257 if (tstate == NULL)
258 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
259 if (PyThreadState_Swap(NULL) != tstate)
260 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000261 PyThread_release_lock(interpreter_lock);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000262}
Guido van Rossumfee3a2d2000-08-27 17:34:07 +0000263
264/* This function is called from PyOS_AfterFork to ensure that newly
265 created child processes don't hold locks referring to threads which
266 are not running in the child process. (This could also be done using
267 pthread_atfork mechanism, at least for the pthreads implementation.) */
268
269void
270PyEval_ReInitThreads(void)
271{
272 if (!interpreter_lock)
273 return;
274 /*XXX Can't use PyThread_free_lock here because it does too
275 much error-checking. Doing this cleanly would require
276 adding a new function to each thread_*.h. Instead, just
277 create a new lock and waste a little bit of memory */
278 interpreter_lock = PyThread_allocate_lock();
279 PyThread_acquire_lock(interpreter_lock, 1);
280 main_thread = PyThread_get_thread_ident();
281}
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000282#endif
283
Guido van Rossumff4949e1992-08-05 19:58:53 +0000284/* Functions save_thread and restore_thread are always defined so
285 dynamically loaded modules needn't be compiled separately for use
286 with and without threads: */
287
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000288PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000289PyEval_SaveThread(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000290{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000291 PyThreadState *tstate = PyThreadState_Swap(NULL);
292 if (tstate == NULL)
293 Py_FatalError("PyEval_SaveThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000294#ifdef WITH_THREAD
Guido van Rossumb74eca91997-09-30 22:03:16 +0000295 if (interpreter_lock)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000296 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000297#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000298 return tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000299}
300
301void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000302PyEval_RestoreThread(PyThreadState *tstate)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000303{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000304 if (tstate == NULL)
305 Py_FatalError("PyEval_RestoreThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000306#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000307 if (interpreter_lock) {
Guido van Rossumb74eca91997-09-30 22:03:16 +0000308 int err = errno;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000309 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000310 errno = err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000311 }
312#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000313 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000314}
315
316
Guido van Rossuma9672091994-09-14 13:31:22 +0000317/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
318 signal handlers or Mac I/O completion routines) can schedule calls
319 to a function to be called synchronously.
320 The synchronous function is called with one void* argument.
321 It should return 0 for success or -1 for failure -- failure should
322 be accompanied by an exception.
323
324 If registry succeeds, the registry function returns 0; if it fails
325 (e.g. due to too many pending calls) it returns -1 (without setting
326 an exception condition).
327
328 Note that because registry may occur from within signal handlers,
329 or other asynchronous events, calling malloc() is unsafe!
330
331#ifdef WITH_THREAD
332 Any thread can schedule pending calls, but only the main thread
333 will execute them.
334#endif
335
336 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
337 There are two possible race conditions:
338 (1) nested asynchronous registry calls;
339 (2) registry calls made while pending calls are being processed.
340 While (1) is very unlikely, (2) is a real possibility.
341 The current code is safe against (2), but not against (1).
342 The safety against (2) is derived from the fact that only one
343 thread (the main thread) ever takes things out of the queue.
Guido van Rossuma9672091994-09-14 13:31:22 +0000344
Guido van Rossuma027efa1997-05-05 20:56:21 +0000345 XXX Darn! With the advent of thread state, we should have an array
346 of pending calls per thread in the thread state! Later...
347*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000348
Guido van Rossuma9672091994-09-14 13:31:22 +0000349#define NPENDINGCALLS 32
350static struct {
Thomas Wouters334fb892000-07-25 12:56:38 +0000351 int (*func)(void *);
352 void *arg;
Guido van Rossuma9672091994-09-14 13:31:22 +0000353} pendingcalls[NPENDINGCALLS];
354static volatile int pendingfirst = 0;
355static volatile int pendinglast = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000356static volatile int things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000357
358int
Thomas Wouters334fb892000-07-25 12:56:38 +0000359Py_AddPendingCall(int (*func)(void *), void *arg)
Guido van Rossuma9672091994-09-14 13:31:22 +0000360{
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000361 static volatile int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000362 int i, j;
363 /* XXX Begin critical section */
364 /* XXX If you want this to be safe against nested
365 XXX asynchronous calls, you'll have to work harder! */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000366 if (busy)
367 return -1;
368 busy = 1;
Guido van Rossuma9672091994-09-14 13:31:22 +0000369 i = pendinglast;
370 j = (i + 1) % NPENDINGCALLS;
Guido van Rossum04e70322002-07-17 16:57:13 +0000371 if (j == pendingfirst) {
372 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000373 return -1; /* Queue full */
Guido van Rossum04e70322002-07-17 16:57:13 +0000374 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000375 pendingcalls[i].func = func;
376 pendingcalls[i].arg = arg;
377 pendinglast = j;
Skip Montanarod581d772002-09-03 20:10:45 +0000378
379 _Py_Ticker = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000380 things_to_do = 1; /* Signal main loop */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000381 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000382 /* XXX End critical section */
383 return 0;
384}
385
Guido van Rossum180d7b41994-09-29 09:45:57 +0000386int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000387Py_MakePendingCalls(void)
Guido van Rossuma9672091994-09-14 13:31:22 +0000388{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000389 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000390#ifdef WITH_THREAD
Guido van Rossum65d5b571998-12-21 19:32:43 +0000391 if (main_thread && PyThread_get_thread_ident() != main_thread)
Guido van Rossuma9672091994-09-14 13:31:22 +0000392 return 0;
393#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000394 if (busy)
Guido van Rossum180d7b41994-09-29 09:45:57 +0000395 return 0;
396 busy = 1;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000397 things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000398 for (;;) {
399 int i;
Thomas Wouters334fb892000-07-25 12:56:38 +0000400 int (*func)(void *);
401 void *arg;
Guido van Rossuma9672091994-09-14 13:31:22 +0000402 i = pendingfirst;
403 if (i == pendinglast)
404 break; /* Queue empty */
405 func = pendingcalls[i].func;
406 arg = pendingcalls[i].arg;
407 pendingfirst = (i + 1) % NPENDINGCALLS;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000408 if (func(arg) < 0) {
409 busy = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000410 things_to_do = 1; /* We're not done yet */
Guido van Rossuma9672091994-09-14 13:31:22 +0000411 return -1;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000412 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000413 }
Guido van Rossum180d7b41994-09-29 09:45:57 +0000414 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000415 return 0;
416}
417
418
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000419/* The interpreter's recursion limit */
420
Hye-Shik Changb6fa2812005-04-04 15:49:02 +0000421#ifndef Py_DEFAULT_RECURSION_LIMIT
422#define Py_DEFAULT_RECURSION_LIMIT 1000
423#endif
424static int recursion_limit = Py_DEFAULT_RECURSION_LIMIT;
425int _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000426
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000427int
428Py_GetRecursionLimit(void)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000429{
430 return recursion_limit;
431}
432
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000433void
434Py_SetRecursionLimit(int new_limit)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000435{
436 recursion_limit = new_limit;
Armin Rigo2b3eb402003-10-28 12:05:48 +0000437 _Py_CheckRecursionLimit = recursion_limit;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000438}
439
Armin Rigo2b3eb402003-10-28 12:05:48 +0000440/* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
441 if the recursion_depth reaches _Py_CheckRecursionLimit.
442 If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit
443 to guarantee that _Py_CheckRecursiveCall() is regularly called.
444 Without USE_STACKCHECK, there is no need for this. */
445int
446_Py_CheckRecursiveCall(char *where)
447{
448 PyThreadState *tstate = PyThreadState_GET();
449
450#ifdef USE_STACKCHECK
451 if (PyOS_CheckStack()) {
452 --tstate->recursion_depth;
453 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
454 return -1;
455 }
456#endif
Martin v. Löwis5b222132007-06-10 09:51:05 +0000457 if (tstate->recursion_critical)
458 /* Somebody asked that we don't check for recursion. */
459 return 0;
460 if (tstate->overflowed) {
461 if (tstate->recursion_depth > recursion_limit + 50) {
462 /* Overflowing while handling an overflow. Give up. */
463 Py_FatalError("Cannot recover from stack overflow.");
464 }
465 return 0;
466 }
Armin Rigo2b3eb402003-10-28 12:05:48 +0000467 if (tstate->recursion_depth > recursion_limit) {
468 --tstate->recursion_depth;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000469 tstate->overflowed = 1;
Armin Rigo2b3eb402003-10-28 12:05:48 +0000470 PyErr_Format(PyExc_RuntimeError,
471 "maximum recursion depth exceeded%s",
472 where);
473 return -1;
474 }
475 _Py_CheckRecursionLimit = recursion_limit;
476 return 0;
477}
478
Guido van Rossum374a9221991-04-04 10:40:29 +0000479/* Status code for main loop (reason for stack unwind) */
Raymond Hettinger7c958652004-04-06 10:11:10 +0000480enum why_code {
481 WHY_NOT = 0x0001, /* No error */
482 WHY_EXCEPTION = 0x0002, /* Exception occurred */
483 WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */
484 WHY_RETURN = 0x0008, /* 'return' statement */
485 WHY_BREAK = 0x0010, /* 'break' statement */
486 WHY_CONTINUE = 0x0020, /* 'continue' statement */
487 WHY_YIELD = 0x0040 /* 'yield' operator */
488};
Guido van Rossum374a9221991-04-04 10:40:29 +0000489
Raymond Hettinger7c958652004-04-06 10:11:10 +0000490static enum why_code do_raise(PyObject *, PyObject *, PyObject *);
Guido van Rossum0368b722007-05-11 16:50:42 +0000491static int unpack_iterable(PyObject *, int, int, PyObject **);
Guido van Rossum1aa14831997-01-21 05:34:20 +0000492
Skip Montanarod581d772002-09-03 20:10:45 +0000493/* for manipulating the thread switch and periodic "stuff" - used to be
494 per thread, now just a pair o' globals */
Skip Montanaro99dba272002-09-03 20:19:06 +0000495int _Py_CheckInterval = 100;
496volatile int _Py_Ticker = 100;
Guido van Rossum374a9221991-04-04 10:40:29 +0000497
Guido van Rossumb209a111997-04-29 18:18:01 +0000498PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000499PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000500{
Tim Peters6d6c1a32001-08-02 04:15:00 +0000501 return PyEval_EvalCodeEx(co,
Guido van Rossum681d79a1995-07-18 14:51:37 +0000502 globals, locals,
Guido van Rossumb209a111997-04-29 18:18:01 +0000503 (PyObject **)NULL, 0,
504 (PyObject **)NULL, 0,
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000505 (PyObject **)NULL, 0,
Guido van Rossum4f72a782006-10-27 23:31:49 +0000506 NULL, NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000507}
508
509
510/* Interpreter main loop */
511
Martin v. Löwis8d97e332004-06-27 15:43:12 +0000512PyObject *
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000513PyEval_EvalFrame(PyFrameObject *f) {
514 /* This is for backward compatibility with extension modules that
515 used this API; core interpreter code should call PyEval_EvalFrameEx() */
516 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
Armin Rigo8817fcd2004-06-17 10: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
616 Some opcodes tend to come in pairs thus making it possible to predict
617 the second code when the first is run. For example, COMPARE_OP is often
618 followed by JUMP_IF_FALSE or JUMP_IF_TRUE. And, those opcodes are often
619 followed by a POP_TOP.
620
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
628 its two unpredictable branches, the HASARG 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); }
Fred Drakede26cfc2001-10-13 06:11:28 +0000666#define POP() ((void)(lltrace && prtrace(TOP(), "pop")), BASIC_POP())
Raymond Hettinger663004b2003-01-09 15:24:30 +0000667#define STACKADJ(n) { (void)(BASIC_STACKADJ(n), \
668 lltrace && prtrace(TOP(), "stackadj")); \
Thomas Wouters477c8d52006-05-27 19:21:47 +0000669 assert(STACK_LEVEL() <= co->co_stacksize); }
Guido van Rossumd8faa362007-04-27 19:54:29 +0000670#define EXT_POP(STACK_POINTER) (lltrace && prtrace((STACK_POINTER)[-1], "ext_pop"), *--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +0000671#else
672#define PUSH(v) BASIC_PUSH(v)
673#define POP() BASIC_POP()
Raymond Hettinger663004b2003-01-09 15:24:30 +0000674#define STACKADJ(n) BASIC_STACKADJ(n)
Guido van Rossumc2e20742006-02-27 22:32:47 +0000675#define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +0000676#endif
677
Guido van Rossum681d79a1995-07-18 14:51:37 +0000678/* Local variable macros */
679
680#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumcfbf1a32002-03-28 20:17:52 +0000681
682/* The SETLOCAL() macro must not DECREF the local variable in-place and
683 then store the new value; it must copy the old value to a temporary
684 value, then store the new value, and then DECREF the temporary value.
685 This is because it is possible that during the DECREF the frame is
686 accessed by other code (e.g. a __del__ method or gc.collect()) and the
687 variable would be pointing to already-freed memory. */
688#define SETLOCAL(i, value) do { PyObject *tmp = GETLOCAL(i); \
689 GETLOCAL(i) = value; \
690 Py_XDECREF(tmp); } while (0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000691
Guido van Rossuma027efa1997-05-05 20:56:21 +0000692/* Start of code */
693
Tim Peters5ca576e2001-06-18 22:08:13 +0000694 if (f == NULL)
695 return NULL;
696
Armin Rigo1d313ab2003-10-25 14:33:09 +0000697 /* push frame */
Armin Rigo2b3eb402003-10-28 12:05:48 +0000698 if (Py_EnterRecursiveCall(""))
Armin Rigo1d313ab2003-10-25 14:33:09 +0000699 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +0000700
Tim Peters5ca576e2001-06-18 22:08:13 +0000701 tstate->frame = f;
Tim Peters5ca576e2001-06-18 22:08:13 +0000702
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000703 if (tstate->use_tracing) {
704 if (tstate->c_tracefunc != NULL) {
705 /* tstate->c_tracefunc, if defined, is a
706 function that will be called on *every* entry
707 to a code block. Its return value, if not
708 None, is a function that will be called at
709 the start of each executed line of code.
710 (Actually, the function must return itself
711 in order to continue tracing.) The trace
712 functions are called with three arguments:
713 a pointer to the current frame, a string
714 indicating why the function is called, and
715 an argument which depends on the situation.
716 The global trace function is also called
717 whenever an exception is detected. */
718 if (call_trace(tstate->c_tracefunc, tstate->c_traceobj,
719 f, PyTrace_CALL, Py_None)) {
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000720 /* Trace function raised an error */
Armin Rigo2b3eb402003-10-28 12:05:48 +0000721 goto exit_eval_frame;
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000722 }
723 }
724 if (tstate->c_profilefunc != NULL) {
725 /* Similar for c_profilefunc, except it needn't
726 return itself and isn't called for "line" events */
727 if (call_trace(tstate->c_profilefunc,
728 tstate->c_profileobj,
729 f, PyTrace_CALL, Py_None)) {
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000730 /* Profile function raised an error */
Armin Rigo2b3eb402003-10-28 12:05:48 +0000731 goto exit_eval_frame;
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000732 }
733 }
734 }
735
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000736 co = f->f_code;
737 names = co->co_names;
738 consts = co->co_consts;
739 fastlocals = f->f_localsplus;
Thomas Wouters477c8d52006-05-27 19:21:47 +0000740 freevars = f->f_localsplus + co->co_nlocals;
Brett Cannonc9371d42005-06-25 08:23:41 +0000741 first_instr = (unsigned char*) PyString_AS_STRING(co->co_code);
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000742 /* An explanation is in order for the next line.
743
744 f->f_lasti now refers to the index of the last instruction
745 executed. You might think this was obvious from the name, but
746 this wasn't always true before 2.3! PyFrame_New now sets
747 f->f_lasti to -1 (i.e. the index *before* the first instruction)
748 and YIELD_VALUE doesn't fiddle with f_lasti any more. So this
Thomas Wouters902d6eb2007-01-09 23:18:33 +0000749 does work. Promise.
750
751 When the PREDICT() macros are enabled, some opcode pairs follow in
752 direct succession without updating f->f_lasti. A successful
753 prediction effectively links the two codes together as if they
754 were a single new opcode; accordingly,f->f_lasti will point to
755 the first code in the pair (for instance, GET_ITER followed by
756 FOR_ITER is effectively a single opcode and f->f_lasti will point
757 at to the beginning of the combined pair.)
758 */
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000759 next_instr = first_instr + f->f_lasti + 1;
760 stack_pointer = f->f_stacktop;
761 assert(stack_pointer != NULL);
762 f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */
763
Tim Peters5ca576e2001-06-18 22:08:13 +0000764#ifdef LLTRACE
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000765 lltrace = PyDict_GetItemString(f->f_globals, "__lltrace__") != NULL;
Tim Peters5ca576e2001-06-18 22:08:13 +0000766#endif
Neal Norwitz5f5153e2005-10-21 04:28:38 +0000767#if defined(Py_DEBUG) || defined(LLTRACE)
Tim Peters5ca576e2001-06-18 22:08:13 +0000768 filename = PyString_AsString(co->co_filename);
769#endif
Guido van Rossumac7be682001-01-17 15:42:30 +0000770
Guido van Rossum374a9221991-04-04 10:40:29 +0000771 why = WHY_NOT;
772 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000773 x = Py_None; /* Not a reference, just anything non-NULL */
Fred Drake48fba732000-10-11 13:54:07 +0000774 w = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +0000775
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000776 if (throwflag) { /* support for generator.throw() */
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000777 why = WHY_EXCEPTION;
778 goto on_error;
779 }
Thomas Wouters477c8d52006-05-27 19:21:47 +0000780
Guido van Rossum374a9221991-04-04 10:40:29 +0000781 for (;;) {
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000782#ifdef WITH_TSC
783 if (inst1 == 0) {
784 /* Almost surely, the opcode executed a break
785 or a continue, preventing inst1 from being set
786 on the way out of the loop.
787 */
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000788 READ_TIMESTAMP(inst1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000789 loop1 = inst1;
790 }
791 dump_tsc(opcode, ticked, inst0, inst1, loop0, loop1,
792 intr0, intr1);
793 ticked = 0;
794 inst1 = 0;
795 intr0 = 0;
796 intr1 = 0;
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000797 READ_TIMESTAMP(loop0);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000798#endif
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000799 assert(stack_pointer >= f->f_valuestack); /* else underflow */
Thomas Wouters477c8d52006-05-27 19:21:47 +0000800 assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000801
Guido van Rossuma027efa1997-05-05 20:56:21 +0000802 /* Do periodic things. Doing this every time through
803 the loop would add too much overhead, so we do it
804 only every Nth instruction. We also do it if
805 ``things_to_do'' is set, i.e. when an asynchronous
806 event needs attention (e.g. a signal handler or
807 async I/O handler); see Py_AddPendingCall() and
808 Py_MakePendingCalls() above. */
Guido van Rossumac7be682001-01-17 15:42:30 +0000809
Skip Montanarod581d772002-09-03 20:10:45 +0000810 if (--_Py_Ticker < 0) {
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000811 if (*next_instr == SETUP_FINALLY) {
812 /* Make the last opcode before
813 a try: finally: block uninterruptable. */
814 goto fast_next_opcode;
815 }
Skip Montanarod581d772002-09-03 20:10:45 +0000816 _Py_Ticker = _Py_CheckInterval;
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000817 tstate->tick_counter++;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000818#ifdef WITH_TSC
819 ticked = 1;
820#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000821 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000822 if (Py_MakePendingCalls() < 0) {
823 why = WHY_EXCEPTION;
824 goto on_error;
825 }
Kurt B. Kaiser4c79a832004-11-23 18:06:08 +0000826 if (things_to_do)
827 /* MakePendingCalls() didn't succeed.
828 Force early re-execution of this
829 "periodic" code, possibly after
830 a thread switch */
831 _Py_Ticker = 0;
Guido van Rossum8861b741996-07-30 16:49:37 +0000832 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000833#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000834 if (interpreter_lock) {
835 /* Give another thread a chance */
836
Guido van Rossum25ce5661997-08-02 03:10:38 +0000837 if (PyThreadState_Swap(NULL) != tstate)
838 Py_FatalError("ceval: tstate mix-up");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000839 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000840
841 /* Other threads may run now */
842
Guido van Rossum65d5b571998-12-21 19:32:43 +0000843 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000844 if (PyThreadState_Swap(tstate) != NULL)
845 Py_FatalError("ceval: orphan tstate");
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000846
847 /* Check for thread interrupts */
848
849 if (tstate->async_exc != NULL) {
850 x = tstate->async_exc;
851 tstate->async_exc = NULL;
852 PyErr_SetNone(x);
853 Py_DECREF(x);
854 why = WHY_EXCEPTION;
855 goto on_error;
856 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000857 }
858#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000859 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000860
Neil Schemenauer63543862002-02-17 19:10:14 +0000861 fast_next_opcode:
Guido van Rossum99bec951992-09-03 20:29:45 +0000862 f->f_lasti = INSTR_OFFSET();
Guido van Rossumac7be682001-01-17 15:42:30 +0000863
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000864 /* line-by-line tracing support */
865
866 if (tstate->c_tracefunc != NULL && !tstate->tracing) {
867 /* see maybe_call_line_trace
868 for expository comments */
869 f->f_stacktop = stack_pointer;
Tim Peters8a5c3c72004-04-05 19:36:21 +0000870
Michael W. Hudson58ee2af2003-04-29 16:18:47 +0000871 err = maybe_call_line_trace(tstate->c_tracefunc,
872 tstate->c_traceobj,
Armin Rigobf57a142004-03-22 19:24:58 +0000873 f, &instr_lb, &instr_ub,
874 &instr_prev);
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000875 /* Reload possibly changed frame fields */
876 JUMPTO(f->f_lasti);
Michael W. Hudson58ee2af2003-04-29 16:18:47 +0000877 if (f->f_stacktop != NULL) {
878 stack_pointer = f->f_stacktop;
879 f->f_stacktop = NULL;
880 }
881 if (err) {
882 /* trace function raised an exception */
883 goto on_error;
884 }
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000885 }
886
887 /* Extract opcode and argument */
888
Guido van Rossum374a9221991-04-04 10:40:29 +0000889 opcode = NEXTOP();
Armin Rigo8817fcd2004-06-17 10:22:40 +0000890 oparg = 0; /* allows oparg to be stored in a register because
891 it doesn't have to be remembered across a full loop */
Raymond Hettinger5bed4562004-04-10 23:34:17 +0000892 if (HAS_ARG(opcode))
893 oparg = NEXTARG();
Fred Drakeef8ace32000-08-24 00:32:09 +0000894 dispatch_opcode:
Guido van Rossum950361c1997-01-24 13:49:28 +0000895#ifdef DYNAMIC_EXECUTION_PROFILE
896#ifdef DXPAIRS
897 dxpairs[lastopcode][opcode]++;
898 lastopcode = opcode;
899#endif
900 dxp[opcode]++;
901#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000902
Guido van Rossum96a42c81992-01-12 02:29:51 +0000903#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000904 /* Instruction tracing */
Guido van Rossumac7be682001-01-17 15:42:30 +0000905
Guido van Rossum96a42c81992-01-12 02:29:51 +0000906 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000907 if (HAS_ARG(opcode)) {
908 printf("%d: %d, %d\n",
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000909 f->f_lasti, opcode, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +0000910 }
911 else {
912 printf("%d: %d\n",
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000913 f->f_lasti, opcode);
Guido van Rossum374a9221991-04-04 10:40:29 +0000914 }
915 }
916#endif
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000917
Guido van Rossum374a9221991-04-04 10:40:29 +0000918 /* Main switch on opcode */
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000919 READ_TIMESTAMP(inst0);
Jeremy Hylton52820442001-01-03 23:52:36 +0000920
Guido van Rossum374a9221991-04-04 10:40:29 +0000921 switch (opcode) {
Guido van Rossumac7be682001-01-17 15:42:30 +0000922
Guido van Rossum374a9221991-04-04 10:40:29 +0000923 /* BEWARE!
924 It is essential that any operation that fails sets either
925 x to NULL, err to nonzero, or why to anything but WHY_NOT,
926 and that no operation that succeeds does this! */
Guido van Rossumac7be682001-01-17 15:42:30 +0000927
Guido van Rossum374a9221991-04-04 10:40:29 +0000928 /* case STOP_CODE: this is an error! */
Guido van Rossumac7be682001-01-17 15:42:30 +0000929
Raymond Hettinger9c18e812004-06-21 16:31:15 +0000930 case NOP:
931 goto fast_next_opcode;
932
Neil Schemenauer63543862002-02-17 19:10:14 +0000933 case LOAD_FAST:
934 x = GETLOCAL(oparg);
935 if (x != NULL) {
936 Py_INCREF(x);
937 PUSH(x);
938 goto fast_next_opcode;
939 }
940 format_exc_check_arg(PyExc_UnboundLocalError,
941 UNBOUNDLOCAL_ERROR_MSG,
942 PyTuple_GetItem(co->co_varnames, oparg));
943 break;
944
945 case LOAD_CONST:
Skip Montanaro04d80f82002-08-04 21:03:35 +0000946 x = GETITEM(consts, oparg);
Neil Schemenauer63543862002-02-17 19:10:14 +0000947 Py_INCREF(x);
948 PUSH(x);
949 goto fast_next_opcode;
950
Raymond Hettinger7dc52212003-03-16 20:14:44 +0000951 PREDICTED_WITH_ARG(STORE_FAST);
Neil Schemenauer63543862002-02-17 19:10:14 +0000952 case STORE_FAST:
953 v = POP();
954 SETLOCAL(oparg, v);
955 goto fast_next_opcode;
956
Raymond Hettingerf606f872003-03-16 03:11:04 +0000957 PREDICTED(POP_TOP);
Guido van Rossum374a9221991-04-04 10:40:29 +0000958 case POP_TOP:
959 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000960 Py_DECREF(v);
Neil Schemenauer63543862002-02-17 19:10:14 +0000961 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000962
Guido van Rossum374a9221991-04-04 10:40:29 +0000963 case ROT_TWO:
Raymond Hettinger663004b2003-01-09 15:24:30 +0000964 v = TOP();
965 w = SECOND();
966 SET_TOP(w);
967 SET_SECOND(v);
Raymond Hettinger080cb322003-03-14 01:37:42 +0000968 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000969
Guido van Rossum374a9221991-04-04 10:40:29 +0000970 case ROT_THREE:
Raymond Hettinger663004b2003-01-09 15:24:30 +0000971 v = TOP();
972 w = SECOND();
973 x = THIRD();
974 SET_TOP(w);
975 SET_SECOND(x);
976 SET_THIRD(v);
Raymond Hettinger080cb322003-03-14 01:37:42 +0000977 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000978
Thomas Wouters434d0822000-08-24 20:11:32 +0000979 case ROT_FOUR:
Raymond Hettinger663004b2003-01-09 15:24:30 +0000980 u = TOP();
981 v = SECOND();
982 w = THIRD();
983 x = FOURTH();
984 SET_TOP(v);
985 SET_SECOND(w);
986 SET_THIRD(x);
987 SET_FOURTH(u);
Raymond Hettinger080cb322003-03-14 01:37:42 +0000988 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000989
Guido van Rossum374a9221991-04-04 10:40:29 +0000990 case DUP_TOP:
991 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000992 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000993 PUSH(v);
Raymond Hettinger080cb322003-03-14 01:37:42 +0000994 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +0000995
Thomas Wouters434d0822000-08-24 20:11:32 +0000996 case DUP_TOPX:
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +0000997 if (oparg == 2) {
Raymond Hettinger663004b2003-01-09 15:24:30 +0000998 x = TOP();
Tim Peters35ba6892000-10-11 07:04:49 +0000999 Py_INCREF(x);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001000 w = SECOND();
Tim Peters35ba6892000-10-11 07:04:49 +00001001 Py_INCREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001002 STACKADJ(2);
1003 SET_TOP(x);
1004 SET_SECOND(w);
Raymond Hettingerf606f872003-03-16 03:11:04 +00001005 goto fast_next_opcode;
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00001006 } else if (oparg == 3) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00001007 x = TOP();
Tim Peters35ba6892000-10-11 07:04:49 +00001008 Py_INCREF(x);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001009 w = SECOND();
Tim Peters35ba6892000-10-11 07:04:49 +00001010 Py_INCREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001011 v = THIRD();
Tim Peters35ba6892000-10-11 07:04:49 +00001012 Py_INCREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001013 STACKADJ(3);
1014 SET_TOP(x);
1015 SET_SECOND(w);
1016 SET_THIRD(v);
Raymond Hettingerf606f872003-03-16 03:11:04 +00001017 goto fast_next_opcode;
Thomas Wouters434d0822000-08-24 20:11:32 +00001018 }
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00001019 Py_FatalError("invalid argument to DUP_TOPX"
1020 " (bytecode corruption?)");
Tim Peters35ba6892000-10-11 07:04:49 +00001021 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001022
Guido van Rossum374a9221991-04-04 10:40:29 +00001023 case UNARY_POSITIVE:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001024 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001025 x = PyNumber_Positive(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001026 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001027 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001028 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001029 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001030
Guido van Rossum374a9221991-04-04 10:40:29 +00001031 case UNARY_NEGATIVE:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001032 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001033 x = PyNumber_Negative(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001034 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001035 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001036 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001037 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001038
Guido van Rossum374a9221991-04-04 10:40:29 +00001039 case UNARY_NOT:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001040 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001041 err = PyObject_IsTrue(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001042 Py_DECREF(v);
Guido van Rossumfc490731997-05-06 15:06:49 +00001043 if (err == 0) {
1044 Py_INCREF(Py_True);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001045 SET_TOP(Py_True);
Guido van Rossumfc490731997-05-06 15:06:49 +00001046 continue;
1047 }
1048 else if (err > 0) {
1049 Py_INCREF(Py_False);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001050 SET_TOP(Py_False);
Guido van Rossumfc490731997-05-06 15:06:49 +00001051 err = 0;
1052 continue;
1053 }
Raymond Hettinger8bb90a52003-01-14 12:43:10 +00001054 STACKADJ(-1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001055 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001056
Guido van Rossum7928cd71991-10-24 14:59:31 +00001057 case UNARY_INVERT:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001058 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001059 x = PyNumber_Invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001060 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001061 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001062 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001063 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001064
Guido van Rossum50564e81996-01-12 01:13:16 +00001065 case BINARY_POWER:
1066 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001067 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001068 x = PyNumber_Power(v, w, Py_None);
Guido van Rossumb209a111997-04-29 18:18:01 +00001069 Py_DECREF(v);
1070 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001071 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001072 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +00001073 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001074
Guido van Rossum374a9221991-04-04 10:40:29 +00001075 case BINARY_MULTIPLY:
1076 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001077 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001078 x = PyNumber_Multiply(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001079 Py_DECREF(v);
1080 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001081 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001082 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001083 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001084
Tim Peters3caca232001-12-06 06:23:26 +00001085 case BINARY_TRUE_DIVIDE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001086 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001087 v = TOP();
Tim Peters3caca232001-12-06 06:23:26 +00001088 x = PyNumber_TrueDivide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001089 Py_DECREF(v);
1090 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001091 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001092 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001093 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001094
Guido van Rossum4668b002001-08-08 05:00:18 +00001095 case BINARY_FLOOR_DIVIDE:
1096 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001097 v = TOP();
Guido van Rossum4668b002001-08-08 05:00:18 +00001098 x = PyNumber_FloorDivide(v, w);
1099 Py_DECREF(v);
1100 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001101 SET_TOP(x);
Guido van Rossum4668b002001-08-08 05:00:18 +00001102 if (x != NULL) continue;
1103 break;
1104
Guido van Rossum374a9221991-04-04 10:40:29 +00001105 case BINARY_MODULO:
1106 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001107 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001108 x = PyNumber_Remainder(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001109 Py_DECREF(v);
1110 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001111 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001112 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001113 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001114
Guido van Rossum374a9221991-04-04 10:40:29 +00001115 case BINARY_ADD:
1116 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001117 v = TOP();
Tim Petersc1e6d962001-10-05 20:21:03 +00001118 if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
Guido van Rossumc12da691997-07-17 23:12:42 +00001119 /* INLINE: int + int */
1120 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001121 a = PyInt_AS_LONG(v);
1122 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001123 i = a + b;
Guido van Rossum87780df2001-08-23 02:58:07 +00001124 if ((i^a) < 0 && (i^b) < 0)
1125 goto slow_add;
1126 x = PyInt_FromLong(i);
Guido van Rossumc12da691997-07-17 23:12:42 +00001127 }
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001128 else if (PyString_CheckExact(v) &&
1129 PyString_CheckExact(w)) {
1130 x = string_concatenate(v, w, f, next_instr);
1131 /* string_concatenate consumed the ref to v */
1132 goto skip_decref_vx;
1133 }
Guido van Rossum87780df2001-08-23 02:58:07 +00001134 else {
1135 slow_add:
Guido van Rossumc12da691997-07-17 23:12:42 +00001136 x = PyNumber_Add(v, w);
Guido van Rossum87780df2001-08-23 02:58:07 +00001137 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001138 Py_DECREF(v);
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001139 skip_decref_vx:
Guido van Rossumb209a111997-04-29 18:18:01 +00001140 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001141 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001142 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001143 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001144
Guido van Rossum374a9221991-04-04 10:40:29 +00001145 case BINARY_SUBTRACT:
1146 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001147 v = TOP();
Tim Petersc1e6d962001-10-05 20:21:03 +00001148 if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
Guido van Rossumc12da691997-07-17 23:12:42 +00001149 /* INLINE: int - int */
1150 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001151 a = PyInt_AS_LONG(v);
1152 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001153 i = a - b;
Guido van Rossum87780df2001-08-23 02:58:07 +00001154 if ((i^a) < 0 && (i^~b) < 0)
1155 goto slow_sub;
1156 x = PyInt_FromLong(i);
Guido van Rossumc12da691997-07-17 23:12:42 +00001157 }
Guido van Rossum87780df2001-08-23 02:58:07 +00001158 else {
1159 slow_sub:
Guido van Rossumc12da691997-07-17 23:12:42 +00001160 x = PyNumber_Subtract(v, w);
Guido van Rossum87780df2001-08-23 02:58:07 +00001161 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001162 Py_DECREF(v);
1163 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001164 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001165 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001166 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001167
Guido van Rossum374a9221991-04-04 10:40:29 +00001168 case BINARY_SUBSCR:
1169 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001170 v = TOP();
Tim Petersb1c46982001-10-05 20:41:38 +00001171 if (PyList_CheckExact(v) && PyInt_CheckExact(w)) {
Guido van Rossumc12da691997-07-17 23:12:42 +00001172 /* INLINE: list[int] */
Neal Norwitz814e9382006-03-02 07:54:28 +00001173 Py_ssize_t i = PyInt_AsSsize_t(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001174 if (i < 0)
Guido van Rossumfa00e951998-07-08 15:02:37 +00001175 i += PyList_GET_SIZE(v);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001176 if (i >= 0 && i < PyList_GET_SIZE(v)) {
Guido van Rossumfa00e951998-07-08 15:02:37 +00001177 x = PyList_GET_ITEM(v, i);
Guido van Rossumc12da691997-07-17 23:12:42 +00001178 Py_INCREF(x);
1179 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001180 else
1181 goto slow_get;
Guido van Rossumc12da691997-07-17 23:12:42 +00001182 }
1183 else
Raymond Hettinger467a6982004-04-07 11:39:21 +00001184 slow_get:
Guido van Rossumc12da691997-07-17 23:12:42 +00001185 x = PyObject_GetItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001186 Py_DECREF(v);
1187 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001188 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001189 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001190 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001191
Guido van Rossum7928cd71991-10-24 14:59:31 +00001192 case BINARY_LSHIFT:
1193 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001194 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001195 x = PyNumber_Lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001196 Py_DECREF(v);
1197 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001198 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001199 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001200 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001201
Guido van Rossum7928cd71991-10-24 14:59:31 +00001202 case BINARY_RSHIFT:
1203 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001204 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001205 x = PyNumber_Rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001206 Py_DECREF(v);
1207 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001208 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001209 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001210 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001211
Guido van Rossum7928cd71991-10-24 14:59:31 +00001212 case BINARY_AND:
1213 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001214 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001215 x = PyNumber_And(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001216 Py_DECREF(v);
1217 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001218 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001219 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001220 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001221
Guido van Rossum7928cd71991-10-24 14:59:31 +00001222 case BINARY_XOR:
1223 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001224 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001225 x = PyNumber_Xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001226 Py_DECREF(v);
1227 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001228 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001229 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001230 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001231
Guido van Rossum7928cd71991-10-24 14:59:31 +00001232 case BINARY_OR:
1233 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001234 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001235 x = PyNumber_Or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001236 Py_DECREF(v);
1237 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001238 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001239 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001240 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001241
Raymond Hettingerdd80f762004-03-07 07:31:06 +00001242 case LIST_APPEND:
1243 w = POP();
1244 v = POP();
1245 err = PyList_Append(v, w);
1246 Py_DECREF(v);
1247 Py_DECREF(w);
Raymond Hettingerfba1cfc2004-03-12 16:33:17 +00001248 if (err == 0) {
1249 PREDICT(JUMP_ABSOLUTE);
1250 continue;
1251 }
Raymond Hettingerdd80f762004-03-07 07:31:06 +00001252 break;
1253
Nick Coghlan650f0d02007-04-15 12:05:43 +00001254 case SET_ADD:
1255 w = POP();
1256 v = POP();
1257 err = PySet_Add(v, w);
1258 Py_DECREF(v);
1259 Py_DECREF(w);
1260 if (err == 0) {
1261 PREDICT(JUMP_ABSOLUTE);
1262 continue;
1263 }
1264 break;
1265
Thomas Wouters434d0822000-08-24 20:11:32 +00001266 case INPLACE_POWER:
1267 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001268 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001269 x = PyNumber_InPlacePower(v, w, Py_None);
1270 Py_DECREF(v);
1271 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001272 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001273 if (x != NULL) continue;
1274 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001275
Thomas Wouters434d0822000-08-24 20:11:32 +00001276 case INPLACE_MULTIPLY:
1277 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001278 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001279 x = PyNumber_InPlaceMultiply(v, w);
1280 Py_DECREF(v);
1281 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001282 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001283 if (x != NULL) continue;
1284 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001285
Tim Peters54b11912001-12-25 18:49:11 +00001286 case INPLACE_TRUE_DIVIDE:
Thomas Wouters434d0822000-08-24 20:11:32 +00001287 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001288 v = TOP();
Tim Peters54b11912001-12-25 18:49:11 +00001289 x = PyNumber_InPlaceTrueDivide(v, w);
Thomas Wouters434d0822000-08-24 20:11:32 +00001290 Py_DECREF(v);
1291 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001292 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001293 if (x != NULL) continue;
1294 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001295
Guido van Rossum4668b002001-08-08 05:00:18 +00001296 case INPLACE_FLOOR_DIVIDE:
1297 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001298 v = TOP();
Guido van Rossum4668b002001-08-08 05:00:18 +00001299 x = PyNumber_InPlaceFloorDivide(v, w);
1300 Py_DECREF(v);
1301 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001302 SET_TOP(x);
Guido van Rossum4668b002001-08-08 05:00:18 +00001303 if (x != NULL) continue;
1304 break;
1305
Thomas Wouters434d0822000-08-24 20:11:32 +00001306 case INPLACE_MODULO:
1307 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001308 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001309 x = PyNumber_InPlaceRemainder(v, w);
1310 Py_DECREF(v);
1311 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001312 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001313 if (x != NULL) continue;
1314 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001315
Thomas Wouters434d0822000-08-24 20:11:32 +00001316 case INPLACE_ADD:
1317 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001318 v = TOP();
Tim Petersc1e6d962001-10-05 20:21:03 +00001319 if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
Thomas Wouters434d0822000-08-24 20:11:32 +00001320 /* INLINE: int + int */
1321 register long a, b, i;
1322 a = PyInt_AS_LONG(v);
1323 b = PyInt_AS_LONG(w);
1324 i = a + b;
Guido van Rossum87780df2001-08-23 02:58:07 +00001325 if ((i^a) < 0 && (i^b) < 0)
1326 goto slow_iadd;
1327 x = PyInt_FromLong(i);
Thomas Wouters434d0822000-08-24 20:11:32 +00001328 }
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001329 else if (PyString_CheckExact(v) &&
1330 PyString_CheckExact(w)) {
1331 x = string_concatenate(v, w, f, next_instr);
1332 /* string_concatenate consumed the ref to v */
1333 goto skip_decref_v;
1334 }
Guido van Rossum87780df2001-08-23 02:58:07 +00001335 else {
1336 slow_iadd:
Thomas Wouters434d0822000-08-24 20:11:32 +00001337 x = PyNumber_InPlaceAdd(v, w);
Guido van Rossum87780df2001-08-23 02:58:07 +00001338 }
Thomas Wouters434d0822000-08-24 20:11:32 +00001339 Py_DECREF(v);
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001340 skip_decref_v:
Thomas Wouters434d0822000-08-24 20:11:32 +00001341 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001342 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001343 if (x != NULL) continue;
1344 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001345
Thomas Wouters434d0822000-08-24 20:11:32 +00001346 case INPLACE_SUBTRACT:
1347 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001348 v = TOP();
Tim Petersc1e6d962001-10-05 20:21:03 +00001349 if (PyInt_CheckExact(v) && PyInt_CheckExact(w)) {
Thomas Wouters434d0822000-08-24 20:11:32 +00001350 /* INLINE: int - int */
1351 register long a, b, i;
1352 a = PyInt_AS_LONG(v);
1353 b = PyInt_AS_LONG(w);
1354 i = a - b;
Guido van Rossum87780df2001-08-23 02:58:07 +00001355 if ((i^a) < 0 && (i^~b) < 0)
1356 goto slow_isub;
1357 x = PyInt_FromLong(i);
Thomas Wouters434d0822000-08-24 20:11:32 +00001358 }
Guido van Rossum87780df2001-08-23 02:58:07 +00001359 else {
1360 slow_isub:
Thomas Wouters434d0822000-08-24 20:11:32 +00001361 x = PyNumber_InPlaceSubtract(v, w);
Guido van Rossum87780df2001-08-23 02:58:07 +00001362 }
Thomas Wouters434d0822000-08-24 20:11:32 +00001363 Py_DECREF(v);
1364 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001365 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001366 if (x != NULL) continue;
1367 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001368
Thomas Wouters434d0822000-08-24 20:11:32 +00001369 case INPLACE_LSHIFT:
1370 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001371 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001372 x = PyNumber_InPlaceLshift(v, w);
1373 Py_DECREF(v);
1374 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001375 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001376 if (x != NULL) continue;
1377 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001378
Thomas Wouters434d0822000-08-24 20:11:32 +00001379 case INPLACE_RSHIFT:
1380 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001381 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001382 x = PyNumber_InPlaceRshift(v, w);
1383 Py_DECREF(v);
1384 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001385 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001386 if (x != NULL) continue;
1387 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001388
Thomas Wouters434d0822000-08-24 20:11:32 +00001389 case INPLACE_AND:
1390 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001391 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001392 x = PyNumber_InPlaceAnd(v, w);
1393 Py_DECREF(v);
1394 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001395 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001396 if (x != NULL) continue;
1397 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001398
Thomas Wouters434d0822000-08-24 20:11:32 +00001399 case INPLACE_XOR:
1400 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001401 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001402 x = PyNumber_InPlaceXor(v, w);
1403 Py_DECREF(v);
1404 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001405 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001406 if (x != NULL) continue;
1407 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001408
Thomas Wouters434d0822000-08-24 20:11:32 +00001409 case INPLACE_OR:
1410 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001411 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001412 x = PyNumber_InPlaceOr(v, w);
1413 Py_DECREF(v);
1414 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001415 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001416 if (x != NULL) continue;
1417 break;
1418
Guido van Rossum374a9221991-04-04 10:40:29 +00001419 case SLICE+0:
1420 case SLICE+1:
1421 case SLICE+2:
1422 case SLICE+3:
1423 if ((opcode-SLICE) & 2)
1424 w = POP();
1425 else
1426 w = NULL;
1427 if ((opcode-SLICE) & 1)
1428 v = POP();
1429 else
1430 v = NULL;
Raymond Hettinger663004b2003-01-09 15:24:30 +00001431 u = TOP();
Guido van Rossum374a9221991-04-04 10:40:29 +00001432 x = apply_slice(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001433 Py_DECREF(u);
1434 Py_XDECREF(v);
1435 Py_XDECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001436 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001437 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001438 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001439
Guido van Rossum374a9221991-04-04 10:40:29 +00001440 case STORE_SLICE+0:
1441 case STORE_SLICE+1:
1442 case STORE_SLICE+2:
1443 case STORE_SLICE+3:
1444 if ((opcode-STORE_SLICE) & 2)
1445 w = POP();
1446 else
1447 w = NULL;
1448 if ((opcode-STORE_SLICE) & 1)
1449 v = POP();
1450 else
1451 v = NULL;
1452 u = POP();
1453 t = POP();
1454 err = assign_slice(u, v, w, t); /* u[v:w] = t */
Guido van Rossumb209a111997-04-29 18:18:01 +00001455 Py_DECREF(t);
1456 Py_DECREF(u);
1457 Py_XDECREF(v);
1458 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001459 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001460 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001461
Guido van Rossum374a9221991-04-04 10:40:29 +00001462 case DELETE_SLICE+0:
1463 case DELETE_SLICE+1:
1464 case DELETE_SLICE+2:
1465 case DELETE_SLICE+3:
1466 if ((opcode-DELETE_SLICE) & 2)
1467 w = POP();
1468 else
1469 w = NULL;
1470 if ((opcode-DELETE_SLICE) & 1)
1471 v = POP();
1472 else
1473 v = NULL;
1474 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001475 err = assign_slice(u, v, w, (PyObject *)NULL);
Guido van Rossum374a9221991-04-04 10:40:29 +00001476 /* del u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +00001477 Py_DECREF(u);
1478 Py_XDECREF(v);
1479 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001480 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001481 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001482
Guido van Rossum374a9221991-04-04 10:40:29 +00001483 case STORE_SUBSCR:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001484 w = TOP();
1485 v = SECOND();
1486 u = THIRD();
1487 STACKADJ(-3);
Guido van Rossum374a9221991-04-04 10:40:29 +00001488 /* v[w] = u */
Guido van Rossumfc490731997-05-06 15:06:49 +00001489 err = PyObject_SetItem(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001490 Py_DECREF(u);
1491 Py_DECREF(v);
1492 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001493 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001494 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001495
Guido van Rossum374a9221991-04-04 10:40:29 +00001496 case DELETE_SUBSCR:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001497 w = TOP();
1498 v = SECOND();
1499 STACKADJ(-2);
Guido van Rossum374a9221991-04-04 10:40:29 +00001500 /* del v[w] */
Guido van Rossumfc490731997-05-06 15:06:49 +00001501 err = PyObject_DelItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001502 Py_DECREF(v);
1503 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001504 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001505 break;
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001506
Guido van Rossum374a9221991-04-04 10:40:29 +00001507 case PRINT_EXPR:
1508 v = POP();
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001509 w = PySys_GetObject("displayhook");
1510 if (w == NULL) {
1511 PyErr_SetString(PyExc_RuntimeError,
1512 "lost sys.displayhook");
1513 err = -1;
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001514 x = NULL;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001515 }
1516 if (err == 0) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001517 x = PyTuple_Pack(1, v);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001518 if (x == NULL)
1519 err = -1;
1520 }
1521 if (err == 0) {
1522 w = PyEval_CallObject(w, x);
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001523 Py_XDECREF(w);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001524 if (w == NULL)
1525 err = -1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001526 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001527 Py_DECREF(v);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001528 Py_XDECREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001529 break;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001530
Thomas Wouters434d0822000-08-24 20:11:32 +00001531#ifdef CASE_TOO_BIG
1532 default: switch (opcode) {
1533#endif
Guido van Rossumf10570b1995-07-07 22:53:21 +00001534 case RAISE_VARARGS:
1535 u = v = w = NULL;
1536 switch (oparg) {
1537 case 3:
1538 u = POP(); /* traceback */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001539 /* Fallthrough */
1540 case 2:
1541 v = POP(); /* value */
1542 /* Fallthrough */
1543 case 1:
1544 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001545 case 0: /* Fallthrough */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001546 why = do_raise(w, v, u);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001547 break;
1548 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001549 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001550 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001551 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001552 break;
1553 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001554 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001555
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001556 case STORE_LOCALS:
1557 x = POP();
1558 v = f->f_locals;
1559 Py_XDECREF(v);
1560 f->f_locals = x;
1561 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001562
Guido van Rossum374a9221991-04-04 10:40:29 +00001563 case RETURN_VALUE:
1564 retval = POP();
1565 why = WHY_RETURN;
Raymond Hettinger1dd83092004-02-06 18:32:33 +00001566 goto fast_block_end;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001567
Tim Peters5ca576e2001-06-18 22:08:13 +00001568 case YIELD_VALUE:
1569 retval = POP();
Tim Peters8c963692001-06-23 05:26:56 +00001570 f->f_stacktop = stack_pointer;
Tim Peters5ca576e2001-06-18 22:08:13 +00001571 why = WHY_YIELD;
Raymond Hettinger1dd83092004-02-06 18:32:33 +00001572 goto fast_yield;
Tim Peters5ca576e2001-06-18 22:08:13 +00001573
Guido van Rossum374a9221991-04-04 10:40:29 +00001574 case POP_BLOCK:
1575 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001576 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001577 while (STACK_LEVEL() > b->b_level) {
1578 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001579 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001580 }
1581 }
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001582 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001583
Guido van Rossum374a9221991-04-04 10:40:29 +00001584 case END_FINALLY:
1585 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001586 if (PyInt_Check(v)) {
Raymond Hettinger7c958652004-04-06 10:11:10 +00001587 why = (enum why_code) PyInt_AS_LONG(v);
Tim Peters8a5c3c72004-04-05 19:36:21 +00001588 assert(why != WHY_YIELD);
Raymond Hettingerc8aa08b2004-04-11 14:59:33 +00001589 if (why == WHY_RETURN ||
1590 why == WHY_CONTINUE)
Guido van Rossum374a9221991-04-04 10:40:29 +00001591 retval = POP();
1592 }
Brett Cannonf74225d2007-02-26 21:10:16 +00001593 else if (PyExceptionClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001594 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001595 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001596 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001597 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001598 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001599 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001600 else if (v != Py_None) {
1601 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001602 "'finally' pops bad exception");
1603 why = WHY_EXCEPTION;
1604 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001605 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001606 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001607
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001608 case LOAD_BUILD_CLASS:
1609 x = PyDict_GetItemString(f->f_builtins,
1610 "__build_class__");
1611 if (x == NULL) {
1612 PyErr_SetString(PyExc_ImportError,
1613 "__build_class__ not found");
1614 break;
1615 }
1616 Py_INCREF(x);
1617 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001618 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001619
Guido van Rossum374a9221991-04-04 10:40:29 +00001620 case STORE_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001621 w = GETITEM(names, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001622 v = POP();
Raymond Hettinger467a6982004-04-07 11:39:21 +00001623 if ((x = f->f_locals) != NULL) {
Raymond Hettinger66bd2332004-08-02 08:30:07 +00001624 if (PyDict_CheckExact(x))
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001625 err = PyDict_SetItem(x, w, v);
1626 else
1627 err = PyObject_SetItem(x, w, v);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001628 Py_DECREF(v);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001629 if (err == 0) continue;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001630 break;
1631 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001632 PyErr_Format(PyExc_SystemError,
1633 "no locals found when storing %s",
1634 PyObject_REPR(w));
Guido van Rossum374a9221991-04-04 10:40:29 +00001635 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001636
Guido van Rossum374a9221991-04-04 10:40:29 +00001637 case DELETE_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001638 w = GETITEM(names, oparg);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001639 if ((x = f->f_locals) != NULL) {
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001640 if ((err = PyObject_DelItem(x, w)) != 0)
Raymond Hettinger467a6982004-04-07 11:39:21 +00001641 format_exc_check_arg(PyExc_NameError,
1642 NAME_ERROR_MSG ,w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001643 break;
1644 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001645 PyErr_Format(PyExc_SystemError,
1646 "no locals when deleting %s",
1647 PyObject_REPR(w));
Guido van Rossum374a9221991-04-04 10:40:29 +00001648 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001649
Raymond Hettinger7dc52212003-03-16 20:14:44 +00001650 PREDICTED_WITH_ARG(UNPACK_SEQUENCE);
Thomas Wouters0be5aab2000-08-11 22:15:52 +00001651 case UNPACK_SEQUENCE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001652 v = POP();
Raymond Hettingerf114a3a2004-03-08 23:25:30 +00001653 if (PyTuple_CheckExact(v) && PyTuple_GET_SIZE(v) == oparg) {
1654 PyObject **items = ((PyTupleObject *)v)->ob_item;
1655 while (oparg--) {
1656 w = items[oparg];
1657 Py_INCREF(w);
1658 PUSH(w);
Barry Warsawe42b18f1997-08-25 22:13:04 +00001659 }
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001660 Py_DECREF(v);
1661 continue;
Raymond Hettingerf114a3a2004-03-08 23:25:30 +00001662 } else if (PyList_CheckExact(v) && PyList_GET_SIZE(v) == oparg) {
1663 PyObject **items = ((PyListObject *)v)->ob_item;
1664 while (oparg--) {
1665 w = items[oparg];
1666 Py_INCREF(w);
1667 PUSH(w);
Barry Warsawe42b18f1997-08-25 22:13:04 +00001668 }
Guido van Rossum0368b722007-05-11 16:50:42 +00001669 } else if (unpack_iterable(v, oparg, -1,
Guido van Rossumd8faa362007-04-27 19:54:29 +00001670 stack_pointer + oparg)) {
Tim Petersd6d010b2001-06-21 02:49:55 +00001671 stack_pointer += oparg;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001672 } else {
1673 /* unpack_iterable() raised an exception */
Barry Warsawe42b18f1997-08-25 22:13:04 +00001674 why = WHY_EXCEPTION;
Tim Peters8b13b3e2001-09-30 05:58:42 +00001675 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001676 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001677 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001678
Guido van Rossum0368b722007-05-11 16:50:42 +00001679 case UNPACK_EX:
1680 {
1681 int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8);
1682 v = POP();
1683
1684 if (unpack_iterable(v, oparg & 0xFF, oparg >> 8,
1685 stack_pointer + totalargs)) {
1686 stack_pointer += totalargs;
1687 } else {
1688 why = WHY_EXCEPTION;
1689 }
1690 Py_DECREF(v);
1691 break;
1692 }
1693
Guido van Rossum374a9221991-04-04 10:40:29 +00001694 case STORE_ATTR:
Skip Montanaro496e6582002-08-06 17:47:40 +00001695 w = GETITEM(names, oparg);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001696 v = TOP();
1697 u = SECOND();
1698 STACKADJ(-2);
Guido van Rossumb209a111997-04-29 18:18:01 +00001699 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1700 Py_DECREF(v);
1701 Py_DECREF(u);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001702 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001703 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001704
Guido van Rossum374a9221991-04-04 10:40:29 +00001705 case DELETE_ATTR:
Skip Montanaro496e6582002-08-06 17:47:40 +00001706 w = GETITEM(names, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001707 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001708 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1709 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001710 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001711 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001712
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001713 case STORE_GLOBAL:
Skip Montanaro496e6582002-08-06 17:47:40 +00001714 w = GETITEM(names, oparg);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001715 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001716 err = PyDict_SetItem(f->f_globals, w, v);
1717 Py_DECREF(v);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001718 if (err == 0) continue;
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001719 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001720
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001721 case DELETE_GLOBAL:
Skip Montanaro496e6582002-08-06 17:47:40 +00001722 w = GETITEM(names, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001723 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
Paul Prescode68140d2000-08-30 20:25:01 +00001724 format_exc_check_arg(
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001725 PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001726 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001727
Guido van Rossum374a9221991-04-04 10:40:29 +00001728 case LOAD_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001729 w = GETITEM(names, oparg);
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001730 if ((v = f->f_locals) == NULL) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +00001731 PyErr_Format(PyExc_SystemError,
1732 "no locals when loading %s",
Jeremy Hylton483638c2001-02-01 20:20:45 +00001733 PyObject_REPR(w));
Guido van Rossum681d79a1995-07-18 14:51:37 +00001734 break;
1735 }
Michael W. Hudsona3711f72004-08-02 14:50:43 +00001736 if (PyDict_CheckExact(v)) {
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001737 x = PyDict_GetItem(v, w);
Michael W. Hudsona3711f72004-08-02 14:50:43 +00001738 Py_XINCREF(x);
1739 }
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001740 else {
1741 x = PyObject_GetItem(v, w);
1742 if (x == NULL && PyErr_Occurred()) {
1743 if (!PyErr_ExceptionMatches(PyExc_KeyError))
1744 break;
1745 PyErr_Clear();
1746 }
1747 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001748 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001749 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001750 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001751 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001752 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001753 format_exc_check_arg(
Guido van Rossumac7be682001-01-17 15:42:30 +00001754 PyExc_NameError,
Paul Prescode68140d2000-08-30 20:25:01 +00001755 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001756 break;
1757 }
1758 }
Michael W. Hudsona3711f72004-08-02 14:50:43 +00001759 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001760 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001761 PUSH(x);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001762 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001763
Guido van Rossum374a9221991-04-04 10:40:29 +00001764 case LOAD_GLOBAL:
Skip Montanaro496e6582002-08-06 17:47:40 +00001765 w = GETITEM(names, oparg);
Neal Norwitzda059e32007-08-26 05:33:45 +00001766 if (PyUnicode_CheckExact(w)) {
Guido van Rossumd8dbf842002-08-19 21:17:53 +00001767 /* Inline the PyDict_GetItem() calls.
1768 WARNING: this is an extreme speed hack.
1769 Do not try this at home. */
Neal Norwitzda059e32007-08-26 05:33:45 +00001770 long hash = ((PyUnicodeObject *)w)->hash;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001771 if (hash != -1) {
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001772 PyDictObject *d;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001773 PyDictEntry *e;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001774 d = (PyDictObject *)(f->f_globals);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001775 e = d->ma_lookup(d, w, hash);
1776 if (e == NULL) {
1777 x = NULL;
1778 break;
1779 }
1780 x = e->me_value;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001781 if (x != NULL) {
1782 Py_INCREF(x);
1783 PUSH(x);
1784 continue;
1785 }
1786 d = (PyDictObject *)(f->f_builtins);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001787 e = d->ma_lookup(d, w, hash);
1788 if (e == NULL) {
1789 x = NULL;
1790 break;
1791 }
1792 x = e->me_value;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001793 if (x != NULL) {
1794 Py_INCREF(x);
1795 PUSH(x);
1796 continue;
1797 }
1798 goto load_global_error;
1799 }
1800 }
1801 /* This is the un-inlined version of the code above */
Guido van Rossumb209a111997-04-29 18:18:01 +00001802 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001803 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001804 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001805 if (x == NULL) {
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001806 load_global_error:
Paul Prescode68140d2000-08-30 20:25:01 +00001807 format_exc_check_arg(
Guido van Rossumac7be682001-01-17 15:42:30 +00001808 PyExc_NameError,
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001809 GLOBAL_NAME_ERROR_MSG, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001810 break;
1811 }
1812 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001813 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001814 PUSH(x);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001815 continue;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001816
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001817 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001818 x = GETLOCAL(oparg);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001819 if (x != NULL) {
1820 SETLOCAL(oparg, NULL);
1821 continue;
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001822 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001823 format_exc_check_arg(
1824 PyExc_UnboundLocalError,
1825 UNBOUNDLOCAL_ERROR_MSG,
1826 PyTuple_GetItem(co->co_varnames, oparg)
1827 );
1828 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001829
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001830 case LOAD_CLOSURE:
Jeremy Hylton2b724da2001-01-29 22:51:52 +00001831 x = freevars[oparg];
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001832 Py_INCREF(x);
1833 PUSH(x);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001834 if (x != NULL) continue;
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001835 break;
1836
1837 case LOAD_DEREF:
Jeremy Hylton2b724da2001-01-29 22:51:52 +00001838 x = freevars[oparg];
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001839 w = PyCell_Get(x);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001840 if (w != NULL) {
1841 PUSH(w);
1842 continue;
Jeremy Hylton2524d692001-02-05 17:23:16 +00001843 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001844 err = -1;
1845 /* Don't stomp existing exception */
1846 if (PyErr_Occurred())
1847 break;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001848 if (oparg < PyTuple_GET_SIZE(co->co_cellvars)) {
1849 v = PyTuple_GET_ITEM(co->co_cellvars,
Raymond Hettinger467a6982004-04-07 11:39:21 +00001850 oparg);
1851 format_exc_check_arg(
1852 PyExc_UnboundLocalError,
1853 UNBOUNDLOCAL_ERROR_MSG,
1854 v);
1855 } else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001856 v = PyTuple_GET_ITEM(
Raymond Hettinger467a6982004-04-07 11:39:21 +00001857 co->co_freevars,
Thomas Wouters477c8d52006-05-27 19:21:47 +00001858 oparg - PyTuple_GET_SIZE(co->co_cellvars));
Raymond Hettinger467a6982004-04-07 11:39:21 +00001859 format_exc_check_arg(
1860 PyExc_NameError,
1861 UNBOUNDFREE_ERROR_MSG,
1862 v);
1863 }
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001864 break;
1865
1866 case STORE_DEREF:
1867 w = POP();
Jeremy Hylton2b724da2001-01-29 22:51:52 +00001868 x = freevars[oparg];
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001869 PyCell_Set(x, w);
Jeremy Hylton30c9f392001-03-13 01:58:22 +00001870 Py_DECREF(w);
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001871 continue;
1872
Guido van Rossum374a9221991-04-04 10:40:29 +00001873 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001874 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001875 if (x != NULL) {
Raymond Hettinger5bed4562004-04-10 23:34:17 +00001876 for (; --oparg >= 0;) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001877 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001878 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001879 }
1880 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001881 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001882 }
1883 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001884
Guido van Rossum374a9221991-04-04 10:40:29 +00001885 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001886 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001887 if (x != NULL) {
Raymond Hettinger5bed4562004-04-10 23:34:17 +00001888 for (; --oparg >= 0;) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001889 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001890 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001891 }
1892 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001893 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001894 }
1895 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001896
Guido van Rossum86e58e22006-08-28 15:27:34 +00001897 case BUILD_SET:
1898 x = PySet_New(NULL);
1899 if (x != NULL) {
1900 for (; --oparg >= 0;) {
1901 w = POP();
1902 if (err == 0)
1903 err = PySet_Add(x, w);
1904 Py_DECREF(w);
1905 }
1906 if (err != 0) {
1907 Py_DECREF(x);
1908 break;
1909 }
1910 PUSH(x);
1911 continue;
1912 }
1913 break;
1914
Guido van Rossum374a9221991-04-04 10:40:29 +00001915 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001916 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001917 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001918 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001919 break;
Thomas Wouters00e41de2007-02-23 19:56:57 +00001920
1921 case MAKE_BYTES:
1922 w = POP();
1923 if (PyString_Check(w))
1924 x = PyBytes_FromStringAndSize(
1925 PyString_AS_STRING(w),
1926 PyString_GET_SIZE(w));
1927 else
1928 x = NULL;
1929 Py_DECREF(w);
1930 PUSH(x);
1931 if (x != NULL) continue;
1932 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001933
Guido van Rossum374a9221991-04-04 10:40:29 +00001934 case LOAD_ATTR:
Skip Montanaro496e6582002-08-06 17:47:40 +00001935 w = GETITEM(names, oparg);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001936 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001937 x = PyObject_GetAttr(v, w);
1938 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001939 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001940 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001941 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001942
Guido van Rossum374a9221991-04-04 10:40:29 +00001943 case COMPARE_OP:
1944 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001945 v = TOP();
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00001946 if (PyInt_CheckExact(w) && PyInt_CheckExact(v)) {
Guido van Rossumc12da691997-07-17 23:12:42 +00001947 /* INLINE: cmp(int, int) */
1948 register long a, b;
1949 register int res;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001950 a = PyInt_AS_LONG(v);
1951 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001952 switch (oparg) {
Martin v. Löwis7198a522002-01-01 19:59:11 +00001953 case PyCmp_LT: res = a < b; break;
1954 case PyCmp_LE: res = a <= b; break;
1955 case PyCmp_EQ: res = a == b; break;
1956 case PyCmp_NE: res = a != b; break;
1957 case PyCmp_GT: res = a > b; break;
1958 case PyCmp_GE: res = a >= b; break;
1959 case PyCmp_IS: res = v == w; break;
1960 case PyCmp_IS_NOT: res = v != w; break;
Guido van Rossumc12da691997-07-17 23:12:42 +00001961 default: goto slow_compare;
1962 }
1963 x = res ? Py_True : Py_False;
1964 Py_INCREF(x);
1965 }
1966 else {
1967 slow_compare:
1968 x = cmp_outcome(oparg, v, w);
1969 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001970 Py_DECREF(v);
1971 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001972 SET_TOP(x);
Raymond Hettingerf606f872003-03-16 03:11:04 +00001973 if (x == NULL) break;
1974 PREDICT(JUMP_IF_FALSE);
1975 PREDICT(JUMP_IF_TRUE);
1976 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001977
Guido van Rossum374a9221991-04-04 10:40:29 +00001978 case IMPORT_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001979 w = GETITEM(names, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001980 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001981 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001982 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001983 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001984 break;
1985 }
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001986 v = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001987 u = TOP();
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001988 if (PyInt_AsLong(u) != -1 || PyErr_Occurred())
1989 w = PyTuple_Pack(5,
1990 w,
1991 f->f_globals,
1992 f->f_locals == NULL ?
1993 Py_None : f->f_locals,
1994 v,
1995 u);
1996 else
1997 w = PyTuple_Pack(4,
1998 w,
1999 f->f_globals,
2000 f->f_locals == NULL ?
2001 Py_None : f->f_locals,
2002 v);
2003 Py_DECREF(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00002004 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002005 if (w == NULL) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00002006 u = POP();
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002007 x = NULL;
2008 break;
2009 }
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002010 READ_TIMESTAMP(intr0);
Guido van Rossumb209a111997-04-29 18:18:01 +00002011 x = PyEval_CallObject(x, w);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002012 READ_TIMESTAMP(intr1);
Guido van Rossumb209a111997-04-29 18:18:01 +00002013 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00002014 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002015 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00002016 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002017
Thomas Wouters52152252000-08-17 22:55:00 +00002018 case IMPORT_STAR:
2019 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00002020 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002021 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002022 PyErr_SetString(PyExc_SystemError,
Jeremy Hyltonc862cf42001-01-19 03:25:05 +00002023 "no locals found during 'import *'");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002024 break;
2025 }
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002026 READ_TIMESTAMP(intr0);
Thomas Wouters52152252000-08-17 22:55:00 +00002027 err = import_all_from(x, v);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002028 READ_TIMESTAMP(intr1);
Guido van Rossumb209a111997-04-29 18:18:01 +00002029 PyFrame_LocalsToFast(f, 0);
Thomas Wouters52152252000-08-17 22:55:00 +00002030 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002031 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00002032 break;
Guido van Rossum25831651993-05-19 14:50:45 +00002033
Thomas Wouters52152252000-08-17 22:55:00 +00002034 case IMPORT_FROM:
Skip Montanaro496e6582002-08-06 17:47:40 +00002035 w = GETITEM(names, oparg);
Thomas Wouters52152252000-08-17 22:55:00 +00002036 v = TOP();
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002037 READ_TIMESTAMP(intr0);
Thomas Wouters52152252000-08-17 22:55:00 +00002038 x = import_from(v, w);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002039 READ_TIMESTAMP(intr1);
Thomas Wouters52152252000-08-17 22:55:00 +00002040 PUSH(x);
2041 if (x != NULL) continue;
2042 break;
2043
Guido van Rossum374a9221991-04-04 10:40:29 +00002044 case JUMP_FORWARD:
2045 JUMPBY(oparg);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00002046 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +00002047
Raymond Hettingerf606f872003-03-16 03:11:04 +00002048 PREDICTED_WITH_ARG(JUMP_IF_FALSE);
Guido van Rossum374a9221991-04-04 10:40:29 +00002049 case JUMP_IF_FALSE:
Raymond Hettinger21012b82003-02-26 18:11:50 +00002050 w = TOP();
Raymond Hettingerf606f872003-03-16 03:11:04 +00002051 if (w == Py_True) {
2052 PREDICT(POP_TOP);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00002053 goto fast_next_opcode;
Raymond Hettingerf606f872003-03-16 03:11:04 +00002054 }
Raymond Hettinger21012b82003-02-26 18:11:50 +00002055 if (w == Py_False) {
2056 JUMPBY(oparg);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00002057 goto fast_next_opcode;
Raymond Hettinger21012b82003-02-26 18:11:50 +00002058 }
2059 err = PyObject_IsTrue(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002060 if (err > 0)
2061 err = 0;
2062 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00002063 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002064 else
2065 break;
2066 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00002067
Raymond Hettingerf606f872003-03-16 03:11:04 +00002068 PREDICTED_WITH_ARG(JUMP_IF_TRUE);
Guido van Rossum374a9221991-04-04 10:40:29 +00002069 case JUMP_IF_TRUE:
Raymond Hettinger21012b82003-02-26 18:11:50 +00002070 w = TOP();
Raymond Hettingerf606f872003-03-16 03:11:04 +00002071 if (w == Py_False) {
2072 PREDICT(POP_TOP);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00002073 goto fast_next_opcode;
Raymond Hettingerf606f872003-03-16 03:11:04 +00002074 }
Raymond Hettinger21012b82003-02-26 18:11:50 +00002075 if (w == Py_True) {
2076 JUMPBY(oparg);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00002077 goto fast_next_opcode;
Raymond Hettinger21012b82003-02-26 18:11:50 +00002078 }
2079 err = PyObject_IsTrue(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002080 if (err > 0) {
2081 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00002082 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002083 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002084 else if (err == 0)
2085 ;
2086 else
2087 break;
2088 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00002089
Raymond Hettingerfba1cfc2004-03-12 16:33:17 +00002090 PREDICTED_WITH_ARG(JUMP_ABSOLUTE);
Guido van Rossum374a9221991-04-04 10:40:29 +00002091 case JUMP_ABSOLUTE:
2092 JUMPTO(oparg);
Neil Schemenauerca2a2f12003-05-30 23:59:44 +00002093 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00002094
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002095 case GET_ITER:
2096 /* before: [obj]; after [getiter(obj)] */
Raymond Hettinger663004b2003-01-09 15:24:30 +00002097 v = TOP();
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002098 x = PyObject_GetIter(v);
2099 Py_DECREF(v);
2100 if (x != NULL) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00002101 SET_TOP(x);
Raymond Hettinger7dc52212003-03-16 20:14:44 +00002102 PREDICT(FOR_ITER);
Guido van Rossum213c7a62001-04-23 14:08:49 +00002103 continue;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002104 }
Raymond Hettinger8bb90a52003-01-14 12:43:10 +00002105 STACKADJ(-1);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002106 break;
2107
Raymond Hettinger7dc52212003-03-16 20:14:44 +00002108 PREDICTED_WITH_ARG(FOR_ITER);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002109 case FOR_ITER:
2110 /* before: [iter]; after: [iter, iter()] *or* [] */
2111 v = TOP();
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00002112 x = (*v->ob_type->tp_iternext)(v);
Guido van Rossum213c7a62001-04-23 14:08:49 +00002113 if (x != NULL) {
2114 PUSH(x);
Raymond Hettinger7dc52212003-03-16 20:14:44 +00002115 PREDICT(STORE_FAST);
2116 PREDICT(UNPACK_SEQUENCE);
Guido van Rossum213c7a62001-04-23 14:08:49 +00002117 continue;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002118 }
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00002119 if (PyErr_Occurred()) {
2120 if (!PyErr_ExceptionMatches(PyExc_StopIteration))
2121 break;
2122 PyErr_Clear();
Guido van Rossum213c7a62001-04-23 14:08:49 +00002123 }
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00002124 /* iterator ended normally */
2125 x = v = POP();
2126 Py_DECREF(v);
2127 JUMPBY(oparg);
2128 continue;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002129
Raymond Hettinger2d783e92004-03-12 09:12:22 +00002130 case BREAK_LOOP:
2131 why = WHY_BREAK;
2132 goto fast_block_end;
2133
2134 case CONTINUE_LOOP:
2135 retval = PyInt_FromLong(oparg);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002136 if (!retval) {
2137 x = NULL;
2138 break;
2139 }
Raymond Hettinger2d783e92004-03-12 09:12:22 +00002140 why = WHY_CONTINUE;
2141 goto fast_block_end;
2142
Guido van Rossum374a9221991-04-04 10:40:29 +00002143 case SETUP_LOOP:
2144 case SETUP_EXCEPT:
2145 case SETUP_FINALLY:
Thomas Wouters9fe394c2007-02-05 01:24:16 +00002146 /* NOTE: If you add any new block-setup opcodes that are
2147 not try/except/finally handlers, you may need to
2148 update the PyGen_NeedsFinalizing() function. */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002149
Guido van Rossumb209a111997-04-29 18:18:01 +00002150 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002151 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002152 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00002153
Guido van Rossumc2e20742006-02-27 22:32:47 +00002154 case WITH_CLEANUP:
2155 {
2156 /* TOP is the context.__exit__ bound method.
2157 Below that are 1-3 values indicating how/why
2158 we entered the finally clause:
2159 - SECOND = None
Guido van Rossumf6694362006-03-10 02:28:35 +00002160 - (SECOND, THIRD) = (WHY_{RETURN,CONTINUE}), retval
Guido van Rossumc2e20742006-02-27 22:32:47 +00002161 - SECOND = WHY_*; no retval below it
2162 - (SECOND, THIRD, FOURTH) = exc_info()
2163 In the last case, we must call
2164 TOP(SECOND, THIRD, FOURTH)
2165 otherwise we must call
2166 TOP(None, None, None)
Guido van Rossum1a5e21e2006-02-28 21:57:43 +00002167
2168 In addition, if the stack represents an exception,
Guido van Rossumf6694362006-03-10 02:28:35 +00002169 *and* the function call returns a 'true' value, we
2170 "zap" this information, to prevent END_FINALLY from
2171 re-raising the exception. (But non-local gotos
2172 should still be resumed.)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002173 */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002174
Guido van Rossumc2e20742006-02-27 22:32:47 +00002175 x = TOP();
2176 u = SECOND();
2177 if (PyInt_Check(u) || u == Py_None) {
2178 u = v = w = Py_None;
2179 }
2180 else {
2181 v = THIRD();
2182 w = FOURTH();
2183 }
Guido van Rossumf6694362006-03-10 02:28:35 +00002184 /* XXX Not the fastest way to call it... */
2185 x = PyObject_CallFunctionObjArgs(x, u, v, w, NULL);
2186 if (x == NULL)
2187 break; /* Go to error exit */
2188 if (u != Py_None && PyObject_IsTrue(x)) {
2189 /* There was an exception and a true return */
2190 Py_DECREF(x);
2191 x = TOP(); /* Again */
2192 STACKADJ(-3);
2193 Py_INCREF(Py_None);
2194 SET_TOP(Py_None);
2195 Py_DECREF(x);
2196 Py_DECREF(u);
2197 Py_DECREF(v);
2198 Py_DECREF(w);
2199 } else {
2200 /* Let END_FINALLY do its thing */
2201 Py_DECREF(x);
2202 x = POP();
2203 Py_DECREF(x);
2204 }
Guido van Rossumc2e20742006-02-27 22:32:47 +00002205 break;
2206 }
2207
Guido van Rossumf10570b1995-07-07 22:53:21 +00002208 case CALL_FUNCTION:
Armin Rigo8817fcd2004-06-17 10:22:40 +00002209 {
2210 PyObject **sp;
Jeremy Hylton985eba52003-02-05 23:13:00 +00002211 PCALL(PCALL_ALL);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002212 sp = stack_pointer;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002213#ifdef WITH_TSC
Armin Rigo8817fcd2004-06-17 10:22:40 +00002214 x = call_function(&sp, oparg, &intr0, &intr1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002215#else
Armin Rigo8817fcd2004-06-17 10:22:40 +00002216 x = call_function(&sp, oparg);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002217#endif
Armin Rigo8817fcd2004-06-17 10:22:40 +00002218 stack_pointer = sp;
Jeremy Hyltone8c04322002-08-16 17:47:26 +00002219 PUSH(x);
2220 if (x != NULL)
2221 continue;
2222 break;
Armin Rigo8817fcd2004-06-17 10:22:40 +00002223 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002224
Jeremy Hylton76901512000-03-28 23:49:17 +00002225 case CALL_FUNCTION_VAR:
2226 case CALL_FUNCTION_KW:
2227 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00002228 {
Jeremy Hylton76901512000-03-28 23:49:17 +00002229 int na = oparg & 0xff;
2230 int nk = (oparg>>8) & 0xff;
2231 int flags = (opcode - CALL_FUNCTION) & 3;
Jeremy Hylton52820442001-01-03 23:52:36 +00002232 int n = na + 2 * nk;
Armin Rigo8817fcd2004-06-17 10:22:40 +00002233 PyObject **pfunc, *func, **sp;
Jeremy Hylton985eba52003-02-05 23:13:00 +00002234 PCALL(PCALL_ALL);
Jeremy Hylton52820442001-01-03 23:52:36 +00002235 if (flags & CALL_FLAG_VAR)
2236 n++;
2237 if (flags & CALL_FLAG_KW)
2238 n++;
2239 pfunc = stack_pointer - n - 1;
2240 func = *pfunc;
Jeremy Hylton52820442001-01-03 23:52:36 +00002241
Guido van Rossumac7be682001-01-17 15:42:30 +00002242 if (PyMethod_Check(func)
Jeremy Hylton52820442001-01-03 23:52:36 +00002243 && PyMethod_GET_SELF(func) != NULL) {
2244 PyObject *self = PyMethod_GET_SELF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00002245 Py_INCREF(self);
Jeremy Hylton52820442001-01-03 23:52:36 +00002246 func = PyMethod_GET_FUNCTION(func);
2247 Py_INCREF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00002248 Py_DECREF(*pfunc);
2249 *pfunc = self;
2250 na++;
2251 n++;
Guido van Rossumac7be682001-01-17 15:42:30 +00002252 } else
Jeremy Hylton52820442001-01-03 23:52:36 +00002253 Py_INCREF(func);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002254 sp = stack_pointer;
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002255 READ_TIMESTAMP(intr0);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002256 x = ext_do_call(func, &sp, flags, na, nk);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002257 READ_TIMESTAMP(intr1);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002258 stack_pointer = sp;
Jeremy Hylton76901512000-03-28 23:49:17 +00002259 Py_DECREF(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00002260
Jeremy Hylton76901512000-03-28 23:49:17 +00002261 while (stack_pointer > pfunc) {
Jeremy Hylton52820442001-01-03 23:52:36 +00002262 w = POP();
2263 Py_DECREF(w);
Jeremy Hylton76901512000-03-28 23:49:17 +00002264 }
2265 PUSH(x);
Guido van Rossumac7be682001-01-17 15:42:30 +00002266 if (x != NULL)
Jeremy Hylton52820442001-01-03 23:52:36 +00002267 continue;
Jeremy Hylton76901512000-03-28 23:49:17 +00002268 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00002269 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002270
Guido van Rossum0240b922007-02-26 21:23:50 +00002271 case MAKE_CLOSURE:
Guido van Rossum681d79a1995-07-18 14:51:37 +00002272 case MAKE_FUNCTION:
Guido van Rossum4f72a782006-10-27 23:31:49 +00002273 {
2274 int posdefaults = oparg & 0xff;
2275 int kwdefaults = (oparg>>8) & 0xff;
Neal Norwitzc1505362006-12-28 06:47:50 +00002276 int num_annotations = (oparg >> 16) & 0x7fff;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002277
Guido van Rossum681d79a1995-07-18 14:51:37 +00002278 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00002279 x = PyFunction_New(v, f->f_globals);
2280 Py_DECREF(v);
Guido van Rossum0240b922007-02-26 21:23:50 +00002281
2282 if (x != NULL && opcode == MAKE_CLOSURE) {
2283 v = POP();
2284 err = PyFunction_SetClosure(x, v);
2285 Py_DECREF(v);
2286 }
Neal Norwitzc1505362006-12-28 06:47:50 +00002287
2288 if (x != NULL && num_annotations > 0) {
2289 Py_ssize_t name_ix;
2290 u = POP(); /* names of args with annotations */
2291 v = PyDict_New();
2292 if (v == NULL) {
2293 Py_DECREF(x);
2294 x = NULL;
2295 break;
2296 }
2297 name_ix = PyTuple_Size(u);
2298 assert(num_annotations == name_ix+1);
2299 while (name_ix > 0) {
2300 --name_ix;
2301 t = PyTuple_GET_ITEM(u, name_ix);
2302 w = POP();
2303 /* XXX(nnorwitz): check for errors */
2304 PyDict_SetItem(v, t, w);
2305 Py_DECREF(w);
2306 }
2307
2308 err = PyFunction_SetAnnotations(x, v);
2309 Py_DECREF(v);
2310 Py_DECREF(u);
2311 }
2312
Guido van Rossum681d79a1995-07-18 14:51:37 +00002313 /* XXX Maybe this should be a separate opcode? */
Guido van Rossum4f72a782006-10-27 23:31:49 +00002314 if (x != NULL && posdefaults > 0) {
2315 v = PyTuple_New(posdefaults);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002316 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002317 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002318 x = NULL;
2319 break;
2320 }
Guido van Rossum4f72a782006-10-27 23:31:49 +00002321 while (--posdefaults >= 0) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002322 w = POP();
Guido van Rossum4f72a782006-10-27 23:31:49 +00002323 PyTuple_SET_ITEM(v, posdefaults, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002324 }
2325 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00002326 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002327 }
Guido van Rossum4f72a782006-10-27 23:31:49 +00002328 if (x != NULL && kwdefaults > 0) {
2329 v = PyDict_New();
2330 if (v == NULL) {
2331 Py_DECREF(x);
2332 x = NULL;
2333 break;
2334 }
2335 while (--kwdefaults >= 0) {
2336 w = POP(); /* default value */
2337 u = POP(); /* kw only arg name */
Neal Norwitzc1505362006-12-28 06:47:50 +00002338 /* XXX(nnorwitz): check for errors */
Guido van Rossum4f72a782006-10-27 23:31:49 +00002339 PyDict_SetItem(v, u, w);
Georg Brandl94ab0002007-02-26 13:58:18 +00002340 Py_DECREF(w);
2341 Py_DECREF(u);
Guido van Rossum4f72a782006-10-27 23:31:49 +00002342 }
2343 err = PyFunction_SetKwDefaults(x, v);
2344 Py_DECREF(v);
2345 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002346 PUSH(x);
2347 break;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002348 }
Guido van Rossum8861b741996-07-30 16:49:37 +00002349
2350 case BUILD_SLICE:
2351 if (oparg == 3)
2352 w = POP();
2353 else
2354 w = NULL;
2355 v = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00002356 u = TOP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00002357 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002358 Py_DECREF(u);
2359 Py_DECREF(v);
2360 Py_XDECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00002361 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002362 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00002363 break;
2364
Fred Drakeef8ace32000-08-24 00:32:09 +00002365 case EXTENDED_ARG:
2366 opcode = NEXTOP();
Raymond Hettinger5bed4562004-04-10 23:34:17 +00002367 oparg = oparg<<16 | NEXTARG();
Fred Drakeef8ace32000-08-24 00:32:09 +00002368 goto dispatch_opcode;
Guido van Rossum8861b741996-07-30 16:49:37 +00002369
Guido van Rossum374a9221991-04-04 10:40:29 +00002370 default:
2371 fprintf(stderr,
2372 "XXX lineno: %d, opcode: %d\n",
Michael W. Hudsondd32a912002-08-15 14:59:02 +00002373 PyCode_Addr2Line(f->f_code, f->f_lasti),
2374 opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00002375 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00002376 why = WHY_EXCEPTION;
2377 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002378
2379#ifdef CASE_TOO_BIG
2380 }
2381#endif
2382
Guido van Rossum374a9221991-04-04 10:40:29 +00002383 } /* switch */
2384
2385 on_error:
Guido van Rossumac7be682001-01-17 15:42:30 +00002386
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002387 READ_TIMESTAMP(inst1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002388
Guido van Rossum374a9221991-04-04 10:40:29 +00002389 /* Quickly continue if no error occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002390
Guido van Rossum374a9221991-04-04 10:40:29 +00002391 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002392 if (err == 0 && x != NULL) {
2393#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002394 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00002395 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00002396 fprintf(stderr,
2397 "XXX undetected error\n");
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002398 else {
2399#endif
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002400 READ_TIMESTAMP(loop1);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002401 continue; /* Normal, fast path */
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002402#ifdef CHECKEXC
2403 }
2404#endif
Guido van Rossum681d79a1995-07-18 14:51:37 +00002405 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002406 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00002407 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00002408 err = 0;
2409 }
2410
Guido van Rossum374a9221991-04-04 10:40:29 +00002411 /* Double-check exception status */
Guido van Rossumac7be682001-01-17 15:42:30 +00002412
Raymond Hettingerc8aa08b2004-04-11 14:59:33 +00002413 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002414 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002415 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002416 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00002417 why = WHY_EXCEPTION;
2418 }
2419 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002420#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00002421 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002422 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00002423 if (PyErr_Occurred()) {
Jeremy Hylton904ed862003-11-05 17:29:35 +00002424 char buf[1024];
2425 sprintf(buf, "Stack unwind with exception "
2426 "set and why=%d", why);
2427 Py_FatalError(buf);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002428 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002429 }
2430#endif
2431
2432 /* Log traceback info if this is a real exception */
Guido van Rossumac7be682001-01-17 15:42:30 +00002433
Guido van Rossum374a9221991-04-04 10:40:29 +00002434 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002435 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002436
Fred Drake8f51f542001-10-04 14:48:42 +00002437 if (tstate->c_tracefunc != NULL)
2438 call_exc_trace(tstate->c_tracefunc,
2439 tstate->c_traceobj, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00002440 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002441
Guido van Rossum374a9221991-04-04 10:40:29 +00002442 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
Guido van Rossumac7be682001-01-17 15:42:30 +00002443
Guido van Rossum374a9221991-04-04 10:40:29 +00002444 if (why == WHY_RERAISE)
2445 why = WHY_EXCEPTION;
2446
2447 /* Unwind stacks if a (pseudo) exception occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002448
Raymond Hettinger1dd83092004-02-06 18:32:33 +00002449fast_block_end:
Tim Peters8a5c3c72004-04-05 19:36:21 +00002450 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002451 PyTryBlock *b = PyFrame_BlockPop(f);
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002452
Tim Peters8a5c3c72004-04-05 19:36:21 +00002453 assert(why != WHY_YIELD);
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002454 if (b->b_type == SETUP_LOOP && why == WHY_CONTINUE) {
2455 /* For a continue inside a try block,
2456 don't pop the block for the loop. */
Thomas Wouters1ee64222001-09-24 19:32:01 +00002457 PyFrame_BlockSetup(f, b->b_type, b->b_handler,
2458 b->b_level);
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002459 why = WHY_NOT;
2460 JUMPTO(PyInt_AS_LONG(retval));
2461 Py_DECREF(retval);
2462 break;
2463 }
2464
Guido van Rossum374a9221991-04-04 10:40:29 +00002465 while (STACK_LEVEL() > b->b_level) {
2466 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00002467 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00002468 }
2469 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
2470 why = WHY_NOT;
2471 JUMPTO(b->b_handler);
2472 break;
2473 }
2474 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00002475 (b->b_type == SETUP_EXCEPT &&
2476 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00002477 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002478 PyObject *exc, *val, *tb;
2479 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002480 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002481 val = Py_None;
2482 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00002483 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002484 /* Make the raw exception data
2485 available to the handler,
2486 so a program can emulate the
2487 Python main loop. Don't do
2488 this for 'finally'. */
2489 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00002490 PyErr_NormalizeException(
2491 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002492 set_exc_info(tstate,
2493 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002494 }
Jeremy Hyltonc6314892001-09-26 19:24:45 +00002495 if (tb == NULL) {
2496 Py_INCREF(Py_None);
2497 PUSH(Py_None);
2498 } else
2499 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002500 PUSH(val);
2501 PUSH(exc);
2502 }
2503 else {
Raymond Hettinger06032cb2004-04-06 09:37:35 +00002504 if (why & (WHY_RETURN | WHY_CONTINUE))
Guido van Rossum374a9221991-04-04 10:40:29 +00002505 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00002506 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00002507 PUSH(v);
2508 }
2509 why = WHY_NOT;
2510 JUMPTO(b->b_handler);
2511 break;
2512 }
2513 } /* unwind stack */
2514
2515 /* End the loop if we still have an error (or return) */
Guido van Rossumac7be682001-01-17 15:42:30 +00002516
Guido van Rossum374a9221991-04-04 10:40:29 +00002517 if (why != WHY_NOT)
2518 break;
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002519 READ_TIMESTAMP(loop1);
Guido van Rossumac7be682001-01-17 15:42:30 +00002520
Guido van Rossum374a9221991-04-04 10:40:29 +00002521 } /* main loop */
Guido van Rossumac7be682001-01-17 15:42:30 +00002522
Tim Peters8a5c3c72004-04-05 19:36:21 +00002523 assert(why != WHY_YIELD);
2524 /* Pop remaining stack entries. */
2525 while (!EMPTY()) {
2526 v = POP();
2527 Py_XDECREF(v);
Guido van Rossum35974fb2001-12-06 21:28:18 +00002528 }
2529
Tim Peters8a5c3c72004-04-05 19:36:21 +00002530 if (why != WHY_RETURN)
Guido van Rossum96a42c81992-01-12 02:29:51 +00002531 retval = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +00002532
Raymond Hettinger1dd83092004-02-06 18:32:33 +00002533fast_yield:
Fred Drake9e3ad782001-07-03 23:39:52 +00002534 if (tstate->use_tracing) {
Barry Warsawe2eca0b2005-08-15 18:14:19 +00002535 if (tstate->c_tracefunc) {
2536 if (why == WHY_RETURN || why == WHY_YIELD) {
2537 if (call_trace(tstate->c_tracefunc,
2538 tstate->c_traceobj, f,
2539 PyTrace_RETURN, retval)) {
2540 Py_XDECREF(retval);
2541 retval = NULL;
2542 why = WHY_EXCEPTION;
2543 }
2544 }
2545 else if (why == WHY_EXCEPTION) {
2546 call_trace_protected(tstate->c_tracefunc,
2547 tstate->c_traceobj, f,
Armin Rigo1c2d7e52005-09-20 18:34:01 +00002548 PyTrace_RETURN, NULL);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002549 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002550 }
Fred Drake8f51f542001-10-04 14:48:42 +00002551 if (tstate->c_profilefunc) {
Fred Drake4ec5d562001-10-04 19:26:43 +00002552 if (why == WHY_EXCEPTION)
2553 call_trace_protected(tstate->c_profilefunc,
2554 tstate->c_profileobj, f,
Armin Rigo1c2d7e52005-09-20 18:34:01 +00002555 PyTrace_RETURN, NULL);
Fred Drake4ec5d562001-10-04 19:26:43 +00002556 else if (call_trace(tstate->c_profilefunc,
2557 tstate->c_profileobj, f,
2558 PyTrace_RETURN, retval)) {
Fred Drake9e3ad782001-07-03 23:39:52 +00002559 Py_XDECREF(retval);
2560 retval = NULL;
2561 why = WHY_EXCEPTION;
2562 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002563 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002564 }
Guido van Rossuma4240131997-01-21 21:18:36 +00002565
Thomas Wouters477c8d52006-05-27 19:21:47 +00002566 if (tstate->frame->f_exc_type != NULL)
2567 reset_exc_info(tstate);
2568 else {
2569 assert(tstate->frame->f_exc_value == NULL);
2570 assert(tstate->frame->f_exc_traceback == NULL);
2571 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00002572
Tim Peters5ca576e2001-06-18 22:08:13 +00002573 /* pop frame */
Armin Rigo2b3eb402003-10-28 12:05:48 +00002574 exit_eval_frame:
2575 Py_LeaveRecursiveCall();
Guido van Rossuma027efa1997-05-05 20:56:21 +00002576 tstate->frame = f->f_back;
Guido van Rossumac7be682001-01-17 15:42:30 +00002577
Guido van Rossum96a42c81992-01-12 02:29:51 +00002578 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00002579}
2580
Guido van Rossumc2e20742006-02-27 22:32:47 +00002581/* This is gonna seem *real weird*, but if you put some other code between
Martin v. Löwis8d97e332004-06-27 15:43:12 +00002582 PyEval_EvalFrame() and PyEval_EvalCodeEx() you will need to adjust
Guido van Rossumc2e20742006-02-27 22:32:47 +00002583 the test in the if statements in Misc/gdbinit (pystack and pystackv). */
Skip Montanaro786ea6b2004-03-01 15:44:05 +00002584
Tim Peters6d6c1a32001-08-02 04:15:00 +00002585PyObject *
2586PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals,
Tim Peters5ca576e2001-06-18 22:08:13 +00002587 PyObject **args, int argcount, PyObject **kws, int kwcount,
Guido van Rossum4f72a782006-10-27 23:31:49 +00002588 PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure)
Tim Peters5ca576e2001-06-18 22:08:13 +00002589{
2590 register PyFrameObject *f;
2591 register PyObject *retval = NULL;
2592 register PyObject **fastlocals, **freevars;
2593 PyThreadState *tstate = PyThreadState_GET();
2594 PyObject *x, *u;
2595
2596 if (globals == NULL) {
Tim Peters8a5c3c72004-04-05 19:36:21 +00002597 PyErr_SetString(PyExc_SystemError,
Jeremy Hylton910d7d42001-08-12 21:52:24 +00002598 "PyEval_EvalCodeEx: NULL globals");
Tim Peters5ca576e2001-06-18 22:08:13 +00002599 return NULL;
2600 }
2601
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00002602 assert(tstate != NULL);
Jeremy Hylton985eba52003-02-05 23:13:00 +00002603 assert(globals != NULL);
2604 f = PyFrame_New(tstate, co, globals, locals);
Tim Peters5ca576e2001-06-18 22:08:13 +00002605 if (f == NULL)
2606 return NULL;
2607
2608 fastlocals = f->f_localsplus;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002609 freevars = f->f_localsplus + co->co_nlocals;
Tim Peters5ca576e2001-06-18 22:08:13 +00002610
2611 if (co->co_argcount > 0 ||
Guido van Rossum4f72a782006-10-27 23:31:49 +00002612 co->co_kwonlyargcount > 0 ||
Tim Peters5ca576e2001-06-18 22:08:13 +00002613 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
2614 int i;
2615 int n = argcount;
2616 PyObject *kwdict = NULL;
2617 if (co->co_flags & CO_VARKEYWORDS) {
2618 kwdict = PyDict_New();
2619 if (kwdict == NULL)
2620 goto fail;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002621 i = co->co_argcount + co->co_kwonlyargcount;
Tim Peters5ca576e2001-06-18 22:08:13 +00002622 if (co->co_flags & CO_VARARGS)
2623 i++;
2624 SETLOCAL(i, kwdict);
2625 }
2626 if (argcount > co->co_argcount) {
2627 if (!(co->co_flags & CO_VARARGS)) {
2628 PyErr_Format(PyExc_TypeError,
Walter Dörwald573c08c2007-05-25 15:46:59 +00002629 "%S() takes %s %d "
Guido van Rossum4f72a782006-10-27 23:31:49 +00002630 "%spositional argument%s (%d given)",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002631 co->co_name,
Tim Peters5ca576e2001-06-18 22:08:13 +00002632 defcount ? "at most" : "exactly",
2633 co->co_argcount,
2634 kwcount ? "non-keyword " : "",
2635 co->co_argcount == 1 ? "" : "s",
2636 argcount);
2637 goto fail;
2638 }
2639 n = co->co_argcount;
2640 }
2641 for (i = 0; i < n; i++) {
2642 x = args[i];
2643 Py_INCREF(x);
2644 SETLOCAL(i, x);
2645 }
2646 if (co->co_flags & CO_VARARGS) {
2647 u = PyTuple_New(argcount - n);
2648 if (u == NULL)
2649 goto fail;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002650 SETLOCAL(co->co_argcount + co->co_kwonlyargcount, u);
Tim Peters5ca576e2001-06-18 22:08:13 +00002651 for (i = n; i < argcount; i++) {
2652 x = args[i];
2653 Py_INCREF(x);
2654 PyTuple_SET_ITEM(u, i-n, x);
2655 }
2656 }
2657 for (i = 0; i < kwcount; i++) {
2658 PyObject *keyword = kws[2*i];
2659 PyObject *value = kws[2*i + 1];
2660 int j;
Neal Norwitzda059e32007-08-26 05:33:45 +00002661 if (keyword == NULL || !PyUnicode_Check(keyword)) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002662 PyErr_Format(PyExc_TypeError,
Walter Dörwald573c08c2007-05-25 15:46:59 +00002663 "%S() keywords must be strings",
2664 co->co_name);
Tim Peters5ca576e2001-06-18 22:08:13 +00002665 goto fail;
2666 }
2667 /* XXX slow -- speed up using dictionary? */
Guido van Rossum4f72a782006-10-27 23:31:49 +00002668 for (j = 0;
2669 j < co->co_argcount + co->co_kwonlyargcount;
2670 j++) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002671 PyObject *nm = PyTuple_GET_ITEM(
2672 co->co_varnames, j);
2673 int cmp = PyObject_RichCompareBool(
2674 keyword, nm, Py_EQ);
2675 if (cmp > 0)
2676 break;
2677 else if (cmp < 0)
2678 goto fail;
2679 }
2680 /* Check errors from Compare */
2681 if (PyErr_Occurred())
2682 goto fail;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002683 if (j >= co->co_argcount + co->co_kwonlyargcount) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002684 if (kwdict == NULL) {
2685 PyErr_Format(PyExc_TypeError,
Walter Dörwald573c08c2007-05-25 15:46:59 +00002686 "%S() got an unexpected "
2687 "keyword argument '%S'",
2688 co->co_name,
2689 keyword);
Tim Peters5ca576e2001-06-18 22:08:13 +00002690 goto fail;
2691 }
2692 PyDict_SetItem(kwdict, keyword, value);
2693 }
2694 else {
2695 if (GETLOCAL(j) != NULL) {
2696 PyErr_Format(PyExc_TypeError,
Walter Dörwald573c08c2007-05-25 15:46:59 +00002697 "%S() got multiple "
Tim Peters5ca576e2001-06-18 22:08:13 +00002698 "values for keyword "
Walter Dörwald573c08c2007-05-25 15:46:59 +00002699 "argument '%S'",
2700 co->co_name,
2701 keyword);
Tim Peters5ca576e2001-06-18 22:08:13 +00002702 goto fail;
2703 }
2704 Py_INCREF(value);
2705 SETLOCAL(j, value);
2706 }
2707 }
Guido van Rossum4f72a782006-10-27 23:31:49 +00002708 if (co->co_kwonlyargcount > 0) {
2709 for (i = co->co_argcount;
2710 i < co->co_argcount + co->co_kwonlyargcount;
2711 i++) {
Guido van Rossum29602e42006-11-22 04:45:33 +00002712 PyObject *name, *def;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002713 if (GETLOCAL(i) != NULL)
2714 continue;
Guido van Rossum29602e42006-11-22 04:45:33 +00002715 name = PyTuple_GET_ITEM(co->co_varnames, i);
2716 def = NULL;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002717 if (kwdefs != NULL)
2718 def = PyDict_GetItem(kwdefs, name);
2719 if (def != NULL) {
2720 Py_INCREF(def);
2721 SETLOCAL(i, def);
2722 continue;
2723 }
2724 PyErr_Format(PyExc_TypeError,
Walter Dörwald573c08c2007-05-25 15:46:59 +00002725 "%S() needs keyword-only argument %S",
2726 co->co_name, name);
Guido van Rossum4f72a782006-10-27 23:31:49 +00002727 goto fail;
2728 }
2729 }
Tim Peters5ca576e2001-06-18 22:08:13 +00002730 if (argcount < co->co_argcount) {
2731 int m = co->co_argcount - defcount;
2732 for (i = argcount; i < m; i++) {
2733 if (GETLOCAL(i) == NULL) {
2734 PyErr_Format(PyExc_TypeError,
Walter Dörwald573c08c2007-05-25 15:46:59 +00002735 "%S() takes %s %d "
Guido van Rossum4f72a782006-10-27 23:31:49 +00002736 "%spositional argument%s "
2737 "(%d given)",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002738 co->co_name,
Tim Peters5ca576e2001-06-18 22:08:13 +00002739 ((co->co_flags & CO_VARARGS) ||
2740 defcount) ? "at least"
2741 : "exactly",
2742 m, kwcount ? "non-keyword " : "",
2743 m == 1 ? "" : "s", i);
2744 goto fail;
2745 }
2746 }
2747 if (n > m)
2748 i = n - m;
2749 else
2750 i = 0;
2751 for (; i < defcount; i++) {
2752 if (GETLOCAL(m+i) == NULL) {
2753 PyObject *def = defs[i];
2754 Py_INCREF(def);
2755 SETLOCAL(m+i, def);
2756 }
2757 }
2758 }
2759 }
2760 else {
2761 if (argcount > 0 || kwcount > 0) {
2762 PyErr_Format(PyExc_TypeError,
Walter Dörwald573c08c2007-05-25 15:46:59 +00002763 "%S() takes no arguments (%d given)",
2764 co->co_name,
Tim Peters5ca576e2001-06-18 22:08:13 +00002765 argcount + kwcount);
2766 goto fail;
2767 }
2768 }
2769 /* Allocate and initialize storage for cell vars, and copy free
2770 vars into frame. This isn't too efficient right now. */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002771 if (PyTuple_GET_SIZE(co->co_cellvars)) {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002772 int i, j, nargs, found;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002773 Py_UNICODE *cellname, *argname;
Tim Peters5ca576e2001-06-18 22:08:13 +00002774 PyObject *c;
2775
2776 nargs = co->co_argcount;
2777 if (co->co_flags & CO_VARARGS)
2778 nargs++;
2779 if (co->co_flags & CO_VARKEYWORDS)
2780 nargs++;
2781
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002782 /* Initialize each cell var, taking into account
2783 cell vars that are initialized from arguments.
2784
2785 Should arrange for the compiler to put cellvars
2786 that are arguments at the beginning of the cellvars
2787 list so that we can march over it more efficiently?
2788 */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002789 for (i = 0; i < PyTuple_GET_SIZE(co->co_cellvars); ++i) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002790 cellname = PyUnicode_AS_UNICODE(
Tim Peters5ca576e2001-06-18 22:08:13 +00002791 PyTuple_GET_ITEM(co->co_cellvars, i));
2792 found = 0;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002793 for (j = 0; j < nargs; j++) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002794 argname = PyUnicode_AS_UNICODE(
Tim Peters5ca576e2001-06-18 22:08:13 +00002795 PyTuple_GET_ITEM(co->co_varnames, j));
Martin v. Löwis5b222132007-06-10 09:51:05 +00002796 if (Py_UNICODE_strcmp(cellname, argname) == 0) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002797 c = PyCell_New(GETLOCAL(j));
2798 if (c == NULL)
2799 goto fail;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002800 GETLOCAL(co->co_nlocals + i) = c;
Tim Peters5ca576e2001-06-18 22:08:13 +00002801 found = 1;
2802 break;
2803 }
Tim Peters5ca576e2001-06-18 22:08:13 +00002804 }
2805 if (found == 0) {
2806 c = PyCell_New(NULL);
2807 if (c == NULL)
2808 goto fail;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002809 SETLOCAL(co->co_nlocals + i, c);
Tim Peters5ca576e2001-06-18 22:08:13 +00002810 }
2811 }
Tim Peters5ca576e2001-06-18 22:08:13 +00002812 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002813 if (PyTuple_GET_SIZE(co->co_freevars)) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002814 int i;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002815 for (i = 0; i < PyTuple_GET_SIZE(co->co_freevars); ++i) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002816 PyObject *o = PyTuple_GET_ITEM(closure, i);
2817 Py_INCREF(o);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002818 freevars[PyTuple_GET_SIZE(co->co_cellvars) + i] = o;
Tim Peters5ca576e2001-06-18 22:08:13 +00002819 }
2820 }
2821
Tim Peters5ca576e2001-06-18 22:08:13 +00002822 if (co->co_flags & CO_GENERATOR) {
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00002823 /* Don't need to keep the reference to f_back, it will be set
2824 * when the generator is resumed. */
Tim Peters5ba58662001-07-16 02:29:45 +00002825 Py_XDECREF(f->f_back);
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00002826 f->f_back = NULL;
2827
Jeremy Hylton985eba52003-02-05 23:13:00 +00002828 PCALL(PCALL_GENERATOR);
2829
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00002830 /* Create a new generator that owns the ready to run frame
2831 * and return that as the value. */
Martin v. Löwise440e472004-06-01 15:22:42 +00002832 return PyGen_New(f);
Tim Peters5ca576e2001-06-18 22:08:13 +00002833 }
2834
Phillip J. Eby0d6615f2005-08-02 00:46:46 +00002835 retval = PyEval_EvalFrameEx(f,0);
Tim Peters5ca576e2001-06-18 22:08:13 +00002836
2837 fail: /* Jump here from prelude on failure */
2838
Tim Petersb13680b2001-11-27 23:29:29 +00002839 /* decref'ing the frame can cause __del__ methods to get invoked,
2840 which can call back into Python. While we're done with the
2841 current Python frame (f), the associated C stack is still in use,
2842 so recursion_depth must be boosted for the duration.
2843 */
2844 assert(tstate != NULL);
2845 ++tstate->recursion_depth;
Tim Peters5ca576e2001-06-18 22:08:13 +00002846 Py_DECREF(f);
Tim Petersb13680b2001-11-27 23:29:29 +00002847 --tstate->recursion_depth;
Tim Peters5ca576e2001-06-18 22:08:13 +00002848 return retval;
2849}
2850
2851
Guido van Rossumc9fbb722003-03-01 03:36:33 +00002852/* Implementation notes for set_exc_info() and reset_exc_info():
2853
2854- Below, 'exc_ZZZ' stands for 'exc_type', 'exc_value' and
2855 'exc_traceback'. These always travel together.
2856
2857- tstate->curexc_ZZZ is the "hot" exception that is set by
2858 PyErr_SetString(), cleared by PyErr_Clear(), and so on.
2859
2860- Once an exception is caught by an except clause, it is transferred
2861 from tstate->curexc_ZZZ to tstate->exc_ZZZ, from which sys.exc_info()
2862 can pick it up. This is the primary task of set_exc_info().
Thomas Wouters477c8d52006-05-27 19:21:47 +00002863 XXX That can't be right: set_exc_info() doesn't look at tstate->curexc_ZZZ.
Guido van Rossumc9fbb722003-03-01 03:36:33 +00002864
2865- Now let me explain the complicated dance with frame->f_exc_ZZZ.
2866
2867 Long ago, when none of this existed, there were just a few globals:
2868 one set corresponding to the "hot" exception, and one set
2869 corresponding to sys.exc_ZZZ. (Actually, the latter weren't C
2870 globals; they were simply stored as sys.exc_ZZZ. For backwards
2871 compatibility, they still are!) The problem was that in code like
2872 this:
2873
2874 try:
2875 "something that may fail"
2876 except "some exception":
2877 "do something else first"
2878 "print the exception from sys.exc_ZZZ."
2879
2880 if "do something else first" invoked something that raised and caught
2881 an exception, sys.exc_ZZZ were overwritten. That was a frequent
2882 cause of subtle bugs. I fixed this by changing the semantics as
2883 follows:
2884
2885 - Within one frame, sys.exc_ZZZ will hold the last exception caught
2886 *in that frame*.
2887
2888 - But initially, and as long as no exception is caught in a given
2889 frame, sys.exc_ZZZ will hold the last exception caught in the
2890 previous frame (or the frame before that, etc.).
2891
2892 The first bullet fixed the bug in the above example. The second
2893 bullet was for backwards compatibility: it was (and is) common to
2894 have a function that is called when an exception is caught, and to
2895 have that function access the caught exception via sys.exc_ZZZ.
2896 (Example: traceback.print_exc()).
2897
2898 At the same time I fixed the problem that sys.exc_ZZZ weren't
2899 thread-safe, by introducing sys.exc_info() which gets it from tstate;
2900 but that's really a separate improvement.
2901
2902 The reset_exc_info() function in ceval.c restores the tstate->exc_ZZZ
2903 variables to what they were before the current frame was called. The
2904 set_exc_info() function saves them on the frame so that
2905 reset_exc_info() can restore them. The invariant is that
2906 frame->f_exc_ZZZ is NULL iff the current frame never caught an
2907 exception (where "catching" an exception applies only to successful
2908 except clauses); and if the current frame ever caught an exception,
2909 frame->f_exc_ZZZ is the exception that was stored in tstate->exc_ZZZ
2910 at the start of the current frame.
2911
2912*/
2913
Guido van Rossuma027efa1997-05-05 20:56:21 +00002914static void
Guido van Rossumac7be682001-01-17 15:42:30 +00002915set_exc_info(PyThreadState *tstate,
2916 PyObject *type, PyObject *value, PyObject *tb)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002917{
Thomas Wouters477c8d52006-05-27 19:21:47 +00002918 PyFrameObject *frame = tstate->frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002919 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00002920
Thomas Wouters477c8d52006-05-27 19:21:47 +00002921 assert(type != NULL);
2922 assert(frame != NULL);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002923 if (frame->f_exc_type == NULL) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00002924 assert(frame->f_exc_value == NULL);
2925 assert(frame->f_exc_traceback == NULL);
2926 /* This frame didn't catch an exception before. */
2927 /* Save previous exception of this thread in this frame. */
Guido van Rossuma027efa1997-05-05 20:56:21 +00002928 if (tstate->exc_type == NULL) {
Thomas Wouters477c8d52006-05-27 19:21:47 +00002929 /* XXX Why is this set to Py_None? */
Guido van Rossuma027efa1997-05-05 20:56:21 +00002930 Py_INCREF(Py_None);
2931 tstate->exc_type = Py_None;
2932 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002933 Py_INCREF(tstate->exc_type);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002934 Py_XINCREF(tstate->exc_value);
2935 Py_XINCREF(tstate->exc_traceback);
2936 frame->f_exc_type = tstate->exc_type;
2937 frame->f_exc_value = tstate->exc_value;
2938 frame->f_exc_traceback = tstate->exc_traceback;
2939 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002940 /* Set new exception for this thread. */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002941 tmp_type = tstate->exc_type;
2942 tmp_value = tstate->exc_value;
2943 tmp_tb = tstate->exc_traceback;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002944 Py_INCREF(type);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002945 Py_XINCREF(value);
2946 Py_XINCREF(tb);
2947 tstate->exc_type = type;
2948 tstate->exc_value = value;
2949 tstate->exc_traceback = tb;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002950 Py_XDECREF(tmp_type);
2951 Py_XDECREF(tmp_value);
2952 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002953}
2954
2955static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002956reset_exc_info(PyThreadState *tstate)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002957{
2958 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002959 PyObject *tmp_type, *tmp_value, *tmp_tb;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002960
2961 /* It's a precondition that the thread state's frame caught an
2962 * exception -- verify in a debug build.
2963 */
2964 assert(tstate != NULL);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002965 frame = tstate->frame;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002966 assert(frame != NULL);
2967 assert(frame->f_exc_type != NULL);
2968
2969 /* Copy the frame's exception info back to the thread state. */
2970 tmp_type = tstate->exc_type;
2971 tmp_value = tstate->exc_value;
2972 tmp_tb = tstate->exc_traceback;
2973 Py_INCREF(frame->f_exc_type);
2974 Py_XINCREF(frame->f_exc_value);
2975 Py_XINCREF(frame->f_exc_traceback);
2976 tstate->exc_type = frame->f_exc_type;
2977 tstate->exc_value = frame->f_exc_value;
2978 tstate->exc_traceback = frame->f_exc_traceback;
2979 Py_XDECREF(tmp_type);
2980 Py_XDECREF(tmp_value);
2981 Py_XDECREF(tmp_tb);
2982
Thomas Wouters477c8d52006-05-27 19:21:47 +00002983 /* Clear the frame's exception info. */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002984 tmp_type = frame->f_exc_type;
2985 tmp_value = frame->f_exc_value;
2986 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002987 frame->f_exc_type = NULL;
2988 frame->f_exc_value = NULL;
2989 frame->f_exc_traceback = NULL;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002990 Py_DECREF(tmp_type);
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002991 Py_XDECREF(tmp_value);
2992 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002993}
2994
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002995/* Logic for the raise statement (too complicated for inlining).
2996 This *consumes* a reference count to each of its arguments. */
Raymond Hettinger7c958652004-04-06 10:11:10 +00002997static enum why_code
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002998do_raise(PyObject *type, PyObject *value, PyObject *tb)
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002999{
Guido van Rossumd295f121998-04-09 21:39:57 +00003000 if (type == NULL) {
3001 /* Reraise */
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003002 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossumd295f121998-04-09 21:39:57 +00003003 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
3004 value = tstate->exc_value;
3005 tb = tstate->exc_traceback;
3006 Py_XINCREF(type);
3007 Py_XINCREF(value);
3008 Py_XINCREF(tb);
3009 }
Guido van Rossumac7be682001-01-17 15:42:30 +00003010
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003011 /* We support the following forms of raise:
3012 raise <class>, <classinstance>
3013 raise <class>, <argument tuple>
3014 raise <class>, None
3015 raise <class>, <argument>
3016 raise <classinstance>, None
3017 raise <string>, <object>
3018 raise <string>, None
3019
3020 An omitted second argument is the same as None.
3021
3022 In addition, raise <tuple>, <anything> is the same as
3023 raising the tuple's first item (and it better have one!);
3024 this rule is applied recursively.
3025
3026 Finally, an optional third argument can be supplied, which
3027 gives the traceback to be substituted (useful when
3028 re-raising an exception after examining it). */
3029
3030 /* First, check the traceback argument, replacing None with
3031 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00003032 if (tb == Py_None) {
3033 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003034 tb = NULL;
3035 }
3036 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003037 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003038 "raise: arg 3 must be a traceback or None");
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003039 goto raise_error;
3040 }
3041
3042 /* Next, replace a missing value with None */
3043 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003044 value = Py_None;
3045 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003046 }
3047
3048 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00003049 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
3050 PyObject *tmp = type;
3051 type = PyTuple_GET_ITEM(type, 0);
3052 Py_INCREF(type);
3053 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003054 }
3055
Guido van Rossum45aecf42006-03-15 04:58:47 +00003056 if (PyExceptionClass_Check(type))
Barry Warsaw4249f541997-08-22 21:26:19 +00003057 PyErr_NormalizeException(&type, &value, &tb);
3058
Brett Cannonbf364092006-03-01 04:25:17 +00003059 else if (PyExceptionInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003060 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00003061 if (value != Py_None) {
3062 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003063 "instance exception may not have a separate value");
3064 goto raise_error;
3065 }
3066 else {
3067 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00003068 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003069 value = type;
Brett Cannonbf364092006-03-01 04:25:17 +00003070 type = PyExceptionInstance_Class(type);
Guido van Rossumb209a111997-04-29 18:18:01 +00003071 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003072 }
3073 }
3074 else {
3075 /* Not something you can raise. You get an exception
3076 anyway, just not what you specified :-) */
Guido van Rossum45aecf42006-03-15 04:58:47 +00003077 PyErr_SetString(PyExc_TypeError,
3078 "exceptions must derive from BaseException");
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003079 goto raise_error;
3080 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003081 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003082 if (tb == NULL)
3083 return WHY_EXCEPTION;
3084 else
3085 return WHY_RERAISE;
3086 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00003087 Py_XDECREF(value);
3088 Py_XDECREF(type);
3089 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003090 return WHY_EXCEPTION;
3091}
3092
Tim Petersd6d010b2001-06-21 02:49:55 +00003093/* Iterate v argcnt times and store the results on the stack (via decreasing
Guido van Rossum0368b722007-05-11 16:50:42 +00003094 sp). Return 1 for success, 0 if error.
3095
3096 If argcntafter == -1, do a simple unpack. If it is >= 0, do an unpack
3097 with a variable target.
3098*/
Tim Petersd6d010b2001-06-21 02:49:55 +00003099
Barry Warsawe42b18f1997-08-25 22:13:04 +00003100static int
Guido van Rossum0368b722007-05-11 16:50:42 +00003101unpack_iterable(PyObject *v, int argcnt, int argcntafter, PyObject **sp)
Barry Warsawe42b18f1997-08-25 22:13:04 +00003102{
Guido van Rossum0368b722007-05-11 16:50:42 +00003103 int i = 0, j = 0;
3104 Py_ssize_t ll = 0;
Tim Petersd6d010b2001-06-21 02:49:55 +00003105 PyObject *it; /* iter(v) */
Barry Warsawe42b18f1997-08-25 22:13:04 +00003106 PyObject *w;
Guido van Rossum0368b722007-05-11 16:50:42 +00003107 PyObject *l = NULL; /* variable list */
Guido van Rossumac7be682001-01-17 15:42:30 +00003108
Tim Petersd6d010b2001-06-21 02:49:55 +00003109 assert(v != NULL);
3110
3111 it = PyObject_GetIter(v);
3112 if (it == NULL)
3113 goto Error;
3114
3115 for (; i < argcnt; i++) {
3116 w = PyIter_Next(it);
3117 if (w == NULL) {
3118 /* Iterator done, via error or exhaustion. */
3119 if (!PyErr_Occurred()) {
3120 PyErr_Format(PyExc_ValueError,
3121 "need more than %d value%s to unpack",
3122 i, i == 1 ? "" : "s");
3123 }
3124 goto Error;
Barry Warsawe42b18f1997-08-25 22:13:04 +00003125 }
3126 *--sp = w;
3127 }
Tim Petersd6d010b2001-06-21 02:49:55 +00003128
Guido van Rossum0368b722007-05-11 16:50:42 +00003129 if (argcntafter == -1) {
3130 /* We better have exhausted the iterator now. */
3131 w = PyIter_Next(it);
3132 if (w == NULL) {
3133 if (PyErr_Occurred())
3134 goto Error;
3135 Py_DECREF(it);
3136 return 1;
3137 }
3138 Py_DECREF(w);
3139 PyErr_SetString(PyExc_ValueError, "too many values to unpack");
3140 goto Error;
Barry Warsawe42b18f1997-08-25 22:13:04 +00003141 }
Guido van Rossum0368b722007-05-11 16:50:42 +00003142
3143 l = PySequence_List(it);
3144 if (l == NULL)
3145 goto Error;
3146 *--sp = l;
3147 i++;
3148
3149 ll = PyList_GET_SIZE(l);
3150 if (ll < argcntafter) {
3151 PyErr_Format(PyExc_ValueError, "need more than %zd values to unpack",
3152 argcnt + ll);
3153 goto Error;
3154 }
3155
3156 /* Pop the "after-variable" args off the list. */
3157 for (j = argcntafter; j > 0; j--, i++) {
3158 *--sp = PyList_GET_ITEM(l, ll - j);
3159 }
3160 /* Resize the list. */
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003161 Py_Size(l) = ll - argcntafter;
Guido van Rossum0368b722007-05-11 16:50:42 +00003162 Py_DECREF(it);
3163 return 1;
3164
Tim Petersd6d010b2001-06-21 02:49:55 +00003165Error:
Barry Warsaw91010551997-08-25 22:30:51 +00003166 for (; i > 0; i--, sp++)
3167 Py_DECREF(*sp);
Tim Petersd6d010b2001-06-21 02:49:55 +00003168 Py_XDECREF(it);
Barry Warsawe42b18f1997-08-25 22:13:04 +00003169 return 0;
3170}
3171
3172
Guido van Rossum96a42c81992-01-12 02:29:51 +00003173#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00003174static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003175prtrace(PyObject *v, char *str)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003176{
Guido van Rossum3f5da241990-12-20 15:06:42 +00003177 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00003178 if (PyObject_Print(v, stdout, 0) != 0)
3179 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00003180 printf("\n");
Guido van Rossumcc229ea2000-05-04 00:55:17 +00003181 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003182}
Guido van Rossum3f5da241990-12-20 15:06:42 +00003183#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003184
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003185static void
Fred Drake5755ce62001-06-27 19:19:46 +00003186call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003187{
Guido van Rossumb209a111997-04-29 18:18:01 +00003188 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003189 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00003190 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00003191 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003192 value = Py_None;
3193 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00003194 }
Raymond Hettinger8ae46892003-10-12 19:09:37 +00003195 arg = PyTuple_Pack(3, type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003196 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003197 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003198 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003199 }
Fred Drake5755ce62001-06-27 19:19:46 +00003200 err = call_trace(func, self, f, PyTrace_EXCEPTION, arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00003201 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003202 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00003203 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003204 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00003205 Py_XDECREF(type);
3206 Py_XDECREF(value);
3207 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003208 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003209}
3210
Fred Drake4ec5d562001-10-04 19:26:43 +00003211static void
3212call_trace_protected(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003213 int what, PyObject *arg)
Fred Drake4ec5d562001-10-04 19:26:43 +00003214{
3215 PyObject *type, *value, *traceback;
3216 int err;
3217 PyErr_Fetch(&type, &value, &traceback);
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003218 err = call_trace(func, obj, frame, what, arg);
Fred Drake4ec5d562001-10-04 19:26:43 +00003219 if (err == 0)
3220 PyErr_Restore(type, value, traceback);
3221 else {
3222 Py_XDECREF(type);
3223 Py_XDECREF(value);
3224 Py_XDECREF(traceback);
3225 }
3226}
3227
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003228static int
Fred Drake5755ce62001-06-27 19:19:46 +00003229call_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
3230 int what, PyObject *arg)
Guido van Rossum96a42c81992-01-12 02:29:51 +00003231{
Fred Drake5755ce62001-06-27 19:19:46 +00003232 register PyThreadState *tstate = frame->f_tstate;
3233 int result;
3234 if (tstate->tracing)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003235 return 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +00003236 tstate->tracing++;
Fred Drake9e3ad782001-07-03 23:39:52 +00003237 tstate->use_tracing = 0;
Fred Drake5755ce62001-06-27 19:19:46 +00003238 result = func(obj, frame, what, arg);
Fred Drake9e3ad782001-07-03 23:39:52 +00003239 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3240 || (tstate->c_profilefunc != NULL));
Guido van Rossuma027efa1997-05-05 20:56:21 +00003241 tstate->tracing--;
Fred Drake5755ce62001-06-27 19:19:46 +00003242 return result;
Guido van Rossum96a42c81992-01-12 02:29:51 +00003243}
3244
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00003245PyObject *
3246_PyEval_CallTracing(PyObject *func, PyObject *args)
3247{
3248 PyFrameObject *frame = PyEval_GetFrame();
3249 PyThreadState *tstate = frame->f_tstate;
3250 int save_tracing = tstate->tracing;
3251 int save_use_tracing = tstate->use_tracing;
3252 PyObject *result;
3253
3254 tstate->tracing = 0;
3255 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3256 || (tstate->c_profilefunc != NULL));
3257 result = PyObject_Call(func, args, NULL);
3258 tstate->tracing = save_tracing;
3259 tstate->use_tracing = save_use_tracing;
3260 return result;
3261}
3262
Michael W. Hudson006c7522002-11-08 13:08:46 +00003263static int
Tim Peters8a5c3c72004-04-05 19:36:21 +00003264maybe_call_line_trace(Py_tracefunc func, PyObject *obj,
Armin Rigobf57a142004-03-22 19:24:58 +00003265 PyFrameObject *frame, int *instr_lb, int *instr_ub,
3266 int *instr_prev)
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003267{
Michael W. Hudson006c7522002-11-08 13:08:46 +00003268 int result = 0;
3269
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003270 /* If the last instruction executed isn't in the current
3271 instruction window, reset the window. If the last
3272 instruction happens to fall at the start of a line or if it
3273 represents a jump backwards, call the trace function.
3274 */
Michael W. Hudson53d58bb2002-08-30 13:09:51 +00003275 if ((frame->f_lasti < *instr_lb || frame->f_lasti >= *instr_ub)) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003276 int line;
3277 PyAddrPair bounds;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003278
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003279 line = PyCode_CheckLineNumber(frame->f_code, frame->f_lasti,
3280 &bounds);
3281 if (line >= 0) {
Michael W. Hudson02ff6a92002-09-11 15:36:32 +00003282 frame->f_lineno = line;
Tim Peters8a5c3c72004-04-05 19:36:21 +00003283 result = call_trace(func, obj, frame,
Michael W. Hudson006c7522002-11-08 13:08:46 +00003284 PyTrace_LINE, Py_None);
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003285 }
3286 *instr_lb = bounds.ap_lower;
3287 *instr_ub = bounds.ap_upper;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003288 }
Armin Rigobf57a142004-03-22 19:24:58 +00003289 else if (frame->f_lasti <= *instr_prev) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003290 result = call_trace(func, obj, frame, PyTrace_LINE, Py_None);
Armin Rigobf57a142004-03-22 19:24:58 +00003291 }
3292 *instr_prev = frame->f_lasti;
Michael W. Hudson006c7522002-11-08 13:08:46 +00003293 return result;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003294}
3295
Fred Drake5755ce62001-06-27 19:19:46 +00003296void
3297PyEval_SetProfile(Py_tracefunc func, PyObject *arg)
Fred Draked0838392001-06-16 21:02:31 +00003298{
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003299 PyThreadState *tstate = PyThreadState_GET();
Fred Drake5755ce62001-06-27 19:19:46 +00003300 PyObject *temp = tstate->c_profileobj;
3301 Py_XINCREF(arg);
3302 tstate->c_profilefunc = NULL;
3303 tstate->c_profileobj = NULL;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003304 /* Must make sure that tracing is not ignored if 'temp' is freed */
Fred Drake9e3ad782001-07-03 23:39:52 +00003305 tstate->use_tracing = tstate->c_tracefunc != NULL;
Fred Drake5755ce62001-06-27 19:19:46 +00003306 Py_XDECREF(temp);
3307 tstate->c_profilefunc = func;
3308 tstate->c_profileobj = arg;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003309 /* Flag that tracing or profiling is turned on */
Fred Drake9e3ad782001-07-03 23:39:52 +00003310 tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
Fred Drake5755ce62001-06-27 19:19:46 +00003311}
3312
3313void
3314PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
3315{
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003316 PyThreadState *tstate = PyThreadState_GET();
Fred Drake5755ce62001-06-27 19:19:46 +00003317 PyObject *temp = tstate->c_traceobj;
3318 Py_XINCREF(arg);
3319 tstate->c_tracefunc = NULL;
3320 tstate->c_traceobj = NULL;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003321 /* Must make sure that profiling is not ignored if 'temp' is freed */
Fred Drake9e3ad782001-07-03 23:39:52 +00003322 tstate->use_tracing = tstate->c_profilefunc != NULL;
Fred Drake5755ce62001-06-27 19:19:46 +00003323 Py_XDECREF(temp);
3324 tstate->c_tracefunc = func;
3325 tstate->c_traceobj = arg;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003326 /* Flag that tracing or profiling is turned on */
Fred Drake9e3ad782001-07-03 23:39:52 +00003327 tstate->use_tracing = ((func != NULL)
3328 || (tstate->c_profilefunc != NULL));
Fred Draked0838392001-06-16 21:02:31 +00003329}
3330
Guido van Rossumb209a111997-04-29 18:18:01 +00003331PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003332PyEval_GetBuiltins(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00003333{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003334 PyFrameObject *current_frame = PyEval_GetFrame();
Guido van Rossum6135a871995-01-09 17:53:26 +00003335 if (current_frame == NULL)
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003336 return PyThreadState_GET()->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00003337 else
3338 return current_frame->f_builtins;
3339}
3340
Guido van Rossumb209a111997-04-29 18:18:01 +00003341PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003342PyEval_GetLocals(void)
Guido van Rossum5b722181993-03-30 17:46:03 +00003343{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003344 PyFrameObject *current_frame = PyEval_GetFrame();
Guido van Rossum5b722181993-03-30 17:46:03 +00003345 if (current_frame == NULL)
3346 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00003347 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00003348 return current_frame->f_locals;
3349}
3350
Guido van Rossumb209a111997-04-29 18:18:01 +00003351PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003352PyEval_GetGlobals(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003353{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003354 PyFrameObject *current_frame = PyEval_GetFrame();
Guido van Rossum3f5da241990-12-20 15:06:42 +00003355 if (current_frame == NULL)
3356 return NULL;
3357 else
3358 return current_frame->f_globals;
3359}
3360
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003361PyFrameObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003362PyEval_GetFrame(void)
Guido van Rossume59214e1994-08-30 08:01:59 +00003363{
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003364 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003365 return _PyThreadState_GetFrame(tstate);
Guido van Rossume59214e1994-08-30 08:01:59 +00003366}
3367
Guido van Rossum6135a871995-01-09 17:53:26 +00003368int
Tim Peters5ba58662001-07-16 02:29:45 +00003369PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
Jeremy Hylton061d1062001-03-22 02:32:48 +00003370{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003371 PyFrameObject *current_frame = PyEval_GetFrame();
Just van Rossum3aaf42c2003-02-10 08:21:10 +00003372 int result = cf->cf_flags != 0;
Tim Peters5ba58662001-07-16 02:29:45 +00003373
3374 if (current_frame != NULL) {
3375 const int codeflags = current_frame->f_code->co_flags;
Tim Peterse2c18e92001-08-17 20:47:47 +00003376 const int compilerflags = codeflags & PyCF_MASK;
3377 if (compilerflags) {
Tim Peters5ba58662001-07-16 02:29:45 +00003378 result = 1;
Tim Peterse2c18e92001-08-17 20:47:47 +00003379 cf->cf_flags |= compilerflags;
Tim Peters5ba58662001-07-16 02:29:45 +00003380 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003381#if 0 /* future keyword */
Martin v. Löwis7198a522002-01-01 19:59:11 +00003382 if (codeflags & CO_GENERATOR_ALLOWED) {
3383 result = 1;
3384 cf->cf_flags |= CO_GENERATOR_ALLOWED;
3385 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003386#endif
Tim Peters5ba58662001-07-16 02:29:45 +00003387 }
3388 return result;
Jeremy Hylton061d1062001-03-22 02:32:48 +00003389}
3390
Guido van Rossum3f5da241990-12-20 15:06:42 +00003391
Guido van Rossum681d79a1995-07-18 14:51:37 +00003392/* External interface to call any callable object.
3393 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00003394
Guido van Rossumd7ed6831997-08-30 15:02:50 +00003395#undef PyEval_CallObject
3396/* for backward compatibility: export this interface */
3397
Guido van Rossumb209a111997-04-29 18:18:01 +00003398PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003399PyEval_CallObject(PyObject *func, PyObject *arg)
Guido van Rossum83bf35c1991-07-27 21:32:34 +00003400{
Guido van Rossumb209a111997-04-29 18:18:01 +00003401 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003402}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00003403#define PyEval_CallObject(func,arg) \
3404 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00003405
Guido van Rossumb209a111997-04-29 18:18:01 +00003406PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003407PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum681d79a1995-07-18 14:51:37 +00003408{
Jeremy Hylton52820442001-01-03 23:52:36 +00003409 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00003410
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003411 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003412 arg = PyTuple_New(0);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003413 if (arg == NULL)
3414 return NULL;
3415 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003416 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003417 PyErr_SetString(PyExc_TypeError,
3418 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00003419 return NULL;
3420 }
3421 else
Guido van Rossumb209a111997-04-29 18:18:01 +00003422 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003423
Guido van Rossumb209a111997-04-29 18:18:01 +00003424 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003425 PyErr_SetString(PyExc_TypeError,
3426 "keyword list must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00003427 Py_DECREF(arg);
Guido van Rossume3e61c11995-08-04 04:14:47 +00003428 return NULL;
3429 }
3430
Tim Peters6d6c1a32001-08-02 04:15:00 +00003431 result = PyObject_Call(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00003432 Py_DECREF(arg);
Jeremy Hylton52820442001-01-03 23:52:36 +00003433 return result;
3434}
3435
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003436const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003437PyEval_GetFuncName(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003438{
3439 if (PyMethod_Check(func))
Tim Peters6d6c1a32001-08-02 04:15:00 +00003440 return PyEval_GetFuncName(PyMethod_GET_FUNCTION(func));
Jeremy Hylton512a2372001-04-11 13:52:29 +00003441 else if (PyFunction_Check(func))
Martin v. Löwis5b222132007-06-10 09:51:05 +00003442 return PyUnicode_AsString(((PyFunctionObject*)func)->func_name);
Jeremy Hylton512a2372001-04-11 13:52:29 +00003443 else if (PyCFunction_Check(func))
3444 return ((PyCFunctionObject*)func)->m_ml->ml_name;
Guido van Rossum50e9fb92006-08-17 05:42:55 +00003445 else
Jeremy Hylton512a2372001-04-11 13:52:29 +00003446 return func->ob_type->tp_name;
Jeremy Hylton512a2372001-04-11 13:52:29 +00003447}
3448
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003449const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003450PyEval_GetFuncDesc(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003451{
3452 if (PyMethod_Check(func))
3453 return "()";
3454 else if (PyFunction_Check(func))
3455 return "()";
3456 else if (PyCFunction_Check(func))
3457 return "()";
Guido van Rossum50e9fb92006-08-17 05:42:55 +00003458 else
Jeremy Hylton512a2372001-04-11 13:52:29 +00003459 return " object";
Jeremy Hylton512a2372001-04-11 13:52:29 +00003460}
3461
Neal Norwitzaddfe0c2002-11-10 14:33:26 +00003462static void
Jeremy Hylton192690e2002-08-16 18:36:11 +00003463err_args(PyObject *func, int flags, int nargs)
3464{
3465 if (flags & METH_NOARGS)
Tim Peters8a5c3c72004-04-05 19:36:21 +00003466 PyErr_Format(PyExc_TypeError,
Guido van Rossum86c659a2002-08-23 14:11:35 +00003467 "%.200s() takes no arguments (%d given)",
Tim Peters8a5c3c72004-04-05 19:36:21 +00003468 ((PyCFunctionObject *)func)->m_ml->ml_name,
Jeremy Hylton192690e2002-08-16 18:36:11 +00003469 nargs);
3470 else
Tim Peters8a5c3c72004-04-05 19:36:21 +00003471 PyErr_Format(PyExc_TypeError,
Guido van Rossum86c659a2002-08-23 14:11:35 +00003472 "%.200s() takes exactly one argument (%d given)",
Tim Peters8a5c3c72004-04-05 19:36:21 +00003473 ((PyCFunctionObject *)func)->m_ml->ml_name,
Jeremy Hylton192690e2002-08-16 18:36:11 +00003474 nargs);
3475}
3476
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003477#define C_TRACE(x, call) \
Nicholas Bastind858a772004-06-25 23:31:06 +00003478if (tstate->use_tracing && tstate->c_profilefunc) { \
3479 if (call_trace(tstate->c_profilefunc, \
3480 tstate->c_profileobj, \
3481 tstate->frame, PyTrace_C_CALL, \
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003482 func)) { \
3483 x = NULL; \
3484 } \
3485 else { \
3486 x = call; \
3487 if (tstate->c_profilefunc != NULL) { \
3488 if (x == NULL) { \
3489 call_trace_protected(tstate->c_profilefunc, \
3490 tstate->c_profileobj, \
3491 tstate->frame, PyTrace_C_EXCEPTION, \
3492 func); \
3493 /* XXX should pass (type, value, tb) */ \
3494 } else { \
3495 if (call_trace(tstate->c_profilefunc, \
3496 tstate->c_profileobj, \
3497 tstate->frame, PyTrace_C_RETURN, \
3498 func)) { \
3499 Py_DECREF(x); \
3500 x = NULL; \
3501 } \
3502 } \
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003503 } \
Nicholas Bastind858a772004-06-25 23:31:06 +00003504 } \
3505} else { \
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003506 x = call; \
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003507 }
3508
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003509static PyObject *
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00003510call_function(PyObject ***pp_stack, int oparg
3511#ifdef WITH_TSC
3512 , uint64* pintr0, uint64* pintr1
3513#endif
3514 )
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003515{
3516 int na = oparg & 0xff;
3517 int nk = (oparg>>8) & 0xff;
3518 int n = na + 2 * nk;
3519 PyObject **pfunc = (*pp_stack) - n - 1;
3520 PyObject *func = *pfunc;
3521 PyObject *x, *w;
3522
Jeremy Hylton985eba52003-02-05 23:13:00 +00003523 /* Always dispatch PyCFunction first, because these are
3524 presumed to be the most frequent callable object.
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003525 */
3526 if (PyCFunction_Check(func) && nk == 0) {
3527 int flags = PyCFunction_GET_FLAGS(func);
Nicholas Bastind858a772004-06-25 23:31:06 +00003528 PyThreadState *tstate = PyThreadState_GET();
Raymond Hettingera7f56bc2004-06-26 04:34:33 +00003529
3530 PCALL(PCALL_CFUNCTION);
Jeremy Hylton192690e2002-08-16 18:36:11 +00003531 if (flags & (METH_NOARGS | METH_O)) {
3532 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
3533 PyObject *self = PyCFunction_GET_SELF(func);
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003534 if (flags & METH_NOARGS && na == 0) {
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003535 C_TRACE(x, (*meth)(self,NULL));
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003536 }
Jeremy Hylton192690e2002-08-16 18:36:11 +00003537 else if (flags & METH_O && na == 1) {
3538 PyObject *arg = EXT_POP(*pp_stack);
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003539 C_TRACE(x, (*meth)(self,arg));
Jeremy Hylton192690e2002-08-16 18:36:11 +00003540 Py_DECREF(arg);
3541 }
3542 else {
3543 err_args(func, flags, na);
3544 x = NULL;
3545 }
3546 }
3547 else {
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003548 PyObject *callargs;
3549 callargs = load_args(pp_stack, na);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003550 READ_TIMESTAMP(*pintr0);
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003551 C_TRACE(x, PyCFunction_Call(func,callargs,NULL));
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003552 READ_TIMESTAMP(*pintr1);
Tim Peters8a5c3c72004-04-05 19:36:21 +00003553 Py_XDECREF(callargs);
3554 }
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003555 } else {
3556 if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) {
3557 /* optimize access to bound methods */
3558 PyObject *self = PyMethod_GET_SELF(func);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003559 PCALL(PCALL_METHOD);
3560 PCALL(PCALL_BOUND_METHOD);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003561 Py_INCREF(self);
3562 func = PyMethod_GET_FUNCTION(func);
3563 Py_INCREF(func);
3564 Py_DECREF(*pfunc);
3565 *pfunc = self;
3566 na++;
3567 n++;
3568 } else
3569 Py_INCREF(func);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003570 READ_TIMESTAMP(*pintr0);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003571 if (PyFunction_Check(func))
3572 x = fast_function(func, pp_stack, n, na, nk);
Tim Peters8a5c3c72004-04-05 19:36:21 +00003573 else
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003574 x = do_call(func, pp_stack, na, nk);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003575 READ_TIMESTAMP(*pintr1);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003576 Py_DECREF(func);
3577 }
Tim Peters8a5c3c72004-04-05 19:36:21 +00003578
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003579 /* Clear the stack of the function object. Also removes
3580 the arguments in case they weren't consumed already
3581 (fast_function() and err_args() leave them on the stack).
Thomas Wouters7f597322006-03-01 05:32:33 +00003582 */
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003583 while ((*pp_stack) > pfunc) {
3584 w = EXT_POP(*pp_stack);
3585 Py_DECREF(w);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003586 PCALL(PCALL_POP);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003587 }
3588 return x;
3589}
3590
Jeremy Hylton192690e2002-08-16 18:36:11 +00003591/* The fast_function() function optimize calls for which no argument
Jeremy Hylton52820442001-01-03 23:52:36 +00003592 tuple is necessary; the objects are passed directly from the stack.
Jeremy Hylton985eba52003-02-05 23:13:00 +00003593 For the simplest case -- a function that takes only positional
3594 arguments and is called with only positional arguments -- it
3595 inlines the most primitive frame setup code from
3596 PyEval_EvalCodeEx(), which vastly reduces the checks that must be
3597 done before evaluating the frame.
Jeremy Hylton52820442001-01-03 23:52:36 +00003598*/
3599
3600static PyObject *
Guido van Rossumac7be682001-01-17 15:42:30 +00003601fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
Jeremy Hylton52820442001-01-03 23:52:36 +00003602{
Jeremy Hylton985eba52003-02-05 23:13:00 +00003603 PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003604 PyObject *globals = PyFunction_GET_GLOBALS(func);
3605 PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003606 PyObject *kwdefs = PyFunction_GET_KW_DEFAULTS(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003607 PyObject **d = NULL;
3608 int nd = 0;
3609
Jeremy Hylton985eba52003-02-05 23:13:00 +00003610 PCALL(PCALL_FUNCTION);
3611 PCALL(PCALL_FAST_FUNCTION);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003612 if (argdefs == NULL && co->co_argcount == n &&
3613 co->co_kwonlyargcount == 0 && nk==0 &&
Jeremy Hylton985eba52003-02-05 23:13:00 +00003614 co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
3615 PyFrameObject *f;
3616 PyObject *retval = NULL;
3617 PyThreadState *tstate = PyThreadState_GET();
3618 PyObject **fastlocals, **stack;
3619 int i;
3620
3621 PCALL(PCALL_FASTER_FUNCTION);
3622 assert(globals != NULL);
3623 /* XXX Perhaps we should create a specialized
3624 PyFrame_New() that doesn't take locals, but does
3625 take builtins without sanity checking them.
3626 */
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003627 assert(tstate != NULL);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003628 f = PyFrame_New(tstate, co, globals, NULL);
3629 if (f == NULL)
3630 return NULL;
3631
3632 fastlocals = f->f_localsplus;
3633 stack = (*pp_stack) - n;
3634
3635 for (i = 0; i < n; i++) {
3636 Py_INCREF(*stack);
3637 fastlocals[i] = *stack++;
3638 }
Phillip J. Eby0d6615f2005-08-02 00:46:46 +00003639 retval = PyEval_EvalFrameEx(f,0);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003640 ++tstate->recursion_depth;
3641 Py_DECREF(f);
3642 --tstate->recursion_depth;
3643 return retval;
3644 }
Jeremy Hylton52820442001-01-03 23:52:36 +00003645 if (argdefs != NULL) {
3646 d = &PyTuple_GET_ITEM(argdefs, 0);
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003647 nd = Py_Size(argdefs);
Jeremy Hylton52820442001-01-03 23:52:36 +00003648 }
Jeremy Hylton985eba52003-02-05 23:13:00 +00003649 return PyEval_EvalCodeEx(co, globals,
3650 (PyObject *)NULL, (*pp_stack)-n, na,
Guido van Rossum4f72a782006-10-27 23:31:49 +00003651 (*pp_stack)-2*nk, nk, d, nd, kwdefs,
Jeremy Hylton985eba52003-02-05 23:13:00 +00003652 PyFunction_GET_CLOSURE(func));
Jeremy Hylton52820442001-01-03 23:52:36 +00003653}
3654
3655static PyObject *
Ka-Ping Yee20579702001-01-15 22:14:16 +00003656update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack,
3657 PyObject *func)
Jeremy Hylton52820442001-01-03 23:52:36 +00003658{
3659 PyObject *kwdict = NULL;
3660 if (orig_kwdict == NULL)
3661 kwdict = PyDict_New();
3662 else {
3663 kwdict = PyDict_Copy(orig_kwdict);
3664 Py_DECREF(orig_kwdict);
3665 }
3666 if (kwdict == NULL)
3667 return NULL;
Raymond Hettinger5bed4562004-04-10 23:34:17 +00003668 while (--nk >= 0) {
Jeremy Hylton52820442001-01-03 23:52:36 +00003669 int err;
3670 PyObject *value = EXT_POP(*pp_stack);
3671 PyObject *key = EXT_POP(*pp_stack);
3672 if (PyDict_GetItem(kwdict, key) != NULL) {
Guido van Rossumac7be682001-01-17 15:42:30 +00003673 PyErr_Format(PyExc_TypeError,
Ka-Ping Yee20579702001-01-15 22:14:16 +00003674 "%.200s%s got multiple values "
Jeremy Hylton512a2372001-04-11 13:52:29 +00003675 "for keyword argument '%.200s'",
Tim Peters6d6c1a32001-08-02 04:15:00 +00003676 PyEval_GetFuncName(func),
3677 PyEval_GetFuncDesc(func),
Neal Norwitzda059e32007-08-26 05:33:45 +00003678 PyUnicode_AsString(key));
Jeremy Hylton52820442001-01-03 23:52:36 +00003679 Py_DECREF(key);
3680 Py_DECREF(value);
3681 Py_DECREF(kwdict);
3682 return NULL;
3683 }
3684 err = PyDict_SetItem(kwdict, key, value);
3685 Py_DECREF(key);
3686 Py_DECREF(value);
3687 if (err) {
3688 Py_DECREF(kwdict);
3689 return NULL;
3690 }
3691 }
3692 return kwdict;
3693}
3694
3695static PyObject *
3696update_star_args(int nstack, int nstar, PyObject *stararg,
3697 PyObject ***pp_stack)
3698{
3699 PyObject *callargs, *w;
3700
3701 callargs = PyTuple_New(nstack + nstar);
3702 if (callargs == NULL) {
3703 return NULL;
3704 }
3705 if (nstar) {
3706 int i;
3707 for (i = 0; i < nstar; i++) {
3708 PyObject *a = PyTuple_GET_ITEM(stararg, i);
3709 Py_INCREF(a);
3710 PyTuple_SET_ITEM(callargs, nstack + i, a);
3711 }
3712 }
Raymond Hettinger5bed4562004-04-10 23:34:17 +00003713 while (--nstack >= 0) {
Jeremy Hylton52820442001-01-03 23:52:36 +00003714 w = EXT_POP(*pp_stack);
3715 PyTuple_SET_ITEM(callargs, nstack, w);
3716 }
3717 return callargs;
3718}
3719
3720static PyObject *
3721load_args(PyObject ***pp_stack, int na)
3722{
3723 PyObject *args = PyTuple_New(na);
3724 PyObject *w;
3725
3726 if (args == NULL)
3727 return NULL;
Raymond Hettinger5bed4562004-04-10 23:34:17 +00003728 while (--na >= 0) {
Jeremy Hylton52820442001-01-03 23:52:36 +00003729 w = EXT_POP(*pp_stack);
3730 PyTuple_SET_ITEM(args, na, w);
3731 }
3732 return args;
3733}
3734
3735static PyObject *
3736do_call(PyObject *func, PyObject ***pp_stack, int na, int nk)
3737{
3738 PyObject *callargs = NULL;
3739 PyObject *kwdict = NULL;
3740 PyObject *result = NULL;
3741
3742 if (nk > 0) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00003743 kwdict = update_keyword_args(NULL, nk, pp_stack, func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003744 if (kwdict == NULL)
3745 goto call_fail;
3746 }
3747 callargs = load_args(pp_stack, na);
3748 if (callargs == NULL)
3749 goto call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00003750#ifdef CALL_PROFILE
3751 /* At this point, we have to look at the type of func to
3752 update the call stats properly. Do it here so as to avoid
3753 exposing the call stats machinery outside ceval.c
3754 */
3755 if (PyFunction_Check(func))
3756 PCALL(PCALL_FUNCTION);
3757 else if (PyMethod_Check(func))
3758 PCALL(PCALL_METHOD);
3759 else if (PyType_Check(func))
3760 PCALL(PCALL_TYPE);
3761 else
3762 PCALL(PCALL_OTHER);
3763#endif
Tim Peters6d6c1a32001-08-02 04:15:00 +00003764 result = PyObject_Call(func, callargs, kwdict);
Jeremy Hylton52820442001-01-03 23:52:36 +00003765 call_fail:
3766 Py_XDECREF(callargs);
3767 Py_XDECREF(kwdict);
3768 return result;
3769}
3770
3771static PyObject *
3772ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
3773{
3774 int nstar = 0;
3775 PyObject *callargs = NULL;
3776 PyObject *stararg = NULL;
3777 PyObject *kwdict = NULL;
3778 PyObject *result = NULL;
3779
3780 if (flags & CALL_FLAG_KW) {
3781 kwdict = EXT_POP(*pp_stack);
Guido van Rossumd59da4b2007-05-22 18:11:13 +00003782 if (!PyDict_Check(kwdict)) {
3783 PyObject *d;
3784 d = PyDict_New();
3785 if (d == NULL)
3786 goto ext_call_fail;
3787 if (PyDict_Update(d, kwdict) != 0) {
3788 Py_DECREF(d);
3789 /* PyDict_Update raises attribute
3790 * error (percolated from an attempt
3791 * to get 'keys' attribute) instead of
3792 * a type error if its second argument
3793 * is not a mapping.
3794 */
3795 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
3796 PyErr_Format(PyExc_TypeError,
3797 "%.200s%.200s argument after ** "
3798 "must be a mapping, not %.200s",
3799 PyEval_GetFuncName(func),
3800 PyEval_GetFuncDesc(func),
3801 kwdict->ob_type->tp_name);
3802 }
3803 goto ext_call_fail;
3804 }
3805 Py_DECREF(kwdict);
3806 kwdict = d;
Jeremy Hylton52820442001-01-03 23:52:36 +00003807 }
3808 }
3809 if (flags & CALL_FLAG_VAR) {
3810 stararg = EXT_POP(*pp_stack);
3811 if (!PyTuple_Check(stararg)) {
3812 PyObject *t = NULL;
3813 t = PySequence_Tuple(stararg);
3814 if (t == NULL) {
Jeremy Hylton512a2372001-04-11 13:52:29 +00003815 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
3816 PyErr_Format(PyExc_TypeError,
Guido van Rossumd59da4b2007-05-22 18:11:13 +00003817 "%.200s%.200s argument after * "
3818 "must be a sequence, not %200s",
Tim Peters6d6c1a32001-08-02 04:15:00 +00003819 PyEval_GetFuncName(func),
Guido van Rossumd59da4b2007-05-22 18:11:13 +00003820 PyEval_GetFuncDesc(func),
3821 stararg->ob_type->tp_name);
Jeremy Hylton512a2372001-04-11 13:52:29 +00003822 }
Jeremy Hylton52820442001-01-03 23:52:36 +00003823 goto ext_call_fail;
3824 }
3825 Py_DECREF(stararg);
3826 stararg = t;
3827 }
3828 nstar = PyTuple_GET_SIZE(stararg);
3829 }
3830 if (nk > 0) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00003831 kwdict = update_keyword_args(kwdict, nk, pp_stack, func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003832 if (kwdict == NULL)
3833 goto ext_call_fail;
3834 }
3835 callargs = update_star_args(na, nstar, stararg, pp_stack);
3836 if (callargs == NULL)
3837 goto ext_call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00003838#ifdef CALL_PROFILE
3839 /* At this point, we have to look at the type of func to
3840 update the call stats properly. Do it here so as to avoid
3841 exposing the call stats machinery outside ceval.c
3842 */
3843 if (PyFunction_Check(func))
3844 PCALL(PCALL_FUNCTION);
3845 else if (PyMethod_Check(func))
3846 PCALL(PCALL_METHOD);
3847 else if (PyType_Check(func))
3848 PCALL(PCALL_TYPE);
3849 else
3850 PCALL(PCALL_OTHER);
3851#endif
Tim Peters6d6c1a32001-08-02 04:15:00 +00003852 result = PyObject_Call(func, callargs, kwdict);
Jeremy Hylton52820442001-01-03 23:52:36 +00003853 ext_call_fail:
3854 Py_XDECREF(callargs);
3855 Py_XDECREF(kwdict);
3856 Py_XDECREF(stararg);
3857 return result;
3858}
3859
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003860/* Extract a slice index from a PyInt or PyLong or an object with the
3861 nb_index slot defined, and store in *pi.
3862 Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX,
3863 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 +00003864 Return 0 on error, 1 on success.
Tim Peterscb479e72001-12-16 19:11:44 +00003865*/
Tim Petersb5196382001-12-16 19:44:20 +00003866/* Note: If v is NULL, return success without storing into *pi. This
3867 is because_PyEval_SliceIndex() is called by apply_slice(), which can be
3868 called by the SLICE opcode with v and/or w equal to NULL.
Tim Peterscb479e72001-12-16 19:11:44 +00003869*/
Guido van Rossum20c6add2000-05-08 14:06:50 +00003870int
Martin v. Löwis18e16552006-02-15 17:27:45 +00003871_PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003872{
Tim Petersb5196382001-12-16 19:44:20 +00003873 if (v != NULL) {
Martin v. Löwisdde99d22006-02-17 15:57:41 +00003874 Py_ssize_t x;
Guido van Rossumddefaf32007-01-14 03:31:43 +00003875 if (PyInt_CheckExact(v)) {
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003876 /* XXX(nnorwitz): I think PyInt_AS_LONG is correct,
3877 however, it looks like it should be AsSsize_t.
3878 There should be a comment here explaining why.
3879 */
3880 x = PyInt_AS_LONG(v);
Thomas Wouters477c8d52006-05-27 19:21:47 +00003881 }
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003882 else if (PyIndex_Check(v)) {
3883 x = PyNumber_AsSsize_t(v, NULL);
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003884 if (x == -1 && PyErr_Occurred())
3885 return 0;
3886 }
3887 else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003888 PyErr_SetString(PyExc_TypeError,
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003889 "slice indices must be integers or "
3890 "None or have an __index__ method");
Guido van Rossum20c6add2000-05-08 14:06:50 +00003891 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003892 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00003893 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003894 }
Guido van Rossum20c6add2000-05-08 14:06:50 +00003895 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003896}
3897
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003898#undef ISINDEX
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003899#define ISINDEX(x) ((x) == NULL || \
3900 PyInt_Check(x) || PyLong_Check(x) || PyIndex_Check(x))
Guido van Rossum50d756e2001-08-18 17:43:36 +00003901
Guido van Rossumb209a111997-04-29 18:18:01 +00003902static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003903apply_slice(PyObject *u, PyObject *v, PyObject *w) /* return u[v:w] */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003904{
Guido van Rossum50d756e2001-08-18 17:43:36 +00003905 PyTypeObject *tp = u->ob_type;
3906 PySequenceMethods *sq = tp->tp_as_sequence;
3907
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003908 if (sq && sq->sq_slice && ISINDEX(v) && ISINDEX(w)) {
Martin v. Löwisdde99d22006-02-17 15:57:41 +00003909 Py_ssize_t ilow = 0, ihigh = PY_SSIZE_T_MAX;
Guido van Rossum50d756e2001-08-18 17:43:36 +00003910 if (!_PyEval_SliceIndex(v, &ilow))
3911 return NULL;
3912 if (!_PyEval_SliceIndex(w, &ihigh))
3913 return NULL;
3914 return PySequence_GetSlice(u, ilow, ihigh);
3915 }
3916 else {
3917 PyObject *slice = PySlice_New(v, w, NULL);
Guido van Rossum354797c2001-12-03 19:45:06 +00003918 if (slice != NULL) {
3919 PyObject *res = PyObject_GetItem(u, slice);
3920 Py_DECREF(slice);
3921 return res;
3922 }
Guido van Rossum50d756e2001-08-18 17:43:36 +00003923 else
3924 return NULL;
3925 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003926}
Guido van Rossum3f5da241990-12-20 15:06:42 +00003927
3928static int
Guido van Rossumac7be682001-01-17 15:42:30 +00003929assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x)
3930 /* u[v:w] = x */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003931{
Guido van Rossum50d756e2001-08-18 17:43:36 +00003932 PyTypeObject *tp = u->ob_type;
3933 PySequenceMethods *sq = tp->tp_as_sequence;
3934
Guido van Rossumd8faa362007-04-27 19:54:29 +00003935 if (sq && sq->sq_ass_slice && ISINDEX(v) && ISINDEX(w)) {
Martin v. Löwisdde99d22006-02-17 15:57:41 +00003936 Py_ssize_t ilow = 0, ihigh = PY_SSIZE_T_MAX;
Guido van Rossum50d756e2001-08-18 17:43:36 +00003937 if (!_PyEval_SliceIndex(v, &ilow))
3938 return -1;
3939 if (!_PyEval_SliceIndex(w, &ihigh))
3940 return -1;
3941 if (x == NULL)
3942 return PySequence_DelSlice(u, ilow, ihigh);
3943 else
3944 return PySequence_SetSlice(u, ilow, ihigh, x);
3945 }
3946 else {
3947 PyObject *slice = PySlice_New(v, w, NULL);
3948 if (slice != NULL) {
Guido van Rossum354797c2001-12-03 19:45:06 +00003949 int res;
Guido van Rossum50d756e2001-08-18 17:43:36 +00003950 if (x != NULL)
Guido van Rossum354797c2001-12-03 19:45:06 +00003951 res = PyObject_SetItem(u, slice, x);
Guido van Rossum50d756e2001-08-18 17:43:36 +00003952 else
Guido van Rossum354797c2001-12-03 19:45:06 +00003953 res = PyObject_DelItem(u, slice);
3954 Py_DECREF(slice);
3955 return res;
Guido van Rossum50d756e2001-08-18 17:43:36 +00003956 }
3957 else
3958 return -1;
3959 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003960}
3961
Guido van Rossum486364b2007-06-30 05:01:58 +00003962#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
Brett Cannon39590462007-02-26 22:01:14 +00003963 "BaseException is not allowed"
Brett Cannonf74225d2007-02-26 21:10:16 +00003964
Guido van Rossumb209a111997-04-29 18:18:01 +00003965static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003966cmp_outcome(int op, register PyObject *v, register PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003967{
Guido van Rossumac7be682001-01-17 15:42:30 +00003968 int res = 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003969 switch (op) {
Martin v. Löwis7198a522002-01-01 19:59:11 +00003970 case PyCmp_IS:
Guido van Rossum3f5da241990-12-20 15:06:42 +00003971 res = (v == w);
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00003972 break;
3973 case PyCmp_IS_NOT:
3974 res = (v != w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00003975 break;
Martin v. Löwis7198a522002-01-01 19:59:11 +00003976 case PyCmp_IN:
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00003977 res = PySequence_Contains(w, v);
3978 if (res < 0)
3979 return NULL;
3980 break;
Martin v. Löwis7198a522002-01-01 19:59:11 +00003981 case PyCmp_NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00003982 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00003983 if (res < 0)
3984 return NULL;
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00003985 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003986 break;
Martin v. Löwis7198a522002-01-01 19:59:11 +00003987 case PyCmp_EXC_MATCH:
Thomas Wouters9fe394c2007-02-05 01:24:16 +00003988 if (PyTuple_Check(w)) {
3989 Py_ssize_t i, length;
3990 length = PyTuple_Size(w);
3991 for (i = 0; i < length; i += 1) {
3992 PyObject *exc = PyTuple_GET_ITEM(w, i);
Brett Cannon39590462007-02-26 22:01:14 +00003993 if (!PyExceptionClass_Check(exc)) {
3994 PyErr_SetString(PyExc_TypeError,
3995 CANNOT_CATCH_MSG);
Brett Cannonf74225d2007-02-26 21:10:16 +00003996 return NULL;
Thomas Wouters9fe394c2007-02-05 01:24:16 +00003997 }
3998 }
3999 }
4000 else {
Brett Cannon39590462007-02-26 22:01:14 +00004001 if (!PyExceptionClass_Check(w)) {
4002 PyErr_SetString(PyExc_TypeError,
4003 CANNOT_CATCH_MSG);
Brett Cannonf74225d2007-02-26 21:10:16 +00004004 return NULL;
Thomas Wouters9fe394c2007-02-05 01:24:16 +00004005 }
4006 }
Barry Warsaw4249f541997-08-22 21:26:19 +00004007 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004008 break;
4009 default:
Guido van Rossumac7be682001-01-17 15:42:30 +00004010 return PyObject_RichCompare(v, w, op);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004011 }
Guido van Rossumb209a111997-04-29 18:18:01 +00004012 v = res ? Py_True : Py_False;
4013 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004014 return v;
4015}
4016
Thomas Wouters52152252000-08-17 22:55:00 +00004017static PyObject *
4018import_from(PyObject *v, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00004019{
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004020 PyObject *x;
4021
4022 x = PyObject_GetAttr(v, name);
4023 if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
Walter Dörwald573c08c2007-05-25 15:46:59 +00004024 PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004025 }
Thomas Wouters52152252000-08-17 22:55:00 +00004026 return x;
4027}
Guido van Rossumac7be682001-01-17 15:42:30 +00004028
Thomas Wouters52152252000-08-17 22:55:00 +00004029static int
4030import_all_from(PyObject *locals, PyObject *v)
4031{
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004032 PyObject *all = PyObject_GetAttrString(v, "__all__");
4033 PyObject *dict, *name, *value;
4034 int skip_leading_underscores = 0;
4035 int pos, err;
Thomas Wouters52152252000-08-17 22:55:00 +00004036
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004037 if (all == NULL) {
4038 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
4039 return -1; /* Unexpected error */
4040 PyErr_Clear();
4041 dict = PyObject_GetAttrString(v, "__dict__");
4042 if (dict == NULL) {
4043 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
4044 return -1;
4045 PyErr_SetString(PyExc_ImportError,
4046 "from-import-* object has no __dict__ and no __all__");
Guido van Rossum3f5da241990-12-20 15:06:42 +00004047 return -1;
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004048 }
4049 all = PyMapping_Keys(dict);
4050 Py_DECREF(dict);
4051 if (all == NULL)
4052 return -1;
4053 skip_leading_underscores = 1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00004054 }
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004055
4056 for (pos = 0, err = 0; ; pos++) {
4057 name = PySequence_GetItem(all, pos);
4058 if (name == NULL) {
4059 if (!PyErr_ExceptionMatches(PyExc_IndexError))
4060 err = -1;
4061 else
4062 PyErr_Clear();
4063 break;
4064 }
4065 if (skip_leading_underscores &&
Martin v. Löwis5b222132007-06-10 09:51:05 +00004066 PyUnicode_Check(name) &&
4067 PyUnicode_AS_UNICODE(name)[0] == '_')
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004068 {
4069 Py_DECREF(name);
4070 continue;
4071 }
4072 value = PyObject_GetAttr(v, name);
4073 if (value == NULL)
4074 err = -1;
Thomas Wouters89f507f2006-12-13 04:49:30 +00004075 else if (PyDict_CheckExact(locals))
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004076 err = PyDict_SetItem(locals, name, value);
Thomas Wouters89f507f2006-12-13 04:49:30 +00004077 else
4078 err = PyObject_SetItem(locals, name, value);
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004079 Py_DECREF(name);
4080 Py_XDECREF(value);
4081 if (err != 0)
4082 break;
4083 }
4084 Py_DECREF(all);
4085 return err;
Guido van Rossume9736fc1990-11-18 17:33:06 +00004086}
4087
Guido van Rossumac7be682001-01-17 15:42:30 +00004088static void
Neal Norwitzda059e32007-08-26 05:33:45 +00004089format_exc_check_arg(PyObject *exc, const char *format_str, PyObject *obj)
Paul Prescode68140d2000-08-30 20:25:01 +00004090{
Neal Norwitzda059e32007-08-26 05:33:45 +00004091 const char *obj_str;
Paul Prescode68140d2000-08-30 20:25:01 +00004092
4093 if (!obj)
4094 return;
4095
Neal Norwitzda059e32007-08-26 05:33:45 +00004096 obj_str = PyUnicode_AsString(obj);
Paul Prescode68140d2000-08-30 20:25:01 +00004097 if (!obj_str)
4098 return;
4099
4100 PyErr_Format(exc, format_str, obj_str);
4101}
Guido van Rossum950361c1997-01-24 13:49:28 +00004102
Raymond Hettinger52a21b82004-08-06 18:43:09 +00004103static PyObject *
4104string_concatenate(PyObject *v, PyObject *w,
4105 PyFrameObject *f, unsigned char *next_instr)
4106{
4107 /* This function implements 'variable += expr' when both arguments
4108 are strings. */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004109 Py_ssize_t v_len = PyString_GET_SIZE(v);
4110 Py_ssize_t w_len = PyString_GET_SIZE(w);
4111 Py_ssize_t new_len = v_len + w_len;
4112 if (new_len < 0) {
4113 PyErr_SetString(PyExc_OverflowError,
4114 "strings are too large to concat");
4115 return NULL;
4116 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00004117
Raymond Hettinger52a21b82004-08-06 18:43:09 +00004118 if (v->ob_refcnt == 2) {
4119 /* In the common case, there are 2 references to the value
4120 * stored in 'variable' when the += is performed: one on the
4121 * value stack (in 'v') and one still stored in the 'variable'.
4122 * We try to delete the variable now to reduce the refcnt to 1.
4123 */
4124 switch (*next_instr) {
4125 case STORE_FAST:
4126 {
4127 int oparg = PEEKARG();
4128 PyObject **fastlocals = f->f_localsplus;
4129 if (GETLOCAL(oparg) == v)
4130 SETLOCAL(oparg, NULL);
4131 break;
4132 }
4133 case STORE_DEREF:
4134 {
Thomas Wouters477c8d52006-05-27 19:21:47 +00004135 PyObject **freevars = f->f_localsplus + f->f_code->co_nlocals;
Raymond Hettinger52a21b82004-08-06 18:43:09 +00004136 PyObject *c = freevars[PEEKARG()];
4137 if (PyCell_GET(c) == v)
4138 PyCell_Set(c, NULL);
4139 break;
4140 }
4141 case STORE_NAME:
4142 {
4143 PyObject *names = f->f_code->co_names;
4144 PyObject *name = GETITEM(names, PEEKARG());
4145 PyObject *locals = f->f_locals;
4146 if (PyDict_CheckExact(locals) &&
4147 PyDict_GetItem(locals, name) == v) {
4148 if (PyDict_DelItem(locals, name) != 0) {
4149 PyErr_Clear();
4150 }
4151 }
4152 break;
4153 }
4154 }
4155 }
4156
Armin Rigo618fbf52004-08-07 20:58:32 +00004157 if (v->ob_refcnt == 1 && !PyString_CHECK_INTERNED(v)) {
Raymond Hettinger52a21b82004-08-06 18:43:09 +00004158 /* Now we own the last reference to 'v', so we can resize it
4159 * in-place.
4160 */
Thomas Wouters0e3f5912006-08-11 14:57:12 +00004161 if (_PyString_Resize(&v, new_len) != 0) {
Raymond Hettinger52a21b82004-08-06 18:43:09 +00004162 /* XXX if _PyString_Resize() fails, 'v' has been
4163 * deallocated so it cannot be put back into 'variable'.
4164 * The MemoryError is raised when there is no value in
4165 * 'variable', which might (very remotely) be a cause
4166 * of incompatibilities.
4167 */
4168 return NULL;
4169 }
4170 /* copy 'w' into the newly allocated area of 'v' */
4171 memcpy(PyString_AS_STRING(v) + v_len,
4172 PyString_AS_STRING(w), w_len);
4173 return v;
4174 }
4175 else {
4176 /* When in-place resizing is not an option. */
4177 PyString_Concat(&v, w);
4178 return v;
4179 }
4180}
4181
Guido van Rossum950361c1997-01-24 13:49:28 +00004182#ifdef DYNAMIC_EXECUTION_PROFILE
4183
Skip Montanarof118cb12001-10-15 20:51:38 +00004184static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004185getarray(long a[256])
Guido van Rossum950361c1997-01-24 13:49:28 +00004186{
4187 int i;
4188 PyObject *l = PyList_New(256);
4189 if (l == NULL) return NULL;
4190 for (i = 0; i < 256; i++) {
4191 PyObject *x = PyInt_FromLong(a[i]);
4192 if (x == NULL) {
4193 Py_DECREF(l);
4194 return NULL;
4195 }
4196 PyList_SetItem(l, i, x);
4197 }
4198 for (i = 0; i < 256; i++)
4199 a[i] = 0;
4200 return l;
4201}
4202
4203PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004204_Py_GetDXProfile(PyObject *self, PyObject *args)
Guido van Rossum950361c1997-01-24 13:49:28 +00004205{
4206#ifndef DXPAIRS
4207 return getarray(dxp);
4208#else
4209 int i;
4210 PyObject *l = PyList_New(257);
4211 if (l == NULL) return NULL;
4212 for (i = 0; i < 257; i++) {
4213 PyObject *x = getarray(dxpairs[i]);
4214 if (x == NULL) {
4215 Py_DECREF(l);
4216 return NULL;
4217 }
4218 PyList_SetItem(l, i, x);
4219 }
4220 return l;
4221#endif
4222}
4223
4224#endif