blob: 06bff4c1690791d23d648604bcdd2cc1ceeebd97 [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
Antoine Pitroub52ec782009-01-25 16:34:23 +0000825/* Computed GOTOs, or
826 the-optimization-commonly-but-improperly-known-as-"threaded code"
827 using gcc's labels-as-values extension
828 (http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html).
829
830 The traditional bytecode evaluation loop uses a "switch" statement, which
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000831 decent compilers will optimize as a single indirect branch instruction
Antoine Pitroub52ec782009-01-25 16:34:23 +0000832 combined with a lookup table of jump addresses. However, since the
833 indirect jump instruction is shared by all opcodes, the CPU will have a
834 hard time making the right prediction for where to jump next (actually,
835 it will be always wrong except in the uncommon case of a sequence of
836 several identical opcodes).
837
838 "Threaded code" in contrast, uses an explicit jump table and an explicit
839 indirect jump instruction at the end of each opcode. Since the jump
840 instruction is at a different address for each opcode, the CPU will make a
841 separate prediction for each of these instructions, which is equivalent to
842 predicting the second opcode of each opcode pair. These predictions have
843 a much better chance to turn out valid, especially in small bytecode loops.
844
845 A mispredicted branch on a modern CPU flushes the whole pipeline and
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000846 can cost several CPU cycles (depending on the pipeline depth),
Antoine Pitroub52ec782009-01-25 16:34:23 +0000847 and potentially many more instructions (depending on the pipeline width).
848 A correctly predicted branch, however, is nearly free.
849
850 At the time of this writing, the "threaded code" version is up to 15-20%
851 faster than the normal "switch" version, depending on the compiler and the
852 CPU architecture.
853
854 We disable the optimization if DYNAMIC_EXECUTION_PROFILE is defined,
855 because it would render the measurements invalid.
856
857
858 NOTE: care must be taken that the compiler doesn't try to "optimize" the
859 indirect jumps by sharing them between all opcodes. Such optimizations
860 can be disabled on gcc by using the -fno-gcse flag (or possibly
861 -fno-crossjumping).
862*/
863
Antoine Pitrou042b1282010-08-13 21:15:58 +0000864#ifdef DYNAMIC_EXECUTION_PROFILE
Antoine Pitroub52ec782009-01-25 16:34:23 +0000865#undef USE_COMPUTED_GOTOS
Antoine Pitrou042b1282010-08-13 21:15:58 +0000866#define USE_COMPUTED_GOTOS 0
Antoine Pitroub52ec782009-01-25 16:34:23 +0000867#endif
868
Antoine Pitrou042b1282010-08-13 21:15:58 +0000869#ifdef HAVE_COMPUTED_GOTOS
870 #ifndef USE_COMPUTED_GOTOS
871 #define USE_COMPUTED_GOTOS 1
872 #endif
873#else
874 #if defined(USE_COMPUTED_GOTOS) && USE_COMPUTED_GOTOS
875 #error "Computed gotos are not supported on this compiler."
876 #endif
877 #undef USE_COMPUTED_GOTOS
878 #define USE_COMPUTED_GOTOS 0
879#endif
880
881#if USE_COMPUTED_GOTOS
Antoine Pitroub52ec782009-01-25 16:34:23 +0000882/* Import the static jump table */
883#include "opcode_targets.h"
884
885/* This macro is used when several opcodes defer to the same implementation
886 (e.g. SETUP_LOOP, SETUP_FINALLY) */
887#define TARGET_WITH_IMPL(op, impl) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000888 TARGET_##op: \
889 opcode = op; \
890 if (HAS_ARG(op)) \
891 oparg = NEXTARG(); \
892 case op: \
893 goto impl; \
Antoine Pitroub52ec782009-01-25 16:34:23 +0000894
895#define TARGET(op) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 TARGET_##op: \
897 opcode = op; \
898 if (HAS_ARG(op)) \
899 oparg = NEXTARG(); \
900 case op:
Antoine Pitroub52ec782009-01-25 16:34:23 +0000901
902
903#define DISPATCH() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000904 { \
905 if (!_Py_atomic_load_relaxed(&eval_breaker)) { \
906 FAST_DISPATCH(); \
907 } \
908 continue; \
909 }
Antoine Pitroub52ec782009-01-25 16:34:23 +0000910
911#ifdef LLTRACE
912#define FAST_DISPATCH() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000913 { \
914 if (!lltrace && !_Py_TracingPossible) { \
915 f->f_lasti = INSTR_OFFSET(); \
916 goto *opcode_targets[*next_instr++]; \
917 } \
918 goto fast_next_opcode; \
919 }
Antoine Pitroub52ec782009-01-25 16:34:23 +0000920#else
921#define FAST_DISPATCH() \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000922 { \
923 if (!_Py_TracingPossible) { \
924 f->f_lasti = INSTR_OFFSET(); \
925 goto *opcode_targets[*next_instr++]; \
926 } \
927 goto fast_next_opcode; \
928 }
Antoine Pitroub52ec782009-01-25 16:34:23 +0000929#endif
930
931#else
932#define TARGET(op) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000933 case op:
Antoine Pitroub52ec782009-01-25 16:34:23 +0000934#define TARGET_WITH_IMPL(op, impl) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000935 /* silence compiler warnings about `impl` unused */ \
936 if (0) goto impl; \
937 case op:
Antoine Pitroub52ec782009-01-25 16:34:23 +0000938#define DISPATCH() continue
939#define FAST_DISPATCH() goto fast_next_opcode
940#endif
941
942
Neal Norwitza81d2202002-07-14 00:27:26 +0000943/* Tuple access macros */
944
945#ifndef Py_DEBUG
946#define GETITEM(v, i) PyTuple_GET_ITEM((PyTupleObject *)(v), (i))
947#else
948#define GETITEM(v, i) PyTuple_GetItem((v), (i))
949#endif
950
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000951#ifdef WITH_TSC
952/* Use Pentium timestamp counter to mark certain events:
953 inst0 -- beginning of switch statement for opcode dispatch
954 inst1 -- end of switch statement (may be skipped)
955 loop0 -- the top of the mainloop
Thomas Wouters477c8d52006-05-27 19:21:47 +0000956 loop1 -- place where control returns again to top of mainloop
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000957 (may be skipped)
958 intr1 -- beginning of long interruption
959 intr2 -- end of long interruption
960
961 Many opcodes call out to helper C functions. In some cases, the
962 time in those functions should be counted towards the time for the
963 opcode, but not in all cases. For example, a CALL_FUNCTION opcode
964 calls another Python function; there's no point in charge all the
965 bytecode executed by the called function to the caller.
966
967 It's hard to make a useful judgement statically. In the presence
968 of operator overloading, it's impossible to tell if a call will
969 execute new Python code or not.
970
971 It's a case-by-case judgement. I'll use intr1 for the following
972 cases:
973
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000974 IMPORT_STAR
975 IMPORT_FROM
976 CALL_FUNCTION (and friends)
977
978 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000979 uint64 inst0, inst1, loop0, loop1, intr0 = 0, intr1 = 0;
980 int ticked = 0;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000981
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000982 READ_TIMESTAMP(inst0);
983 READ_TIMESTAMP(inst1);
984 READ_TIMESTAMP(loop0);
985 READ_TIMESTAMP(loop1);
Michael W. Hudson800ba232004-08-12 18:19:17 +0000986
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000987 /* shut up the compiler */
988 opcode = 0;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +0000989#endif
990
Guido van Rossum374a9221991-04-04 10:40:29 +0000991/* Code access macros */
992
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000993#define INSTR_OFFSET() ((int)(next_instr - first_instr))
994#define NEXTOP() (*next_instr++)
995#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
996#define PEEKARG() ((next_instr[2]<<8) + next_instr[1])
997#define JUMPTO(x) (next_instr = first_instr + (x))
998#define JUMPBY(x) (next_instr += (x))
Guido van Rossum374a9221991-04-04 10:40:29 +0000999
Raymond Hettingerf606f872003-03-16 03:11:04 +00001000/* OpCode prediction macros
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 Some opcodes tend to come in pairs thus making it possible to
1002 predict the second code when the first is run. For example,
1003 COMPARE_OP is often followed by JUMP_IF_FALSE or JUMP_IF_TRUE. And,
1004 those opcodes are often followed by a POP_TOP.
Raymond Hettingerf606f872003-03-16 03:11:04 +00001005
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001006 Verifying the prediction costs a single high-speed test of a register
1007 variable against a constant. If the pairing was good, then the
1008 processor's own internal branch predication has a high likelihood of
1009 success, resulting in a nearly zero-overhead transition to the
1010 next opcode. A successful prediction saves a trip through the eval-loop
1011 including its two unpredictable branches, the HAS_ARG test and the
1012 switch-case. Combined with the processor's internal branch prediction,
1013 a successful PREDICT has the effect of making the two opcodes run as if
1014 they were a single new opcode with the bodies combined.
Raymond Hettingerf606f872003-03-16 03:11:04 +00001015
Georg Brandl86b2fb92008-07-16 03:43:04 +00001016 If collecting opcode statistics, your choices are to either keep the
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001017 predictions turned-on and interpret the results as if some opcodes
1018 had been combined or turn-off predictions so that the opcode frequency
1019 counter updates for both opcodes.
Antoine Pitroub52ec782009-01-25 16:34:23 +00001020
1021 Opcode prediction is disabled with threaded code, since the latter allows
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001022 the CPU to record separate branch prediction information for each
1023 opcode.
Antoine Pitroub52ec782009-01-25 16:34:23 +00001024
Raymond Hettingerf606f872003-03-16 03:11:04 +00001025*/
1026
Antoine Pitrou042b1282010-08-13 21:15:58 +00001027#if defined(DYNAMIC_EXECUTION_PROFILE) || USE_COMPUTED_GOTOS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028#define PREDICT(op) if (0) goto PRED_##op
1029#define PREDICTED(op) PRED_##op:
1030#define PREDICTED_WITH_ARG(op) PRED_##op:
Raymond Hettingera7216982004-02-08 19:59:27 +00001031#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001032#define PREDICT(op) if (*next_instr == op) goto PRED_##op
1033#define PREDICTED(op) PRED_##op: next_instr++
1034#define PREDICTED_WITH_ARG(op) PRED_##op: oparg = PEEKARG(); next_instr += 3
Antoine Pitroub52ec782009-01-25 16:34:23 +00001035#endif
1036
Raymond Hettingerf606f872003-03-16 03:11:04 +00001037
Guido van Rossum374a9221991-04-04 10:40:29 +00001038/* Stack manipulation macros */
1039
Martin v. Löwis18e16552006-02-15 17:27:45 +00001040/* The stack can grow at most MAXINT deep, as co_nlocals and
1041 co_stacksize are ints. */
Stefan Krahb7e10102010-06-23 18:42:39 +00001042#define STACK_LEVEL() ((int)(stack_pointer - f->f_valuestack))
1043#define EMPTY() (STACK_LEVEL() == 0)
1044#define TOP() (stack_pointer[-1])
1045#define SECOND() (stack_pointer[-2])
1046#define THIRD() (stack_pointer[-3])
1047#define FOURTH() (stack_pointer[-4])
1048#define PEEK(n) (stack_pointer[-(n)])
1049#define SET_TOP(v) (stack_pointer[-1] = (v))
1050#define SET_SECOND(v) (stack_pointer[-2] = (v))
1051#define SET_THIRD(v) (stack_pointer[-3] = (v))
1052#define SET_FOURTH(v) (stack_pointer[-4] = (v))
1053#define SET_VALUE(n, v) (stack_pointer[-(n)] = (v))
1054#define BASIC_STACKADJ(n) (stack_pointer += n)
1055#define BASIC_PUSH(v) (*stack_pointer++ = (v))
1056#define BASIC_POP() (*--stack_pointer)
Guido van Rossum374a9221991-04-04 10:40:29 +00001057
Guido van Rossum96a42c81992-01-12 02:29:51 +00001058#ifdef LLTRACE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059#define PUSH(v) { (void)(BASIC_PUSH(v), \
Stefan Krahb7e10102010-06-23 18:42:39 +00001060 lltrace && prtrace(TOP(), "push")); \
1061 assert(STACK_LEVEL() <= co->co_stacksize); }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001062#define POP() ((void)(lltrace && prtrace(TOP(), "pop")), \
Stefan Krahb7e10102010-06-23 18:42:39 +00001063 BASIC_POP())
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001064#define STACKADJ(n) { (void)(BASIC_STACKADJ(n), \
Stefan Krahb7e10102010-06-23 18:42:39 +00001065 lltrace && prtrace(TOP(), "stackadj")); \
1066 assert(STACK_LEVEL() <= co->co_stacksize); }
Christian Heimes0449f632007-12-15 01:27:15 +00001067#define EXT_POP(STACK_POINTER) ((void)(lltrace && \
Stefan Krahb7e10102010-06-23 18:42:39 +00001068 prtrace((STACK_POINTER)[-1], "ext_pop")), \
1069 *--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +00001070#else
Stefan Krahb7e10102010-06-23 18:42:39 +00001071#define PUSH(v) BASIC_PUSH(v)
1072#define POP() BASIC_POP()
1073#define STACKADJ(n) BASIC_STACKADJ(n)
Guido van Rossumc2e20742006-02-27 22:32:47 +00001074#define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))
Guido van Rossum374a9221991-04-04 10:40:29 +00001075#endif
1076
Guido van Rossum681d79a1995-07-18 14:51:37 +00001077/* Local variable macros */
1078
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001079#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumcfbf1a32002-03-28 20:17:52 +00001080
1081/* The SETLOCAL() macro must not DECREF the local variable in-place and
1082 then store the new value; it must copy the old value to a temporary
1083 value, then store the new value, and then DECREF the temporary value.
1084 This is because it is possible that during the DECREF the frame is
1085 accessed by other code (e.g. a __del__ method or gc.collect()) and the
1086 variable would be pointing to already-freed memory. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001087#define SETLOCAL(i, value) do { PyObject *tmp = GETLOCAL(i); \
Stefan Krahb7e10102010-06-23 18:42:39 +00001088 GETLOCAL(i) = value; \
1089 Py_XDECREF(tmp); } while (0)
Guido van Rossum681d79a1995-07-18 14:51:37 +00001090
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001091
1092#define UNWIND_BLOCK(b) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001093 while (STACK_LEVEL() > (b)->b_level) { \
1094 PyObject *v = POP(); \
1095 Py_XDECREF(v); \
1096 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001097
1098#define UNWIND_EXCEPT_HANDLER(b) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001099 { \
1100 PyObject *type, *value, *traceback; \
1101 assert(STACK_LEVEL() >= (b)->b_level + 3); \
1102 while (STACK_LEVEL() > (b)->b_level + 3) { \
1103 value = POP(); \
1104 Py_XDECREF(value); \
1105 } \
1106 type = tstate->exc_type; \
1107 value = tstate->exc_value; \
1108 traceback = tstate->exc_traceback; \
1109 tstate->exc_type = POP(); \
1110 tstate->exc_value = POP(); \
1111 tstate->exc_traceback = POP(); \
1112 Py_XDECREF(type); \
1113 Py_XDECREF(value); \
1114 Py_XDECREF(traceback); \
1115 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001116
Guido van Rossuma027efa1997-05-05 20:56:21 +00001117/* Start of code */
1118
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001119 /* push frame */
1120 if (Py_EnterRecursiveCall(""))
1121 return NULL;
Guido van Rossum8861b741996-07-30 16:49:37 +00001122
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001123 tstate->frame = f;
Tim Peters5ca576e2001-06-18 22:08:13 +00001124
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001125 if (tstate->use_tracing) {
1126 if (tstate->c_tracefunc != NULL) {
1127 /* tstate->c_tracefunc, if defined, is a
1128 function that will be called on *every* entry
1129 to a code block. Its return value, if not
1130 None, is a function that will be called at
1131 the start of each executed line of code.
1132 (Actually, the function must return itself
1133 in order to continue tracing.) The trace
1134 functions are called with three arguments:
1135 a pointer to the current frame, a string
1136 indicating why the function is called, and
1137 an argument which depends on the situation.
1138 The global trace function is also called
1139 whenever an exception is detected. */
1140 if (call_trace_protected(tstate->c_tracefunc,
1141 tstate->c_traceobj,
1142 f, PyTrace_CALL, Py_None)) {
1143 /* Trace function raised an error */
1144 goto exit_eval_frame;
1145 }
1146 }
1147 if (tstate->c_profilefunc != NULL) {
1148 /* Similar for c_profilefunc, except it needn't
1149 return itself and isn't called for "line" events */
1150 if (call_trace_protected(tstate->c_profilefunc,
1151 tstate->c_profileobj,
1152 f, PyTrace_CALL, Py_None)) {
1153 /* Profile function raised an error */
1154 goto exit_eval_frame;
1155 }
1156 }
1157 }
Neil Schemenauer6c0f2002001-09-04 19:03:35 +00001158
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001159 co = f->f_code;
1160 names = co->co_names;
1161 consts = co->co_consts;
1162 fastlocals = f->f_localsplus;
1163 freevars = f->f_localsplus + co->co_nlocals;
1164 first_instr = (unsigned char*) PyBytes_AS_STRING(co->co_code);
1165 /* An explanation is in order for the next line.
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001166
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001167 f->f_lasti now refers to the index of the last instruction
1168 executed. You might think this was obvious from the name, but
1169 this wasn't always true before 2.3! PyFrame_New now sets
1170 f->f_lasti to -1 (i.e. the index *before* the first instruction)
1171 and YIELD_VALUE doesn't fiddle with f_lasti any more. So this
1172 does work. Promise.
Thomas Wouters902d6eb2007-01-09 23:18:33 +00001173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001174 When the PREDICT() macros are enabled, some opcode pairs follow in
1175 direct succession without updating f->f_lasti. A successful
1176 prediction effectively links the two codes together as if they
1177 were a single new opcode; accordingly,f->f_lasti will point to
1178 the first code in the pair (for instance, GET_ITER followed by
1179 FOR_ITER is effectively a single opcode and f->f_lasti will point
1180 at to the beginning of the combined pair.)
1181 */
1182 next_instr = first_instr + f->f_lasti + 1;
1183 stack_pointer = f->f_stacktop;
1184 assert(stack_pointer != NULL);
1185 f->f_stacktop = NULL; /* remains NULL unless yield suspends frame */
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001186
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001187 if (co->co_flags & CO_GENERATOR && !throwflag) {
1188 if (f->f_exc_type != NULL && f->f_exc_type != Py_None) {
1189 /* We were in an except handler when we left,
1190 restore the exception state which was put aside
1191 (see YIELD_VALUE). */
Benjamin Peterson87880242011-07-03 16:48:31 -05001192 swap_exc_state(tstate, f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001193 }
Benjamin Peterson87880242011-07-03 16:48:31 -05001194 else
1195 save_exc_state(tstate, f);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 }
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001197
Tim Peters5ca576e2001-06-18 22:08:13 +00001198#ifdef LLTRACE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001199 lltrace = PyDict_GetItemString(f->f_globals, "__lltrace__") != NULL;
Tim Peters5ca576e2001-06-18 22:08:13 +00001200#endif
Guido van Rossumac7be682001-01-17 15:42:30 +00001201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001202 why = WHY_NOT;
1203 err = 0;
1204 x = Py_None; /* Not a reference, just anything non-NULL */
1205 w = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +00001206
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001207 if (throwflag) { /* support for generator.throw() */
1208 why = WHY_EXCEPTION;
1209 goto on_error;
1210 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 for (;;) {
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00001213#ifdef WITH_TSC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 if (inst1 == 0) {
1215 /* Almost surely, the opcode executed a break
1216 or a continue, preventing inst1 from being set
1217 on the way out of the loop.
1218 */
1219 READ_TIMESTAMP(inst1);
1220 loop1 = inst1;
1221 }
1222 dump_tsc(opcode, ticked, inst0, inst1, loop0, loop1,
1223 intr0, intr1);
1224 ticked = 0;
1225 inst1 = 0;
1226 intr0 = 0;
1227 intr1 = 0;
1228 READ_TIMESTAMP(loop0);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00001229#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 assert(stack_pointer >= f->f_valuestack); /* else underflow */
1231 assert(STACK_LEVEL() <= co->co_stacksize); /* else overflow */
Michael W. Hudsondd32a912002-08-15 14:59:02 +00001232
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001233 /* Do periodic things. Doing this every time through
1234 the loop would add too much overhead, so we do it
1235 only every Nth instruction. We also do it if
1236 ``pendingcalls_to_do'' is set, i.e. when an asynchronous
1237 event needs attention (e.g. a signal handler or
1238 async I/O handler); see Py_AddPendingCall() and
1239 Py_MakePendingCalls() above. */
Guido van Rossumac7be682001-01-17 15:42:30 +00001240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001241 if (_Py_atomic_load_relaxed(&eval_breaker)) {
1242 if (*next_instr == SETUP_FINALLY) {
1243 /* Make the last opcode before
Ezio Melotti13925002011-03-16 11:05:33 +02001244 a try: finally: block uninterruptible. */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001245 goto fast_next_opcode;
1246 }
1247 tstate->tick_counter++;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00001248#ifdef WITH_TSC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001249 ticked = 1;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00001250#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001251 if (_Py_atomic_load_relaxed(&pendingcalls_to_do)) {
1252 if (Py_MakePendingCalls() < 0) {
1253 why = WHY_EXCEPTION;
1254 goto on_error;
1255 }
1256 }
Guido van Rossume59214e1994-08-30 08:01:59 +00001257#ifdef WITH_THREAD
Benjamin Petersond2be5b42010-09-10 22:47:02 +00001258 if (_Py_atomic_load_relaxed(&gil_drop_request)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001259 /* Give another thread a chance */
1260 if (PyThreadState_Swap(NULL) != tstate)
1261 Py_FatalError("ceval: tstate mix-up");
1262 drop_gil(tstate);
1263
1264 /* Other threads may run now */
1265
1266 take_gil(tstate);
1267 if (PyThreadState_Swap(tstate) != NULL)
1268 Py_FatalError("ceval: orphan tstate");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001269 }
Benjamin Petersond2be5b42010-09-10 22:47:02 +00001270#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001271 /* Check for asynchronous exceptions. */
1272 if (tstate->async_exc != NULL) {
1273 x = tstate->async_exc;
1274 tstate->async_exc = NULL;
1275 UNSIGNAL_ASYNC_EXC();
1276 PyErr_SetNone(x);
1277 Py_DECREF(x);
1278 why = WHY_EXCEPTION;
1279 goto on_error;
1280 }
1281 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +00001282
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001283 fast_next_opcode:
1284 f->f_lasti = INSTR_OFFSET();
Guido van Rossumac7be682001-01-17 15:42:30 +00001285
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001286 /* line-by-line tracing support */
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001288 if (_Py_TracingPossible &&
1289 tstate->c_tracefunc != NULL && !tstate->tracing) {
1290 /* see maybe_call_line_trace
1291 for expository comments */
1292 f->f_stacktop = stack_pointer;
Tim Peters8a5c3c72004-04-05 19:36:21 +00001293
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001294 err = maybe_call_line_trace(tstate->c_tracefunc,
1295 tstate->c_traceobj,
1296 f, &instr_lb, &instr_ub,
1297 &instr_prev);
1298 /* Reload possibly changed frame fields */
1299 JUMPTO(f->f_lasti);
1300 if (f->f_stacktop != NULL) {
1301 stack_pointer = f->f_stacktop;
1302 f->f_stacktop = NULL;
1303 }
1304 if (err) {
1305 /* trace function raised an exception */
1306 goto on_error;
1307 }
1308 }
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001309
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001310 /* Extract opcode and argument */
Michael W. Hudson019a78e2002-11-08 12:53:11 +00001311
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001312 opcode = NEXTOP();
1313 oparg = 0; /* allows oparg to be stored in a register because
1314 it doesn't have to be remembered across a full loop */
1315 if (HAS_ARG(opcode))
1316 oparg = NEXTARG();
Stefan Krahb7e10102010-06-23 18:42:39 +00001317 dispatch_opcode:
Guido van Rossum950361c1997-01-24 13:49:28 +00001318#ifdef DYNAMIC_EXECUTION_PROFILE
1319#ifdef DXPAIRS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001320 dxpairs[lastopcode][opcode]++;
1321 lastopcode = opcode;
Guido van Rossum950361c1997-01-24 13:49:28 +00001322#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001323 dxp[opcode]++;
Guido van Rossum950361c1997-01-24 13:49:28 +00001324#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001325
Guido van Rossum96a42c81992-01-12 02:29:51 +00001326#ifdef LLTRACE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001327 /* Instruction tracing */
Guido van Rossumac7be682001-01-17 15:42:30 +00001328
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001329 if (lltrace) {
1330 if (HAS_ARG(opcode)) {
1331 printf("%d: %d, %d\n",
1332 f->f_lasti, opcode, oparg);
1333 }
1334 else {
1335 printf("%d: %d\n",
1336 f->f_lasti, opcode);
1337 }
1338 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001339#endif
Michael W. Hudsondd32a912002-08-15 14:59:02 +00001340
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001341 /* Main switch on opcode */
1342 READ_TIMESTAMP(inst0);
Jeremy Hylton52820442001-01-03 23:52:36 +00001343
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001344 switch (opcode) {
Guido van Rossumac7be682001-01-17 15:42:30 +00001345
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001346 /* BEWARE!
1347 It is essential that any operation that fails sets either
1348 x to NULL, err to nonzero, or why to anything but WHY_NOT,
1349 and that no operation that succeeds does this! */
Guido van Rossumac7be682001-01-17 15:42:30 +00001350
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001351 TARGET(NOP)
1352 FAST_DISPATCH();
Raymond Hettinger9c18e812004-06-21 16:31:15 +00001353
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001354 TARGET(LOAD_FAST)
1355 x = GETLOCAL(oparg);
1356 if (x != NULL) {
1357 Py_INCREF(x);
1358 PUSH(x);
1359 FAST_DISPATCH();
1360 }
1361 format_exc_check_arg(PyExc_UnboundLocalError,
1362 UNBOUNDLOCAL_ERROR_MSG,
1363 PyTuple_GetItem(co->co_varnames, oparg));
1364 break;
Neil Schemenauer63543862002-02-17 19:10:14 +00001365
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001366 TARGET(LOAD_CONST)
1367 x = GETITEM(consts, oparg);
1368 Py_INCREF(x);
1369 PUSH(x);
1370 FAST_DISPATCH();
Neil Schemenauer63543862002-02-17 19:10:14 +00001371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 PREDICTED_WITH_ARG(STORE_FAST);
1373 TARGET(STORE_FAST)
1374 v = POP();
1375 SETLOCAL(oparg, v);
1376 FAST_DISPATCH();
Neil Schemenauer63543862002-02-17 19:10:14 +00001377
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001378 TARGET(POP_TOP)
1379 v = POP();
1380 Py_DECREF(v);
1381 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001382
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001383 TARGET(ROT_TWO)
1384 v = TOP();
1385 w = SECOND();
1386 SET_TOP(w);
1387 SET_SECOND(v);
1388 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001389
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001390 TARGET(ROT_THREE)
1391 v = TOP();
1392 w = SECOND();
1393 x = THIRD();
1394 SET_TOP(w);
1395 SET_SECOND(x);
1396 SET_THIRD(v);
1397 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001398
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001399 TARGET(DUP_TOP)
1400 v = TOP();
1401 Py_INCREF(v);
1402 PUSH(v);
1403 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001404
Antoine Pitrou74a69fa2010-09-04 18:43:52 +00001405 TARGET(DUP_TOP_TWO)
1406 x = TOP();
1407 Py_INCREF(x);
1408 w = SECOND();
1409 Py_INCREF(w);
1410 STACKADJ(2);
1411 SET_TOP(x);
1412 SET_SECOND(w);
1413 FAST_DISPATCH();
Thomas Wouters434d0822000-08-24 20:11:32 +00001414
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001415 TARGET(UNARY_POSITIVE)
1416 v = TOP();
1417 x = PyNumber_Positive(v);
1418 Py_DECREF(v);
1419 SET_TOP(x);
1420 if (x != NULL) DISPATCH();
1421 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001422
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001423 TARGET(UNARY_NEGATIVE)
1424 v = TOP();
1425 x = PyNumber_Negative(v);
1426 Py_DECREF(v);
1427 SET_TOP(x);
1428 if (x != NULL) DISPATCH();
1429 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001430
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001431 TARGET(UNARY_NOT)
1432 v = TOP();
1433 err = PyObject_IsTrue(v);
1434 Py_DECREF(v);
1435 if (err == 0) {
1436 Py_INCREF(Py_True);
1437 SET_TOP(Py_True);
1438 DISPATCH();
1439 }
1440 else if (err > 0) {
1441 Py_INCREF(Py_False);
1442 SET_TOP(Py_False);
1443 err = 0;
1444 DISPATCH();
1445 }
1446 STACKADJ(-1);
1447 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001449 TARGET(UNARY_INVERT)
1450 v = TOP();
1451 x = PyNumber_Invert(v);
1452 Py_DECREF(v);
1453 SET_TOP(x);
1454 if (x != NULL) DISPATCH();
1455 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001456
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001457 TARGET(BINARY_POWER)
1458 w = POP();
1459 v = TOP();
1460 x = PyNumber_Power(v, w, Py_None);
1461 Py_DECREF(v);
1462 Py_DECREF(w);
1463 SET_TOP(x);
1464 if (x != NULL) DISPATCH();
1465 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001466
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001467 TARGET(BINARY_MULTIPLY)
1468 w = POP();
1469 v = TOP();
1470 x = PyNumber_Multiply(v, w);
1471 Py_DECREF(v);
1472 Py_DECREF(w);
1473 SET_TOP(x);
1474 if (x != NULL) DISPATCH();
1475 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001476
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001477 TARGET(BINARY_TRUE_DIVIDE)
1478 w = POP();
1479 v = TOP();
1480 x = PyNumber_TrueDivide(v, w);
1481 Py_DECREF(v);
1482 Py_DECREF(w);
1483 SET_TOP(x);
1484 if (x != NULL) DISPATCH();
1485 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001486
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001487 TARGET(BINARY_FLOOR_DIVIDE)
1488 w = POP();
1489 v = TOP();
1490 x = PyNumber_FloorDivide(v, w);
1491 Py_DECREF(v);
1492 Py_DECREF(w);
1493 SET_TOP(x);
1494 if (x != NULL) DISPATCH();
1495 break;
Guido van Rossum4668b002001-08-08 05:00:18 +00001496
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001497 TARGET(BINARY_MODULO)
1498 w = POP();
1499 v = TOP();
1500 if (PyUnicode_CheckExact(v))
1501 x = PyUnicode_Format(v, w);
1502 else
1503 x = PyNumber_Remainder(v, w);
1504 Py_DECREF(v);
1505 Py_DECREF(w);
1506 SET_TOP(x);
1507 if (x != NULL) DISPATCH();
1508 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001509
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001510 TARGET(BINARY_ADD)
1511 w = POP();
1512 v = TOP();
Victor Stinnerd2a915d2011-10-02 20:34:20 +02001513 if (PyUnicode_CheckExact(v) &&
1514 PyUnicode_CheckExact(w)) {
1515 x = unicode_concatenate(v, w, f, next_instr);
1516 /* unicode_concatenate consumed the ref to v */
1517 goto skip_decref_vx;
1518 }
1519 else {
1520 x = PyNumber_Add(v, w);
1521 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001522 Py_DECREF(v);
Victor Stinnerd2a915d2011-10-02 20:34:20 +02001523 skip_decref_vx:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 Py_DECREF(w);
1525 SET_TOP(x);
1526 if (x != NULL) DISPATCH();
1527 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001528
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001529 TARGET(BINARY_SUBTRACT)
1530 w = POP();
1531 v = TOP();
1532 x = PyNumber_Subtract(v, w);
1533 Py_DECREF(v);
1534 Py_DECREF(w);
1535 SET_TOP(x);
1536 if (x != NULL) DISPATCH();
1537 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001539 TARGET(BINARY_SUBSCR)
1540 w = POP();
1541 v = TOP();
1542 x = PyObject_GetItem(v, w);
1543 Py_DECREF(v);
1544 Py_DECREF(w);
1545 SET_TOP(x);
1546 if (x != NULL) DISPATCH();
1547 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001548
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001549 TARGET(BINARY_LSHIFT)
1550 w = POP();
1551 v = TOP();
1552 x = PyNumber_Lshift(v, w);
1553 Py_DECREF(v);
1554 Py_DECREF(w);
1555 SET_TOP(x);
1556 if (x != NULL) DISPATCH();
1557 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001558
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001559 TARGET(BINARY_RSHIFT)
1560 w = POP();
1561 v = TOP();
1562 x = PyNumber_Rshift(v, w);
1563 Py_DECREF(v);
1564 Py_DECREF(w);
1565 SET_TOP(x);
1566 if (x != NULL) DISPATCH();
1567 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001568
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001569 TARGET(BINARY_AND)
1570 w = POP();
1571 v = TOP();
1572 x = PyNumber_And(v, w);
1573 Py_DECREF(v);
1574 Py_DECREF(w);
1575 SET_TOP(x);
1576 if (x != NULL) DISPATCH();
1577 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001578
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001579 TARGET(BINARY_XOR)
1580 w = POP();
1581 v = TOP();
1582 x = PyNumber_Xor(v, w);
1583 Py_DECREF(v);
1584 Py_DECREF(w);
1585 SET_TOP(x);
1586 if (x != NULL) DISPATCH();
1587 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 TARGET(BINARY_OR)
1590 w = POP();
1591 v = TOP();
1592 x = PyNumber_Or(v, w);
1593 Py_DECREF(v);
1594 Py_DECREF(w);
1595 SET_TOP(x);
1596 if (x != NULL) DISPATCH();
1597 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001598
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001599 TARGET(LIST_APPEND)
1600 w = POP();
1601 v = PEEK(oparg);
1602 err = PyList_Append(v, w);
1603 Py_DECREF(w);
1604 if (err == 0) {
1605 PREDICT(JUMP_ABSOLUTE);
1606 DISPATCH();
1607 }
1608 break;
Raymond Hettingerdd80f762004-03-07 07:31:06 +00001609
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001610 TARGET(SET_ADD)
1611 w = POP();
1612 v = stack_pointer[-oparg];
1613 err = PySet_Add(v, w);
1614 Py_DECREF(w);
1615 if (err == 0) {
1616 PREDICT(JUMP_ABSOLUTE);
1617 DISPATCH();
1618 }
1619 break;
Nick Coghlan650f0d02007-04-15 12:05:43 +00001620
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001621 TARGET(INPLACE_POWER)
1622 w = POP();
1623 v = TOP();
1624 x = PyNumber_InPlacePower(v, w, Py_None);
1625 Py_DECREF(v);
1626 Py_DECREF(w);
1627 SET_TOP(x);
1628 if (x != NULL) DISPATCH();
1629 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001630
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001631 TARGET(INPLACE_MULTIPLY)
1632 w = POP();
1633 v = TOP();
1634 x = PyNumber_InPlaceMultiply(v, w);
1635 Py_DECREF(v);
1636 Py_DECREF(w);
1637 SET_TOP(x);
1638 if (x != NULL) DISPATCH();
1639 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001640
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001641 TARGET(INPLACE_TRUE_DIVIDE)
1642 w = POP();
1643 v = TOP();
1644 x = PyNumber_InPlaceTrueDivide(v, w);
1645 Py_DECREF(v);
1646 Py_DECREF(w);
1647 SET_TOP(x);
1648 if (x != NULL) DISPATCH();
1649 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001650
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001651 TARGET(INPLACE_FLOOR_DIVIDE)
1652 w = POP();
1653 v = TOP();
1654 x = PyNumber_InPlaceFloorDivide(v, w);
1655 Py_DECREF(v);
1656 Py_DECREF(w);
1657 SET_TOP(x);
1658 if (x != NULL) DISPATCH();
1659 break;
Guido van Rossum4668b002001-08-08 05:00:18 +00001660
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001661 TARGET(INPLACE_MODULO)
1662 w = POP();
1663 v = TOP();
1664 x = PyNumber_InPlaceRemainder(v, w);
1665 Py_DECREF(v);
1666 Py_DECREF(w);
1667 SET_TOP(x);
1668 if (x != NULL) DISPATCH();
1669 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001670
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001671 TARGET(INPLACE_ADD)
1672 w = POP();
1673 v = TOP();
Victor Stinnerd2a915d2011-10-02 20:34:20 +02001674 if (PyUnicode_CheckExact(v) &&
1675 PyUnicode_CheckExact(w)) {
1676 x = unicode_concatenate(v, w, f, next_instr);
1677 /* unicode_concatenate consumed the ref to v */
1678 goto skip_decref_v;
1679 }
1680 else {
1681 x = PyNumber_InPlaceAdd(v, w);
1682 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001683 Py_DECREF(v);
Victor Stinnerd2a915d2011-10-02 20:34:20 +02001684 skip_decref_v:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001685 Py_DECREF(w);
1686 SET_TOP(x);
1687 if (x != NULL) DISPATCH();
1688 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001689
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001690 TARGET(INPLACE_SUBTRACT)
1691 w = POP();
1692 v = TOP();
1693 x = PyNumber_InPlaceSubtract(v, w);
1694 Py_DECREF(v);
1695 Py_DECREF(w);
1696 SET_TOP(x);
1697 if (x != NULL) DISPATCH();
1698 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001699
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001700 TARGET(INPLACE_LSHIFT)
1701 w = POP();
1702 v = TOP();
1703 x = PyNumber_InPlaceLshift(v, w);
1704 Py_DECREF(v);
1705 Py_DECREF(w);
1706 SET_TOP(x);
1707 if (x != NULL) DISPATCH();
1708 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001709
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001710 TARGET(INPLACE_RSHIFT)
1711 w = POP();
1712 v = TOP();
1713 x = PyNumber_InPlaceRshift(v, w);
1714 Py_DECREF(v);
1715 Py_DECREF(w);
1716 SET_TOP(x);
1717 if (x != NULL) DISPATCH();
1718 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001719
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001720 TARGET(INPLACE_AND)
1721 w = POP();
1722 v = TOP();
1723 x = PyNumber_InPlaceAnd(v, w);
1724 Py_DECREF(v);
1725 Py_DECREF(w);
1726 SET_TOP(x);
1727 if (x != NULL) DISPATCH();
1728 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001729
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001730 TARGET(INPLACE_XOR)
1731 w = POP();
1732 v = TOP();
1733 x = PyNumber_InPlaceXor(v, w);
1734 Py_DECREF(v);
1735 Py_DECREF(w);
1736 SET_TOP(x);
1737 if (x != NULL) DISPATCH();
1738 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001739
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001740 TARGET(INPLACE_OR)
1741 w = POP();
1742 v = TOP();
1743 x = PyNumber_InPlaceOr(v, w);
1744 Py_DECREF(v);
1745 Py_DECREF(w);
1746 SET_TOP(x);
1747 if (x != NULL) DISPATCH();
1748 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001749
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001750 TARGET(STORE_SUBSCR)
1751 w = TOP();
1752 v = SECOND();
1753 u = THIRD();
1754 STACKADJ(-3);
1755 /* v[w] = u */
1756 err = PyObject_SetItem(v, w, u);
1757 Py_DECREF(u);
1758 Py_DECREF(v);
1759 Py_DECREF(w);
1760 if (err == 0) DISPATCH();
1761 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001762
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001763 TARGET(DELETE_SUBSCR)
1764 w = TOP();
1765 v = SECOND();
1766 STACKADJ(-2);
1767 /* del v[w] */
1768 err = PyObject_DelItem(v, w);
1769 Py_DECREF(v);
1770 Py_DECREF(w);
1771 if (err == 0) DISPATCH();
1772 break;
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001773
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001774 TARGET(PRINT_EXPR)
1775 v = POP();
1776 w = PySys_GetObject("displayhook");
1777 if (w == NULL) {
1778 PyErr_SetString(PyExc_RuntimeError,
1779 "lost sys.displayhook");
1780 err = -1;
1781 x = NULL;
1782 }
1783 if (err == 0) {
1784 x = PyTuple_Pack(1, v);
1785 if (x == NULL)
1786 err = -1;
1787 }
1788 if (err == 0) {
1789 w = PyEval_CallObject(w, x);
1790 Py_XDECREF(w);
1791 if (w == NULL)
1792 err = -1;
1793 }
1794 Py_DECREF(v);
1795 Py_XDECREF(x);
1796 break;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001797
Thomas Wouters434d0822000-08-24 20:11:32 +00001798#ifdef CASE_TOO_BIG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001799 default: switch (opcode) {
Thomas Wouters434d0822000-08-24 20:11:32 +00001800#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001801 TARGET(RAISE_VARARGS)
1802 v = w = NULL;
1803 switch (oparg) {
1804 case 2:
1805 v = POP(); /* cause */
1806 case 1:
1807 w = POP(); /* exc */
1808 case 0: /* Fallthrough */
1809 why = do_raise(w, v);
1810 break;
1811 default:
1812 PyErr_SetString(PyExc_SystemError,
1813 "bad RAISE_VARARGS oparg");
1814 why = WHY_EXCEPTION;
1815 break;
1816 }
1817 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001818
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001819 TARGET(STORE_LOCALS)
1820 x = POP();
1821 v = f->f_locals;
1822 Py_XDECREF(v);
1823 f->f_locals = x;
1824 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001826 TARGET(RETURN_VALUE)
1827 retval = POP();
1828 why = WHY_RETURN;
1829 goto fast_block_end;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001830
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001831 TARGET(YIELD_FROM)
1832 u = POP();
1833 x = PyObject_GetIter(u);
1834 Py_DECREF(u);
1835 if (x == NULL)
1836 break;
1837 /* x is now the iterator, make the first next() call */
1838 retval = (*Py_TYPE(x)->tp_iternext)(x);
1839 if (!retval) {
Amaury Forgeot d'Arc0a239e92012-01-13 21:08:49 +01001840 PyObject *et, *ev, *tb;
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001841 /* iter may be exhausted */
1842 Py_CLEAR(x);
Benjamin Peterson0296a562012-01-13 14:54:31 -05001843 if (PyErr_Occurred() &&
1844 !PyErr_ExceptionMatches(PyExc_StopIteration)) {
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001845 /* some other exception */
1846 break;
1847 }
1848 /* try to get return value from exception */
Nick Coghlan1f7ce622012-01-13 21:43:40 +10001849 PyErr_Fetch(&et, &ev, &tb);
1850 Py_XDECREF(et);
1851 Py_XDECREF(tb);
1852 /* u is return value */
1853 u = NULL;
1854 if (ev) {
1855 u = PyObject_GetAttrString(ev, "value");
1856 Py_DECREF(ev);
1857 if (u == NULL) {
1858 if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
1859 /* some other exception */
1860 break;
1861 }
1862 PyErr_Clear();
1863 }
1864 }
1865 if (u == NULL) {
1866 u = Py_None;
1867 Py_INCREF(u);
1868 }
1869 PUSH(u);
1870 continue;
1871 }
1872 /* x is iterator, retval is value to be yielded */
1873 f->f_yieldfrom = x;
1874 f->f_stacktop = stack_pointer;
1875 why = WHY_YIELD;
1876 goto fast_yield;
1877
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001878 TARGET(YIELD_VALUE)
1879 retval = POP();
1880 f->f_stacktop = stack_pointer;
1881 why = WHY_YIELD;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001882 goto fast_yield;
Tim Peters5ca576e2001-06-18 22:08:13 +00001883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001884 TARGET(POP_EXCEPT)
1885 {
1886 PyTryBlock *b = PyFrame_BlockPop(f);
1887 if (b->b_type != EXCEPT_HANDLER) {
1888 PyErr_SetString(PyExc_SystemError,
1889 "popped block is not an except handler");
1890 why = WHY_EXCEPTION;
1891 break;
1892 }
1893 UNWIND_EXCEPT_HANDLER(b);
1894 }
1895 DISPATCH();
Benjamin Petersoneec3d712008-06-11 15:59:43 +00001896
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001897 TARGET(POP_BLOCK)
1898 {
1899 PyTryBlock *b = PyFrame_BlockPop(f);
1900 UNWIND_BLOCK(b);
1901 }
1902 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00001903
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001904 PREDICTED(END_FINALLY);
1905 TARGET(END_FINALLY)
1906 v = POP();
1907 if (PyLong_Check(v)) {
1908 why = (enum why_code) PyLong_AS_LONG(v);
1909 assert(why != WHY_YIELD);
1910 if (why == WHY_RETURN ||
1911 why == WHY_CONTINUE)
1912 retval = POP();
1913 if (why == WHY_SILENCED) {
1914 /* An exception was silenced by 'with', we must
1915 manually unwind the EXCEPT_HANDLER block which was
1916 created when the exception was caught, otherwise
1917 the stack will be in an inconsistent state. */
1918 PyTryBlock *b = PyFrame_BlockPop(f);
1919 assert(b->b_type == EXCEPT_HANDLER);
1920 UNWIND_EXCEPT_HANDLER(b);
1921 why = WHY_NOT;
1922 }
1923 }
1924 else if (PyExceptionClass_Check(v)) {
1925 w = POP();
1926 u = POP();
1927 PyErr_Restore(v, w, u);
1928 why = WHY_RERAISE;
1929 break;
1930 }
1931 else if (v != Py_None) {
1932 PyErr_SetString(PyExc_SystemError,
1933 "'finally' pops bad exception");
1934 why = WHY_EXCEPTION;
1935 }
1936 Py_DECREF(v);
1937 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001938
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001939 TARGET(LOAD_BUILD_CLASS)
1940 x = PyDict_GetItemString(f->f_builtins,
1941 "__build_class__");
1942 if (x == NULL) {
1943 PyErr_SetString(PyExc_ImportError,
1944 "__build_class__ not found");
1945 break;
1946 }
1947 Py_INCREF(x);
1948 PUSH(x);
1949 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001950
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001951 TARGET(STORE_NAME)
1952 w = GETITEM(names, oparg);
1953 v = POP();
1954 if ((x = f->f_locals) != NULL) {
1955 if (PyDict_CheckExact(x))
1956 err = PyDict_SetItem(x, w, v);
1957 else
1958 err = PyObject_SetItem(x, w, v);
1959 Py_DECREF(v);
1960 if (err == 0) DISPATCH();
1961 break;
1962 }
1963 PyErr_Format(PyExc_SystemError,
1964 "no locals found when storing %R", w);
1965 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00001966
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001967 TARGET(DELETE_NAME)
1968 w = GETITEM(names, oparg);
1969 if ((x = f->f_locals) != NULL) {
1970 if ((err = PyObject_DelItem(x, w)) != 0)
1971 format_exc_check_arg(PyExc_NameError,
1972 NAME_ERROR_MSG,
1973 w);
1974 break;
1975 }
1976 PyErr_Format(PyExc_SystemError,
1977 "no locals when deleting %R", w);
1978 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001979
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001980 PREDICTED_WITH_ARG(UNPACK_SEQUENCE);
1981 TARGET(UNPACK_SEQUENCE)
1982 v = POP();
1983 if (PyTuple_CheckExact(v) &&
1984 PyTuple_GET_SIZE(v) == oparg) {
1985 PyObject **items = \
1986 ((PyTupleObject *)v)->ob_item;
1987 while (oparg--) {
1988 w = items[oparg];
1989 Py_INCREF(w);
1990 PUSH(w);
1991 }
1992 Py_DECREF(v);
1993 DISPATCH();
1994 } else if (PyList_CheckExact(v) &&
1995 PyList_GET_SIZE(v) == oparg) {
1996 PyObject **items = \
1997 ((PyListObject *)v)->ob_item;
1998 while (oparg--) {
1999 w = items[oparg];
2000 Py_INCREF(w);
2001 PUSH(w);
2002 }
2003 } else if (unpack_iterable(v, oparg, -1,
2004 stack_pointer + oparg)) {
2005 STACKADJ(oparg);
2006 } else {
2007 /* unpack_iterable() raised an exception */
2008 why = WHY_EXCEPTION;
2009 }
2010 Py_DECREF(v);
2011 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002012
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002013 TARGET(UNPACK_EX)
2014 {
2015 int totalargs = 1 + (oparg & 0xFF) + (oparg >> 8);
2016 v = POP();
Antoine Pitrou9a2310d2008-07-25 22:39:39 +00002017
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002018 if (unpack_iterable(v, oparg & 0xFF, oparg >> 8,
2019 stack_pointer + totalargs)) {
2020 stack_pointer += totalargs;
2021 } else {
2022 why = WHY_EXCEPTION;
2023 }
2024 Py_DECREF(v);
2025 break;
2026 }
Guido van Rossum0368b722007-05-11 16:50:42 +00002027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002028 TARGET(STORE_ATTR)
2029 w = GETITEM(names, oparg);
2030 v = TOP();
2031 u = SECOND();
2032 STACKADJ(-2);
2033 err = PyObject_SetAttr(v, w, u); /* v.w = u */
2034 Py_DECREF(v);
2035 Py_DECREF(u);
2036 if (err == 0) DISPATCH();
2037 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002038
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002039 TARGET(DELETE_ATTR)
2040 w = GETITEM(names, oparg);
2041 v = POP();
2042 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
2043 /* del v.w */
2044 Py_DECREF(v);
2045 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002046
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002047 TARGET(STORE_GLOBAL)
2048 w = GETITEM(names, oparg);
2049 v = POP();
2050 err = PyDict_SetItem(f->f_globals, w, v);
2051 Py_DECREF(v);
2052 if (err == 0) DISPATCH();
2053 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002054
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002055 TARGET(DELETE_GLOBAL)
2056 w = GETITEM(names, oparg);
2057 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
2058 format_exc_check_arg(
2059 PyExc_NameError, GLOBAL_NAME_ERROR_MSG, w);
2060 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002061
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002062 TARGET(LOAD_NAME)
2063 w = GETITEM(names, oparg);
2064 if ((v = f->f_locals) == NULL) {
2065 PyErr_Format(PyExc_SystemError,
2066 "no locals when loading %R", w);
2067 why = WHY_EXCEPTION;
2068 break;
2069 }
2070 if (PyDict_CheckExact(v)) {
2071 x = PyDict_GetItem(v, w);
2072 Py_XINCREF(x);
2073 }
2074 else {
2075 x = PyObject_GetItem(v, w);
2076 if (x == NULL && PyErr_Occurred()) {
2077 if (!PyErr_ExceptionMatches(
2078 PyExc_KeyError))
2079 break;
2080 PyErr_Clear();
2081 }
2082 }
2083 if (x == NULL) {
Benjamin Peterson20f9c3c2010-07-20 22:39:34 +00002084 x = PyDict_GetItem(f->f_globals, w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002085 if (x == NULL) {
Benjamin Peterson20f9c3c2010-07-20 22:39:34 +00002086 x = PyDict_GetItem(f->f_builtins, w);
2087 if (x == NULL) {
2088 format_exc_check_arg(
2089 PyExc_NameError,
2090 NAME_ERROR_MSG, w);
2091 break;
2092 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002093 }
2094 Py_INCREF(x);
2095 }
2096 PUSH(x);
2097 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002098
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002099 TARGET(LOAD_GLOBAL)
2100 w = GETITEM(names, oparg);
2101 if (PyUnicode_CheckExact(w)) {
2102 /* Inline the PyDict_GetItem() calls.
2103 WARNING: this is an extreme speed hack.
2104 Do not try this at home. */
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002105 Py_hash_t hash = ((PyASCIIObject *)w)->hash;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002106 if (hash != -1) {
2107 PyDictObject *d;
2108 PyDictEntry *e;
2109 d = (PyDictObject *)(f->f_globals);
2110 e = d->ma_lookup(d, w, hash);
2111 if (e == NULL) {
2112 x = NULL;
2113 break;
2114 }
2115 x = e->me_value;
2116 if (x != NULL) {
2117 Py_INCREF(x);
2118 PUSH(x);
2119 DISPATCH();
2120 }
2121 d = (PyDictObject *)(f->f_builtins);
2122 e = d->ma_lookup(d, w, hash);
2123 if (e == NULL) {
2124 x = NULL;
2125 break;
2126 }
2127 x = e->me_value;
2128 if (x != NULL) {
2129 Py_INCREF(x);
2130 PUSH(x);
2131 DISPATCH();
2132 }
2133 goto load_global_error;
2134 }
2135 }
2136 /* This is the un-inlined version of the code above */
2137 x = PyDict_GetItem(f->f_globals, w);
2138 if (x == NULL) {
2139 x = PyDict_GetItem(f->f_builtins, w);
2140 if (x == NULL) {
2141 load_global_error:
2142 format_exc_check_arg(
2143 PyExc_NameError,
2144 GLOBAL_NAME_ERROR_MSG, w);
2145 break;
2146 }
2147 }
2148 Py_INCREF(x);
2149 PUSH(x);
2150 DISPATCH();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002151
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002152 TARGET(DELETE_FAST)
2153 x = GETLOCAL(oparg);
2154 if (x != NULL) {
2155 SETLOCAL(oparg, NULL);
2156 DISPATCH();
2157 }
2158 format_exc_check_arg(
2159 PyExc_UnboundLocalError,
2160 UNBOUNDLOCAL_ERROR_MSG,
2161 PyTuple_GetItem(co->co_varnames, oparg)
2162 );
2163 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002164
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +00002165 TARGET(DELETE_DEREF)
2166 x = freevars[oparg];
2167 if (PyCell_GET(x) != NULL) {
2168 PyCell_Set(x, NULL);
Benjamin Peterson00ebe2c2010-09-10 22:02:31 +00002169 DISPATCH();
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +00002170 }
2171 err = -1;
2172 format_exc_unbound(co, oparg);
2173 break;
2174
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002175 TARGET(LOAD_CLOSURE)
2176 x = freevars[oparg];
2177 Py_INCREF(x);
2178 PUSH(x);
2179 if (x != NULL) DISPATCH();
2180 break;
Jeremy Hylton64949cb2001-01-25 20:06:59 +00002181
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002182 TARGET(LOAD_DEREF)
2183 x = freevars[oparg];
2184 w = PyCell_Get(x);
2185 if (w != NULL) {
2186 PUSH(w);
2187 DISPATCH();
2188 }
2189 err = -1;
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +00002190 format_exc_unbound(co, oparg);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002191 break;
Jeremy Hylton64949cb2001-01-25 20:06:59 +00002192
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002193 TARGET(STORE_DEREF)
2194 w = POP();
2195 x = freevars[oparg];
2196 PyCell_Set(x, w);
2197 Py_DECREF(w);
2198 DISPATCH();
Jeremy Hylton64949cb2001-01-25 20:06:59 +00002199
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002200 TARGET(BUILD_TUPLE)
2201 x = PyTuple_New(oparg);
2202 if (x != NULL) {
2203 for (; --oparg >= 0;) {
2204 w = POP();
2205 PyTuple_SET_ITEM(x, oparg, w);
2206 }
2207 PUSH(x);
2208 DISPATCH();
2209 }
2210 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002211
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002212 TARGET(BUILD_LIST)
2213 x = PyList_New(oparg);
2214 if (x != NULL) {
2215 for (; --oparg >= 0;) {
2216 w = POP();
2217 PyList_SET_ITEM(x, oparg, w);
2218 }
2219 PUSH(x);
2220 DISPATCH();
2221 }
2222 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002223
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002224 TARGET(BUILD_SET)
2225 x = PySet_New(NULL);
2226 if (x != NULL) {
2227 for (; --oparg >= 0;) {
2228 w = POP();
2229 if (err == 0)
2230 err = PySet_Add(x, w);
2231 Py_DECREF(w);
2232 }
2233 if (err != 0) {
2234 Py_DECREF(x);
2235 break;
2236 }
2237 PUSH(x);
2238 DISPATCH();
2239 }
2240 break;
Guido van Rossum86e58e22006-08-28 15:27:34 +00002241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002242 TARGET(BUILD_MAP)
2243 x = _PyDict_NewPresized((Py_ssize_t)oparg);
2244 PUSH(x);
2245 if (x != NULL) DISPATCH();
2246 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002247
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002248 TARGET(STORE_MAP)
2249 w = TOP(); /* key */
2250 u = SECOND(); /* value */
2251 v = THIRD(); /* dict */
2252 STACKADJ(-2);
2253 assert (PyDict_CheckExact(v));
2254 err = PyDict_SetItem(v, w, u); /* v[w] = u */
2255 Py_DECREF(u);
2256 Py_DECREF(w);
2257 if (err == 0) DISPATCH();
2258 break;
Christian Heimes99170a52007-12-19 02:07:34 +00002259
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002260 TARGET(MAP_ADD)
2261 w = TOP(); /* key */
2262 u = SECOND(); /* value */
2263 STACKADJ(-2);
2264 v = stack_pointer[-oparg]; /* dict */
2265 assert (PyDict_CheckExact(v));
2266 err = PyDict_SetItem(v, w, u); /* v[w] = u */
2267 Py_DECREF(u);
2268 Py_DECREF(w);
2269 if (err == 0) {
2270 PREDICT(JUMP_ABSOLUTE);
2271 DISPATCH();
2272 }
2273 break;
Antoine Pitrouf289ae62008-12-18 11:06:25 +00002274
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002275 TARGET(LOAD_ATTR)
2276 w = GETITEM(names, oparg);
2277 v = TOP();
2278 x = PyObject_GetAttr(v, w);
2279 Py_DECREF(v);
2280 SET_TOP(x);
2281 if (x != NULL) DISPATCH();
2282 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002283
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002284 TARGET(COMPARE_OP)
2285 w = POP();
2286 v = TOP();
2287 x = cmp_outcome(oparg, v, w);
2288 Py_DECREF(v);
2289 Py_DECREF(w);
2290 SET_TOP(x);
2291 if (x == NULL) break;
2292 PREDICT(POP_JUMP_IF_FALSE);
2293 PREDICT(POP_JUMP_IF_TRUE);
2294 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002295
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002296 TARGET(IMPORT_NAME)
2297 w = GETITEM(names, oparg);
2298 x = PyDict_GetItemString(f->f_builtins, "__import__");
2299 if (x == NULL) {
2300 PyErr_SetString(PyExc_ImportError,
2301 "__import__ not found");
2302 break;
2303 }
2304 Py_INCREF(x);
2305 v = POP();
2306 u = TOP();
2307 if (PyLong_AsLong(u) != -1 || PyErr_Occurred())
2308 w = PyTuple_Pack(5,
2309 w,
2310 f->f_globals,
2311 f->f_locals == NULL ?
2312 Py_None : f->f_locals,
2313 v,
2314 u);
2315 else
2316 w = PyTuple_Pack(4,
2317 w,
2318 f->f_globals,
2319 f->f_locals == NULL ?
2320 Py_None : f->f_locals,
2321 v);
2322 Py_DECREF(v);
2323 Py_DECREF(u);
2324 if (w == NULL) {
2325 u = POP();
2326 Py_DECREF(x);
2327 x = NULL;
2328 break;
2329 }
2330 READ_TIMESTAMP(intr0);
2331 v = x;
2332 x = PyEval_CallObject(v, w);
2333 Py_DECREF(v);
2334 READ_TIMESTAMP(intr1);
2335 Py_DECREF(w);
2336 SET_TOP(x);
2337 if (x != NULL) DISPATCH();
2338 break;
Guido van Rossumac7be682001-01-17 15:42:30 +00002339
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002340 TARGET(IMPORT_STAR)
2341 v = POP();
2342 PyFrame_FastToLocals(f);
2343 if ((x = f->f_locals) == NULL) {
2344 PyErr_SetString(PyExc_SystemError,
2345 "no locals found during 'import *'");
2346 break;
2347 }
2348 READ_TIMESTAMP(intr0);
2349 err = import_all_from(x, v);
2350 READ_TIMESTAMP(intr1);
2351 PyFrame_LocalsToFast(f, 0);
2352 Py_DECREF(v);
2353 if (err == 0) DISPATCH();
2354 break;
Guido van Rossum25831651993-05-19 14:50:45 +00002355
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002356 TARGET(IMPORT_FROM)
2357 w = GETITEM(names, oparg);
2358 v = TOP();
2359 READ_TIMESTAMP(intr0);
2360 x = import_from(v, w);
2361 READ_TIMESTAMP(intr1);
2362 PUSH(x);
2363 if (x != NULL) DISPATCH();
2364 break;
Thomas Wouters52152252000-08-17 22:55:00 +00002365
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002366 TARGET(JUMP_FORWARD)
2367 JUMPBY(oparg);
2368 FAST_DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002369
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002370 PREDICTED_WITH_ARG(POP_JUMP_IF_FALSE);
2371 TARGET(POP_JUMP_IF_FALSE)
2372 w = POP();
2373 if (w == Py_True) {
2374 Py_DECREF(w);
2375 FAST_DISPATCH();
2376 }
2377 if (w == Py_False) {
2378 Py_DECREF(w);
2379 JUMPTO(oparg);
2380 FAST_DISPATCH();
2381 }
2382 err = PyObject_IsTrue(w);
2383 Py_DECREF(w);
2384 if (err > 0)
2385 err = 0;
2386 else if (err == 0)
2387 JUMPTO(oparg);
2388 else
2389 break;
2390 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002391
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002392 PREDICTED_WITH_ARG(POP_JUMP_IF_TRUE);
2393 TARGET(POP_JUMP_IF_TRUE)
2394 w = POP();
2395 if (w == Py_False) {
2396 Py_DECREF(w);
2397 FAST_DISPATCH();
2398 }
2399 if (w == Py_True) {
2400 Py_DECREF(w);
2401 JUMPTO(oparg);
2402 FAST_DISPATCH();
2403 }
2404 err = PyObject_IsTrue(w);
2405 Py_DECREF(w);
2406 if (err > 0) {
2407 err = 0;
2408 JUMPTO(oparg);
2409 }
2410 else if (err == 0)
2411 ;
2412 else
2413 break;
2414 DISPATCH();
Jeffrey Yasskin9de7ec72009-02-25 02:25:04 +00002415
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002416 TARGET(JUMP_IF_FALSE_OR_POP)
2417 w = TOP();
2418 if (w == Py_True) {
2419 STACKADJ(-1);
2420 Py_DECREF(w);
2421 FAST_DISPATCH();
2422 }
2423 if (w == Py_False) {
2424 JUMPTO(oparg);
2425 FAST_DISPATCH();
2426 }
2427 err = PyObject_IsTrue(w);
2428 if (err > 0) {
2429 STACKADJ(-1);
2430 Py_DECREF(w);
2431 err = 0;
2432 }
2433 else if (err == 0)
2434 JUMPTO(oparg);
2435 else
2436 break;
2437 DISPATCH();
Jeffrey Yasskin9de7ec72009-02-25 02:25:04 +00002438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002439 TARGET(JUMP_IF_TRUE_OR_POP)
2440 w = TOP();
2441 if (w == Py_False) {
2442 STACKADJ(-1);
2443 Py_DECREF(w);
2444 FAST_DISPATCH();
2445 }
2446 if (w == Py_True) {
2447 JUMPTO(oparg);
2448 FAST_DISPATCH();
2449 }
2450 err = PyObject_IsTrue(w);
2451 if (err > 0) {
2452 err = 0;
2453 JUMPTO(oparg);
2454 }
2455 else if (err == 0) {
2456 STACKADJ(-1);
2457 Py_DECREF(w);
2458 }
2459 else
2460 break;
2461 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002462
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002463 PREDICTED_WITH_ARG(JUMP_ABSOLUTE);
2464 TARGET(JUMP_ABSOLUTE)
2465 JUMPTO(oparg);
Guido van Rossum58da9312007-11-10 23:39:45 +00002466#if FAST_LOOPS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002467 /* Enabling this path speeds-up all while and for-loops by bypassing
2468 the per-loop checks for signals. By default, this should be turned-off
2469 because it prevents detection of a control-break in tight loops like
2470 "while 1: pass". Compile with this option turned-on when you need
2471 the speed-up and do not need break checking inside tight loops (ones
2472 that contain only instructions ending with FAST_DISPATCH).
2473 */
2474 FAST_DISPATCH();
Guido van Rossum58da9312007-11-10 23:39:45 +00002475#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002476 DISPATCH();
Guido van Rossum58da9312007-11-10 23:39:45 +00002477#endif
Guido van Rossumac7be682001-01-17 15:42:30 +00002478
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002479 TARGET(GET_ITER)
2480 /* before: [obj]; after [getiter(obj)] */
2481 v = TOP();
2482 x = PyObject_GetIter(v);
2483 Py_DECREF(v);
2484 if (x != NULL) {
2485 SET_TOP(x);
2486 PREDICT(FOR_ITER);
2487 DISPATCH();
2488 }
2489 STACKADJ(-1);
2490 break;
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002491
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002492 PREDICTED_WITH_ARG(FOR_ITER);
2493 TARGET(FOR_ITER)
2494 /* before: [iter]; after: [iter, iter()] *or* [] */
2495 v = TOP();
2496 x = (*v->ob_type->tp_iternext)(v);
2497 if (x != NULL) {
2498 PUSH(x);
2499 PREDICT(STORE_FAST);
2500 PREDICT(UNPACK_SEQUENCE);
2501 DISPATCH();
2502 }
2503 if (PyErr_Occurred()) {
2504 if (!PyErr_ExceptionMatches(
2505 PyExc_StopIteration))
2506 break;
2507 PyErr_Clear();
2508 }
2509 /* iterator ended normally */
2510 x = v = POP();
2511 Py_DECREF(v);
2512 JUMPBY(oparg);
2513 DISPATCH();
Guido van Rossum59d1d2b2001-04-20 19:13:02 +00002514
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002515 TARGET(BREAK_LOOP)
2516 why = WHY_BREAK;
2517 goto fast_block_end;
Raymond Hettinger2d783e92004-03-12 09:12:22 +00002518
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002519 TARGET(CONTINUE_LOOP)
2520 retval = PyLong_FromLong(oparg);
2521 if (!retval) {
2522 x = NULL;
2523 break;
2524 }
2525 why = WHY_CONTINUE;
2526 goto fast_block_end;
Raymond Hettinger2d783e92004-03-12 09:12:22 +00002527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002528 TARGET_WITH_IMPL(SETUP_LOOP, _setup_finally)
2529 TARGET_WITH_IMPL(SETUP_EXCEPT, _setup_finally)
2530 TARGET(SETUP_FINALLY)
2531 _setup_finally:
2532 /* NOTE: If you add any new block-setup opcodes that
2533 are not try/except/finally handlers, you may need
2534 to update the PyGen_NeedsFinalizing() function.
2535 */
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00002536
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002537 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
2538 STACK_LEVEL());
2539 DISPATCH();
Guido van Rossumac7be682001-01-17 15:42:30 +00002540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002541 TARGET(SETUP_WITH)
2542 {
Benjamin Petersonce798522012-01-22 11:24:29 -05002543 _Py_IDENTIFIER(__exit__);
2544 _Py_IDENTIFIER(__enter__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002545 w = TOP();
Benjamin Petersonce798522012-01-22 11:24:29 -05002546 x = special_lookup(w, &PyId___exit__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002547 if (!x)
2548 break;
2549 SET_TOP(x);
Benjamin Petersonce798522012-01-22 11:24:29 -05002550 u = special_lookup(w, &PyId___enter__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002551 Py_DECREF(w);
2552 if (!u) {
2553 x = NULL;
2554 break;
2555 }
2556 x = PyObject_CallFunctionObjArgs(u, NULL);
2557 Py_DECREF(u);
2558 if (!x)
2559 break;
2560 /* Setup the finally block before pushing the result
2561 of __enter__ on the stack. */
2562 PyFrame_BlockSetup(f, SETUP_FINALLY, INSTR_OFFSET() + oparg,
2563 STACK_LEVEL());
Benjamin Peterson876b2f22009-06-28 03:18:59 +00002564
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002565 PUSH(x);
2566 DISPATCH();
2567 }
Benjamin Peterson876b2f22009-06-28 03:18:59 +00002568
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002569 TARGET(WITH_CLEANUP)
2570 {
2571 /* At the top of the stack are 1-3 values indicating
2572 how/why we entered the finally clause:
2573 - TOP = None
2574 - (TOP, SECOND) = (WHY_{RETURN,CONTINUE}), retval
2575 - TOP = WHY_*; no retval below it
2576 - (TOP, SECOND, THIRD) = exc_info()
2577 (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER
2578 Below them is EXIT, the context.__exit__ bound method.
2579 In the last case, we must call
2580 EXIT(TOP, SECOND, THIRD)
2581 otherwise we must call
2582 EXIT(None, None, None)
Christian Heimesdd15f6c2008-03-16 00:07:10 +00002583
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002584 In the first two cases, we remove EXIT from the
2585 stack, leaving the rest in the same order. In the
2586 third case, we shift the bottom 3 values of the
2587 stack down, and replace the empty spot with NULL.
Guido van Rossum1a5e21e2006-02-28 21:57:43 +00002588
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002589 In addition, if the stack represents an exception,
2590 *and* the function call returns a 'true' value, we
2591 push WHY_SILENCED onto the stack. END_FINALLY will
2592 then not re-raise the exception. (But non-local
2593 gotos should still be resumed.)
2594 */
Thomas Wouters477c8d52006-05-27 19:21:47 +00002595
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002596 PyObject *exit_func;
2597 u = TOP();
2598 if (u == Py_None) {
2599 (void)POP();
2600 exit_func = TOP();
2601 SET_TOP(u);
2602 v = w = Py_None;
2603 }
2604 else if (PyLong_Check(u)) {
2605 (void)POP();
2606 switch(PyLong_AsLong(u)) {
2607 case WHY_RETURN:
2608 case WHY_CONTINUE:
2609 /* Retval in TOP. */
2610 exit_func = SECOND();
2611 SET_SECOND(TOP());
2612 SET_TOP(u);
2613 break;
2614 default:
2615 exit_func = TOP();
2616 SET_TOP(u);
2617 break;
2618 }
2619 u = v = w = Py_None;
2620 }
2621 else {
2622 PyObject *tp, *exc, *tb;
2623 PyTryBlock *block;
2624 v = SECOND();
2625 w = THIRD();
2626 tp = FOURTH();
2627 exc = PEEK(5);
2628 tb = PEEK(6);
2629 exit_func = PEEK(7);
2630 SET_VALUE(7, tb);
2631 SET_VALUE(6, exc);
2632 SET_VALUE(5, tp);
2633 /* UNWIND_EXCEPT_HANDLER will pop this off. */
2634 SET_FOURTH(NULL);
2635 /* We just shifted the stack down, so we have
2636 to tell the except handler block that the
2637 values are lower than it expects. */
2638 block = &f->f_blockstack[f->f_iblock - 1];
2639 assert(block->b_type == EXCEPT_HANDLER);
2640 block->b_level--;
2641 }
2642 /* XXX Not the fastest way to call it... */
2643 x = PyObject_CallFunctionObjArgs(exit_func, u, v, w,
2644 NULL);
2645 Py_DECREF(exit_func);
2646 if (x == NULL)
2647 break; /* Go to error exit */
Amaury Forgeot d'Arc10b24e82008-12-10 23:49:33 +00002648
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002649 if (u != Py_None)
2650 err = PyObject_IsTrue(x);
2651 else
2652 err = 0;
2653 Py_DECREF(x);
Amaury Forgeot d'Arc10b24e82008-12-10 23:49:33 +00002654
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002655 if (err < 0)
2656 break; /* Go to error exit */
2657 else if (err > 0) {
2658 err = 0;
2659 /* There was an exception and a True return */
2660 PUSH(PyLong_FromLong((long) WHY_SILENCED));
2661 }
2662 PREDICT(END_FINALLY);
2663 break;
2664 }
Guido van Rossumc2e20742006-02-27 22:32:47 +00002665
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002666 TARGET(CALL_FUNCTION)
2667 {
2668 PyObject **sp;
2669 PCALL(PCALL_ALL);
2670 sp = stack_pointer;
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002671#ifdef WITH_TSC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002672 x = call_function(&sp, oparg, &intr0, &intr1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002673#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002674 x = call_function(&sp, oparg);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002675#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002676 stack_pointer = sp;
2677 PUSH(x);
2678 if (x != NULL)
2679 DISPATCH();
2680 break;
2681 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002682
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002683 TARGET_WITH_IMPL(CALL_FUNCTION_VAR, _call_function_var_kw)
2684 TARGET_WITH_IMPL(CALL_FUNCTION_KW, _call_function_var_kw)
2685 TARGET(CALL_FUNCTION_VAR_KW)
2686 _call_function_var_kw:
2687 {
2688 int na = oparg & 0xff;
2689 int nk = (oparg>>8) & 0xff;
2690 int flags = (opcode - CALL_FUNCTION) & 3;
2691 int n = na + 2 * nk;
2692 PyObject **pfunc, *func, **sp;
2693 PCALL(PCALL_ALL);
2694 if (flags & CALL_FLAG_VAR)
2695 n++;
2696 if (flags & CALL_FLAG_KW)
2697 n++;
2698 pfunc = stack_pointer - n - 1;
2699 func = *pfunc;
Jeremy Hylton52820442001-01-03 23:52:36 +00002700
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002701 if (PyMethod_Check(func)
Stefan Krahb7e10102010-06-23 18:42:39 +00002702 && PyMethod_GET_SELF(func) != NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002703 PyObject *self = PyMethod_GET_SELF(func);
2704 Py_INCREF(self);
2705 func = PyMethod_GET_FUNCTION(func);
2706 Py_INCREF(func);
2707 Py_DECREF(*pfunc);
2708 *pfunc = self;
2709 na++;
Brett Cannonb94767f2011-02-22 20:15:44 +00002710 /* n++; */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002711 } else
2712 Py_INCREF(func);
2713 sp = stack_pointer;
2714 READ_TIMESTAMP(intr0);
2715 x = ext_do_call(func, &sp, flags, na, nk);
2716 READ_TIMESTAMP(intr1);
2717 stack_pointer = sp;
2718 Py_DECREF(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00002719
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002720 while (stack_pointer > pfunc) {
2721 w = POP();
2722 Py_DECREF(w);
2723 }
2724 PUSH(x);
2725 if (x != NULL)
2726 DISPATCH();
2727 break;
2728 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002729
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002730 TARGET_WITH_IMPL(MAKE_CLOSURE, _make_function)
2731 TARGET(MAKE_FUNCTION)
2732 _make_function:
2733 {
2734 int posdefaults = oparg & 0xff;
2735 int kwdefaults = (oparg>>8) & 0xff;
2736 int num_annotations = (oparg >> 16) & 0x7fff;
Guido van Rossum4f72a782006-10-27 23:31:49 +00002737
Antoine Pitrou86a36b52011-11-25 18:56:07 +01002738 w = POP(); /* qualname */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002739 v = POP(); /* code object */
Antoine Pitrou86a36b52011-11-25 18:56:07 +01002740 x = PyFunction_NewWithQualName(v, f->f_globals, w);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002741 Py_DECREF(v);
Antoine Pitrou86a36b52011-11-25 18:56:07 +01002742 Py_DECREF(w);
Antoine Pitrou9a2310d2008-07-25 22:39:39 +00002743
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002744 if (x != NULL && opcode == MAKE_CLOSURE) {
2745 v = POP();
2746 if (PyFunction_SetClosure(x, v) != 0) {
2747 /* Can't happen unless bytecode is corrupt. */
2748 why = WHY_EXCEPTION;
2749 }
2750 Py_DECREF(v);
2751 }
Neal Norwitzc1505362006-12-28 06:47:50 +00002752
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002753 if (x != NULL && num_annotations > 0) {
2754 Py_ssize_t name_ix;
2755 u = POP(); /* names of args with annotations */
2756 v = PyDict_New();
2757 if (v == NULL) {
2758 Py_DECREF(x);
2759 x = NULL;
2760 break;
2761 }
2762 name_ix = PyTuple_Size(u);
2763 assert(num_annotations == name_ix+1);
2764 while (name_ix > 0) {
2765 --name_ix;
2766 t = PyTuple_GET_ITEM(u, name_ix);
2767 w = POP();
2768 /* XXX(nnorwitz): check for errors */
2769 PyDict_SetItem(v, t, w);
2770 Py_DECREF(w);
2771 }
Neal Norwitzc1505362006-12-28 06:47:50 +00002772
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002773 if (PyFunction_SetAnnotations(x, v) != 0) {
2774 /* Can't happen unless
2775 PyFunction_SetAnnotations changes. */
2776 why = WHY_EXCEPTION;
2777 }
2778 Py_DECREF(v);
2779 Py_DECREF(u);
2780 }
Neal Norwitzc1505362006-12-28 06:47:50 +00002781
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002782 /* XXX Maybe this should be a separate opcode? */
2783 if (x != NULL && posdefaults > 0) {
2784 v = PyTuple_New(posdefaults);
2785 if (v == NULL) {
2786 Py_DECREF(x);
2787 x = NULL;
2788 break;
2789 }
2790 while (--posdefaults >= 0) {
2791 w = POP();
2792 PyTuple_SET_ITEM(v, posdefaults, w);
2793 }
2794 if (PyFunction_SetDefaults(x, v) != 0) {
2795 /* Can't happen unless
2796 PyFunction_SetDefaults changes. */
2797 why = WHY_EXCEPTION;
2798 }
2799 Py_DECREF(v);
2800 }
2801 if (x != NULL && kwdefaults > 0) {
2802 v = PyDict_New();
2803 if (v == NULL) {
2804 Py_DECREF(x);
2805 x = NULL;
2806 break;
2807 }
2808 while (--kwdefaults >= 0) {
2809 w = POP(); /* default value */
2810 u = POP(); /* kw only arg name */
2811 /* XXX(nnorwitz): check for errors */
2812 PyDict_SetItem(v, u, w);
2813 Py_DECREF(w);
2814 Py_DECREF(u);
2815 }
2816 if (PyFunction_SetKwDefaults(x, v) != 0) {
2817 /* Can't happen unless
2818 PyFunction_SetKwDefaults changes. */
2819 why = WHY_EXCEPTION;
2820 }
2821 Py_DECREF(v);
2822 }
2823 PUSH(x);
2824 break;
2825 }
Guido van Rossum8861b741996-07-30 16:49:37 +00002826
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002827 TARGET(BUILD_SLICE)
2828 if (oparg == 3)
2829 w = POP();
2830 else
2831 w = NULL;
2832 v = POP();
2833 u = TOP();
2834 x = PySlice_New(u, v, w);
2835 Py_DECREF(u);
2836 Py_DECREF(v);
2837 Py_XDECREF(w);
2838 SET_TOP(x);
2839 if (x != NULL) DISPATCH();
2840 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00002841
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002842 TARGET(EXTENDED_ARG)
2843 opcode = NEXTOP();
2844 oparg = oparg<<16 | NEXTARG();
2845 goto dispatch_opcode;
Guido van Rossum8861b741996-07-30 16:49:37 +00002846
Antoine Pitrou042b1282010-08-13 21:15:58 +00002847#if USE_COMPUTED_GOTOS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002848 _unknown_opcode:
Antoine Pitroub52ec782009-01-25 16:34:23 +00002849#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002850 default:
2851 fprintf(stderr,
2852 "XXX lineno: %d, opcode: %d\n",
2853 PyFrame_GetLineNumber(f),
2854 opcode);
2855 PyErr_SetString(PyExc_SystemError, "unknown opcode");
2856 why = WHY_EXCEPTION;
2857 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002858
2859#ifdef CASE_TOO_BIG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002860 }
Guido van Rossum04691fc1992-08-12 15:35:34 +00002861#endif
2862
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002863 } /* switch */
Guido van Rossum374a9221991-04-04 10:40:29 +00002864
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002865 on_error:
Guido van Rossumac7be682001-01-17 15:42:30 +00002866
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002867 READ_TIMESTAMP(inst1);
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002868
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002869 /* Quickly continue if no error occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002870
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002871 if (why == WHY_NOT) {
2872 if (err == 0 && x != NULL) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002873#ifdef CHECKEXC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002874 /* This check is expensive! */
2875 if (PyErr_Occurred())
2876 fprintf(stderr,
2877 "XXX undetected error\n");
2878 else {
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002879#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002880 READ_TIMESTAMP(loop1);
2881 continue; /* Normal, fast path */
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002882#ifdef CHECKEXC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002883 }
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00002884#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002885 }
2886 why = WHY_EXCEPTION;
2887 x = Py_None;
2888 err = 0;
2889 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002890
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002891 /* Double-check exception status */
Guido van Rossumac7be682001-01-17 15:42:30 +00002892
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002893 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
2894 if (!PyErr_Occurred()) {
2895 PyErr_SetString(PyExc_SystemError,
2896 "error return without exception set");
2897 why = WHY_EXCEPTION;
2898 }
2899 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00002900#ifdef CHECKEXC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002901 else {
2902 /* This check is expensive! */
2903 if (PyErr_Occurred()) {
2904 char buf[128];
2905 sprintf(buf, "Stack unwind with exception "
2906 "set and why=%d", why);
2907 Py_FatalError(buf);
2908 }
2909 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002910#endif
2911
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002912 /* Log traceback info if this is a real exception */
Guido van Rossumac7be682001-01-17 15:42:30 +00002913
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002914 if (why == WHY_EXCEPTION) {
2915 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002916
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002917 if (tstate->c_tracefunc != NULL)
2918 call_exc_trace(tstate->c_tracefunc,
2919 tstate->c_traceobj, f);
2920 }
Guido van Rossumac7be682001-01-17 15:42:30 +00002921
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002922 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
Guido van Rossumac7be682001-01-17 15:42:30 +00002923
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002924 if (why == WHY_RERAISE)
2925 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00002926
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002927 /* Unwind stacks if a (pseudo) exception occurred */
Guido van Rossumac7be682001-01-17 15:42:30 +00002928
Raymond Hettinger1dd83092004-02-06 18:32:33 +00002929fast_block_end:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002930 while (why != WHY_NOT && f->f_iblock > 0) {
2931 /* Peek at the current block. */
2932 PyTryBlock *b = &f->f_blockstack[f->f_iblock - 1];
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002933
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002934 assert(why != WHY_YIELD);
2935 if (b->b_type == SETUP_LOOP && why == WHY_CONTINUE) {
2936 why = WHY_NOT;
2937 JUMPTO(PyLong_AS_LONG(retval));
2938 Py_DECREF(retval);
2939 break;
2940 }
2941 /* Now we have to pop the block. */
2942 f->f_iblock--;
Jeremy Hylton3faa52e2001-02-01 22:48:12 +00002943
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002944 if (b->b_type == EXCEPT_HANDLER) {
2945 UNWIND_EXCEPT_HANDLER(b);
2946 continue;
2947 }
2948 UNWIND_BLOCK(b);
2949 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
2950 why = WHY_NOT;
2951 JUMPTO(b->b_handler);
2952 break;
2953 }
2954 if (why == WHY_EXCEPTION && (b->b_type == SETUP_EXCEPT
2955 || b->b_type == SETUP_FINALLY)) {
2956 PyObject *exc, *val, *tb;
2957 int handler = b->b_handler;
2958 /* Beware, this invalidates all b->b_* fields */
2959 PyFrame_BlockSetup(f, EXCEPT_HANDLER, -1, STACK_LEVEL());
2960 PUSH(tstate->exc_traceback);
2961 PUSH(tstate->exc_value);
2962 if (tstate->exc_type != NULL) {
2963 PUSH(tstate->exc_type);
2964 }
2965 else {
2966 Py_INCREF(Py_None);
2967 PUSH(Py_None);
2968 }
2969 PyErr_Fetch(&exc, &val, &tb);
2970 /* Make the raw exception data
2971 available to the handler,
2972 so a program can emulate the
2973 Python main loop. */
2974 PyErr_NormalizeException(
2975 &exc, &val, &tb);
2976 PyException_SetTraceback(val, tb);
2977 Py_INCREF(exc);
2978 tstate->exc_type = exc;
2979 Py_INCREF(val);
2980 tstate->exc_value = val;
2981 tstate->exc_traceback = tb;
2982 if (tb == NULL)
2983 tb = Py_None;
2984 Py_INCREF(tb);
2985 PUSH(tb);
2986 PUSH(val);
2987 PUSH(exc);
2988 why = WHY_NOT;
2989 JUMPTO(handler);
2990 break;
2991 }
2992 if (b->b_type == SETUP_FINALLY) {
2993 if (why & (WHY_RETURN | WHY_CONTINUE))
2994 PUSH(retval);
2995 PUSH(PyLong_FromLong((long)why));
2996 why = WHY_NOT;
2997 JUMPTO(b->b_handler);
2998 break;
2999 }
3000 } /* unwind stack */
Guido van Rossum374a9221991-04-04 10:40:29 +00003001
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003002 /* End the loop if we still have an error (or return) */
Guido van Rossumac7be682001-01-17 15:42:30 +00003003
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003004 if (why != WHY_NOT)
3005 break;
3006 READ_TIMESTAMP(loop1);
Guido van Rossumac7be682001-01-17 15:42:30 +00003007
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003008 } /* main loop */
Guido van Rossumac7be682001-01-17 15:42:30 +00003009
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003010 assert(why != WHY_YIELD);
3011 /* Pop remaining stack entries. */
3012 while (!EMPTY()) {
3013 v = POP();
3014 Py_XDECREF(v);
3015 }
Guido van Rossum35974fb2001-12-06 21:28:18 +00003016
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003017 if (why != WHY_RETURN)
3018 retval = NULL;
Guido van Rossumac7be682001-01-17 15:42:30 +00003019
Raymond Hettinger1dd83092004-02-06 18:32:33 +00003020fast_yield:
Benjamin Petersonac913412011-07-03 16:25:11 -05003021 if (co->co_flags & CO_GENERATOR && (why == WHY_YIELD || why == WHY_RETURN)) {
3022 /* The purpose of this block is to put aside the generator's exception
3023 state and restore that of the calling frame. If the current
3024 exception state is from the caller, we clear the exception values
3025 on the generator frame, so they are not swapped back in latter. The
3026 origin of the current exception state is determined by checking for
3027 except handler blocks, which we must be in iff a new exception
3028 state came into existence in this frame. (An uncaught exception
3029 would have why == WHY_EXCEPTION, and we wouldn't be here). */
3030 int i;
3031 for (i = 0; i < f->f_iblock; i++)
3032 if (f->f_blockstack[i].b_type == EXCEPT_HANDLER)
3033 break;
3034 if (i == f->f_iblock)
3035 /* We did not create this exception. */
Benjamin Peterson87880242011-07-03 16:48:31 -05003036 restore_and_clear_exc_state(tstate, f);
Benjamin Petersonac913412011-07-03 16:25:11 -05003037 else
Benjamin Peterson87880242011-07-03 16:48:31 -05003038 swap_exc_state(tstate, f);
Benjamin Petersonac913412011-07-03 16:25:11 -05003039 }
Benjamin Peterson83195c32011-07-03 13:44:00 -05003040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003041 if (tstate->use_tracing) {
3042 if (tstate->c_tracefunc) {
3043 if (why == WHY_RETURN || why == WHY_YIELD) {
3044 if (call_trace(tstate->c_tracefunc,
3045 tstate->c_traceobj, f,
3046 PyTrace_RETURN, retval)) {
3047 Py_XDECREF(retval);
3048 retval = NULL;
3049 why = WHY_EXCEPTION;
3050 }
3051 }
3052 else if (why == WHY_EXCEPTION) {
3053 call_trace_protected(tstate->c_tracefunc,
3054 tstate->c_traceobj, f,
3055 PyTrace_RETURN, NULL);
3056 }
3057 }
3058 if (tstate->c_profilefunc) {
3059 if (why == WHY_EXCEPTION)
3060 call_trace_protected(tstate->c_profilefunc,
3061 tstate->c_profileobj, f,
3062 PyTrace_RETURN, NULL);
3063 else if (call_trace(tstate->c_profilefunc,
3064 tstate->c_profileobj, f,
3065 PyTrace_RETURN, retval)) {
3066 Py_XDECREF(retval);
3067 retval = NULL;
Brett Cannonb94767f2011-02-22 20:15:44 +00003068 /* why = WHY_EXCEPTION; */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003069 }
3070 }
3071 }
Guido van Rossuma4240131997-01-21 21:18:36 +00003072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003073 /* pop frame */
Thomas Woutersce272b62007-09-19 21:19:28 +00003074exit_eval_frame:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003075 Py_LeaveRecursiveCall();
3076 tstate->frame = f->f_back;
Guido van Rossumac7be682001-01-17 15:42:30 +00003077
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003078 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00003079}
3080
Benjamin Petersonb204a422011-06-05 22:04:07 -05003081static void
Benjamin Petersone109c702011-06-24 09:37:26 -05003082format_missing(const char *kind, PyCodeObject *co, PyObject *names)
3083{
3084 int err;
3085 Py_ssize_t len = PyList_GET_SIZE(names);
3086 PyObject *name_str, *comma, *tail, *tmp;
3087
3088 assert(PyList_CheckExact(names));
3089 assert(len >= 1);
3090 /* Deal with the joys of natural language. */
3091 switch (len) {
3092 case 1:
3093 name_str = PyList_GET_ITEM(names, 0);
3094 Py_INCREF(name_str);
3095 break;
3096 case 2:
3097 name_str = PyUnicode_FromFormat("%U and %U",
3098 PyList_GET_ITEM(names, len - 2),
3099 PyList_GET_ITEM(names, len - 1));
3100 break;
3101 default:
3102 tail = PyUnicode_FromFormat(", %U, and %U",
3103 PyList_GET_ITEM(names, len - 2),
3104 PyList_GET_ITEM(names, len - 1));
3105 /* Chop off the last two objects in the list. This shouldn't actually
3106 fail, but we can't be too careful. */
3107 err = PyList_SetSlice(names, len - 2, len, NULL);
3108 if (err == -1) {
3109 Py_DECREF(tail);
3110 return;
3111 }
3112 /* Stitch everything up into a nice comma-separated list. */
3113 comma = PyUnicode_FromString(", ");
3114 if (comma == NULL) {
3115 Py_DECREF(tail);
3116 return;
3117 }
3118 tmp = PyUnicode_Join(comma, names);
3119 Py_DECREF(comma);
3120 if (tmp == NULL) {
3121 Py_DECREF(tail);
3122 return;
3123 }
3124 name_str = PyUnicode_Concat(tmp, tail);
3125 Py_DECREF(tmp);
3126 Py_DECREF(tail);
3127 break;
3128 }
3129 if (name_str == NULL)
3130 return;
3131 PyErr_Format(PyExc_TypeError,
3132 "%U() missing %i required %s argument%s: %U",
3133 co->co_name,
3134 len,
3135 kind,
3136 len == 1 ? "" : "s",
3137 name_str);
3138 Py_DECREF(name_str);
3139}
3140
3141static void
3142missing_arguments(PyCodeObject *co, int missing, int defcount,
3143 PyObject **fastlocals)
3144{
3145 int i, j = 0;
3146 int start, end;
3147 int positional = defcount != -1;
3148 const char *kind = positional ? "positional" : "keyword-only";
3149 PyObject *missing_names;
3150
3151 /* Compute the names of the arguments that are missing. */
3152 missing_names = PyList_New(missing);
3153 if (missing_names == NULL)
3154 return;
3155 if (positional) {
3156 start = 0;
3157 end = co->co_argcount - defcount;
3158 }
3159 else {
3160 start = co->co_argcount;
3161 end = start + co->co_kwonlyargcount;
3162 }
3163 for (i = start; i < end; i++) {
3164 if (GETLOCAL(i) == NULL) {
3165 PyObject *raw = PyTuple_GET_ITEM(co->co_varnames, i);
3166 PyObject *name = PyObject_Repr(raw);
3167 if (name == NULL) {
3168 Py_DECREF(missing_names);
3169 return;
3170 }
3171 PyList_SET_ITEM(missing_names, j++, name);
3172 }
3173 }
3174 assert(j == missing);
3175 format_missing(kind, co, missing_names);
3176 Py_DECREF(missing_names);
3177}
3178
3179static void
3180too_many_positional(PyCodeObject *co, int given, int defcount, PyObject **fastlocals)
Benjamin Petersonb204a422011-06-05 22:04:07 -05003181{
3182 int plural;
3183 int kwonly_given = 0;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003184 int i;
3185 PyObject *sig, *kwonly_sig;
3186
Benjamin Petersone109c702011-06-24 09:37:26 -05003187 assert((co->co_flags & CO_VARARGS) == 0);
3188 /* Count missing keyword-only args. */
Benjamin Petersonb204a422011-06-05 22:04:07 -05003189 for (i = co->co_argcount; i < co->co_argcount + co->co_kwonlyargcount; i++)
Benjamin Petersone109c702011-06-24 09:37:26 -05003190 if (GETLOCAL(i) != NULL)
Benjamin Petersonb204a422011-06-05 22:04:07 -05003191 kwonly_given++;
Benjamin Petersone109c702011-06-24 09:37:26 -05003192 if (defcount) {
3193 int atleast = co->co_argcount - defcount;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003194 plural = 1;
3195 sig = PyUnicode_FromFormat("from %d to %d", atleast, co->co_argcount);
3196 }
3197 else {
3198 plural = co->co_argcount != 1;
3199 sig = PyUnicode_FromFormat("%d", co->co_argcount);
3200 }
3201 if (sig == NULL)
3202 return;
3203 if (kwonly_given) {
3204 const char *format = " positional argument%s (and %d keyword-only argument%s)";
3205 kwonly_sig = PyUnicode_FromFormat(format, given != 1 ? "s" : "", kwonly_given,
3206 kwonly_given != 1 ? "s" : "");
3207 if (kwonly_sig == NULL) {
3208 Py_DECREF(sig);
3209 return;
3210 }
3211 }
3212 else {
3213 /* This will not fail. */
3214 kwonly_sig = PyUnicode_FromString("");
Benjamin Petersone109c702011-06-24 09:37:26 -05003215 assert(kwonly_sig != NULL);
Benjamin Petersonb204a422011-06-05 22:04:07 -05003216 }
3217 PyErr_Format(PyExc_TypeError,
3218 "%U() takes %U positional argument%s but %d%U %s given",
3219 co->co_name,
3220 sig,
3221 plural ? "s" : "",
3222 given,
3223 kwonly_sig,
3224 given == 1 && !kwonly_given ? "was" : "were");
3225 Py_DECREF(sig);
3226 Py_DECREF(kwonly_sig);
3227}
3228
Guido van Rossumc2e20742006-02-27 22:32:47 +00003229/* This is gonna seem *real weird*, but if you put some other code between
Martin v. Löwis8d97e332004-06-27 15:43:12 +00003230 PyEval_EvalFrame() and PyEval_EvalCodeEx() you will need to adjust
Guido van Rossumc2e20742006-02-27 22:32:47 +00003231 the test in the if statements in Misc/gdbinit (pystack and pystackv). */
Skip Montanaro786ea6b2004-03-01 15:44:05 +00003232
Tim Peters6d6c1a32001-08-02 04:15:00 +00003233PyObject *
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00003234PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003235 PyObject **args, int argcount, PyObject **kws, int kwcount,
3236 PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure)
Tim Peters5ca576e2001-06-18 22:08:13 +00003237{
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00003238 PyCodeObject* co = (PyCodeObject*)_co;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003239 register PyFrameObject *f;
3240 register PyObject *retval = NULL;
3241 register PyObject **fastlocals, **freevars;
3242 PyThreadState *tstate = PyThreadState_GET();
3243 PyObject *x, *u;
3244 int total_args = co->co_argcount + co->co_kwonlyargcount;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003245 int i;
3246 int n = argcount;
3247 PyObject *kwdict = NULL;
Tim Peters5ca576e2001-06-18 22:08:13 +00003248
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003249 if (globals == NULL) {
3250 PyErr_SetString(PyExc_SystemError,
3251 "PyEval_EvalCodeEx: NULL globals");
3252 return NULL;
3253 }
Tim Peters5ca576e2001-06-18 22:08:13 +00003254
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003255 assert(tstate != NULL);
3256 assert(globals != NULL);
3257 f = PyFrame_New(tstate, co, globals, locals);
3258 if (f == NULL)
3259 return NULL;
Tim Peters5ca576e2001-06-18 22:08:13 +00003260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003261 fastlocals = f->f_localsplus;
3262 freevars = f->f_localsplus + co->co_nlocals;
Tim Peters5ca576e2001-06-18 22:08:13 +00003263
Benjamin Petersonb204a422011-06-05 22:04:07 -05003264 /* Parse arguments. */
3265 if (co->co_flags & CO_VARKEYWORDS) {
3266 kwdict = PyDict_New();
3267 if (kwdict == NULL)
3268 goto fail;
3269 i = total_args;
3270 if (co->co_flags & CO_VARARGS)
3271 i++;
3272 SETLOCAL(i, kwdict);
3273 }
3274 if (argcount > co->co_argcount)
3275 n = co->co_argcount;
3276 for (i = 0; i < n; i++) {
3277 x = args[i];
3278 Py_INCREF(x);
3279 SETLOCAL(i, x);
3280 }
3281 if (co->co_flags & CO_VARARGS) {
3282 u = PyTuple_New(argcount - n);
3283 if (u == NULL)
3284 goto fail;
3285 SETLOCAL(total_args, u);
3286 for (i = n; i < argcount; i++) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003287 x = args[i];
3288 Py_INCREF(x);
Benjamin Petersonb204a422011-06-05 22:04:07 -05003289 PyTuple_SET_ITEM(u, i-n, x);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003290 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003291 }
3292 for (i = 0; i < kwcount; i++) {
3293 PyObject **co_varnames;
3294 PyObject *keyword = kws[2*i];
3295 PyObject *value = kws[2*i + 1];
3296 int j;
3297 if (keyword == NULL || !PyUnicode_Check(keyword)) {
3298 PyErr_Format(PyExc_TypeError,
3299 "%U() keywords must be strings",
3300 co->co_name);
3301 goto fail;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003302 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003303 /* Speed hack: do raw pointer compares. As names are
3304 normally interned this should almost always hit. */
3305 co_varnames = ((PyTupleObject *)(co->co_varnames))->ob_item;
3306 for (j = 0; j < total_args; j++) {
3307 PyObject *nm = co_varnames[j];
3308 if (nm == keyword)
3309 goto kw_found;
3310 }
3311 /* Slow fallback, just in case */
3312 for (j = 0; j < total_args; j++) {
3313 PyObject *nm = co_varnames[j];
3314 int cmp = PyObject_RichCompareBool(
3315 keyword, nm, Py_EQ);
3316 if (cmp > 0)
3317 goto kw_found;
3318 else if (cmp < 0)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003319 goto fail;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003320 }
3321 if (j >= total_args && kwdict == NULL) {
3322 PyErr_Format(PyExc_TypeError,
3323 "%U() got an unexpected "
3324 "keyword argument '%S'",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003325 co->co_name,
3326 keyword);
Benjamin Petersonb204a422011-06-05 22:04:07 -05003327 goto fail;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003328 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003329 PyDict_SetItem(kwdict, keyword, value);
3330 continue;
3331 kw_found:
3332 if (GETLOCAL(j) != NULL) {
3333 PyErr_Format(PyExc_TypeError,
3334 "%U() got multiple "
3335 "values for argument '%S'",
3336 co->co_name,
3337 keyword);
3338 goto fail;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003339 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003340 Py_INCREF(value);
3341 SETLOCAL(j, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003342 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003343 if (argcount > co->co_argcount && !(co->co_flags & CO_VARARGS)) {
Benjamin Petersone109c702011-06-24 09:37:26 -05003344 too_many_positional(co, argcount, defcount, fastlocals);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003345 goto fail;
3346 }
Benjamin Petersonb204a422011-06-05 22:04:07 -05003347 if (argcount < co->co_argcount) {
3348 int m = co->co_argcount - defcount;
Benjamin Petersone109c702011-06-24 09:37:26 -05003349 int missing = 0;
3350 for (i = argcount; i < m; i++)
3351 if (GETLOCAL(i) == NULL)
3352 missing++;
3353 if (missing) {
3354 missing_arguments(co, missing, defcount, fastlocals);
3355 goto fail;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003356 }
3357 if (n > m)
3358 i = n - m;
3359 else
3360 i = 0;
3361 for (; i < defcount; i++) {
3362 if (GETLOCAL(m+i) == NULL) {
3363 PyObject *def = defs[i];
3364 Py_INCREF(def);
3365 SETLOCAL(m+i, def);
3366 }
3367 }
3368 }
3369 if (co->co_kwonlyargcount > 0) {
Benjamin Petersone109c702011-06-24 09:37:26 -05003370 int missing = 0;
Benjamin Petersonb204a422011-06-05 22:04:07 -05003371 for (i = co->co_argcount; i < total_args; i++) {
3372 PyObject *name;
3373 if (GETLOCAL(i) != NULL)
3374 continue;
3375 name = PyTuple_GET_ITEM(co->co_varnames, i);
3376 if (kwdefs != NULL) {
3377 PyObject *def = PyDict_GetItem(kwdefs, name);
3378 if (def) {
3379 Py_INCREF(def);
3380 SETLOCAL(i, def);
3381 continue;
3382 }
3383 }
Benjamin Petersone109c702011-06-24 09:37:26 -05003384 missing++;
3385 }
3386 if (missing) {
3387 missing_arguments(co, missing, -1, fastlocals);
Benjamin Petersonb204a422011-06-05 22:04:07 -05003388 goto fail;
3389 }
3390 }
3391
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003392 /* Allocate and initialize storage for cell vars, and copy free
Benjamin Peterson90037602011-06-25 22:54:45 -05003393 vars into frame. */
3394 for (i = 0; i < PyTuple_GET_SIZE(co->co_cellvars); ++i) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003395 PyObject *c;
Benjamin Peterson90037602011-06-25 22:54:45 -05003396 int arg;
3397 /* Possibly account for the cell variable being an argument. */
3398 if (co->co_cell2arg != NULL &&
3399 (arg = co->co_cell2arg[i]) != CO_CELL_NOT_AN_ARG)
3400 c = PyCell_New(GETLOCAL(arg));
3401 else
3402 c = PyCell_New(NULL);
3403 if (c == NULL)
3404 goto fail;
3405 SETLOCAL(co->co_nlocals + i, c);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003406 }
Benjamin Peterson90037602011-06-25 22:54:45 -05003407 for (i = 0; i < PyTuple_GET_SIZE(co->co_freevars); ++i) {
3408 PyObject *o = PyTuple_GET_ITEM(closure, i);
3409 Py_INCREF(o);
3410 freevars[PyTuple_GET_SIZE(co->co_cellvars) + i] = o;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003411 }
Tim Peters5ca576e2001-06-18 22:08:13 +00003412
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003413 if (co->co_flags & CO_GENERATOR) {
3414 /* Don't need to keep the reference to f_back, it will be set
3415 * when the generator is resumed. */
3416 Py_XDECREF(f->f_back);
3417 f->f_back = NULL;
Neil Schemenauer2b13ce82001-06-21 02:41:10 +00003418
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003419 PCALL(PCALL_GENERATOR);
Jeremy Hylton985eba52003-02-05 23:13:00 +00003420
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003421 /* Create a new generator that owns the ready to run frame
3422 * and return that as the value. */
3423 return PyGen_New(f);
3424 }
Tim Peters5ca576e2001-06-18 22:08:13 +00003425
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003426 retval = PyEval_EvalFrameEx(f,0);
Tim Peters5ca576e2001-06-18 22:08:13 +00003427
Thomas Woutersce272b62007-09-19 21:19:28 +00003428fail: /* Jump here from prelude on failure */
Tim Peters5ca576e2001-06-18 22:08:13 +00003429
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003430 /* decref'ing the frame can cause __del__ methods to get invoked,
3431 which can call back into Python. While we're done with the
3432 current Python frame (f), the associated C stack is still in use,
3433 so recursion_depth must be boosted for the duration.
3434 */
3435 assert(tstate != NULL);
3436 ++tstate->recursion_depth;
3437 Py_DECREF(f);
3438 --tstate->recursion_depth;
3439 return retval;
Tim Peters5ca576e2001-06-18 22:08:13 +00003440}
3441
3442
Benjamin Peterson876b2f22009-06-28 03:18:59 +00003443static PyObject *
Benjamin Petersonce798522012-01-22 11:24:29 -05003444special_lookup(PyObject *o, _Py_Identifier *id)
Benjamin Peterson876b2f22009-06-28 03:18:59 +00003445{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003446 PyObject *res;
Benjamin Petersonce798522012-01-22 11:24:29 -05003447 res = _PyObject_LookupSpecial(o, id);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003448 if (res == NULL && !PyErr_Occurred()) {
Benjamin Petersonce798522012-01-22 11:24:29 -05003449 PyErr_SetObject(PyExc_AttributeError, id->object);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003450 return NULL;
3451 }
3452 return res;
Benjamin Peterson876b2f22009-06-28 03:18:59 +00003453}
3454
3455
Benjamin Peterson87880242011-07-03 16:48:31 -05003456/* These 3 functions deal with the exception state of generators. */
3457
3458static void
3459save_exc_state(PyThreadState *tstate, PyFrameObject *f)
3460{
3461 PyObject *type, *value, *traceback;
3462 Py_XINCREF(tstate->exc_type);
3463 Py_XINCREF(tstate->exc_value);
3464 Py_XINCREF(tstate->exc_traceback);
3465 type = f->f_exc_type;
3466 value = f->f_exc_value;
3467 traceback = f->f_exc_traceback;
3468 f->f_exc_type = tstate->exc_type;
3469 f->f_exc_value = tstate->exc_value;
3470 f->f_exc_traceback = tstate->exc_traceback;
3471 Py_XDECREF(type);
3472 Py_XDECREF(value);
Victor Stinnerd2a915d2011-10-02 20:34:20 +02003473 Py_XDECREF(traceback);
Benjamin Peterson87880242011-07-03 16:48:31 -05003474}
3475
3476static void
3477swap_exc_state(PyThreadState *tstate, PyFrameObject *f)
3478{
3479 PyObject *tmp;
3480 tmp = tstate->exc_type;
3481 tstate->exc_type = f->f_exc_type;
3482 f->f_exc_type = tmp;
3483 tmp = tstate->exc_value;
3484 tstate->exc_value = f->f_exc_value;
3485 f->f_exc_value = tmp;
3486 tmp = tstate->exc_traceback;
3487 tstate->exc_traceback = f->f_exc_traceback;
3488 f->f_exc_traceback = tmp;
3489}
3490
3491static void
3492restore_and_clear_exc_state(PyThreadState *tstate, PyFrameObject *f)
3493{
3494 PyObject *type, *value, *tb;
3495 type = tstate->exc_type;
3496 value = tstate->exc_value;
3497 tb = tstate->exc_traceback;
3498 tstate->exc_type = f->f_exc_type;
3499 tstate->exc_value = f->f_exc_value;
3500 tstate->exc_traceback = f->f_exc_traceback;
3501 f->f_exc_type = NULL;
3502 f->f_exc_value = NULL;
3503 f->f_exc_traceback = NULL;
3504 Py_XDECREF(type);
3505 Py_XDECREF(value);
3506 Py_XDECREF(tb);
3507}
3508
3509
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003510/* Logic for the raise statement (too complicated for inlining).
3511 This *consumes* a reference count to each of its arguments. */
Raymond Hettinger7c958652004-04-06 10:11:10 +00003512static enum why_code
Collin Winter828f04a2007-08-31 00:04:24 +00003513do_raise(PyObject *exc, PyObject *cause)
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003514{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003515 PyObject *type = NULL, *value = NULL;
Collin Winter828f04a2007-08-31 00:04:24 +00003516
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003517 if (exc == NULL) {
3518 /* Reraise */
3519 PyThreadState *tstate = PyThreadState_GET();
3520 PyObject *tb;
3521 type = tstate->exc_type;
3522 value = tstate->exc_value;
3523 tb = tstate->exc_traceback;
3524 if (type == Py_None) {
3525 PyErr_SetString(PyExc_RuntimeError,
3526 "No active exception to reraise");
3527 return WHY_EXCEPTION;
3528 }
3529 Py_XINCREF(type);
3530 Py_XINCREF(value);
3531 Py_XINCREF(tb);
3532 PyErr_Restore(type, value, tb);
3533 return WHY_RERAISE;
3534 }
Guido van Rossumac7be682001-01-17 15:42:30 +00003535
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003536 /* We support the following forms of raise:
3537 raise
Collin Winter828f04a2007-08-31 00:04:24 +00003538 raise <instance>
3539 raise <type> */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003540
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003541 if (PyExceptionClass_Check(exc)) {
3542 type = exc;
3543 value = PyObject_CallObject(exc, NULL);
3544 if (value == NULL)
3545 goto raise_error;
Benjamin Peterson5afa03a2011-07-15 14:09:26 -05003546 if (!PyExceptionInstance_Check(value)) {
3547 PyErr_Format(PyExc_TypeError,
3548 "calling %R should have returned an instance of "
3549 "BaseException, not %R",
3550 type, Py_TYPE(value));
3551 goto raise_error;
3552 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003553 }
3554 else if (PyExceptionInstance_Check(exc)) {
3555 value = exc;
3556 type = PyExceptionInstance_Class(exc);
3557 Py_INCREF(type);
3558 }
3559 else {
3560 /* Not something you can raise. You get an exception
3561 anyway, just not what you specified :-) */
3562 Py_DECREF(exc);
3563 PyErr_SetString(PyExc_TypeError,
3564 "exceptions must derive from BaseException");
3565 goto raise_error;
3566 }
Collin Winter828f04a2007-08-31 00:04:24 +00003567
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003568 if (cause) {
3569 PyObject *fixed_cause;
3570 if (PyExceptionClass_Check(cause)) {
3571 fixed_cause = PyObject_CallObject(cause, NULL);
3572 if (fixed_cause == NULL)
3573 goto raise_error;
3574 Py_DECREF(cause);
3575 }
3576 else if (PyExceptionInstance_Check(cause)) {
3577 fixed_cause = cause;
3578 }
3579 else {
3580 PyErr_SetString(PyExc_TypeError,
3581 "exception causes must derive from "
3582 "BaseException");
3583 goto raise_error;
3584 }
3585 PyException_SetCause(value, fixed_cause);
3586 }
Collin Winter828f04a2007-08-31 00:04:24 +00003587
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003588 PyErr_SetObject(type, value);
3589 /* PyErr_SetObject incref's its arguments */
3590 Py_XDECREF(value);
3591 Py_XDECREF(type);
3592 return WHY_EXCEPTION;
Collin Winter828f04a2007-08-31 00:04:24 +00003593
3594raise_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003595 Py_XDECREF(value);
3596 Py_XDECREF(type);
3597 Py_XDECREF(cause);
3598 return WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00003599}
3600
Tim Petersd6d010b2001-06-21 02:49:55 +00003601/* Iterate v argcnt times and store the results on the stack (via decreasing
Guido van Rossum0368b722007-05-11 16:50:42 +00003602 sp). Return 1 for success, 0 if error.
Antoine Pitrou9a2310d2008-07-25 22:39:39 +00003603
Guido van Rossum0368b722007-05-11 16:50:42 +00003604 If argcntafter == -1, do a simple unpack. If it is >= 0, do an unpack
3605 with a variable target.
3606*/
Tim Petersd6d010b2001-06-21 02:49:55 +00003607
Barry Warsawe42b18f1997-08-25 22:13:04 +00003608static int
Guido van Rossum0368b722007-05-11 16:50:42 +00003609unpack_iterable(PyObject *v, int argcnt, int argcntafter, PyObject **sp)
Barry Warsawe42b18f1997-08-25 22:13:04 +00003610{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003611 int i = 0, j = 0;
3612 Py_ssize_t ll = 0;
3613 PyObject *it; /* iter(v) */
3614 PyObject *w;
3615 PyObject *l = NULL; /* variable list */
Guido van Rossumac7be682001-01-17 15:42:30 +00003616
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003617 assert(v != NULL);
Tim Petersd6d010b2001-06-21 02:49:55 +00003618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003619 it = PyObject_GetIter(v);
3620 if (it == NULL)
3621 goto Error;
Tim Petersd6d010b2001-06-21 02:49:55 +00003622
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003623 for (; i < argcnt; i++) {
3624 w = PyIter_Next(it);
3625 if (w == NULL) {
3626 /* Iterator done, via error or exhaustion. */
3627 if (!PyErr_Occurred()) {
3628 PyErr_Format(PyExc_ValueError,
3629 "need more than %d value%s to unpack",
3630 i, i == 1 ? "" : "s");
3631 }
3632 goto Error;
3633 }
3634 *--sp = w;
3635 }
Tim Petersd6d010b2001-06-21 02:49:55 +00003636
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003637 if (argcntafter == -1) {
3638 /* We better have exhausted the iterator now. */
3639 w = PyIter_Next(it);
3640 if (w == NULL) {
3641 if (PyErr_Occurred())
3642 goto Error;
3643 Py_DECREF(it);
3644 return 1;
3645 }
3646 Py_DECREF(w);
Georg Brandl0310a832010-07-10 10:32:36 +00003647 PyErr_Format(PyExc_ValueError, "too many values to unpack "
3648 "(expected %d)", argcnt);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003649 goto Error;
3650 }
Guido van Rossum0368b722007-05-11 16:50:42 +00003651
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003652 l = PySequence_List(it);
3653 if (l == NULL)
3654 goto Error;
3655 *--sp = l;
3656 i++;
Guido van Rossum0368b722007-05-11 16:50:42 +00003657
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003658 ll = PyList_GET_SIZE(l);
3659 if (ll < argcntafter) {
3660 PyErr_Format(PyExc_ValueError, "need more than %zd values to unpack",
3661 argcnt + ll);
3662 goto Error;
3663 }
Guido van Rossum0368b722007-05-11 16:50:42 +00003664
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003665 /* Pop the "after-variable" args off the list. */
3666 for (j = argcntafter; j > 0; j--, i++) {
3667 *--sp = PyList_GET_ITEM(l, ll - j);
3668 }
3669 /* Resize the list. */
3670 Py_SIZE(l) = ll - argcntafter;
3671 Py_DECREF(it);
3672 return 1;
Guido van Rossum0368b722007-05-11 16:50:42 +00003673
Tim Petersd6d010b2001-06-21 02:49:55 +00003674Error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003675 for (; i > 0; i--, sp++)
3676 Py_DECREF(*sp);
3677 Py_XDECREF(it);
3678 return 0;
Barry Warsawe42b18f1997-08-25 22:13:04 +00003679}
3680
3681
Guido van Rossum96a42c81992-01-12 02:29:51 +00003682#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00003683static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003684prtrace(PyObject *v, char *str)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003685{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003686 printf("%s ", str);
3687 if (PyObject_Print(v, stdout, 0) != 0)
3688 PyErr_Clear(); /* Don't know what else to do */
3689 printf("\n");
3690 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003691}
Guido van Rossum3f5da241990-12-20 15:06:42 +00003692#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003693
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003694static void
Fred Drake5755ce62001-06-27 19:19:46 +00003695call_exc_trace(Py_tracefunc func, PyObject *self, PyFrameObject *f)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003696{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003697 PyObject *type, *value, *traceback, *arg;
3698 int err;
3699 PyErr_Fetch(&type, &value, &traceback);
3700 if (value == NULL) {
3701 value = Py_None;
3702 Py_INCREF(value);
3703 }
3704 arg = PyTuple_Pack(3, type, value, traceback);
3705 if (arg == NULL) {
3706 PyErr_Restore(type, value, traceback);
3707 return;
3708 }
3709 err = call_trace(func, self, f, PyTrace_EXCEPTION, arg);
3710 Py_DECREF(arg);
3711 if (err == 0)
3712 PyErr_Restore(type, value, traceback);
3713 else {
3714 Py_XDECREF(type);
3715 Py_XDECREF(value);
3716 Py_XDECREF(traceback);
3717 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003718}
3719
Amaury Forgeot d'Arcf05149a2007-11-13 01:05:30 +00003720static int
Fred Drake4ec5d562001-10-04 19:26:43 +00003721call_trace_protected(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003722 int what, PyObject *arg)
Fred Drake4ec5d562001-10-04 19:26:43 +00003723{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003724 PyObject *type, *value, *traceback;
3725 int err;
3726 PyErr_Fetch(&type, &value, &traceback);
3727 err = call_trace(func, obj, frame, what, arg);
3728 if (err == 0)
3729 {
3730 PyErr_Restore(type, value, traceback);
3731 return 0;
3732 }
3733 else {
3734 Py_XDECREF(type);
3735 Py_XDECREF(value);
3736 Py_XDECREF(traceback);
3737 return -1;
3738 }
Fred Drake4ec5d562001-10-04 19:26:43 +00003739}
3740
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00003741static int
Fred Drake5755ce62001-06-27 19:19:46 +00003742call_trace(Py_tracefunc func, PyObject *obj, PyFrameObject *frame,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003743 int what, PyObject *arg)
Guido van Rossum96a42c81992-01-12 02:29:51 +00003744{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003745 register PyThreadState *tstate = frame->f_tstate;
3746 int result;
3747 if (tstate->tracing)
3748 return 0;
3749 tstate->tracing++;
3750 tstate->use_tracing = 0;
3751 result = func(obj, frame, what, arg);
3752 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3753 || (tstate->c_profilefunc != NULL));
3754 tstate->tracing--;
3755 return result;
Guido van Rossum96a42c81992-01-12 02:29:51 +00003756}
3757
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00003758PyObject *
3759_PyEval_CallTracing(PyObject *func, PyObject *args)
3760{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003761 PyFrameObject *frame = PyEval_GetFrame();
3762 PyThreadState *tstate = frame->f_tstate;
3763 int save_tracing = tstate->tracing;
3764 int save_use_tracing = tstate->use_tracing;
3765 PyObject *result;
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00003766
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003767 tstate->tracing = 0;
3768 tstate->use_tracing = ((tstate->c_tracefunc != NULL)
3769 || (tstate->c_profilefunc != NULL));
3770 result = PyObject_Call(func, args, NULL);
3771 tstate->tracing = save_tracing;
3772 tstate->use_tracing = save_use_tracing;
3773 return result;
Guido van Rossuma12fe4e2003-04-09 19:06:21 +00003774}
3775
Alexandre Vassalotti7b82b402009-07-21 04:30:03 +00003776/* See Objects/lnotab_notes.txt for a description of how tracing works. */
Michael W. Hudson006c7522002-11-08 13:08:46 +00003777static int
Tim Peters8a5c3c72004-04-05 19:36:21 +00003778maybe_call_line_trace(Py_tracefunc func, PyObject *obj,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003779 PyFrameObject *frame, int *instr_lb, int *instr_ub,
3780 int *instr_prev)
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003781{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003782 int result = 0;
3783 int line = frame->f_lineno;
Michael W. Hudson006c7522002-11-08 13:08:46 +00003784
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003785 /* If the last instruction executed isn't in the current
3786 instruction window, reset the window.
3787 */
3788 if (frame->f_lasti < *instr_lb || frame->f_lasti >= *instr_ub) {
3789 PyAddrPair bounds;
3790 line = _PyCode_CheckLineNumber(frame->f_code, frame->f_lasti,
3791 &bounds);
3792 *instr_lb = bounds.ap_lower;
3793 *instr_ub = bounds.ap_upper;
3794 }
3795 /* If the last instruction falls at the start of a line or if
3796 it represents a jump backwards, update the frame's line
3797 number and call the trace function. */
3798 if (frame->f_lasti == *instr_lb || frame->f_lasti < *instr_prev) {
3799 frame->f_lineno = line;
3800 result = call_trace(func, obj, frame, PyTrace_LINE, Py_None);
3801 }
3802 *instr_prev = frame->f_lasti;
3803 return result;
Michael W. Hudsondd32a912002-08-15 14:59:02 +00003804}
3805
Fred Drake5755ce62001-06-27 19:19:46 +00003806void
3807PyEval_SetProfile(Py_tracefunc func, PyObject *arg)
Fred Draked0838392001-06-16 21:02:31 +00003808{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003809 PyThreadState *tstate = PyThreadState_GET();
3810 PyObject *temp = tstate->c_profileobj;
3811 Py_XINCREF(arg);
3812 tstate->c_profilefunc = NULL;
3813 tstate->c_profileobj = NULL;
3814 /* Must make sure that tracing is not ignored if 'temp' is freed */
3815 tstate->use_tracing = tstate->c_tracefunc != NULL;
3816 Py_XDECREF(temp);
3817 tstate->c_profilefunc = func;
3818 tstate->c_profileobj = arg;
3819 /* Flag that tracing or profiling is turned on */
3820 tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL);
Fred Drake5755ce62001-06-27 19:19:46 +00003821}
3822
3823void
3824PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
3825{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003826 PyThreadState *tstate = PyThreadState_GET();
3827 PyObject *temp = tstate->c_traceobj;
3828 _Py_TracingPossible += (func != NULL) - (tstate->c_tracefunc != NULL);
3829 Py_XINCREF(arg);
3830 tstate->c_tracefunc = NULL;
3831 tstate->c_traceobj = NULL;
3832 /* Must make sure that profiling is not ignored if 'temp' is freed */
3833 tstate->use_tracing = tstate->c_profilefunc != NULL;
3834 Py_XDECREF(temp);
3835 tstate->c_tracefunc = func;
3836 tstate->c_traceobj = arg;
3837 /* Flag that tracing or profiling is turned on */
3838 tstate->use_tracing = ((func != NULL)
3839 || (tstate->c_profilefunc != NULL));
Fred Draked0838392001-06-16 21:02:31 +00003840}
3841
Guido van Rossumb209a111997-04-29 18:18:01 +00003842PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003843PyEval_GetBuiltins(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00003844{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003845 PyFrameObject *current_frame = PyEval_GetFrame();
3846 if (current_frame == NULL)
3847 return PyThreadState_GET()->interp->builtins;
3848 else
3849 return current_frame->f_builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00003850}
3851
Guido van Rossumb209a111997-04-29 18:18:01 +00003852PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003853PyEval_GetLocals(void)
Guido van Rossum5b722181993-03-30 17:46:03 +00003854{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003855 PyFrameObject *current_frame = PyEval_GetFrame();
3856 if (current_frame == NULL)
3857 return NULL;
3858 PyFrame_FastToLocals(current_frame);
3859 return current_frame->f_locals;
Guido van Rossum5b722181993-03-30 17:46:03 +00003860}
3861
Guido van Rossumb209a111997-04-29 18:18:01 +00003862PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003863PyEval_GetGlobals(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003864{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003865 PyFrameObject *current_frame = PyEval_GetFrame();
3866 if (current_frame == NULL)
3867 return NULL;
3868 else
3869 return current_frame->f_globals;
Guido van Rossum3f5da241990-12-20 15:06:42 +00003870}
3871
Guido van Rossum6297a7a2003-02-19 15:53:17 +00003872PyFrameObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003873PyEval_GetFrame(void)
Guido van Rossume59214e1994-08-30 08:01:59 +00003874{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003875 PyThreadState *tstate = PyThreadState_GET();
3876 return _PyThreadState_GetFrame(tstate);
Guido van Rossume59214e1994-08-30 08:01:59 +00003877}
3878
Guido van Rossum6135a871995-01-09 17:53:26 +00003879int
Tim Peters5ba58662001-07-16 02:29:45 +00003880PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
Jeremy Hylton061d1062001-03-22 02:32:48 +00003881{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003882 PyFrameObject *current_frame = PyEval_GetFrame();
3883 int result = cf->cf_flags != 0;
Tim Peters5ba58662001-07-16 02:29:45 +00003884
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003885 if (current_frame != NULL) {
3886 const int codeflags = current_frame->f_code->co_flags;
3887 const int compilerflags = codeflags & PyCF_MASK;
3888 if (compilerflags) {
3889 result = 1;
3890 cf->cf_flags |= compilerflags;
3891 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003892#if 0 /* future keyword */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003893 if (codeflags & CO_GENERATOR_ALLOWED) {
3894 result = 1;
3895 cf->cf_flags |= CO_GENERATOR_ALLOWED;
3896 }
Neil Schemenauerc24ea082002-03-22 23:53:36 +00003897#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003898 }
3899 return result;
Jeremy Hylton061d1062001-03-22 02:32:48 +00003900}
3901
Guido van Rossum3f5da241990-12-20 15:06:42 +00003902
Guido van Rossum681d79a1995-07-18 14:51:37 +00003903/* External interface to call any callable object.
Antoine Pitrou8689a102010-04-01 16:53:15 +00003904 The arg must be a tuple or NULL. The kw must be a dict or NULL. */
Guido van Rossume59214e1994-08-30 08:01:59 +00003905
Guido van Rossumb209a111997-04-29 18:18:01 +00003906PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003907PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum681d79a1995-07-18 14:51:37 +00003908{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003909 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00003910
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003911 if (arg == NULL) {
3912 arg = PyTuple_New(0);
3913 if (arg == NULL)
3914 return NULL;
3915 }
3916 else if (!PyTuple_Check(arg)) {
3917 PyErr_SetString(PyExc_TypeError,
3918 "argument list must be a tuple");
3919 return NULL;
3920 }
3921 else
3922 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003923
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003924 if (kw != NULL && !PyDict_Check(kw)) {
3925 PyErr_SetString(PyExc_TypeError,
3926 "keyword list must be a dictionary");
3927 Py_DECREF(arg);
3928 return NULL;
3929 }
Guido van Rossume3e61c11995-08-04 04:14:47 +00003930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003931 result = PyObject_Call(func, arg, kw);
3932 Py_DECREF(arg);
3933 return result;
Jeremy Hylton52820442001-01-03 23:52:36 +00003934}
3935
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003936const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003937PyEval_GetFuncName(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003938{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003939 if (PyMethod_Check(func))
3940 return PyEval_GetFuncName(PyMethod_GET_FUNCTION(func));
3941 else if (PyFunction_Check(func))
3942 return _PyUnicode_AsString(((PyFunctionObject*)func)->func_name);
3943 else if (PyCFunction_Check(func))
3944 return ((PyCFunctionObject*)func)->m_ml->ml_name;
3945 else
3946 return func->ob_type->tp_name;
Jeremy Hylton512a2372001-04-11 13:52:29 +00003947}
3948
Jeremy Hyltonaf68c872005-12-10 18:50:16 +00003949const char *
Tim Peters6d6c1a32001-08-02 04:15:00 +00003950PyEval_GetFuncDesc(PyObject *func)
Jeremy Hylton512a2372001-04-11 13:52:29 +00003951{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003952 if (PyMethod_Check(func))
3953 return "()";
3954 else if (PyFunction_Check(func))
3955 return "()";
3956 else if (PyCFunction_Check(func))
3957 return "()";
3958 else
3959 return " object";
Jeremy Hylton512a2372001-04-11 13:52:29 +00003960}
3961
Neal Norwitzaddfe0c2002-11-10 14:33:26 +00003962static void
Jeremy Hylton192690e2002-08-16 18:36:11 +00003963err_args(PyObject *func, int flags, int nargs)
3964{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003965 if (flags & METH_NOARGS)
3966 PyErr_Format(PyExc_TypeError,
3967 "%.200s() takes no arguments (%d given)",
3968 ((PyCFunctionObject *)func)->m_ml->ml_name,
3969 nargs);
3970 else
3971 PyErr_Format(PyExc_TypeError,
3972 "%.200s() takes exactly one argument (%d given)",
3973 ((PyCFunctionObject *)func)->m_ml->ml_name,
3974 nargs);
Jeremy Hylton192690e2002-08-16 18:36:11 +00003975}
3976
Armin Rigo1c2d7e52005-09-20 18:34:01 +00003977#define C_TRACE(x, call) \
Nicholas Bastind858a772004-06-25 23:31:06 +00003978if (tstate->use_tracing && tstate->c_profilefunc) { \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003979 if (call_trace(tstate->c_profilefunc, \
3980 tstate->c_profileobj, \
3981 tstate->frame, PyTrace_C_CALL, \
3982 func)) { \
3983 x = NULL; \
3984 } \
3985 else { \
3986 x = call; \
3987 if (tstate->c_profilefunc != NULL) { \
3988 if (x == NULL) { \
3989 call_trace_protected(tstate->c_profilefunc, \
3990 tstate->c_profileobj, \
3991 tstate->frame, PyTrace_C_EXCEPTION, \
3992 func); \
3993 /* XXX should pass (type, value, tb) */ \
3994 } else { \
3995 if (call_trace(tstate->c_profilefunc, \
3996 tstate->c_profileobj, \
3997 tstate->frame, PyTrace_C_RETURN, \
3998 func)) { \
3999 Py_DECREF(x); \
4000 x = NULL; \
4001 } \
4002 } \
4003 } \
4004 } \
Nicholas Bastind858a772004-06-25 23:31:06 +00004005} else { \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004006 x = call; \
4007 }
Nicholas Bastinc69ebe82004-03-24 21:57:10 +00004008
Jeremy Hyltone8c04322002-08-16 17:47:26 +00004009static PyObject *
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00004010call_function(PyObject ***pp_stack, int oparg
4011#ifdef WITH_TSC
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004012 , uint64* pintr0, uint64* pintr1
Martin v. Löwisf30d60e2004-06-08 08:17:44 +00004013#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004014 )
Jeremy Hyltone8c04322002-08-16 17:47:26 +00004015{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004016 int na = oparg & 0xff;
4017 int nk = (oparg>>8) & 0xff;
4018 int n = na + 2 * nk;
4019 PyObject **pfunc = (*pp_stack) - n - 1;
4020 PyObject *func = *pfunc;
4021 PyObject *x, *w;
Jeremy Hyltone8c04322002-08-16 17:47:26 +00004022
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004023 /* Always dispatch PyCFunction first, because these are
4024 presumed to be the most frequent callable object.
4025 */
4026 if (PyCFunction_Check(func) && nk == 0) {
4027 int flags = PyCFunction_GET_FLAGS(func);
4028 PyThreadState *tstate = PyThreadState_GET();
Raymond Hettingera7f56bc2004-06-26 04:34:33 +00004029
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004030 PCALL(PCALL_CFUNCTION);
4031 if (flags & (METH_NOARGS | METH_O)) {
4032 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
4033 PyObject *self = PyCFunction_GET_SELF(func);
4034 if (flags & METH_NOARGS && na == 0) {
4035 C_TRACE(x, (*meth)(self,NULL));
4036 }
4037 else if (flags & METH_O && na == 1) {
4038 PyObject *arg = EXT_POP(*pp_stack);
4039 C_TRACE(x, (*meth)(self,arg));
4040 Py_DECREF(arg);
4041 }
4042 else {
4043 err_args(func, flags, na);
4044 x = NULL;
4045 }
4046 }
4047 else {
4048 PyObject *callargs;
4049 callargs = load_args(pp_stack, na);
4050 READ_TIMESTAMP(*pintr0);
4051 C_TRACE(x, PyCFunction_Call(func,callargs,NULL));
4052 READ_TIMESTAMP(*pintr1);
4053 Py_XDECREF(callargs);
4054 }
4055 } else {
4056 if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) {
4057 /* optimize access to bound methods */
4058 PyObject *self = PyMethod_GET_SELF(func);
4059 PCALL(PCALL_METHOD);
4060 PCALL(PCALL_BOUND_METHOD);
4061 Py_INCREF(self);
4062 func = PyMethod_GET_FUNCTION(func);
4063 Py_INCREF(func);
4064 Py_DECREF(*pfunc);
4065 *pfunc = self;
4066 na++;
4067 n++;
4068 } else
4069 Py_INCREF(func);
4070 READ_TIMESTAMP(*pintr0);
4071 if (PyFunction_Check(func))
4072 x = fast_function(func, pp_stack, n, na, nk);
4073 else
4074 x = do_call(func, pp_stack, na, nk);
4075 READ_TIMESTAMP(*pintr1);
4076 Py_DECREF(func);
4077 }
Tim Peters8a5c3c72004-04-05 19:36:21 +00004078
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004079 /* Clear the stack of the function object. Also removes
4080 the arguments in case they weren't consumed already
4081 (fast_function() and err_args() leave them on the stack).
4082 */
4083 while ((*pp_stack) > pfunc) {
4084 w = EXT_POP(*pp_stack);
4085 Py_DECREF(w);
4086 PCALL(PCALL_POP);
4087 }
4088 return x;
Jeremy Hyltone8c04322002-08-16 17:47:26 +00004089}
4090
Jeremy Hylton192690e2002-08-16 18:36:11 +00004091/* The fast_function() function optimize calls for which no argument
Jeremy Hylton52820442001-01-03 23:52:36 +00004092 tuple is necessary; the objects are passed directly from the stack.
Jeremy Hylton985eba52003-02-05 23:13:00 +00004093 For the simplest case -- a function that takes only positional
4094 arguments and is called with only positional arguments -- it
4095 inlines the most primitive frame setup code from
4096 PyEval_EvalCodeEx(), which vastly reduces the checks that must be
4097 done before evaluating the frame.
Jeremy Hylton52820442001-01-03 23:52:36 +00004098*/
4099
4100static PyObject *
Guido van Rossumac7be682001-01-17 15:42:30 +00004101fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
Jeremy Hylton52820442001-01-03 23:52:36 +00004102{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004103 PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
4104 PyObject *globals = PyFunction_GET_GLOBALS(func);
4105 PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
4106 PyObject *kwdefs = PyFunction_GET_KW_DEFAULTS(func);
4107 PyObject **d = NULL;
4108 int nd = 0;
Jeremy Hylton52820442001-01-03 23:52:36 +00004109
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004110 PCALL(PCALL_FUNCTION);
4111 PCALL(PCALL_FAST_FUNCTION);
4112 if (argdefs == NULL && co->co_argcount == n &&
4113 co->co_kwonlyargcount == 0 && nk==0 &&
4114 co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
4115 PyFrameObject *f;
4116 PyObject *retval = NULL;
4117 PyThreadState *tstate = PyThreadState_GET();
4118 PyObject **fastlocals, **stack;
4119 int i;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004120
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004121 PCALL(PCALL_FASTER_FUNCTION);
4122 assert(globals != NULL);
4123 /* XXX Perhaps we should create a specialized
4124 PyFrame_New() that doesn't take locals, but does
4125 take builtins without sanity checking them.
4126 */
4127 assert(tstate != NULL);
4128 f = PyFrame_New(tstate, co, globals, NULL);
4129 if (f == NULL)
4130 return NULL;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004131
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004132 fastlocals = f->f_localsplus;
4133 stack = (*pp_stack) - n;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004135 for (i = 0; i < n; i++) {
4136 Py_INCREF(*stack);
4137 fastlocals[i] = *stack++;
4138 }
4139 retval = PyEval_EvalFrameEx(f,0);
4140 ++tstate->recursion_depth;
4141 Py_DECREF(f);
4142 --tstate->recursion_depth;
4143 return retval;
4144 }
4145 if (argdefs != NULL) {
4146 d = &PyTuple_GET_ITEM(argdefs, 0);
4147 nd = Py_SIZE(argdefs);
4148 }
Martin v. Löwis4d0d4712010-12-03 20:14:31 +00004149 return PyEval_EvalCodeEx((PyObject*)co, globals,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004150 (PyObject *)NULL, (*pp_stack)-n, na,
4151 (*pp_stack)-2*nk, nk, d, nd, kwdefs,
4152 PyFunction_GET_CLOSURE(func));
Jeremy Hylton52820442001-01-03 23:52:36 +00004153}
4154
4155static PyObject *
Ka-Ping Yee20579702001-01-15 22:14:16 +00004156update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack,
4157 PyObject *func)
Jeremy Hylton52820442001-01-03 23:52:36 +00004158{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004159 PyObject *kwdict = NULL;
4160 if (orig_kwdict == NULL)
4161 kwdict = PyDict_New();
4162 else {
4163 kwdict = PyDict_Copy(orig_kwdict);
4164 Py_DECREF(orig_kwdict);
4165 }
4166 if (kwdict == NULL)
4167 return NULL;
4168 while (--nk >= 0) {
4169 int err;
4170 PyObject *value = EXT_POP(*pp_stack);
4171 PyObject *key = EXT_POP(*pp_stack);
4172 if (PyDict_GetItem(kwdict, key) != NULL) {
4173 PyErr_Format(PyExc_TypeError,
4174 "%.200s%s got multiple values "
4175 "for keyword argument '%U'",
4176 PyEval_GetFuncName(func),
4177 PyEval_GetFuncDesc(func),
4178 key);
4179 Py_DECREF(key);
4180 Py_DECREF(value);
4181 Py_DECREF(kwdict);
4182 return NULL;
4183 }
4184 err = PyDict_SetItem(kwdict, key, value);
4185 Py_DECREF(key);
4186 Py_DECREF(value);
4187 if (err) {
4188 Py_DECREF(kwdict);
4189 return NULL;
4190 }
4191 }
4192 return kwdict;
Jeremy Hylton52820442001-01-03 23:52:36 +00004193}
4194
4195static PyObject *
4196update_star_args(int nstack, int nstar, PyObject *stararg,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004197 PyObject ***pp_stack)
Jeremy Hylton52820442001-01-03 23:52:36 +00004198{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004199 PyObject *callargs, *w;
Jeremy Hylton52820442001-01-03 23:52:36 +00004200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004201 callargs = PyTuple_New(nstack + nstar);
4202 if (callargs == NULL) {
4203 return NULL;
4204 }
4205 if (nstar) {
4206 int i;
4207 for (i = 0; i < nstar; i++) {
4208 PyObject *a = PyTuple_GET_ITEM(stararg, i);
4209 Py_INCREF(a);
4210 PyTuple_SET_ITEM(callargs, nstack + i, a);
4211 }
4212 }
4213 while (--nstack >= 0) {
4214 w = EXT_POP(*pp_stack);
4215 PyTuple_SET_ITEM(callargs, nstack, w);
4216 }
4217 return callargs;
Jeremy Hylton52820442001-01-03 23:52:36 +00004218}
4219
4220static PyObject *
4221load_args(PyObject ***pp_stack, int na)
4222{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004223 PyObject *args = PyTuple_New(na);
4224 PyObject *w;
Jeremy Hylton52820442001-01-03 23:52:36 +00004225
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004226 if (args == NULL)
4227 return NULL;
4228 while (--na >= 0) {
4229 w = EXT_POP(*pp_stack);
4230 PyTuple_SET_ITEM(args, na, w);
4231 }
4232 return args;
Jeremy Hylton52820442001-01-03 23:52:36 +00004233}
4234
4235static PyObject *
4236do_call(PyObject *func, PyObject ***pp_stack, int na, int nk)
4237{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004238 PyObject *callargs = NULL;
4239 PyObject *kwdict = NULL;
4240 PyObject *result = NULL;
Jeremy Hylton52820442001-01-03 23:52:36 +00004241
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004242 if (nk > 0) {
4243 kwdict = update_keyword_args(NULL, nk, pp_stack, func);
4244 if (kwdict == NULL)
4245 goto call_fail;
4246 }
4247 callargs = load_args(pp_stack, na);
4248 if (callargs == NULL)
4249 goto call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004250#ifdef CALL_PROFILE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004251 /* At this point, we have to look at the type of func to
4252 update the call stats properly. Do it here so as to avoid
4253 exposing the call stats machinery outside ceval.c
4254 */
4255 if (PyFunction_Check(func))
4256 PCALL(PCALL_FUNCTION);
4257 else if (PyMethod_Check(func))
4258 PCALL(PCALL_METHOD);
4259 else if (PyType_Check(func))
4260 PCALL(PCALL_TYPE);
4261 else if (PyCFunction_Check(func))
4262 PCALL(PCALL_CFUNCTION);
4263 else
4264 PCALL(PCALL_OTHER);
Jeremy Hylton985eba52003-02-05 23:13:00 +00004265#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004266 if (PyCFunction_Check(func)) {
4267 PyThreadState *tstate = PyThreadState_GET();
4268 C_TRACE(result, PyCFunction_Call(func, callargs, kwdict));
4269 }
4270 else
4271 result = PyObject_Call(func, callargs, kwdict);
Thomas Wouters7ce29ca2007-09-19 21:56:32 +00004272call_fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004273 Py_XDECREF(callargs);
4274 Py_XDECREF(kwdict);
4275 return result;
Jeremy Hylton52820442001-01-03 23:52:36 +00004276}
4277
4278static PyObject *
4279ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
4280{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004281 int nstar = 0;
4282 PyObject *callargs = NULL;
4283 PyObject *stararg = NULL;
4284 PyObject *kwdict = NULL;
4285 PyObject *result = NULL;
Jeremy Hylton52820442001-01-03 23:52:36 +00004286
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004287 if (flags & CALL_FLAG_KW) {
4288 kwdict = EXT_POP(*pp_stack);
4289 if (!PyDict_Check(kwdict)) {
4290 PyObject *d;
4291 d = PyDict_New();
4292 if (d == NULL)
4293 goto ext_call_fail;
4294 if (PyDict_Update(d, kwdict) != 0) {
4295 Py_DECREF(d);
4296 /* PyDict_Update raises attribute
4297 * error (percolated from an attempt
4298 * to get 'keys' attribute) instead of
4299 * a type error if its second argument
4300 * is not a mapping.
4301 */
4302 if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
4303 PyErr_Format(PyExc_TypeError,
4304 "%.200s%.200s argument after ** "
4305 "must be a mapping, not %.200s",
4306 PyEval_GetFuncName(func),
4307 PyEval_GetFuncDesc(func),
4308 kwdict->ob_type->tp_name);
4309 }
4310 goto ext_call_fail;
4311 }
4312 Py_DECREF(kwdict);
4313 kwdict = d;
4314 }
4315 }
4316 if (flags & CALL_FLAG_VAR) {
4317 stararg = EXT_POP(*pp_stack);
4318 if (!PyTuple_Check(stararg)) {
4319 PyObject *t = NULL;
4320 t = PySequence_Tuple(stararg);
4321 if (t == NULL) {
4322 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
4323 PyErr_Format(PyExc_TypeError,
4324 "%.200s%.200s argument after * "
Victor Stinner0a5f65a2011-03-22 01:09:21 +01004325 "must be a sequence, not %.200s",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004326 PyEval_GetFuncName(func),
4327 PyEval_GetFuncDesc(func),
4328 stararg->ob_type->tp_name);
4329 }
4330 goto ext_call_fail;
4331 }
4332 Py_DECREF(stararg);
4333 stararg = t;
4334 }
4335 nstar = PyTuple_GET_SIZE(stararg);
4336 }
4337 if (nk > 0) {
4338 kwdict = update_keyword_args(kwdict, nk, pp_stack, func);
4339 if (kwdict == NULL)
4340 goto ext_call_fail;
4341 }
4342 callargs = update_star_args(na, nstar, stararg, pp_stack);
4343 if (callargs == NULL)
4344 goto ext_call_fail;
Jeremy Hylton985eba52003-02-05 23:13:00 +00004345#ifdef CALL_PROFILE
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004346 /* At this point, we have to look at the type of func to
4347 update the call stats properly. Do it here so as to avoid
4348 exposing the call stats machinery outside ceval.c
4349 */
4350 if (PyFunction_Check(func))
4351 PCALL(PCALL_FUNCTION);
4352 else if (PyMethod_Check(func))
4353 PCALL(PCALL_METHOD);
4354 else if (PyType_Check(func))
4355 PCALL(PCALL_TYPE);
4356 else if (PyCFunction_Check(func))
4357 PCALL(PCALL_CFUNCTION);
4358 else
4359 PCALL(PCALL_OTHER);
Jeremy Hylton985eba52003-02-05 23:13:00 +00004360#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004361 if (PyCFunction_Check(func)) {
4362 PyThreadState *tstate = PyThreadState_GET();
4363 C_TRACE(result, PyCFunction_Call(func, callargs, kwdict));
4364 }
4365 else
4366 result = PyObject_Call(func, callargs, kwdict);
Thomas Woutersce272b62007-09-19 21:19:28 +00004367ext_call_fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004368 Py_XDECREF(callargs);
4369 Py_XDECREF(kwdict);
4370 Py_XDECREF(stararg);
4371 return result;
Jeremy Hylton52820442001-01-03 23:52:36 +00004372}
4373
Guido van Rossum38fff8c2006-03-07 18:50:55 +00004374/* Extract a slice index from a PyInt or PyLong or an object with the
4375 nb_index slot defined, and store in *pi.
4376 Silently reduce values larger than PY_SSIZE_T_MAX to PY_SSIZE_T_MAX,
4377 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 +00004378 Return 0 on error, 1 on success.
Tim Peterscb479e72001-12-16 19:11:44 +00004379*/
Tim Petersb5196382001-12-16 19:44:20 +00004380/* Note: If v is NULL, return success without storing into *pi. This
4381 is because_PyEval_SliceIndex() is called by apply_slice(), which can be
4382 called by the SLICE opcode with v and/or w equal to NULL.
Tim Peterscb479e72001-12-16 19:11:44 +00004383*/
Guido van Rossum20c6add2000-05-08 14:06:50 +00004384int
Martin v. Löwis18e16552006-02-15 17:27:45 +00004385_PyEval_SliceIndex(PyObject *v, Py_ssize_t *pi)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004386{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004387 if (v != NULL) {
4388 Py_ssize_t x;
4389 if (PyIndex_Check(v)) {
4390 x = PyNumber_AsSsize_t(v, NULL);
4391 if (x == -1 && PyErr_Occurred())
4392 return 0;
4393 }
4394 else {
4395 PyErr_SetString(PyExc_TypeError,
4396 "slice indices must be integers or "
4397 "None or have an __index__ method");
4398 return 0;
4399 }
4400 *pi = x;
4401 }
4402 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004403}
4404
Guido van Rossum486364b2007-06-30 05:01:58 +00004405#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004406 "BaseException is not allowed"
Brett Cannonf74225d2007-02-26 21:10:16 +00004407
Guido van Rossumb209a111997-04-29 18:18:01 +00004408static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004409cmp_outcome(int op, register PyObject *v, register PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004410{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004411 int res = 0;
4412 switch (op) {
4413 case PyCmp_IS:
4414 res = (v == w);
4415 break;
4416 case PyCmp_IS_NOT:
4417 res = (v != w);
4418 break;
4419 case PyCmp_IN:
4420 res = PySequence_Contains(w, v);
4421 if (res < 0)
4422 return NULL;
4423 break;
4424 case PyCmp_NOT_IN:
4425 res = PySequence_Contains(w, v);
4426 if (res < 0)
4427 return NULL;
4428 res = !res;
4429 break;
4430 case PyCmp_EXC_MATCH:
4431 if (PyTuple_Check(w)) {
4432 Py_ssize_t i, length;
4433 length = PyTuple_Size(w);
4434 for (i = 0; i < length; i += 1) {
4435 PyObject *exc = PyTuple_GET_ITEM(w, i);
4436 if (!PyExceptionClass_Check(exc)) {
4437 PyErr_SetString(PyExc_TypeError,
4438 CANNOT_CATCH_MSG);
4439 return NULL;
4440 }
4441 }
4442 }
4443 else {
4444 if (!PyExceptionClass_Check(w)) {
4445 PyErr_SetString(PyExc_TypeError,
4446 CANNOT_CATCH_MSG);
4447 return NULL;
4448 }
4449 }
4450 res = PyErr_GivenExceptionMatches(v, w);
4451 break;
4452 default:
4453 return PyObject_RichCompare(v, w, op);
4454 }
4455 v = res ? Py_True : Py_False;
4456 Py_INCREF(v);
4457 return v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00004458}
4459
Thomas Wouters52152252000-08-17 22:55:00 +00004460static PyObject *
4461import_from(PyObject *v, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00004462{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004463 PyObject *x;
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004464
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004465 x = PyObject_GetAttr(v, name);
4466 if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
4467 PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
4468 }
4469 return x;
Thomas Wouters52152252000-08-17 22:55:00 +00004470}
Guido van Rossumac7be682001-01-17 15:42:30 +00004471
Thomas Wouters52152252000-08-17 22:55:00 +00004472static int
4473import_all_from(PyObject *locals, PyObject *v)
4474{
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02004475 _Py_IDENTIFIER(__all__);
4476 _Py_IDENTIFIER(__dict__);
4477 PyObject *all = _PyObject_GetAttrId(v, &PyId___all__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004478 PyObject *dict, *name, *value;
4479 int skip_leading_underscores = 0;
4480 int pos, err;
Thomas Wouters52152252000-08-17 22:55:00 +00004481
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004482 if (all == NULL) {
4483 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
4484 return -1; /* Unexpected error */
4485 PyErr_Clear();
Martin v. Löwis1c67dd92011-10-14 15:16:45 +02004486 dict = _PyObject_GetAttrId(v, &PyId___dict__);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004487 if (dict == NULL) {
4488 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
4489 return -1;
4490 PyErr_SetString(PyExc_ImportError,
4491 "from-import-* object has no __dict__ and no __all__");
4492 return -1;
4493 }
4494 all = PyMapping_Keys(dict);
4495 Py_DECREF(dict);
4496 if (all == NULL)
4497 return -1;
4498 skip_leading_underscores = 1;
4499 }
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00004500
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004501 for (pos = 0, err = 0; ; pos++) {
4502 name = PySequence_GetItem(all, pos);
4503 if (name == NULL) {
4504 if (!PyErr_ExceptionMatches(PyExc_IndexError))
4505 err = -1;
4506 else
4507 PyErr_Clear();
4508 break;
4509 }
4510 if (skip_leading_underscores &&
4511 PyUnicode_Check(name) &&
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004512 PyUnicode_READY(name) != -1 &&
4513 PyUnicode_READ_CHAR(name, 0) == '_')
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004514 {
4515 Py_DECREF(name);
4516 continue;
4517 }
4518 value = PyObject_GetAttr(v, name);
4519 if (value == NULL)
4520 err = -1;
4521 else if (PyDict_CheckExact(locals))
4522 err = PyDict_SetItem(locals, name, value);
4523 else
4524 err = PyObject_SetItem(locals, name, value);
4525 Py_DECREF(name);
4526 Py_XDECREF(value);
4527 if (err != 0)
4528 break;
4529 }
4530 Py_DECREF(all);
4531 return err;
Guido van Rossume9736fc1990-11-18 17:33:06 +00004532}
4533
Guido van Rossumac7be682001-01-17 15:42:30 +00004534static void
Neal Norwitzda059e32007-08-26 05:33:45 +00004535format_exc_check_arg(PyObject *exc, const char *format_str, PyObject *obj)
Paul Prescode68140d2000-08-30 20:25:01 +00004536{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004537 const char *obj_str;
Paul Prescode68140d2000-08-30 20:25:01 +00004538
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004539 if (!obj)
4540 return;
Paul Prescode68140d2000-08-30 20:25:01 +00004541
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004542 obj_str = _PyUnicode_AsString(obj);
4543 if (!obj_str)
4544 return;
Paul Prescode68140d2000-08-30 20:25:01 +00004545
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004546 PyErr_Format(exc, format_str, obj_str);
Paul Prescode68140d2000-08-30 20:25:01 +00004547}
Guido van Rossum950361c1997-01-24 13:49:28 +00004548
Amaury Forgeot d'Arcba117ef2010-09-10 21:39:53 +00004549static void
4550format_exc_unbound(PyCodeObject *co, int oparg)
4551{
4552 PyObject *name;
4553 /* Don't stomp existing exception */
4554 if (PyErr_Occurred())
4555 return;
4556 if (oparg < PyTuple_GET_SIZE(co->co_cellvars)) {
4557 name = PyTuple_GET_ITEM(co->co_cellvars,
4558 oparg);
4559 format_exc_check_arg(
4560 PyExc_UnboundLocalError,
4561 UNBOUNDLOCAL_ERROR_MSG,
4562 name);
4563 } else {
4564 name = PyTuple_GET_ITEM(co->co_freevars, oparg -
4565 PyTuple_GET_SIZE(co->co_cellvars));
4566 format_exc_check_arg(PyExc_NameError,
4567 UNBOUNDFREE_ERROR_MSG, name);
4568 }
4569}
4570
Victor Stinnerd2a915d2011-10-02 20:34:20 +02004571static PyObject *
4572unicode_concatenate(PyObject *v, PyObject *w,
4573 PyFrameObject *f, unsigned char *next_instr)
4574{
4575 PyObject *res;
4576 if (Py_REFCNT(v) == 2) {
4577 /* In the common case, there are 2 references to the value
4578 * stored in 'variable' when the += is performed: one on the
4579 * value stack (in 'v') and one still stored in the
4580 * 'variable'. We try to delete the variable now to reduce
4581 * the refcnt to 1.
4582 */
4583 switch (*next_instr) {
4584 case STORE_FAST:
4585 {
4586 int oparg = PEEKARG();
4587 PyObject **fastlocals = f->f_localsplus;
4588 if (GETLOCAL(oparg) == v)
4589 SETLOCAL(oparg, NULL);
4590 break;
4591 }
4592 case STORE_DEREF:
4593 {
4594 PyObject **freevars = (f->f_localsplus +
4595 f->f_code->co_nlocals);
4596 PyObject *c = freevars[PEEKARG()];
4597 if (PyCell_GET(c) == v)
4598 PyCell_Set(c, NULL);
4599 break;
4600 }
4601 case STORE_NAME:
4602 {
4603 PyObject *names = f->f_code->co_names;
4604 PyObject *name = GETITEM(names, PEEKARG());
4605 PyObject *locals = f->f_locals;
4606 if (PyDict_CheckExact(locals) &&
4607 PyDict_GetItem(locals, name) == v) {
4608 if (PyDict_DelItem(locals, name) != 0) {
4609 PyErr_Clear();
4610 }
4611 }
4612 break;
4613 }
4614 }
4615 }
4616 res = v;
4617 PyUnicode_Append(&res, w);
4618 return res;
4619}
4620
Guido van Rossum950361c1997-01-24 13:49:28 +00004621#ifdef DYNAMIC_EXECUTION_PROFILE
4622
Skip Montanarof118cb12001-10-15 20:51:38 +00004623static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004624getarray(long a[256])
Guido van Rossum950361c1997-01-24 13:49:28 +00004625{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004626 int i;
4627 PyObject *l = PyList_New(256);
4628 if (l == NULL) return NULL;
4629 for (i = 0; i < 256; i++) {
4630 PyObject *x = PyLong_FromLong(a[i]);
4631 if (x == NULL) {
4632 Py_DECREF(l);
4633 return NULL;
4634 }
4635 PyList_SetItem(l, i, x);
4636 }
4637 for (i = 0; i < 256; i++)
4638 a[i] = 0;
4639 return l;
Guido van Rossum950361c1997-01-24 13:49:28 +00004640}
4641
4642PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00004643_Py_GetDXProfile(PyObject *self, PyObject *args)
Guido van Rossum950361c1997-01-24 13:49:28 +00004644{
4645#ifndef DXPAIRS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004646 return getarray(dxp);
Guido van Rossum950361c1997-01-24 13:49:28 +00004647#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004648 int i;
4649 PyObject *l = PyList_New(257);
4650 if (l == NULL) return NULL;
4651 for (i = 0; i < 257; i++) {
4652 PyObject *x = getarray(dxpairs[i]);
4653 if (x == NULL) {
4654 Py_DECREF(l);
4655 return NULL;
4656 }
4657 PyList_SetItem(l, i, x);
4658 }
4659 return l;
Guido van Rossum950361c1997-01-24 13:49:28 +00004660#endif
4661}
4662
4663#endif