blob: ec279bf339690a9ee668f355368b9d2bb605c869 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum3f5da241990-12-20 15:06:42 +00002/* Execute compiled code */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003
Guido van Rossum681d79a1995-07-18 14:51:37 +00004/* XXX TO DO:
Guido van Rossum681d79a1995-07-18 14:51:37 +00005 XXX speed up searching for keywords by using a dictionary
Guido van Rossum681d79a1995-07-18 14:51:37 +00006 XXX document it!
7 */
8
Thomas Wouters477c8d52006-05-27 19:21:47 +00009/* enable more aggressive intra-module optimizations, where available */
10#define PY_LOCAL_AGGRESSIVE
11
Guido van Rossumb209a111997-04-29 18:18:01 +000012#include "Python.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000013
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000014#include "code.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000015#include "frameobject.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000016#include "eval.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000017#include "opcode.h"
Tim Peters6d6c1a32001-08-02 04:15:00 +000018#include "structmember.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000019
Guido van Rossumc6004111993-11-05 10:22:19 +000020#include <ctype.h>
21
Thomas Wouters477c8d52006-05-27 19:21:47 +000022#ifndef WITH_TSC
Michael W. Hudson75eabd22005-01-18 15:56:11 +000023
24#define READ_TIMESTAMP(var)
25
26#else
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000027
28typedef unsigned long long uint64;
29
Michael W. Hudson800ba232004-08-12 18:19:17 +000030#if defined(__ppc__) /* <- Don't know if this is the correct symbol; this
Thomas Wouters8ce81f72007-09-20 18:22:40 +000031 section should work for GCC on any PowerPC
32 platform, irrespective of OS.
33 POWER? Who knows :-) */
Michael W. Hudson800ba232004-08-12 18:19:17 +000034
Michael W. Hudson75eabd22005-01-18 15:56:11 +000035#define READ_TIMESTAMP(var) ppc_getcounter(&var)
Michael W. Hudson800ba232004-08-12 18:19:17 +000036
37static void
38ppc_getcounter(uint64 *v)
39{
40 register unsigned long tbu, tb, tbu2;
41
42 loop:
43 asm volatile ("mftbu %0" : "=r" (tbu) );
44 asm volatile ("mftb %0" : "=r" (tb) );
45 asm volatile ("mftbu %0" : "=r" (tbu2));
46 if (__builtin_expect(tbu != tbu2, 0)) goto loop;
47
Thomas Wouters477c8d52006-05-27 19:21:47 +000048 /* The slightly peculiar way of writing the next lines is
Michael W. Hudson800ba232004-08-12 18:19:17 +000049 compiled better by GCC than any other way I tried. */
50 ((long*)(v))[0] = tbu;
51 ((long*)(v))[1] = tb;
52}
53
Michael W. Hudson75eabd22005-01-18 15:56:11 +000054#else /* this is for linux/x86 (and probably any other GCC/x86 combo) */
Michael W. Hudson800ba232004-08-12 18:19:17 +000055
Michael W. Hudson75eabd22005-01-18 15:56:11 +000056#define READ_TIMESTAMP(val) \
57 __asm__ __volatile__("rdtsc" : "=A" (val))
Michael W. Hudson800ba232004-08-12 18:19:17 +000058
59#endif
60
Thomas Wouters477c8d52006-05-27 19:21:47 +000061void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1,
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000062 uint64 loop0, uint64 loop1, uint64 intr0, uint64 intr1)
63{
64 uint64 intr, inst, loop;
65 PyThreadState *tstate = PyThreadState_Get();
66 if (!tstate->interp->tscdump)
67 return;
68 intr = intr1 - intr0;
69 inst = inst1 - inst0 - intr;
70 loop = loop1 - loop0 - intr;
71 fprintf(stderr, "opcode=%03d t=%d inst=%06lld loop=%06lld\n",
72 opcode, ticked, inst, loop);
73}
Michael W. Hudson800ba232004-08-12 18:19:17 +000074
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000075#endif
76
Guido van Rossum04691fc1992-08-12 15:35:34 +000077/* Turn this on if your compiler chokes on the big switch: */
Guido van Rossum1ae940a1995-01-02 19:04:15 +000078/* #define CASE_TOO_BIG 1 */
Guido van Rossum04691fc1992-08-12 15:35:34 +000079
Guido van Rossum408027e1996-12-30 16:17:54 +000080#ifdef Py_DEBUG
Guido van Rossum96a42c81992-01-12 02:29:51 +000081/* For debugging the interpreter: */
82#define LLTRACE 1 /* Low-level trace feature */
83#define CHECKEXC 1 /* Double-check exception checking */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000084#endif
85
Jeremy Hylton52820442001-01-03 23:52:36 +000086typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
Guido van Rossum5b722181993-03-30 17:46:03 +000087
Guido van Rossum374a9221991-04-04 10:40:29 +000088/* Forward declarations */
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000089#ifdef WITH_TSC
Thomas Wouters477c8d52006-05-27 19:21:47 +000090static PyObject * call_function(PyObject ***, int, uint64*, uint64*);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000091#else
Thomas Wouters477c8d52006-05-27 19:21:47 +000092static PyObject * call_function(PyObject ***, int);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000093#endif
Thomas Wouters477c8d52006-05-27 19:21:47 +000094static PyObject * fast_function(PyObject *, PyObject ***, int, int, int);
95static PyObject * do_call(PyObject *, PyObject ***, int, int);
96static PyObject * ext_do_call(PyObject *, PyObject ***, int, int, int);
Thomas Wouters8ce81f72007-09-20 18:22:40 +000097static PyObject * update_keyword_args(PyObject *, int, PyObject ***,
98 PyObject *);
Thomas Wouters477c8d52006-05-27 19:21:47 +000099static PyObject * update_star_args(int, int, PyObject *, PyObject ***);
100static PyObject * load_args(PyObject ***, int);
Jeremy Hylton52820442001-01-03 23:52:36 +0000101#define CALL_FLAG_VAR 1
102#define CALL_FLAG_KW 2
103
Guido van Rossum0a066c01992-03-27 17:29:15 +0000104#ifdef LLTRACE
Guido van Rossumc2e20742006-02-27 22:32:47 +0000105static int lltrace;
Tim Petersdbd9ba62000-07-09 03:09:57 +0000106static int prtrace(PyObject *, char *);
Guido van Rossum0a066c01992-03-27 17:29:15 +0000107#endif
Fred Drake5755ce62001-06-27 19:19:46 +0000108static int call_trace(Py_tracefunc, PyObject *, PyFrameObject *,
109 int, PyObject *);
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +0000110static int call_trace_protected(Py_tracefunc, PyObject *,
Armin Rigo1c2d7e52005-09-20 18:34:01 +0000111 PyFrameObject *, int, PyObject *);
Fred Drake5755ce62001-06-27 19:19:46 +0000112static void call_exc_trace(Py_tracefunc, PyObject *, PyFrameObject *);
Tim Peters8a5c3c72004-04-05 19:36:21 +0000113static int maybe_call_line_trace(Py_tracefunc, PyObject *,
Armin Rigobf57a142004-03-22 19:24:58 +0000114 PyFrameObject *, int *, int *, int *);
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000115
Thomas Wouters477c8d52006-05-27 19:21:47 +0000116static PyObject * cmp_outcome(int, PyObject *, PyObject *);
117static PyObject * import_from(PyObject *, PyObject *);
Thomas Wouters52152252000-08-17 22:55:00 +0000118static int import_all_from(PyObject *, PyObject *);
Neal Norwitzda059e32007-08-26 05:33:45 +0000119static void format_exc_check_arg(PyObject *, const char *, PyObject *);
Guido van Rossum98297ee2007-11-06 21:34:58 +0000120static PyObject * unicode_concatenate(PyObject *, PyObject *,
121 PyFrameObject *, unsigned char *);
Guido van Rossum374a9221991-04-04 10:40:29 +0000122
Paul Prescode68140d2000-08-30 20:25:01 +0000123#define NAME_ERROR_MSG \
Fred Drake661ea262000-10-24 19:57:45 +0000124 "name '%.200s' is not defined"
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000125#define GLOBAL_NAME_ERROR_MSG \
126 "global name '%.200s' is not defined"
Paul Prescode68140d2000-08-30 20:25:01 +0000127#define UNBOUNDLOCAL_ERROR_MSG \
Fred Drake661ea262000-10-24 19:57:45 +0000128 "local variable '%.200s' referenced before assignment"
Jeremy Hyltonc76770c2001-04-13 16:51:46 +0000129#define UNBOUNDFREE_ERROR_MSG \
130 "free variable '%.200s' referenced before assignment" \
131 " in enclosing scope"
Guido van Rossum374a9221991-04-04 10:40:29 +0000132
Guido van Rossum950361c1997-01-24 13:49:28 +0000133/* Dynamic execution profile */
134#ifdef DYNAMIC_EXECUTION_PROFILE
135#ifdef DXPAIRS
136static long dxpairs[257][256];
137#define dxp dxpairs[256]
138#else
139static long dxp[256];
140#endif
141#endif
142
Jeremy Hylton985eba52003-02-05 23:13:00 +0000143/* Function call profile */
144#ifdef CALL_PROFILE
145#define PCALL_NUM 11
146static int pcall[PCALL_NUM];
147
148#define PCALL_ALL 0
149#define PCALL_FUNCTION 1
150#define PCALL_FAST_FUNCTION 2
151#define PCALL_FASTER_FUNCTION 3
152#define PCALL_METHOD 4
153#define PCALL_BOUND_METHOD 5
154#define PCALL_CFUNCTION 6
155#define PCALL_TYPE 7
156#define PCALL_GENERATOR 8
157#define PCALL_OTHER 9
158#define PCALL_POP 10
159
160/* Notes about the statistics
161
162 PCALL_FAST stats
163
164 FAST_FUNCTION means no argument tuple needs to be created.
165 FASTER_FUNCTION means that the fast-path frame setup code is used.
166
167 If there is a method call where the call can be optimized by changing
168 the argument tuple and calling the function directly, it gets recorded
169 twice.
170
171 As a result, the relationship among the statistics appears to be
172 PCALL_ALL == PCALL_FUNCTION + PCALL_METHOD - PCALL_BOUND_METHOD +
173 PCALL_CFUNCTION + PCALL_TYPE + PCALL_GENERATOR + PCALL_OTHER
174 PCALL_FUNCTION > PCALL_FAST_FUNCTION > PCALL_FASTER_FUNCTION
175 PCALL_METHOD > PCALL_BOUND_METHOD
176*/
177
178#define PCALL(POS) pcall[POS]++
179
180PyObject *
181PyEval_GetCallStats(PyObject *self)
182{
Thomas Wouters89f507f2006-12-13 04:49:30 +0000183 return Py_BuildValue("iiiiiiiiiii",
Jeremy Hylton985eba52003-02-05 23:13:00 +0000184 pcall[0], pcall[1], pcall[2], pcall[3],
185 pcall[4], pcall[5], pcall[6], pcall[7],
Thomas Wouters89f507f2006-12-13 04:49:30 +0000186 pcall[8], pcall[9], pcall[10]);
Jeremy Hylton985eba52003-02-05 23:13:00 +0000187}
188#else
189#define PCALL(O)
190
191PyObject *
192PyEval_GetCallStats(PyObject *self)
193{
194 Py_INCREF(Py_None);
195 return Py_None;
196}
197#endif
198
Tim Peters5ca576e2001-06-18 22:08:13 +0000199
Guido van Rossume59214e1994-08-30 08:01:59 +0000200#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +0000201
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000202#ifdef HAVE_ERRNO_H
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000203#include <errno.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +0000204#endif
Guido van Rossum49b56061998-10-01 20:42:43 +0000205#include "pythread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +0000206
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000207static PyThread_type_lock interpreter_lock = 0; /* This is the GIL */
Guido van Rossuma9672091994-09-14 13:31:22 +0000208static long main_thread = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000209
Tim Peters7f468f22004-10-11 02:40:51 +0000210int
211PyEval_ThreadsInitialized(void)
212{
213 return interpreter_lock != 0;
214}
215
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000216void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000217PyEval_InitThreads(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000218{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000219 if (interpreter_lock)
Sjoerd Mullendered59d201993-01-06 13:36:38 +0000220 return;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000221 interpreter_lock = PyThread_allocate_lock();
222 PyThread_acquire_lock(interpreter_lock, 1);
223 main_thread = PyThread_get_thread_ident();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000224}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000225
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000226void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000227PyEval_AcquireLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000228{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000229 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000230}
231
232void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000233PyEval_ReleaseLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000234{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000235 PyThread_release_lock(interpreter_lock);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000236}
237
238void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000239PyEval_AcquireThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000240{
241 if (tstate == NULL)
242 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000243 /* Check someone has called PyEval_InitThreads() to create the lock */
244 assert(interpreter_lock);
Guido van Rossum65d5b571998-12-21 19:32:43 +0000245 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000246 if (PyThreadState_Swap(tstate) != NULL)
247 Py_FatalError(
248 "PyEval_AcquireThread: non-NULL old thread state");
249}
250
251void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000252PyEval_ReleaseThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000253{
254 if (tstate == NULL)
255 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
256 if (PyThreadState_Swap(NULL) != tstate)
257 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000258 PyThread_release_lock(interpreter_lock);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000259}
Guido van Rossumfee3a2d2000-08-27 17:34:07 +0000260
261/* This function is called from PyOS_AfterFork to ensure that newly
262 created child processes don't hold locks referring to threads which
263 are not running in the child process. (This could also be done using
264 pthread_atfork mechanism, at least for the pthreads implementation.) */
265
266void
267PyEval_ReInitThreads(void)
268{
269 if (!interpreter_lock)
270 return;
271 /*XXX Can't use PyThread_free_lock here because it does too
272 much error-checking. Doing this cleanly would require
273 adding a new function to each thread_*.h. Instead, just
274 create a new lock and waste a little bit of memory */
275 interpreter_lock = PyThread_allocate_lock();
276 PyThread_acquire_lock(interpreter_lock, 1);
277 main_thread = PyThread_get_thread_ident();
278}
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000279#endif
280
Guido van Rossumff4949e1992-08-05 19:58:53 +0000281/* Functions save_thread and restore_thread are always defined so
282 dynamically loaded modules needn't be compiled separately for use
283 with and without threads: */
284
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000285PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000286PyEval_SaveThread(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000287{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000288 PyThreadState *tstate = PyThreadState_Swap(NULL);
289 if (tstate == NULL)
290 Py_FatalError("PyEval_SaveThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000291#ifdef WITH_THREAD
Guido van Rossumb74eca91997-09-30 22:03:16 +0000292 if (interpreter_lock)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000293 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000294#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000295 return tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000296}
297
298void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000299PyEval_RestoreThread(PyThreadState *tstate)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000300{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000301 if (tstate == NULL)
302 Py_FatalError("PyEval_RestoreThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000303#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000304 if (interpreter_lock) {
Guido van Rossumb74eca91997-09-30 22:03:16 +0000305 int err = errno;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000306 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000307 errno = err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000308 }
309#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000310 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000311}
312
313
Guido van Rossuma9672091994-09-14 13:31:22 +0000314/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
315 signal handlers or Mac I/O completion routines) can schedule calls
316 to a function to be called synchronously.
317 The synchronous function is called with one void* argument.
318 It should return 0 for success or -1 for failure -- failure should
319 be accompanied by an exception.
320
321 If registry succeeds, the registry function returns 0; if it fails
322 (e.g. due to too many pending calls) it returns -1 (without setting
323 an exception condition).
324
325 Note that because registry may occur from within signal handlers,
326 or other asynchronous events, calling malloc() is unsafe!
327
328#ifdef WITH_THREAD
329 Any thread can schedule pending calls, but only the main thread
330 will execute them.
331#endif
332
333 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
334 There are two possible race conditions:
335 (1) nested asynchronous registry calls;
336 (2) registry calls made while pending calls are being processed.
337 While (1) is very unlikely, (2) is a real possibility.
338 The current code is safe against (2), but not against (1).
339 The safety against (2) is derived from the fact that only one
340 thread (the main thread) ever takes things out of the queue.
Guido van Rossuma9672091994-09-14 13:31:22 +0000341
Guido van Rossuma027efa1997-05-05 20:56:21 +0000342 XXX Darn! With the advent of thread state, we should have an array
343 of pending calls per thread in the thread state! Later...
344*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000345
Guido van Rossuma9672091994-09-14 13:31:22 +0000346#define NPENDINGCALLS 32
347static struct {
Thomas Wouters334fb892000-07-25 12:56:38 +0000348 int (*func)(void *);
349 void *arg;
Guido van Rossuma9672091994-09-14 13:31:22 +0000350} pendingcalls[NPENDINGCALLS];
351static volatile int pendingfirst = 0;
352static volatile int pendinglast = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000353static volatile int things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000354
355int
Thomas Wouters334fb892000-07-25 12:56:38 +0000356Py_AddPendingCall(int (*func)(void *), void *arg)
Guido van Rossuma9672091994-09-14 13:31:22 +0000357{
Michael W. Hudson30ea2f22004-07-07 17:44:12 +0000358 static volatile int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000359 int i, j;
360 /* XXX Begin critical section */
361 /* XXX If you want this to be safe against nested
362 XXX asynchronous calls, you'll have to work harder! */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000363 if (busy)
364 return -1;
365 busy = 1;
Guido van Rossuma9672091994-09-14 13:31:22 +0000366 i = pendinglast;
367 j = (i + 1) % NPENDINGCALLS;
Guido van Rossum04e70322002-07-17 16:57:13 +0000368 if (j == pendingfirst) {
369 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000370 return -1; /* Queue full */
Guido van Rossum04e70322002-07-17 16:57:13 +0000371 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000372 pendingcalls[i].func = func;
373 pendingcalls[i].arg = arg;
374 pendinglast = j;
Skip Montanarod581d772002-09-03 20:10:45 +0000375
376 _Py_Ticker = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000377 things_to_do = 1; /* Signal main loop */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000378 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000379 /* XXX End critical section */
380 return 0;
381}
382
Guido van Rossum180d7b41994-09-29 09:45:57 +0000383int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000384Py_MakePendingCalls(void)
Guido van Rossuma9672091994-09-14 13:31:22 +0000385{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000386 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000387#ifdef WITH_THREAD
Guido van Rossum65d5b571998-12-21 19:32:43 +0000388 if (main_thread && PyThread_get_thread_ident() != main_thread)
Guido van Rossuma9672091994-09-14 13:31:22 +0000389 return 0;
390#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000391 if (busy)
Guido van Rossum180d7b41994-09-29 09:45:57 +0000392 return 0;
393 busy = 1;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000394 things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000395 for (;;) {
396 int i;
Thomas Wouters334fb892000-07-25 12:56:38 +0000397 int (*func)(void *);
398 void *arg;
Guido van Rossuma9672091994-09-14 13:31:22 +0000399 i = pendingfirst;
400 if (i == pendinglast)
401 break; /* Queue empty */
402 func = pendingcalls[i].func;
403 arg = pendingcalls[i].arg;
404 pendingfirst = (i + 1) % NPENDINGCALLS;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000405 if (func(arg) < 0) {
406 busy = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000407 things_to_do = 1; /* We're not done yet */
Guido van Rossuma9672091994-09-14 13:31:22 +0000408 return -1;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000409 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000410 }
Guido van Rossum180d7b41994-09-29 09:45:57 +0000411 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000412 return 0;
413}
414
415
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000416/* The interpreter's recursion limit */
417
Hye-Shik Changb6fa2812005-04-04 15:49:02 +0000418#ifndef Py_DEFAULT_RECURSION_LIMIT
419#define Py_DEFAULT_RECURSION_LIMIT 1000
420#endif
421static int recursion_limit = Py_DEFAULT_RECURSION_LIMIT;
422int _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000423
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000424int
425Py_GetRecursionLimit(void)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000426{
427 return recursion_limit;
428}
429
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000430void
431Py_SetRecursionLimit(int new_limit)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000432{
433 recursion_limit = new_limit;
Thomas Woutersce272b62007-09-19 21:19:28 +0000434 _Py_CheckRecursionLimit = recursion_limit;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000435}
436
Armin Rigo2b3eb402003-10-28 12:05:48 +0000437/* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
438 if the recursion_depth reaches _Py_CheckRecursionLimit.
439 If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit
440 to guarantee that _Py_CheckRecursiveCall() is regularly called.
441 Without USE_STACKCHECK, there is no need for this. */
442int
443_Py_CheckRecursiveCall(char *where)
444{
445 PyThreadState *tstate = PyThreadState_GET();
446
447#ifdef USE_STACKCHECK
448 if (PyOS_CheckStack()) {
449 --tstate->recursion_depth;
450 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
451 return -1;
452 }
453#endif
Martin v. Löwis5b222132007-06-10 09:51:05 +0000454 if (tstate->recursion_critical)
455 /* Somebody asked that we don't check for recursion. */
456 return 0;
457 if (tstate->overflowed) {
458 if (tstate->recursion_depth > recursion_limit + 50) {
459 /* Overflowing while handling an overflow. Give up. */
460 Py_FatalError("Cannot recover from stack overflow.");
461 }
462 return 0;
463 }
Armin Rigo2b3eb402003-10-28 12:05:48 +0000464 if (tstate->recursion_depth > recursion_limit) {
465 --tstate->recursion_depth;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000466 tstate->overflowed = 1;
Armin Rigo2b3eb402003-10-28 12:05:48 +0000467 PyErr_Format(PyExc_RuntimeError,
468 "maximum recursion depth exceeded%s",
469 where);
470 return -1;
471 }
Thomas Woutersce272b62007-09-19 21:19:28 +0000472 _Py_CheckRecursionLimit = recursion_limit;
Armin Rigo2b3eb402003-10-28 12:05:48 +0000473 return 0;
474}
475
Guido van Rossum374a9221991-04-04 10:40:29 +0000476/* Status code for main loop (reason for stack unwind) */
Raymond Hettinger7c958652004-04-06 10:11:10 +0000477enum why_code {
478 WHY_NOT = 0x0001, /* No error */
479 WHY_EXCEPTION = 0x0002, /* Exception occurred */
480 WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */
481 WHY_RETURN = 0x0008, /* 'return' statement */
482 WHY_BREAK = 0x0010, /* 'break' statement */
483 WHY_CONTINUE = 0x0020, /* 'continue' statement */
Benjamin Petersoneec3d712008-06-11 15:59:43 +0000484 WHY_YIELD = 0x0040, /* 'yield' operator */
485 WHY_SILENCED = 0x0080 /* Exception silenced by 'with' */
Raymond Hettinger7c958652004-04-06 10:11:10 +0000486};
Guido van Rossum374a9221991-04-04 10:40:29 +0000487
Collin Winter828f04a2007-08-31 00:04:24 +0000488static enum why_code do_raise(PyObject *, PyObject *);
Guido van Rossum0368b722007-05-11 16:50:42 +0000489static int unpack_iterable(PyObject *, int, int, PyObject **);
Guido van Rossum1aa14831997-01-21 05:34:20 +0000490
Skip Montanarod581d772002-09-03 20:10:45 +0000491/* for manipulating the thread switch and periodic "stuff" - used to be
492 per thread, now just a pair o' globals */
Skip Montanaro99dba272002-09-03 20:19:06 +0000493int _Py_CheckInterval = 100;
494volatile int _Py_Ticker = 100;
Guido van Rossum374a9221991-04-04 10:40:29 +0000495
Guido van Rossumb209a111997-04-29 18:18:01 +0000496PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000497PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000498{
Tim Peters6d6c1a32001-08-02 04:15:00 +0000499 return PyEval_EvalCodeEx(co,
Guido van Rossum681d79a1995-07-18 14:51:37 +0000500 globals, locals,
Guido van Rossumb209a111997-04-29 18:18:01 +0000501 (PyObject **)NULL, 0,
502 (PyObject **)NULL, 0,
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000503 (PyObject **)NULL, 0,
Guido van Rossum4f72a782006-10-27 23:31:49 +0000504 NULL, NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000505}
506
507
508/* Interpreter main loop */
509
Martin v. Löwis8d97e332004-06-27 15:43:12 +0000510PyObject *
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000511PyEval_EvalFrame(PyFrameObject *f) {
512 /* This is for backward compatibility with extension modules that
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000513 used this API; core interpreter code should call
514 PyEval_EvalFrameEx() */
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000515 return PyEval_EvalFrameEx(f, 0);
516}
517
518PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000519PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
Guido van Rossum374a9221991-04-04 10:40:29 +0000520{
Guido van Rossum950361c1997-01-24 13:49:28 +0000521#ifdef DXPAIRS
522 int lastopcode = 0;
523#endif
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000524 register PyObject **stack_pointer; /* Next free slot in value stack */
Guido van Rossum374a9221991-04-04 10:40:29 +0000525 register unsigned char *next_instr;
Armin Rigo8817fcd2004-06-17 10:22:40 +0000526 register int opcode; /* Current opcode */
527 register int oparg; /* Current opcode argument, if any */
Raymond Hettinger7c958652004-04-06 10:11:10 +0000528 register enum why_code why; /* Reason for block stack unwind */
Guido van Rossum374a9221991-04-04 10:40:29 +0000529 register int err; /* Error status -- nonzero if error */
Guido van Rossumb209a111997-04-29 18:18:01 +0000530 register PyObject *x; /* Result object -- NULL if error */
531 register PyObject *v; /* Temporary objects popped off stack */
532 register PyObject *w;
533 register PyObject *u;
534 register PyObject *t;
Jeremy Hylton2b724da2001-01-29 22:51:52 +0000535 register PyObject **fastlocals, **freevars;
Guido van Rossum014518f1998-11-23 21:09:51 +0000536 PyObject *retval = NULL; /* Return value */
Guido van Rossum885553e1998-12-21 18:33:30 +0000537 PyThreadState *tstate = PyThreadState_GET();
Tim Peters5ca576e2001-06-18 22:08:13 +0000538 PyCodeObject *co;
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000539
Tim Peters8a5c3c72004-04-05 19:36:21 +0000540 /* when tracing we set things up so that
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000541
542 not (instr_lb <= current_bytecode_offset < instr_ub)
543
Tim Peters8a5c3c72004-04-05 19:36:21 +0000544 is true when the line being executed has changed. The
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000545 initial values are such as to make this false the first
546 time it is tested. */
Armin Rigobf57a142004-03-22 19:24:58 +0000547 int instr_ub = -1, instr_lb = 0, instr_prev = -1;
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000548
Guido van Rossumd076c731998-10-07 19:42:25 +0000549 unsigned char *first_instr;
Skip Montanaro04d80f82002-08-04 21:03:35 +0000550 PyObject *names;
551 PyObject *consts;
Neal Norwitz5f5153e2005-10-21 04:28:38 +0000552#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000553 /* Make it easier to find out where we are with a debugger */
Tim Peters5ca576e2001-06-18 22:08:13 +0000554 char *filename;
Guido van Rossum99bec951992-09-03 20:29:45 +0000555#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000556
Neal Norwitza81d2202002-07-14 00:27:26 +0000557/* Tuple access macros */
558
559#ifndef Py_DEBUG
560#define GETITEM(v, i) PyTuple_GET_ITEM((PyTupleObject *)(v), (i))
561#else
562#define GETITEM(v, i) PyTuple_GetItem((v), (i))
563#endif
564
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000565#ifdef WITH_TSC
566/* Use Pentium timestamp counter to mark certain events:
567 inst0 -- beginning of switch statement for opcode dispatch
568 inst1 -- end of switch statement (may be skipped)
569 loop0 -- the top of the mainloop
Thomas Wouters477c8d52006-05-27 19:21:47 +0000570 loop1 -- place where control returns again to top of mainloop
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000571 (may be skipped)
572 intr1 -- beginning of long interruption
573 intr2 -- end of long interruption
574
575 Many opcodes call out to helper C functions. In some cases, the
576 time in those functions should be counted towards the time for the
577 opcode, but not in all cases. For example, a CALL_FUNCTION opcode
578 calls another Python function; there's no point in charge all the
579 bytecode executed by the called function to the caller.
580
581 It's hard to make a useful judgement statically. In the presence
582 of operator overloading, it's impossible to tell if a call will
583 execute new Python code or not.
584
585 It's a case-by-case judgement. I'll use intr1 for the following
586 cases:
587
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000588 IMPORT_STAR
589 IMPORT_FROM
590 CALL_FUNCTION (and friends)
591
592 */
593 uint64 inst0, inst1, loop0, loop1, intr0 = 0, intr1 = 0;
594 int ticked = 0;
595
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000596 READ_TIMESTAMP(inst0);
597 READ_TIMESTAMP(inst1);
598 READ_TIMESTAMP(loop0);
599 READ_TIMESTAMP(loop1);
Michael W. Hudson800ba232004-08-12 18:19:17 +0000600
601 /* shut up the compiler */
602 opcode = 0;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000603#endif
604
Guido van Rossum374a9221991-04-04 10:40:29 +0000605/* Code access macros */
606
Martin v. Löwis18e16552006-02-15 17:27:45 +0000607#define INSTR_OFFSET() ((int)(next_instr - first_instr))
Guido van Rossum374a9221991-04-04 10:40:29 +0000608#define NEXTOP() (*next_instr++)
Raymond Hettinger5bed4562004-04-10 23:34:17 +0000609#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
Raymond Hettinger52a21b82004-08-06 18:43:09 +0000610#define PEEKARG() ((next_instr[2]<<8) + next_instr[1])
Guido van Rossumd076c731998-10-07 19:42:25 +0000611#define JUMPTO(x) (next_instr = first_instr + (x))
Guido van Rossum374a9221991-04-04 10:40:29 +0000612#define JUMPBY(x) (next_instr += (x))
613
Raymond Hettingerf606f872003-03-16 03:11:04 +0000614/* OpCode prediction macros
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000615 Some opcodes tend to come in pairs thus making it possible to
616 predict the second code when the first is run. For example,
617 COMPARE_OP is often followed by JUMP_IF_FALSE or JUMP_IF_TRUE. And,
618 those opcodes are often followed by a POP_TOP.
Raymond Hettingerf606f872003-03-16 03:11:04 +0000619
620 Verifying the prediction costs a single high-speed test of register
Raymond Hettingerac2072922003-03-16 15:41:11 +0000621 variable against a constant. If the pairing was good, then the
Raymond Hettingerf606f872003-03-16 03:11:04 +0000622 processor has a high likelihood of making its own successful branch
623 prediction which results in a nearly zero overhead transition to the
624 next opcode.
625
626 A successful prediction saves a trip through the eval-loop including
Christian Heimesb9eccbf2007-12-05 20:18:38 +0000627 its two unpredictable branches, the HAS_ARG test and the switch-case.
Raymond Hettingera7216982004-02-08 19:59:27 +0000628
Tim Peters8a5c3c72004-04-05 19:36:21 +0000629 If collecting opcode statistics, turn off prediction so that
630 statistics are accurately maintained (the predictions bypass
Raymond Hettingera7216982004-02-08 19:59:27 +0000631 the opcode frequency counter updates).
Raymond Hettingerf606f872003-03-16 03:11:04 +0000632*/
633
Raymond Hettingera7216982004-02-08 19:59:27 +0000634#ifdef DYNAMIC_EXECUTION_PROFILE
635#define PREDICT(op) if (0) goto PRED_##op
636#else
Raymond Hettingerac2072922003-03-16 15:41:11 +0000637#define PREDICT(op) if (*next_instr == op) goto PRED_##op
Raymond Hettingera7216982004-02-08 19:59:27 +0000638#endif
639
Raymond Hettingerf606f872003-03-16 03:11:04 +0000640#define PREDICTED(op) PRED_##op: next_instr++
Raymond Hettinger52a21b82004-08-06 18:43:09 +0000641#define PREDICTED_WITH_ARG(op) PRED_##op: oparg = PEEKARG(); next_instr += 3
Raymond Hettingerf606f872003-03-16 03:11:04 +0000642
Guido van Rossum374a9221991-04-04 10:40:29 +0000643/* Stack manipulation macros */
644
Martin v. Löwis18e16552006-02-15 17:27:45 +0000645/* The stack can grow at most MAXINT deep, as co_nlocals and
646 co_stacksize are ints. */
647#define STACK_LEVEL() ((int)(stack_pointer - f->f_valuestack))
Guido van Rossum374a9221991-04-04 10:40:29 +0000648#define EMPTY() (STACK_LEVEL() == 0)
649#define TOP() (stack_pointer[-1])
Raymond Hettinger663004b2003-01-09 15:24:30 +0000650#define SECOND() (stack_pointer[-2])
651#define THIRD() (stack_pointer[-3])
652#define FOURTH() (stack_pointer[-4])
Raymond Hettinger663004b2003-01-09 15:24:30 +0000653#define SET_TOP(v) (stack_pointer[-1] = (v))
654#define SET_SECOND(v) (stack_pointer[-2] = (v))
655#define SET_THIRD(v) (stack_pointer[-3] = (v))
656#define SET_FOURTH(v) (stack_pointer[-4] = (v))
Raymond Hettinger663004b2003-01-09 15:24:30 +0000657#define BASIC_STACKADJ(n) (stack_pointer += n)
Guido van Rossum374a9221991-04-04 10:40:29 +0000658#define BASIC_PUSH(v) (*stack_pointer++ = (v))
659#define BASIC_POP() (*--stack_pointer)
660
Guido van Rossum96a42c81992-01-12 02:29:51 +0000661#ifdef LLTRACE
Jeremy Hylton14368152001-10-17 13:29:30 +0000662#define PUSH(v) { (void)(BASIC_PUSH(v), \
663 lltrace && prtrace(TOP(), "push")); \
Thomas Wouters477c8d52006-05-27 19:21:47 +0000664 assert(STACK_LEVEL() <= co->co_stacksize); }
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000665#define POP() ((void)(lltrace && prtrace(TOP(), "pop")), \
666 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); }
Christian Heimes0449f632007-12-15 01:27:15 +0000670#define EXT_POP(STACK_POINTER) ((void)(lltrace && \
671 prtrace((STACK_POINTER)[-1], "ext_pop")), \
672 *--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +0000673#else
674#define PUSH(v) BASIC_PUSH(v)
675#define POP() BASIC_POP()
Raymond Hettinger663004b2003-01-09 15:24:30 +0000676#define STACKADJ(n) BASIC_STACKADJ(n)
Guido van Rossumc2e20742006-02-27 22:32:47 +0000677#define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +0000678#endif
679
Guido van Rossum681d79a1995-07-18 14:51:37 +0000680/* Local variable macros */
681
682#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumcfbf1a32002-03-28 20:17:52 +0000683
684/* The SETLOCAL() macro must not DECREF the local variable in-place and
685 then store the new value; it must copy the old value to a temporary
686 value, then store the new value, and then DECREF the temporary value.
687 This is because it is possible that during the DECREF the frame is
688 accessed by other code (e.g. a __del__ method or gc.collect()) and the
689 variable would be pointing to already-freed memory. */
690#define SETLOCAL(i, value) do { PyObject *tmp = GETLOCAL(i); \
691 GETLOCAL(i) = value; \
692 Py_XDECREF(tmp); } while (0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000693
Benjamin Petersoneec3d712008-06-11 15:59:43 +0000694
695#define UNWIND_BLOCK(b) \
696 while (STACK_LEVEL() > (b)->b_level) { \
697 PyObject *v = POP(); \
698 Py_XDECREF(v); \
699 }
700
701#define UNWIND_EXCEPT_HANDLER(b) \
Benjamin Peterson27d63672008-06-15 20:09:12 +0000702 { \
703 PyObject *type, *value, *traceback; \
704 assert(STACK_LEVEL() >= (b)->b_level + 3); \
705 while (STACK_LEVEL() > (b)->b_level + 3) { \
706 value = POP(); \
707 Py_XDECREF(value); \
708 } \
709 type = tstate->exc_type; \
710 value = tstate->exc_value; \
711 traceback = tstate->exc_traceback; \
712 tstate->exc_type = POP(); \
713 tstate->exc_value = POP(); \
714 tstate->exc_traceback = POP(); \
715 Py_XDECREF(type); \
716 Py_XDECREF(value); \
717 Py_XDECREF(traceback); \
718 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +0000719
720#define SAVE_EXC_STATE() \
721 { \
Benjamin Peterson27d63672008-06-15 20:09:12 +0000722 PyObject *type, *value, *traceback; \
Benjamin Petersoneec3d712008-06-11 15:59:43 +0000723 Py_XINCREF(tstate->exc_type); \
724 Py_XINCREF(tstate->exc_value); \
725 Py_XINCREF(tstate->exc_traceback); \
Benjamin Peterson27d63672008-06-15 20:09:12 +0000726 type = f->f_exc_type; \
727 value = f->f_exc_value; \
728 traceback = f->f_exc_traceback; \
Benjamin Petersoneec3d712008-06-11 15:59:43 +0000729 f->f_exc_type = tstate->exc_type; \
730 f->f_exc_value = tstate->exc_value; \
731 f->f_exc_traceback = tstate->exc_traceback; \
Benjamin Peterson27d63672008-06-15 20:09:12 +0000732 Py_XDECREF(type); \
733 Py_XDECREF(value); \
734 Py_XDECREF(traceback); \
Benjamin Petersoneec3d712008-06-11 15:59:43 +0000735 }
736
737#define SWAP_EXC_STATE() \
738 { \
739 PyObject *tmp; \
740 tmp = tstate->exc_type; \
741 tstate->exc_type = f->f_exc_type; \
742 f->f_exc_type = tmp; \
743 tmp = tstate->exc_value; \
744 tstate->exc_value = f->f_exc_value; \
745 f->f_exc_value = tmp; \
746 tmp = tstate->exc_traceback; \
747 tstate->exc_traceback = f->f_exc_traceback; \
748 f->f_exc_traceback = tmp; \
749 }
750
Guido van Rossuma027efa1997-05-05 20:56:21 +0000751/* Start of code */
752
Tim Peters5ca576e2001-06-18 22:08:13 +0000753 if (f == NULL)
754 return NULL;
755
Armin Rigo1d313ab2003-10-25 14:33:09 +0000756 /* push frame */
Armin Rigo2b3eb402003-10-28 12:05:48 +0000757 if (Py_EnterRecursiveCall(""))
Armin Rigo1d313ab2003-10-25 14:33:09 +0000758 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +0000759
Tim Peters5ca576e2001-06-18 22:08:13 +0000760 tstate->frame = f;
Tim Peters5ca576e2001-06-18 22:08:13 +0000761
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000762 if (tstate->use_tracing) {
763 if (tstate->c_tracefunc != NULL) {
764 /* tstate->c_tracefunc, if defined, is a
765 function that will be called on *every* entry
766 to a code block. Its return value, if not
767 None, is a function that will be called at
768 the start of each executed line of code.
769 (Actually, the function must return itself
770 in order to continue tracing.) The trace
771 functions are called with three arguments:
772 a pointer to the current frame, a string
773 indicating why the function is called, and
774 an argument which depends on the situation.
775 The global trace function is also called
776 whenever an exception is detected. */
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +0000777 if (call_trace_protected(tstate->c_tracefunc,
778 tstate->c_traceobj,
779 f, PyTrace_CALL, Py_None)) {
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000780 /* Trace function raised an error */
Armin Rigo2b3eb402003-10-28 12:05:48 +0000781 goto exit_eval_frame;
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000782 }
783 }
784 if (tstate->c_profilefunc != NULL) {
785 /* Similar for c_profilefunc, except it needn't
786 return itself and isn't called for "line" events */
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +0000787 if (call_trace_protected(tstate->c_profilefunc,
788 tstate->c_profileobj,
789 f, PyTrace_CALL, Py_None)) {
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000790 /* Profile function raised an error */
Armin Rigo2b3eb402003-10-28 12:05:48 +0000791 goto exit_eval_frame;
Neil Schemenauer6c0f2002001-09-04 19:03:35 +0000792 }
793 }
794 }
795
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000796 co = f->f_code;
797 names = co->co_names;
798 consts = co->co_consts;
799 fastlocals = f->f_localsplus;
Thomas Wouters477c8d52006-05-27 19:21:47 +0000800 freevars = f->f_localsplus + co->co_nlocals;
Christian Heimes72b710a2008-05-26 13:28:38 +0000801 first_instr = (unsigned char*) PyBytes_AS_STRING(co->co_code);
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000802 /* An explanation is in order for the next line.
803
804 f->f_lasti now refers to the index of the last instruction
805 executed. You might think this was obvious from the name, but
806 this wasn't always true before 2.3! PyFrame_New now sets
807 f->f_lasti to -1 (i.e. the index *before* the first instruction)
808 and YIELD_VALUE doesn't fiddle with f_lasti any more. So this
Thomas Wouters902d6eb2007-01-09 23:18:33 +0000809 does work. Promise.
810
811 When the PREDICT() macros are enabled, some opcode pairs follow in
812 direct succession without updating f->f_lasti. A successful
813 prediction effectively links the two codes together as if they
814 were a single new opcode; accordingly,f->f_lasti will point to
815 the first code in the pair (for instance, GET_ITER followed by
816 FOR_ITER is effectively a single opcode and f->f_lasti will point
817 at to the beginning of the combined pair.)
818 */
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000819 next_instr = first_instr + f->f_lasti + 1;
820 stack_pointer = f->f_stacktop;
821 assert(stack_pointer != NULL);
822 f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */
823
Benjamin Petersoneec3d712008-06-11 15:59:43 +0000824 if (f->f_code->co_flags & CO_GENERATOR) {
825 if (f->f_exc_type != NULL && f->f_exc_type != Py_None) {
826 /* We were in an except handler when we left,
827 restore the exception state which was put aside
828 (see YIELD_VALUE). */
829 SWAP_EXC_STATE();
830 }
831 else {
832 SAVE_EXC_STATE();
833 }
834 }
835
Tim Peters5ca576e2001-06-18 22:08:13 +0000836#ifdef LLTRACE
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000837 lltrace = PyDict_GetItemString(f->f_globals, "__lltrace__") != NULL;
Tim Peters5ca576e2001-06-18 22:08:13 +0000838#endif
Neal Norwitz5f5153e2005-10-21 04:28:38 +0000839#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum00bc0e02007-10-15 02:52:41 +0000840 filename = PyUnicode_AsString(co->co_filename);
Tim Peters5ca576e2001-06-18 22:08:13 +0000841#endif
Guido van Rossumac7be682001-01-17 15:42:30 +0000842
Guido van Rossum374a9221991-04-04 10:40:29 +0000843 why = WHY_NOT;
844 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000845 x = Py_None; /* Not a reference, just anything non-NULL */
Fred Drake48fba732000-10-11 13:54:07 +0000846 w = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +0000847
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000848 if (throwflag) { /* support for generator.throw() */
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000849 why = WHY_EXCEPTION;
850 goto on_error;
851 }
Thomas Wouters477c8d52006-05-27 19:21:47 +0000852
Guido van Rossum374a9221991-04-04 10:40:29 +0000853 for (;;) {
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000854#ifdef WITH_TSC
855 if (inst1 == 0) {
856 /* Almost surely, the opcode executed a break
857 or a continue, preventing inst1 from being set
858 on the way out of the loop.
859 */
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000860 READ_TIMESTAMP(inst1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000861 loop1 = inst1;
862 }
863 dump_tsc(opcode, ticked, inst0, inst1, loop0, loop1,
864 intr0, intr1);
865 ticked = 0;
866 inst1 = 0;
867 intr0 = 0;
868 intr1 = 0;
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000869 READ_TIMESTAMP(loop0);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000870#endif
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000871 assert(stack_pointer >= f->f_valuestack); /* else underflow */
Thomas Wouters477c8d52006-05-27 19:21:47 +0000872 assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000873
Guido van Rossuma027efa1997-05-05 20:56:21 +0000874 /* Do periodic things. Doing this every time through
875 the loop would add too much overhead, so we do it
876 only every Nth instruction. We also do it if
877 ``things_to_do'' is set, i.e. when an asynchronous
878 event needs attention (e.g. a signal handler or
879 async I/O handler); see Py_AddPendingCall() and
880 Py_MakePendingCalls() above. */
Guido van Rossumac7be682001-01-17 15:42:30 +0000881
Skip Montanarod581d772002-09-03 20:10:45 +0000882 if (--_Py_Ticker < 0) {
Thomas Woutersce272b62007-09-19 21:19:28 +0000883 if (*next_instr == SETUP_FINALLY) {
884 /* Make the last opcode before
885 a try: finally: block uninterruptable. */
886 goto fast_next_opcode;
887 }
Skip Montanarod581d772002-09-03 20:10:45 +0000888 _Py_Ticker = _Py_CheckInterval;
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000889 tstate->tick_counter++;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000890#ifdef WITH_TSC
891 ticked = 1;
892#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000893 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000894 if (Py_MakePendingCalls() < 0) {
895 why = WHY_EXCEPTION;
896 goto on_error;
897 }
Kurt B. Kaiser4c79a832004-11-23 18:06:08 +0000898 if (things_to_do)
899 /* MakePendingCalls() didn't succeed.
900 Force early re-execution of this
901 "periodic" code, possibly after
902 a thread switch */
903 _Py_Ticker = 0;
Guido van Rossum8861b741996-07-30 16:49:37 +0000904 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000905#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000906 if (interpreter_lock) {
907 /* Give another thread a chance */
908
Guido van Rossum25ce5661997-08-02 03:10:38 +0000909 if (PyThreadState_Swap(NULL) != tstate)
910 Py_FatalError("ceval: tstate mix-up");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000911 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000912
913 /* Other threads may run now */
914
Guido van Rossum65d5b571998-12-21 19:32:43 +0000915 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000916 if (PyThreadState_Swap(tstate) != NULL)
917 Py_FatalError("ceval: orphan tstate");
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000918
919 /* Check for thread interrupts */
920
921 if (tstate->async_exc != NULL) {
922 x = tstate->async_exc;
923 tstate->async_exc = NULL;
924 PyErr_SetNone(x);
925 Py_DECREF(x);
926 why = WHY_EXCEPTION;
927 goto on_error;
928 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000929 }
930#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000931 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000932
Neil Schemenauer63543862002-02-17 19:10:14 +0000933 fast_next_opcode:
Guido van Rossum99bec951992-09-03 20:29:45 +0000934 f->f_lasti = INSTR_OFFSET();
Guido van Rossumac7be682001-01-17 15:42:30 +0000935
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000936 /* line-by-line tracing support */
937
938 if (tstate->c_tracefunc != NULL && !tstate->tracing) {
939 /* see maybe_call_line_trace
940 for expository comments */
941 f->f_stacktop = stack_pointer;
Tim Peters8a5c3c72004-04-05 19:36:21 +0000942
Michael W. Hudson58ee2af2003-04-29 16:18:47 +0000943 err = maybe_call_line_trace(tstate->c_tracefunc,
944 tstate->c_traceobj,
Armin Rigobf57a142004-03-22 19:24:58 +0000945 f, &instr_lb, &instr_ub,
946 &instr_prev);
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000947 /* Reload possibly changed frame fields */
948 JUMPTO(f->f_lasti);
Michael W. Hudson58ee2af2003-04-29 16:18:47 +0000949 if (f->f_stacktop != NULL) {
950 stack_pointer = f->f_stacktop;
951 f->f_stacktop = NULL;
952 }
953 if (err) {
954 /* trace function raised an exception */
955 goto on_error;
956 }
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000957 }
958
959 /* Extract opcode and argument */
960
Guido van Rossum374a9221991-04-04 10:40:29 +0000961 opcode = NEXTOP();
Armin Rigo8817fcd2004-06-17 10:22:40 +0000962 oparg = 0; /* allows oparg to be stored in a register because
963 it doesn't have to be remembered across a full loop */
Raymond Hettinger5bed4562004-04-10 23:34:17 +0000964 if (HAS_ARG(opcode))
965 oparg = NEXTARG();
Fred Drakeef8ace32000-08-24 00:32:09 +0000966 dispatch_opcode:
Guido van Rossum950361c1997-01-24 13:49:28 +0000967#ifdef DYNAMIC_EXECUTION_PROFILE
968#ifdef DXPAIRS
969 dxpairs[lastopcode][opcode]++;
970 lastopcode = opcode;
971#endif
972 dxp[opcode]++;
973#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000974
Guido van Rossum96a42c81992-01-12 02:29:51 +0000975#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000976 /* Instruction tracing */
Guido van Rossumac7be682001-01-17 15:42:30 +0000977
Guido van Rossum96a42c81992-01-12 02:29:51 +0000978 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000979 if (HAS_ARG(opcode)) {
980 printf("%d: %d, %d\n",
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000981 f->f_lasti, opcode, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +0000982 }
983 else {
984 printf("%d: %d\n",
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000985 f->f_lasti, opcode);
Guido van Rossum374a9221991-04-04 10:40:29 +0000986 }
987 }
988#endif
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000989
Guido van Rossum374a9221991-04-04 10:40:29 +0000990 /* Main switch on opcode */
Michael W. Hudson75eabd22005-01-18 15:56:11 +0000991 READ_TIMESTAMP(inst0);
Jeremy Hylton52820442001-01-03 23:52:36 +0000992
Guido van Rossum374a9221991-04-04 10:40:29 +0000993 switch (opcode) {
Guido van Rossumac7be682001-01-17 15:42:30 +0000994
Guido van Rossum374a9221991-04-04 10:40:29 +0000995 /* BEWARE!
996 It is essential that any operation that fails sets either
997 x to NULL, err to nonzero, or why to anything but WHY_NOT,
998 and that no operation that succeeds does this! */
Guido van Rossumac7be682001-01-17 15:42:30 +0000999
Guido van Rossum374a9221991-04-04 10:40:29 +00001000 /* case STOP_CODE: this is an error! */
Guido van Rossumac7be682001-01-17 15:42:30 +00001001
Raymond Hettinger9c18e812004-06-21 16:31:15 +00001002 case NOP:
1003 goto fast_next_opcode;
1004
Neil Schemenauer63543862002-02-17 19:10:14 +00001005 case LOAD_FAST:
1006 x = GETLOCAL(oparg);
1007 if (x != NULL) {
1008 Py_INCREF(x);
1009 PUSH(x);
1010 goto fast_next_opcode;
1011 }
1012 format_exc_check_arg(PyExc_UnboundLocalError,
1013 UNBOUNDLOCAL_ERROR_MSG,
1014 PyTuple_GetItem(co->co_varnames, oparg));
1015 break;
1016
1017 case LOAD_CONST:
Skip Montanaro04d80f82002-08-04 21:03:35 +00001018 x = GETITEM(consts, oparg);
Neil Schemenauer63543862002-02-17 19:10:14 +00001019 Py_INCREF(x);
1020 PUSH(x);
1021 goto fast_next_opcode;
1022
Raymond Hettinger7dc52212003-03-16 20:14:44 +00001023 PREDICTED_WITH_ARG(STORE_FAST);
Neil Schemenauer63543862002-02-17 19:10:14 +00001024 case STORE_FAST:
1025 v = POP();
1026 SETLOCAL(oparg, v);
1027 goto fast_next_opcode;
1028
Raymond Hettingerf606f872003-03-16 03:11:04 +00001029 PREDICTED(POP_TOP);
Guido van Rossum374a9221991-04-04 10:40:29 +00001030 case POP_TOP:
1031 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001032 Py_DECREF(v);
Neil Schemenauer63543862002-02-17 19:10:14 +00001033 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +00001034
Guido van Rossum374a9221991-04-04 10:40:29 +00001035 case ROT_TWO:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001036 v = TOP();
1037 w = SECOND();
1038 SET_TOP(w);
1039 SET_SECOND(v);
Raymond Hettinger080cb322003-03-14 01:37:42 +00001040 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +00001041
Guido van Rossum374a9221991-04-04 10:40:29 +00001042 case ROT_THREE:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001043 v = TOP();
1044 w = SECOND();
1045 x = THIRD();
1046 SET_TOP(w);
1047 SET_SECOND(x);
1048 SET_THIRD(v);
Raymond Hettinger080cb322003-03-14 01:37:42 +00001049 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +00001050
Thomas Wouters434d0822000-08-24 20:11:32 +00001051 case ROT_FOUR:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001052 u = TOP();
1053 v = SECOND();
1054 w = THIRD();
1055 x = FOURTH();
1056 SET_TOP(v);
1057 SET_SECOND(w);
1058 SET_THIRD(x);
1059 SET_FOURTH(u);
Raymond Hettinger080cb322003-03-14 01:37:42 +00001060 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +00001061
Guido van Rossum374a9221991-04-04 10:40:29 +00001062 case DUP_TOP:
1063 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001064 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001065 PUSH(v);
Raymond Hettinger080cb322003-03-14 01:37:42 +00001066 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +00001067
Thomas Wouters434d0822000-08-24 20:11:32 +00001068 case DUP_TOPX:
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00001069 if (oparg == 2) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00001070 x = TOP();
Tim Peters35ba6892000-10-11 07:04:49 +00001071 Py_INCREF(x);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001072 w = SECOND();
Tim Peters35ba6892000-10-11 07:04:49 +00001073 Py_INCREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001074 STACKADJ(2);
1075 SET_TOP(x);
1076 SET_SECOND(w);
Raymond Hettingerf606f872003-03-16 03:11:04 +00001077 goto fast_next_opcode;
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00001078 } else if (oparg == 3) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00001079 x = TOP();
Tim Peters35ba6892000-10-11 07:04:49 +00001080 Py_INCREF(x);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001081 w = SECOND();
Tim Peters35ba6892000-10-11 07:04:49 +00001082 Py_INCREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001083 v = THIRD();
Tim Peters35ba6892000-10-11 07:04:49 +00001084 Py_INCREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001085 STACKADJ(3);
1086 SET_TOP(x);
1087 SET_SECOND(w);
1088 SET_THIRD(v);
Raymond Hettingerf606f872003-03-16 03:11:04 +00001089 goto fast_next_opcode;
Thomas Wouters434d0822000-08-24 20:11:32 +00001090 }
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00001091 Py_FatalError("invalid argument to DUP_TOPX"
1092 " (bytecode corruption?)");
Tim Peters35ba6892000-10-11 07:04:49 +00001093 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001094
Guido van Rossum374a9221991-04-04 10:40:29 +00001095 case UNARY_POSITIVE:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001096 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001097 x = PyNumber_Positive(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001098 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001099 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001100 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001101 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001102
Guido van Rossum374a9221991-04-04 10:40:29 +00001103 case UNARY_NEGATIVE:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001104 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001105 x = PyNumber_Negative(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001106 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001107 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001108 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001109 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001110
Guido van Rossum374a9221991-04-04 10:40:29 +00001111 case UNARY_NOT:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001112 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001113 err = PyObject_IsTrue(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001114 Py_DECREF(v);
Guido van Rossumfc490731997-05-06 15:06:49 +00001115 if (err == 0) {
1116 Py_INCREF(Py_True);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001117 SET_TOP(Py_True);
Guido van Rossumfc490731997-05-06 15:06:49 +00001118 continue;
1119 }
1120 else if (err > 0) {
1121 Py_INCREF(Py_False);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001122 SET_TOP(Py_False);
Guido van Rossumfc490731997-05-06 15:06:49 +00001123 err = 0;
1124 continue;
1125 }
Raymond Hettinger8bb90a52003-01-14 12:43:10 +00001126 STACKADJ(-1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001127 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001128
Guido van Rossum7928cd71991-10-24 14:59:31 +00001129 case UNARY_INVERT:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001130 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001131 x = PyNumber_Invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001132 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001133 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001134 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001135 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001136
Guido van Rossum50564e81996-01-12 01:13:16 +00001137 case BINARY_POWER:
1138 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001139 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001140 x = PyNumber_Power(v, w, Py_None);
Guido van Rossumb209a111997-04-29 18:18:01 +00001141 Py_DECREF(v);
1142 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001143 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001144 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +00001145 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001146
Guido van Rossum374a9221991-04-04 10:40:29 +00001147 case BINARY_MULTIPLY:
1148 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001149 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001150 x = PyNumber_Multiply(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001151 Py_DECREF(v);
1152 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001153 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001154 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001155 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001156
Tim Peters3caca232001-12-06 06:23:26 +00001157 case BINARY_TRUE_DIVIDE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001158 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001159 v = TOP();
Tim Peters3caca232001-12-06 06:23:26 +00001160 x = PyNumber_TrueDivide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001161 Py_DECREF(v);
1162 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001163 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001164 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001165 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001166
Guido van Rossum4668b002001-08-08 05:00:18 +00001167 case BINARY_FLOOR_DIVIDE:
1168 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001169 v = TOP();
Guido van Rossum4668b002001-08-08 05:00:18 +00001170 x = PyNumber_FloorDivide(v, w);
1171 Py_DECREF(v);
1172 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001173 SET_TOP(x);
Guido van Rossum4668b002001-08-08 05:00:18 +00001174 if (x != NULL) continue;
1175 break;
1176
Guido van Rossum374a9221991-04-04 10:40:29 +00001177 case BINARY_MODULO:
1178 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001179 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001180 x = PyNumber_Remainder(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001181 Py_DECREF(v);
1182 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001183 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001184 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001185 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001186
Guido van Rossum374a9221991-04-04 10:40:29 +00001187 case BINARY_ADD:
1188 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001189 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001190 if (PyUnicode_CheckExact(v) &&
Guido van Rossum98297ee2007-11-06 21:34:58 +00001191 PyUnicode_CheckExact(w)) {
1192 x = unicode_concatenate(v, w, f, next_instr);
1193 /* unicode_concatenate consumed the ref to v */
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001194 goto skip_decref_vx;
1195 }
Guido van Rossum87780df2001-08-23 02:58:07 +00001196 else {
Guido van Rossumc12da691997-07-17 23:12:42 +00001197 x = PyNumber_Add(v, w);
Guido van Rossum87780df2001-08-23 02:58:07 +00001198 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001199 Py_DECREF(v);
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001200 skip_decref_vx:
Guido van Rossumb209a111997-04-29 18:18:01 +00001201 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001202 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001203 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001204 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001205
Guido van Rossum374a9221991-04-04 10:40:29 +00001206 case BINARY_SUBTRACT:
1207 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001208 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001209 x = PyNumber_Subtract(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001210 Py_DECREF(v);
1211 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001212 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001213 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001214 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001215
Guido van Rossum374a9221991-04-04 10:40:29 +00001216 case BINARY_SUBSCR:
1217 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001218 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001219 x = PyObject_GetItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001220 Py_DECREF(v);
1221 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001222 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001223 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001224 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001225
Guido van Rossum7928cd71991-10-24 14:59:31 +00001226 case BINARY_LSHIFT:
1227 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001228 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001229 x = PyNumber_Lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001230 Py_DECREF(v);
1231 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001232 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001233 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001234 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001235
Guido van Rossum7928cd71991-10-24 14:59:31 +00001236 case BINARY_RSHIFT:
1237 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001238 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001239 x = PyNumber_Rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001240 Py_DECREF(v);
1241 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001242 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001243 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001244 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001245
Guido van Rossum7928cd71991-10-24 14:59:31 +00001246 case BINARY_AND:
1247 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001248 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001249 x = PyNumber_And(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001250 Py_DECREF(v);
1251 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001252 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001253 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001254 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001255
Guido van Rossum7928cd71991-10-24 14:59:31 +00001256 case BINARY_XOR:
1257 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001258 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001259 x = PyNumber_Xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001260 Py_DECREF(v);
1261 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001262 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001263 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001264 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001265
Guido van Rossum7928cd71991-10-24 14:59:31 +00001266 case BINARY_OR:
1267 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001268 v = TOP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001269 x = PyNumber_Or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001270 Py_DECREF(v);
1271 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001272 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001273 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001274 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001275
Raymond Hettingerdd80f762004-03-07 07:31:06 +00001276 case LIST_APPEND:
1277 w = POP();
1278 v = POP();
1279 err = PyList_Append(v, w);
1280 Py_DECREF(v);
1281 Py_DECREF(w);
Raymond Hettingerfba1cfc2004-03-12 16:33:17 +00001282 if (err == 0) {
1283 PREDICT(JUMP_ABSOLUTE);
1284 continue;
1285 }
Raymond Hettingerdd80f762004-03-07 07:31:06 +00001286 break;
1287
Nick Coghlan650f0d02007-04-15 12:05:43 +00001288 case SET_ADD:
1289 w = POP();
1290 v = POP();
1291 err = PySet_Add(v, w);
1292 Py_DECREF(v);
1293 Py_DECREF(w);
1294 if (err == 0) {
1295 PREDICT(JUMP_ABSOLUTE);
1296 continue;
1297 }
1298 break;
1299
Thomas Wouters434d0822000-08-24 20:11:32 +00001300 case INPLACE_POWER:
1301 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001302 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001303 x = PyNumber_InPlacePower(v, w, Py_None);
1304 Py_DECREF(v);
1305 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001306 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001307 if (x != NULL) continue;
1308 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001309
Thomas Wouters434d0822000-08-24 20:11:32 +00001310 case INPLACE_MULTIPLY:
1311 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001312 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001313 x = PyNumber_InPlaceMultiply(v, w);
1314 Py_DECREF(v);
1315 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001316 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001317 if (x != NULL) continue;
1318 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001319
Tim Peters54b11912001-12-25 18:49:11 +00001320 case INPLACE_TRUE_DIVIDE:
Thomas Wouters434d0822000-08-24 20:11:32 +00001321 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001322 v = TOP();
Tim Peters54b11912001-12-25 18:49:11 +00001323 x = PyNumber_InPlaceTrueDivide(v, w);
Thomas Wouters434d0822000-08-24 20:11:32 +00001324 Py_DECREF(v);
1325 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001326 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001327 if (x != NULL) continue;
1328 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001329
Guido van Rossum4668b002001-08-08 05:00:18 +00001330 case INPLACE_FLOOR_DIVIDE:
1331 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001332 v = TOP();
Guido van Rossum4668b002001-08-08 05:00:18 +00001333 x = PyNumber_InPlaceFloorDivide(v, w);
1334 Py_DECREF(v);
1335 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001336 SET_TOP(x);
Guido van Rossum4668b002001-08-08 05:00:18 +00001337 if (x != NULL) continue;
1338 break;
1339
Thomas Wouters434d0822000-08-24 20:11:32 +00001340 case INPLACE_MODULO:
1341 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001342 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001343 x = PyNumber_InPlaceRemainder(v, w);
1344 Py_DECREF(v);
1345 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001346 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001347 if (x != NULL) continue;
1348 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001349
Thomas Wouters434d0822000-08-24 20:11:32 +00001350 case INPLACE_ADD:
1351 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001352 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001353 if (PyUnicode_CheckExact(v) &&
Guido van Rossum98297ee2007-11-06 21:34:58 +00001354 PyUnicode_CheckExact(w)) {
1355 x = unicode_concatenate(v, w, f, next_instr);
1356 /* unicode_concatenate consumed the ref to v */
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001357 goto skip_decref_v;
1358 }
Guido van Rossum87780df2001-08-23 02:58:07 +00001359 else {
Thomas Wouters434d0822000-08-24 20:11:32 +00001360 x = PyNumber_InPlaceAdd(v, w);
Guido van Rossum87780df2001-08-23 02:58:07 +00001361 }
Thomas Wouters434d0822000-08-24 20:11:32 +00001362 Py_DECREF(v);
Raymond Hettinger52a21b82004-08-06 18:43:09 +00001363 skip_decref_v:
Thomas Wouters434d0822000-08-24 20:11:32 +00001364 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_SUBTRACT:
1370 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001371 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001372 x = PyNumber_InPlaceSubtract(v, w);
Thomas Wouters434d0822000-08-24 20:11:32 +00001373 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_LSHIFT:
1380 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001381 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001382 x = PyNumber_InPlaceLshift(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_RSHIFT:
1390 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001391 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001392 x = PyNumber_InPlaceRshift(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_AND:
1400 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001401 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001402 x = PyNumber_InPlaceAnd(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_XOR:
1410 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001411 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001412 x = PyNumber_InPlaceXor(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;
Guido van Rossumac7be682001-01-17 15:42:30 +00001418
Thomas Wouters434d0822000-08-24 20:11:32 +00001419 case INPLACE_OR:
1420 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001421 v = TOP();
Thomas Wouters434d0822000-08-24 20:11:32 +00001422 x = PyNumber_InPlaceOr(v, w);
1423 Py_DECREF(v);
1424 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001425 SET_TOP(x);
Thomas Wouters434d0822000-08-24 20:11:32 +00001426 if (x != NULL) continue;
1427 break;
1428
Guido van Rossum374a9221991-04-04 10:40:29 +00001429 case STORE_SUBSCR:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001430 w = TOP();
1431 v = SECOND();
1432 u = THIRD();
1433 STACKADJ(-3);
Guido van Rossum374a9221991-04-04 10:40:29 +00001434 /* v[w] = u */
Guido van Rossumfc490731997-05-06 15:06:49 +00001435 err = PyObject_SetItem(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001436 Py_DECREF(u);
1437 Py_DECREF(v);
1438 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001439 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001440 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001441
Guido van Rossum374a9221991-04-04 10:40:29 +00001442 case DELETE_SUBSCR:
Raymond Hettinger663004b2003-01-09 15:24:30 +00001443 w = TOP();
1444 v = SECOND();
1445 STACKADJ(-2);
Guido van Rossum374a9221991-04-04 10:40:29 +00001446 /* del v[w] */
Guido van Rossumfc490731997-05-06 15:06:49 +00001447 err = PyObject_DelItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001448 Py_DECREF(v);
1449 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001450 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001451 break;
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001452
Guido van Rossum374a9221991-04-04 10:40:29 +00001453 case PRINT_EXPR:
1454 v = POP();
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001455 w = PySys_GetObject("displayhook");
1456 if (w == NULL) {
1457 PyErr_SetString(PyExc_RuntimeError,
1458 "lost sys.displayhook");
1459 err = -1;
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001460 x = NULL;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001461 }
1462 if (err == 0) {
Raymond Hettinger8ae46892003-10-12 19:09:37 +00001463 x = PyTuple_Pack(1, v);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001464 if (x == NULL)
1465 err = -1;
1466 }
1467 if (err == 0) {
1468 w = PyEval_CallObject(w, x);
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001469 Py_XDECREF(w);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001470 if (w == NULL)
1471 err = -1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001472 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001473 Py_DECREF(v);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001474 Py_XDECREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001475 break;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001476
Thomas Wouters434d0822000-08-24 20:11:32 +00001477#ifdef CASE_TOO_BIG
1478 default: switch (opcode) {
1479#endif
Guido van Rossumf10570b1995-07-07 22:53:21 +00001480 case RAISE_VARARGS:
Collin Winter828f04a2007-08-31 00:04:24 +00001481 v = w = NULL;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001482 switch (oparg) {
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00001483 case 2:
1484 v = POP(); /* cause */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001485 case 1:
1486 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001487 case 0: /* Fallthrough */
Collin Winter828f04a2007-08-31 00:04:24 +00001488 why = do_raise(w, v);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001489 break;
1490 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001491 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001492 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001493 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001494 break;
1495 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001496 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001497
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001498 case STORE_LOCALS:
1499 x = POP();
1500 v = f->f_locals;
1501 Py_XDECREF(v);
1502 f->f_locals = x;
1503 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001504
Guido van Rossum374a9221991-04-04 10:40:29 +00001505 case RETURN_VALUE:
1506 retval = POP();
1507 why = WHY_RETURN;
Raymond Hettinger1dd83092004-02-06 18:32:33 +00001508 goto fast_block_end;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001509
Tim Peters5ca576e2001-06-18 22:08:13 +00001510 case YIELD_VALUE:
1511 retval = POP();
Tim Peters8c963692001-06-23 05:26:56 +00001512 f->f_stacktop = stack_pointer;
Tim Peters5ca576e2001-06-18 22:08:13 +00001513 why = WHY_YIELD;
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001514 /* Put aside the current exception state and restore
1515 that of the calling frame. This only serves when
1516 "yield" is used inside an except handler. */
1517 SWAP_EXC_STATE();
Raymond Hettinger1dd83092004-02-06 18:32:33 +00001518 goto fast_yield;
Tim Peters5ca576e2001-06-18 22:08:13 +00001519
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001520 case POP_EXCEPT:
1521 {
1522 PyTryBlock *b = PyFrame_BlockPop(f);
1523 if (b->b_type != EXCEPT_HANDLER) {
1524 PyErr_SetString(PyExc_SystemError,
1525 "popped block is not an except handler");
1526 why = WHY_EXCEPTION;
1527 break;
1528 }
1529 UNWIND_EXCEPT_HANDLER(b);
1530 }
1531 continue;
1532
Guido van Rossum374a9221991-04-04 10:40:29 +00001533 case POP_BLOCK:
1534 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001535 PyTryBlock *b = PyFrame_BlockPop(f);
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001536 UNWIND_BLOCK(b);
Guido van Rossum374a9221991-04-04 10:40:29 +00001537 }
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001538 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001539
Christian Heimes180510d2008-03-03 19:15:45 +00001540 PREDICTED(END_FINALLY);
Guido van Rossum374a9221991-04-04 10:40:29 +00001541 case END_FINALLY:
1542 v = POP();
Christian Heimes217cfd12007-12-02 14:31:20 +00001543 if (PyLong_Check(v)) {
1544 why = (enum why_code) PyLong_AS_LONG(v);
Tim Peters8a5c3c72004-04-05 19:36:21 +00001545 assert(why != WHY_YIELD);
Raymond Hettingerc8aa08b2004-04-11 14:59:33 +00001546 if (why == WHY_RETURN ||
1547 why == WHY_CONTINUE)
Guido van Rossum374a9221991-04-04 10:40:29 +00001548 retval = POP();
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001549 if (why == WHY_SILENCED) {
1550 /* An exception was silenced by 'with', we must
1551 manually unwind the EXCEPT_HANDLER block which was
1552 created when the exception was caught, otherwise
1553 the stack will be in an inconsistent state. */
1554 PyTryBlock *b = PyFrame_BlockPop(f);
1555 if (b->b_type != EXCEPT_HANDLER) {
1556 PyErr_SetString(PyExc_SystemError,
1557 "popped block is not an except handler");
1558 why = WHY_EXCEPTION;
1559 }
1560 else {
1561 UNWIND_EXCEPT_HANDLER(b);
1562 why = WHY_NOT;
1563 }
1564 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001565 }
Brett Cannonf74225d2007-02-26 21:10:16 +00001566 else if (PyExceptionClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001567 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001568 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001569 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001570 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001571 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001572 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001573 else if (v != Py_None) {
1574 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001575 "'finally' pops bad exception");
1576 why = WHY_EXCEPTION;
1577 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001578 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001579 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001580
Guido van Rossum52cc1d82007-03-18 15:41:51 +00001581 case LOAD_BUILD_CLASS:
1582 x = PyDict_GetItemString(f->f_builtins,
1583 "__build_class__");
1584 if (x == NULL) {
1585 PyErr_SetString(PyExc_ImportError,
1586 "__build_class__ not found");
1587 break;
1588 }
1589 Py_INCREF(x);
1590 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001591 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001592
Guido van Rossum374a9221991-04-04 10:40:29 +00001593 case STORE_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001594 w = GETITEM(names, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001595 v = POP();
Raymond Hettinger467a6982004-04-07 11:39:21 +00001596 if ((x = f->f_locals) != NULL) {
Raymond Hettinger66bd2332004-08-02 08:30:07 +00001597 if (PyDict_CheckExact(x))
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001598 err = PyDict_SetItem(x, w, v);
1599 else
1600 err = PyObject_SetItem(x, w, v);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001601 Py_DECREF(v);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001602 if (err == 0) continue;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001603 break;
1604 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001605 PyErr_Format(PyExc_SystemError,
Guido van Rossum98297ee2007-11-06 21:34:58 +00001606 "no locals found when storing %R", w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001607 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001608
Guido van Rossum374a9221991-04-04 10:40:29 +00001609 case DELETE_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001610 w = GETITEM(names, oparg);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001611 if ((x = f->f_locals) != NULL) {
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001612 if ((err = PyObject_DelItem(x, w)) != 0)
Raymond Hettinger467a6982004-04-07 11:39:21 +00001613 format_exc_check_arg(PyExc_NameError,
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001614 NAME_ERROR_MSG,
1615 w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001616 break;
1617 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001618 PyErr_Format(PyExc_SystemError,
Guido van Rossum98297ee2007-11-06 21:34:58 +00001619 "no locals when deleting %R", w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001620 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001621
Raymond Hettinger7dc52212003-03-16 20:14:44 +00001622 PREDICTED_WITH_ARG(UNPACK_SEQUENCE);
Thomas Wouters0be5aab2000-08-11 22:15:52 +00001623 case UNPACK_SEQUENCE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001624 v = POP();
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001625 if (PyTuple_CheckExact(v) &&
1626 PyTuple_GET_SIZE(v) == oparg) {
1627 PyObject **items = \
1628 ((PyTupleObject *)v)->ob_item;
Raymond Hettingerf114a3a2004-03-08 23:25:30 +00001629 while (oparg--) {
1630 w = items[oparg];
1631 Py_INCREF(w);
1632 PUSH(w);
Barry Warsawe42b18f1997-08-25 22:13:04 +00001633 }
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001634 Py_DECREF(v);
1635 continue;
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001636 } else if (PyList_CheckExact(v) &&
1637 PyList_GET_SIZE(v) == oparg) {
1638 PyObject **items = \
1639 ((PyListObject *)v)->ob_item;
Raymond Hettingerf114a3a2004-03-08 23:25:30 +00001640 while (oparg--) {
1641 w = items[oparg];
1642 Py_INCREF(w);
1643 PUSH(w);
Barry Warsawe42b18f1997-08-25 22:13:04 +00001644 }
Guido van Rossum0368b722007-05-11 16:50:42 +00001645 } else if (unpack_iterable(v, oparg, -1,
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001646 stack_pointer + oparg)) {
Tim Petersd6d010b2001-06-21 02:49:55 +00001647 stack_pointer += oparg;
Guido van Rossumd8faa362007-04-27 19:54:29 +00001648 } else {
1649 /* unpack_iterable() raised an exception */
Barry Warsawe42b18f1997-08-25 22:13:04 +00001650 why = WHY_EXCEPTION;
Tim Peters8b13b3e2001-09-30 05:58:42 +00001651 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001652 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001653 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001654
Guido van Rossum0368b722007-05-11 16:50:42 +00001655 case UNPACK_EX:
1656 {
1657 int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8);
1658 v = POP();
1659
1660 if (unpack_iterable(v, oparg & 0xFF, oparg >> 8,
1661 stack_pointer + totalargs)) {
1662 stack_pointer += totalargs;
1663 } else {
1664 why = WHY_EXCEPTION;
1665 }
1666 Py_DECREF(v);
1667 break;
1668 }
1669
Guido van Rossum374a9221991-04-04 10:40:29 +00001670 case STORE_ATTR:
Skip Montanaro496e6582002-08-06 17:47:40 +00001671 w = GETITEM(names, oparg);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001672 v = TOP();
1673 u = SECOND();
1674 STACKADJ(-2);
Guido van Rossumb209a111997-04-29 18:18:01 +00001675 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1676 Py_DECREF(v);
1677 Py_DECREF(u);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001678 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001679 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001680
Guido van Rossum374a9221991-04-04 10:40:29 +00001681 case DELETE_ATTR:
Skip Montanaro496e6582002-08-06 17:47:40 +00001682 w = GETITEM(names, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001683 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001684 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1685 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001686 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001687 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001688
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001689 case STORE_GLOBAL:
Skip Montanaro496e6582002-08-06 17:47:40 +00001690 w = GETITEM(names, oparg);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001691 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001692 err = PyDict_SetItem(f->f_globals, w, v);
1693 Py_DECREF(v);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001694 if (err == 0) continue;
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001695 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001696
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001697 case DELETE_GLOBAL:
Skip Montanaro496e6582002-08-06 17:47:40 +00001698 w = GETITEM(names, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001699 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
Paul Prescode68140d2000-08-30 20:25:01 +00001700 format_exc_check_arg(
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001701 PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001702 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001703
Guido van Rossum374a9221991-04-04 10:40:29 +00001704 case LOAD_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001705 w = GETITEM(names, oparg);
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001706 if ((v = f->f_locals) == NULL) {
Jeremy Hyltonc862cf42001-01-19 03:25:05 +00001707 PyErr_Format(PyExc_SystemError,
Guido van Rossum98297ee2007-11-06 21:34:58 +00001708 "no locals when loading %R", w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001709 break;
1710 }
Michael W. Hudsona3711f72004-08-02 14:50:43 +00001711 if (PyDict_CheckExact(v)) {
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001712 x = PyDict_GetItem(v, w);
Michael W. Hudsona3711f72004-08-02 14:50:43 +00001713 Py_XINCREF(x);
1714 }
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001715 else {
1716 x = PyObject_GetItem(v, w);
1717 if (x == NULL && PyErr_Occurred()) {
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001718 if (!PyErr_ExceptionMatches(
1719 PyExc_KeyError))
Raymond Hettinger214b1c32004-07-02 06:41:07 +00001720 break;
1721 PyErr_Clear();
1722 }
1723 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001724 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001725 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001726 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001727 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001728 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001729 format_exc_check_arg(
Guido van Rossumac7be682001-01-17 15:42:30 +00001730 PyExc_NameError,
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001731 NAME_ERROR_MSG, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001732 break;
1733 }
1734 }
Michael W. Hudsona3711f72004-08-02 14:50:43 +00001735 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001736 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001737 PUSH(x);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001738 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001739
Guido van Rossum374a9221991-04-04 10:40:29 +00001740 case LOAD_GLOBAL:
Skip Montanaro496e6582002-08-06 17:47:40 +00001741 w = GETITEM(names, oparg);
Neal Norwitzda059e32007-08-26 05:33:45 +00001742 if (PyUnicode_CheckExact(w)) {
Guido van Rossumd8dbf842002-08-19 21:17:53 +00001743 /* Inline the PyDict_GetItem() calls.
1744 WARNING: this is an extreme speed hack.
1745 Do not try this at home. */
Neal Norwitzda059e32007-08-26 05:33:45 +00001746 long hash = ((PyUnicodeObject *)w)->hash;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001747 if (hash != -1) {
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001748 PyDictObject *d;
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001749 PyDictEntry *e;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001750 d = (PyDictObject *)(f->f_globals);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001751 e = d->ma_lookup(d, w, hash);
1752 if (e == NULL) {
1753 x = NULL;
1754 break;
1755 }
1756 x = e->me_value;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001757 if (x != NULL) {
1758 Py_INCREF(x);
1759 PUSH(x);
1760 continue;
1761 }
1762 d = (PyDictObject *)(f->f_builtins);
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00001763 e = d->ma_lookup(d, w, hash);
1764 if (e == NULL) {
1765 x = NULL;
1766 break;
1767 }
1768 x = e->me_value;
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001769 if (x != NULL) {
1770 Py_INCREF(x);
1771 PUSH(x);
1772 continue;
1773 }
1774 goto load_global_error;
1775 }
1776 }
1777 /* This is the un-inlined version of the code above */
Guido van Rossumb209a111997-04-29 18:18:01 +00001778 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001779 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001780 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001781 if (x == NULL) {
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001782 load_global_error:
Paul Prescode68140d2000-08-30 20:25:01 +00001783 format_exc_check_arg(
Guido van Rossumac7be682001-01-17 15:42:30 +00001784 PyExc_NameError,
Guido van Rossum3a4dfc82002-08-19 20:24:07 +00001785 GLOBAL_NAME_ERROR_MSG, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001786 break;
1787 }
1788 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001789 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001790 PUSH(x);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001791 continue;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001792
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001793 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001794 x = GETLOCAL(oparg);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001795 if (x != NULL) {
1796 SETLOCAL(oparg, NULL);
1797 continue;
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001798 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001799 format_exc_check_arg(
1800 PyExc_UnboundLocalError,
1801 UNBOUNDLOCAL_ERROR_MSG,
1802 PyTuple_GetItem(co->co_varnames, oparg)
1803 );
1804 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001805
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001806 case LOAD_CLOSURE:
Jeremy Hylton2b724da2001-01-29 22:51:52 +00001807 x = freevars[oparg];
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001808 Py_INCREF(x);
1809 PUSH(x);
Raymond Hettinger7eddd782004-04-07 14:38:08 +00001810 if (x != NULL) continue;
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001811 break;
1812
1813 case LOAD_DEREF:
Jeremy Hylton2b724da2001-01-29 22:51:52 +00001814 x = freevars[oparg];
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001815 w = PyCell_Get(x);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001816 if (w != NULL) {
1817 PUSH(w);
1818 continue;
Jeremy Hylton2524d692001-02-05 17:23:16 +00001819 }
Raymond Hettinger467a6982004-04-07 11:39:21 +00001820 err = -1;
1821 /* Don't stomp existing exception */
1822 if (PyErr_Occurred())
1823 break;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001824 if (oparg < PyTuple_GET_SIZE(co->co_cellvars)) {
1825 v = PyTuple_GET_ITEM(co->co_cellvars,
Raymond Hettinger467a6982004-04-07 11:39:21 +00001826 oparg);
1827 format_exc_check_arg(
1828 PyExc_UnboundLocalError,
1829 UNBOUNDLOCAL_ERROR_MSG,
1830 v);
1831 } else {
Thomas Wouters8ce81f72007-09-20 18:22:40 +00001832 v = PyTuple_GET_ITEM(co->co_freevars, oparg -
1833 PyTuple_GET_SIZE(co->co_cellvars));
1834 format_exc_check_arg(PyExc_NameError,
1835 UNBOUNDFREE_ERROR_MSG, v);
Raymond Hettinger467a6982004-04-07 11:39:21 +00001836 }
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001837 break;
1838
1839 case STORE_DEREF:
1840 w = POP();
Jeremy Hylton2b724da2001-01-29 22:51:52 +00001841 x = freevars[oparg];
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001842 PyCell_Set(x, w);
Jeremy Hylton30c9f392001-03-13 01:58:22 +00001843 Py_DECREF(w);
Jeremy Hylton64949cb2001-01-25 20:06:59 +00001844 continue;
1845
Guido van Rossum374a9221991-04-04 10:40:29 +00001846 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001847 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001848 if (x != NULL) {
Raymond Hettinger5bed4562004-04-10 23:34:17 +00001849 for (; --oparg >= 0;) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001850 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001851 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001852 }
1853 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001854 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001855 }
1856 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001857
Guido van Rossum374a9221991-04-04 10:40:29 +00001858 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001859 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001860 if (x != NULL) {
Raymond Hettinger5bed4562004-04-10 23:34:17 +00001861 for (; --oparg >= 0;) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001862 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001863 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001864 }
1865 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001866 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001867 }
1868 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001869
Guido van Rossum86e58e22006-08-28 15:27:34 +00001870 case BUILD_SET:
1871 x = PySet_New(NULL);
1872 if (x != NULL) {
1873 for (; --oparg >= 0;) {
1874 w = POP();
1875 if (err == 0)
1876 err = PySet_Add(x, w);
1877 Py_DECREF(w);
1878 }
1879 if (err != 0) {
1880 Py_DECREF(x);
1881 break;
1882 }
1883 PUSH(x);
1884 continue;
1885 }
1886 break;
1887
Guido van Rossum374a9221991-04-04 10:40:29 +00001888 case BUILD_MAP:
Christian Heimes99170a52007-12-19 02:07:34 +00001889 x = _PyDict_NewPresized((Py_ssize_t)oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001890 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001891 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001892 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001893
Christian Heimes99170a52007-12-19 02:07:34 +00001894 case STORE_MAP:
1895 w = TOP(); /* key */
1896 u = SECOND(); /* value */
1897 v = THIRD(); /* dict */
1898 STACKADJ(-2);
1899 assert (PyDict_CheckExact(v));
1900 err = PyDict_SetItem(v, w, u); /* v[w] = u */
1901 Py_DECREF(u);
1902 Py_DECREF(w);
1903 if (err == 0) continue;
1904 break;
1905
Guido van Rossum374a9221991-04-04 10:40:29 +00001906 case LOAD_ATTR:
Skip Montanaro496e6582002-08-06 17:47:40 +00001907 w = GETITEM(names, oparg);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001908 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001909 x = PyObject_GetAttr(v, w);
1910 Py_DECREF(v);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001911 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001912 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001913 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001914
Guido van Rossum374a9221991-04-04 10:40:29 +00001915 case COMPARE_OP:
1916 w = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001917 v = TOP();
Martin v. Löwis3267f872007-12-04 20:34:12 +00001918 x = cmp_outcome(oparg, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001919 Py_DECREF(v);
1920 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001921 SET_TOP(x);
Raymond Hettingerf606f872003-03-16 03:11:04 +00001922 if (x == NULL) break;
1923 PREDICT(JUMP_IF_FALSE);
1924 PREDICT(JUMP_IF_TRUE);
1925 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00001926
Guido van Rossum374a9221991-04-04 10:40:29 +00001927 case IMPORT_NAME:
Skip Montanaro496e6582002-08-06 17:47:40 +00001928 w = GETITEM(names, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001929 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001930 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001931 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001932 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001933 break;
1934 }
Christian Heimesbbffeb62008-01-24 09:42:52 +00001935 Py_INCREF(x);
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001936 v = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00001937 u = TOP();
Christian Heimes217cfd12007-12-02 14:31:20 +00001938 if (PyLong_AsLong(u) != -1 || PyErr_Occurred())
Thomas Woutersf7f438b2006-02-28 16:09:29 +00001939 w = PyTuple_Pack(5,
1940 w,
1941 f->f_globals,
1942 f->f_locals == NULL ?
1943 Py_None : f->f_locals,
1944 v,
1945 u);
1946 else
1947 w = PyTuple_Pack(4,
1948 w,
1949 f->f_globals,
1950 f->f_locals == NULL ?
1951 Py_None : f->f_locals,
1952 v);
1953 Py_DECREF(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001954 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001955 if (w == NULL) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00001956 u = POP();
Christian Heimesbbffeb62008-01-24 09:42:52 +00001957 Py_DECREF(x);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001958 x = NULL;
1959 break;
1960 }
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001961 READ_TIMESTAMP(intr0);
Christian Heimesbbffeb62008-01-24 09:42:52 +00001962 v = x;
1963 x = PyEval_CallObject(v, w);
1964 Py_DECREF(v);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001965 READ_TIMESTAMP(intr1);
Guido van Rossumb209a111997-04-29 18:18:01 +00001966 Py_DECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00001967 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001968 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001969 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001970
Thomas Wouters52152252000-08-17 22:55:00 +00001971 case IMPORT_STAR:
1972 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001973 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001974 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001975 PyErr_SetString(PyExc_SystemError,
Jeremy Hyltonc862cf42001-01-19 03:25:05 +00001976 "no locals found during 'import *'");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001977 break;
1978 }
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001979 READ_TIMESTAMP(intr0);
Thomas Wouters52152252000-08-17 22:55:00 +00001980 err = import_all_from(x, v);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001981 READ_TIMESTAMP(intr1);
Guido van Rossumb209a111997-04-29 18:18:01 +00001982 PyFrame_LocalsToFast(f, 0);
Thomas Wouters52152252000-08-17 22:55:00 +00001983 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001984 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001985 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001986
Thomas Wouters52152252000-08-17 22:55:00 +00001987 case IMPORT_FROM:
Skip Montanaro496e6582002-08-06 17:47:40 +00001988 w = GETITEM(names, oparg);
Thomas Wouters52152252000-08-17 22:55:00 +00001989 v = TOP();
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001990 READ_TIMESTAMP(intr0);
Thomas Wouters52152252000-08-17 22:55:00 +00001991 x = import_from(v, w);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00001992 READ_TIMESTAMP(intr1);
Thomas Wouters52152252000-08-17 22:55:00 +00001993 PUSH(x);
1994 if (x != NULL) continue;
1995 break;
1996
Guido van Rossum374a9221991-04-04 10:40:29 +00001997 case JUMP_FORWARD:
1998 JUMPBY(oparg);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00001999 goto fast_next_opcode;
Guido van Rossumac7be682001-01-17 15:42:30 +00002000
Raymond Hettingerf606f872003-03-16 03:11:04 +00002001 PREDICTED_WITH_ARG(JUMP_IF_FALSE);
Guido van Rossum374a9221991-04-04 10:40:29 +00002002 case JUMP_IF_FALSE:
Raymond Hettinger21012b82003-02-26 18:11:50 +00002003 w = TOP();
Raymond Hettingerf606f872003-03-16 03:11:04 +00002004 if (w == Py_True) {
2005 PREDICT(POP_TOP);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00002006 goto fast_next_opcode;
Raymond Hettingerf606f872003-03-16 03:11:04 +00002007 }
Raymond Hettinger21012b82003-02-26 18:11:50 +00002008 if (w == Py_False) {
2009 JUMPBY(oparg);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00002010 goto fast_next_opcode;
Raymond Hettinger21012b82003-02-26 18:11:50 +00002011 }
2012 err = PyObject_IsTrue(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002013 if (err > 0)
2014 err = 0;
2015 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00002016 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002017 else
2018 break;
2019 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00002020
Raymond Hettingerf606f872003-03-16 03:11:04 +00002021 PREDICTED_WITH_ARG(JUMP_IF_TRUE);
Guido van Rossum374a9221991-04-04 10:40:29 +00002022 case JUMP_IF_TRUE:
Raymond Hettinger21012b82003-02-26 18:11:50 +00002023 w = TOP();
Raymond Hettingerf606f872003-03-16 03:11:04 +00002024 if (w == Py_False) {
2025 PREDICT(POP_TOP);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00002026 goto fast_next_opcode;
Raymond Hettingerf606f872003-03-16 03:11:04 +00002027 }
Raymond Hettinger21012b82003-02-26 18:11:50 +00002028 if (w == Py_True) {
2029 JUMPBY(oparg);
Neil Schemenauerc4b570f2003-06-01 19:21:12 +00002030 goto fast_next_opcode;
Raymond Hettinger21012b82003-02-26 18:11:50 +00002031 }
2032 err = PyObject_IsTrue(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002033 if (err > 0) {
2034 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00002035 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002036 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002037 else if (err == 0)
2038 ;
2039 else
2040 break;
2041 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00002042
Raymond Hettingerfba1cfc2004-03-12 16:33:17 +00002043 PREDICTED_WITH_ARG(JUMP_ABSOLUTE);
Guido van Rossum374a9221991-04-04 10:40:29 +00002044 case JUMP_ABSOLUTE:
2045 JUMPTO(oparg);
Guido van Rossum58da9312007-11-10 23:39:45 +00002046#if FAST_LOOPS
2047 /* Enabling this path speeds-up all while and for-loops by bypassing
2048 the per-loop checks for signals. By default, this should be turned-off
2049 because it prevents detection of a control-break in tight loops like
2050 "while 1: pass". Compile with this option turned-on when you need
2051 the speed-up and do not need break checking inside tight loops (ones
2052 that contain only instructions ending with goto fast_next_opcode).
2053 */
2054 goto fast_next_opcode;
2055#else
Neil Schemenauerca2a2f12003-05-30 23:59:44 +00002056 continue;
Guido van Rossum58da9312007-11-10 23:39:45 +00002057#endif
Guido van Rossumac7be682001-01-17 15:42:30 +00002058
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002059 case GET_ITER:
2060 /* before: [obj]; after [getiter(obj)] */
Raymond Hettinger663004b2003-01-09 15:24:30 +00002061 v = TOP();
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002062 x = PyObject_GetIter(v);
2063 Py_DECREF(v);
2064 if (x != NULL) {
Raymond Hettinger663004b2003-01-09 15:24:30 +00002065 SET_TOP(x);
Raymond Hettinger7dc52212003-03-16 20:14:44 +00002066 PREDICT(FOR_ITER);
Guido van Rossum213c7a62001-04-23 14:08:49 +00002067 continue;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002068 }
Raymond Hettinger8bb90a52003-01-14 12:43:10 +00002069 STACKADJ(-1);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002070 break;
2071
Raymond Hettinger7dc52212003-03-16 20:14:44 +00002072 PREDICTED_WITH_ARG(FOR_ITER);
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002073 case FOR_ITER:
2074 /* before: [iter]; after: [iter, iter()] *or* [] */
2075 v = TOP();
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00002076 x = (*v->ob_type->tp_iternext)(v);
Guido van Rossum213c7a62001-04-23 14:08:49 +00002077 if (x != NULL) {
2078 PUSH(x);
Raymond Hettinger7dc52212003-03-16 20:14:44 +00002079 PREDICT(STORE_FAST);
2080 PREDICT(UNPACK_SEQUENCE);
Guido van Rossum213c7a62001-04-23 14:08:49 +00002081 continue;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002082 }
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00002083 if (PyErr_Occurred()) {
Thomas Wouters8ce81f72007-09-20 18:22:40 +00002084 if (!PyErr_ExceptionMatches(
2085 PyExc_StopIteration))
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00002086 break;
2087 PyErr_Clear();
Guido van Rossum213c7a62001-04-23 14:08:49 +00002088 }
Raymond Hettingerdb0de9e2004-03-12 08:41:36 +00002089 /* iterator ended normally */
2090 x = v = POP();
2091 Py_DECREF(v);
2092 JUMPBY(oparg);
2093 continue;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002094
Raymond Hettinger2d783e92004-03-12 09:12:22 +00002095 case BREAK_LOOP:
2096 why = WHY_BREAK;
2097 goto fast_block_end;
2098
2099 case CONTINUE_LOOP:
Christian Heimes217cfd12007-12-02 14:31:20 +00002100 retval = PyLong_FromLong(oparg);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002101 if (!retval) {
2102 x = NULL;
2103 break;
2104 }
Raymond Hettinger2d783e92004-03-12 09:12:22 +00002105 why = WHY_CONTINUE;
2106 goto fast_block_end;
2107
Guido van Rossum374a9221991-04-04 10:40:29 +00002108 case SETUP_LOOP:
2109 case SETUP_EXCEPT:
2110 case SETUP_FINALLY:
Thomas Wouters8ce81f72007-09-20 18:22:40 +00002111 /* NOTE: If you add any new block-setup opcodes that
2112 are not try/except/finally handlers, you may need
2113 to update the PyGen_NeedsFinalizing() function.
2114 */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002115
Guido van Rossumb209a111997-04-29 18:18:01 +00002116 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002117 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002118 continue;
Guido van Rossumac7be682001-01-17 15:42:30 +00002119
Guido van Rossumc2e20742006-02-27 22:32:47 +00002120 case WITH_CLEANUP:
2121 {
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002122 /* At the top of the stack are 1-3 values indicating
2123 how/why we entered the finally clause:
2124 - TOP = None
2125 - (TOP, SECOND) = (WHY_{RETURN,CONTINUE}), retval
2126 - TOP = WHY_*; no retval below it
2127 - (TOP, SECOND, THIRD) = exc_info()
2128 Below them is EXIT, the context.__exit__ bound method.
Guido van Rossumc2e20742006-02-27 22:32:47 +00002129 In the last case, we must call
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002130 EXIT(TOP, SECOND, THIRD)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002131 otherwise we must call
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002132 EXIT(None, None, None)
2133
2134 In all cases, we remove EXIT from the stack, leaving
2135 the rest in the same order.
Guido van Rossum1a5e21e2006-02-28 21:57:43 +00002136
2137 In addition, if the stack represents an exception,
Guido van Rossumf6694362006-03-10 02:28:35 +00002138 *and* the function call returns a 'true' value, we
2139 "zap" this information, to prevent END_FINALLY from
2140 re-raising the exception. (But non-local gotos
2141 should still be resumed.)
Guido van Rossumc2e20742006-02-27 22:32:47 +00002142 */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002143
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002144 PyObject *exit_func = POP();
2145 u = TOP();
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002146 if (u == Py_None) {
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002147 v = w = Py_None;
2148 }
2149 else if (PyLong_Check(u)) {
Guido van Rossumc2e20742006-02-27 22:32:47 +00002150 u = v = w = Py_None;
2151 }
2152 else {
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002153 v = SECOND();
2154 w = THIRD();
Guido van Rossumc2e20742006-02-27 22:32:47 +00002155 }
Guido van Rossumf6694362006-03-10 02:28:35 +00002156 /* XXX Not the fastest way to call it... */
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002157 x = PyObject_CallFunctionObjArgs(exit_func, u, v, w,
2158 NULL);
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002159 Py_DECREF(exit_func);
2160 if (x == NULL)
Guido van Rossumf6694362006-03-10 02:28:35 +00002161 break; /* Go to error exit */
2162 if (u != Py_None && PyObject_IsTrue(x)) {
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002163 /* There was an exception and a True return */
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002164 STACKADJ(-2);
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002165 SET_TOP(PyLong_FromLong((long) WHY_SILENCED));
Guido van Rossumf6694362006-03-10 02:28:35 +00002166 Py_DECREF(u);
2167 Py_DECREF(v);
2168 Py_DECREF(w);
Guido van Rossumf6694362006-03-10 02:28:35 +00002169 }
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002170 Py_DECREF(x);
Christian Heimes180510d2008-03-03 19:15:45 +00002171 PREDICT(END_FINALLY);
Guido van Rossumc2e20742006-02-27 22:32:47 +00002172 break;
2173 }
2174
Guido van Rossumf10570b1995-07-07 22:53:21 +00002175 case CALL_FUNCTION:
Armin Rigo8817fcd2004-06-17 10:22:40 +00002176 {
2177 PyObject **sp;
Jeremy Hylton985eba52003-02-05 23:13:00 +00002178 PCALL(PCALL_ALL);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002179 sp = stack_pointer;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002180#ifdef WITH_TSC
Armin Rigo8817fcd2004-06-17 10:22:40 +00002181 x = call_function(&sp, oparg, &intr0, &intr1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002182#else
Armin Rigo8817fcd2004-06-17 10:22:40 +00002183 x = call_function(&sp, oparg);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002184#endif
Armin Rigo8817fcd2004-06-17 10:22:40 +00002185 stack_pointer = sp;
Jeremy Hyltone8c04322002-08-16 17:47:26 +00002186 PUSH(x);
2187 if (x != NULL)
2188 continue;
2189 break;
Armin Rigo8817fcd2004-06-17 10:22:40 +00002190 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002191
Jeremy Hylton76901512000-03-28 23:49:17 +00002192 case CALL_FUNCTION_VAR:
2193 case CALL_FUNCTION_KW:
2194 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00002195 {
Jeremy Hylton76901512000-03-28 23:49:17 +00002196 int na = oparg & 0xff;
2197 int nk = (oparg>>8) & 0xff;
2198 int flags = (opcode - CALL_FUNCTION) & 3;
Jeremy Hylton52820442001-01-03 23:52:36 +00002199 int n = na + 2 * nk;
Armin Rigo8817fcd2004-06-17 10:22:40 +00002200 PyObject **pfunc, *func, **sp;
Jeremy Hylton985eba52003-02-05 23:13:00 +00002201 PCALL(PCALL_ALL);
Jeremy Hylton52820442001-01-03 23:52:36 +00002202 if (flags & CALL_FLAG_VAR)
2203 n++;
2204 if (flags & CALL_FLAG_KW)
2205 n++;
2206 pfunc = stack_pointer - n - 1;
2207 func = *pfunc;
Jeremy Hylton52820442001-01-03 23:52:36 +00002208
Guido van Rossumac7be682001-01-17 15:42:30 +00002209 if (PyMethod_Check(func)
Jeremy Hylton52820442001-01-03 23:52:36 +00002210 && PyMethod_GET_SELF(func) != NULL) {
2211 PyObject *self = PyMethod_GET_SELF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00002212 Py_INCREF(self);
Jeremy Hylton52820442001-01-03 23:52:36 +00002213 func = PyMethod_GET_FUNCTION(func);
2214 Py_INCREF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00002215 Py_DECREF(*pfunc);
2216 *pfunc = self;
2217 na++;
2218 n++;
Guido van Rossumac7be682001-01-17 15:42:30 +00002219 } else
Jeremy Hylton52820442001-01-03 23:52:36 +00002220 Py_INCREF(func);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002221 sp = stack_pointer;
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002222 READ_TIMESTAMP(intr0);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002223 x = ext_do_call(func, &sp, flags, na, nk);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002224 READ_TIMESTAMP(intr1);
Armin Rigo8817fcd2004-06-17 10:22:40 +00002225 stack_pointer = sp;
Jeremy Hylton76901512000-03-28 23:49:17 +00002226 Py_DECREF(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00002227
Jeremy Hylton76901512000-03-28 23:49:17 +00002228 while (stack_pointer > pfunc) {
Jeremy Hylton52820442001-01-03 23:52:36 +00002229 w = POP();
2230 Py_DECREF(w);
Jeremy Hylton76901512000-03-28 23:49:17 +00002231 }
2232 PUSH(x);
Guido van Rossumac7be682001-01-17 15:42:30 +00002233 if (x != NULL)
Jeremy Hylton52820442001-01-03 23:52:36 +00002234 continue;
Jeremy Hylton76901512000-03-28 23:49:17 +00002235 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00002236 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002237
Guido van Rossum0240b922007-02-26 21:23:50 +00002238 case MAKE_CLOSURE:
Guido van Rossum681d79a1995-07-18 14:51:37 +00002239 case MAKE_FUNCTION:
Guido van Rossum4f72a782006-10-27 23:31:49 +00002240 {
2241 int posdefaults = oparg & 0xff;
2242 int kwdefaults = (oparg>>8) & 0xff;
Neal Norwitzc1505362006-12-28 06:47:50 +00002243 int num_annotations = (oparg >> 16) & 0x7fff;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002244
Guido van Rossum681d79a1995-07-18 14:51:37 +00002245 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00002246 x = PyFunction_New(v, f->f_globals);
2247 Py_DECREF(v);
Guido van Rossum0240b922007-02-26 21:23:50 +00002248
2249 if (x != NULL && opcode == MAKE_CLOSURE) {
2250 v = POP();
2251 err = PyFunction_SetClosure(x, v);
2252 Py_DECREF(v);
2253 }
Neal Norwitzc1505362006-12-28 06:47:50 +00002254
2255 if (x != NULL && num_annotations > 0) {
2256 Py_ssize_t name_ix;
2257 u = POP(); /* names of args with annotations */
2258 v = PyDict_New();
2259 if (v == NULL) {
2260 Py_DECREF(x);
2261 x = NULL;
2262 break;
2263 }
2264 name_ix = PyTuple_Size(u);
2265 assert(num_annotations == name_ix+1);
2266 while (name_ix > 0) {
2267 --name_ix;
2268 t = PyTuple_GET_ITEM(u, name_ix);
2269 w = POP();
2270 /* XXX(nnorwitz): check for errors */
2271 PyDict_SetItem(v, t, w);
2272 Py_DECREF(w);
2273 }
2274
2275 err = PyFunction_SetAnnotations(x, v);
2276 Py_DECREF(v);
2277 Py_DECREF(u);
2278 }
2279
Guido van Rossum681d79a1995-07-18 14:51:37 +00002280 /* XXX Maybe this should be a separate opcode? */
Guido van Rossum4f72a782006-10-27 23:31:49 +00002281 if (x != NULL && posdefaults > 0) {
2282 v = PyTuple_New(posdefaults);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002283 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002284 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002285 x = NULL;
2286 break;
2287 }
Guido van Rossum4f72a782006-10-27 23:31:49 +00002288 while (--posdefaults >= 0) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002289 w = POP();
Guido van Rossum4f72a782006-10-27 23:31:49 +00002290 PyTuple_SET_ITEM(v, posdefaults, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002291 }
2292 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00002293 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002294 }
Guido van Rossum4f72a782006-10-27 23:31:49 +00002295 if (x != NULL && kwdefaults > 0) {
2296 v = PyDict_New();
2297 if (v == NULL) {
2298 Py_DECREF(x);
2299 x = NULL;
2300 break;
2301 }
2302 while (--kwdefaults >= 0) {
2303 w = POP(); /* default value */
2304 u = POP(); /* kw only arg name */
Neal Norwitzc1505362006-12-28 06:47:50 +00002305 /* XXX(nnorwitz): check for errors */
Guido van Rossum4f72a782006-10-27 23:31:49 +00002306 PyDict_SetItem(v, u, w);
Georg Brandl94ab0002007-02-26 13:58:18 +00002307 Py_DECREF(w);
2308 Py_DECREF(u);
Guido van Rossum4f72a782006-10-27 23:31:49 +00002309 }
2310 err = PyFunction_SetKwDefaults(x, v);
2311 Py_DECREF(v);
2312 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002313 PUSH(x);
2314 break;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002315 }
Guido van Rossum8861b741996-07-30 16:49:37 +00002316
2317 case BUILD_SLICE:
2318 if (oparg == 3)
2319 w = POP();
2320 else
2321 w = NULL;
2322 v = POP();
Raymond Hettinger663004b2003-01-09 15:24:30 +00002323 u = TOP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00002324 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002325 Py_DECREF(u);
2326 Py_DECREF(v);
2327 Py_XDECREF(w);
Raymond Hettinger663004b2003-01-09 15:24:30 +00002328 SET_TOP(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00002329 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00002330 break;
2331
Fred Drakeef8ace32000-08-24 00:32:09 +00002332 case EXTENDED_ARG:
2333 opcode = NEXTOP();
Raymond Hettinger5bed4562004-04-10 23:34:17 +00002334 oparg = oparg<<16 | NEXTARG();
Fred Drakeef8ace32000-08-24 00:32:09 +00002335 goto dispatch_opcode;
Guido van Rossum8861b741996-07-30 16:49:37 +00002336
Guido van Rossum374a9221991-04-04 10:40:29 +00002337 default:
2338 fprintf(stderr,
2339 "XXX lineno: %d, opcode: %d\n",
Michael W. Hudsondd32a912002-08-15 14:59:02 +00002340 PyCode_Addr2Line(f->f_code, f->f_lasti),
2341 opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00002342 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00002343 why = WHY_EXCEPTION;
2344 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002345
2346#ifdef CASE_TOO_BIG
2347 }
2348#endif
2349
Guido van Rossum374a9221991-04-04 10:40:29 +00002350 } /* switch */
2351
2352 on_error:
Guido van Rossumac7be682001-01-17 15:42:30 +00002353
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002354 READ_TIMESTAMP(inst1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002355
Guido van Rossum374a9221991-04-04 10:40:29 +00002356 /* Quickly continue if no error occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002357
Guido van Rossum374a9221991-04-04 10:40:29 +00002358 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002359 if (err == 0 && x != NULL) {
2360#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002361 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00002362 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00002363 fprintf(stderr,
2364 "XXX undetected error\n");
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002365 else {
2366#endif
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002367 READ_TIMESTAMP(loop1);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002368 continue; /* Normal, fast path */
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002369#ifdef CHECKEXC
2370 }
2371#endif
Guido van Rossum681d79a1995-07-18 14:51:37 +00002372 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002373 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00002374 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00002375 err = 0;
2376 }
2377
Guido van Rossum374a9221991-04-04 10:40:29 +00002378 /* Double-check exception status */
Guido van Rossumac7be682001-01-17 15:42:30 +00002379
Raymond Hettingerc8aa08b2004-04-11 14:59:33 +00002380 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002381 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002382 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002383 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00002384 why = WHY_EXCEPTION;
2385 }
2386 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002387#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00002388 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002389 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00002390 if (PyErr_Occurred()) {
Christian Heimes412dc9c2008-01-27 18:55:54 +00002391 char buf[128];
Jeremy Hylton904ed862003-11-05 17:29:35 +00002392 sprintf(buf, "Stack unwind with exception "
2393 "set and why=%d", why);
2394 Py_FatalError(buf);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002395 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002396 }
2397#endif
2398
2399 /* Log traceback info if this is a real exception */
Guido van Rossumac7be682001-01-17 15:42:30 +00002400
Guido van Rossum374a9221991-04-04 10:40:29 +00002401 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002402 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002403
Fred Drake8f51f542001-10-04 14:48:42 +00002404 if (tstate->c_tracefunc != NULL)
2405 call_exc_trace(tstate->c_tracefunc,
2406 tstate->c_traceobj, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00002407 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002408
Guido van Rossum374a9221991-04-04 10:40:29 +00002409 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
Guido van Rossumac7be682001-01-17 15:42:30 +00002410
Guido van Rossum374a9221991-04-04 10:40:29 +00002411 if (why == WHY_RERAISE)
2412 why = WHY_EXCEPTION;
2413
2414 /* Unwind stacks if a (pseudo) exception occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002415
Raymond Hettinger1dd83092004-02-06 18:32:33 +00002416fast_block_end:
Tim Peters8a5c3c72004-04-05 19:36:21 +00002417 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002418 PyTryBlock *b = PyFrame_BlockPop(f);
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002419
Tim Peters8a5c3c72004-04-05 19:36:21 +00002420 assert(why != WHY_YIELD);
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002421 if (b->b_type == SETUP_LOOP && why == WHY_CONTINUE) {
2422 /* For a continue inside a try block,
2423 don't pop the block for the loop. */
Thomas Wouters1ee64222001-09-24 19:32:01 +00002424 PyFrame_BlockSetup(f, b->b_type, b->b_handler,
2425 b->b_level);
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002426 why = WHY_NOT;
Christian Heimes217cfd12007-12-02 14:31:20 +00002427 JUMPTO(PyLong_AS_LONG(retval));
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002428 Py_DECREF(retval);
2429 break;
2430 }
2431
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002432 if (b->b_type == EXCEPT_HANDLER) {
2433 UNWIND_EXCEPT_HANDLER(b);
2434 if (why == WHY_EXCEPTION) {
2435 Py_CLEAR(tstate->exc_type);
2436 Py_CLEAR(tstate->exc_value);
2437 Py_CLEAR(tstate->exc_traceback);
2438 }
2439 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00002440 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002441 UNWIND_BLOCK(b);
Guido van Rossum374a9221991-04-04 10:40:29 +00002442 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
2443 why = WHY_NOT;
2444 JUMPTO(b->b_handler);
2445 break;
2446 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002447 if (why == WHY_EXCEPTION && (b->b_type == SETUP_EXCEPT
2448 || b->b_type == SETUP_FINALLY)) {
2449 PyObject *exc, *val, *tb;
2450 int handler = b->b_handler;
2451 /* Beware, this invalidates all b->b_* fields */
2452 PyFrame_BlockSetup(f, EXCEPT_HANDLER, -1, STACK_LEVEL());
2453 PUSH(tstate->exc_traceback);
2454 PUSH(tstate->exc_value);
2455 if (tstate->exc_type != NULL) {
2456 PUSH(tstate->exc_type);
Guido van Rossum374a9221991-04-04 10:40:29 +00002457 }
2458 else {
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002459 Py_INCREF(Py_None);
2460 PUSH(Py_None);
Guido van Rossum374a9221991-04-04 10:40:29 +00002461 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +00002462 PyErr_Fetch(&exc, &val, &tb);
2463 /* Make the raw exception data
2464 available to the handler,
2465 so a program can emulate the
2466 Python main loop. */
2467 PyErr_NormalizeException(
2468 &exc, &val, &tb);
2469 PyException_SetTraceback(val, tb);
2470 Py_INCREF(exc);
2471 tstate->exc_type = exc;
2472 Py_INCREF(val);
2473 tstate->exc_value = val;
2474 tstate->exc_traceback = tb;
2475 if (tb == NULL)
2476 tb = Py_None;
2477 Py_INCREF(tb);
2478 PUSH(tb);
2479 PUSH(val);
2480 PUSH(exc);
2481 why = WHY_NOT;
2482 JUMPTO(handler);
2483 break;
2484 }
2485 if (b->b_type == SETUP_FINALLY) {
2486 if (why & (WHY_RETURN | WHY_CONTINUE))
2487 PUSH(retval);
2488 PUSH(PyLong_FromLong((long)why));
Guido van Rossum374a9221991-04-04 10:40:29 +00002489 why = WHY_NOT;
2490 JUMPTO(b->b_handler);
2491 break;
2492 }
2493 } /* unwind stack */
2494
2495 /* End the loop if we still have an error (or return) */
Guido van Rossumac7be682001-01-17 15:42:30 +00002496
Guido van Rossum374a9221991-04-04 10:40:29 +00002497 if (why != WHY_NOT)
2498 break;
Michael W. Hudson75eabd22005-01-18 15:56:11 +00002499 READ_TIMESTAMP(loop1);
Guido van Rossumac7be682001-01-17 15:42:30 +00002500
Guido van Rossum374a9221991-04-04 10:40:29 +00002501 } /* main loop */
Guido van Rossumac7be682001-01-17 15:42:30 +00002502
Tim Peters8a5c3c72004-04-05 19:36:21 +00002503 assert(why != WHY_YIELD);
2504 /* Pop remaining stack entries. */
2505 while (!EMPTY()) {
2506 v = POP();
2507 Py_XDECREF(v);
Guido van Rossum35974fb2001-12-06 21:28:18 +00002508 }
2509
Tim Peters8a5c3c72004-04-05 19:36:21 +00002510 if (why != WHY_RETURN)
Guido van Rossum96a42c81992-01-12 02:29:51 +00002511 retval = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +00002512
Raymond Hettinger1dd83092004-02-06 18:32:33 +00002513fast_yield:
Fred Drake9e3ad782001-07-03 23:39:52 +00002514 if (tstate->use_tracing) {
Barry Warsawe2eca0b2005-08-15 18:14:19 +00002515 if (tstate->c_tracefunc) {
2516 if (why == WHY_RETURN || why == WHY_YIELD) {
2517 if (call_trace(tstate->c_tracefunc,
2518 tstate->c_traceobj, f,
2519 PyTrace_RETURN, retval)) {
2520 Py_XDECREF(retval);
2521 retval = NULL;
2522 why = WHY_EXCEPTION;
2523 }
2524 }
2525 else if (why == WHY_EXCEPTION) {
2526 call_trace_protected(tstate->c_tracefunc,
2527 tstate->c_traceobj, f,
Armin Rigo1c2d7e52005-09-20 18:34:01 +00002528 PyTrace_RETURN, NULL);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002529 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002530 }
Fred Drake8f51f542001-10-04 14:48:42 +00002531 if (tstate->c_profilefunc) {
Fred Drake4ec5d562001-10-04 19:26:43 +00002532 if (why == WHY_EXCEPTION)
2533 call_trace_protected(tstate->c_profilefunc,
2534 tstate->c_profileobj, f,
Armin Rigo1c2d7e52005-09-20 18:34:01 +00002535 PyTrace_RETURN, NULL);
Fred Drake4ec5d562001-10-04 19:26:43 +00002536 else if (call_trace(tstate->c_profilefunc,
2537 tstate->c_profileobj, f,
2538 PyTrace_RETURN, retval)) {
Fred Drake9e3ad782001-07-03 23:39:52 +00002539 Py_XDECREF(retval);
2540 retval = NULL;
2541 why = WHY_EXCEPTION;
2542 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002543 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002544 }
Guido van Rossuma4240131997-01-21 21:18:36 +00002545
Tim Peters5ca576e2001-06-18 22:08:13 +00002546 /* pop frame */
Thomas Woutersce272b62007-09-19 21:19:28 +00002547exit_eval_frame:
Armin Rigo2b3eb402003-10-28 12:05:48 +00002548 Py_LeaveRecursiveCall();
Guido van Rossuma027efa1997-05-05 20:56:21 +00002549 tstate->frame = f->f_back;
Guido van Rossumac7be682001-01-17 15:42:30 +00002550
Guido van Rossum96a42c81992-01-12 02:29:51 +00002551 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00002552}
2553
Guido van Rossumc2e20742006-02-27 22:32:47 +00002554/* This is gonna seem *real weird*, but if you put some other code between
Martin v. Löwis8d97e332004-06-27 15:43:12 +00002555 PyEval_EvalFrame() and PyEval_EvalCodeEx() you will need to adjust
Guido van Rossumc2e20742006-02-27 22:32:47 +00002556 the test in the if statements in Misc/gdbinit (pystack and pystackv). */
Skip Montanaro786ea6b2004-03-01 15:44:05 +00002557
Tim Peters6d6c1a32001-08-02 04:15:00 +00002558PyObject *
2559PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals,
Tim Peters5ca576e2001-06-18 22:08:13 +00002560 PyObject **args, int argcount, PyObject **kws, int kwcount,
Guido van Rossum4f72a782006-10-27 23:31:49 +00002561 PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure)
Tim Peters5ca576e2001-06-18 22:08:13 +00002562{
2563 register PyFrameObject *f;
2564 register PyObject *retval = NULL;
2565 register PyObject **fastlocals, **freevars;
2566 PyThreadState *tstate = PyThreadState_GET();
2567 PyObject *x, *u;
2568
2569 if (globals == NULL) {
Tim Peters8a5c3c72004-04-05 19:36:21 +00002570 PyErr_SetString(PyExc_SystemError,
Jeremy Hylton910d7d42001-08-12 21:52:24 +00002571 "PyEval_EvalCodeEx: NULL globals");
Tim Peters5ca576e2001-06-18 22:08:13 +00002572 return NULL;
2573 }
2574
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00002575 assert(tstate != NULL);
Jeremy Hylton985eba52003-02-05 23:13:00 +00002576 assert(globals != NULL);
2577 f = PyFrame_New(tstate, co, globals, locals);
Tim Peters5ca576e2001-06-18 22:08:13 +00002578 if (f == NULL)
2579 return NULL;
2580
2581 fastlocals = f->f_localsplus;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002582 freevars = f->f_localsplus + co->co_nlocals;
Tim Peters5ca576e2001-06-18 22:08:13 +00002583
2584 if (co->co_argcount > 0 ||
Guido van Rossum4f72a782006-10-27 23:31:49 +00002585 co->co_kwonlyargcount > 0 ||
Tim Peters5ca576e2001-06-18 22:08:13 +00002586 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
2587 int i;
2588 int n = argcount;
2589 PyObject *kwdict = NULL;
2590 if (co->co_flags & CO_VARKEYWORDS) {
2591 kwdict = PyDict_New();
2592 if (kwdict == NULL)
2593 goto fail;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002594 i = co->co_argcount + co->co_kwonlyargcount;
Tim Peters5ca576e2001-06-18 22:08:13 +00002595 if (co->co_flags & CO_VARARGS)
2596 i++;
2597 SETLOCAL(i, kwdict);
2598 }
2599 if (argcount > co->co_argcount) {
2600 if (!(co->co_flags & CO_VARARGS)) {
2601 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002602 "%U() takes %s %d "
Guido van Rossum4f72a782006-10-27 23:31:49 +00002603 "%spositional argument%s (%d given)",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002604 co->co_name,
Tim Peters5ca576e2001-06-18 22:08:13 +00002605 defcount ? "at most" : "exactly",
2606 co->co_argcount,
2607 kwcount ? "non-keyword " : "",
2608 co->co_argcount == 1 ? "" : "s",
2609 argcount);
2610 goto fail;
2611 }
2612 n = co->co_argcount;
2613 }
2614 for (i = 0; i < n; i++) {
2615 x = args[i];
2616 Py_INCREF(x);
2617 SETLOCAL(i, x);
2618 }
2619 if (co->co_flags & CO_VARARGS) {
2620 u = PyTuple_New(argcount - n);
2621 if (u == NULL)
2622 goto fail;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002623 SETLOCAL(co->co_argcount + co->co_kwonlyargcount, u);
Tim Peters5ca576e2001-06-18 22:08:13 +00002624 for (i = n; i < argcount; i++) {
2625 x = args[i];
2626 Py_INCREF(x);
2627 PyTuple_SET_ITEM(u, i-n, x);
2628 }
2629 }
2630 for (i = 0; i < kwcount; i++) {
2631 PyObject *keyword = kws[2*i];
2632 PyObject *value = kws[2*i + 1];
2633 int j;
Neal Norwitzda059e32007-08-26 05:33:45 +00002634 if (keyword == NULL || !PyUnicode_Check(keyword)) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002635 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002636 "%U() keywords must be strings",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002637 co->co_name);
Tim Peters5ca576e2001-06-18 22:08:13 +00002638 goto fail;
2639 }
2640 /* XXX slow -- speed up using dictionary? */
Guido van Rossum4f72a782006-10-27 23:31:49 +00002641 for (j = 0;
2642 j < co->co_argcount + co->co_kwonlyargcount;
2643 j++) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002644 PyObject *nm = PyTuple_GET_ITEM(
2645 co->co_varnames, j);
2646 int cmp = PyObject_RichCompareBool(
2647 keyword, nm, Py_EQ);
2648 if (cmp > 0)
2649 break;
2650 else if (cmp < 0)
2651 goto fail;
2652 }
2653 /* Check errors from Compare */
2654 if (PyErr_Occurred())
2655 goto fail;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002656 if (j >= co->co_argcount + co->co_kwonlyargcount) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002657 if (kwdict == NULL) {
2658 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002659 "%U() got an unexpected "
Walter Dörwald573c08c2007-05-25 15:46:59 +00002660 "keyword argument '%S'",
2661 co->co_name,
2662 keyword);
Tim Peters5ca576e2001-06-18 22:08:13 +00002663 goto fail;
2664 }
2665 PyDict_SetItem(kwdict, keyword, value);
2666 }
2667 else {
2668 if (GETLOCAL(j) != NULL) {
2669 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002670 "%U() got multiple "
Tim Peters5ca576e2001-06-18 22:08:13 +00002671 "values for keyword "
Walter Dörwald573c08c2007-05-25 15:46:59 +00002672 "argument '%S'",
2673 co->co_name,
2674 keyword);
Tim Peters5ca576e2001-06-18 22:08:13 +00002675 goto fail;
2676 }
2677 Py_INCREF(value);
2678 SETLOCAL(j, value);
2679 }
2680 }
Guido van Rossum4f72a782006-10-27 23:31:49 +00002681 if (co->co_kwonlyargcount > 0) {
2682 for (i = co->co_argcount;
2683 i < co->co_argcount + co->co_kwonlyargcount;
2684 i++) {
Guido van Rossum29602e42006-11-22 04:45:33 +00002685 PyObject *name, *def;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002686 if (GETLOCAL(i) != NULL)
2687 continue;
Guido van Rossum29602e42006-11-22 04:45:33 +00002688 name = PyTuple_GET_ITEM(co->co_varnames, i);
2689 def = NULL;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002690 if (kwdefs != NULL)
2691 def = PyDict_GetItem(kwdefs, name);
2692 if (def != NULL) {
2693 Py_INCREF(def);
2694 SETLOCAL(i, def);
2695 continue;
2696 }
2697 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002698 "%U() needs keyword-only argument %S",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002699 co->co_name, name);
Guido van Rossum4f72a782006-10-27 23:31:49 +00002700 goto fail;
2701 }
2702 }
Tim Peters5ca576e2001-06-18 22:08:13 +00002703 if (argcount < co->co_argcount) {
2704 int m = co->co_argcount - defcount;
2705 for (i = argcount; i < m; i++) {
2706 if (GETLOCAL(i) == NULL) {
2707 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002708 "%U() takes %s %d "
Guido van Rossum4f72a782006-10-27 23:31:49 +00002709 "%spositional argument%s "
2710 "(%d given)",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002711 co->co_name,
Tim Peters5ca576e2001-06-18 22:08:13 +00002712 ((co->co_flags & CO_VARARGS) ||
2713 defcount) ? "at least"
2714 : "exactly",
2715 m, kwcount ? "non-keyword " : "",
2716 m == 1 ? "" : "s", i);
2717 goto fail;
2718 }
2719 }
2720 if (n > m)
2721 i = n - m;
2722 else
2723 i = 0;
2724 for (; i < defcount; i++) {
2725 if (GETLOCAL(m+i) == NULL) {
2726 PyObject *def = defs[i];
2727 Py_INCREF(def);
2728 SETLOCAL(m+i, def);
2729 }
2730 }
2731 }
2732 }
2733 else {
2734 if (argcount > 0 || kwcount > 0) {
2735 PyErr_Format(PyExc_TypeError,
Guido van Rossum00bc0e02007-10-15 02:52:41 +00002736 "%U() takes no arguments (%d given)",
Walter Dörwald573c08c2007-05-25 15:46:59 +00002737 co->co_name,
Tim Peters5ca576e2001-06-18 22:08:13 +00002738 argcount + kwcount);
2739 goto fail;
2740 }
2741 }
2742 /* Allocate and initialize storage for cell vars, and copy free
2743 vars into frame. This isn't too efficient right now. */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002744 if (PyTuple_GET_SIZE(co->co_cellvars)) {
Thomas Wouters0e3f5912006-08-11 14:57:12 +00002745 int i, j, nargs, found;
Martin v. Löwis5b222132007-06-10 09:51:05 +00002746 Py_UNICODE *cellname, *argname;
Tim Peters5ca576e2001-06-18 22:08:13 +00002747 PyObject *c;
2748
Amaury Forgeot d'Arce670bd42007-11-24 00:29:24 +00002749 nargs = co->co_argcount + co->co_kwonlyargcount;
Tim Peters5ca576e2001-06-18 22:08:13 +00002750 if (co->co_flags & CO_VARARGS)
2751 nargs++;
2752 if (co->co_flags & CO_VARKEYWORDS)
2753 nargs++;
2754
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002755 /* Initialize each cell var, taking into account
2756 cell vars that are initialized from arguments.
2757
2758 Should arrange for the compiler to put cellvars
2759 that are arguments at the beginning of the cellvars
2760 list so that we can march over it more efficiently?
2761 */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002762 for (i = 0; i < PyTuple_GET_SIZE(co->co_cellvars); ++i) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002763 cellname = PyUnicode_AS_UNICODE(
Tim Peters5ca576e2001-06-18 22:08:13 +00002764 PyTuple_GET_ITEM(co->co_cellvars, i));
2765 found = 0;
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00002766 for (j = 0; j < nargs; j++) {
Martin v. Löwis5b222132007-06-10 09:51:05 +00002767 argname = PyUnicode_AS_UNICODE(
Tim Peters5ca576e2001-06-18 22:08:13 +00002768 PyTuple_GET_ITEM(co->co_varnames, j));
Martin v. Löwis5b222132007-06-10 09:51:05 +00002769 if (Py_UNICODE_strcmp(cellname, argname) == 0) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002770 c = PyCell_New(GETLOCAL(j));
2771 if (c == NULL)
2772 goto fail;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002773 GETLOCAL(co->co_nlocals + i) = c;
Tim Peters5ca576e2001-06-18 22:08:13 +00002774 found = 1;
2775 break;
2776 }
Tim Peters5ca576e2001-06-18 22:08:13 +00002777 }
2778 if (found == 0) {
2779 c = PyCell_New(NULL);
2780 if (c == NULL)
2781 goto fail;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002782 SETLOCAL(co->co_nlocals + i, c);
Tim Peters5ca576e2001-06-18 22:08:13 +00002783 }
2784 }
Tim Peters5ca576e2001-06-18 22:08:13 +00002785 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002786 if (PyTuple_GET_SIZE(co->co_freevars)) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002787 int i;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002788 for (i = 0; i < PyTuple_GET_SIZE(co->co_freevars); ++i) {
Tim Peters5ca576e2001-06-18 22:08:13 +00002789 PyObject *o = PyTuple_GET_ITEM(closure, i);
2790 Py_INCREF(o);
Thomas Wouters477c8d52006-05-27 19:21:47 +00002791 freevars[PyTuple_GET_SIZE(co->co_cellvars) + i] = o;
Tim Peters5ca576e2001-06-18 22:08:13 +00002792 }
2793 }
2794
Tim Peters5ca576e2001-06-18 22:08:13 +00002795 if (co->co_flags & CO_GENERATOR) {
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00002796 /* Don't need to keep the reference to f_back, it will be set
2797 * when the generator is resumed. */
Tim Peters5ba58662001-07-16 02:29:45 +00002798 Py_XDECREF(f->f_back);
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00002799 f->f_back = NULL;
2800
Jeremy Hylton985eba52003-02-05 23:13:00 +00002801 PCALL(PCALL_GENERATOR);
2802
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00002803 /* Create a new generator that owns the ready to run frame
2804 * and return that as the value. */
Martin v. Löwise440e472004-06-01 15:22:42 +00002805 return PyGen_New(f);
Tim Peters5ca576e2001-06-18 22:08:13 +00002806 }
2807
Thomas Woutersce272b62007-09-19 21:19:28 +00002808 retval = PyEval_EvalFrameEx(f,0);
Tim Peters5ca576e2001-06-18 22:08:13 +00002809
Thomas Woutersce272b62007-09-19 21:19:28 +00002810fail: /* Jump here from prelude on failure */
Tim Peters5ca576e2001-06-18 22:08:13 +00002811
Tim Petersb13680b2001-11-27 23:29:29 +00002812 /* decref'ing the frame can cause __del__ methods to get invoked,
2813 which can call back into Python. While we're done with the
2814 current Python frame (f), the associated C stack is still in use,
2815 so recursion_depth must be boosted for the duration.
2816 */
2817 assert(tstate != NULL);
2818 ++tstate->recursion_depth;
Thomas Woutersce272b62007-09-19 21:19:28 +00002819 Py_DECREF(f);
Tim Petersb13680b2001-11-27 23:29:29 +00002820 --tstate->recursion_depth;
Tim Peters5ca576e2001-06-18 22:08:13 +00002821 return retval;
2822}
2823
2824
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002825/* Logic for the raise statement (too complicated for inlining).
2826 This *consumes* a reference count to each of its arguments. */
Raymond Hettinger7c958652004-04-06 10:11:10 +00002827static enum why_code
Collin Winter828f04a2007-08-31 00:04:24 +00002828do_raise(PyObject *exc, PyObject *cause)
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002829{
Guido van Rossumb4fb6e42008-06-14 20:20:24 +00002830 PyObject *type = NULL, *value = NULL;
Collin Winter828f04a2007-08-31 00:04:24 +00002831
2832 if (exc == NULL) {
Guido van Rossumd295f121998-04-09 21:39:57 +00002833 /* Reraise */
Nicholas Bastine5662ae2004-03-24 22:22:12 +00002834 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossumb4fb6e42008-06-14 20:20:24 +00002835 PyObject *tb;
Collin Winter828f04a2007-08-31 00:04:24 +00002836 type = tstate->exc_type;
Guido van Rossumd295f121998-04-09 21:39:57 +00002837 value = tstate->exc_value;
2838 tb = tstate->exc_traceback;
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002839 if (type == Py_None) {
2840 PyErr_SetString(PyExc_RuntimeError,
2841 "No active exception to reraise");
2842 return WHY_EXCEPTION;
2843 }
2844 Py_XINCREF(type);
Guido van Rossumd295f121998-04-09 21:39:57 +00002845 Py_XINCREF(value);
2846 Py_XINCREF(tb);
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002847 PyErr_Restore(type, value, tb);
2848 return WHY_RERAISE;
Guido van Rossumd295f121998-04-09 21:39:57 +00002849 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002850
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002851 /* We support the following forms of raise:
Collin Winter828f04a2007-08-31 00:04:24 +00002852 raise
2853 raise <instance>
2854 raise <type> */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002855
Collin Winter828f04a2007-08-31 00:04:24 +00002856 if (PyExceptionClass_Check(exc)) {
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002857 type = exc;
2858 value = PyObject_CallObject(exc, NULL);
Collin Winter828f04a2007-08-31 00:04:24 +00002859 if (value == NULL)
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002860 goto raise_error;
2861 }
Collin Winter828f04a2007-08-31 00:04:24 +00002862 else if (PyExceptionInstance_Check(exc)) {
2863 value = exc;
2864 type = PyExceptionInstance_Class(exc);
Guido van Rossumb209a111997-04-29 18:18:01 +00002865 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002866 }
2867 else {
2868 /* Not something you can raise. You get an exception
2869 anyway, just not what you specified :-) */
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002870 Py_DECREF(exc);
Guido van Rossum45aecf42006-03-15 04:58:47 +00002871 PyErr_SetString(PyExc_TypeError,
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002872 "exceptions must derive from BaseException");
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002873 goto raise_error;
2874 }
Collin Winter828f04a2007-08-31 00:04:24 +00002875
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00002876 if (cause) {
2877 PyObject *fixed_cause;
2878 if (PyExceptionClass_Check(cause)) {
2879 fixed_cause = PyObject_CallObject(cause, NULL);
2880 if (fixed_cause == NULL)
2881 goto raise_error;
2882 Py_DECREF(cause);
2883 }
2884 else if (PyExceptionInstance_Check(cause)) {
2885 fixed_cause = cause;
2886 }
2887 else {
2888 PyErr_SetString(PyExc_TypeError,
2889 "exception causes must derive from "
2890 "BaseException");
2891 goto raise_error;
2892 }
2893 PyException_SetCause(value, fixed_cause);
2894 }
Collin Winter828f04a2007-08-31 00:04:24 +00002895
Guido van Rossumb4fb6e42008-06-14 20:20:24 +00002896 PyErr_SetObject(type, value);
2897 /* PyErr_SetObject incref's its arguments */
2898 Py_XDECREF(value);
2899 Py_XDECREF(type);
Collin Winter828f04a2007-08-31 00:04:24 +00002900 return WHY_EXCEPTION;
2901
2902raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002903 Py_XDECREF(value);
2904 Py_XDECREF(type);
Collin Winter1966f1c2007-09-01 20:26:44 +00002905 Py_XDECREF(cause);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002906 return WHY_EXCEPTION;
2907}
2908
Tim Petersd6d010b2001-06-21 02:49:55 +00002909/* Iterate v argcnt times and store the results on the stack (via decreasing
Guido van Rossum0368b722007-05-11 16:50:42 +00002910 sp). Return 1 for success, 0 if error.
2911
2912 If argcntafter == -1, do a simple unpack. If it is >= 0, do an unpack
2913 with a variable target.
2914*/
Tim Petersd6d010b2001-06-21 02:49:55 +00002915
Barry Warsawe42b18f1997-08-25 22:13:04 +00002916static int
Guido van Rossum0368b722007-05-11 16:50:42 +00002917unpack_iterable(PyObject *v, int argcnt, int argcntafter, PyObject **sp)
Barry Warsawe42b18f1997-08-25 22:13:04 +00002918{
Guido van Rossum0368b722007-05-11 16:50:42 +00002919 int i = 0, j = 0;
2920 Py_ssize_t ll = 0;
Tim Petersd6d010b2001-06-21 02:49:55 +00002921 PyObject *it; /* iter(v) */
Barry Warsawe42b18f1997-08-25 22:13:04 +00002922 PyObject *w;
Guido van Rossum0368b722007-05-11 16:50:42 +00002923 PyObject *l = NULL; /* variable list */
Guido van Rossumac7be682001-01-17 15:42:30 +00002924
Tim Petersd6d010b2001-06-21 02:49:55 +00002925 assert(v != NULL);
2926
2927 it = PyObject_GetIter(v);
2928 if (it == NULL)
2929 goto Error;
2930
2931 for (; i < argcnt; i++) {
2932 w = PyIter_Next(it);
2933 if (w == NULL) {
2934 /* Iterator done, via error or exhaustion. */
2935 if (!PyErr_Occurred()) {
2936 PyErr_Format(PyExc_ValueError,
2937 "need more than %d value%s to unpack",
2938 i, i == 1 ? "" : "s");
2939 }
2940 goto Error;
Barry Warsawe42b18f1997-08-25 22:13:04 +00002941 }
2942 *--sp = w;
2943 }
Tim Petersd6d010b2001-06-21 02:49:55 +00002944
Guido van Rossum0368b722007-05-11 16:50:42 +00002945 if (argcntafter == -1) {
2946 /* We better have exhausted the iterator now. */
2947 w = PyIter_Next(it);
2948 if (w == NULL) {
2949 if (PyErr_Occurred())
2950 goto Error;
2951 Py_DECREF(it);
2952 return 1;
2953 }
2954 Py_DECREF(w);
2955 PyErr_SetString(PyExc_ValueError, "too many values to unpack");
2956 goto Error;
Barry Warsawe42b18f1997-08-25 22:13:04 +00002957 }
Guido van Rossum0368b722007-05-11 16:50:42 +00002958
2959 l = PySequence_List(it);
2960 if (l == NULL)
2961 goto Error;
2962 *--sp = l;
2963 i++;
2964
2965 ll = PyList_GET_SIZE(l);
2966 if (ll < argcntafter) {
2967 PyErr_Format(PyExc_ValueError, "need more than %zd values to unpack",
2968 argcnt + ll);
2969 goto Error;
2970 }
2971
2972 /* Pop the "after-variable" args off the list. */
2973 for (j = argcntafter; j > 0; j--, i++) {
2974 *--sp = PyList_GET_ITEM(l, ll - j);
2975 }
2976 /* Resize the list. */
Christian Heimes90aa7642007-12-19 02:45:37 +00002977 Py_SIZE(l) = ll - argcntafter;
Guido van Rossum0368b722007-05-11 16:50:42 +00002978 Py_DECREF(it);
2979 return 1;
2980
Tim Petersd6d010b2001-06-21 02:49:55 +00002981Error:
Barry Warsaw91010551997-08-25 22:30:51 +00002982 for (; i > 0; i--, sp++)
2983 Py_DECREF(*sp);
Tim Petersd6d010b2001-06-21 02:49:55 +00002984 Py_XDECREF(it);
Barry Warsawe42b18f1997-08-25 22:13:04 +00002985 return 0;
2986}
2987
2988
Guido van Rossum96a42c81992-01-12 02:29:51 +00002989#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00002990static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002991prtrace(PyObject *v, char *str)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002992{
Guido van Rossum3f5da241990-12-20 15:06:42 +00002993 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00002994 if (PyObject_Print(v, stdout, 0) != 0)
2995 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00002996 printf("\n");
Guido van Rossumcc229ea2000-05-04 00:55:17 +00002997 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002998}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002999#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003000
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003001static void
Fred Drake5755ce62001-06-27 19:19:46 +00003002call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003003{
Guido van Rossumb209a111997-04-29 18:18:01 +00003004 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003005 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00003006 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00003007 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003008 value = Py_None;
3009 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00003010 }
Raymond Hettinger8ae46892003-10-12 19:09:37 +00003011 arg = PyTuple_Pack(3, type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003012 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003013 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003014 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003015 }
Fred Drake5755ce62001-06-27 19:19:46 +00003016 err = call_trace(func, self, f, PyTrace_EXCEPTION, arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00003017 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003018 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00003019 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003020 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00003021 Py_XDECREF(type);
3022 Py_XDECREF(value);
3023 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003024 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003025}
3026
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003027static int
Fred Drake4ec5d562001-10-04 19:26:43 +00003028call_trace_protected(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003029 int what, PyObject *arg)
Fred Drake4ec5d562001-10-04 19:26:43 +00003030{
3031 PyObject *type, *value, *traceback;
3032 int err;
3033 PyErr_Fetch(&type, &value, &traceback);
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003034 err = call_trace(func, obj, frame, what, arg);
Fred Drake4ec5d562001-10-04 19:26:43 +00003035 if (err == 0)
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003036 {
Fred Drake4ec5d562001-10-04 19:26:43 +00003037 PyErr_Restore(type, value, traceback);
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003038 return 0;
3039 }
Fred Drake4ec5d562001-10-04 19:26:43 +00003040 else {
3041 Py_XDECREF(type);
3042 Py_XDECREF(value);
3043 Py_XDECREF(traceback);
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003044 return -1;
Fred Drake4ec5d562001-10-04 19:26:43 +00003045 }
3046}
3047
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003048static int
Fred Drake5755ce62001-06-27 19:19:46 +00003049call_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
3050 int what, PyObject *arg)
Guido van Rossum96a42c81992-01-12 02:29:51 +00003051{
Fred Drake5755ce62001-06-27 19:19:46 +00003052 register PyThreadState *tstate = frame->f_tstate;
3053 int result;
3054 if (tstate->tracing)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003055 return 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +00003056 tstate->tracing++;
Fred Drake9e3ad782001-07-03 23:39:52 +00003057 tstate->use_tracing = 0;
Fred Drake5755ce62001-06-27 19:19:46 +00003058 result = func(obj, frame, what, arg);
Fred Drake9e3ad782001-07-03 23:39:52 +00003059 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3060 || (tstate->c_profilefunc != NULL));
Guido van Rossuma027efa1997-05-05 20:56:21 +00003061 tstate->tracing--;
Fred Drake5755ce62001-06-27 19:19:46 +00003062 return result;
Guido van Rossum96a42c81992-01-12 02:29:51 +00003063}
3064
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00003065PyObject *
3066_PyEval_CallTracing(PyObject *func, PyObject *args)
3067{
3068 PyFrameObject *frame = PyEval_GetFrame();
3069 PyThreadState *tstate = frame->f_tstate;
3070 int save_tracing = tstate->tracing;
3071 int save_use_tracing = tstate->use_tracing;
3072 PyObject *result;
3073
3074 tstate->tracing = 0;
3075 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3076 || (tstate->c_profilefunc != NULL));
3077 result = PyObject_Call(func, args, NULL);
3078 tstate->tracing = save_tracing;
3079 tstate->use_tracing = save_use_tracing;
3080 return result;
3081}
3082
Michael W. Hudson006c7522002-11-08 13:08:46 +00003083static int
Tim Peters8a5c3c72004-04-05 19:36:21 +00003084maybe_call_line_trace(Py_tracefunc func, PyObject *obj,
Armin Rigobf57a142004-03-22 19:24:58 +00003085 PyFrameObject *frame, int *instr_lb, int *instr_ub,
3086 int *instr_prev)
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003087{
Michael W. Hudson006c7522002-11-08 13:08:46 +00003088 int result = 0;
3089
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003090 /* If the last instruction executed isn't in the current
3091 instruction window, reset the window. If the last
3092 instruction happens to fall at the start of a line or if it
3093 represents a jump backwards, call the trace function.
3094 */
Michael W. Hudson53d58bb2002-08-30 13:09:51 +00003095 if ((frame->f_lasti < *instr_lb || frame->f_lasti >= *instr_ub)) {
Thomas Woutersce272b62007-09-19 21:19:28 +00003096 int line;
3097 PyAddrPair bounds;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003098
Thomas Woutersce272b62007-09-19 21:19:28 +00003099 line = PyCode_CheckLineNumber(frame->f_code, frame->f_lasti,
3100 &bounds);
3101 if (line >= 0) {
Michael W. Hudson02ff6a92002-09-11 15:36:32 +00003102 frame->f_lineno = line;
Tim Peters8a5c3c72004-04-05 19:36:21 +00003103 result = call_trace(func, obj, frame,
Michael W. Hudson006c7522002-11-08 13:08:46 +00003104 PyTrace_LINE, Py_None);
Thomas Woutersce272b62007-09-19 21:19:28 +00003105 }
3106 *instr_lb = bounds.ap_lower;
3107 *instr_ub = bounds.ap_upper;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003108 }
Armin Rigobf57a142004-03-22 19:24:58 +00003109 else if (frame->f_lasti <= *instr_prev) {
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003110 result = call_trace(func, obj, frame, PyTrace_LINE, Py_None);
Armin Rigobf57a142004-03-22 19:24:58 +00003111 }
3112 *instr_prev = frame->f_lasti;
Michael W. Hudson006c7522002-11-08 13:08:46 +00003113 return result;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003114}
3115
Fred Drake5755ce62001-06-27 19:19:46 +00003116void
3117PyEval_SetProfile(Py_tracefunc func, PyObject *arg)
Fred Draked0838392001-06-16 21:02:31 +00003118{
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003119 PyThreadState *tstate = PyThreadState_GET();
Fred Drake5755ce62001-06-27 19:19:46 +00003120 PyObject *temp = tstate->c_profileobj;
3121 Py_XINCREF(arg);
3122 tstate->c_profilefunc = NULL;
3123 tstate->c_profileobj = NULL;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003124 /* Must make sure that tracing is not ignored if 'temp' is freed */
Fred Drake9e3ad782001-07-03 23:39:52 +00003125 tstate->use_tracing = tstate->c_tracefunc != NULL;
Fred Drake5755ce62001-06-27 19:19:46 +00003126 Py_XDECREF(temp);
3127 tstate->c_profilefunc = func;
3128 tstate->c_profileobj = arg;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003129 /* Flag that tracing or profiling is turned on */
Fred Drake9e3ad782001-07-03 23:39:52 +00003130 tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
Fred Drake5755ce62001-06-27 19:19:46 +00003131}
3132
3133void
3134PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
3135{
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003136 PyThreadState *tstate = PyThreadState_GET();
Fred Drake5755ce62001-06-27 19:19:46 +00003137 PyObject *temp = tstate->c_traceobj;
3138 Py_XINCREF(arg);
3139 tstate->c_tracefunc = NULL;
3140 tstate->c_traceobj = NULL;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003141 /* Must make sure that profiling is not ignored if 'temp' is freed */
Fred Drake9e3ad782001-07-03 23:39:52 +00003142 tstate->use_tracing = tstate->c_profilefunc != NULL;
Fred Drake5755ce62001-06-27 19:19:46 +00003143 Py_XDECREF(temp);
3144 tstate->c_tracefunc = func;
3145 tstate->c_traceobj = arg;
Brett Cannon55fa66d2005-06-25 07:07:35 +00003146 /* Flag that tracing or profiling is turned on */
Fred Drake9e3ad782001-07-03 23:39:52 +00003147 tstate->use_tracing = ((func != NULL)
3148 || (tstate->c_profilefunc != NULL));
Fred Draked0838392001-06-16 21:02:31 +00003149}
3150
Guido van Rossumb209a111997-04-29 18:18:01 +00003151PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003152PyEval_GetBuiltins(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00003153{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003154 PyFrameObject *current_frame = PyEval_GetFrame();
Guido van Rossum6135a871995-01-09 17:53:26 +00003155 if (current_frame == NULL)
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003156 return PyThreadState_GET()->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00003157 else
3158 return current_frame->f_builtins;
3159}
3160
Guido van Rossumb209a111997-04-29 18:18:01 +00003161PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003162PyEval_GetLocals(void)
Guido van Rossum5b722181993-03-30 17:46:03 +00003163{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003164 PyFrameObject *current_frame = PyEval_GetFrame();
Guido van Rossum5b722181993-03-30 17:46:03 +00003165 if (current_frame == NULL)
3166 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00003167 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00003168 return current_frame->f_locals;
3169}
3170
Guido van Rossumb209a111997-04-29 18:18:01 +00003171PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003172PyEval_GetGlobals(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003173{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003174 PyFrameObject *current_frame = PyEval_GetFrame();
Guido van Rossum3f5da241990-12-20 15:06:42 +00003175 if (current_frame == NULL)
3176 return NULL;
3177 else
3178 return current_frame->f_globals;
3179}
3180
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003181PyFrameObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003182PyEval_GetFrame(void)
Guido van Rossume59214e1994-08-30 08:01:59 +00003183{
Nicholas Bastine5662ae2004-03-24 22:22:12 +00003184 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003185 return _PyThreadState_GetFrame(tstate);
Guido van Rossume59214e1994-08-30 08:01:59 +00003186}
3187
Guido van Rossum6135a871995-01-09 17:53:26 +00003188int
Tim Peters5ba58662001-07-16 02:29:45 +00003189PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
Jeremy Hylton061d1062001-03-22 02:32:48 +00003190{
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003191 PyFrameObject *current_frame = PyEval_GetFrame();
Just van Rossum3aaf42c2003-02-10 08:21:10 +00003192 int result = cf->cf_flags != 0;
Tim Peters5ba58662001-07-16 02:29:45 +00003193
3194 if (current_frame != NULL) {
3195 const int codeflags = current_frame->f_code->co_flags;
Tim Peterse2c18e92001-08-17 20:47:47 +00003196 const int compilerflags = codeflags & PyCF_MASK;
3197 if (compilerflags) {
Tim Peters5ba58662001-07-16 02:29:45 +00003198 result = 1;
Tim Peterse2c18e92001-08-17 20:47:47 +00003199 cf->cf_flags |= compilerflags;
Tim Peters5ba58662001-07-16 02:29:45 +00003200 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003201#if 0 /* future keyword */
Martin v. Löwis7198a522002-01-01 19:59:11 +00003202 if (codeflags & CO_GENERATOR_ALLOWED) {
3203 result = 1;
3204 cf->cf_flags |= CO_GENERATOR_ALLOWED;
3205 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003206#endif
Tim Peters5ba58662001-07-16 02:29:45 +00003207 }
3208 return result;
Jeremy Hylton061d1062001-03-22 02:32:48 +00003209}
3210
Guido van Rossum3f5da241990-12-20 15:06:42 +00003211
Guido van Rossum681d79a1995-07-18 14:51:37 +00003212/* External interface to call any callable object.
3213 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00003214
Guido van Rossumd7ed6831997-08-30 15:02:50 +00003215#undef PyEval_CallObject
3216/* for backward compatibility: export this interface */
3217
Guido van Rossumb209a111997-04-29 18:18:01 +00003218PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003219PyEval_CallObject(PyObject *func, PyObject *arg)
Guido van Rossum83bf35c1991-07-27 21:32:34 +00003220{
Guido van Rossumb209a111997-04-29 18:18:01 +00003221 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003222}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00003223#define PyEval_CallObject(func,arg) \
3224 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00003225
Guido van Rossumb209a111997-04-29 18:18:01 +00003226PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003227PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum681d79a1995-07-18 14:51:37 +00003228{
Jeremy Hylton52820442001-01-03 23:52:36 +00003229 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00003230
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003231 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003232 arg = PyTuple_New(0);
Hye-Shik Chang4af5c8c2006-03-07 15:39:21 +00003233 if (arg == NULL)
3234 return NULL;
3235 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003236 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003237 PyErr_SetString(PyExc_TypeError,
3238 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00003239 return NULL;
3240 }
3241 else
Guido van Rossumb209a111997-04-29 18:18:01 +00003242 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003243
Guido van Rossumb209a111997-04-29 18:18:01 +00003244 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003245 PyErr_SetString(PyExc_TypeError,
3246 "keyword list must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00003247 Py_DECREF(arg);
Guido van Rossume3e61c11995-08-04 04:14:47 +00003248 return NULL;
3249 }
3250
Tim Peters6d6c1a32001-08-02 04:15:00 +00003251 result = PyObject_Call(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00003252 Py_DECREF(arg);
Jeremy Hylton52820442001-01-03 23:52:36 +00003253 return result;
3254}
3255
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003256const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003257PyEval_GetFuncName(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003258{
3259 if (PyMethod_Check(func))
Tim Peters6d6c1a32001-08-02 04:15:00 +00003260 return PyEval_GetFuncName(PyMethod_GET_FUNCTION(func));
Jeremy Hylton512a2372001-04-11 13:52:29 +00003261 else if (PyFunction_Check(func))
Martin v. Löwis5b222132007-06-10 09:51:05 +00003262 return PyUnicode_AsString(((PyFunctionObject*)func)->func_name);
Jeremy Hylton512a2372001-04-11 13:52:29 +00003263 else if (PyCFunction_Check(func))
3264 return ((PyCFunctionObject*)func)->m_ml->ml_name;
Guido van Rossum50e9fb92006-08-17 05:42:55 +00003265 else
Jeremy Hylton512a2372001-04-11 13:52:29 +00003266 return func->ob_type->tp_name;
Jeremy Hylton512a2372001-04-11 13:52:29 +00003267}
3268
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003269const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003270PyEval_GetFuncDesc(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003271{
3272 if (PyMethod_Check(func))
3273 return "()";
3274 else if (PyFunction_Check(func))
3275 return "()";
3276 else if (PyCFunction_Check(func))
3277 return "()";
Guido van Rossum50e9fb92006-08-17 05:42:55 +00003278 else
Jeremy Hylton512a2372001-04-11 13:52:29 +00003279 return " object";
Jeremy Hylton512a2372001-04-11 13:52:29 +00003280}
3281
Neal Norwitzaddfe0c2002-11-10 14:33:26 +00003282static void
Jeremy Hylton192690e2002-08-16 18:36:11 +00003283err_args(PyObject *func, int flags, int nargs)
3284{
3285 if (flags & METH_NOARGS)
Tim Peters8a5c3c72004-04-05 19:36:21 +00003286 PyErr_Format(PyExc_TypeError,
Guido van Rossum86c659a2002-08-23 14:11:35 +00003287 "%.200s() takes no arguments (%d given)",
Tim Peters8a5c3c72004-04-05 19:36:21 +00003288 ((PyCFunctionObject *)func)->m_ml->ml_name,
Jeremy Hylton192690e2002-08-16 18:36:11 +00003289 nargs);
3290 else
Tim Peters8a5c3c72004-04-05 19:36:21 +00003291 PyErr_Format(PyExc_TypeError,
Guido van Rossum86c659a2002-08-23 14:11:35 +00003292 "%.200s() takes exactly one argument (%d given)",
Tim Peters8a5c3c72004-04-05 19:36:21 +00003293 ((PyCFunctionObject *)func)->m_ml->ml_name,
Jeremy Hylton192690e2002-08-16 18:36:11 +00003294 nargs);
3295}
3296
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003297#define C_TRACE(x, call) \
Nicholas Bastind858a772004-06-25 23:31:06 +00003298if (tstate->use_tracing && tstate->c_profilefunc) { \
3299 if (call_trace(tstate->c_profilefunc, \
3300 tstate->c_profileobj, \
3301 tstate->frame, PyTrace_C_CALL, \
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003302 func)) { \
3303 x = NULL; \
3304 } \
3305 else { \
3306 x = call; \
3307 if (tstate->c_profilefunc != NULL) { \
3308 if (x == NULL) { \
3309 call_trace_protected(tstate->c_profilefunc, \
3310 tstate->c_profileobj, \
3311 tstate->frame, PyTrace_C_EXCEPTION, \
3312 func); \
3313 /* XXX should pass (type, value, tb) */ \
3314 } else { \
3315 if (call_trace(tstate->c_profilefunc, \
3316 tstate->c_profileobj, \
3317 tstate->frame, PyTrace_C_RETURN, \
3318 func)) { \
3319 Py_DECREF(x); \
3320 x = NULL; \
3321 } \
3322 } \
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003323 } \
Nicholas Bastind858a772004-06-25 23:31:06 +00003324 } \
3325} else { \
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003326 x = call; \
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003327 }
3328
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003329static PyObject *
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00003330call_function(PyObject ***pp_stack, int oparg
3331#ifdef WITH_TSC
3332 , uint64* pintr0, uint64* pintr1
3333#endif
3334 )
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003335{
3336 int na = oparg & 0xff;
3337 int nk = (oparg>>8) & 0xff;
3338 int n = na + 2 * nk;
3339 PyObject **pfunc = (*pp_stack) - n - 1;
3340 PyObject *func = *pfunc;
3341 PyObject *x, *w;
3342
Jeremy Hylton985eba52003-02-05 23:13:00 +00003343 /* Always dispatch PyCFunction first, because these are
3344 presumed to be the most frequent callable object.
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003345 */
3346 if (PyCFunction_Check(func) && nk == 0) {
3347 int flags = PyCFunction_GET_FLAGS(func);
Nicholas Bastind858a772004-06-25 23:31:06 +00003348 PyThreadState *tstate = PyThreadState_GET();
Raymond Hettingera7f56bc2004-06-26 04:34:33 +00003349
3350 PCALL(PCALL_CFUNCTION);
Jeremy Hylton192690e2002-08-16 18:36:11 +00003351 if (flags & (METH_NOARGS | METH_O)) {
3352 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
3353 PyObject *self = PyCFunction_GET_SELF(func);
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003354 if (flags & METH_NOARGS && na == 0) {
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003355 C_TRACE(x, (*meth)(self,NULL));
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00003356 }
Jeremy Hylton192690e2002-08-16 18:36:11 +00003357 else if (flags & METH_O && na == 1) {
3358 PyObject *arg = EXT_POP(*pp_stack);
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003359 C_TRACE(x, (*meth)(self,arg));
Jeremy Hylton192690e2002-08-16 18:36:11 +00003360 Py_DECREF(arg);
3361 }
3362 else {
3363 err_args(func, flags, na);
3364 x = NULL;
3365 }
3366 }
3367 else {
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003368 PyObject *callargs;
3369 callargs = load_args(pp_stack, na);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003370 READ_TIMESTAMP(*pintr0);
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003371 C_TRACE(x, PyCFunction_Call(func,callargs,NULL));
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003372 READ_TIMESTAMP(*pintr1);
Tim Peters8a5c3c72004-04-05 19:36:21 +00003373 Py_XDECREF(callargs);
3374 }
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003375 } else {
3376 if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) {
3377 /* optimize access to bound methods */
3378 PyObject *self = PyMethod_GET_SELF(func);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003379 PCALL(PCALL_METHOD);
3380 PCALL(PCALL_BOUND_METHOD);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003381 Py_INCREF(self);
3382 func = PyMethod_GET_FUNCTION(func);
3383 Py_INCREF(func);
3384 Py_DECREF(*pfunc);
3385 *pfunc = self;
3386 na++;
3387 n++;
3388 } else
3389 Py_INCREF(func);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003390 READ_TIMESTAMP(*pintr0);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003391 if (PyFunction_Check(func))
3392 x = fast_function(func, pp_stack, n, na, nk);
Tim Peters8a5c3c72004-04-05 19:36:21 +00003393 else
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003394 x = do_call(func, pp_stack, na, nk);
Michael W. Hudson75eabd22005-01-18 15:56:11 +00003395 READ_TIMESTAMP(*pintr1);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003396 Py_DECREF(func);
3397 }
Tim Peters8a5c3c72004-04-05 19:36:21 +00003398
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00003399 /* Clear the stack of the function object. Also removes
3400 the arguments in case they weren't consumed already
3401 (fast_function() and err_args() leave them on the stack).
Thomas Wouters7f597322006-03-01 05:32:33 +00003402 */
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003403 while ((*pp_stack) > pfunc) {
3404 w = EXT_POP(*pp_stack);
3405 Py_DECREF(w);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003406 PCALL(PCALL_POP);
Jeremy Hyltone8c04322002-08-16 17:47:26 +00003407 }
3408 return x;
3409}
3410
Jeremy Hylton192690e2002-08-16 18:36:11 +00003411/* The fast_function() function optimize calls for which no argument
Jeremy Hylton52820442001-01-03 23:52:36 +00003412 tuple is necessary; the objects are passed directly from the stack.
Jeremy Hylton985eba52003-02-05 23:13:00 +00003413 For the simplest case -- a function that takes only positional
3414 arguments and is called with only positional arguments -- it
3415 inlines the most primitive frame setup code from
3416 PyEval_EvalCodeEx(), which vastly reduces the checks that must be
3417 done before evaluating the frame.
Jeremy Hylton52820442001-01-03 23:52:36 +00003418*/
3419
3420static PyObject *
Guido van Rossumac7be682001-01-17 15:42:30 +00003421fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
Jeremy Hylton52820442001-01-03 23:52:36 +00003422{
Jeremy Hylton985eba52003-02-05 23:13:00 +00003423 PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003424 PyObject *globals = PyFunction_GET_GLOBALS(func);
3425 PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003426 PyObject *kwdefs = PyFunction_GET_KW_DEFAULTS(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003427 PyObject **d = NULL;
3428 int nd = 0;
3429
Jeremy Hylton985eba52003-02-05 23:13:00 +00003430 PCALL(PCALL_FUNCTION);
3431 PCALL(PCALL_FAST_FUNCTION);
Guido van Rossum4f72a782006-10-27 23:31:49 +00003432 if (argdefs == NULL && co->co_argcount == n &&
3433 co->co_kwonlyargcount == 0 && nk==0 &&
Jeremy Hylton985eba52003-02-05 23:13:00 +00003434 co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
3435 PyFrameObject *f;
3436 PyObject *retval = NULL;
3437 PyThreadState *tstate = PyThreadState_GET();
3438 PyObject **fastlocals, **stack;
3439 int i;
3440
3441 PCALL(PCALL_FASTER_FUNCTION);
3442 assert(globals != NULL);
3443 /* XXX Perhaps we should create a specialized
3444 PyFrame_New() that doesn't take locals, but does
3445 take builtins without sanity checking them.
3446 */
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003447 assert(tstate != NULL);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003448 f = PyFrame_New(tstate, co, globals, NULL);
3449 if (f == NULL)
3450 return NULL;
3451
3452 fastlocals = f->f_localsplus;
3453 stack = (*pp_stack) - n;
3454
3455 for (i = 0; i < n; i++) {
3456 Py_INCREF(*stack);
3457 fastlocals[i] = *stack++;
3458 }
Phillip J. Eby0d6615f2005-08-02 00:46:46 +00003459 retval = PyEval_EvalFrameEx(f,0);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003460 ++tstate->recursion_depth;
3461 Py_DECREF(f);
3462 --tstate->recursion_depth;
3463 return retval;
3464 }
Jeremy Hylton52820442001-01-03 23:52:36 +00003465 if (argdefs != NULL) {
3466 d = &PyTuple_GET_ITEM(argdefs, 0);
Christian Heimes90aa7642007-12-19 02:45:37 +00003467 nd = Py_SIZE(argdefs);
Jeremy Hylton52820442001-01-03 23:52:36 +00003468 }
Jeremy Hylton985eba52003-02-05 23:13:00 +00003469 return PyEval_EvalCodeEx(co, globals,
3470 (PyObject *)NULL, (*pp_stack)-n, na,
Guido van Rossum4f72a782006-10-27 23:31:49 +00003471 (*pp_stack)-2*nk, nk, d, nd, kwdefs,
Jeremy Hylton985eba52003-02-05 23:13:00 +00003472 PyFunction_GET_CLOSURE(func));
Jeremy Hylton52820442001-01-03 23:52:36 +00003473}
3474
3475static PyObject *
Ka-Ping Yee20579702001-01-15 22:14:16 +00003476update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack,
3477 PyObject *func)
Jeremy Hylton52820442001-01-03 23:52:36 +00003478{
3479 PyObject *kwdict = NULL;
3480 if (orig_kwdict == NULL)
3481 kwdict = PyDict_New();
3482 else {
3483 kwdict = PyDict_Copy(orig_kwdict);
3484 Py_DECREF(orig_kwdict);
3485 }
3486 if (kwdict == NULL)
3487 return NULL;
Raymond Hettinger5bed4562004-04-10 23:34:17 +00003488 while (--nk >= 0) {
Jeremy Hylton52820442001-01-03 23:52:36 +00003489 int err;
3490 PyObject *value = EXT_POP(*pp_stack);
3491 PyObject *key = EXT_POP(*pp_stack);
3492 if (PyDict_GetItem(kwdict, key) != NULL) {
Thomas Woutersce272b62007-09-19 21:19:28 +00003493 PyErr_Format(PyExc_TypeError,
3494 "%.200s%s got multiple values "
3495 "for keyword argument '%.200s'",
Tim Peters6d6c1a32001-08-02 04:15:00 +00003496 PyEval_GetFuncName(func),
3497 PyEval_GetFuncDesc(func),
Neal Norwitzda059e32007-08-26 05:33:45 +00003498 PyUnicode_AsString(key));
Jeremy Hylton52820442001-01-03 23:52:36 +00003499 Py_DECREF(key);
3500 Py_DECREF(value);
3501 Py_DECREF(kwdict);
3502 return NULL;
3503 }
3504 err = PyDict_SetItem(kwdict, key, value);
3505 Py_DECREF(key);
3506 Py_DECREF(value);
3507 if (err) {
3508 Py_DECREF(kwdict);
3509 return NULL;
3510 }
3511 }
3512 return kwdict;
3513}
3514
3515static PyObject *
3516update_star_args(int nstack, int nstar, PyObject *stararg,
3517 PyObject ***pp_stack)
3518{
3519 PyObject *callargs, *w;
3520
3521 callargs = PyTuple_New(nstack + nstar);
3522 if (callargs == NULL) {
3523 return NULL;
3524 }
3525 if (nstar) {
3526 int i;
3527 for (i = 0; i < nstar; i++) {
3528 PyObject *a = PyTuple_GET_ITEM(stararg, i);
3529 Py_INCREF(a);
3530 PyTuple_SET_ITEM(callargs, nstack + i, a);
3531 }
3532 }
Raymond Hettinger5bed4562004-04-10 23:34:17 +00003533 while (--nstack >= 0) {
Jeremy Hylton52820442001-01-03 23:52:36 +00003534 w = EXT_POP(*pp_stack);
3535 PyTuple_SET_ITEM(callargs, nstack, w);
3536 }
3537 return callargs;
3538}
3539
3540static PyObject *
3541load_args(PyObject ***pp_stack, int na)
3542{
3543 PyObject *args = PyTuple_New(na);
3544 PyObject *w;
3545
3546 if (args == NULL)
3547 return NULL;
Raymond Hettinger5bed4562004-04-10 23:34:17 +00003548 while (--na >= 0) {
Jeremy Hylton52820442001-01-03 23:52:36 +00003549 w = EXT_POP(*pp_stack);
3550 PyTuple_SET_ITEM(args, na, w);
3551 }
3552 return args;
3553}
3554
3555static PyObject *
3556do_call(PyObject *func, PyObject ***pp_stack, int na, int nk)
3557{
3558 PyObject *callargs = NULL;
3559 PyObject *kwdict = NULL;
3560 PyObject *result = NULL;
3561
3562 if (nk > 0) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00003563 kwdict = update_keyword_args(NULL, nk, pp_stack, func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003564 if (kwdict == NULL)
3565 goto call_fail;
3566 }
3567 callargs = load_args(pp_stack, na);
3568 if (callargs == NULL)
3569 goto call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00003570#ifdef CALL_PROFILE
3571 /* At this point, we have to look at the type of func to
3572 update the call stats properly. Do it here so as to avoid
3573 exposing the call stats machinery outside ceval.c
3574 */
3575 if (PyFunction_Check(func))
3576 PCALL(PCALL_FUNCTION);
3577 else if (PyMethod_Check(func))
3578 PCALL(PCALL_METHOD);
3579 else if (PyType_Check(func))
3580 PCALL(PCALL_TYPE);
3581 else
3582 PCALL(PCALL_OTHER);
3583#endif
Tim Peters6d6c1a32001-08-02 04:15:00 +00003584 result = PyObject_Call(func, callargs, kwdict);
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00003585call_fail:
Jeremy Hylton52820442001-01-03 23:52:36 +00003586 Py_XDECREF(callargs);
3587 Py_XDECREF(kwdict);
3588 return result;
3589}
3590
3591static PyObject *
3592ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
3593{
3594 int nstar = 0;
3595 PyObject *callargs = NULL;
3596 PyObject *stararg = NULL;
3597 PyObject *kwdict = NULL;
3598 PyObject *result = NULL;
3599
3600 if (flags & CALL_FLAG_KW) {
3601 kwdict = EXT_POP(*pp_stack);
Guido van Rossumd59da4b2007-05-22 18:11:13 +00003602 if (!PyDict_Check(kwdict)) {
3603 PyObject *d;
3604 d = PyDict_New();
3605 if (d == NULL)
3606 goto ext_call_fail;
3607 if (PyDict_Update(d, kwdict) != 0) {
3608 Py_DECREF(d);
3609 /* PyDict_Update raises attribute
3610 * error (percolated from an attempt
3611 * to get 'keys' attribute) instead of
3612 * a type error if its second argument
3613 * is not a mapping.
3614 */
3615 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
3616 PyErr_Format(PyExc_TypeError,
3617 "%.200s%.200s argument after ** "
3618 "must be a mapping, not %.200s",
3619 PyEval_GetFuncName(func),
3620 PyEval_GetFuncDesc(func),
3621 kwdict->ob_type->tp_name);
3622 }
3623 goto ext_call_fail;
3624 }
3625 Py_DECREF(kwdict);
3626 kwdict = d;
Jeremy Hylton52820442001-01-03 23:52:36 +00003627 }
3628 }
3629 if (flags & CALL_FLAG_VAR) {
3630 stararg = EXT_POP(*pp_stack);
3631 if (!PyTuple_Check(stararg)) {
3632 PyObject *t = NULL;
3633 t = PySequence_Tuple(stararg);
3634 if (t == NULL) {
Jeremy Hylton512a2372001-04-11 13:52:29 +00003635 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
3636 PyErr_Format(PyExc_TypeError,
Guido van Rossumd59da4b2007-05-22 18:11:13 +00003637 "%.200s%.200s argument after * "
3638 "must be a sequence, not %200s",
Tim Peters6d6c1a32001-08-02 04:15:00 +00003639 PyEval_GetFuncName(func),
Guido van Rossumd59da4b2007-05-22 18:11:13 +00003640 PyEval_GetFuncDesc(func),
3641 stararg->ob_type->tp_name);
Jeremy Hylton512a2372001-04-11 13:52:29 +00003642 }
Jeremy Hylton52820442001-01-03 23:52:36 +00003643 goto ext_call_fail;
3644 }
3645 Py_DECREF(stararg);
3646 stararg = t;
3647 }
3648 nstar = PyTuple_GET_SIZE(stararg);
3649 }
3650 if (nk > 0) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00003651 kwdict = update_keyword_args(kwdict, nk, pp_stack, func);
Jeremy Hylton52820442001-01-03 23:52:36 +00003652 if (kwdict == NULL)
3653 goto ext_call_fail;
3654 }
3655 callargs = update_star_args(na, nstar, stararg, pp_stack);
3656 if (callargs == NULL)
3657 goto ext_call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00003658#ifdef CALL_PROFILE
3659 /* At this point, we have to look at the type of func to
3660 update the call stats properly. Do it here so as to avoid
3661 exposing the call stats machinery outside ceval.c
3662 */
3663 if (PyFunction_Check(func))
3664 PCALL(PCALL_FUNCTION);
3665 else if (PyMethod_Check(func))
3666 PCALL(PCALL_METHOD);
3667 else if (PyType_Check(func))
3668 PCALL(PCALL_TYPE);
3669 else
3670 PCALL(PCALL_OTHER);
3671#endif
Tim Peters6d6c1a32001-08-02 04:15:00 +00003672 result = PyObject_Call(func, callargs, kwdict);
Thomas Woutersce272b62007-09-19 21:19:28 +00003673ext_call_fail:
Jeremy Hylton52820442001-01-03 23:52:36 +00003674 Py_XDECREF(callargs);
3675 Py_XDECREF(kwdict);
3676 Py_XDECREF(stararg);
3677 return result;
3678}
3679
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003680/* Extract a slice index from a PyInt or PyLong or an object with the
3681 nb_index slot defined, and store in *pi.
3682 Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX,
3683 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 +00003684 Return 0 on error, 1 on success.
Tim Peterscb479e72001-12-16 19:11:44 +00003685*/
Tim Petersb5196382001-12-16 19:44:20 +00003686/* Note: If v is NULL, return success without storing into *pi. This
3687 is because_PyEval_SliceIndex() is called by apply_slice(), which can be
3688 called by the SLICE opcode with v and/or w equal to NULL.
Tim Peterscb479e72001-12-16 19:11:44 +00003689*/
Guido van Rossum20c6add2000-05-08 14:06:50 +00003690int
Martin v. Löwis18e16552006-02-15 17:27:45 +00003691_PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003692{
Tim Petersb5196382001-12-16 19:44:20 +00003693 if (v != NULL) {
Martin v. Löwisdde99d22006-02-17 15:57:41 +00003694 Py_ssize_t x;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +00003695 if (PyIndex_Check(v)) {
Thomas Wouters00ee7ba2006-08-21 19:07:27 +00003696 x = PyNumber_AsSsize_t(v, NULL);
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003697 if (x == -1 && PyErr_Occurred())
3698 return 0;
3699 }
3700 else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003701 PyErr_SetString(PyExc_TypeError,
Guido van Rossum38fff8c2006-03-07 18:50:55 +00003702 "slice indices must be integers or "
3703 "None or have an __index__ method");
Guido van Rossum20c6add2000-05-08 14:06:50 +00003704 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003705 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00003706 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003707 }
Guido van Rossum20c6add2000-05-08 14:06:50 +00003708 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003709}
3710
Guido van Rossum486364b2007-06-30 05:01:58 +00003711#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
Brett Cannon39590462007-02-26 22:01:14 +00003712 "BaseException is not allowed"
Brett Cannonf74225d2007-02-26 21:10:16 +00003713
Guido van Rossumb209a111997-04-29 18:18:01 +00003714static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003715cmp_outcome(int op, register PyObject *v, register PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003716{
Guido van Rossumac7be682001-01-17 15:42:30 +00003717 int res = 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003718 switch (op) {
Martin v. Löwis7198a522002-01-01 19:59:11 +00003719 case PyCmp_IS:
Guido van Rossum3f5da241990-12-20 15:06:42 +00003720 res = (v == w);
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00003721 break;
3722 case PyCmp_IS_NOT:
3723 res = (v != w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00003724 break;
Martin v. Löwis7198a522002-01-01 19:59:11 +00003725 case PyCmp_IN:
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00003726 res = PySequence_Contains(w, v);
3727 if (res < 0)
3728 return NULL;
3729 break;
Martin v. Löwis7198a522002-01-01 19:59:11 +00003730 case PyCmp_NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00003731 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00003732 if (res < 0)
3733 return NULL;
Raymond Hettinger4bad9ba2003-01-19 05:08:13 +00003734 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003735 break;
Martin v. Löwis7198a522002-01-01 19:59:11 +00003736 case PyCmp_EXC_MATCH:
Thomas Wouters9fe394c2007-02-05 01:24:16 +00003737 if (PyTuple_Check(w)) {
3738 Py_ssize_t i, length;
3739 length = PyTuple_Size(w);
3740 for (i = 0; i < length; i += 1) {
3741 PyObject *exc = PyTuple_GET_ITEM(w, i);
Brett Cannon39590462007-02-26 22:01:14 +00003742 if (!PyExceptionClass_Check(exc)) {
3743 PyErr_SetString(PyExc_TypeError,
3744 CANNOT_CATCH_MSG);
Brett Cannonf74225d2007-02-26 21:10:16 +00003745 return NULL;
Thomas Wouters9fe394c2007-02-05 01:24:16 +00003746 }
3747 }
3748 }
3749 else {
Brett Cannon39590462007-02-26 22:01:14 +00003750 if (!PyExceptionClass_Check(w)) {
3751 PyErr_SetString(PyExc_TypeError,
3752 CANNOT_CATCH_MSG);
Brett Cannonf74225d2007-02-26 21:10:16 +00003753 return NULL;
Thomas Wouters9fe394c2007-02-05 01:24:16 +00003754 }
3755 }
Barry Warsaw4249f541997-08-22 21:26:19 +00003756 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003757 break;
3758 default:
Guido van Rossumac7be682001-01-17 15:42:30 +00003759 return PyObject_RichCompare(v, w, op);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003760 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003761 v = res ? Py_True : Py_False;
3762 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003763 return v;
3764}
3765
Thomas Wouters52152252000-08-17 22:55:00 +00003766static PyObject *
3767import_from(PyObject *v, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00003768{
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003769 PyObject *x;
3770
3771 x = PyObject_GetAttr(v, name);
3772 if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
Walter Dörwald573c08c2007-05-25 15:46:59 +00003773 PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003774 }
Thomas Wouters52152252000-08-17 22:55:00 +00003775 return x;
3776}
Guido van Rossumac7be682001-01-17 15:42:30 +00003777
Thomas Wouters52152252000-08-17 22:55:00 +00003778static int
3779import_all_from(PyObject *locals, PyObject *v)
3780{
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003781 PyObject *all = PyObject_GetAttrString(v, "__all__");
3782 PyObject *dict, *name, *value;
3783 int skip_leading_underscores = 0;
3784 int pos, err;
Thomas Wouters52152252000-08-17 22:55:00 +00003785
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003786 if (all == NULL) {
3787 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
3788 return -1; /* Unexpected error */
3789 PyErr_Clear();
3790 dict = PyObject_GetAttrString(v, "__dict__");
3791 if (dict == NULL) {
3792 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
3793 return -1;
3794 PyErr_SetString(PyExc_ImportError,
3795 "from-import-* object has no __dict__ and no __all__");
Guido van Rossum3f5da241990-12-20 15:06:42 +00003796 return -1;
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003797 }
3798 all = PyMapping_Keys(dict);
3799 Py_DECREF(dict);
3800 if (all == NULL)
3801 return -1;
3802 skip_leading_underscores = 1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003803 }
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003804
3805 for (pos = 0, err = 0; ; pos++) {
3806 name = PySequence_GetItem(all, pos);
3807 if (name == NULL) {
3808 if (!PyErr_ExceptionMatches(PyExc_IndexError))
3809 err = -1;
3810 else
3811 PyErr_Clear();
3812 break;
3813 }
3814 if (skip_leading_underscores &&
Martin v. Löwis5b222132007-06-10 09:51:05 +00003815 PyUnicode_Check(name) &&
3816 PyUnicode_AS_UNICODE(name)[0] == '_')
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003817 {
3818 Py_DECREF(name);
3819 continue;
3820 }
3821 value = PyObject_GetAttr(v, name);
3822 if (value == NULL)
3823 err = -1;
Thomas Wouters89f507f2006-12-13 04:49:30 +00003824 else if (PyDict_CheckExact(locals))
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003825 err = PyDict_SetItem(locals, name, value);
Thomas Wouters89f507f2006-12-13 04:49:30 +00003826 else
3827 err = PyObject_SetItem(locals, name, value);
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003828 Py_DECREF(name);
3829 Py_XDECREF(value);
3830 if (err != 0)
3831 break;
3832 }
3833 Py_DECREF(all);
3834 return err;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003835}
3836
Guido van Rossumac7be682001-01-17 15:42:30 +00003837static void
Neal Norwitzda059e32007-08-26 05:33:45 +00003838format_exc_check_arg(PyObject *exc, const char *format_str, PyObject *obj)
Paul Prescode68140d2000-08-30 20:25:01 +00003839{
Neal Norwitzda059e32007-08-26 05:33:45 +00003840 const char *obj_str;
Paul Prescode68140d2000-08-30 20:25:01 +00003841
3842 if (!obj)
3843 return;
3844
Neal Norwitzda059e32007-08-26 05:33:45 +00003845 obj_str = PyUnicode_AsString(obj);
Paul Prescode68140d2000-08-30 20:25:01 +00003846 if (!obj_str)
3847 return;
3848
3849 PyErr_Format(exc, format_str, obj_str);
3850}
Guido van Rossum950361c1997-01-24 13:49:28 +00003851
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003852static PyObject *
Guido van Rossum98297ee2007-11-06 21:34:58 +00003853unicode_concatenate(PyObject *v, PyObject *w,
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003854 PyFrameObject *f, unsigned char *next_instr)
3855{
3856 /* This function implements 'variable += expr' when both arguments
Guido van Rossum98297ee2007-11-06 21:34:58 +00003857 are (Unicode) strings. */
3858 Py_ssize_t v_len = PyUnicode_GET_SIZE(v);
3859 Py_ssize_t w_len = PyUnicode_GET_SIZE(w);
Thomas Wouters0e3f5912006-08-11 14:57:12 +00003860 Py_ssize_t new_len = v_len + w_len;
3861 if (new_len < 0) {
3862 PyErr_SetString(PyExc_OverflowError,
3863 "strings are too large to concat");
3864 return NULL;
3865 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00003866
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003867 if (v->ob_refcnt == 2) {
3868 /* In the common case, there are 2 references to the value
3869 * stored in 'variable' when the += is performed: one on the
Thomas Wouters8ce81f72007-09-20 18:22:40 +00003870 * value stack (in 'v') and one still stored in the
3871 * 'variable'. We try to delete the variable now to reduce
3872 * the refcnt to 1.
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003873 */
3874 switch (*next_instr) {
3875 case STORE_FAST:
3876 {
3877 int oparg = PEEKARG();
3878 PyObject **fastlocals = f->f_localsplus;
3879 if (GETLOCAL(oparg) == v)
3880 SETLOCAL(oparg, NULL);
3881 break;
3882 }
3883 case STORE_DEREF:
3884 {
Thomas Wouters8ce81f72007-09-20 18:22:40 +00003885 PyObject **freevars = (f->f_localsplus +
3886 f->f_code->co_nlocals);
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003887 PyObject *c = freevars[PEEKARG()];
3888 if (PyCell_GET(c) == v)
3889 PyCell_Set(c, NULL);
3890 break;
3891 }
3892 case STORE_NAME:
3893 {
3894 PyObject *names = f->f_code->co_names;
3895 PyObject *name = GETITEM(names, PEEKARG());
3896 PyObject *locals = f->f_locals;
3897 if (PyDict_CheckExact(locals) &&
3898 PyDict_GetItem(locals, name) == v) {
3899 if (PyDict_DelItem(locals, name) != 0) {
3900 PyErr_Clear();
3901 }
3902 }
3903 break;
3904 }
3905 }
3906 }
3907
Guido van Rossum98297ee2007-11-06 21:34:58 +00003908 if (v->ob_refcnt == 1 && !PyUnicode_CHECK_INTERNED(v)) {
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003909 /* Now we own the last reference to 'v', so we can resize it
3910 * in-place.
3911 */
Guido van Rossum98297ee2007-11-06 21:34:58 +00003912 if (PyUnicode_Resize(&v, new_len) != 0) {
3913 /* XXX if PyUnicode_Resize() fails, 'v' has been
Thomas Wouters8ce81f72007-09-20 18:22:40 +00003914 * deallocated so it cannot be put back into
3915 * 'variable'. The MemoryError is raised when there
3916 * is no value in 'variable', which might (very
3917 * remotely) be a cause of incompatibilities.
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003918 */
3919 return NULL;
3920 }
3921 /* copy 'w' into the newly allocated area of 'v' */
Guido van Rossum98297ee2007-11-06 21:34:58 +00003922 memcpy(PyUnicode_AS_UNICODE(v) + v_len,
3923 PyUnicode_AS_UNICODE(w), w_len*sizeof(Py_UNICODE));
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003924 return v;
3925 }
3926 else {
3927 /* When in-place resizing is not an option. */
Guido van Rossum98297ee2007-11-06 21:34:58 +00003928 w = PyUnicode_Concat(v, w);
3929 Py_DECREF(v);
3930 return w;
Raymond Hettinger52a21b82004-08-06 18:43:09 +00003931 }
3932}
3933
Guido van Rossum950361c1997-01-24 13:49:28 +00003934#ifdef DYNAMIC_EXECUTION_PROFILE
3935
Skip Montanarof118cb12001-10-15 20:51:38 +00003936static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003937getarray(long a[256])
Guido van Rossum950361c1997-01-24 13:49:28 +00003938{
3939 int i;
3940 PyObject *l = PyList_New(256);
3941 if (l == NULL) return NULL;
3942 for (i = 0; i < 256; i++) {
Christian Heimes217cfd12007-12-02 14:31:20 +00003943 PyObject *x = PyLong_FromLong(a[i]);
Guido van Rossum950361c1997-01-24 13:49:28 +00003944 if (x == NULL) {
3945 Py_DECREF(l);
3946 return NULL;
3947 }
3948 PyList_SetItem(l, i, x);
3949 }
3950 for (i = 0; i < 256; i++)
3951 a[i] = 0;
3952 return l;
3953}
3954
3955PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003956_Py_GetDXProfile(PyObject *self, PyObject *args)
Guido van Rossum950361c1997-01-24 13:49:28 +00003957{
3958#ifndef DXPAIRS
3959 return getarray(dxp);
3960#else
3961 int i;
3962 PyObject *l = PyList_New(257);
3963 if (l == NULL) return NULL;
3964 for (i = 0; i < 257; i++) {
3965 PyObject *x = getarray(dxpairs[i]);
3966 if (x == NULL) {
3967 Py_DECREF(l);
3968 return NULL;
3969 }
3970 PyList_SetItem(l, i, x);
3971 }
3972 return l;
3973#endif
3974}
3975
3976#endif