blob: 7908d444e187e588cd97754e157cd5942220d3cd [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 Rossum10dc2e81990-11-18 17:27:39 +000016#include "opcode.h"
Tim Peters6d6c1a32001-08-02 04:15:00 +000017#include "structmember.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000018
Guido van Rossumc6004111993-11-05 10:22:19 +000019#include <ctype.h>
20
Thomas Wouters477c8d52006-05-27 19:21:47 +000021#ifndef WITH_TSC
Michael W. Hudson75eabd22005-01-18 15:56:11 +000022
23#define READ_TIMESTAMP(var)
24
25#else
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000026
27typedef unsigned long long uint64;
28
Ezio Melotti13925002011-03-16 11:05:33 +020029/* PowerPC support.
David Malcolmf1397ad2011-01-06 17:01:36 +000030 "__ppc__" appears to be the preprocessor definition to detect on OS X, whereas
31 "__powerpc__" appears to be the correct one for Linux with GCC
32*/
33#if defined(__ppc__) || defined (__powerpc__)
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{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000040 register unsigned long tbu, tb, tbu2;
Michael W. Hudson800ba232004-08-12 18:19:17 +000041
42 loop:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000043 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;
Michael W. Hudson800ba232004-08-12 18:19:17 +000047
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000048 /* The slightly peculiar way of writing the next lines is
49 compiled better by GCC than any other way I tried. */
50 ((long*)(v))[0] = tbu;
51 ((long*)(v))[1] = tb;
Michael W. Hudson800ba232004-08-12 18:19:17 +000052}
53
Mark Dickinsona25b1312009-10-31 10:18:44 +000054#elif defined(__i386__)
55
56/* this is for linux/x86 (and probably any other GCC/x86 combo) */
Michael W. Hudson800ba232004-08-12 18:19:17 +000057
Michael W. Hudson75eabd22005-01-18 15:56:11 +000058#define READ_TIMESTAMP(val) \
59 __asm__ __volatile__("rdtsc" : "=A" (val))
Michael W. Hudson800ba232004-08-12 18:19:17 +000060
Mark Dickinsona25b1312009-10-31 10:18:44 +000061#elif defined(__x86_64__)
62
63/* for gcc/x86_64, the "A" constraint in DI mode means *either* rax *or* rdx;
64 not edx:eax as it does for i386. Since rdtsc puts its result in edx:eax
65 even in 64-bit mode, we need to use "a" and "d" for the lower and upper
66 32-bit pieces of the result. */
67
68#define READ_TIMESTAMP(val) \
69 __asm__ __volatile__("rdtsc" : \
70 "=a" (((int*)&(val))[0]), "=d" (((int*)&(val))[1]));
71
72
73#else
74
75#error "Don't know how to implement timestamp counter for this architecture"
76
Michael W. Hudson800ba232004-08-12 18:19:17 +000077#endif
78
Thomas Wouters477c8d52006-05-27 19:21:47 +000079void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000080 uint64 loop0, uint64 loop1, uint64 intr0, uint64 intr1)
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000081{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000082 uint64 intr, inst, loop;
83 PyThreadState *tstate = PyThreadState_Get();
84 if (!tstate->interp->tscdump)
85 return;
86 intr = intr1 - intr0;
87 inst = inst1 - inst0 - intr;
88 loop = loop1 - loop0 - intr;
89 fprintf(stderr, "opcode=%03d t=%d inst=%06lld loop=%06lld\n",
Stefan Krahb7e10102010-06-23 18:42:39 +000090 opcode, ticked, inst, loop);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000091}
Michael W. Hudson800ba232004-08-12 18:19:17 +000092
Martin v. Löwisf30d60e2004-06-08 08:17:44 +000093#endif
94
Guido van Rossum04691fc1992-08-12 15:35:34 +000095/* Turn this on if your compiler chokes on the big switch: */
Guido van Rossum1ae940a1995-01-02 19:04:15 +000096/* #define CASE_TOO_BIG 1 */
Guido van Rossum04691fc1992-08-12 15:35:34 +000097
Guido van Rossum408027e1996-12-30 16:17:54 +000098#ifdef Py_DEBUG
Guido van Rossum96a42c81992-01-12 02:29:51 +000099/* For debugging the interpreter: */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000100#define LLTRACE 1 /* Low-level trace feature */
101#define CHECKEXC 1 /* Double-check exception checking */
Guido van Rossum10dc2e81990-11-18 17:27:39 +0000102#endif
103
Jeremy Hylton52820442001-01-03 23:52:36 +0000104typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
Guido van Rossum5b722181993-03-30 17:46:03 +0000105
Guido van Rossum374a9221991-04-04 10:40:29 +0000106/* Forward declarations */
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000107#ifdef WITH_TSC
Thomas Wouters477c8d52006-05-27 19:21:47 +0000108static PyObject * call_function(PyObject ***, int, uint64*, uint64*);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000109#else
Thomas Wouters477c8d52006-05-27 19:21:47 +0000110static PyObject * call_function(PyObject ***, int);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000111#endif
Thomas Wouters477c8d52006-05-27 19:21:47 +0000112static PyObject * fast_function(PyObject *, PyObject ***, int, int, int);
113static PyObject * do_call(PyObject *, PyObject ***, int, int);
114static PyObject * ext_do_call(PyObject *, PyObject ***, int, int, int);
Thomas Wouters8ce81f72007-09-20 18:22:40 +0000115static PyObject * update_keyword_args(PyObject *, int, PyObject ***,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000116 PyObject *);
Thomas Wouters477c8d52006-05-27 19:21:47 +0000117static PyObject * update_star_args(int, int, PyObject *, PyObject ***);
118static PyObject * load_args(PyObject ***, int);
Jeremy Hylton52820442001-01-03 23:52:36 +0000119#define CALL_FLAG_VAR 1
120#define CALL_FLAG_KW 2
121
Guido van Rossum0a066c01992-03-27 17:29:15 +0000122#ifdef LLTRACE
Guido van Rossumc2e20742006-02-27 22:32:47 +0000123static int lltrace;
Tim Petersdbd9ba62000-07-09 03:09:57 +0000124static int prtrace(PyObject *, char *);
Guido van Rossum0a066c01992-03-27 17:29:15 +0000125#endif
Fred Drake5755ce62001-06-27 19:19:46 +0000126static int call_trace(Py_tracefunc, PyObject *, PyFrameObject *,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000127 int, PyObject *);
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +0000128static int call_trace_protected(Py_tracefunc, PyObject *,
Stefan Krahb7e10102010-06-23 18:42:39 +0000129 PyFrameObject *, int, PyObject *);
Fred Drake5755ce62001-06-27 19:19:46 +0000130static void call_exc_trace(Py_tracefunc, PyObject *, PyFrameObject *);
Tim Peters8a5c3c72004-04-05 19:36:21 +0000131static int maybe_call_line_trace(Py_tracefunc, PyObject *,
Stefan Krahb7e10102010-06-23 18:42:39 +0000132 PyFrameObject *, int *, int *, int *);
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000133
Thomas Wouters477c8d52006-05-27 19:21:47 +0000134static PyObject * cmp_outcome(int, PyObject *, PyObject *);
135static PyObject * import_from(PyObject *, PyObject *);
Thomas Wouters52152252000-08-17 22:55:00 +0000136static int import_all_from(PyObject *, PyObject *);
Neal Norwitzda059e32007-08-26 05:33:45 +0000137static void format_exc_check_arg(PyObject *, const char *, PyObject *);
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +0000138static void format_exc_unbound(PyCodeObject *co, int oparg);
Victor Stinnerd2a915d2011-10-02 20:34:20 +0200139static PyObject * unicode_concatenate(PyObject *, PyObject *,
140 PyFrameObject *, unsigned char *);
Benjamin Petersonce798522012-01-22 11:24:29 -0500141static PyObject * special_lookup(PyObject *, _Py_Identifier *);
Guido van Rossum374a9221991-04-04 10:40:29 +0000142
Paul Prescode68140d2000-08-30 20:25:01 +0000143#define NAME_ERROR_MSG \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000144 "name '%.200s' is not defined"
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000145#define GLOBAL_NAME_ERROR_MSG \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000146 "global name '%.200s' is not defined"
Paul Prescode68140d2000-08-30 20:25:01 +0000147#define UNBOUNDLOCAL_ERROR_MSG \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000148 "local variable '%.200s' referenced before assignment"
Jeremy Hyltonc76770c2001-04-13 16:51:46 +0000149#define UNBOUNDFREE_ERROR_MSG \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000150 "free variable '%.200s' referenced before assignment" \
151 " in enclosing scope"
Guido van Rossum374a9221991-04-04 10:40:29 +0000152
Guido van Rossum950361c1997-01-24 13:49:28 +0000153/* Dynamic execution profile */
154#ifdef DYNAMIC_EXECUTION_PROFILE
155#ifdef DXPAIRS
156static long dxpairs[257][256];
157#define dxp dxpairs[256]
158#else
159static long dxp[256];
160#endif
161#endif
162
Jeremy Hylton985eba52003-02-05 23:13:00 +0000163/* Function call profile */
164#ifdef CALL_PROFILE
165#define PCALL_NUM 11
166static int pcall[PCALL_NUM];
167
168#define PCALL_ALL 0
169#define PCALL_FUNCTION 1
170#define PCALL_FAST_FUNCTION 2
171#define PCALL_FASTER_FUNCTION 3
172#define PCALL_METHOD 4
173#define PCALL_BOUND_METHOD 5
174#define PCALL_CFUNCTION 6
175#define PCALL_TYPE 7
176#define PCALL_GENERATOR 8
177#define PCALL_OTHER 9
178#define PCALL_POP 10
179
180/* Notes about the statistics
181
182 PCALL_FAST stats
183
184 FAST_FUNCTION means no argument tuple needs to be created.
185 FASTER_FUNCTION means that the fast-path frame setup code is used.
186
187 If there is a method call where the call can be optimized by changing
188 the argument tuple and calling the function directly, it gets recorded
189 twice.
190
191 As a result, the relationship among the statistics appears to be
192 PCALL_ALL == PCALL_FUNCTION + PCALL_METHOD - PCALL_BOUND_METHOD +
193 PCALL_CFUNCTION + PCALL_TYPE + PCALL_GENERATOR + PCALL_OTHER
194 PCALL_FUNCTION > PCALL_FAST_FUNCTION > PCALL_FASTER_FUNCTION
195 PCALL_METHOD > PCALL_BOUND_METHOD
196*/
197
198#define PCALL(POS) pcall[POS]++
199
200PyObject *
201PyEval_GetCallStats(PyObject *self)
202{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000203 return Py_BuildValue("iiiiiiiiiii",
204 pcall[0], pcall[1], pcall[2], pcall[3],
205 pcall[4], pcall[5], pcall[6], pcall[7],
206 pcall[8], pcall[9], pcall[10]);
Jeremy Hylton985eba52003-02-05 23:13:00 +0000207}
208#else
209#define PCALL(O)
210
211PyObject *
212PyEval_GetCallStats(PyObject *self)
213{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000214 Py_INCREF(Py_None);
215 return Py_None;
Jeremy Hylton985eba52003-02-05 23:13:00 +0000216}
217#endif
218
Tim Peters5ca576e2001-06-18 22:08:13 +0000219
Benjamin Petersond2be5b42010-09-10 22:47:02 +0000220#ifdef WITH_THREAD
221#define GIL_REQUEST _Py_atomic_load_relaxed(&gil_drop_request)
222#else
223#define GIL_REQUEST 0
224#endif
225
Jeffrey Yasskin39370832010-05-03 19:29:34 +0000226/* This can set eval_breaker to 0 even though gil_drop_request became
227 1. We believe this is all right because the eval loop will release
228 the GIL eventually anyway. */
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000229#define COMPUTE_EVAL_BREAKER() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000230 _Py_atomic_store_relaxed( \
231 &eval_breaker, \
Benjamin Petersond2be5b42010-09-10 22:47:02 +0000232 GIL_REQUEST | \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000233 _Py_atomic_load_relaxed(&pendingcalls_to_do) | \
234 pending_async_exc)
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000235
Benjamin Petersond2be5b42010-09-10 22:47:02 +0000236#ifdef WITH_THREAD
237
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000238#define SET_GIL_DROP_REQUEST() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000239 do { \
240 _Py_atomic_store_relaxed(&gil_drop_request, 1); \
241 _Py_atomic_store_relaxed(&eval_breaker, 1); \
242 } while (0)
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000243
244#define RESET_GIL_DROP_REQUEST() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 do { \
246 _Py_atomic_store_relaxed(&gil_drop_request, 0); \
247 COMPUTE_EVAL_BREAKER(); \
248 } while (0)
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000249
Benjamin Petersond2be5b42010-09-10 22:47:02 +0000250#endif
251
Jeffrey Yasskin39370832010-05-03 19:29:34 +0000252/* Pending calls are only modified under pending_lock */
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000253#define SIGNAL_PENDING_CALLS() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000254 do { \
255 _Py_atomic_store_relaxed(&pendingcalls_to_do, 1); \
256 _Py_atomic_store_relaxed(&eval_breaker, 1); \
257 } while (0)
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000258
259#define UNSIGNAL_PENDING_CALLS() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000260 do { \
261 _Py_atomic_store_relaxed(&pendingcalls_to_do, 0); \
262 COMPUTE_EVAL_BREAKER(); \
263 } while (0)
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000264
265#define SIGNAL_ASYNC_EXC() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000266 do { \
267 pending_async_exc = 1; \
268 _Py_atomic_store_relaxed(&eval_breaker, 1); \
269 } while (0)
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000270
271#define UNSIGNAL_ASYNC_EXC() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000272 do { pending_async_exc = 0; COMPUTE_EVAL_BREAKER(); } while (0)
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000273
274
Guido van Rossume59214e1994-08-30 08:01:59 +0000275#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +0000276
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000277#ifdef HAVE_ERRNO_H
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000278#include <errno.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +0000279#endif
Guido van Rossum49b56061998-10-01 20:42:43 +0000280#include "pythread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +0000281
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000282static PyThread_type_lock pending_lock = 0; /* for pending calls */
Guido van Rossuma9672091994-09-14 13:31:22 +0000283static long main_thread = 0;
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000284/* This single variable consolidates all requests to break out of the fast path
285 in the eval loop. */
Jeffrey Yasskin39370832010-05-03 19:29:34 +0000286static _Py_atomic_int eval_breaker = {0};
287/* Request for dropping the GIL */
288static _Py_atomic_int gil_drop_request = {0};
289/* Request for running pending calls. */
290static _Py_atomic_int pendingcalls_to_do = {0};
291/* Request for looking at the `async_exc` field of the current thread state.
292 Guarded by the GIL. */
293static int pending_async_exc = 0;
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000294
295#include "ceval_gil.h"
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000296
Tim Peters7f468f22004-10-11 02:40:51 +0000297int
298PyEval_ThreadsInitialized(void)
299{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000300 return gil_created();
Tim Peters7f468f22004-10-11 02:40:51 +0000301}
302
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000303void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000304PyEval_InitThreads(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000305{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000306 if (gil_created())
307 return;
308 create_gil();
309 take_gil(PyThreadState_GET());
310 main_thread = PyThread_get_thread_ident();
311 if (!pending_lock)
312 pending_lock = PyThread_allocate_lock();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000313}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000314
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000315void
Antoine Pitrou1df15362010-09-13 14:16:46 +0000316_PyEval_FiniThreads(void)
317{
318 if (!gil_created())
319 return;
320 destroy_gil();
321 assert(!gil_created());
322}
323
324void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000325PyEval_AcquireLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000326{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000327 PyThreadState *tstate = PyThreadState_GET();
328 if (tstate == NULL)
329 Py_FatalError("PyEval_AcquireLock: current thread state is NULL");
330 take_gil(tstate);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000331}
332
333void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000334PyEval_ReleaseLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000335{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000336 /* This function must succeed when the current thread state is NULL.
337 We therefore avoid PyThreadState_GET() which dumps a fatal error
338 in debug mode.
339 */
340 drop_gil((PyThreadState*)_Py_atomic_load_relaxed(
341 &_PyThreadState_Current));
Guido van Rossum25ce5661997-08-02 03:10:38 +0000342}
343
344void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000345PyEval_AcquireThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000346{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000347 if (tstate == NULL)
348 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
349 /* Check someone has called PyEval_InitThreads() to create the lock */
350 assert(gil_created());
351 take_gil(tstate);
352 if (PyThreadState_Swap(tstate) != NULL)
353 Py_FatalError(
354 "PyEval_AcquireThread: non-NULL old thread state");
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000355}
356
357void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000358PyEval_ReleaseThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000359{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000360 if (tstate == NULL)
361 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
362 if (PyThreadState_Swap(NULL) != tstate)
363 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
364 drop_gil(tstate);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000365}
Guido van Rossumfee3a2d2000-08-27 17:34:07 +0000366
367/* This function is called from PyOS_AfterFork to ensure that newly
368 created child processes don't hold locks referring to threads which
369 are not running in the child process. (This could also be done using
370 pthread_atfork mechanism, at least for the pthreads implementation.) */
371
372void
373PyEval_ReInitThreads(void)
374{
Martin v. Löwisbd928fe2011-10-14 10:20:37 +0200375 _Py_IDENTIFIER(_after_fork);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000376 PyObject *threading, *result;
377 PyThreadState *tstate = PyThreadState_GET();
Jesse Nollera8513972008-07-17 16:49:17 +0000378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000379 if (!gil_created())
380 return;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000381 recreate_gil();
382 pending_lock = PyThread_allocate_lock();
383 take_gil(tstate);
384 main_thread = PyThread_get_thread_ident();
Jesse Nollera8513972008-07-17 16:49:17 +0000385
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000386 /* Update the threading module with the new state.
387 */
388 tstate = PyThreadState_GET();
389 threading = PyMapping_GetItemString(tstate->interp->modules,
390 "threading");
391 if (threading == NULL) {
392 /* threading not imported */
393 PyErr_Clear();
394 return;
395 }
Martin v. Löwisafe55bb2011-10-09 10:38:36 +0200396 result = _PyObject_CallMethodId(threading, &PyId__after_fork, NULL);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000397 if (result == NULL)
398 PyErr_WriteUnraisable(threading);
399 else
400 Py_DECREF(result);
401 Py_DECREF(threading);
Guido van Rossumfee3a2d2000-08-27 17:34:07 +0000402}
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000403
404#else
Jeffrey Yasskin39370832010-05-03 19:29:34 +0000405static _Py_atomic_int eval_breaker = {0};
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000406static int pending_async_exc = 0;
407#endif /* WITH_THREAD */
408
409/* This function is used to signal that async exceptions are waiting to be
410 raised, therefore it is also useful in non-threaded builds. */
411
412void
413_PyEval_SignalAsyncExc(void)
414{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 SIGNAL_ASYNC_EXC();
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000416}
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000417
Guido van Rossumff4949e1992-08-05 19:58:53 +0000418/* Functions save_thread and restore_thread are always defined so
419 dynamically loaded modules needn't be compiled separately for use
420 with and without threads: */
421
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000422PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000423PyEval_SaveThread(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000424{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000425 PyThreadState *tstate = PyThreadState_Swap(NULL);
426 if (tstate == NULL)
427 Py_FatalError("PyEval_SaveThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000428#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000429 if (gil_created())
430 drop_gil(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000431#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000432 return tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000433}
434
435void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000436PyEval_RestoreThread(PyThreadState *tstate)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000437{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000438 if (tstate == NULL)
439 Py_FatalError("PyEval_RestoreThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000440#ifdef WITH_THREAD
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000441 if (gil_created()) {
442 int err = errno;
443 take_gil(tstate);
Antoine Pitrou0d5e52d2011-05-04 20:02:30 +0200444 /* _Py_Finalizing is protected by the GIL */
445 if (_Py_Finalizing && tstate != _Py_Finalizing) {
446 drop_gil(tstate);
447 PyThread_exit_thread();
448 assert(0); /* unreachable */
449 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000450 errno = err;
451 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000452#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000453 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000454}
455
456
Guido van Rossuma9672091994-09-14 13:31:22 +0000457/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
458 signal handlers or Mac I/O completion routines) can schedule calls
459 to a function to be called synchronously.
460 The synchronous function is called with one void* argument.
461 It should return 0 for success or -1 for failure -- failure should
462 be accompanied by an exception.
463
464 If registry succeeds, the registry function returns 0; if it fails
465 (e.g. due to too many pending calls) it returns -1 (without setting
466 an exception condition).
467
468 Note that because registry may occur from within signal handlers,
469 or other asynchronous events, calling malloc() is unsafe!
470
471#ifdef WITH_THREAD
472 Any thread can schedule pending calls, but only the main thread
473 will execute them.
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000474 There is no facility to schedule calls to a particular thread, but
475 that should be easy to change, should that ever be required. In
476 that case, the static variables here should go into the python
477 threadstate.
Guido van Rossuma9672091994-09-14 13:31:22 +0000478#endif
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000479*/
Guido van Rossuma9672091994-09-14 13:31:22 +0000480
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000481#ifdef WITH_THREAD
482
483/* The WITH_THREAD implementation is thread-safe. It allows
484 scheduling to be made from any thread, and even from an executing
485 callback.
486 */
487
488#define NPENDINGCALLS 32
489static struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000490 int (*func)(void *);
491 void *arg;
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000492} pendingcalls[NPENDINGCALLS];
493static int pendingfirst = 0;
494static int pendinglast = 0;
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000495
496int
497Py_AddPendingCall(int (*func)(void *), void *arg)
498{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000499 int i, j, result=0;
500 PyThread_type_lock lock = pending_lock;
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000501
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000502 /* try a few times for the lock. Since this mechanism is used
503 * for signal handling (on the main thread), there is a (slim)
504 * chance that a signal is delivered on the same thread while we
505 * hold the lock during the Py_MakePendingCalls() function.
506 * This avoids a deadlock in that case.
507 * Note that signals can be delivered on any thread. In particular,
508 * on Windows, a SIGINT is delivered on a system-created worker
509 * thread.
510 * We also check for lock being NULL, in the unlikely case that
511 * this function is called before any bytecode evaluation takes place.
512 */
513 if (lock != NULL) {
514 for (i = 0; i<100; i++) {
515 if (PyThread_acquire_lock(lock, NOWAIT_LOCK))
516 break;
517 }
518 if (i == 100)
519 return -1;
520 }
521
522 i = pendinglast;
523 j = (i + 1) % NPENDINGCALLS;
524 if (j == pendingfirst) {
525 result = -1; /* Queue full */
526 } else {
527 pendingcalls[i].func = func;
528 pendingcalls[i].arg = arg;
529 pendinglast = j;
530 }
531 /* signal main loop */
532 SIGNAL_PENDING_CALLS();
533 if (lock != NULL)
534 PyThread_release_lock(lock);
535 return result;
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000536}
537
538int
539Py_MakePendingCalls(void)
540{
Charles-François Natalif23339a2011-07-23 18:15:43 +0200541 static int busy = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000542 int i;
543 int r = 0;
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000545 if (!pending_lock) {
546 /* initial allocation of the lock */
547 pending_lock = PyThread_allocate_lock();
548 if (pending_lock == NULL)
549 return -1;
550 }
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000551
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000552 /* only service pending calls on main thread */
553 if (main_thread && PyThread_get_thread_ident() != main_thread)
554 return 0;
555 /* don't perform recursive pending calls */
Charles-François Natalif23339a2011-07-23 18:15:43 +0200556 if (busy)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000557 return 0;
Charles-François Natalif23339a2011-07-23 18:15:43 +0200558 busy = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000559 /* perform a bounded number of calls, in case of recursion */
560 for (i=0; i<NPENDINGCALLS; i++) {
561 int j;
562 int (*func)(void *);
563 void *arg = NULL;
564
565 /* pop one item off the queue while holding the lock */
566 PyThread_acquire_lock(pending_lock, WAIT_LOCK);
567 j = pendingfirst;
568 if (j == pendinglast) {
569 func = NULL; /* Queue empty */
570 } else {
571 func = pendingcalls[j].func;
572 arg = pendingcalls[j].arg;
573 pendingfirst = (j + 1) % NPENDINGCALLS;
574 }
575 if (pendingfirst != pendinglast)
576 SIGNAL_PENDING_CALLS();
577 else
578 UNSIGNAL_PENDING_CALLS();
579 PyThread_release_lock(pending_lock);
580 /* having released the lock, perform the callback */
581 if (func == NULL)
582 break;
583 r = func(arg);
584 if (r)
585 break;
586 }
Charles-François Natalif23339a2011-07-23 18:15:43 +0200587 busy = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000588 return r;
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000589}
590
591#else /* if ! defined WITH_THREAD */
592
593/*
594 WARNING! ASYNCHRONOUSLY EXECUTING CODE!
595 This code is used for signal handling in python that isn't built
596 with WITH_THREAD.
597 Don't use this implementation when Py_AddPendingCalls() can happen
598 on a different thread!
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000599
Guido van Rossuma9672091994-09-14 13:31:22 +0000600 There are two possible race conditions:
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000601 (1) nested asynchronous calls to Py_AddPendingCall()
602 (2) AddPendingCall() calls made while pending calls are being processed.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000603
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000604 (1) is very unlikely because typically signal delivery
605 is blocked during signal handling. So it should be impossible.
606 (2) is a real possibility.
Guido van Rossuma9672091994-09-14 13:31:22 +0000607 The current code is safe against (2), but not against (1).
608 The safety against (2) is derived from the fact that only one
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000609 thread is present, interrupted by signals, and that the critical
610 section is protected with the "busy" variable. On Windows, which
611 delivers SIGINT on a system thread, this does not hold and therefore
612 Windows really shouldn't use this version.
613 The two threads could theoretically wiggle around the "busy" variable.
Guido van Rossuma027efa1997-05-05 20:56:21 +0000614*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000615
Guido van Rossuma9672091994-09-14 13:31:22 +0000616#define NPENDINGCALLS 32
617static struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000618 int (*func)(void *);
619 void *arg;
Guido van Rossuma9672091994-09-14 13:31:22 +0000620} pendingcalls[NPENDINGCALLS];
621static volatile int pendingfirst = 0;
622static volatile int pendinglast = 0;
Benjamin Peterson08ec84c2010-05-30 14:49:32 +0000623static _Py_atomic_int pendingcalls_to_do = {0};
Guido van Rossuma9672091994-09-14 13:31:22 +0000624
625int
Thomas Wouters334fb892000-07-25 12:56:38 +0000626Py_AddPendingCall(int (*func)(void *), void *arg)
Guido van Rossuma9672091994-09-14 13:31:22 +0000627{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000628 static volatile int busy = 0;
629 int i, j;
630 /* XXX Begin critical section */
631 if (busy)
632 return -1;
633 busy = 1;
634 i = pendinglast;
635 j = (i + 1) % NPENDINGCALLS;
636 if (j == pendingfirst) {
637 busy = 0;
638 return -1; /* Queue full */
639 }
640 pendingcalls[i].func = func;
641 pendingcalls[i].arg = arg;
642 pendinglast = j;
Skip Montanarod581d772002-09-03 20:10:45 +0000643
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000644 SIGNAL_PENDING_CALLS();
645 busy = 0;
646 /* XXX End critical section */
647 return 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000648}
649
Guido van Rossum180d7b41994-09-29 09:45:57 +0000650int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000651Py_MakePendingCalls(void)
Guido van Rossuma9672091994-09-14 13:31:22 +0000652{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000653 static int busy = 0;
654 if (busy)
655 return 0;
656 busy = 1;
657 UNSIGNAL_PENDING_CALLS();
658 for (;;) {
659 int i;
660 int (*func)(void *);
661 void *arg;
662 i = pendingfirst;
663 if (i == pendinglast)
664 break; /* Queue empty */
665 func = pendingcalls[i].func;
666 arg = pendingcalls[i].arg;
667 pendingfirst = (i + 1) % NPENDINGCALLS;
668 if (func(arg) < 0) {
669 busy = 0;
670 SIGNAL_PENDING_CALLS(); /* We're not done yet */
671 return -1;
672 }
673 }
674 busy = 0;
675 return 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000676}
677
Benjamin Petersone5bf3832009-01-17 23:43:58 +0000678#endif /* WITH_THREAD */
679
Guido van Rossuma9672091994-09-14 13:31:22 +0000680
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000681/* The interpreter's recursion limit */
682
Hye-Shik Changb6fa2812005-04-04 15:49:02 +0000683#ifndef Py_DEFAULT_RECURSION_LIMIT
684#define Py_DEFAULT_RECURSION_LIMIT 1000
685#endif
686static int recursion_limit = Py_DEFAULT_RECURSION_LIMIT;
687int _Py_CheckRecursionLimit = Py_DEFAULT_RECURSION_LIMIT;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000688
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000689int
690Py_GetRecursionLimit(void)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000691{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 return recursion_limit;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000693}
694
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000695void
696Py_SetRecursionLimit(int new_limit)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000697{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000698 recursion_limit = new_limit;
699 _Py_CheckRecursionLimit = recursion_limit;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000700}
701
Armin Rigo2b3eb402003-10-28 12:05:48 +0000702/* the macro Py_EnterRecursiveCall() only calls _Py_CheckRecursiveCall()
703 if the recursion_depth reaches _Py_CheckRecursionLimit.
704 If USE_STACKCHECK, the macro decrements _Py_CheckRecursionLimit
705 to guarantee that _Py_CheckRecursiveCall() is regularly called.
706 Without USE_STACKCHECK, there is no need for this. */
707int
708_Py_CheckRecursiveCall(char *where)
709{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000710 PyThreadState *tstate = PyThreadState_GET();
Armin Rigo2b3eb402003-10-28 12:05:48 +0000711
712#ifdef USE_STACKCHECK
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000713 if (PyOS_CheckStack()) {
714 --tstate->recursion_depth;
715 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
716 return -1;
717 }
Armin Rigo2b3eb402003-10-28 12:05:48 +0000718#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000719 _Py_CheckRecursionLimit = recursion_limit;
720 if (tstate->recursion_critical)
721 /* Somebody asked that we don't check for recursion. */
722 return 0;
723 if (tstate->overflowed) {
724 if (tstate->recursion_depth > recursion_limit + 50) {
725 /* Overflowing while handling an overflow. Give up. */
726 Py_FatalError("Cannot recover from stack overflow.");
727 }
728 return 0;
729 }
730 if (tstate->recursion_depth > recursion_limit) {
731 --tstate->recursion_depth;
732 tstate->overflowed = 1;
733 PyErr_Format(PyExc_RuntimeError,
734 "maximum recursion depth exceeded%s",
735 where);
736 return -1;
737 }
738 return 0;
Armin Rigo2b3eb402003-10-28 12:05:48 +0000739}
740
Guido van Rossum374a9221991-04-04 10:40:29 +0000741/* Status code for main loop (reason for stack unwind) */
Raymond Hettinger7c958652004-04-06 10:11:10 +0000742enum why_code {
Stefan Krahb7e10102010-06-23 18:42:39 +0000743 WHY_NOT = 0x0001, /* No error */
744 WHY_EXCEPTION = 0x0002, /* Exception occurred */
745 WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */
746 WHY_RETURN = 0x0008, /* 'return' statement */
747 WHY_BREAK = 0x0010, /* 'break' statement */
748 WHY_CONTINUE = 0x0020, /* 'continue' statement */
749 WHY_YIELD = 0x0040, /* 'yield' operator */
750 WHY_SILENCED = 0x0080 /* Exception silenced by 'with' */
Raymond Hettinger7c958652004-04-06 10:11:10 +0000751};
Guido van Rossum374a9221991-04-04 10:40:29 +0000752
Benjamin Peterson87880242011-07-03 16:48:31 -0500753static void save_exc_state(PyThreadState *, PyFrameObject *);
754static void swap_exc_state(PyThreadState *, PyFrameObject *);
755static void restore_and_clear_exc_state(PyThreadState *, PyFrameObject *);
Collin Winter828f04a2007-08-31 00:04:24 +0000756static enum why_code do_raise(PyObject *, PyObject *);
Guido van Rossum0368b722007-05-11 16:50:42 +0000757static int unpack_iterable(PyObject *, int, int, PyObject **);
Guido van Rossum1aa14831997-01-21 05:34:20 +0000758
Jeffrey Yasskin008d8ef2008-12-06 17:09:27 +0000759/* Records whether tracing is on for any thread. Counts the number of
760 threads for which tstate->c_tracefunc is non-NULL, so if the value
761 is 0, we know we don't have to check this thread's c_tracefunc.
762 This speeds up the if statement in PyEval_EvalFrameEx() after
763 fast_next_opcode*/
764static int _Py_TracingPossible = 0;
765
Antoine Pitrou074e5ed2009-11-10 19:50:40 +0000766
Guido van Rossum374a9221991-04-04 10:40:29 +0000767
Guido van Rossumb209a111997-04-29 18:18:01 +0000768PyObject *
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000769PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000770{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 return PyEval_EvalCodeEx(co,
772 globals, locals,
773 (PyObject **)NULL, 0,
774 (PyObject **)NULL, 0,
775 (PyObject **)NULL, 0,
776 NULL, NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000777}
778
779
780/* Interpreter main loop */
781
Martin v. Löwis8d97e332004-06-27 15:43:12 +0000782PyObject *
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000783PyEval_EvalFrame(PyFrameObject *f) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000784 /* This is for backward compatibility with extension modules that
785 used this API; core interpreter code should call
786 PyEval_EvalFrameEx() */
787 return PyEval_EvalFrameEx(f, 0);
Phillip J. Eby0d6615f2005-08-02 00:46:46 +0000788}
789
790PyObject *
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000791PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
Guido van Rossum374a9221991-04-04 10:40:29 +0000792{
Guido van Rossum950361c1997-01-24 13:49:28 +0000793#ifdef DXPAIRS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 int lastopcode = 0;
Guido van Rossum950361c1997-01-24 13:49:28 +0000795#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 register PyObject **stack_pointer; /* Next free slot in value stack */
797 register unsigned char *next_instr;
798 register int opcode; /* Current opcode */
799 register int oparg; /* Current opcode argument, if any */
800 register enum why_code why; /* Reason for block stack unwind */
801 register int err; /* Error status -- nonzero if error */
802 register PyObject *x; /* Result object -- NULL if error */
803 register PyObject *v; /* Temporary objects popped off stack */
804 register PyObject *w;
805 register PyObject *u;
806 register PyObject *t;
807 register PyObject **fastlocals, **freevars;
808 PyObject *retval = NULL; /* Return value */
809 PyThreadState *tstate = PyThreadState_GET();
810 PyCodeObject *co;
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000811
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000812 /* when tracing we set things up so that
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000813
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000814 not (instr_lb <= current_bytecode_offset < instr_ub)
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000815
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000816 is true when the line being executed has changed. The
817 initial values are such as to make this false the first
818 time it is tested. */
819 int instr_ub = -1, instr_lb = 0, instr_prev = -1;
Michael W. Hudsondd32a912002-08-15 14:59:02 +0000820
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000821 unsigned char *first_instr;
822 PyObject *names;
823 PyObject *consts;
Guido van Rossum374a9221991-04-04 10:40:29 +0000824
Brett Cannon368b4b72012-04-02 12:17:59 -0400825#ifdef LLTRACE
Victor Stinner3c1e4812012-03-26 22:10:51 +0200826 _Py_IDENTIFIER(__ltrace__);
Brett Cannon368b4b72012-04-02 12:17:59 -0400827#endif
Victor Stinner3c1e4812012-03-26 22:10:51 +0200828
Antoine Pitroub52ec782009-01-25 16:34:23 +0000829/* Computed GOTOs, or
830 the-optimization-commonly-but-improperly-known-as-"threaded code"
831 using gcc's labels-as-values extension
832 (http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html).
833
834 The traditional bytecode evaluation loop uses a "switch" statement, which
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 decent compilers will optimize as a single indirect branch instruction
Antoine Pitroub52ec782009-01-25 16:34:23 +0000836 combined with a lookup table of jump addresses. However, since the
837 indirect jump instruction is shared by all opcodes, the CPU will have a
838 hard time making the right prediction for where to jump next (actually,
839 it will be always wrong except in the uncommon case of a sequence of
840 several identical opcodes).
841
842 "Threaded code" in contrast, uses an explicit jump table and an explicit
843 indirect jump instruction at the end of each opcode. Since the jump
844 instruction is at a different address for each opcode, the CPU will make a
845 separate prediction for each of these instructions, which is equivalent to
846 predicting the second opcode of each opcode pair. These predictions have
847 a much better chance to turn out valid, especially in small bytecode loops.
848
849 A mispredicted branch on a modern CPU flushes the whole pipeline and
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000850 can cost several CPU cycles (depending on the pipeline depth),
Antoine Pitroub52ec782009-01-25 16:34:23 +0000851 and potentially many more instructions (depending on the pipeline width).
852 A correctly predicted branch, however, is nearly free.
853
854 At the time of this writing, the "threaded code" version is up to 15-20%
855 faster than the normal "switch" version, depending on the compiler and the
856 CPU architecture.
857
858 We disable the optimization if DYNAMIC_EXECUTION_PROFILE is defined,
859 because it would render the measurements invalid.
860
861
862 NOTE: care must be taken that the compiler doesn't try to "optimize" the
863 indirect jumps by sharing them between all opcodes. Such optimizations
864 can be disabled on gcc by using the -fno-gcse flag (or possibly
865 -fno-crossjumping).
866*/
867
Antoine Pitrou042b1282010-08-13 21:15:58 +0000868#ifdef DYNAMIC_EXECUTION_PROFILE
Antoine Pitroub52ec782009-01-25 16:34:23 +0000869#undef USE_COMPUTED_GOTOS
Antoine Pitrou042b1282010-08-13 21:15:58 +0000870#define USE_COMPUTED_GOTOS 0
Antoine Pitroub52ec782009-01-25 16:34:23 +0000871#endif
872
Antoine Pitrou042b1282010-08-13 21:15:58 +0000873#ifdef HAVE_COMPUTED_GOTOS
874 #ifndef USE_COMPUTED_GOTOS
875 #define USE_COMPUTED_GOTOS 1
876 #endif
877#else
878 #if defined(USE_COMPUTED_GOTOS) && USE_COMPUTED_GOTOS
879 #error "Computed gotos are not supported on this compiler."
880 #endif
881 #undef USE_COMPUTED_GOTOS
882 #define USE_COMPUTED_GOTOS 0
883#endif
884
885#if USE_COMPUTED_GOTOS
Antoine Pitroub52ec782009-01-25 16:34:23 +0000886/* Import the static jump table */
887#include "opcode_targets.h"
888
889/* This macro is used when several opcodes defer to the same implementation
890 (e.g. SETUP_LOOP, SETUP_FINALLY) */
891#define TARGET_WITH_IMPL(op, impl) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000892 TARGET_##op: \
893 opcode = op; \
894 if (HAS_ARG(op)) \
895 oparg = NEXTARG(); \
896 case op: \
897 goto impl; \
Antoine Pitroub52ec782009-01-25 16:34:23 +0000898
899#define TARGET(op) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000900 TARGET_##op: \
901 opcode = op; \
902 if (HAS_ARG(op)) \
903 oparg = NEXTARG(); \
904 case op:
Antoine Pitroub52ec782009-01-25 16:34:23 +0000905
906
907#define DISPATCH() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000908 { \
909 if (!_Py_atomic_load_relaxed(&eval_breaker)) { \
910 FAST_DISPATCH(); \
911 } \
912 continue; \
913 }
Antoine Pitroub52ec782009-01-25 16:34:23 +0000914
915#ifdef LLTRACE
916#define FAST_DISPATCH() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000917 { \
918 if (!lltrace && !_Py_TracingPossible) { \
919 f->f_lasti = INSTR_OFFSET(); \
920 goto *opcode_targets[*next_instr++]; \
921 } \
922 goto fast_next_opcode; \
923 }
Antoine Pitroub52ec782009-01-25 16:34:23 +0000924#else
925#define FAST_DISPATCH() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000926 { \
927 if (!_Py_TracingPossible) { \
928 f->f_lasti = INSTR_OFFSET(); \
929 goto *opcode_targets[*next_instr++]; \
930 } \
931 goto fast_next_opcode; \
932 }
Antoine Pitroub52ec782009-01-25 16:34:23 +0000933#endif
934
935#else
936#define TARGET(op) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000937 case op:
Antoine Pitroub52ec782009-01-25 16:34:23 +0000938#define TARGET_WITH_IMPL(op, impl) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000939 /* silence compiler warnings about `impl` unused */ \
940 if (0) goto impl; \
941 case op:
Antoine Pitroub52ec782009-01-25 16:34:23 +0000942#define DISPATCH() continue
943#define FAST_DISPATCH() goto fast_next_opcode
944#endif
945
946
Neal Norwitza81d2202002-07-14 00:27:26 +0000947/* Tuple access macros */
948
949#ifndef Py_DEBUG
950#define GETITEM(v, i) PyTuple_GET_ITEM((PyTupleObject *)(v), (i))
951#else
952#define GETITEM(v, i) PyTuple_GetItem((v), (i))
953#endif
954
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000955#ifdef WITH_TSC
956/* Use Pentium timestamp counter to mark certain events:
957 inst0 -- beginning of switch statement for opcode dispatch
958 inst1 -- end of switch statement (may be skipped)
959 loop0 -- the top of the mainloop
Thomas Wouters477c8d52006-05-27 19:21:47 +0000960 loop1 -- place where control returns again to top of mainloop
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000961 (may be skipped)
962 intr1 -- beginning of long interruption
963 intr2 -- end of long interruption
964
965 Many opcodes call out to helper C functions. In some cases, the
966 time in those functions should be counted towards the time for the
967 opcode, but not in all cases. For example, a CALL_FUNCTION opcode
968 calls another Python function; there's no point in charge all the
969 bytecode executed by the called function to the caller.
970
971 It's hard to make a useful judgement statically. In the presence
972 of operator overloading, it's impossible to tell if a call will
973 execute new Python code or not.
974
975 It's a case-by-case judgement. I'll use intr1 for the following
976 cases:
977
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000978 IMPORT_STAR
979 IMPORT_FROM
980 CALL_FUNCTION (and friends)
981
982 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000983 uint64 inst0, inst1, loop0, loop1, intr0 = 0, intr1 = 0;
984 int ticked = 0;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000985
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 READ_TIMESTAMP(inst0);
987 READ_TIMESTAMP(inst1);
988 READ_TIMESTAMP(loop0);
989 READ_TIMESTAMP(loop1);
Michael W. Hudson800ba232004-08-12 18:19:17 +0000990
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000991 /* shut up the compiler */
992 opcode = 0;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000993#endif
994
Guido van Rossum374a9221991-04-04 10:40:29 +0000995/* Code access macros */
996
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000997#define INSTR_OFFSET() ((int)(next_instr - first_instr))
998#define NEXTOP() (*next_instr++)
999#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
1000#define PEEKARG() ((next_instr[2]<<8) + next_instr[1])
1001#define JUMPTO(x) (next_instr = first_instr + (x))
1002#define JUMPBY(x) (next_instr += (x))
Guido van Rossum374a9221991-04-04 10:40:29 +00001003
Raymond Hettingerf606f872003-03-16 03:11:04 +00001004/* OpCode prediction macros
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001005 Some opcodes tend to come in pairs thus making it possible to
1006 predict the second code when the first is run. For example,
1007 COMPARE_OP is often followed by JUMP_IF_FALSE or JUMP_IF_TRUE. And,
1008 those opcodes are often followed by a POP_TOP.
Raymond Hettingerf606f872003-03-16 03:11:04 +00001009
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001010 Verifying the prediction costs a single high-speed test of a register
1011 variable against a constant. If the pairing was good, then the
1012 processor's own internal branch predication has a high likelihood of
1013 success, resulting in a nearly zero-overhead transition to the
1014 next opcode. A successful prediction saves a trip through the eval-loop
1015 including its two unpredictable branches, the HAS_ARG test and the
1016 switch-case. Combined with the processor's internal branch prediction,
1017 a successful PREDICT has the effect of making the two opcodes run as if
1018 they were a single new opcode with the bodies combined.
Raymond Hettingerf606f872003-03-16 03:11:04 +00001019
Georg Brandl86b2fb92008-07-16 03:43:04 +00001020 If collecting opcode statistics, your choices are to either keep the
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001021 predictions turned-on and interpret the results as if some opcodes
1022 had been combined or turn-off predictions so that the opcode frequency
1023 counter updates for both opcodes.
Antoine Pitroub52ec782009-01-25 16:34:23 +00001024
1025 Opcode prediction is disabled with threaded code, since the latter allows
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 the CPU to record separate branch prediction information for each
1027 opcode.
Antoine Pitroub52ec782009-01-25 16:34:23 +00001028
Raymond Hettingerf606f872003-03-16 03:11:04 +00001029*/
1030
Antoine Pitrou042b1282010-08-13 21:15:58 +00001031#if defined(DYNAMIC_EXECUTION_PROFILE) || USE_COMPUTED_GOTOS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001032#define PREDICT(op) if (0) goto PRED_##op
1033#define PREDICTED(op) PRED_##op:
1034#define PREDICTED_WITH_ARG(op) PRED_##op:
Raymond Hettingera7216982004-02-08 19:59:27 +00001035#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001036#define PREDICT(op) if (*next_instr == op) goto PRED_##op
1037#define PREDICTED(op) PRED_##op: next_instr++
1038#define PREDICTED_WITH_ARG(op) PRED_##op: oparg = PEEKARG(); next_instr += 3
Antoine Pitroub52ec782009-01-25 16:34:23 +00001039#endif
1040
Raymond Hettingerf606f872003-03-16 03:11:04 +00001041
Guido van Rossum374a9221991-04-04 10:40:29 +00001042/* Stack manipulation macros */
1043
Martin v. Löwis18e16552006-02-15 17:27:45 +00001044/* The stack can grow at most MAXINT deep, as co_nlocals and
1045 co_stacksize are ints. */
Stefan Krahb7e10102010-06-23 18:42:39 +00001046#define STACK_LEVEL() ((int)(stack_pointer - f->f_valuestack))
1047#define EMPTY() (STACK_LEVEL() == 0)
1048#define TOP() (stack_pointer[-1])
1049#define SECOND() (stack_pointer[-2])
1050#define THIRD() (stack_pointer[-3])
1051#define FOURTH() (stack_pointer[-4])
1052#define PEEK(n) (stack_pointer[-(n)])
1053#define SET_TOP(v) (stack_pointer[-1] = (v))
1054#define SET_SECOND(v) (stack_pointer[-2] = (v))
1055#define SET_THIRD(v) (stack_pointer[-3] = (v))
1056#define SET_FOURTH(v) (stack_pointer[-4] = (v))
1057#define SET_VALUE(n, v) (stack_pointer[-(n)] = (v))
1058#define BASIC_STACKADJ(n) (stack_pointer += n)
1059#define BASIC_PUSH(v) (*stack_pointer++ = (v))
1060#define BASIC_POP() (*--stack_pointer)
Guido van Rossum374a9221991-04-04 10:40:29 +00001061
Guido van Rossum96a42c81992-01-12 02:29:51 +00001062#ifdef LLTRACE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001063#define PUSH(v) { (void)(BASIC_PUSH(v), \
Stefan Krahb7e10102010-06-23 18:42:39 +00001064 lltrace && prtrace(TOP(), "push")); \
1065 assert(STACK_LEVEL() <= co->co_stacksize); }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001066#define POP() ((void)(lltrace && prtrace(TOP(), "pop")), \
Stefan Krahb7e10102010-06-23 18:42:39 +00001067 BASIC_POP())
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001068#define STACKADJ(n) { (void)(BASIC_STACKADJ(n), \
Stefan Krahb7e10102010-06-23 18:42:39 +00001069 lltrace && prtrace(TOP(), "stackadj")); \
1070 assert(STACK_LEVEL() <= co->co_stacksize); }
Christian Heimes0449f632007-12-15 01:27:15 +00001071#define EXT_POP(STACK_POINTER) ((void)(lltrace && \
Stefan Krahb7e10102010-06-23 18:42:39 +00001072 prtrace((STACK_POINTER)[-1], "ext_pop")), \
1073 *--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +00001074#else
Stefan Krahb7e10102010-06-23 18:42:39 +00001075#define PUSH(v) BASIC_PUSH(v)
1076#define POP() BASIC_POP()
1077#define STACKADJ(n) BASIC_STACKADJ(n)
Guido van Rossumc2e20742006-02-27 22:32:47 +00001078#define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +00001079#endif
1080
Guido van Rossum681d79a1995-07-18 14:51:37 +00001081/* Local variable macros */
1082
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001083#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumcfbf1a32002-03-28 20:17:52 +00001084
1085/* The SETLOCAL() macro must not DECREF the local variable in-place and
1086 then store the new value; it must copy the old value to a temporary
1087 value, then store the new value, and then DECREF the temporary value.
1088 This is because it is possible that during the DECREF the frame is
1089 accessed by other code (e.g. a __del__ method or gc.collect()) and the
1090 variable would be pointing to already-freed memory. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001091#define SETLOCAL(i, value) do { PyObject *tmp = GETLOCAL(i); \
Stefan Krahb7e10102010-06-23 18:42:39 +00001092 GETLOCAL(i) = value; \
1093 Py_XDECREF(tmp); } while (0)
Guido van Rossum681d79a1995-07-18 14:51:37 +00001094
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001095
1096#define UNWIND_BLOCK(b) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097 while (STACK_LEVEL() > (b)->b_level) { \
1098 PyObject *v = POP(); \
1099 Py_XDECREF(v); \
1100 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001101
1102#define UNWIND_EXCEPT_HANDLER(b) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001103 { \
1104 PyObject *type, *value, *traceback; \
1105 assert(STACK_LEVEL() >= (b)->b_level + 3); \
1106 while (STACK_LEVEL() > (b)->b_level + 3) { \
1107 value = POP(); \
1108 Py_XDECREF(value); \
1109 } \
1110 type = tstate->exc_type; \
1111 value = tstate->exc_value; \
1112 traceback = tstate->exc_traceback; \
1113 tstate->exc_type = POP(); \
1114 tstate->exc_value = POP(); \
1115 tstate->exc_traceback = POP(); \
1116 Py_XDECREF(type); \
1117 Py_XDECREF(value); \
1118 Py_XDECREF(traceback); \
1119 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001120
Guido van Rossuma027efa1997-05-05 20:56:21 +00001121/* Start of code */
1122
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001123 /* push frame */
1124 if (Py_EnterRecursiveCall(""))
1125 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001127 tstate->frame = f;
Tim Peters5ca576e2001-06-18 22:08:13 +00001128
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001129 if (tstate->use_tracing) {
1130 if (tstate->c_tracefunc != NULL) {
1131 /* tstate->c_tracefunc, if defined, is a
1132 function that will be called on *every* entry
1133 to a code block. Its return value, if not
1134 None, is a function that will be called at
1135 the start of each executed line of code.
1136 (Actually, the function must return itself
1137 in order to continue tracing.) The trace
1138 functions are called with three arguments:
1139 a pointer to the current frame, a string
1140 indicating why the function is called, and
1141 an argument which depends on the situation.
1142 The global trace function is also called
1143 whenever an exception is detected. */
1144 if (call_trace_protected(tstate->c_tracefunc,
1145 tstate->c_traceobj,
1146 f, PyTrace_CALL, Py_None)) {
1147 /* Trace function raised an error */
1148 goto exit_eval_frame;
1149 }
1150 }
1151 if (tstate->c_profilefunc != NULL) {
1152 /* Similar for c_profilefunc, except it needn't
1153 return itself and isn't called for "line" events */
1154 if (call_trace_protected(tstate->c_profilefunc,
1155 tstate->c_profileobj,
1156 f, PyTrace_CALL, Py_None)) {
1157 /* Profile function raised an error */
1158 goto exit_eval_frame;
1159 }
1160 }
1161 }
Neil Schemenauer6c0f2002001-09-04 19:03:35 +00001162
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001163 co = f->f_code;
1164 names = co->co_names;
1165 consts = co->co_consts;
1166 fastlocals = f->f_localsplus;
1167 freevars = f->f_localsplus + co->co_nlocals;
1168 first_instr = (unsigned char*) PyBytes_AS_STRING(co->co_code);
1169 /* An explanation is in order for the next line.
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001170
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001171 f->f_lasti now refers to the index of the last instruction
1172 executed. You might think this was obvious from the name, but
1173 this wasn't always true before 2.3! PyFrame_New now sets
1174 f->f_lasti to -1 (i.e. the index *before* the first instruction)
1175 and YIELD_VALUE doesn't fiddle with f_lasti any more. So this
1176 does work. Promise.
Benjamin Peterson2afe6ae2012-03-15 15:37:39 -05001177 YIELD_FROM sets f_lasti to itself, in order to repeated yield
1178 multiple values.
Thomas Wouters902d6eb2007-01-09 23:18:33 +00001179
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001180 When the PREDICT() macros are enabled, some opcode pairs follow in
1181 direct succession without updating f->f_lasti. A successful
1182 prediction effectively links the two codes together as if they
1183 were a single new opcode; accordingly,f->f_lasti will point to
1184 the first code in the pair (for instance, GET_ITER followed by
1185 FOR_ITER is effectively a single opcode and f->f_lasti will point
1186 at to the beginning of the combined pair.)
1187 */
1188 next_instr = first_instr + f->f_lasti + 1;
1189 stack_pointer = f->f_stacktop;
1190 assert(stack_pointer != NULL);
1191 f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001193 if (co->co_flags & CO_GENERATOR && !throwflag) {
1194 if (f->f_exc_type != NULL && f->f_exc_type != Py_None) {
1195 /* We were in an except handler when we left,
1196 restore the exception state which was put aside
1197 (see YIELD_VALUE). */
Benjamin Peterson87880242011-07-03 16:48:31 -05001198 swap_exc_state(tstate, f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 }
Benjamin Peterson87880242011-07-03 16:48:31 -05001200 else
1201 save_exc_state(tstate, f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001203
Tim Peters5ca576e2001-06-18 22:08:13 +00001204#ifdef LLTRACE
Victor Stinner3c1e4812012-03-26 22:10:51 +02001205 lltrace = _PyDict_GetItemId(f->f_globals, &PyId___ltrace__) != NULL;
Tim Peters5ca576e2001-06-18 22:08:13 +00001206#endif
Guido van Rossumac7be682001-01-17 15:42:30 +00001207
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001208 why = WHY_NOT;
1209 err = 0;
1210 x = Py_None; /* Not a reference, just anything non-NULL */
1211 w = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +00001212
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001213 if (throwflag) { /* support for generator.throw() */
1214 why = WHY_EXCEPTION;
1215 goto on_error;
1216 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001217
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001218 for (;;) {
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00001219#ifdef WITH_TSC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001220 if (inst1 == 0) {
1221 /* Almost surely, the opcode executed a break
1222 or a continue, preventing inst1 from being set
1223 on the way out of the loop.
1224 */
1225 READ_TIMESTAMP(inst1);
1226 loop1 = inst1;
1227 }
1228 dump_tsc(opcode, ticked, inst0, inst1, loop0, loop1,
1229 intr0, intr1);
1230 ticked = 0;
1231 inst1 = 0;
1232 intr0 = 0;
1233 intr1 = 0;
1234 READ_TIMESTAMP(loop0);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00001235#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001236 assert(stack_pointer >= f->f_valuestack); /* else underflow */
1237 assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */
Michael W. Hudsondd32a912002-08-15 14:59:02 +00001238
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001239 /* Do periodic things. Doing this every time through
1240 the loop would add too much overhead, so we do it
1241 only every Nth instruction. We also do it if
1242 ``pendingcalls_to_do'' is set, i.e. when an asynchronous
1243 event needs attention (e.g. a signal handler or
1244 async I/O handler); see Py_AddPendingCall() and
1245 Py_MakePendingCalls() above. */
Guido van Rossumac7be682001-01-17 15:42:30 +00001246
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001247 if (_Py_atomic_load_relaxed(&eval_breaker)) {
1248 if (*next_instr == SETUP_FINALLY) {
1249 /* Make the last opcode before
Ezio Melotti13925002011-03-16 11:05:33 +02001250 a try: finally: block uninterruptible. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001251 goto fast_next_opcode;
1252 }
1253 tstate->tick_counter++;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00001254#ifdef WITH_TSC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001255 ticked = 1;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00001256#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001257 if (_Py_atomic_load_relaxed(&pendingcalls_to_do)) {
1258 if (Py_MakePendingCalls() < 0) {
1259 why = WHY_EXCEPTION;
1260 goto on_error;
1261 }
1262 }
Guido van Rossume59214e1994-08-30 08:01:59 +00001263#ifdef WITH_THREAD
Benjamin Petersond2be5b42010-09-10 22:47:02 +00001264 if (_Py_atomic_load_relaxed(&gil_drop_request)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001265 /* Give another thread a chance */
1266 if (PyThreadState_Swap(NULL) != tstate)
1267 Py_FatalError("ceval: tstate mix-up");
1268 drop_gil(tstate);
1269
1270 /* Other threads may run now */
1271
1272 take_gil(tstate);
1273 if (PyThreadState_Swap(tstate) != NULL)
1274 Py_FatalError("ceval: orphan tstate");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001275 }
Benjamin Petersond2be5b42010-09-10 22:47:02 +00001276#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001277 /* Check for asynchronous exceptions. */
1278 if (tstate->async_exc != NULL) {
1279 x = tstate->async_exc;
1280 tstate->async_exc = NULL;
1281 UNSIGNAL_ASYNC_EXC();
1282 PyErr_SetNone(x);
1283 Py_DECREF(x);
1284 why = WHY_EXCEPTION;
1285 goto on_error;
1286 }
1287 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001288
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001289 fast_next_opcode:
1290 f->f_lasti = INSTR_OFFSET();
Guido van Rossumac7be682001-01-17 15:42:30 +00001291
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001292 /* line-by-line tracing support */
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001293
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001294 if (_Py_TracingPossible &&
1295 tstate->c_tracefunc != NULL && !tstate->tracing) {
1296 /* see maybe_call_line_trace
1297 for expository comments */
1298 f->f_stacktop = stack_pointer;
Tim Peters8a5c3c72004-04-05 19:36:21 +00001299
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001300 err = maybe_call_line_trace(tstate->c_tracefunc,
1301 tstate->c_traceobj,
1302 f, &instr_lb, &instr_ub,
1303 &instr_prev);
1304 /* Reload possibly changed frame fields */
1305 JUMPTO(f->f_lasti);
1306 if (f->f_stacktop != NULL) {
1307 stack_pointer = f->f_stacktop;
1308 f->f_stacktop = NULL;
1309 }
1310 if (err) {
1311 /* trace function raised an exception */
1312 goto on_error;
1313 }
1314 }
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001315
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001316 /* Extract opcode and argument */
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001318 opcode = NEXTOP();
1319 oparg = 0; /* allows oparg to be stored in a register because
1320 it doesn't have to be remembered across a full loop */
1321 if (HAS_ARG(opcode))
1322 oparg = NEXTARG();
Stefan Krahb7e10102010-06-23 18:42:39 +00001323 dispatch_opcode:
Guido van Rossum950361c1997-01-24 13:49:28 +00001324#ifdef DYNAMIC_EXECUTION_PROFILE
1325#ifdef DXPAIRS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 dxpairs[lastopcode][opcode]++;
1327 lastopcode = opcode;
Guido van Rossum950361c1997-01-24 13:49:28 +00001328#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001329 dxp[opcode]++;
Guido van Rossum950361c1997-01-24 13:49:28 +00001330#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001331
Guido van Rossum96a42c81992-01-12 02:29:51 +00001332#ifdef LLTRACE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001333 /* Instruction tracing */
Guido van Rossumac7be682001-01-17 15:42:30 +00001334
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001335 if (lltrace) {
1336 if (HAS_ARG(opcode)) {
1337 printf("%d: %d, %d\n",
1338 f->f_lasti, opcode, oparg);
1339 }
1340 else {
1341 printf("%d: %d\n",
1342 f->f_lasti, opcode);
1343 }
1344 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001345#endif
Michael W. Hudsondd32a912002-08-15 14:59:02 +00001346
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 /* Main switch on opcode */
1348 READ_TIMESTAMP(inst0);
Jeremy Hylton52820442001-01-03 23:52:36 +00001349
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001350 switch (opcode) {
Guido van Rossumac7be682001-01-17 15:42:30 +00001351
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001352 /* BEWARE!
1353 It is essential that any operation that fails sets either
1354 x to NULL, err to nonzero, or why to anything but WHY_NOT,
1355 and that no operation that succeeds does this! */
Guido van Rossumac7be682001-01-17 15:42:30 +00001356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001357 TARGET(NOP)
1358 FAST_DISPATCH();
Raymond Hettinger9c18e812004-06-21 16:31:15 +00001359
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001360 TARGET(LOAD_FAST)
1361 x = GETLOCAL(oparg);
1362 if (x != NULL) {
1363 Py_INCREF(x);
1364 PUSH(x);
1365 FAST_DISPATCH();
1366 }
1367 format_exc_check_arg(PyExc_UnboundLocalError,
1368 UNBOUNDLOCAL_ERROR_MSG,
1369 PyTuple_GetItem(co->co_varnames, oparg));
1370 break;
Neil Schemenauer63543862002-02-17 19:10:14 +00001371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 TARGET(LOAD_CONST)
1373 x = GETITEM(consts, oparg);
1374 Py_INCREF(x);
1375 PUSH(x);
1376 FAST_DISPATCH();
Neil Schemenauer63543862002-02-17 19:10:14 +00001377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001378 PREDICTED_WITH_ARG(STORE_FAST);
1379 TARGET(STORE_FAST)
1380 v = POP();
1381 SETLOCAL(oparg, v);
1382 FAST_DISPATCH();
Neil Schemenauer63543862002-02-17 19:10:14 +00001383
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001384 TARGET(POP_TOP)
1385 v = POP();
1386 Py_DECREF(v);
1387 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001388
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001389 TARGET(ROT_TWO)
1390 v = TOP();
1391 w = SECOND();
1392 SET_TOP(w);
1393 SET_SECOND(v);
1394 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001395
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001396 TARGET(ROT_THREE)
1397 v = TOP();
1398 w = SECOND();
1399 x = THIRD();
1400 SET_TOP(w);
1401 SET_SECOND(x);
1402 SET_THIRD(v);
1403 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001404
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001405 TARGET(DUP_TOP)
1406 v = TOP();
1407 Py_INCREF(v);
1408 PUSH(v);
1409 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001410
Antoine Pitrou74a69fa2010-09-04 18:43:52 +00001411 TARGET(DUP_TOP_TWO)
1412 x = TOP();
1413 Py_INCREF(x);
1414 w = SECOND();
1415 Py_INCREF(w);
1416 STACKADJ(2);
1417 SET_TOP(x);
1418 SET_SECOND(w);
1419 FAST_DISPATCH();
Thomas Wouters434d0822000-08-24 20:11:32 +00001420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001421 TARGET(UNARY_POSITIVE)
1422 v = TOP();
1423 x = PyNumber_Positive(v);
1424 Py_DECREF(v);
1425 SET_TOP(x);
1426 if (x != NULL) DISPATCH();
1427 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001428
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001429 TARGET(UNARY_NEGATIVE)
1430 v = TOP();
1431 x = PyNumber_Negative(v);
1432 Py_DECREF(v);
1433 SET_TOP(x);
1434 if (x != NULL) DISPATCH();
1435 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001436
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001437 TARGET(UNARY_NOT)
1438 v = TOP();
1439 err = PyObject_IsTrue(v);
1440 Py_DECREF(v);
1441 if (err == 0) {
1442 Py_INCREF(Py_True);
1443 SET_TOP(Py_True);
1444 DISPATCH();
1445 }
1446 else if (err > 0) {
1447 Py_INCREF(Py_False);
1448 SET_TOP(Py_False);
1449 err = 0;
1450 DISPATCH();
1451 }
1452 STACKADJ(-1);
1453 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001454
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001455 TARGET(UNARY_INVERT)
1456 v = TOP();
1457 x = PyNumber_Invert(v);
1458 Py_DECREF(v);
1459 SET_TOP(x);
1460 if (x != NULL) DISPATCH();
1461 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001462
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001463 TARGET(BINARY_POWER)
1464 w = POP();
1465 v = TOP();
1466 x = PyNumber_Power(v, w, Py_None);
1467 Py_DECREF(v);
1468 Py_DECREF(w);
1469 SET_TOP(x);
1470 if (x != NULL) DISPATCH();
1471 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001472
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001473 TARGET(BINARY_MULTIPLY)
1474 w = POP();
1475 v = TOP();
1476 x = PyNumber_Multiply(v, w);
1477 Py_DECREF(v);
1478 Py_DECREF(w);
1479 SET_TOP(x);
1480 if (x != NULL) DISPATCH();
1481 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001482
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001483 TARGET(BINARY_TRUE_DIVIDE)
1484 w = POP();
1485 v = TOP();
1486 x = PyNumber_TrueDivide(v, w);
1487 Py_DECREF(v);
1488 Py_DECREF(w);
1489 SET_TOP(x);
1490 if (x != NULL) DISPATCH();
1491 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001492
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001493 TARGET(BINARY_FLOOR_DIVIDE)
1494 w = POP();
1495 v = TOP();
1496 x = PyNumber_FloorDivide(v, w);
1497 Py_DECREF(v);
1498 Py_DECREF(w);
1499 SET_TOP(x);
1500 if (x != NULL) DISPATCH();
1501 break;
Guido van Rossum4668b002001-08-08 05:00:18 +00001502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001503 TARGET(BINARY_MODULO)
1504 w = POP();
1505 v = TOP();
1506 if (PyUnicode_CheckExact(v))
1507 x = PyUnicode_Format(v, w);
1508 else
1509 x = PyNumber_Remainder(v, w);
1510 Py_DECREF(v);
1511 Py_DECREF(w);
1512 SET_TOP(x);
1513 if (x != NULL) DISPATCH();
1514 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001515
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001516 TARGET(BINARY_ADD)
1517 w = POP();
1518 v = TOP();
Victor Stinnerd2a915d2011-10-02 20:34:20 +02001519 if (PyUnicode_CheckExact(v) &&
1520 PyUnicode_CheckExact(w)) {
1521 x = unicode_concatenate(v, w, f, next_instr);
1522 /* unicode_concatenate consumed the ref to v */
1523 goto skip_decref_vx;
1524 }
1525 else {
1526 x = PyNumber_Add(v, w);
1527 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 Py_DECREF(v);
Victor Stinnerd2a915d2011-10-02 20:34:20 +02001529 skip_decref_vx:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001530 Py_DECREF(w);
1531 SET_TOP(x);
1532 if (x != NULL) DISPATCH();
1533 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001534
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001535 TARGET(BINARY_SUBTRACT)
1536 w = POP();
1537 v = TOP();
1538 x = PyNumber_Subtract(v, w);
1539 Py_DECREF(v);
1540 Py_DECREF(w);
1541 SET_TOP(x);
1542 if (x != NULL) DISPATCH();
1543 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001545 TARGET(BINARY_SUBSCR)
1546 w = POP();
1547 v = TOP();
1548 x = PyObject_GetItem(v, w);
1549 Py_DECREF(v);
1550 Py_DECREF(w);
1551 SET_TOP(x);
1552 if (x != NULL) DISPATCH();
1553 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001554
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001555 TARGET(BINARY_LSHIFT)
1556 w = POP();
1557 v = TOP();
1558 x = PyNumber_Lshift(v, w);
1559 Py_DECREF(v);
1560 Py_DECREF(w);
1561 SET_TOP(x);
1562 if (x != NULL) DISPATCH();
1563 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001565 TARGET(BINARY_RSHIFT)
1566 w = POP();
1567 v = TOP();
1568 x = PyNumber_Rshift(v, w);
1569 Py_DECREF(v);
1570 Py_DECREF(w);
1571 SET_TOP(x);
1572 if (x != NULL) DISPATCH();
1573 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001575 TARGET(BINARY_AND)
1576 w = POP();
1577 v = TOP();
1578 x = PyNumber_And(v, w);
1579 Py_DECREF(v);
1580 Py_DECREF(w);
1581 SET_TOP(x);
1582 if (x != NULL) DISPATCH();
1583 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001584
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001585 TARGET(BINARY_XOR)
1586 w = POP();
1587 v = TOP();
1588 x = PyNumber_Xor(v, w);
1589 Py_DECREF(v);
1590 Py_DECREF(w);
1591 SET_TOP(x);
1592 if (x != NULL) DISPATCH();
1593 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001594
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001595 TARGET(BINARY_OR)
1596 w = POP();
1597 v = TOP();
1598 x = PyNumber_Or(v, w);
1599 Py_DECREF(v);
1600 Py_DECREF(w);
1601 SET_TOP(x);
1602 if (x != NULL) DISPATCH();
1603 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001604
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001605 TARGET(LIST_APPEND)
1606 w = POP();
1607 v = PEEK(oparg);
1608 err = PyList_Append(v, w);
1609 Py_DECREF(w);
1610 if (err == 0) {
1611 PREDICT(JUMP_ABSOLUTE);
1612 DISPATCH();
1613 }
1614 break;
Raymond Hettingerdd80f762004-03-07 07:31:06 +00001615
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001616 TARGET(SET_ADD)
1617 w = POP();
1618 v = stack_pointer[-oparg];
1619 err = PySet_Add(v, w);
1620 Py_DECREF(w);
1621 if (err == 0) {
1622 PREDICT(JUMP_ABSOLUTE);
1623 DISPATCH();
1624 }
1625 break;
Nick Coghlan650f0d02007-04-15 12:05:43 +00001626
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001627 TARGET(INPLACE_POWER)
1628 w = POP();
1629 v = TOP();
1630 x = PyNumber_InPlacePower(v, w, Py_None);
1631 Py_DECREF(v);
1632 Py_DECREF(w);
1633 SET_TOP(x);
1634 if (x != NULL) DISPATCH();
1635 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001636
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001637 TARGET(INPLACE_MULTIPLY)
1638 w = POP();
1639 v = TOP();
1640 x = PyNumber_InPlaceMultiply(v, w);
1641 Py_DECREF(v);
1642 Py_DECREF(w);
1643 SET_TOP(x);
1644 if (x != NULL) DISPATCH();
1645 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 TARGET(INPLACE_TRUE_DIVIDE)
1648 w = POP();
1649 v = TOP();
1650 x = PyNumber_InPlaceTrueDivide(v, w);
1651 Py_DECREF(v);
1652 Py_DECREF(w);
1653 SET_TOP(x);
1654 if (x != NULL) DISPATCH();
1655 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001656
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001657 TARGET(INPLACE_FLOOR_DIVIDE)
1658 w = POP();
1659 v = TOP();
1660 x = PyNumber_InPlaceFloorDivide(v, w);
1661 Py_DECREF(v);
1662 Py_DECREF(w);
1663 SET_TOP(x);
1664 if (x != NULL) DISPATCH();
1665 break;
Guido van Rossum4668b002001-08-08 05:00:18 +00001666
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 TARGET(INPLACE_MODULO)
1668 w = POP();
1669 v = TOP();
1670 x = PyNumber_InPlaceRemainder(v, w);
1671 Py_DECREF(v);
1672 Py_DECREF(w);
1673 SET_TOP(x);
1674 if (x != NULL) DISPATCH();
1675 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001676
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001677 TARGET(INPLACE_ADD)
1678 w = POP();
1679 v = TOP();
Victor Stinnerd2a915d2011-10-02 20:34:20 +02001680 if (PyUnicode_CheckExact(v) &&
1681 PyUnicode_CheckExact(w)) {
1682 x = unicode_concatenate(v, w, f, next_instr);
1683 /* unicode_concatenate consumed the ref to v */
1684 goto skip_decref_v;
1685 }
1686 else {
1687 x = PyNumber_InPlaceAdd(v, w);
1688 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001689 Py_DECREF(v);
Victor Stinnerd2a915d2011-10-02 20:34:20 +02001690 skip_decref_v:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001691 Py_DECREF(w);
1692 SET_TOP(x);
1693 if (x != NULL) DISPATCH();
1694 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001695
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001696 TARGET(INPLACE_SUBTRACT)
1697 w = POP();
1698 v = TOP();
1699 x = PyNumber_InPlaceSubtract(v, w);
1700 Py_DECREF(v);
1701 Py_DECREF(w);
1702 SET_TOP(x);
1703 if (x != NULL) DISPATCH();
1704 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001705
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001706 TARGET(INPLACE_LSHIFT)
1707 w = POP();
1708 v = TOP();
1709 x = PyNumber_InPlaceLshift(v, w);
1710 Py_DECREF(v);
1711 Py_DECREF(w);
1712 SET_TOP(x);
1713 if (x != NULL) DISPATCH();
1714 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001715
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001716 TARGET(INPLACE_RSHIFT)
1717 w = POP();
1718 v = TOP();
1719 x = PyNumber_InPlaceRshift(v, w);
1720 Py_DECREF(v);
1721 Py_DECREF(w);
1722 SET_TOP(x);
1723 if (x != NULL) DISPATCH();
1724 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001725
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001726 TARGET(INPLACE_AND)
1727 w = POP();
1728 v = TOP();
1729 x = PyNumber_InPlaceAnd(v, w);
1730 Py_DECREF(v);
1731 Py_DECREF(w);
1732 SET_TOP(x);
1733 if (x != NULL) DISPATCH();
1734 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001735
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001736 TARGET(INPLACE_XOR)
1737 w = POP();
1738 v = TOP();
1739 x = PyNumber_InPlaceXor(v, w);
1740 Py_DECREF(v);
1741 Py_DECREF(w);
1742 SET_TOP(x);
1743 if (x != NULL) DISPATCH();
1744 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001745
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001746 TARGET(INPLACE_OR)
1747 w = POP();
1748 v = TOP();
1749 x = PyNumber_InPlaceOr(v, w);
1750 Py_DECREF(v);
1751 Py_DECREF(w);
1752 SET_TOP(x);
1753 if (x != NULL) DISPATCH();
1754 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001755
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001756 TARGET(STORE_SUBSCR)
1757 w = TOP();
1758 v = SECOND();
1759 u = THIRD();
1760 STACKADJ(-3);
1761 /* v[w] = u */
1762 err = PyObject_SetItem(v, w, u);
1763 Py_DECREF(u);
1764 Py_DECREF(v);
1765 Py_DECREF(w);
1766 if (err == 0) DISPATCH();
1767 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001768
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001769 TARGET(DELETE_SUBSCR)
1770 w = TOP();
1771 v = SECOND();
1772 STACKADJ(-2);
1773 /* del v[w] */
1774 err = PyObject_DelItem(v, w);
1775 Py_DECREF(v);
1776 Py_DECREF(w);
1777 if (err == 0) DISPATCH();
1778 break;
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001780 TARGET(PRINT_EXPR)
1781 v = POP();
1782 w = PySys_GetObject("displayhook");
1783 if (w == NULL) {
1784 PyErr_SetString(PyExc_RuntimeError,
1785 "lost sys.displayhook");
1786 err = -1;
1787 x = NULL;
1788 }
1789 if (err == 0) {
1790 x = PyTuple_Pack(1, v);
1791 if (x == NULL)
1792 err = -1;
1793 }
1794 if (err == 0) {
1795 w = PyEval_CallObject(w, x);
1796 Py_XDECREF(w);
1797 if (w == NULL)
1798 err = -1;
1799 }
1800 Py_DECREF(v);
1801 Py_XDECREF(x);
1802 break;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001803
Thomas Wouters434d0822000-08-24 20:11:32 +00001804#ifdef CASE_TOO_BIG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001805 default: switch (opcode) {
Thomas Wouters434d0822000-08-24 20:11:32 +00001806#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001807 TARGET(RAISE_VARARGS)
1808 v = w = NULL;
1809 switch (oparg) {
1810 case 2:
1811 v = POP(); /* cause */
1812 case 1:
1813 w = POP(); /* exc */
1814 case 0: /* Fallthrough */
1815 why = do_raise(w, v);
1816 break;
1817 default:
1818 PyErr_SetString(PyExc_SystemError,
1819 "bad RAISE_VARARGS oparg");
1820 why = WHY_EXCEPTION;
1821 break;
1822 }
1823 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001824
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001825 TARGET(STORE_LOCALS)
1826 x = POP();
1827 v = f->f_locals;
1828 Py_XDECREF(v);
1829 f->f_locals = x;
1830 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001831
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001832 TARGET(RETURN_VALUE)
1833 retval = POP();
1834 why = WHY_RETURN;
1835 goto fast_block_end;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001836
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001837 TARGET(YIELD_FROM)
1838 u = POP();
Benjamin Peterson2afe6ae2012-03-15 15:37:39 -05001839 x = TOP();
1840 /* send u to x */
1841 if (PyGen_CheckExact(x)) {
1842 retval = _PyGen_Send((PyGenObject *)x, u);
1843 } else {
Benjamin Peterson302e7902012-03-20 23:17:04 -04001844 _Py_IDENTIFIER(send);
Benjamin Peterson2afe6ae2012-03-15 15:37:39 -05001845 if (u == Py_None)
1846 retval = PyIter_Next(x);
1847 else
Benjamin Peterson302e7902012-03-20 23:17:04 -04001848 retval = _PyObject_CallMethodId(x, &PyId_send, "O", u);
Benjamin Peterson2afe6ae2012-03-15 15:37:39 -05001849 }
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001850 Py_DECREF(u);
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001851 if (!retval) {
Benjamin Peterson2afe6ae2012-03-15 15:37:39 -05001852 PyObject *val;
1853 x = POP(); /* Remove iter from stack */
1854 Py_DECREF(x);
1855 err = PyGen_FetchStopIterationValue(&val);
1856 if (err < 0) {
1857 x = NULL;
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001858 break;
1859 }
Benjamin Peterson2afe6ae2012-03-15 15:37:39 -05001860 x = val;
1861 PUSH(x);
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001862 continue;
1863 }
Benjamin Peterson2afe6ae2012-03-15 15:37:39 -05001864 /* x remains on stack, retval is value to be yielded */
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001865 f->f_stacktop = stack_pointer;
1866 why = WHY_YIELD;
Benjamin Peterson2afe6ae2012-03-15 15:37:39 -05001867 /* and repeat... */
1868 f->f_lasti--;
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001869 goto fast_yield;
1870
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001871 TARGET(YIELD_VALUE)
1872 retval = POP();
1873 f->f_stacktop = stack_pointer;
1874 why = WHY_YIELD;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001875 goto fast_yield;
Tim Peters5ca576e2001-06-18 22:08:13 +00001876
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001877 TARGET(POP_EXCEPT)
1878 {
1879 PyTryBlock *b = PyFrame_BlockPop(f);
1880 if (b->b_type != EXCEPT_HANDLER) {
1881 PyErr_SetString(PyExc_SystemError,
1882 "popped block is not an except handler");
1883 why = WHY_EXCEPTION;
1884 break;
1885 }
1886 UNWIND_EXCEPT_HANDLER(b);
1887 }
1888 DISPATCH();
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001889
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001890 TARGET(POP_BLOCK)
1891 {
1892 PyTryBlock *b = PyFrame_BlockPop(f);
1893 UNWIND_BLOCK(b);
1894 }
1895 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 PREDICTED(END_FINALLY);
1898 TARGET(END_FINALLY)
1899 v = POP();
1900 if (PyLong_Check(v)) {
1901 why = (enum why_code) PyLong_AS_LONG(v);
1902 assert(why != WHY_YIELD);
1903 if (why == WHY_RETURN ||
1904 why == WHY_CONTINUE)
1905 retval = POP();
1906 if (why == WHY_SILENCED) {
1907 /* An exception was silenced by 'with', we must
1908 manually unwind the EXCEPT_HANDLER block which was
1909 created when the exception was caught, otherwise
1910 the stack will be in an inconsistent state. */
1911 PyTryBlock *b = PyFrame_BlockPop(f);
1912 assert(b->b_type == EXCEPT_HANDLER);
1913 UNWIND_EXCEPT_HANDLER(b);
1914 why = WHY_NOT;
1915 }
1916 }
1917 else if (PyExceptionClass_Check(v)) {
1918 w = POP();
1919 u = POP();
1920 PyErr_Restore(v, w, u);
1921 why = WHY_RERAISE;
1922 break;
1923 }
1924 else if (v != Py_None) {
1925 PyErr_SetString(PyExc_SystemError,
1926 "'finally' pops bad exception");
1927 why = WHY_EXCEPTION;
1928 }
1929 Py_DECREF(v);
1930 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001932 TARGET(LOAD_BUILD_CLASS)
Victor Stinner3c1e4812012-03-26 22:10:51 +02001933 {
1934 _Py_IDENTIFIER(__build_class__);
1935 x = _PyDict_GetItemId(f->f_builtins, &PyId___build_class__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001936 if (x == NULL) {
1937 PyErr_SetString(PyExc_ImportError,
1938 "__build_class__ not found");
1939 break;
1940 }
1941 Py_INCREF(x);
1942 PUSH(x);
1943 break;
Victor Stinner3c1e4812012-03-26 22:10:51 +02001944 }
Guido van Rossumac7be682001-01-17 15:42:30 +00001945
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001946 TARGET(STORE_NAME)
1947 w = GETITEM(names, oparg);
1948 v = POP();
1949 if ((x = f->f_locals) != NULL) {
1950 if (PyDict_CheckExact(x))
1951 err = PyDict_SetItem(x, w, v);
1952 else
1953 err = PyObject_SetItem(x, w, v);
1954 Py_DECREF(v);
1955 if (err == 0) DISPATCH();
1956 break;
1957 }
1958 PyErr_Format(PyExc_SystemError,
1959 "no locals found when storing %R", w);
1960 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001961
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001962 TARGET(DELETE_NAME)
1963 w = GETITEM(names, oparg);
1964 if ((x = f->f_locals) != NULL) {
1965 if ((err = PyObject_DelItem(x, w)) != 0)
1966 format_exc_check_arg(PyExc_NameError,
1967 NAME_ERROR_MSG,
1968 w);
1969 break;
1970 }
1971 PyErr_Format(PyExc_SystemError,
1972 "no locals when deleting %R", w);
1973 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001974
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001975 PREDICTED_WITH_ARG(UNPACK_SEQUENCE);
1976 TARGET(UNPACK_SEQUENCE)
1977 v = POP();
1978 if (PyTuple_CheckExact(v) &&
1979 PyTuple_GET_SIZE(v) == oparg) {
1980 PyObject **items = \
1981 ((PyTupleObject *)v)->ob_item;
1982 while (oparg--) {
1983 w = items[oparg];
1984 Py_INCREF(w);
1985 PUSH(w);
1986 }
1987 Py_DECREF(v);
1988 DISPATCH();
1989 } else if (PyList_CheckExact(v) &&
1990 PyList_GET_SIZE(v) == oparg) {
1991 PyObject **items = \
1992 ((PyListObject *)v)->ob_item;
1993 while (oparg--) {
1994 w = items[oparg];
1995 Py_INCREF(w);
1996 PUSH(w);
1997 }
1998 } else if (unpack_iterable(v, oparg, -1,
1999 stack_pointer + oparg)) {
2000 STACKADJ(oparg);
2001 } else {
2002 /* unpack_iterable() raised an exception */
2003 why = WHY_EXCEPTION;
2004 }
2005 Py_DECREF(v);
2006 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002008 TARGET(UNPACK_EX)
2009 {
2010 int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8);
2011 v = POP();
Antoine Pitrou9a2310d2008-07-25 22:39:39 +00002012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002013 if (unpack_iterable(v, oparg & 0xFF, oparg >> 8,
2014 stack_pointer + totalargs)) {
2015 stack_pointer += totalargs;
2016 } else {
2017 why = WHY_EXCEPTION;
2018 }
2019 Py_DECREF(v);
2020 break;
2021 }
Guido van Rossum0368b722007-05-11 16:50:42 +00002022
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002023 TARGET(STORE_ATTR)
2024 w = GETITEM(names, oparg);
2025 v = TOP();
2026 u = SECOND();
2027 STACKADJ(-2);
2028 err = PyObject_SetAttr(v, w, u); /* v.w = u */
2029 Py_DECREF(v);
2030 Py_DECREF(u);
2031 if (err == 0) DISPATCH();
2032 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002033
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002034 TARGET(DELETE_ATTR)
2035 w = GETITEM(names, oparg);
2036 v = POP();
2037 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
2038 /* del v.w */
2039 Py_DECREF(v);
2040 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002041
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002042 TARGET(STORE_GLOBAL)
2043 w = GETITEM(names, oparg);
2044 v = POP();
2045 err = PyDict_SetItem(f->f_globals, w, v);
2046 Py_DECREF(v);
2047 if (err == 0) DISPATCH();
2048 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002049
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002050 TARGET(DELETE_GLOBAL)
2051 w = GETITEM(names, oparg);
2052 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
2053 format_exc_check_arg(
2054 PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w);
2055 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002056
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002057 TARGET(LOAD_NAME)
2058 w = GETITEM(names, oparg);
2059 if ((v = f->f_locals) == NULL) {
2060 PyErr_Format(PyExc_SystemError,
2061 "no locals when loading %R", w);
2062 why = WHY_EXCEPTION;
2063 break;
2064 }
2065 if (PyDict_CheckExact(v)) {
2066 x = PyDict_GetItem(v, w);
2067 Py_XINCREF(x);
2068 }
2069 else {
2070 x = PyObject_GetItem(v, w);
2071 if (x == NULL && PyErr_Occurred()) {
2072 if (!PyErr_ExceptionMatches(
2073 PyExc_KeyError))
2074 break;
2075 PyErr_Clear();
2076 }
2077 }
2078 if (x == NULL) {
Benjamin Peterson20f9c3c2010-07-20 22:39:34 +00002079 x = PyDict_GetItem(f->f_globals, w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002080 if (x == NULL) {
Benjamin Peterson20f9c3c2010-07-20 22:39:34 +00002081 x = PyDict_GetItem(f->f_builtins, w);
2082 if (x == NULL) {
2083 format_exc_check_arg(
2084 PyExc_NameError,
2085 NAME_ERROR_MSG, w);
2086 break;
2087 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002088 }
2089 Py_INCREF(x);
2090 }
2091 PUSH(x);
2092 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002093
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002094 TARGET(LOAD_GLOBAL)
2095 w = GETITEM(names, oparg);
2096 if (PyUnicode_CheckExact(w)) {
2097 /* Inline the PyDict_GetItem() calls.
2098 WARNING: this is an extreme speed hack.
2099 Do not try this at home. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002100 Py_hash_t hash = ((PyASCIIObject *)w)->hash;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002101 if (hash != -1) {
2102 PyDictObject *d;
2103 PyDictEntry *e;
2104 d = (PyDictObject *)(f->f_globals);
2105 e = d->ma_lookup(d, w, hash);
2106 if (e == NULL) {
2107 x = NULL;
2108 break;
2109 }
2110 x = e->me_value;
2111 if (x != NULL) {
2112 Py_INCREF(x);
2113 PUSH(x);
2114 DISPATCH();
2115 }
2116 d = (PyDictObject *)(f->f_builtins);
2117 e = d->ma_lookup(d, w, hash);
2118 if (e == NULL) {
2119 x = NULL;
2120 break;
2121 }
2122 x = e->me_value;
2123 if (x != NULL) {
2124 Py_INCREF(x);
2125 PUSH(x);
2126 DISPATCH();
2127 }
2128 goto load_global_error;
2129 }
2130 }
2131 /* This is the un-inlined version of the code above */
2132 x = PyDict_GetItem(f->f_globals, w);
2133 if (x == NULL) {
2134 x = PyDict_GetItem(f->f_builtins, w);
2135 if (x == NULL) {
2136 load_global_error:
2137 format_exc_check_arg(
2138 PyExc_NameError,
2139 GLOBAL_NAME_ERROR_MSG, w);
2140 break;
2141 }
2142 }
2143 Py_INCREF(x);
2144 PUSH(x);
2145 DISPATCH();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002146
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002147 TARGET(DELETE_FAST)
2148 x = GETLOCAL(oparg);
2149 if (x != NULL) {
2150 SETLOCAL(oparg, NULL);
2151 DISPATCH();
2152 }
2153 format_exc_check_arg(
2154 PyExc_UnboundLocalError,
2155 UNBOUNDLOCAL_ERROR_MSG,
2156 PyTuple_GetItem(co->co_varnames, oparg)
2157 );
2158 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002159
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +00002160 TARGET(DELETE_DEREF)
2161 x = freevars[oparg];
2162 if (PyCell_GET(x) != NULL) {
2163 PyCell_Set(x, NULL);
Benjamin Peterson00ebe2c2010-09-10 22:02:31 +00002164 DISPATCH();
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +00002165 }
2166 err = -1;
2167 format_exc_unbound(co, oparg);
2168 break;
2169
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002170 TARGET(LOAD_CLOSURE)
2171 x = freevars[oparg];
2172 Py_INCREF(x);
2173 PUSH(x);
2174 if (x != NULL) DISPATCH();
2175 break;
Jeremy Hylton64949cb2001-01-25 20:06:59 +00002176
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002177 TARGET(LOAD_DEREF)
2178 x = freevars[oparg];
2179 w = PyCell_Get(x);
2180 if (w != NULL) {
2181 PUSH(w);
2182 DISPATCH();
2183 }
2184 err = -1;
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +00002185 format_exc_unbound(co, oparg);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002186 break;
Jeremy Hylton64949cb2001-01-25 20:06:59 +00002187
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002188 TARGET(STORE_DEREF)
2189 w = POP();
2190 x = freevars[oparg];
2191 PyCell_Set(x, w);
2192 Py_DECREF(w);
2193 DISPATCH();
Jeremy Hylton64949cb2001-01-25 20:06:59 +00002194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002195 TARGET(BUILD_TUPLE)
2196 x = PyTuple_New(oparg);
2197 if (x != NULL) {
2198 for (; --oparg >= 0;) {
2199 w = POP();
2200 PyTuple_SET_ITEM(x, oparg, w);
2201 }
2202 PUSH(x);
2203 DISPATCH();
2204 }
2205 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002206
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002207 TARGET(BUILD_LIST)
2208 x = PyList_New(oparg);
2209 if (x != NULL) {
2210 for (; --oparg >= 0;) {
2211 w = POP();
2212 PyList_SET_ITEM(x, oparg, w);
2213 }
2214 PUSH(x);
2215 DISPATCH();
2216 }
2217 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002218
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002219 TARGET(BUILD_SET)
2220 x = PySet_New(NULL);
2221 if (x != NULL) {
2222 for (; --oparg >= 0;) {
2223 w = POP();
2224 if (err == 0)
2225 err = PySet_Add(x, w);
2226 Py_DECREF(w);
2227 }
2228 if (err != 0) {
2229 Py_DECREF(x);
2230 break;
2231 }
2232 PUSH(x);
2233 DISPATCH();
2234 }
2235 break;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002236
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002237 TARGET(BUILD_MAP)
2238 x = _PyDict_NewPresized((Py_ssize_t)oparg);
2239 PUSH(x);
2240 if (x != NULL) DISPATCH();
2241 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002242
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002243 TARGET(STORE_MAP)
2244 w = TOP(); /* key */
2245 u = SECOND(); /* value */
2246 v = THIRD(); /* dict */
2247 STACKADJ(-2);
2248 assert (PyDict_CheckExact(v));
2249 err = PyDict_SetItem(v, w, u); /* v[w] = u */
2250 Py_DECREF(u);
2251 Py_DECREF(w);
2252 if (err == 0) DISPATCH();
2253 break;
Christian Heimes99170a52007-12-19 02:07:34 +00002254
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002255 TARGET(MAP_ADD)
2256 w = TOP(); /* key */
2257 u = SECOND(); /* value */
2258 STACKADJ(-2);
2259 v = stack_pointer[-oparg]; /* dict */
2260 assert (PyDict_CheckExact(v));
2261 err = PyDict_SetItem(v, w, u); /* v[w] = u */
2262 Py_DECREF(u);
2263 Py_DECREF(w);
2264 if (err == 0) {
2265 PREDICT(JUMP_ABSOLUTE);
2266 DISPATCH();
2267 }
2268 break;
Antoine Pitrouf289ae62008-12-18 11:06:25 +00002269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002270 TARGET(LOAD_ATTR)
2271 w = GETITEM(names, oparg);
2272 v = TOP();
2273 x = PyObject_GetAttr(v, w);
2274 Py_DECREF(v);
2275 SET_TOP(x);
2276 if (x != NULL) DISPATCH();
2277 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002278
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002279 TARGET(COMPARE_OP)
2280 w = POP();
2281 v = TOP();
2282 x = cmp_outcome(oparg, v, w);
2283 Py_DECREF(v);
2284 Py_DECREF(w);
2285 SET_TOP(x);
2286 if (x == NULL) break;
2287 PREDICT(POP_JUMP_IF_FALSE);
2288 PREDICT(POP_JUMP_IF_TRUE);
2289 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002290
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002291 TARGET(IMPORT_NAME)
Victor Stinner3c1e4812012-03-26 22:10:51 +02002292 {
2293 _Py_IDENTIFIER(__import__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002294 w = GETITEM(names, oparg);
Victor Stinner3c1e4812012-03-26 22:10:51 +02002295 x = _PyDict_GetItemId(f->f_builtins, &PyId___import__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 if (x == NULL) {
2297 PyErr_SetString(PyExc_ImportError,
2298 "__import__ not found");
2299 break;
2300 }
2301 Py_INCREF(x);
2302 v = POP();
2303 u = TOP();
2304 if (PyLong_AsLong(u) != -1 || PyErr_Occurred())
2305 w = PyTuple_Pack(5,
2306 w,
2307 f->f_globals,
2308 f->f_locals == NULL ?
2309 Py_None : f->f_locals,
2310 v,
2311 u);
2312 else
2313 w = PyTuple_Pack(4,
2314 w,
2315 f->f_globals,
2316 f->f_locals == NULL ?
2317 Py_None : f->f_locals,
2318 v);
2319 Py_DECREF(v);
2320 Py_DECREF(u);
2321 if (w == NULL) {
2322 u = POP();
2323 Py_DECREF(x);
2324 x = NULL;
2325 break;
2326 }
2327 READ_TIMESTAMP(intr0);
2328 v = x;
2329 x = PyEval_CallObject(v, w);
2330 Py_DECREF(v);
2331 READ_TIMESTAMP(intr1);
2332 Py_DECREF(w);
2333 SET_TOP(x);
2334 if (x != NULL) DISPATCH();
2335 break;
Victor Stinner3c1e4812012-03-26 22:10:51 +02002336 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002338 TARGET(IMPORT_STAR)
2339 v = POP();
2340 PyFrame_FastToLocals(f);
2341 if ((x = f->f_locals) == NULL) {
2342 PyErr_SetString(PyExc_SystemError,
2343 "no locals found during 'import *'");
2344 break;
2345 }
2346 READ_TIMESTAMP(intr0);
2347 err = import_all_from(x, v);
2348 READ_TIMESTAMP(intr1);
2349 PyFrame_LocalsToFast(f, 0);
2350 Py_DECREF(v);
2351 if (err == 0) DISPATCH();
2352 break;
Guido van Rossum25831651993-05-19 14:50:45 +00002353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002354 TARGET(IMPORT_FROM)
2355 w = GETITEM(names, oparg);
2356 v = TOP();
2357 READ_TIMESTAMP(intr0);
2358 x = import_from(v, w);
2359 READ_TIMESTAMP(intr1);
2360 PUSH(x);
2361 if (x != NULL) DISPATCH();
2362 break;
Thomas Wouters52152252000-08-17 22:55:00 +00002363
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002364 TARGET(JUMP_FORWARD)
2365 JUMPBY(oparg);
2366 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002367
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002368 PREDICTED_WITH_ARG(POP_JUMP_IF_FALSE);
2369 TARGET(POP_JUMP_IF_FALSE)
2370 w = POP();
2371 if (w == Py_True) {
2372 Py_DECREF(w);
2373 FAST_DISPATCH();
2374 }
2375 if (w == Py_False) {
2376 Py_DECREF(w);
2377 JUMPTO(oparg);
2378 FAST_DISPATCH();
2379 }
2380 err = PyObject_IsTrue(w);
2381 Py_DECREF(w);
2382 if (err > 0)
2383 err = 0;
2384 else if (err == 0)
2385 JUMPTO(oparg);
2386 else
2387 break;
2388 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002389
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002390 PREDICTED_WITH_ARG(POP_JUMP_IF_TRUE);
2391 TARGET(POP_JUMP_IF_TRUE)
2392 w = POP();
2393 if (w == Py_False) {
2394 Py_DECREF(w);
2395 FAST_DISPATCH();
2396 }
2397 if (w == Py_True) {
2398 Py_DECREF(w);
2399 JUMPTO(oparg);
2400 FAST_DISPATCH();
2401 }
2402 err = PyObject_IsTrue(w);
2403 Py_DECREF(w);
2404 if (err > 0) {
2405 err = 0;
2406 JUMPTO(oparg);
2407 }
2408 else if (err == 0)
2409 ;
2410 else
2411 break;
2412 DISPATCH();
Jeffrey Yasskin9de7ec72009-02-25 02:25:04 +00002413
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002414 TARGET(JUMP_IF_FALSE_OR_POP)
2415 w = TOP();
2416 if (w == Py_True) {
2417 STACKADJ(-1);
2418 Py_DECREF(w);
2419 FAST_DISPATCH();
2420 }
2421 if (w == Py_False) {
2422 JUMPTO(oparg);
2423 FAST_DISPATCH();
2424 }
2425 err = PyObject_IsTrue(w);
2426 if (err > 0) {
2427 STACKADJ(-1);
2428 Py_DECREF(w);
2429 err = 0;
2430 }
2431 else if (err == 0)
2432 JUMPTO(oparg);
2433 else
2434 break;
2435 DISPATCH();
Jeffrey Yasskin9de7ec72009-02-25 02:25:04 +00002436
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002437 TARGET(JUMP_IF_TRUE_OR_POP)
2438 w = TOP();
2439 if (w == Py_False) {
2440 STACKADJ(-1);
2441 Py_DECREF(w);
2442 FAST_DISPATCH();
2443 }
2444 if (w == Py_True) {
2445 JUMPTO(oparg);
2446 FAST_DISPATCH();
2447 }
2448 err = PyObject_IsTrue(w);
2449 if (err > 0) {
2450 err = 0;
2451 JUMPTO(oparg);
2452 }
2453 else if (err == 0) {
2454 STACKADJ(-1);
2455 Py_DECREF(w);
2456 }
2457 else
2458 break;
2459 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002460
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002461 PREDICTED_WITH_ARG(JUMP_ABSOLUTE);
2462 TARGET(JUMP_ABSOLUTE)
2463 JUMPTO(oparg);
Guido van Rossum58da9312007-11-10 23:39:45 +00002464#if FAST_LOOPS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002465 /* Enabling this path speeds-up all while and for-loops by bypassing
2466 the per-loop checks for signals. By default, this should be turned-off
2467 because it prevents detection of a control-break in tight loops like
2468 "while 1: pass". Compile with this option turned-on when you need
2469 the speed-up and do not need break checking inside tight loops (ones
2470 that contain only instructions ending with FAST_DISPATCH).
2471 */
2472 FAST_DISPATCH();
Guido van Rossum58da9312007-11-10 23:39:45 +00002473#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002474 DISPATCH();
Guido van Rossum58da9312007-11-10 23:39:45 +00002475#endif
Guido van Rossumac7be682001-01-17 15:42:30 +00002476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002477 TARGET(GET_ITER)
2478 /* before: [obj]; after [getiter(obj)] */
2479 v = TOP();
2480 x = PyObject_GetIter(v);
2481 Py_DECREF(v);
2482 if (x != NULL) {
2483 SET_TOP(x);
2484 PREDICT(FOR_ITER);
2485 DISPATCH();
2486 }
2487 STACKADJ(-1);
2488 break;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002489
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002490 PREDICTED_WITH_ARG(FOR_ITER);
2491 TARGET(FOR_ITER)
2492 /* before: [iter]; after: [iter, iter()] *or* [] */
2493 v = TOP();
2494 x = (*v->ob_type->tp_iternext)(v);
2495 if (x != NULL) {
2496 PUSH(x);
2497 PREDICT(STORE_FAST);
2498 PREDICT(UNPACK_SEQUENCE);
2499 DISPATCH();
2500 }
2501 if (PyErr_Occurred()) {
2502 if (!PyErr_ExceptionMatches(
2503 PyExc_StopIteration))
2504 break;
2505 PyErr_Clear();
2506 }
2507 /* iterator ended normally */
2508 x = v = POP();
2509 Py_DECREF(v);
2510 JUMPBY(oparg);
2511 DISPATCH();
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002512
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002513 TARGET(BREAK_LOOP)
2514 why = WHY_BREAK;
2515 goto fast_block_end;
Raymond Hettinger2d783e92004-03-12 09:12:22 +00002516
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002517 TARGET(CONTINUE_LOOP)
2518 retval = PyLong_FromLong(oparg);
2519 if (!retval) {
2520 x = NULL;
2521 break;
2522 }
2523 why = WHY_CONTINUE;
2524 goto fast_block_end;
Raymond Hettinger2d783e92004-03-12 09:12:22 +00002525
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002526 TARGET_WITH_IMPL(SETUP_LOOP, _setup_finally)
2527 TARGET_WITH_IMPL(SETUP_EXCEPT, _setup_finally)
2528 TARGET(SETUP_FINALLY)
2529 _setup_finally:
2530 /* NOTE: If you add any new block-setup opcodes that
2531 are not try/except/finally handlers, you may need
2532 to update the PyGen_NeedsFinalizing() function.
2533 */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002534
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002535 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
2536 STACK_LEVEL());
2537 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002539 TARGET(SETUP_WITH)
2540 {
Benjamin Petersonce798522012-01-22 11:24:29 -05002541 _Py_IDENTIFIER(__exit__);
2542 _Py_IDENTIFIER(__enter__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002543 w = TOP();
Benjamin Petersonce798522012-01-22 11:24:29 -05002544 x = special_lookup(w, &PyId___exit__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002545 if (!x)
2546 break;
2547 SET_TOP(x);
Benjamin Petersonce798522012-01-22 11:24:29 -05002548 u = special_lookup(w, &PyId___enter__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002549 Py_DECREF(w);
2550 if (!u) {
2551 x = NULL;
2552 break;
2553 }
2554 x = PyObject_CallFunctionObjArgs(u, NULL);
2555 Py_DECREF(u);
2556 if (!x)
2557 break;
2558 /* Setup the finally block before pushing the result
2559 of __enter__ on the stack. */
2560 PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg,
2561 STACK_LEVEL());
Benjamin Peterson876b2f22009-06-28 03:18:59 +00002562
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002563 PUSH(x);
2564 DISPATCH();
2565 }
Benjamin Peterson876b2f22009-06-28 03:18:59 +00002566
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002567 TARGET(WITH_CLEANUP)
2568 {
2569 /* At the top of the stack are 1-3 values indicating
2570 how/why we entered the finally clause:
2571 - TOP = None
2572 - (TOP, SECOND) = (WHY_{RETURN,CONTINUE}), retval
2573 - TOP = WHY_*; no retval below it
2574 - (TOP, SECOND, THIRD) = exc_info()
2575 (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER
2576 Below them is EXIT, the context.__exit__ bound method.
2577 In the last case, we must call
2578 EXIT(TOP, SECOND, THIRD)
2579 otherwise we must call
2580 EXIT(None, None, None)
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002581
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002582 In the first two cases, we remove EXIT from the
2583 stack, leaving the rest in the same order. In the
2584 third case, we shift the bottom 3 values of the
2585 stack down, and replace the empty spot with NULL.
Guido van Rossum1a5e21e2006-02-28 21:57:43 +00002586
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002587 In addition, if the stack represents an exception,
2588 *and* the function call returns a 'true' value, we
2589 push WHY_SILENCED onto the stack. END_FINALLY will
2590 then not re-raise the exception. (But non-local
2591 gotos should still be resumed.)
2592 */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002593
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002594 PyObject *exit_func;
2595 u = TOP();
2596 if (u == Py_None) {
2597 (void)POP();
2598 exit_func = TOP();
2599 SET_TOP(u);
2600 v = w = Py_None;
2601 }
2602 else if (PyLong_Check(u)) {
2603 (void)POP();
2604 switch(PyLong_AsLong(u)) {
2605 case WHY_RETURN:
2606 case WHY_CONTINUE:
2607 /* Retval in TOP. */
2608 exit_func = SECOND();
2609 SET_SECOND(TOP());
2610 SET_TOP(u);
2611 break;
2612 default:
2613 exit_func = TOP();
2614 SET_TOP(u);
2615 break;
2616 }
2617 u = v = w = Py_None;
2618 }
2619 else {
2620 PyObject *tp, *exc, *tb;
2621 PyTryBlock *block;
2622 v = SECOND();
2623 w = THIRD();
2624 tp = FOURTH();
2625 exc = PEEK(5);
2626 tb = PEEK(6);
2627 exit_func = PEEK(7);
2628 SET_VALUE(7, tb);
2629 SET_VALUE(6, exc);
2630 SET_VALUE(5, tp);
2631 /* UNWIND_EXCEPT_HANDLER will pop this off. */
2632 SET_FOURTH(NULL);
2633 /* We just shifted the stack down, so we have
2634 to tell the except handler block that the
2635 values are lower than it expects. */
2636 block = &f->f_blockstack[f->f_iblock - 1];
2637 assert(block->b_type == EXCEPT_HANDLER);
2638 block->b_level--;
2639 }
2640 /* XXX Not the fastest way to call it... */
2641 x = PyObject_CallFunctionObjArgs(exit_func, u, v, w,
2642 NULL);
2643 Py_DECREF(exit_func);
2644 if (x == NULL)
2645 break; /* Go to error exit */
Amaury Forgeot d'Arc10b24e82008-12-10 23:49:33 +00002646
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002647 if (u != Py_None)
2648 err = PyObject_IsTrue(x);
2649 else
2650 err = 0;
2651 Py_DECREF(x);
Amaury Forgeot d'Arc10b24e82008-12-10 23:49:33 +00002652
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002653 if (err < 0)
2654 break; /* Go to error exit */
2655 else if (err > 0) {
2656 err = 0;
2657 /* There was an exception and a True return */
2658 PUSH(PyLong_FromLong((long) WHY_SILENCED));
2659 }
2660 PREDICT(END_FINALLY);
2661 break;
2662 }
Guido van Rossumc2e20742006-02-27 22:32:47 +00002663
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002664 TARGET(CALL_FUNCTION)
2665 {
2666 PyObject **sp;
2667 PCALL(PCALL_ALL);
2668 sp = stack_pointer;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002669#ifdef WITH_TSC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002670 x = call_function(&sp, oparg, &intr0, &intr1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002671#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002672 x = call_function(&sp, oparg);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002673#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002674 stack_pointer = sp;
2675 PUSH(x);
2676 if (x != NULL)
2677 DISPATCH();
2678 break;
2679 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002681 TARGET_WITH_IMPL(CALL_FUNCTION_VAR, _call_function_var_kw)
2682 TARGET_WITH_IMPL(CALL_FUNCTION_KW, _call_function_var_kw)
2683 TARGET(CALL_FUNCTION_VAR_KW)
2684 _call_function_var_kw:
2685 {
2686 int na = oparg & 0xff;
2687 int nk = (oparg>>8) & 0xff;
2688 int flags = (opcode - CALL_FUNCTION) & 3;
2689 int n = na + 2 * nk;
2690 PyObject **pfunc, *func, **sp;
2691 PCALL(PCALL_ALL);
2692 if (flags & CALL_FLAG_VAR)
2693 n++;
2694 if (flags & CALL_FLAG_KW)
2695 n++;
2696 pfunc = stack_pointer - n - 1;
2697 func = *pfunc;
Jeremy Hylton52820442001-01-03 23:52:36 +00002698
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002699 if (PyMethod_Check(func)
Stefan Krahb7e10102010-06-23 18:42:39 +00002700 && PyMethod_GET_SELF(func) != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002701 PyObject *self = PyMethod_GET_SELF(func);
2702 Py_INCREF(self);
2703 func = PyMethod_GET_FUNCTION(func);
2704 Py_INCREF(func);
2705 Py_DECREF(*pfunc);
2706 *pfunc = self;
2707 na++;
Brett Cannonb94767f2011-02-22 20:15:44 +00002708 /* n++; */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002709 } else
2710 Py_INCREF(func);
2711 sp = stack_pointer;
2712 READ_TIMESTAMP(intr0);
2713 x = ext_do_call(func, &sp, flags, na, nk);
2714 READ_TIMESTAMP(intr1);
2715 stack_pointer = sp;
2716 Py_DECREF(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00002717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002718 while (stack_pointer > pfunc) {
2719 w = POP();
2720 Py_DECREF(w);
2721 }
2722 PUSH(x);
2723 if (x != NULL)
2724 DISPATCH();
2725 break;
2726 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002727
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002728 TARGET_WITH_IMPL(MAKE_CLOSURE, _make_function)
2729 TARGET(MAKE_FUNCTION)
2730 _make_function:
2731 {
2732 int posdefaults = oparg & 0xff;
2733 int kwdefaults = (oparg>>8) & 0xff;
2734 int num_annotations = (oparg >> 16) & 0x7fff;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002735
Antoine Pitrou86a36b52011-11-25 18:56:07 +01002736 w = POP(); /* qualname */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002737 v = POP(); /* code object */
Antoine Pitrou86a36b52011-11-25 18:56:07 +01002738 x = PyFunction_NewWithQualName(v, f->f_globals, w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002739 Py_DECREF(v);
Antoine Pitrou86a36b52011-11-25 18:56:07 +01002740 Py_DECREF(w);
Antoine Pitrou9a2310d2008-07-25 22:39:39 +00002741
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002742 if (x != NULL && opcode == MAKE_CLOSURE) {
2743 v = POP();
2744 if (PyFunction_SetClosure(x, v) != 0) {
2745 /* Can't happen unless bytecode is corrupt. */
2746 why = WHY_EXCEPTION;
2747 }
2748 Py_DECREF(v);
2749 }
Neal Norwitzc1505362006-12-28 06:47:50 +00002750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002751 if (x != NULL && num_annotations > 0) {
2752 Py_ssize_t name_ix;
2753 u = POP(); /* names of args with annotations */
2754 v = PyDict_New();
2755 if (v == NULL) {
2756 Py_DECREF(x);
2757 x = NULL;
2758 break;
2759 }
2760 name_ix = PyTuple_Size(u);
2761 assert(num_annotations == name_ix+1);
2762 while (name_ix > 0) {
2763 --name_ix;
2764 t = PyTuple_GET_ITEM(u, name_ix);
2765 w = POP();
2766 /* XXX(nnorwitz): check for errors */
2767 PyDict_SetItem(v, t, w);
2768 Py_DECREF(w);
2769 }
Neal Norwitzc1505362006-12-28 06:47:50 +00002770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002771 if (PyFunction_SetAnnotations(x, v) != 0) {
2772 /* Can't happen unless
2773 PyFunction_SetAnnotations changes. */
2774 why = WHY_EXCEPTION;
2775 }
2776 Py_DECREF(v);
2777 Py_DECREF(u);
2778 }
Neal Norwitzc1505362006-12-28 06:47:50 +00002779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002780 /* XXX Maybe this should be a separate opcode? */
2781 if (x != NULL && posdefaults > 0) {
2782 v = PyTuple_New(posdefaults);
2783 if (v == NULL) {
2784 Py_DECREF(x);
2785 x = NULL;
2786 break;
2787 }
2788 while (--posdefaults >= 0) {
2789 w = POP();
2790 PyTuple_SET_ITEM(v, posdefaults, w);
2791 }
2792 if (PyFunction_SetDefaults(x, v) != 0) {
2793 /* Can't happen unless
2794 PyFunction_SetDefaults changes. */
2795 why = WHY_EXCEPTION;
2796 }
2797 Py_DECREF(v);
2798 }
2799 if (x != NULL && kwdefaults > 0) {
2800 v = PyDict_New();
2801 if (v == NULL) {
2802 Py_DECREF(x);
2803 x = NULL;
2804 break;
2805 }
2806 while (--kwdefaults >= 0) {
2807 w = POP(); /* default value */
2808 u = POP(); /* kw only arg name */
2809 /* XXX(nnorwitz): check for errors */
2810 PyDict_SetItem(v, u, w);
2811 Py_DECREF(w);
2812 Py_DECREF(u);
2813 }
2814 if (PyFunction_SetKwDefaults(x, v) != 0) {
2815 /* Can't happen unless
2816 PyFunction_SetKwDefaults changes. */
2817 why = WHY_EXCEPTION;
2818 }
2819 Py_DECREF(v);
2820 }
2821 PUSH(x);
2822 break;
2823 }
Guido van Rossum8861b741996-07-30 16:49:37 +00002824
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002825 TARGET(BUILD_SLICE)
2826 if (oparg == 3)
2827 w = POP();
2828 else
2829 w = NULL;
2830 v = POP();
2831 u = TOP();
2832 x = PySlice_New(u, v, w);
2833 Py_DECREF(u);
2834 Py_DECREF(v);
2835 Py_XDECREF(w);
2836 SET_TOP(x);
2837 if (x != NULL) DISPATCH();
2838 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00002839
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002840 TARGET(EXTENDED_ARG)
2841 opcode = NEXTOP();
2842 oparg = oparg<<16 | NEXTARG();
2843 goto dispatch_opcode;
Guido van Rossum8861b741996-07-30 16:49:37 +00002844
Antoine Pitrou042b1282010-08-13 21:15:58 +00002845#if USE_COMPUTED_GOTOS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002846 _unknown_opcode:
Antoine Pitroub52ec782009-01-25 16:34:23 +00002847#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002848 default:
2849 fprintf(stderr,
2850 "XXX lineno: %d, opcode: %d\n",
2851 PyFrame_GetLineNumber(f),
2852 opcode);
2853 PyErr_SetString(PyExc_SystemError, "unknown opcode");
2854 why = WHY_EXCEPTION;
2855 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002856
2857#ifdef CASE_TOO_BIG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002858 }
Guido van Rossum04691fc1992-08-12 15:35:34 +00002859#endif
2860
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002861 } /* switch */
Guido van Rossum374a9221991-04-04 10:40:29 +00002862
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002863 on_error:
Guido van Rossumac7be682001-01-17 15:42:30 +00002864
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002865 READ_TIMESTAMP(inst1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002866
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002867 /* Quickly continue if no error occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002868
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002869 if (why == WHY_NOT) {
2870 if (err == 0 && x != NULL) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002871#ifdef CHECKEXC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002872 /* This check is expensive! */
2873 if (PyErr_Occurred())
2874 fprintf(stderr,
2875 "XXX undetected error\n");
2876 else {
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002877#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002878 READ_TIMESTAMP(loop1);
2879 continue; /* Normal, fast path */
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002880#ifdef CHECKEXC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002881 }
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002882#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002883 }
2884 why = WHY_EXCEPTION;
2885 x = Py_None;
2886 err = 0;
2887 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002888
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002889 /* Double-check exception status */
Guido van Rossumac7be682001-01-17 15:42:30 +00002890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002891 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
2892 if (!PyErr_Occurred()) {
2893 PyErr_SetString(PyExc_SystemError,
2894 "error return without exception set");
2895 why = WHY_EXCEPTION;
2896 }
2897 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002898#ifdef CHECKEXC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002899 else {
2900 /* This check is expensive! */
2901 if (PyErr_Occurred()) {
2902 char buf[128];
2903 sprintf(buf, "Stack unwind with exception "
2904 "set and why=%d", why);
2905 Py_FatalError(buf);
2906 }
2907 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002908#endif
2909
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002910 /* Log traceback info if this is a real exception */
Guido van Rossumac7be682001-01-17 15:42:30 +00002911
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002912 if (why == WHY_EXCEPTION) {
2913 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002914
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002915 if (tstate->c_tracefunc != NULL)
2916 call_exc_trace(tstate->c_tracefunc,
2917 tstate->c_traceobj, f);
2918 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002919
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002920 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
Guido van Rossumac7be682001-01-17 15:42:30 +00002921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002922 if (why == WHY_RERAISE)
2923 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00002924
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002925 /* Unwind stacks if a (pseudo) exception occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002926
Raymond Hettinger1dd83092004-02-06 18:32:33 +00002927fast_block_end:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002928 while (why != WHY_NOT && f->f_iblock > 0) {
2929 /* Peek at the current block. */
2930 PyTryBlock *b = &f->f_blockstack[f->f_iblock - 1];
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002931
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002932 assert(why != WHY_YIELD);
2933 if (b->b_type == SETUP_LOOP && why == WHY_CONTINUE) {
2934 why = WHY_NOT;
2935 JUMPTO(PyLong_AS_LONG(retval));
2936 Py_DECREF(retval);
2937 break;
2938 }
2939 /* Now we have to pop the block. */
2940 f->f_iblock--;
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002941
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002942 if (b->b_type == EXCEPT_HANDLER) {
2943 UNWIND_EXCEPT_HANDLER(b);
2944 continue;
2945 }
2946 UNWIND_BLOCK(b);
2947 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
2948 why = WHY_NOT;
2949 JUMPTO(b->b_handler);
2950 break;
2951 }
2952 if (why == WHY_EXCEPTION && (b->b_type == SETUP_EXCEPT
2953 || b->b_type == SETUP_FINALLY)) {
2954 PyObject *exc, *val, *tb;
2955 int handler = b->b_handler;
2956 /* Beware, this invalidates all b->b_* fields */
2957 PyFrame_BlockSetup(f, EXCEPT_HANDLER, -1, STACK_LEVEL());
2958 PUSH(tstate->exc_traceback);
2959 PUSH(tstate->exc_value);
2960 if (tstate->exc_type != NULL) {
2961 PUSH(tstate->exc_type);
2962 }
2963 else {
2964 Py_INCREF(Py_None);
2965 PUSH(Py_None);
2966 }
2967 PyErr_Fetch(&exc, &val, &tb);
2968 /* Make the raw exception data
2969 available to the handler,
2970 so a program can emulate the
2971 Python main loop. */
2972 PyErr_NormalizeException(
2973 &exc, &val, &tb);
2974 PyException_SetTraceback(val, tb);
2975 Py_INCREF(exc);
2976 tstate->exc_type = exc;
2977 Py_INCREF(val);
2978 tstate->exc_value = val;
2979 tstate->exc_traceback = tb;
2980 if (tb == NULL)
2981 tb = Py_None;
2982 Py_INCREF(tb);
2983 PUSH(tb);
2984 PUSH(val);
2985 PUSH(exc);
2986 why = WHY_NOT;
2987 JUMPTO(handler);
2988 break;
2989 }
2990 if (b->b_type == SETUP_FINALLY) {
2991 if (why & (WHY_RETURN | WHY_CONTINUE))
2992 PUSH(retval);
2993 PUSH(PyLong_FromLong((long)why));
2994 why = WHY_NOT;
2995 JUMPTO(b->b_handler);
2996 break;
2997 }
2998 } /* unwind stack */
Guido van Rossum374a9221991-04-04 10:40:29 +00002999
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003000 /* End the loop if we still have an error (or return) */
Guido van Rossumac7be682001-01-17 15:42:30 +00003001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003002 if (why != WHY_NOT)
3003 break;
3004 READ_TIMESTAMP(loop1);
Guido van Rossumac7be682001-01-17 15:42:30 +00003005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003006 } /* main loop */
Guido van Rossumac7be682001-01-17 15:42:30 +00003007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003008 assert(why != WHY_YIELD);
3009 /* Pop remaining stack entries. */
3010 while (!EMPTY()) {
3011 v = POP();
3012 Py_XDECREF(v);
3013 }
Guido van Rossum35974fb2001-12-06 21:28:18 +00003014
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003015 if (why != WHY_RETURN)
3016 retval = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +00003017
Raymond Hettinger1dd83092004-02-06 18:32:33 +00003018fast_yield:
Benjamin Petersonac913412011-07-03 16:25:11 -05003019 if (co->co_flags & CO_GENERATOR && (why == WHY_YIELD || why == WHY_RETURN)) {
3020 /* The purpose of this block is to put aside the generator's exception
3021 state and restore that of the calling frame. If the current
3022 exception state is from the caller, we clear the exception values
3023 on the generator frame, so they are not swapped back in latter. The
3024 origin of the current exception state is determined by checking for
3025 except handler blocks, which we must be in iff a new exception
3026 state came into existence in this frame. (An uncaught exception
3027 would have why == WHY_EXCEPTION, and we wouldn't be here). */
3028 int i;
3029 for (i = 0; i < f->f_iblock; i++)
3030 if (f->f_blockstack[i].b_type == EXCEPT_HANDLER)
3031 break;
3032 if (i == f->f_iblock)
3033 /* We did not create this exception. */
Benjamin Peterson87880242011-07-03 16:48:31 -05003034 restore_and_clear_exc_state(tstate, f);
Benjamin Petersonac913412011-07-03 16:25:11 -05003035 else
Benjamin Peterson87880242011-07-03 16:48:31 -05003036 swap_exc_state(tstate, f);
Benjamin Petersonac913412011-07-03 16:25:11 -05003037 }
Benjamin Peterson83195c32011-07-03 13:44:00 -05003038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003039 if (tstate->use_tracing) {
3040 if (tstate->c_tracefunc) {
3041 if (why == WHY_RETURN || why == WHY_YIELD) {
3042 if (call_trace(tstate->c_tracefunc,
3043 tstate->c_traceobj, f,
3044 PyTrace_RETURN, retval)) {
3045 Py_XDECREF(retval);
3046 retval = NULL;
3047 why = WHY_EXCEPTION;
3048 }
3049 }
3050 else if (why == WHY_EXCEPTION) {
3051 call_trace_protected(tstate->c_tracefunc,
3052 tstate->c_traceobj, f,
3053 PyTrace_RETURN, NULL);
3054 }
3055 }
3056 if (tstate->c_profilefunc) {
3057 if (why == WHY_EXCEPTION)
3058 call_trace_protected(tstate->c_profilefunc,
3059 tstate->c_profileobj, f,
3060 PyTrace_RETURN, NULL);
3061 else if (call_trace(tstate->c_profilefunc,
3062 tstate->c_profileobj, f,
3063 PyTrace_RETURN, retval)) {
3064 Py_XDECREF(retval);
3065 retval = NULL;
Brett Cannonb94767f2011-02-22 20:15:44 +00003066 /* why = WHY_EXCEPTION; */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003067 }
3068 }
3069 }
Guido van Rossuma4240131997-01-21 21:18:36 +00003070
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003071 /* pop frame */
Thomas Woutersce272b62007-09-19 21:19:28 +00003072exit_eval_frame:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003073 Py_LeaveRecursiveCall();
3074 tstate->frame = f->f_back;
Guido van Rossumac7be682001-01-17 15:42:30 +00003075
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003076 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00003077}
3078
Benjamin Petersonb204a422011-06-05 22:04:07 -05003079static void
Benjamin Petersone109c702011-06-24 09:37:26 -05003080format_missing(const char *kind, PyCodeObject *co, PyObject *names)
3081{
3082 int err;
3083 Py_ssize_t len = PyList_GET_SIZE(names);
3084 PyObject *name_str, *comma, *tail, *tmp;
3085
3086 assert(PyList_CheckExact(names));
3087 assert(len >= 1);
3088 /* Deal with the joys of natural language. */
3089 switch (len) {
3090 case 1:
3091 name_str = PyList_GET_ITEM(names, 0);
3092 Py_INCREF(name_str);
3093 break;
3094 case 2:
3095 name_str = PyUnicode_FromFormat("%U and %U",
3096 PyList_GET_ITEM(names, len - 2),
3097 PyList_GET_ITEM(names, len - 1));
3098 break;
3099 default:
3100 tail = PyUnicode_FromFormat(", %U, and %U",
3101 PyList_GET_ITEM(names, len - 2),
3102 PyList_GET_ITEM(names, len - 1));
3103 /* Chop off the last two objects in the list. This shouldn't actually
3104 fail, but we can't be too careful. */
3105 err = PyList_SetSlice(names, len - 2, len, NULL);
3106 if (err == -1) {
3107 Py_DECREF(tail);
3108 return;
3109 }
3110 /* Stitch everything up into a nice comma-separated list. */
3111 comma = PyUnicode_FromString(", ");
3112 if (comma == NULL) {
3113 Py_DECREF(tail);
3114 return;
3115 }
3116 tmp = PyUnicode_Join(comma, names);
3117 Py_DECREF(comma);
3118 if (tmp == NULL) {
3119 Py_DECREF(tail);
3120 return;
3121 }
3122 name_str = PyUnicode_Concat(tmp, tail);
3123 Py_DECREF(tmp);
3124 Py_DECREF(tail);
3125 break;
3126 }
3127 if (name_str == NULL)
3128 return;
3129 PyErr_Format(PyExc_TypeError,
3130 "%U() missing %i required %s argument%s: %U",
3131 co->co_name,
3132 len,
3133 kind,
3134 len == 1 ? "" : "s",
3135 name_str);
3136 Py_DECREF(name_str);
3137}
3138
3139static void
3140missing_arguments(PyCodeObject *co, int missing, int defcount,
3141 PyObject **fastlocals)
3142{
3143 int i, j = 0;
3144 int start, end;
3145 int positional = defcount != -1;
3146 const char *kind = positional ? "positional" : "keyword-only";
3147 PyObject *missing_names;
3148
3149 /* Compute the names of the arguments that are missing. */
3150 missing_names = PyList_New(missing);
3151 if (missing_names == NULL)
3152 return;
3153 if (positional) {
3154 start = 0;
3155 end = co->co_argcount - defcount;
3156 }
3157 else {
3158 start = co->co_argcount;
3159 end = start + co->co_kwonlyargcount;
3160 }
3161 for (i = start; i < end; i++) {
3162 if (GETLOCAL(i) == NULL) {
3163 PyObject *raw = PyTuple_GET_ITEM(co->co_varnames, i);
3164 PyObject *name = PyObject_Repr(raw);
3165 if (name == NULL) {
3166 Py_DECREF(missing_names);
3167 return;
3168 }
3169 PyList_SET_ITEM(missing_names, j++, name);
3170 }
3171 }
3172 assert(j == missing);
3173 format_missing(kind, co, missing_names);
3174 Py_DECREF(missing_names);
3175}
3176
3177static void
3178too_many_positional(PyCodeObject *co, int given, int defcount, PyObject **fastlocals)
Benjamin Petersonb204a422011-06-05 22:04:07 -05003179{
3180 int plural;
3181 int kwonly_given = 0;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003182 int i;
3183 PyObject *sig, *kwonly_sig;
3184
Benjamin Petersone109c702011-06-24 09:37:26 -05003185 assert((co->co_flags & CO_VARARGS) == 0);
3186 /* Count missing keyword-only args. */
Benjamin Petersonb204a422011-06-05 22:04:07 -05003187 for (i = co->co_argcount; i < co->co_argcount + co->co_kwonlyargcount; i++)
Benjamin Petersone109c702011-06-24 09:37:26 -05003188 if (GETLOCAL(i) != NULL)
Benjamin Petersonb204a422011-06-05 22:04:07 -05003189 kwonly_given++;
Benjamin Petersone109c702011-06-24 09:37:26 -05003190 if (defcount) {
3191 int atleast = co->co_argcount - defcount;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003192 plural = 1;
3193 sig = PyUnicode_FromFormat("from %d to %d", atleast, co->co_argcount);
3194 }
3195 else {
3196 plural = co->co_argcount != 1;
3197 sig = PyUnicode_FromFormat("%d", co->co_argcount);
3198 }
3199 if (sig == NULL)
3200 return;
3201 if (kwonly_given) {
3202 const char *format = " positional argument%s (and %d keyword-only argument%s)";
3203 kwonly_sig = PyUnicode_FromFormat(format, given != 1 ? "s" : "", kwonly_given,
3204 kwonly_given != 1 ? "s" : "");
3205 if (kwonly_sig == NULL) {
3206 Py_DECREF(sig);
3207 return;
3208 }
3209 }
3210 else {
3211 /* This will not fail. */
3212 kwonly_sig = PyUnicode_FromString("");
Benjamin Petersone109c702011-06-24 09:37:26 -05003213 assert(kwonly_sig != NULL);
Benjamin Petersonb204a422011-06-05 22:04:07 -05003214 }
3215 PyErr_Format(PyExc_TypeError,
3216 "%U() takes %U positional argument%s but %d%U %s given",
3217 co->co_name,
3218 sig,
3219 plural ? "s" : "",
3220 given,
3221 kwonly_sig,
3222 given == 1 && !kwonly_given ? "was" : "were");
3223 Py_DECREF(sig);
3224 Py_DECREF(kwonly_sig);
3225}
3226
Guido van Rossumc2e20742006-02-27 22:32:47 +00003227/* This is gonna seem *real weird*, but if you put some other code between
Martin v. Löwis8d97e332004-06-27 15:43:12 +00003228 PyEval_EvalFrame() and PyEval_EvalCodeEx() you will need to adjust
Guido van Rossumc2e20742006-02-27 22:32:47 +00003229 the test in the if statements in Misc/gdbinit (pystack and pystackv). */
Skip Montanaro786ea6b2004-03-01 15:44:05 +00003230
Tim Peters6d6c1a32001-08-02 04:15:00 +00003231PyObject *
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00003232PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003233 PyObject **args, int argcount, PyObject **kws, int kwcount,
3234 PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure)
Tim Peters5ca576e2001-06-18 22:08:13 +00003235{
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00003236 PyCodeObject* co = (PyCodeObject*)_co;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003237 register PyFrameObject *f;
3238 register PyObject *retval = NULL;
3239 register PyObject **fastlocals, **freevars;
3240 PyThreadState *tstate = PyThreadState_GET();
3241 PyObject *x, *u;
3242 int total_args = co->co_argcount + co->co_kwonlyargcount;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003243 int i;
3244 int n = argcount;
3245 PyObject *kwdict = NULL;
Tim Peters5ca576e2001-06-18 22:08:13 +00003246
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003247 if (globals == NULL) {
3248 PyErr_SetString(PyExc_SystemError,
3249 "PyEval_EvalCodeEx: NULL globals");
3250 return NULL;
3251 }
Tim Peters5ca576e2001-06-18 22:08:13 +00003252
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003253 assert(tstate != NULL);
3254 assert(globals != NULL);
3255 f = PyFrame_New(tstate, co, globals, locals);
3256 if (f == NULL)
3257 return NULL;
Tim Peters5ca576e2001-06-18 22:08:13 +00003258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003259 fastlocals = f->f_localsplus;
3260 freevars = f->f_localsplus + co->co_nlocals;
Tim Peters5ca576e2001-06-18 22:08:13 +00003261
Benjamin Petersonb204a422011-06-05 22:04:07 -05003262 /* Parse arguments. */
3263 if (co->co_flags & CO_VARKEYWORDS) {
3264 kwdict = PyDict_New();
3265 if (kwdict == NULL)
3266 goto fail;
3267 i = total_args;
3268 if (co->co_flags & CO_VARARGS)
3269 i++;
3270 SETLOCAL(i, kwdict);
3271 }
3272 if (argcount > co->co_argcount)
3273 n = co->co_argcount;
3274 for (i = 0; i < n; i++) {
3275 x = args[i];
3276 Py_INCREF(x);
3277 SETLOCAL(i, x);
3278 }
3279 if (co->co_flags & CO_VARARGS) {
3280 u = PyTuple_New(argcount - n);
3281 if (u == NULL)
3282 goto fail;
3283 SETLOCAL(total_args, u);
3284 for (i = n; i < argcount; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003285 x = args[i];
3286 Py_INCREF(x);
Benjamin Petersonb204a422011-06-05 22:04:07 -05003287 PyTuple_SET_ITEM(u, i-n, x);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003288 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003289 }
3290 for (i = 0; i < kwcount; i++) {
3291 PyObject **co_varnames;
3292 PyObject *keyword = kws[2*i];
3293 PyObject *value = kws[2*i + 1];
3294 int j;
3295 if (keyword == NULL || !PyUnicode_Check(keyword)) {
3296 PyErr_Format(PyExc_TypeError,
3297 "%U() keywords must be strings",
3298 co->co_name);
3299 goto fail;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003300 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003301 /* Speed hack: do raw pointer compares. As names are
3302 normally interned this should almost always hit. */
3303 co_varnames = ((PyTupleObject *)(co->co_varnames))->ob_item;
3304 for (j = 0; j < total_args; j++) {
3305 PyObject *nm = co_varnames[j];
3306 if (nm == keyword)
3307 goto kw_found;
3308 }
3309 /* Slow fallback, just in case */
3310 for (j = 0; j < total_args; j++) {
3311 PyObject *nm = co_varnames[j];
3312 int cmp = PyObject_RichCompareBool(
3313 keyword, nm, Py_EQ);
3314 if (cmp > 0)
3315 goto kw_found;
3316 else if (cmp < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003317 goto fail;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003318 }
3319 if (j >= total_args && kwdict == NULL) {
3320 PyErr_Format(PyExc_TypeError,
3321 "%U() got an unexpected "
3322 "keyword argument '%S'",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003323 co->co_name,
3324 keyword);
Benjamin Petersonb204a422011-06-05 22:04:07 -05003325 goto fail;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003326 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003327 PyDict_SetItem(kwdict, keyword, value);
3328 continue;
3329 kw_found:
3330 if (GETLOCAL(j) != NULL) {
3331 PyErr_Format(PyExc_TypeError,
3332 "%U() got multiple "
3333 "values for argument '%S'",
3334 co->co_name,
3335 keyword);
3336 goto fail;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003337 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003338 Py_INCREF(value);
3339 SETLOCAL(j, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003340 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003341 if (argcount > co->co_argcount && !(co->co_flags & CO_VARARGS)) {
Benjamin Petersone109c702011-06-24 09:37:26 -05003342 too_many_positional(co, argcount, defcount, fastlocals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003343 goto fail;
3344 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003345 if (argcount < co->co_argcount) {
3346 int m = co->co_argcount - defcount;
Benjamin Petersone109c702011-06-24 09:37:26 -05003347 int missing = 0;
3348 for (i = argcount; i < m; i++)
3349 if (GETLOCAL(i) == NULL)
3350 missing++;
3351 if (missing) {
3352 missing_arguments(co, missing, defcount, fastlocals);
3353 goto fail;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003354 }
3355 if (n > m)
3356 i = n - m;
3357 else
3358 i = 0;
3359 for (; i < defcount; i++) {
3360 if (GETLOCAL(m+i) == NULL) {
3361 PyObject *def = defs[i];
3362 Py_INCREF(def);
3363 SETLOCAL(m+i, def);
3364 }
3365 }
3366 }
3367 if (co->co_kwonlyargcount > 0) {
Benjamin Petersone109c702011-06-24 09:37:26 -05003368 int missing = 0;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003369 for (i = co->co_argcount; i < total_args; i++) {
3370 PyObject *name;
3371 if (GETLOCAL(i) != NULL)
3372 continue;
3373 name = PyTuple_GET_ITEM(co->co_varnames, i);
3374 if (kwdefs != NULL) {
3375 PyObject *def = PyDict_GetItem(kwdefs, name);
3376 if (def) {
3377 Py_INCREF(def);
3378 SETLOCAL(i, def);
3379 continue;
3380 }
3381 }
Benjamin Petersone109c702011-06-24 09:37:26 -05003382 missing++;
3383 }
3384 if (missing) {
3385 missing_arguments(co, missing, -1, fastlocals);
Benjamin Petersonb204a422011-06-05 22:04:07 -05003386 goto fail;
3387 }
3388 }
3389
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003390 /* Allocate and initialize storage for cell vars, and copy free
Benjamin Peterson90037602011-06-25 22:54:45 -05003391 vars into frame. */
3392 for (i = 0; i < PyTuple_GET_SIZE(co->co_cellvars); ++i) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003393 PyObject *c;
Benjamin Peterson90037602011-06-25 22:54:45 -05003394 int arg;
3395 /* Possibly account for the cell variable being an argument. */
3396 if (co->co_cell2arg != NULL &&
3397 (arg = co->co_cell2arg[i]) != CO_CELL_NOT_AN_ARG)
3398 c = PyCell_New(GETLOCAL(arg));
3399 else
3400 c = PyCell_New(NULL);
3401 if (c == NULL)
3402 goto fail;
3403 SETLOCAL(co->co_nlocals + i, c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003404 }
Benjamin Peterson90037602011-06-25 22:54:45 -05003405 for (i = 0; i < PyTuple_GET_SIZE(co->co_freevars); ++i) {
3406 PyObject *o = PyTuple_GET_ITEM(closure, i);
3407 Py_INCREF(o);
3408 freevars[PyTuple_GET_SIZE(co->co_cellvars) + i] = o;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003409 }
Tim Peters5ca576e2001-06-18 22:08:13 +00003410
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003411 if (co->co_flags & CO_GENERATOR) {
3412 /* Don't need to keep the reference to f_back, it will be set
3413 * when the generator is resumed. */
3414 Py_XDECREF(f->f_back);
3415 f->f_back = NULL;
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00003416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003417 PCALL(PCALL_GENERATOR);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003418
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003419 /* Create a new generator that owns the ready to run frame
3420 * and return that as the value. */
3421 return PyGen_New(f);
3422 }
Tim Peters5ca576e2001-06-18 22:08:13 +00003423
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003424 retval = PyEval_EvalFrameEx(f,0);
Tim Peters5ca576e2001-06-18 22:08:13 +00003425
Thomas Woutersce272b62007-09-19 21:19:28 +00003426fail: /* Jump here from prelude on failure */
Tim Peters5ca576e2001-06-18 22:08:13 +00003427
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003428 /* decref'ing the frame can cause __del__ methods to get invoked,
3429 which can call back into Python. While we're done with the
3430 current Python frame (f), the associated C stack is still in use,
3431 so recursion_depth must be boosted for the duration.
3432 */
3433 assert(tstate != NULL);
3434 ++tstate->recursion_depth;
3435 Py_DECREF(f);
3436 --tstate->recursion_depth;
3437 return retval;
Tim Peters5ca576e2001-06-18 22:08:13 +00003438}
3439
3440
Benjamin Peterson876b2f22009-06-28 03:18:59 +00003441static PyObject *
Benjamin Petersonce798522012-01-22 11:24:29 -05003442special_lookup(PyObject *o, _Py_Identifier *id)
Benjamin Peterson876b2f22009-06-28 03:18:59 +00003443{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003444 PyObject *res;
Benjamin Petersonce798522012-01-22 11:24:29 -05003445 res = _PyObject_LookupSpecial(o, id);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003446 if (res == NULL && !PyErr_Occurred()) {
Benjamin Petersonce798522012-01-22 11:24:29 -05003447 PyErr_SetObject(PyExc_AttributeError, id->object);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003448 return NULL;
3449 }
3450 return res;
Benjamin Peterson876b2f22009-06-28 03:18:59 +00003451}
3452
3453
Benjamin Peterson87880242011-07-03 16:48:31 -05003454/* These 3 functions deal with the exception state of generators. */
3455
3456static void
3457save_exc_state(PyThreadState *tstate, PyFrameObject *f)
3458{
3459 PyObject *type, *value, *traceback;
3460 Py_XINCREF(tstate->exc_type);
3461 Py_XINCREF(tstate->exc_value);
3462 Py_XINCREF(tstate->exc_traceback);
3463 type = f->f_exc_type;
3464 value = f->f_exc_value;
3465 traceback = f->f_exc_traceback;
3466 f->f_exc_type = tstate->exc_type;
3467 f->f_exc_value = tstate->exc_value;
3468 f->f_exc_traceback = tstate->exc_traceback;
3469 Py_XDECREF(type);
3470 Py_XDECREF(value);
Victor Stinnerd2a915d2011-10-02 20:34:20 +02003471 Py_XDECREF(traceback);
Benjamin Peterson87880242011-07-03 16:48:31 -05003472}
3473
3474static void
3475swap_exc_state(PyThreadState *tstate, PyFrameObject *f)
3476{
3477 PyObject *tmp;
3478 tmp = tstate->exc_type;
3479 tstate->exc_type = f->f_exc_type;
3480 f->f_exc_type = tmp;
3481 tmp = tstate->exc_value;
3482 tstate->exc_value = f->f_exc_value;
3483 f->f_exc_value = tmp;
3484 tmp = tstate->exc_traceback;
3485 tstate->exc_traceback = f->f_exc_traceback;
3486 f->f_exc_traceback = tmp;
3487}
3488
3489static void
3490restore_and_clear_exc_state(PyThreadState *tstate, PyFrameObject *f)
3491{
3492 PyObject *type, *value, *tb;
3493 type = tstate->exc_type;
3494 value = tstate->exc_value;
3495 tb = tstate->exc_traceback;
3496 tstate->exc_type = f->f_exc_type;
3497 tstate->exc_value = f->f_exc_value;
3498 tstate->exc_traceback = f->f_exc_traceback;
3499 f->f_exc_type = NULL;
3500 f->f_exc_value = NULL;
3501 f->f_exc_traceback = NULL;
3502 Py_XDECREF(type);
3503 Py_XDECREF(value);
3504 Py_XDECREF(tb);
3505}
3506
3507
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003508/* Logic for the raise statement (too complicated for inlining).
3509 This *consumes* a reference count to each of its arguments. */
Raymond Hettinger7c958652004-04-06 10:11:10 +00003510static enum why_code
Collin Winter828f04a2007-08-31 00:04:24 +00003511do_raise(PyObject *exc, PyObject *cause)
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003512{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003513 PyObject *type = NULL, *value = NULL;
Collin Winter828f04a2007-08-31 00:04:24 +00003514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003515 if (exc == NULL) {
3516 /* Reraise */
3517 PyThreadState *tstate = PyThreadState_GET();
3518 PyObject *tb;
3519 type = tstate->exc_type;
3520 value = tstate->exc_value;
3521 tb = tstate->exc_traceback;
3522 if (type == Py_None) {
3523 PyErr_SetString(PyExc_RuntimeError,
3524 "No active exception to reraise");
3525 return WHY_EXCEPTION;
3526 }
3527 Py_XINCREF(type);
3528 Py_XINCREF(value);
3529 Py_XINCREF(tb);
3530 PyErr_Restore(type, value, tb);
3531 return WHY_RERAISE;
3532 }
Guido van Rossumac7be682001-01-17 15:42:30 +00003533
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003534 /* We support the following forms of raise:
3535 raise
Collin Winter828f04a2007-08-31 00:04:24 +00003536 raise <instance>
3537 raise <type> */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003539 if (PyExceptionClass_Check(exc)) {
3540 type = exc;
3541 value = PyObject_CallObject(exc, NULL);
3542 if (value == NULL)
3543 goto raise_error;
Benjamin Peterson5afa03a2011-07-15 14:09:26 -05003544 if (!PyExceptionInstance_Check(value)) {
3545 PyErr_Format(PyExc_TypeError,
3546 "calling %R should have returned an instance of "
3547 "BaseException, not %R",
3548 type, Py_TYPE(value));
3549 goto raise_error;
3550 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003551 }
3552 else if (PyExceptionInstance_Check(exc)) {
3553 value = exc;
3554 type = PyExceptionInstance_Class(exc);
3555 Py_INCREF(type);
3556 }
3557 else {
3558 /* Not something you can raise. You get an exception
3559 anyway, just not what you specified :-) */
3560 Py_DECREF(exc);
3561 PyErr_SetString(PyExc_TypeError,
3562 "exceptions must derive from BaseException");
3563 goto raise_error;
3564 }
Collin Winter828f04a2007-08-31 00:04:24 +00003565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003566 if (cause) {
3567 PyObject *fixed_cause;
Nick Coghlanab7bf212012-02-26 17:49:52 +10003568 int result;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003569 if (PyExceptionClass_Check(cause)) {
3570 fixed_cause = PyObject_CallObject(cause, NULL);
3571 if (fixed_cause == NULL)
3572 goto raise_error;
Nick Coghlanab7bf212012-02-26 17:49:52 +10003573 Py_CLEAR(cause);
3574 } else {
3575 /* Let "exc.__cause__ = cause" handle all further checks */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003576 fixed_cause = cause;
Nick Coghlanab7bf212012-02-26 17:49:52 +10003577 cause = NULL; /* Steal the reference */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003578 }
Nick Coghlanab7bf212012-02-26 17:49:52 +10003579 /* We retain ownership of the reference to fixed_cause */
3580 result = _PyException_SetCauseChecked(value, fixed_cause);
3581 Py_DECREF(fixed_cause);
3582 if (result < 0) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003583 goto raise_error;
3584 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003585 }
Collin Winter828f04a2007-08-31 00:04:24 +00003586
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003587 PyErr_SetObject(type, value);
3588 /* PyErr_SetObject incref's its arguments */
3589 Py_XDECREF(value);
3590 Py_XDECREF(type);
3591 return WHY_EXCEPTION;
Collin Winter828f04a2007-08-31 00:04:24 +00003592
3593raise_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003594 Py_XDECREF(value);
3595 Py_XDECREF(type);
3596 Py_XDECREF(cause);
3597 return WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003598}
3599
Tim Petersd6d010b2001-06-21 02:49:55 +00003600/* Iterate v argcnt times and store the results on the stack (via decreasing
Guido van Rossum0368b722007-05-11 16:50:42 +00003601 sp). Return 1 for success, 0 if error.
Antoine Pitrou9a2310d2008-07-25 22:39:39 +00003602
Guido van Rossum0368b722007-05-11 16:50:42 +00003603 If argcntafter == -1, do a simple unpack. If it is >= 0, do an unpack
3604 with a variable target.
3605*/
Tim Petersd6d010b2001-06-21 02:49:55 +00003606
Barry Warsawe42b18f1997-08-25 22:13:04 +00003607static int
Guido van Rossum0368b722007-05-11 16:50:42 +00003608unpack_iterable(PyObject *v, int argcnt, int argcntafter, PyObject **sp)
Barry Warsawe42b18f1997-08-25 22:13:04 +00003609{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003610 int i = 0, j = 0;
3611 Py_ssize_t ll = 0;
3612 PyObject *it; /* iter(v) */
3613 PyObject *w;
3614 PyObject *l = NULL; /* variable list */
Guido van Rossumac7be682001-01-17 15:42:30 +00003615
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003616 assert(v != NULL);
Tim Petersd6d010b2001-06-21 02:49:55 +00003617
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003618 it = PyObject_GetIter(v);
3619 if (it == NULL)
3620 goto Error;
Tim Petersd6d010b2001-06-21 02:49:55 +00003621
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003622 for (; i < argcnt; i++) {
3623 w = PyIter_Next(it);
3624 if (w == NULL) {
3625 /* Iterator done, via error or exhaustion. */
3626 if (!PyErr_Occurred()) {
3627 PyErr_Format(PyExc_ValueError,
3628 "need more than %d value%s to unpack",
3629 i, i == 1 ? "" : "s");
3630 }
3631 goto Error;
3632 }
3633 *--sp = w;
3634 }
Tim Petersd6d010b2001-06-21 02:49:55 +00003635
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003636 if (argcntafter == -1) {
3637 /* We better have exhausted the iterator now. */
3638 w = PyIter_Next(it);
3639 if (w == NULL) {
3640 if (PyErr_Occurred())
3641 goto Error;
3642 Py_DECREF(it);
3643 return 1;
3644 }
3645 Py_DECREF(w);
Georg Brandl0310a832010-07-10 10:32:36 +00003646 PyErr_Format(PyExc_ValueError, "too many values to unpack "
3647 "(expected %d)", argcnt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003648 goto Error;
3649 }
Guido van Rossum0368b722007-05-11 16:50:42 +00003650
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003651 l = PySequence_List(it);
3652 if (l == NULL)
3653 goto Error;
3654 *--sp = l;
3655 i++;
Guido van Rossum0368b722007-05-11 16:50:42 +00003656
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003657 ll = PyList_GET_SIZE(l);
3658 if (ll < argcntafter) {
3659 PyErr_Format(PyExc_ValueError, "need more than %zd values to unpack",
3660 argcnt + ll);
3661 goto Error;
3662 }
Guido van Rossum0368b722007-05-11 16:50:42 +00003663
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003664 /* Pop the "after-variable" args off the list. */
3665 for (j = argcntafter; j > 0; j--, i++) {
3666 *--sp = PyList_GET_ITEM(l, ll - j);
3667 }
3668 /* Resize the list. */
3669 Py_SIZE(l) = ll - argcntafter;
3670 Py_DECREF(it);
3671 return 1;
Guido van Rossum0368b722007-05-11 16:50:42 +00003672
Tim Petersd6d010b2001-06-21 02:49:55 +00003673Error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003674 for (; i > 0; i--, sp++)
3675 Py_DECREF(*sp);
3676 Py_XDECREF(it);
3677 return 0;
Barry Warsawe42b18f1997-08-25 22:13:04 +00003678}
3679
3680
Guido van Rossum96a42c81992-01-12 02:29:51 +00003681#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00003682static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003683prtrace(PyObject *v, char *str)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003684{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003685 printf("%s ", str);
3686 if (PyObject_Print(v, stdout, 0) != 0)
3687 PyErr_Clear(); /* Don't know what else to do */
3688 printf("\n");
3689 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003690}
Guido van Rossum3f5da241990-12-20 15:06:42 +00003691#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003692
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003693static void
Fred Drake5755ce62001-06-27 19:19:46 +00003694call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003695{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003696 PyObject *type, *value, *traceback, *arg;
3697 int err;
3698 PyErr_Fetch(&type, &value, &traceback);
3699 if (value == NULL) {
3700 value = Py_None;
3701 Py_INCREF(value);
3702 }
3703 arg = PyTuple_Pack(3, type, value, traceback);
3704 if (arg == NULL) {
3705 PyErr_Restore(type, value, traceback);
3706 return;
3707 }
3708 err = call_trace(func, self, f, PyTrace_EXCEPTION, arg);
3709 Py_DECREF(arg);
3710 if (err == 0)
3711 PyErr_Restore(type, value, traceback);
3712 else {
3713 Py_XDECREF(type);
3714 Py_XDECREF(value);
3715 Py_XDECREF(traceback);
3716 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003717}
3718
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003719static int
Fred Drake4ec5d562001-10-04 19:26:43 +00003720call_trace_protected(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003721 int what, PyObject *arg)
Fred Drake4ec5d562001-10-04 19:26:43 +00003722{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003723 PyObject *type, *value, *traceback;
3724 int err;
3725 PyErr_Fetch(&type, &value, &traceback);
3726 err = call_trace(func, obj, frame, what, arg);
3727 if (err == 0)
3728 {
3729 PyErr_Restore(type, value, traceback);
3730 return 0;
3731 }
3732 else {
3733 Py_XDECREF(type);
3734 Py_XDECREF(value);
3735 Py_XDECREF(traceback);
3736 return -1;
3737 }
Fred Drake4ec5d562001-10-04 19:26:43 +00003738}
3739
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003740static int
Fred Drake5755ce62001-06-27 19:19:46 +00003741call_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003742 int what, PyObject *arg)
Guido van Rossum96a42c81992-01-12 02:29:51 +00003743{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003744 register PyThreadState *tstate = frame->f_tstate;
3745 int result;
3746 if (tstate->tracing)
3747 return 0;
3748 tstate->tracing++;
3749 tstate->use_tracing = 0;
3750 result = func(obj, frame, what, arg);
3751 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3752 || (tstate->c_profilefunc != NULL));
3753 tstate->tracing--;
3754 return result;
Guido van Rossum96a42c81992-01-12 02:29:51 +00003755}
3756
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00003757PyObject *
3758_PyEval_CallTracing(PyObject *func, PyObject *args)
3759{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003760 PyFrameObject *frame = PyEval_GetFrame();
3761 PyThreadState *tstate = frame->f_tstate;
3762 int save_tracing = tstate->tracing;
3763 int save_use_tracing = tstate->use_tracing;
3764 PyObject *result;
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00003765
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003766 tstate->tracing = 0;
3767 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3768 || (tstate->c_profilefunc != NULL));
3769 result = PyObject_Call(func, args, NULL);
3770 tstate->tracing = save_tracing;
3771 tstate->use_tracing = save_use_tracing;
3772 return result;
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00003773}
3774
Alexandre Vassalotti7b82b402009-07-21 04:30:03 +00003775/* See Objects/lnotab_notes.txt for a description of how tracing works. */
Michael W. Hudson006c7522002-11-08 13:08:46 +00003776static int
Tim Peters8a5c3c72004-04-05 19:36:21 +00003777maybe_call_line_trace(Py_tracefunc func, PyObject *obj,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003778 PyFrameObject *frame, int *instr_lb, int *instr_ub,
3779 int *instr_prev)
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003780{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003781 int result = 0;
3782 int line = frame->f_lineno;
Michael W. Hudson006c7522002-11-08 13:08:46 +00003783
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003784 /* If the last instruction executed isn't in the current
3785 instruction window, reset the window.
3786 */
3787 if (frame->f_lasti < *instr_lb || frame->f_lasti >= *instr_ub) {
3788 PyAddrPair bounds;
3789 line = _PyCode_CheckLineNumber(frame->f_code, frame->f_lasti,
3790 &bounds);
3791 *instr_lb = bounds.ap_lower;
3792 *instr_ub = bounds.ap_upper;
3793 }
3794 /* If the last instruction falls at the start of a line or if
3795 it represents a jump backwards, update the frame's line
3796 number and call the trace function. */
3797 if (frame->f_lasti == *instr_lb || frame->f_lasti < *instr_prev) {
3798 frame->f_lineno = line;
3799 result = call_trace(func, obj, frame, PyTrace_LINE, Py_None);
3800 }
3801 *instr_prev = frame->f_lasti;
3802 return result;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003803}
3804
Fred Drake5755ce62001-06-27 19:19:46 +00003805void
3806PyEval_SetProfile(Py_tracefunc func, PyObject *arg)
Fred Draked0838392001-06-16 21:02:31 +00003807{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003808 PyThreadState *tstate = PyThreadState_GET();
3809 PyObject *temp = tstate->c_profileobj;
3810 Py_XINCREF(arg);
3811 tstate->c_profilefunc = NULL;
3812 tstate->c_profileobj = NULL;
3813 /* Must make sure that tracing is not ignored if 'temp' is freed */
3814 tstate->use_tracing = tstate->c_tracefunc != NULL;
3815 Py_XDECREF(temp);
3816 tstate->c_profilefunc = func;
3817 tstate->c_profileobj = arg;
3818 /* Flag that tracing or profiling is turned on */
3819 tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
Fred Drake5755ce62001-06-27 19:19:46 +00003820}
3821
3822void
3823PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
3824{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003825 PyThreadState *tstate = PyThreadState_GET();
3826 PyObject *temp = tstate->c_traceobj;
3827 _Py_TracingPossible += (func != NULL) - (tstate->c_tracefunc != NULL);
3828 Py_XINCREF(arg);
3829 tstate->c_tracefunc = NULL;
3830 tstate->c_traceobj = NULL;
3831 /* Must make sure that profiling is not ignored if 'temp' is freed */
3832 tstate->use_tracing = tstate->c_profilefunc != NULL;
3833 Py_XDECREF(temp);
3834 tstate->c_tracefunc = func;
3835 tstate->c_traceobj = arg;
3836 /* Flag that tracing or profiling is turned on */
3837 tstate->use_tracing = ((func != NULL)
3838 || (tstate->c_profilefunc != NULL));
Fred Draked0838392001-06-16 21:02:31 +00003839}
3840
Guido van Rossumb209a111997-04-29 18:18:01 +00003841PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003842PyEval_GetBuiltins(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00003843{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003844 PyFrameObject *current_frame = PyEval_GetFrame();
3845 if (current_frame == NULL)
3846 return PyThreadState_GET()->interp->builtins;
3847 else
3848 return current_frame->f_builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00003849}
3850
Guido van Rossumb209a111997-04-29 18:18:01 +00003851PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003852PyEval_GetLocals(void)
Guido van Rossum5b722181993-03-30 17:46:03 +00003853{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003854 PyFrameObject *current_frame = PyEval_GetFrame();
3855 if (current_frame == NULL)
3856 return NULL;
3857 PyFrame_FastToLocals(current_frame);
3858 return current_frame->f_locals;
Guido van Rossum5b722181993-03-30 17:46:03 +00003859}
3860
Guido van Rossumb209a111997-04-29 18:18:01 +00003861PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003862PyEval_GetGlobals(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003863{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003864 PyFrameObject *current_frame = PyEval_GetFrame();
3865 if (current_frame == NULL)
3866 return NULL;
3867 else
3868 return current_frame->f_globals;
Guido van Rossum3f5da241990-12-20 15:06:42 +00003869}
3870
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003871PyFrameObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003872PyEval_GetFrame(void)
Guido van Rossume59214e1994-08-30 08:01:59 +00003873{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003874 PyThreadState *tstate = PyThreadState_GET();
3875 return _PyThreadState_GetFrame(tstate);
Guido van Rossume59214e1994-08-30 08:01:59 +00003876}
3877
Guido van Rossum6135a871995-01-09 17:53:26 +00003878int
Tim Peters5ba58662001-07-16 02:29:45 +00003879PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
Jeremy Hylton061d1062001-03-22 02:32:48 +00003880{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003881 PyFrameObject *current_frame = PyEval_GetFrame();
3882 int result = cf->cf_flags != 0;
Tim Peters5ba58662001-07-16 02:29:45 +00003883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003884 if (current_frame != NULL) {
3885 const int codeflags = current_frame->f_code->co_flags;
3886 const int compilerflags = codeflags & PyCF_MASK;
3887 if (compilerflags) {
3888 result = 1;
3889 cf->cf_flags |= compilerflags;
3890 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003891#if 0 /* future keyword */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003892 if (codeflags & CO_GENERATOR_ALLOWED) {
3893 result = 1;
3894 cf->cf_flags |= CO_GENERATOR_ALLOWED;
3895 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003896#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003897 }
3898 return result;
Jeremy Hylton061d1062001-03-22 02:32:48 +00003899}
3900
Guido van Rossum3f5da241990-12-20 15:06:42 +00003901
Guido van Rossum681d79a1995-07-18 14:51:37 +00003902/* External interface to call any callable object.
Antoine Pitrou8689a102010-04-01 16:53:15 +00003903 The arg must be a tuple or NULL. The kw must be a dict or NULL. */
Guido van Rossume59214e1994-08-30 08:01:59 +00003904
Guido van Rossumb209a111997-04-29 18:18:01 +00003905PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003906PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum681d79a1995-07-18 14:51:37 +00003907{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003908 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00003909
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003910 if (arg == NULL) {
3911 arg = PyTuple_New(0);
3912 if (arg == NULL)
3913 return NULL;
3914 }
3915 else if (!PyTuple_Check(arg)) {
3916 PyErr_SetString(PyExc_TypeError,
3917 "argument list must be a tuple");
3918 return NULL;
3919 }
3920 else
3921 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003922
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003923 if (kw != NULL && !PyDict_Check(kw)) {
3924 PyErr_SetString(PyExc_TypeError,
3925 "keyword list must be a dictionary");
3926 Py_DECREF(arg);
3927 return NULL;
3928 }
Guido van Rossume3e61c11995-08-04 04:14:47 +00003929
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003930 result = PyObject_Call(func, arg, kw);
3931 Py_DECREF(arg);
3932 return result;
Jeremy Hylton52820442001-01-03 23:52:36 +00003933}
3934
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003935const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003936PyEval_GetFuncName(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003937{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003938 if (PyMethod_Check(func))
3939 return PyEval_GetFuncName(PyMethod_GET_FUNCTION(func));
3940 else if (PyFunction_Check(func))
3941 return _PyUnicode_AsString(((PyFunctionObject*)func)->func_name);
3942 else if (PyCFunction_Check(func))
3943 return ((PyCFunctionObject*)func)->m_ml->ml_name;
3944 else
3945 return func->ob_type->tp_name;
Jeremy Hylton512a2372001-04-11 13:52:29 +00003946}
3947
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003948const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003949PyEval_GetFuncDesc(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003950{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003951 if (PyMethod_Check(func))
3952 return "()";
3953 else if (PyFunction_Check(func))
3954 return "()";
3955 else if (PyCFunction_Check(func))
3956 return "()";
3957 else
3958 return " object";
Jeremy Hylton512a2372001-04-11 13:52:29 +00003959}
3960
Neal Norwitzaddfe0c2002-11-10 14:33:26 +00003961static void
Jeremy Hylton192690e2002-08-16 18:36:11 +00003962err_args(PyObject *func, int flags, int nargs)
3963{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003964 if (flags & METH_NOARGS)
3965 PyErr_Format(PyExc_TypeError,
3966 "%.200s() takes no arguments (%d given)",
3967 ((PyCFunctionObject *)func)->m_ml->ml_name,
3968 nargs);
3969 else
3970 PyErr_Format(PyExc_TypeError,
3971 "%.200s() takes exactly one argument (%d given)",
3972 ((PyCFunctionObject *)func)->m_ml->ml_name,
3973 nargs);
Jeremy Hylton192690e2002-08-16 18:36:11 +00003974}
3975
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003976#define C_TRACE(x, call) \
Nicholas Bastind858a772004-06-25 23:31:06 +00003977if (tstate->use_tracing && tstate->c_profilefunc) { \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003978 if (call_trace(tstate->c_profilefunc, \
3979 tstate->c_profileobj, \
3980 tstate->frame, PyTrace_C_CALL, \
3981 func)) { \
3982 x = NULL; \
3983 } \
3984 else { \
3985 x = call; \
3986 if (tstate->c_profilefunc != NULL) { \
3987 if (x == NULL) { \
3988 call_trace_protected(tstate->c_profilefunc, \
3989 tstate->c_profileobj, \
3990 tstate->frame, PyTrace_C_EXCEPTION, \
3991 func); \
3992 /* XXX should pass (type, value, tb) */ \
3993 } else { \
3994 if (call_trace(tstate->c_profilefunc, \
3995 tstate->c_profileobj, \
3996 tstate->frame, PyTrace_C_RETURN, \
3997 func)) { \
3998 Py_DECREF(x); \
3999 x = NULL; \
4000 } \
4001 } \
4002 } \
4003 } \
Nicholas Bastind858a772004-06-25 23:31:06 +00004004} else { \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004005 x = call; \
4006 }
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00004007
Jeremy Hyltone8c04322002-08-16 17:47:26 +00004008static PyObject *
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00004009call_function(PyObject ***pp_stack, int oparg
4010#ifdef WITH_TSC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004011 , uint64* pintr0, uint64* pintr1
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00004012#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004013 )
Jeremy Hyltone8c04322002-08-16 17:47:26 +00004014{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004015 int na = oparg & 0xff;
4016 int nk = (oparg>>8) & 0xff;
4017 int n = na + 2 * nk;
4018 PyObject **pfunc = (*pp_stack) - n - 1;
4019 PyObject *func = *pfunc;
4020 PyObject *x, *w;
Jeremy Hyltone8c04322002-08-16 17:47:26 +00004021
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004022 /* Always dispatch PyCFunction first, because these are
4023 presumed to be the most frequent callable object.
4024 */
4025 if (PyCFunction_Check(func) && nk == 0) {
4026 int flags = PyCFunction_GET_FLAGS(func);
4027 PyThreadState *tstate = PyThreadState_GET();
Raymond Hettingera7f56bc2004-06-26 04:34:33 +00004028
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004029 PCALL(PCALL_CFUNCTION);
4030 if (flags & (METH_NOARGS | METH_O)) {
4031 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
4032 PyObject *self = PyCFunction_GET_SELF(func);
4033 if (flags & METH_NOARGS && na == 0) {
4034 C_TRACE(x, (*meth)(self,NULL));
4035 }
4036 else if (flags & METH_O && na == 1) {
4037 PyObject *arg = EXT_POP(*pp_stack);
4038 C_TRACE(x, (*meth)(self,arg));
4039 Py_DECREF(arg);
4040 }
4041 else {
4042 err_args(func, flags, na);
4043 x = NULL;
4044 }
4045 }
4046 else {
4047 PyObject *callargs;
4048 callargs = load_args(pp_stack, na);
4049 READ_TIMESTAMP(*pintr0);
4050 C_TRACE(x, PyCFunction_Call(func,callargs,NULL));
4051 READ_TIMESTAMP(*pintr1);
4052 Py_XDECREF(callargs);
4053 }
4054 } else {
4055 if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) {
4056 /* optimize access to bound methods */
4057 PyObject *self = PyMethod_GET_SELF(func);
4058 PCALL(PCALL_METHOD);
4059 PCALL(PCALL_BOUND_METHOD);
4060 Py_INCREF(self);
4061 func = PyMethod_GET_FUNCTION(func);
4062 Py_INCREF(func);
4063 Py_DECREF(*pfunc);
4064 *pfunc = self;
4065 na++;
4066 n++;
4067 } else
4068 Py_INCREF(func);
4069 READ_TIMESTAMP(*pintr0);
4070 if (PyFunction_Check(func))
4071 x = fast_function(func, pp_stack, n, na, nk);
4072 else
4073 x = do_call(func, pp_stack, na, nk);
4074 READ_TIMESTAMP(*pintr1);
4075 Py_DECREF(func);
4076 }
Tim Peters8a5c3c72004-04-05 19:36:21 +00004077
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004078 /* Clear the stack of the function object. Also removes
4079 the arguments in case they weren't consumed already
4080 (fast_function() and err_args() leave them on the stack).
4081 */
4082 while ((*pp_stack) > pfunc) {
4083 w = EXT_POP(*pp_stack);
4084 Py_DECREF(w);
4085 PCALL(PCALL_POP);
4086 }
4087 return x;
Jeremy Hyltone8c04322002-08-16 17:47:26 +00004088}
4089
Jeremy Hylton192690e2002-08-16 18:36:11 +00004090/* The fast_function() function optimize calls for which no argument
Jeremy Hylton52820442001-01-03 23:52:36 +00004091 tuple is necessary; the objects are passed directly from the stack.
Jeremy Hylton985eba52003-02-05 23:13:00 +00004092 For the simplest case -- a function that takes only positional
4093 arguments and is called with only positional arguments -- it
4094 inlines the most primitive frame setup code from
4095 PyEval_EvalCodeEx(), which vastly reduces the checks that must be
4096 done before evaluating the frame.
Jeremy Hylton52820442001-01-03 23:52:36 +00004097*/
4098
4099static PyObject *
Guido van Rossumac7be682001-01-17 15:42:30 +00004100fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
Jeremy Hylton52820442001-01-03 23:52:36 +00004101{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004102 PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
4103 PyObject *globals = PyFunction_GET_GLOBALS(func);
4104 PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
4105 PyObject *kwdefs = PyFunction_GET_KW_DEFAULTS(func);
4106 PyObject **d = NULL;
4107 int nd = 0;
Jeremy Hylton52820442001-01-03 23:52:36 +00004108
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004109 PCALL(PCALL_FUNCTION);
4110 PCALL(PCALL_FAST_FUNCTION);
4111 if (argdefs == NULL && co->co_argcount == n &&
4112 co->co_kwonlyargcount == 0 && nk==0 &&
4113 co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
4114 PyFrameObject *f;
4115 PyObject *retval = NULL;
4116 PyThreadState *tstate = PyThreadState_GET();
4117 PyObject **fastlocals, **stack;
4118 int i;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004120 PCALL(PCALL_FASTER_FUNCTION);
4121 assert(globals != NULL);
4122 /* XXX Perhaps we should create a specialized
4123 PyFrame_New() that doesn't take locals, but does
4124 take builtins without sanity checking them.
4125 */
4126 assert(tstate != NULL);
4127 f = PyFrame_New(tstate, co, globals, NULL);
4128 if (f == NULL)
4129 return NULL;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004130
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004131 fastlocals = f->f_localsplus;
4132 stack = (*pp_stack) - n;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004133
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004134 for (i = 0; i < n; i++) {
4135 Py_INCREF(*stack);
4136 fastlocals[i] = *stack++;
4137 }
4138 retval = PyEval_EvalFrameEx(f,0);
4139 ++tstate->recursion_depth;
4140 Py_DECREF(f);
4141 --tstate->recursion_depth;
4142 return retval;
4143 }
4144 if (argdefs != NULL) {
4145 d = &PyTuple_GET_ITEM(argdefs, 0);
4146 nd = Py_SIZE(argdefs);
4147 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00004148 return PyEval_EvalCodeEx((PyObject*)co, globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004149 (PyObject *)NULL, (*pp_stack)-n, na,
4150 (*pp_stack)-2*nk, nk, d, nd, kwdefs,
4151 PyFunction_GET_CLOSURE(func));
Jeremy Hylton52820442001-01-03 23:52:36 +00004152}
4153
4154static PyObject *
Ka-Ping Yee20579702001-01-15 22:14:16 +00004155update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack,
4156 PyObject *func)
Jeremy Hylton52820442001-01-03 23:52:36 +00004157{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004158 PyObject *kwdict = NULL;
4159 if (orig_kwdict == NULL)
4160 kwdict = PyDict_New();
4161 else {
4162 kwdict = PyDict_Copy(orig_kwdict);
4163 Py_DECREF(orig_kwdict);
4164 }
4165 if (kwdict == NULL)
4166 return NULL;
4167 while (--nk >= 0) {
4168 int err;
4169 PyObject *value = EXT_POP(*pp_stack);
4170 PyObject *key = EXT_POP(*pp_stack);
4171 if (PyDict_GetItem(kwdict, key) != NULL) {
4172 PyErr_Format(PyExc_TypeError,
4173 "%.200s%s got multiple values "
4174 "for keyword argument '%U'",
4175 PyEval_GetFuncName(func),
4176 PyEval_GetFuncDesc(func),
4177 key);
4178 Py_DECREF(key);
4179 Py_DECREF(value);
4180 Py_DECREF(kwdict);
4181 return NULL;
4182 }
4183 err = PyDict_SetItem(kwdict, key, value);
4184 Py_DECREF(key);
4185 Py_DECREF(value);
4186 if (err) {
4187 Py_DECREF(kwdict);
4188 return NULL;
4189 }
4190 }
4191 return kwdict;
Jeremy Hylton52820442001-01-03 23:52:36 +00004192}
4193
4194static PyObject *
4195update_star_args(int nstack, int nstar, PyObject *stararg,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004196 PyObject ***pp_stack)
Jeremy Hylton52820442001-01-03 23:52:36 +00004197{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004198 PyObject *callargs, *w;
Jeremy Hylton52820442001-01-03 23:52:36 +00004199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004200 callargs = PyTuple_New(nstack + nstar);
4201 if (callargs == NULL) {
4202 return NULL;
4203 }
4204 if (nstar) {
4205 int i;
4206 for (i = 0; i < nstar; i++) {
4207 PyObject *a = PyTuple_GET_ITEM(stararg, i);
4208 Py_INCREF(a);
4209 PyTuple_SET_ITEM(callargs, nstack + i, a);
4210 }
4211 }
4212 while (--nstack >= 0) {
4213 w = EXT_POP(*pp_stack);
4214 PyTuple_SET_ITEM(callargs, nstack, w);
4215 }
4216 return callargs;
Jeremy Hylton52820442001-01-03 23:52:36 +00004217}
4218
4219static PyObject *
4220load_args(PyObject ***pp_stack, int na)
4221{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004222 PyObject *args = PyTuple_New(na);
4223 PyObject *w;
Jeremy Hylton52820442001-01-03 23:52:36 +00004224
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004225 if (args == NULL)
4226 return NULL;
4227 while (--na >= 0) {
4228 w = EXT_POP(*pp_stack);
4229 PyTuple_SET_ITEM(args, na, w);
4230 }
4231 return args;
Jeremy Hylton52820442001-01-03 23:52:36 +00004232}
4233
4234static PyObject *
4235do_call(PyObject *func, PyObject ***pp_stack, int na, int nk)
4236{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004237 PyObject *callargs = NULL;
4238 PyObject *kwdict = NULL;
4239 PyObject *result = NULL;
Jeremy Hylton52820442001-01-03 23:52:36 +00004240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004241 if (nk > 0) {
4242 kwdict = update_keyword_args(NULL, nk, pp_stack, func);
4243 if (kwdict == NULL)
4244 goto call_fail;
4245 }
4246 callargs = load_args(pp_stack, na);
4247 if (callargs == NULL)
4248 goto call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004249#ifdef CALL_PROFILE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004250 /* At this point, we have to look at the type of func to
4251 update the call stats properly. Do it here so as to avoid
4252 exposing the call stats machinery outside ceval.c
4253 */
4254 if (PyFunction_Check(func))
4255 PCALL(PCALL_FUNCTION);
4256 else if (PyMethod_Check(func))
4257 PCALL(PCALL_METHOD);
4258 else if (PyType_Check(func))
4259 PCALL(PCALL_TYPE);
4260 else if (PyCFunction_Check(func))
4261 PCALL(PCALL_CFUNCTION);
4262 else
4263 PCALL(PCALL_OTHER);
Jeremy Hylton985eba52003-02-05 23:13:00 +00004264#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004265 if (PyCFunction_Check(func)) {
4266 PyThreadState *tstate = PyThreadState_GET();
4267 C_TRACE(result, PyCFunction_Call(func, callargs, kwdict));
4268 }
4269 else
4270 result = PyObject_Call(func, callargs, kwdict);
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00004271call_fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004272 Py_XDECREF(callargs);
4273 Py_XDECREF(kwdict);
4274 return result;
Jeremy Hylton52820442001-01-03 23:52:36 +00004275}
4276
4277static PyObject *
4278ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
4279{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004280 int nstar = 0;
4281 PyObject *callargs = NULL;
4282 PyObject *stararg = NULL;
4283 PyObject *kwdict = NULL;
4284 PyObject *result = NULL;
Jeremy Hylton52820442001-01-03 23:52:36 +00004285
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004286 if (flags & CALL_FLAG_KW) {
4287 kwdict = EXT_POP(*pp_stack);
4288 if (!PyDict_Check(kwdict)) {
4289 PyObject *d;
4290 d = PyDict_New();
4291 if (d == NULL)
4292 goto ext_call_fail;
4293 if (PyDict_Update(d, kwdict) != 0) {
4294 Py_DECREF(d);
4295 /* PyDict_Update raises attribute
4296 * error (percolated from an attempt
4297 * to get 'keys' attribute) instead of
4298 * a type error if its second argument
4299 * is not a mapping.
4300 */
4301 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
4302 PyErr_Format(PyExc_TypeError,
4303 "%.200s%.200s argument after ** "
4304 "must be a mapping, not %.200s",
4305 PyEval_GetFuncName(func),
4306 PyEval_GetFuncDesc(func),
4307 kwdict->ob_type->tp_name);
4308 }
4309 goto ext_call_fail;
4310 }
4311 Py_DECREF(kwdict);
4312 kwdict = d;
4313 }
4314 }
4315 if (flags & CALL_FLAG_VAR) {
4316 stararg = EXT_POP(*pp_stack);
4317 if (!PyTuple_Check(stararg)) {
4318 PyObject *t = NULL;
4319 t = PySequence_Tuple(stararg);
4320 if (t == NULL) {
4321 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
4322 PyErr_Format(PyExc_TypeError,
4323 "%.200s%.200s argument after * "
Victor Stinner0a5f65a2011-03-22 01:09:21 +01004324 "must be a sequence, not %.200s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004325 PyEval_GetFuncName(func),
4326 PyEval_GetFuncDesc(func),
4327 stararg->ob_type->tp_name);
4328 }
4329 goto ext_call_fail;
4330 }
4331 Py_DECREF(stararg);
4332 stararg = t;
4333 }
4334 nstar = PyTuple_GET_SIZE(stararg);
4335 }
4336 if (nk > 0) {
4337 kwdict = update_keyword_args(kwdict, nk, pp_stack, func);
4338 if (kwdict == NULL)
4339 goto ext_call_fail;
4340 }
4341 callargs = update_star_args(na, nstar, stararg, pp_stack);
4342 if (callargs == NULL)
4343 goto ext_call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004344#ifdef CALL_PROFILE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004345 /* At this point, we have to look at the type of func to
4346 update the call stats properly. Do it here so as to avoid
4347 exposing the call stats machinery outside ceval.c
4348 */
4349 if (PyFunction_Check(func))
4350 PCALL(PCALL_FUNCTION);
4351 else if (PyMethod_Check(func))
4352 PCALL(PCALL_METHOD);
4353 else if (PyType_Check(func))
4354 PCALL(PCALL_TYPE);
4355 else if (PyCFunction_Check(func))
4356 PCALL(PCALL_CFUNCTION);
4357 else
4358 PCALL(PCALL_OTHER);
Jeremy Hylton985eba52003-02-05 23:13:00 +00004359#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004360 if (PyCFunction_Check(func)) {
4361 PyThreadState *tstate = PyThreadState_GET();
4362 C_TRACE(result, PyCFunction_Call(func, callargs, kwdict));
4363 }
4364 else
4365 result = PyObject_Call(func, callargs, kwdict);
Thomas Woutersce272b62007-09-19 21:19:28 +00004366ext_call_fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004367 Py_XDECREF(callargs);
4368 Py_XDECREF(kwdict);
4369 Py_XDECREF(stararg);
4370 return result;
Jeremy Hylton52820442001-01-03 23:52:36 +00004371}
4372
Guido van Rossum38fff8c2006-03-07 18:50:55 +00004373/* Extract a slice index from a PyInt or PyLong or an object with the
4374 nb_index slot defined, and store in *pi.
4375 Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX,
4376 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 +00004377 Return 0 on error, 1 on success.
Tim Peterscb479e72001-12-16 19:11:44 +00004378*/
Tim Petersb5196382001-12-16 19:44:20 +00004379/* Note: If v is NULL, return success without storing into *pi. This
4380 is because_PyEval_SliceIndex() is called by apply_slice(), which can be
4381 called by the SLICE opcode with v and/or w equal to NULL.
Tim Peterscb479e72001-12-16 19:11:44 +00004382*/
Guido van Rossum20c6add2000-05-08 14:06:50 +00004383int
Martin v. Löwis18e16552006-02-15 17:27:45 +00004384_PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004385{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004386 if (v != NULL) {
4387 Py_ssize_t x;
4388 if (PyIndex_Check(v)) {
4389 x = PyNumber_AsSsize_t(v, NULL);
4390 if (x == -1 && PyErr_Occurred())
4391 return 0;
4392 }
4393 else {
4394 PyErr_SetString(PyExc_TypeError,
4395 "slice indices must be integers or "
4396 "None or have an __index__ method");
4397 return 0;
4398 }
4399 *pi = x;
4400 }
4401 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004402}
4403
Guido van Rossum486364b2007-06-30 05:01:58 +00004404#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004405 "BaseException is not allowed"
Brett Cannonf74225d2007-02-26 21:10:16 +00004406
Guido van Rossumb209a111997-04-29 18:18:01 +00004407static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004408cmp_outcome(int op, register PyObject *v, register PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004409{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004410 int res = 0;
4411 switch (op) {
4412 case PyCmp_IS:
4413 res = (v == w);
4414 break;
4415 case PyCmp_IS_NOT:
4416 res = (v != w);
4417 break;
4418 case PyCmp_IN:
4419 res = PySequence_Contains(w, v);
4420 if (res < 0)
4421 return NULL;
4422 break;
4423 case PyCmp_NOT_IN:
4424 res = PySequence_Contains(w, v);
4425 if (res < 0)
4426 return NULL;
4427 res = !res;
4428 break;
4429 case PyCmp_EXC_MATCH:
4430 if (PyTuple_Check(w)) {
4431 Py_ssize_t i, length;
4432 length = PyTuple_Size(w);
4433 for (i = 0; i < length; i += 1) {
4434 PyObject *exc = PyTuple_GET_ITEM(w, i);
4435 if (!PyExceptionClass_Check(exc)) {
4436 PyErr_SetString(PyExc_TypeError,
4437 CANNOT_CATCH_MSG);
4438 return NULL;
4439 }
4440 }
4441 }
4442 else {
4443 if (!PyExceptionClass_Check(w)) {
4444 PyErr_SetString(PyExc_TypeError,
4445 CANNOT_CATCH_MSG);
4446 return NULL;
4447 }
4448 }
4449 res = PyErr_GivenExceptionMatches(v, w);
4450 break;
4451 default:
4452 return PyObject_RichCompare(v, w, op);
4453 }
4454 v = res ? Py_True : Py_False;
4455 Py_INCREF(v);
4456 return v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004457}
4458
Thomas Wouters52152252000-08-17 22:55:00 +00004459static PyObject *
4460import_from(PyObject *v, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00004461{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004462 PyObject *x;
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004463
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004464 x = PyObject_GetAttr(v, name);
4465 if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
4466 PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
4467 }
4468 return x;
Thomas Wouters52152252000-08-17 22:55:00 +00004469}
Guido van Rossumac7be682001-01-17 15:42:30 +00004470
Thomas Wouters52152252000-08-17 22:55:00 +00004471static int
4472import_all_from(PyObject *locals, PyObject *v)
4473{
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02004474 _Py_IDENTIFIER(__all__);
4475 _Py_IDENTIFIER(__dict__);
4476 PyObject *all = _PyObject_GetAttrId(v, &PyId___all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004477 PyObject *dict, *name, *value;
4478 int skip_leading_underscores = 0;
4479 int pos, err;
Thomas Wouters52152252000-08-17 22:55:00 +00004480
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004481 if (all == NULL) {
4482 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
4483 return -1; /* Unexpected error */
4484 PyErr_Clear();
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02004485 dict = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004486 if (dict == NULL) {
4487 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
4488 return -1;
4489 PyErr_SetString(PyExc_ImportError,
4490 "from-import-* object has no __dict__ and no __all__");
4491 return -1;
4492 }
4493 all = PyMapping_Keys(dict);
4494 Py_DECREF(dict);
4495 if (all == NULL)
4496 return -1;
4497 skip_leading_underscores = 1;
4498 }
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004499
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004500 for (pos = 0, err = 0; ; pos++) {
4501 name = PySequence_GetItem(all, pos);
4502 if (name == NULL) {
4503 if (!PyErr_ExceptionMatches(PyExc_IndexError))
4504 err = -1;
4505 else
4506 PyErr_Clear();
4507 break;
4508 }
4509 if (skip_leading_underscores &&
4510 PyUnicode_Check(name) &&
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004511 PyUnicode_READY(name) != -1 &&
4512 PyUnicode_READ_CHAR(name, 0) == '_')
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004513 {
4514 Py_DECREF(name);
4515 continue;
4516 }
4517 value = PyObject_GetAttr(v, name);
4518 if (value == NULL)
4519 err = -1;
4520 else if (PyDict_CheckExact(locals))
4521 err = PyDict_SetItem(locals, name, value);
4522 else
4523 err = PyObject_SetItem(locals, name, value);
4524 Py_DECREF(name);
4525 Py_XDECREF(value);
4526 if (err != 0)
4527 break;
4528 }
4529 Py_DECREF(all);
4530 return err;
Guido van Rossume9736fc1990-11-18 17:33:06 +00004531}
4532
Guido van Rossumac7be682001-01-17 15:42:30 +00004533static void
Neal Norwitzda059e32007-08-26 05:33:45 +00004534format_exc_check_arg(PyObject *exc, const char *format_str, PyObject *obj)
Paul Prescode68140d2000-08-30 20:25:01 +00004535{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004536 const char *obj_str;
Paul Prescode68140d2000-08-30 20:25:01 +00004537
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004538 if (!obj)
4539 return;
Paul Prescode68140d2000-08-30 20:25:01 +00004540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004541 obj_str = _PyUnicode_AsString(obj);
4542 if (!obj_str)
4543 return;
Paul Prescode68140d2000-08-30 20:25:01 +00004544
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004545 PyErr_Format(exc, format_str, obj_str);
Paul Prescode68140d2000-08-30 20:25:01 +00004546}
Guido van Rossum950361c1997-01-24 13:49:28 +00004547
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +00004548static void
4549format_exc_unbound(PyCodeObject *co, int oparg)
4550{
4551 PyObject *name;
4552 /* Don't stomp existing exception */
4553 if (PyErr_Occurred())
4554 return;
4555 if (oparg < PyTuple_GET_SIZE(co->co_cellvars)) {
4556 name = PyTuple_GET_ITEM(co->co_cellvars,
4557 oparg);
4558 format_exc_check_arg(
4559 PyExc_UnboundLocalError,
4560 UNBOUNDLOCAL_ERROR_MSG,
4561 name);
4562 } else {
4563 name = PyTuple_GET_ITEM(co->co_freevars, oparg -
4564 PyTuple_GET_SIZE(co->co_cellvars));
4565 format_exc_check_arg(PyExc_NameError,
4566 UNBOUNDFREE_ERROR_MSG, name);
4567 }
4568}
4569
Victor Stinnerd2a915d2011-10-02 20:34:20 +02004570static PyObject *
4571unicode_concatenate(PyObject *v, PyObject *w,
4572 PyFrameObject *f, unsigned char *next_instr)
4573{
4574 PyObject *res;
4575 if (Py_REFCNT(v) == 2) {
4576 /* In the common case, there are 2 references to the value
4577 * stored in 'variable' when the += is performed: one on the
4578 * value stack (in 'v') and one still stored in the
4579 * 'variable'. We try to delete the variable now to reduce
4580 * the refcnt to 1.
4581 */
4582 switch (*next_instr) {
4583 case STORE_FAST:
4584 {
4585 int oparg = PEEKARG();
4586 PyObject **fastlocals = f->f_localsplus;
4587 if (GETLOCAL(oparg) == v)
4588 SETLOCAL(oparg, NULL);
4589 break;
4590 }
4591 case STORE_DEREF:
4592 {
4593 PyObject **freevars = (f->f_localsplus +
4594 f->f_code->co_nlocals);
4595 PyObject *c = freevars[PEEKARG()];
4596 if (PyCell_GET(c) == v)
4597 PyCell_Set(c, NULL);
4598 break;
4599 }
4600 case STORE_NAME:
4601 {
4602 PyObject *names = f->f_code->co_names;
4603 PyObject *name = GETITEM(names, PEEKARG());
4604 PyObject *locals = f->f_locals;
4605 if (PyDict_CheckExact(locals) &&
4606 PyDict_GetItem(locals, name) == v) {
4607 if (PyDict_DelItem(locals, name) != 0) {
4608 PyErr_Clear();
4609 }
4610 }
4611 break;
4612 }
4613 }
4614 }
4615 res = v;
4616 PyUnicode_Append(&res, w);
4617 return res;
4618}
4619
Guido van Rossum950361c1997-01-24 13:49:28 +00004620#ifdef DYNAMIC_EXECUTION_PROFILE
4621
Skip Montanarof118cb12001-10-15 20:51:38 +00004622static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004623getarray(long a[256])
Guido van Rossum950361c1997-01-24 13:49:28 +00004624{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004625 int i;
4626 PyObject *l = PyList_New(256);
4627 if (l == NULL) return NULL;
4628 for (i = 0; i < 256; i++) {
4629 PyObject *x = PyLong_FromLong(a[i]);
4630 if (x == NULL) {
4631 Py_DECREF(l);
4632 return NULL;
4633 }
4634 PyList_SetItem(l, i, x);
4635 }
4636 for (i = 0; i < 256; i++)
4637 a[i] = 0;
4638 return l;
Guido van Rossum950361c1997-01-24 13:49:28 +00004639}
4640
4641PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004642_Py_GetDXProfile(PyObject *self, PyObject *args)
Guido van Rossum950361c1997-01-24 13:49:28 +00004643{
4644#ifndef DXPAIRS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004645 return getarray(dxp);
Guido van Rossum950361c1997-01-24 13:49:28 +00004646#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004647 int i;
4648 PyObject *l = PyList_New(257);
4649 if (l == NULL) return NULL;
4650 for (i = 0; i < 257; i++) {
4651 PyObject *x = getarray(dxpairs[i]);
4652 if (x == NULL) {
4653 Py_DECREF(l);
4654 return NULL;
4655 }
4656 PyList_SetItem(l, i, x);
4657 }
4658 return l;
Guido van Rossum950361c1997-01-24 13:49:28 +00004659#endif
4660}
4661
4662#endif