blob: 36f0017c3a13a93a8baaed2da6429ac80c725ecf [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:
5 XXX how to pass arguments to call_trace?
Guido van Rossum681d79a1995-07-18 14:51:37 +00006 XXX speed up searching for keywords by using a dictionary
Guido van Rossum681d79a1995-07-18 14:51:37 +00007 XXX document it!
8 */
9
Guido van Rossumb209a111997-04-29 18:18:01 +000010#include "Python.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000011
Guido van Rossum10dc2e81990-11-18 17:27:39 +000012#include "compile.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000013#include "frameobject.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000014#include "eval.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000015#include "opcode.h"
16
Jack Jansencbf630f2000-07-11 21:59:16 +000017#ifdef macintosh
18#include "macglue.h"
19#endif
20
Guido van Rossumc6004111993-11-05 10:22:19 +000021#include <ctype.h>
22
Guido van Rossum04691fc1992-08-12 15:35:34 +000023/* Turn this on if your compiler chokes on the big switch: */
Guido van Rossum1ae940a1995-01-02 19:04:15 +000024/* #define CASE_TOO_BIG 1 */
Guido van Rossum04691fc1992-08-12 15:35:34 +000025
Guido van Rossum408027e1996-12-30 16:17:54 +000026#ifdef Py_DEBUG
Guido van Rossum96a42c81992-01-12 02:29:51 +000027/* For debugging the interpreter: */
28#define LLTRACE 1 /* Low-level trace feature */
29#define CHECKEXC 1 /* Double-check exception checking */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000030#endif
31
Jeremy Hylton52820442001-01-03 23:52:36 +000032typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
Guido van Rossum5b722181993-03-30 17:46:03 +000033
Guido van Rossum374a9221991-04-04 10:40:29 +000034/* Forward declarations */
Guido van Rossum374a9221991-04-04 10:40:29 +000035
Tim Petersdbd9ba62000-07-09 03:09:57 +000036static PyObject *eval_code2(PyCodeObject *,
37 PyObject *, PyObject *,
38 PyObject **, int,
39 PyObject **, int,
Jeremy Hylton52820442001-01-03 23:52:36 +000040 PyObject **, int);
41
42static PyObject *call_object(PyObject *, PyObject *, PyObject *);
43static PyObject *call_cfunction(PyObject *, PyObject *, PyObject *);
44static PyObject *call_instance(PyObject *, PyObject *, PyObject *);
45static PyObject *call_method(PyObject *, PyObject *, PyObject *);
46static PyObject *call_eval_code2(PyObject *, PyObject *, PyObject *);
47static PyObject *fast_function(PyObject *, PyObject ***, int, int, int);
48static PyObject *fast_cfunction(PyObject *, PyObject ***, int);
49static PyObject *do_call(PyObject *, PyObject ***, int, int);
50static PyObject *ext_do_call(PyObject *, PyObject ***, int, int, int);
Ka-Ping Yee20579702001-01-15 22:14:16 +000051static PyObject *update_keyword_args(PyObject *, int, PyObject ***, PyObject *);
52static PyObject *update_star_args(int, int, PyObject *, PyObject ***);
Jeremy Hylton52820442001-01-03 23:52:36 +000053static PyObject *load_args(PyObject ***, int);
54#define CALL_FLAG_VAR 1
55#define CALL_FLAG_KW 2
56
Guido van Rossum0a066c01992-03-27 17:29:15 +000057#ifdef LLTRACE
Tim Petersdbd9ba62000-07-09 03:09:57 +000058static int prtrace(PyObject *, char *);
Guido van Rossum0a066c01992-03-27 17:29:15 +000059#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000060static void call_exc_trace(PyObject **, PyObject**, PyFrameObject *);
61static int call_trace(PyObject **, PyObject **,
62 PyFrameObject *, char *, PyObject *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000063static PyObject *loop_subscript(PyObject *, PyObject *);
64static PyObject *apply_slice(PyObject *, PyObject *, PyObject *);
65static int assign_slice(PyObject *, PyObject *,
66 PyObject *, PyObject *);
67static PyObject *cmp_outcome(int, PyObject *, PyObject *);
Thomas Wouters52152252000-08-17 22:55:00 +000068static PyObject *import_from(PyObject *, PyObject *);
69static int import_all_from(PyObject *, PyObject *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000070static PyObject *build_class(PyObject *, PyObject *, PyObject *);
71static int exec_statement(PyFrameObject *,
72 PyObject *, PyObject *, PyObject *);
Tim Petersdbd9ba62000-07-09 03:09:57 +000073static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *);
74static void reset_exc_info(PyThreadState *);
Paul Prescode68140d2000-08-30 20:25:01 +000075static void format_exc_check_arg(PyObject *, char *, PyObject *);
Guido van Rossum374a9221991-04-04 10:40:29 +000076
Paul Prescode68140d2000-08-30 20:25:01 +000077#define NAME_ERROR_MSG \
Fred Drake661ea262000-10-24 19:57:45 +000078 "name '%.200s' is not defined"
Paul Prescode68140d2000-08-30 20:25:01 +000079#define UNBOUNDLOCAL_ERROR_MSG \
Fred Drake661ea262000-10-24 19:57:45 +000080 "local variable '%.200s' referenced before assignment"
Guido van Rossum374a9221991-04-04 10:40:29 +000081
Guido van Rossum950361c1997-01-24 13:49:28 +000082/* Dynamic execution profile */
83#ifdef DYNAMIC_EXECUTION_PROFILE
84#ifdef DXPAIRS
85static long dxpairs[257][256];
86#define dxp dxpairs[256]
87#else
88static long dxp[256];
89#endif
90#endif
91
Guido van Rossume59214e1994-08-30 08:01:59 +000092#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +000093
Guido van Rossum2571cc81999-04-07 16:07:23 +000094#ifndef DONT_HAVE_ERRNO_H
Guido van Rossum1984f1e1992-08-04 12:41:02 +000095#include <errno.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000096#endif
Guido van Rossum49b56061998-10-01 20:42:43 +000097#include "pythread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000098
Guido van Rossuma027efa1997-05-05 20:56:21 +000099extern int _PyThread_Started; /* Flag for Py_Exit */
100
Guido van Rossum65d5b571998-12-21 19:32:43 +0000101static PyThread_type_lock interpreter_lock = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000102static long main_thread = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000103
104void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000105PyEval_InitThreads(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000106{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000107 if (interpreter_lock)
Sjoerd Mullendered59d201993-01-06 13:36:38 +0000108 return;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000109 _PyThread_Started = 1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000110 interpreter_lock = PyThread_allocate_lock();
111 PyThread_acquire_lock(interpreter_lock, 1);
112 main_thread = PyThread_get_thread_ident();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000113}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000114
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000115void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000116PyEval_AcquireLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000117{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000118 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000119}
120
121void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000122PyEval_ReleaseLock(void)
Guido van Rossum25ce5661997-08-02 03:10:38 +0000123{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000124 PyThread_release_lock(interpreter_lock);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000125}
126
127void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000128PyEval_AcquireThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000129{
130 if (tstate == NULL)
131 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000132 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000133 if (PyThreadState_Swap(tstate) != NULL)
134 Py_FatalError(
135 "PyEval_AcquireThread: non-NULL old thread state");
136}
137
138void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000139PyEval_ReleaseThread(PyThreadState *tstate)
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000140{
141 if (tstate == NULL)
142 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
143 if (PyThreadState_Swap(NULL) != tstate)
144 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000145 PyThread_release_lock(interpreter_lock);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000146}
Guido van Rossumfee3a2d2000-08-27 17:34:07 +0000147
148/* This function is called from PyOS_AfterFork to ensure that newly
149 created child processes don't hold locks referring to threads which
150 are not running in the child process. (This could also be done using
151 pthread_atfork mechanism, at least for the pthreads implementation.) */
152
153void
154PyEval_ReInitThreads(void)
155{
156 if (!interpreter_lock)
157 return;
158 /*XXX Can't use PyThread_free_lock here because it does too
159 much error-checking. Doing this cleanly would require
160 adding a new function to each thread_*.h. Instead, just
161 create a new lock and waste a little bit of memory */
162 interpreter_lock = PyThread_allocate_lock();
163 PyThread_acquire_lock(interpreter_lock, 1);
164 main_thread = PyThread_get_thread_ident();
165}
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000166#endif
167
Guido van Rossumff4949e1992-08-05 19:58:53 +0000168/* Functions save_thread and restore_thread are always defined so
169 dynamically loaded modules needn't be compiled separately for use
170 with and without threads: */
171
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000172PyThreadState *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000173PyEval_SaveThread(void)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000174{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000175 PyThreadState *tstate = PyThreadState_Swap(NULL);
176 if (tstate == NULL)
177 Py_FatalError("PyEval_SaveThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000178#ifdef WITH_THREAD
Guido van Rossumb74eca91997-09-30 22:03:16 +0000179 if (interpreter_lock)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000180 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000181#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000182 return tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000183}
184
185void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000186PyEval_RestoreThread(PyThreadState *tstate)
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000187{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000188 if (tstate == NULL)
189 Py_FatalError("PyEval_RestoreThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000190#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000191 if (interpreter_lock) {
Guido van Rossumb74eca91997-09-30 22:03:16 +0000192 int err = errno;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000193 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000194 errno = err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000195 }
196#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000197 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000198}
199
200
Guido van Rossuma9672091994-09-14 13:31:22 +0000201/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
202 signal handlers or Mac I/O completion routines) can schedule calls
203 to a function to be called synchronously.
204 The synchronous function is called with one void* argument.
205 It should return 0 for success or -1 for failure -- failure should
206 be accompanied by an exception.
207
208 If registry succeeds, the registry function returns 0; if it fails
209 (e.g. due to too many pending calls) it returns -1 (without setting
210 an exception condition).
211
212 Note that because registry may occur from within signal handlers,
213 or other asynchronous events, calling malloc() is unsafe!
214
215#ifdef WITH_THREAD
216 Any thread can schedule pending calls, but only the main thread
217 will execute them.
218#endif
219
220 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
221 There are two possible race conditions:
222 (1) nested asynchronous registry calls;
223 (2) registry calls made while pending calls are being processed.
224 While (1) is very unlikely, (2) is a real possibility.
225 The current code is safe against (2), but not against (1).
226 The safety against (2) is derived from the fact that only one
227 thread (the main thread) ever takes things out of the queue.
Guido van Rossuma9672091994-09-14 13:31:22 +0000228
Guido van Rossuma027efa1997-05-05 20:56:21 +0000229 XXX Darn! With the advent of thread state, we should have an array
230 of pending calls per thread in the thread state! Later...
231*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000232
Guido van Rossuma9672091994-09-14 13:31:22 +0000233#define NPENDINGCALLS 32
234static struct {
Thomas Wouters334fb892000-07-25 12:56:38 +0000235 int (*func)(void *);
236 void *arg;
Guido van Rossuma9672091994-09-14 13:31:22 +0000237} pendingcalls[NPENDINGCALLS];
238static volatile int pendingfirst = 0;
239static volatile int pendinglast = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000240static volatile int things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000241
242int
Thomas Wouters334fb892000-07-25 12:56:38 +0000243Py_AddPendingCall(int (*func)(void *), void *arg)
Guido van Rossuma9672091994-09-14 13:31:22 +0000244{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000245 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000246 int i, j;
247 /* XXX Begin critical section */
248 /* XXX If you want this to be safe against nested
249 XXX asynchronous calls, you'll have to work harder! */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000250 if (busy)
251 return -1;
252 busy = 1;
Guido van Rossuma9672091994-09-14 13:31:22 +0000253 i = pendinglast;
254 j = (i + 1) % NPENDINGCALLS;
255 if (j == pendingfirst)
256 return -1; /* Queue full */
257 pendingcalls[i].func = func;
258 pendingcalls[i].arg = arg;
259 pendinglast = j;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000260 things_to_do = 1; /* Signal main loop */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000261 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000262 /* XXX End critical section */
263 return 0;
264}
265
Guido van Rossum180d7b41994-09-29 09:45:57 +0000266int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000267Py_MakePendingCalls(void)
Guido van Rossuma9672091994-09-14 13:31:22 +0000268{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000269 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000270#ifdef WITH_THREAD
Guido van Rossum65d5b571998-12-21 19:32:43 +0000271 if (main_thread && PyThread_get_thread_ident() != main_thread)
Guido van Rossuma9672091994-09-14 13:31:22 +0000272 return 0;
273#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000274 if (busy)
Guido van Rossum180d7b41994-09-29 09:45:57 +0000275 return 0;
276 busy = 1;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000277 things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000278 for (;;) {
279 int i;
Thomas Wouters334fb892000-07-25 12:56:38 +0000280 int (*func)(void *);
281 void *arg;
Guido van Rossuma9672091994-09-14 13:31:22 +0000282 i = pendingfirst;
283 if (i == pendinglast)
284 break; /* Queue empty */
285 func = pendingcalls[i].func;
286 arg = pendingcalls[i].arg;
287 pendingfirst = (i + 1) % NPENDINGCALLS;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000288 if (func(arg) < 0) {
289 busy = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000290 things_to_do = 1; /* We're not done yet */
Guido van Rossuma9672091994-09-14 13:31:22 +0000291 return -1;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000292 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000293 }
Guido van Rossum180d7b41994-09-29 09:45:57 +0000294 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000295 return 0;
296}
297
298
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000299/* The interpreter's recursion limit */
300
Guido van Rossum349ff6f2000-09-01 01:52:08 +0000301static int recursion_limit = 1000;
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000302
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000303int
304Py_GetRecursionLimit(void)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000305{
306 return recursion_limit;
307}
308
Vladimir Marangozov7bd25be2000-09-01 11:07:19 +0000309void
310Py_SetRecursionLimit(int new_limit)
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000311{
312 recursion_limit = new_limit;
313}
314
Guido van Rossum374a9221991-04-04 10:40:29 +0000315/* Status code for main loop (reason for stack unwind) */
316
317enum why_code {
318 WHY_NOT, /* No error */
319 WHY_EXCEPTION, /* Exception occurred */
320 WHY_RERAISE, /* Exception re-raised by 'finally' */
321 WHY_RETURN, /* 'return' statement */
322 WHY_BREAK /* 'break' statement */
323};
324
Tim Petersdbd9ba62000-07-09 03:09:57 +0000325static enum why_code do_raise(PyObject *, PyObject *, PyObject *);
326static int unpack_sequence(PyObject *, int, PyObject **);
Guido van Rossum1aa14831997-01-21 05:34:20 +0000327
Guido van Rossum374a9221991-04-04 10:40:29 +0000328
Guido van Rossumb209a111997-04-29 18:18:01 +0000329PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000330PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000331{
332 return eval_code2(co,
333 globals, locals,
Guido van Rossumb209a111997-04-29 18:18:01 +0000334 (PyObject **)NULL, 0,
335 (PyObject **)NULL, 0,
Jeremy Hylton52820442001-01-03 23:52:36 +0000336 (PyObject **)NULL, 0);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000337}
338
339
340/* Interpreter main loop */
341
Guido van Rossumb209a111997-04-29 18:18:01 +0000342static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +0000343eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
344 PyObject **args, int argcount, PyObject **kws, int kwcount,
Jeremy Hylton52820442001-01-03 23:52:36 +0000345 PyObject **defs, int defcount)
Guido van Rossum374a9221991-04-04 10:40:29 +0000346{
Guido van Rossum950361c1997-01-24 13:49:28 +0000347#ifdef DXPAIRS
348 int lastopcode = 0;
349#endif
Jeremy Hylton52820442001-01-03 23:52:36 +0000350 PyObject **stack_pointer;
Guido van Rossum374a9221991-04-04 10:40:29 +0000351 register unsigned char *next_instr;
Moshe Zadkaaa39a7e2000-08-07 06:34:45 +0000352 register int opcode=0; /* Current opcode */
353 register int oparg=0; /* Current opcode argument, if any */
Guido van Rossum374a9221991-04-04 10:40:29 +0000354 register enum why_code why; /* Reason for block stack unwind */
355 register int err; /* Error status -- nonzero if error */
Guido van Rossumb209a111997-04-29 18:18:01 +0000356 register PyObject *x; /* Result object -- NULL if error */
357 register PyObject *v; /* Temporary objects popped off stack */
358 register PyObject *w;
359 register PyObject *u;
360 register PyObject *t;
Barry Warsaw23c9ec82000-08-21 15:44:01 +0000361 register PyObject *stream = NULL; /* for PRINT opcodes */
Guido van Rossumb209a111997-04-29 18:18:01 +0000362 register PyFrameObject *f; /* Current frame */
Guido van Rossum50cd3481998-11-17 17:02:51 +0000363 register PyObject **fastlocals;
Guido van Rossum014518f1998-11-23 21:09:51 +0000364 PyObject *retval = NULL; /* Return value */
Guido van Rossum885553e1998-12-21 18:33:30 +0000365 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossumd076c731998-10-07 19:42:25 +0000366 unsigned char *first_instr;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000367#ifdef LLTRACE
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000368 int lltrace;
Guido van Rossum374a9221991-04-04 10:40:29 +0000369#endif
Guido van Rossum408027e1996-12-30 16:17:54 +0000370#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000371 /* Make it easier to find out where we are with a debugger */
Guido van Rossumb209a111997-04-29 18:18:01 +0000372 char *filename = PyString_AsString(co->co_filename);
Guido van Rossum99bec951992-09-03 20:29:45 +0000373#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000374
375/* Code access macros */
376
377#define GETCONST(i) Getconst(f, i)
378#define GETNAME(i) Getname(f, i)
379#define GETNAMEV(i) Getnamev(f, i)
Guido van Rossumd076c731998-10-07 19:42:25 +0000380#define INSTR_OFFSET() (next_instr - first_instr)
Guido van Rossum374a9221991-04-04 10:40:29 +0000381#define NEXTOP() (*next_instr++)
382#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
Guido van Rossumd076c731998-10-07 19:42:25 +0000383#define JUMPTO(x) (next_instr = first_instr + (x))
Guido van Rossum374a9221991-04-04 10:40:29 +0000384#define JUMPBY(x) (next_instr += (x))
385
386/* Stack manipulation macros */
387
388#define STACK_LEVEL() (stack_pointer - f->f_valuestack)
389#define EMPTY() (STACK_LEVEL() == 0)
390#define TOP() (stack_pointer[-1])
391#define BASIC_PUSH(v) (*stack_pointer++ = (v))
392#define BASIC_POP() (*--stack_pointer)
393
Guido van Rossum96a42c81992-01-12 02:29:51 +0000394#ifdef LLTRACE
395#define PUSH(v) (BASIC_PUSH(v), lltrace && prtrace(TOP(), "push"))
396#define POP() (lltrace && prtrace(TOP(), "pop"), BASIC_POP())
Guido van Rossum374a9221991-04-04 10:40:29 +0000397#else
398#define PUSH(v) BASIC_PUSH(v)
399#define POP() BASIC_POP()
400#endif
401
Guido van Rossum681d79a1995-07-18 14:51:37 +0000402/* Local variable macros */
403
404#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumb209a111997-04-29 18:18:01 +0000405#define SETLOCAL(i, value) do { Py_XDECREF(GETLOCAL(i)); \
Guido van Rossum681d79a1995-07-18 14:51:37 +0000406 GETLOCAL(i) = value; } while (0)
407
Guido van Rossuma027efa1997-05-05 20:56:21 +0000408/* Start of code */
409
Guido van Rossum8861b741996-07-30 16:49:37 +0000410#ifdef USE_STACKCHECK
Guido van Rossuma027efa1997-05-05 20:56:21 +0000411 if (tstate->recursion_depth%10 == 0 && PyOS_CheckStack()) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000412 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
Guido van Rossum8861b741996-07-30 16:49:37 +0000413 return NULL;
414 }
415#endif
416
Guido van Rossum681d79a1995-07-18 14:51:37 +0000417 if (globals == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000418 PyErr_SetString(PyExc_SystemError, "eval_code2: NULL globals");
Guido van Rossum6135a871995-01-09 17:53:26 +0000419 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000420 }
421
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000422#ifdef LLTRACE
Guido van Rossumb209a111997-04-29 18:18:01 +0000423 lltrace = PyDict_GetItemString(globals, "__lltrace__") != NULL;
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000424#endif
425
Guido van Rossumb209a111997-04-29 18:18:01 +0000426 f = PyFrame_New(
Guido van Rossuma027efa1997-05-05 20:56:21 +0000427 tstate, /*back*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000428 co, /*code*/
429 globals, /*globals*/
Guido van Rossum76836021997-01-20 04:26:20 +0000430 locals); /*locals*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000431 if (f == NULL)
432 return NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000433
Guido van Rossuma027efa1997-05-05 20:56:21 +0000434 tstate->frame = f;
Guido van Rossumdeb0c5e1997-01-27 23:42:36 +0000435 fastlocals = f->f_localsplus;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000436
437 if (co->co_argcount > 0 ||
438 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
439 int i;
440 int n = argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000441 PyObject *kwdict = NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000442 if (co->co_flags & CO_VARKEYWORDS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000443 kwdict = PyDict_New();
Guido van Rossum681d79a1995-07-18 14:51:37 +0000444 if (kwdict == NULL)
445 goto fail;
Guido van Rossum8c5df061997-01-24 04:19:24 +0000446 i = co->co_argcount;
447 if (co->co_flags & CO_VARARGS)
448 i++;
449 SETLOCAL(i, kwdict);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000450 }
451 if (argcount > co->co_argcount) {
452 if (!(co->co_flags & CO_VARARGS)) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000453 PyErr_Format(PyExc_TypeError,
Ka-Ping Yee20579702001-01-15 22:14:16 +0000454 "%.200s() takes %s %d "
455 "%sargument%s (%d given)",
Fred Drake661ea262000-10-24 19:57:45 +0000456 PyString_AsString(co->co_name),
Ka-Ping Yee20579702001-01-15 22:14:16 +0000457 defcount ? "at most" : "exactly",
458 co->co_argcount,
459 kwcount ? "non-keyword " : "",
460 co->co_argcount == 1 ? "" : "s",
461 argcount);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000462 goto fail;
463 }
464 n = co->co_argcount;
465 }
466 for (i = 0; i < n; i++) {
467 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000468 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000469 SETLOCAL(i, x);
470 }
471 if (co->co_flags & CO_VARARGS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000472 u = PyTuple_New(argcount - n);
Guido van Rossum8c5df061997-01-24 04:19:24 +0000473 if (u == NULL)
474 goto fail;
475 SETLOCAL(co->co_argcount, u);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000476 for (i = n; i < argcount; i++) {
477 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000478 Py_INCREF(x);
479 PyTuple_SET_ITEM(u, i-n, x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000480 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000481 }
482 for (i = 0; i < kwcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000483 PyObject *keyword = kws[2*i];
484 PyObject *value = kws[2*i + 1];
Guido van Rossum681d79a1995-07-18 14:51:37 +0000485 int j;
Guido van Rossum25da5be1999-10-26 00:12:20 +0000486 if (keyword == NULL || !PyString_Check(keyword)) {
Ka-Ping Yee20579702001-01-15 22:14:16 +0000487 PyErr_Format(PyExc_TypeError,
488 "%.200s() keywords must be strings",
489 PyString_AsString(co->co_name));
Guido van Rossum25da5be1999-10-26 00:12:20 +0000490 goto fail;
491 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000492 /* XXX slow -- speed up using dictionary? */
493 for (j = 0; j < co->co_argcount; j++) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000494 PyObject *nm = PyTuple_GET_ITEM(
495 co->co_varnames, j);
Guido van Rossumb209a111997-04-29 18:18:01 +0000496 if (PyObject_Compare(keyword, nm) == 0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000497 break;
498 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000499 /* Check errors from Compare */
500 if (PyErr_Occurred())
501 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000502 if (j >= co->co_argcount) {
503 if (kwdict == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000504 PyErr_Format(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000505 "%.200s() got an unexpected "
506 "keyword argument '%.400s'",
507 PyString_AsString(co->co_name),
Jeremy Hylton76901512000-03-28 23:49:17 +0000508 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000509 goto fail;
510 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000511 PyDict_SetItem(kwdict, keyword, value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000512 }
513 else {
514 if (GETLOCAL(j) != NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +0000515 PyErr_Format(PyExc_TypeError,
Ka-Ping Yee20579702001-01-15 22:14:16 +0000516 "%.200s() got multiple "
517 "values for keyword "
518 "argument '%.400s'",
519 PyString_AsString(co->co_name),
520 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000521 goto fail;
522 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000523 Py_INCREF(value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000524 SETLOCAL(j, value);
525 }
526 }
527 if (argcount < co->co_argcount) {
528 int m = co->co_argcount - defcount;
529 for (i = argcount; i < m; i++) {
530 if (GETLOCAL(i) == NULL) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000531 PyErr_Format(PyExc_TypeError,
Ka-Ping Yee20579702001-01-15 22:14:16 +0000532 "%.200s() takes %s %d "
533 "%sargument%s (%d given)",
Fred Drake661ea262000-10-24 19:57:45 +0000534 PyString_AsString(co->co_name),
Ka-Ping Yee20579702001-01-15 22:14:16 +0000535 ((co->co_flags & CO_VARARGS) ||
536 defcount) ? "at least"
537 : "exactly",
538 m, kwcount ? "non-keyword " : "",
539 m == 1 ? "" : "s", i);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000540 goto fail;
541 }
542 }
543 if (n > m)
544 i = n - m;
545 else
546 i = 0;
547 for (; i < defcount; i++) {
548 if (GETLOCAL(m+i) == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000549 PyObject *def = defs[i];
550 Py_INCREF(def);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000551 SETLOCAL(m+i, def);
552 }
553 }
554 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000555 }
556 else {
557 if (argcount > 0 || kwcount > 0) {
Fred Drake661ea262000-10-24 19:57:45 +0000558 PyErr_Format(PyExc_TypeError,
Ka-Ping Yee20579702001-01-15 22:14:16 +0000559 "%.200s() takes no arguments (%d given)",
560 PyString_AsString(co->co_name),
561 argcount + kwcount);
Guido van Rossum8c5df061997-01-24 04:19:24 +0000562 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000563 }
564 }
565
Guido van Rossuma027efa1997-05-05 20:56:21 +0000566 if (tstate->sys_tracefunc != NULL) {
567 /* tstate->sys_tracefunc, if defined, is a function that
568 will be called on *every* entry to a code block.
Guido van Rossum96a42c81992-01-12 02:29:51 +0000569 Its return value, if not None, is a function that
570 will be called at the start of each executed line
571 of code. (Actually, the function must return
572 itself in order to continue tracing.)
573 The trace functions are called with three arguments:
574 a pointer to the current frame, a string indicating
575 why the function is called, and an argument which
576 depends on the situation. The global trace function
577 (sys.trace) is also called whenever an exception
578 is detected. */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000579 if (call_trace(&tstate->sys_tracefunc,
580 &f->f_trace, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000581 Py_None/*XXX how to compute arguments now?*/)) {
Guido van Rossum96a42c81992-01-12 02:29:51 +0000582 /* Trace function raised an error */
Guido van Rossum8c5df061997-01-24 04:19:24 +0000583 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000584 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000585 }
586
Guido van Rossuma027efa1997-05-05 20:56:21 +0000587 if (tstate->sys_profilefunc != NULL) {
588 /* Similar for sys_profilefunc, except it needn't return
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000589 itself and isn't called for "line" events */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000590 if (call_trace(&tstate->sys_profilefunc,
591 (PyObject**)0, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000592 Py_None/*XXX*/)) {
Guido van Rossum8c5df061997-01-24 04:19:24 +0000593 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000594 }
595 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000596
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000597 if (++tstate->recursion_depth > recursion_limit) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000598 --tstate->recursion_depth;
599 PyErr_SetString(PyExc_RuntimeError,
Fred Drake661ea262000-10-24 19:57:45 +0000600 "maximum recursion depth exceeded");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000601 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +0000602 Py_DECREF(f);
Guido van Rossum8861b741996-07-30 16:49:37 +0000603 return NULL;
604 }
605
Guido van Rossumd076c731998-10-07 19:42:25 +0000606 _PyCode_GETCODEPTR(co, &first_instr);
607 next_instr = first_instr;
Guido van Rossum374a9221991-04-04 10:40:29 +0000608 stack_pointer = f->f_valuestack;
609
Guido van Rossum374a9221991-04-04 10:40:29 +0000610 why = WHY_NOT;
611 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000612 x = Py_None; /* Not a reference, just anything non-NULL */
Fred Drake48fba732000-10-11 13:54:07 +0000613 w = NULL;
Guido van Rossum374a9221991-04-04 10:40:29 +0000614
615 for (;;) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000616 /* Do periodic things. Doing this every time through
617 the loop would add too much overhead, so we do it
618 only every Nth instruction. We also do it if
619 ``things_to_do'' is set, i.e. when an asynchronous
620 event needs attention (e.g. a signal handler or
621 async I/O handler); see Py_AddPendingCall() and
622 Py_MakePendingCalls() above. */
Guido van Rossuma9672091994-09-14 13:31:22 +0000623
Guido van Rossuma027efa1997-05-05 20:56:21 +0000624 if (things_to_do || --tstate->ticker < 0) {
Guido van Rossum25ce5661997-08-02 03:10:38 +0000625 tstate->ticker = tstate->interp->checkinterval;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000626 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000627 if (Py_MakePendingCalls() < 0) {
628 why = WHY_EXCEPTION;
629 goto on_error;
630 }
631 }
Guido van Rossumdf0d00e1997-05-20 15:57:49 +0000632#if !defined(HAVE_SIGNAL_H) || defined(macintosh)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000633 /* If we have true signals, the signal handler
634 will call Py_AddPendingCall() so we don't
635 have to call sigcheck(). On the Mac and
636 DOS, alas, we have to call it. */
Guido van Rossumb209a111997-04-29 18:18:01 +0000637 if (PyErr_CheckSignals()) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000638 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +0000639 goto on_error;
640 }
Guido van Rossum70d44781997-01-21 06:15:24 +0000641#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000642
Guido van Rossume59214e1994-08-30 08:01:59 +0000643#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000644 if (interpreter_lock) {
645 /* Give another thread a chance */
646
Guido van Rossum25ce5661997-08-02 03:10:38 +0000647 if (PyThreadState_Swap(NULL) != tstate)
648 Py_FatalError("ceval: tstate mix-up");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000649 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000650
651 /* Other threads may run now */
652
Guido van Rossum65d5b571998-12-21 19:32:43 +0000653 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000654 if (PyThreadState_Swap(tstate) != NULL)
655 Py_FatalError("ceval: orphan tstate");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000656 }
657#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000658 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000659
Guido van Rossum374a9221991-04-04 10:40:29 +0000660 /* Extract opcode and argument */
Guido van Rossum99bec951992-09-03 20:29:45 +0000661
Guido van Rossum408027e1996-12-30 16:17:54 +0000662#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum99bec951992-09-03 20:29:45 +0000663 f->f_lasti = INSTR_OFFSET();
664#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000665
666 opcode = NEXTOP();
667 if (HAS_ARG(opcode))
668 oparg = NEXTARG();
Fred Drakeef8ace32000-08-24 00:32:09 +0000669 dispatch_opcode:
Guido van Rossum950361c1997-01-24 13:49:28 +0000670#ifdef DYNAMIC_EXECUTION_PROFILE
671#ifdef DXPAIRS
672 dxpairs[lastopcode][opcode]++;
673 lastopcode = opcode;
674#endif
675 dxp[opcode]++;
676#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000677
Guido van Rossum96a42c81992-01-12 02:29:51 +0000678#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000679 /* Instruction tracing */
680
Guido van Rossum96a42c81992-01-12 02:29:51 +0000681 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000682 if (HAS_ARG(opcode)) {
683 printf("%d: %d, %d\n",
684 (int) (INSTR_OFFSET() - 3),
685 opcode, oparg);
686 }
687 else {
688 printf("%d: %d\n",
689 (int) (INSTR_OFFSET() - 1), opcode);
690 }
691 }
692#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000693 /* Main switch on opcode */
Jeremy Hylton52820442001-01-03 23:52:36 +0000694
Guido van Rossum374a9221991-04-04 10:40:29 +0000695 switch (opcode) {
696
697 /* BEWARE!
698 It is essential that any operation that fails sets either
699 x to NULL, err to nonzero, or why to anything but WHY_NOT,
700 and that no operation that succeeds does this! */
701
702 /* case STOP_CODE: this is an error! */
703
704 case POP_TOP:
705 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000706 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000707 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000708
709 case ROT_TWO:
710 v = POP();
711 w = POP();
712 PUSH(v);
713 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000714 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000715
716 case ROT_THREE:
717 v = POP();
718 w = POP();
719 x = POP();
720 PUSH(v);
721 PUSH(x);
722 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000723 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000724
Thomas Wouters434d0822000-08-24 20:11:32 +0000725 case ROT_FOUR:
726 u = POP();
727 v = POP();
728 w = POP();
729 x = POP();
730 PUSH(u);
731 PUSH(x);
732 PUSH(w);
733 PUSH(v);
734 continue;
735
Guido van Rossum374a9221991-04-04 10:40:29 +0000736 case DUP_TOP:
737 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000738 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000739 PUSH(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000740 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000741
Thomas Wouters434d0822000-08-24 20:11:32 +0000742 case DUP_TOPX:
743 switch (oparg) {
Thomas Wouters434d0822000-08-24 20:11:32 +0000744 case 1:
Tim Peters35ba6892000-10-11 07:04:49 +0000745 x = TOP();
746 Py_INCREF(x);
747 PUSH(x);
748 continue;
749 case 2:
Thomas Wouters434d0822000-08-24 20:11:32 +0000750 x = POP();
Tim Peters35ba6892000-10-11 07:04:49 +0000751 Py_INCREF(x);
752 w = TOP();
753 Py_INCREF(w);
754 PUSH(x);
755 PUSH(w);
756 PUSH(x);
757 continue;
758 case 3:
759 x = POP();
760 Py_INCREF(x);
Thomas Wouters434d0822000-08-24 20:11:32 +0000761 w = POP();
Tim Peters35ba6892000-10-11 07:04:49 +0000762 Py_INCREF(w);
763 v = TOP();
764 Py_INCREF(v);
765 PUSH(w);
766 PUSH(x);
767 PUSH(v);
768 PUSH(w);
769 PUSH(x);
770 continue;
771 case 4:
772 x = POP();
773 Py_INCREF(x);
774 w = POP();
775 Py_INCREF(w);
Thomas Wouters434d0822000-08-24 20:11:32 +0000776 v = POP();
Tim Peters35ba6892000-10-11 07:04:49 +0000777 Py_INCREF(v);
778 u = TOP();
779 Py_INCREF(u);
780 PUSH(v);
781 PUSH(w);
782 PUSH(x);
783 PUSH(u);
784 PUSH(v);
785 PUSH(w);
786 PUSH(x);
787 continue;
788 case 5:
789 x = POP();
790 Py_INCREF(x);
791 w = POP();
792 Py_INCREF(w);
793 v = POP();
794 Py_INCREF(v);
Thomas Wouters434d0822000-08-24 20:11:32 +0000795 u = POP();
Tim Peters35ba6892000-10-11 07:04:49 +0000796 Py_INCREF(u);
797 t = TOP();
798 Py_INCREF(t);
799 PUSH(u);
800 PUSH(v);
801 PUSH(w);
802 PUSH(x);
803 PUSH(t);
804 PUSH(u);
805 PUSH(v);
806 PUSH(w);
807 PUSH(x);
808 continue;
Thomas Wouters434d0822000-08-24 20:11:32 +0000809 default:
Thomas Wouters0be483f2000-10-11 23:26:11 +0000810 Py_FatalError("invalid argument to DUP_TOPX"
811 " (bytecode corruption?)");
Thomas Wouters434d0822000-08-24 20:11:32 +0000812 }
Tim Peters35ba6892000-10-11 07:04:49 +0000813 break;
Thomas Wouters434d0822000-08-24 20:11:32 +0000814
Guido van Rossum374a9221991-04-04 10:40:29 +0000815 case UNARY_POSITIVE:
816 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000817 x = PyNumber_Positive(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000818 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000819 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000820 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000821 break;
822
823 case UNARY_NEGATIVE:
824 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000825 x = PyNumber_Negative(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000826 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000827 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000828 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000829 break;
830
831 case UNARY_NOT:
832 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000833 err = PyObject_IsTrue(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000834 Py_DECREF(v);
Guido van Rossumfc490731997-05-06 15:06:49 +0000835 if (err == 0) {
836 Py_INCREF(Py_True);
837 PUSH(Py_True);
838 continue;
839 }
840 else if (err > 0) {
841 Py_INCREF(Py_False);
842 PUSH(Py_False);
843 err = 0;
844 continue;
845 }
Guido van Rossum374a9221991-04-04 10:40:29 +0000846 break;
847
848 case UNARY_CONVERT:
849 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000850 x = PyObject_Repr(v);
851 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000852 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000853 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000854 break;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000855
856 case UNARY_INVERT:
857 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000858 x = PyNumber_Invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000859 Py_DECREF(v);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000860 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000861 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000862 break;
Guido van Rossum374a9221991-04-04 10:40:29 +0000863
Guido van Rossum50564e81996-01-12 01:13:16 +0000864 case BINARY_POWER:
865 w = POP();
866 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000867 x = PyNumber_Power(v, w, Py_None);
Guido van Rossumb209a111997-04-29 18:18:01 +0000868 Py_DECREF(v);
869 Py_DECREF(w);
Guido van Rossum50564e81996-01-12 01:13:16 +0000870 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000871 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +0000872 break;
873
Guido van Rossum374a9221991-04-04 10:40:29 +0000874 case BINARY_MULTIPLY:
875 w = POP();
876 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000877 x = PyNumber_Multiply(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000878 Py_DECREF(v);
879 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000880 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000881 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000882 break;
883
884 case BINARY_DIVIDE:
885 w = POP();
886 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000887 x = PyNumber_Divide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000888 Py_DECREF(v);
889 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000890 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000891 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000892 break;
893
894 case BINARY_MODULO:
895 w = POP();
896 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000897 x = PyNumber_Remainder(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000898 Py_DECREF(v);
899 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000900 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000901 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000902 break;
903
904 case BINARY_ADD:
905 w = POP();
906 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000907 if (PyInt_Check(v) && PyInt_Check(w)) {
908 /* INLINE: int + int */
909 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000910 a = PyInt_AS_LONG(v);
911 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000912 i = a + b;
913 if ((i^a) < 0 && (i^b) < 0) {
914 PyErr_SetString(PyExc_OverflowError,
915 "integer addition");
916 x = NULL;
917 }
918 else
919 x = PyInt_FromLong(i);
920 }
921 else
922 x = PyNumber_Add(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000923 Py_DECREF(v);
924 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000925 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000926 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000927 break;
928
929 case BINARY_SUBTRACT:
930 w = POP();
931 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000932 if (PyInt_Check(v) && PyInt_Check(w)) {
933 /* INLINE: int - int */
934 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000935 a = PyInt_AS_LONG(v);
936 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000937 i = a - b;
938 if ((i^a) < 0 && (i^~b) < 0) {
939 PyErr_SetString(PyExc_OverflowError,
940 "integer subtraction");
941 x = NULL;
942 }
943 else
944 x = PyInt_FromLong(i);
945 }
946 else
947 x = PyNumber_Subtract(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000948 Py_DECREF(v);
949 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000950 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000951 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000952 break;
953
954 case BINARY_SUBSCR:
955 w = POP();
956 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000957 if (PyList_Check(v) && PyInt_Check(w)) {
958 /* INLINE: list[int] */
959 long i = PyInt_AsLong(w);
960 if (i < 0)
Guido van Rossumfa00e951998-07-08 15:02:37 +0000961 i += PyList_GET_SIZE(v);
Guido van Rossumc12da691997-07-17 23:12:42 +0000962 if (i < 0 ||
Guido van Rossumfa00e951998-07-08 15:02:37 +0000963 i >= PyList_GET_SIZE(v)) {
Guido van Rossumc12da691997-07-17 23:12:42 +0000964 PyErr_SetString(PyExc_IndexError,
965 "list index out of range");
966 x = NULL;
967 }
968 else {
Guido van Rossumfa00e951998-07-08 15:02:37 +0000969 x = PyList_GET_ITEM(v, i);
Guido van Rossumc12da691997-07-17 23:12:42 +0000970 Py_INCREF(x);
971 }
972 }
973 else
974 x = PyObject_GetItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000975 Py_DECREF(v);
976 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000977 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000978 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000979 break;
980
Guido van Rossum7928cd71991-10-24 14:59:31 +0000981 case BINARY_LSHIFT:
982 w = POP();
983 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000984 x = PyNumber_Lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000985 Py_DECREF(v);
986 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000987 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000988 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000989 break;
990
991 case BINARY_RSHIFT:
992 w = POP();
993 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000994 x = PyNumber_Rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000995 Py_DECREF(v);
996 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000997 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000998 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000999 break;
1000
1001 case BINARY_AND:
1002 w = POP();
1003 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001004 x = PyNumber_And(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001005 Py_DECREF(v);
1006 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00001007 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001008 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001009 break;
1010
1011 case BINARY_XOR:
1012 w = POP();
1013 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001014 x = PyNumber_Xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001015 Py_DECREF(v);
1016 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00001017 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001018 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001019 break;
1020
1021 case BINARY_OR:
1022 w = POP();
1023 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001024 x = PyNumber_Or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001025 Py_DECREF(v);
1026 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00001027 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001028 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001029 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001030
1031 case INPLACE_POWER:
1032 w = POP();
1033 v = POP();
1034 x = PyNumber_InPlacePower(v, w, Py_None);
1035 Py_DECREF(v);
1036 Py_DECREF(w);
1037 PUSH(x);
1038 if (x != NULL) continue;
1039 break;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001040
Thomas Wouters434d0822000-08-24 20:11:32 +00001041 case INPLACE_MULTIPLY:
1042 w = POP();
1043 v = POP();
1044 x = PyNumber_InPlaceMultiply(v, w);
1045 Py_DECREF(v);
1046 Py_DECREF(w);
1047 PUSH(x);
1048 if (x != NULL) continue;
1049 break;
1050
1051 case INPLACE_DIVIDE:
1052 w = POP();
1053 v = POP();
1054 x = PyNumber_InPlaceDivide(v, w);
1055 Py_DECREF(v);
1056 Py_DECREF(w);
1057 PUSH(x);
1058 if (x != NULL) continue;
1059 break;
1060
1061 case INPLACE_MODULO:
1062 w = POP();
1063 v = POP();
1064 x = PyNumber_InPlaceRemainder(v, w);
1065 Py_DECREF(v);
1066 Py_DECREF(w);
1067 PUSH(x);
1068 if (x != NULL) continue;
1069 break;
1070
1071 case INPLACE_ADD:
1072 w = POP();
1073 v = POP();
1074 if (PyInt_Check(v) && PyInt_Check(w)) {
1075 /* INLINE: int + int */
1076 register long a, b, i;
1077 a = PyInt_AS_LONG(v);
1078 b = PyInt_AS_LONG(w);
1079 i = a + b;
1080 if ((i^a) < 0 && (i^b) < 0) {
1081 PyErr_SetString(PyExc_OverflowError,
1082 "integer addition");
1083 x = NULL;
1084 }
1085 else
1086 x = PyInt_FromLong(i);
1087 }
1088 else
1089 x = PyNumber_InPlaceAdd(v, w);
1090 Py_DECREF(v);
1091 Py_DECREF(w);
1092 PUSH(x);
1093 if (x != NULL) continue;
1094 break;
1095
1096 case INPLACE_SUBTRACT:
1097 w = POP();
1098 v = POP();
1099 if (PyInt_Check(v) && PyInt_Check(w)) {
1100 /* INLINE: int - int */
1101 register long a, b, i;
1102 a = PyInt_AS_LONG(v);
1103 b = PyInt_AS_LONG(w);
1104 i = a - b;
1105 if ((i^a) < 0 && (i^~b) < 0) {
1106 PyErr_SetString(PyExc_OverflowError,
1107 "integer subtraction");
1108 x = NULL;
1109 }
1110 else
1111 x = PyInt_FromLong(i);
1112 }
1113 else
1114 x = PyNumber_InPlaceSubtract(v, w);
1115 Py_DECREF(v);
1116 Py_DECREF(w);
1117 PUSH(x);
1118 if (x != NULL) continue;
1119 break;
1120
1121 case INPLACE_LSHIFT:
1122 w = POP();
1123 v = POP();
1124 x = PyNumber_InPlaceLshift(v, w);
1125 Py_DECREF(v);
1126 Py_DECREF(w);
1127 PUSH(x);
1128 if (x != NULL) continue;
1129 break;
1130
1131 case INPLACE_RSHIFT:
1132 w = POP();
1133 v = POP();
1134 x = PyNumber_InPlaceRshift(v, w);
1135 Py_DECREF(v);
1136 Py_DECREF(w);
1137 PUSH(x);
1138 if (x != NULL) continue;
1139 break;
1140
1141 case INPLACE_AND:
1142 w = POP();
1143 v = POP();
1144 x = PyNumber_InPlaceAnd(v, w);
1145 Py_DECREF(v);
1146 Py_DECREF(w);
1147 PUSH(x);
1148 if (x != NULL) continue;
1149 break;
1150
1151 case INPLACE_XOR:
1152 w = POP();
1153 v = POP();
1154 x = PyNumber_InPlaceXor(v, w);
1155 Py_DECREF(v);
1156 Py_DECREF(w);
1157 PUSH(x);
1158 if (x != NULL) continue;
1159 break;
1160
1161 case INPLACE_OR:
1162 w = POP();
1163 v = POP();
1164 x = PyNumber_InPlaceOr(v, w);
1165 Py_DECREF(v);
1166 Py_DECREF(w);
1167 PUSH(x);
1168 if (x != NULL) continue;
1169 break;
1170
Guido van Rossum374a9221991-04-04 10:40:29 +00001171 case SLICE+0:
1172 case SLICE+1:
1173 case SLICE+2:
1174 case SLICE+3:
1175 if ((opcode-SLICE) & 2)
1176 w = POP();
1177 else
1178 w = NULL;
1179 if ((opcode-SLICE) & 1)
1180 v = POP();
1181 else
1182 v = NULL;
1183 u = POP();
1184 x = apply_slice(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001185 Py_DECREF(u);
1186 Py_XDECREF(v);
1187 Py_XDECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001188 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001189 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001190 break;
1191
1192 case STORE_SLICE+0:
1193 case STORE_SLICE+1:
1194 case STORE_SLICE+2:
1195 case STORE_SLICE+3:
1196 if ((opcode-STORE_SLICE) & 2)
1197 w = POP();
1198 else
1199 w = NULL;
1200 if ((opcode-STORE_SLICE) & 1)
1201 v = POP();
1202 else
1203 v = NULL;
1204 u = POP();
1205 t = POP();
1206 err = assign_slice(u, v, w, t); /* u[v:w] = t */
Guido van Rossumb209a111997-04-29 18:18:01 +00001207 Py_DECREF(t);
1208 Py_DECREF(u);
1209 Py_XDECREF(v);
1210 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001211 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001212 break;
1213
1214 case DELETE_SLICE+0:
1215 case DELETE_SLICE+1:
1216 case DELETE_SLICE+2:
1217 case DELETE_SLICE+3:
1218 if ((opcode-DELETE_SLICE) & 2)
1219 w = POP();
1220 else
1221 w = NULL;
1222 if ((opcode-DELETE_SLICE) & 1)
1223 v = POP();
1224 else
1225 v = NULL;
1226 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001227 err = assign_slice(u, v, w, (PyObject *)NULL);
Guido van Rossum374a9221991-04-04 10:40:29 +00001228 /* del u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +00001229 Py_DECREF(u);
1230 Py_XDECREF(v);
1231 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001232 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001233 break;
1234
1235 case STORE_SUBSCR:
1236 w = POP();
1237 v = POP();
1238 u = POP();
1239 /* v[w] = u */
Guido van Rossumfc490731997-05-06 15:06:49 +00001240 err = PyObject_SetItem(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001241 Py_DECREF(u);
1242 Py_DECREF(v);
1243 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001244 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001245 break;
1246
1247 case DELETE_SUBSCR:
1248 w = POP();
1249 v = POP();
1250 /* del v[w] */
Guido van Rossumfc490731997-05-06 15:06:49 +00001251 err = PyObject_DelItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001252 Py_DECREF(v);
1253 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001254 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001255 break;
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001256
Guido van Rossum374a9221991-04-04 10:40:29 +00001257 case PRINT_EXPR:
1258 v = POP();
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001259 w = PySys_GetObject("displayhook");
1260 if (w == NULL) {
1261 PyErr_SetString(PyExc_RuntimeError,
1262 "lost sys.displayhook");
1263 err = -1;
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001264 x = NULL;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001265 }
1266 if (err == 0) {
1267 x = Py_BuildValue("(O)", v);
1268 if (x == NULL)
1269 err = -1;
1270 }
1271 if (err == 0) {
1272 w = PyEval_CallObject(w, x);
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001273 Py_XDECREF(w);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001274 if (w == NULL)
1275 err = -1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001276 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001277 Py_DECREF(v);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001278 Py_XDECREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001279 break;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001280
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001281 case PRINT_ITEM_TO:
1282 w = stream = POP();
1283 /* fall through to PRINT_ITEM */
1284
Guido van Rossum374a9221991-04-04 10:40:29 +00001285 case PRINT_ITEM:
1286 v = POP();
Barry Warsaw093abe02000-08-29 04:56:13 +00001287 if (stream == NULL || stream == Py_None) {
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001288 w = PySys_GetObject("stdout");
1289 if (w == NULL) {
1290 PyErr_SetString(PyExc_RuntimeError,
1291 "lost sys.stdout");
1292 err = -1;
1293 }
Guido van Rossum8f183201997-12-31 05:53:15 +00001294 }
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001295 if (w != NULL && PyFile_SoftSpace(w, 1))
Guido van Rossumbe270261997-05-22 22:26:18 +00001296 err = PyFile_WriteString(" ", w);
1297 if (err == 0)
1298 err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
Guido van Rossumb209a111997-04-29 18:18:01 +00001299 if (err == 0 && PyString_Check(v)) {
Guido van Rossumc6004111993-11-05 10:22:19 +00001300 /* XXX move into writeobject() ? */
Guido van Rossumb209a111997-04-29 18:18:01 +00001301 char *s = PyString_AsString(v);
1302 int len = PyString_Size(v);
Guido van Rossum7f7f2741995-02-10 17:01:56 +00001303 if (len > 0 &&
1304 isspace(Py_CHARMASK(s[len-1])) &&
Guido van Rossumc6004111993-11-05 10:22:19 +00001305 s[len-1] != ' ')
Guido van Rossumb209a111997-04-29 18:18:01 +00001306 PyFile_SoftSpace(w, 0);
Guido van Rossum374a9221991-04-04 10:40:29 +00001307 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001308 Py_DECREF(v);
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001309 Py_XDECREF(stream);
1310 stream = NULL;
1311 if (err == 0)
1312 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001313 break;
1314
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001315 case PRINT_NEWLINE_TO:
1316 w = stream = POP();
1317 /* fall through to PRINT_NEWLINE */
1318
Guido van Rossum374a9221991-04-04 10:40:29 +00001319 case PRINT_NEWLINE:
Barry Warsaw093abe02000-08-29 04:56:13 +00001320 if (stream == NULL || stream == Py_None) {
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001321 w = PySys_GetObject("stdout");
1322 if (w == NULL)
1323 PyErr_SetString(PyExc_RuntimeError,
1324 "lost sys.stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001325 }
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001326 if (w != NULL) {
1327 err = PyFile_WriteString("\n", w);
1328 if (err == 0)
1329 PyFile_SoftSpace(w, 0);
1330 }
1331 Py_XDECREF(stream);
1332 stream = NULL;
Guido van Rossum374a9221991-04-04 10:40:29 +00001333 break;
1334
Thomas Wouters434d0822000-08-24 20:11:32 +00001335
1336#ifdef CASE_TOO_BIG
1337 default: switch (opcode) {
1338#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001339 case BREAK_LOOP:
1340 why = WHY_BREAK;
1341 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001342
Guido van Rossumf10570b1995-07-07 22:53:21 +00001343 case RAISE_VARARGS:
1344 u = v = w = NULL;
1345 switch (oparg) {
1346 case 3:
1347 u = POP(); /* traceback */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001348 /* Fallthrough */
1349 case 2:
1350 v = POP(); /* value */
1351 /* Fallthrough */
1352 case 1:
1353 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001354 case 0: /* Fallthrough */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001355 why = do_raise(w, v, u);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001356 break;
1357 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001358 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001359 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001360 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001361 break;
1362 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001363 break;
1364
1365 case LOAD_LOCALS:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001366 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001367 PyErr_SetString(PyExc_SystemError,
1368 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001369 break;
1370 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001371 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001372 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001373 break;
1374
1375 case RETURN_VALUE:
1376 retval = POP();
1377 why = WHY_RETURN;
1378 break;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001379
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001380 case EXEC_STMT:
1381 w = POP();
1382 v = POP();
1383 u = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001384 err = exec_statement(f, u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001385 Py_DECREF(u);
1386 Py_DECREF(v);
1387 Py_DECREF(w);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001388 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001389
Guido van Rossum374a9221991-04-04 10:40:29 +00001390 case POP_BLOCK:
1391 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001392 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001393 while (STACK_LEVEL() > b->b_level) {
1394 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001395 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001396 }
1397 }
1398 break;
1399
1400 case END_FINALLY:
1401 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001402 if (PyInt_Check(v)) {
1403 why = (enum why_code) PyInt_AsLong(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001404 if (why == WHY_RETURN)
1405 retval = POP();
1406 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001407 else if (PyString_Check(v) || PyClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001408 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001409 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001410 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001411 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001412 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001413 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001414 else if (v != Py_None) {
1415 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001416 "'finally' pops bad exception");
1417 why = WHY_EXCEPTION;
1418 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001419 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001420 break;
1421
1422 case BUILD_CLASS:
Guido van Rossum25831651993-05-19 14:50:45 +00001423 u = POP();
Guido van Rossum374a9221991-04-04 10:40:29 +00001424 v = POP();
Guido van Rossum25831651993-05-19 14:50:45 +00001425 w = POP();
1426 x = build_class(u, v, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001427 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001428 Py_DECREF(u);
1429 Py_DECREF(v);
1430 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001431 break;
1432
1433 case STORE_NAME:
1434 w = GETNAMEV(oparg);
1435 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001436 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001437 PyErr_SetString(PyExc_SystemError,
1438 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001439 break;
1440 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001441 err = PyDict_SetItem(x, w, v);
1442 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001443 break;
1444
1445 case DELETE_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001446 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001447 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001448 PyErr_SetString(PyExc_SystemError,
1449 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001450 break;
1451 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001452 if ((err = PyDict_DelItem(x, w)) != 0)
Paul Prescode68140d2000-08-30 20:25:01 +00001453 format_exc_check_arg(PyExc_NameError,
1454 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001455 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001456
Thomas Wouters0be5aab2000-08-11 22:15:52 +00001457 case UNPACK_SEQUENCE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001458 v = POP();
Barry Warsawe42b18f1997-08-25 22:13:04 +00001459 if (PyTuple_Check(v)) {
1460 if (PyTuple_Size(v) != oparg) {
1461 PyErr_SetString(PyExc_ValueError,
1462 "unpack tuple of wrong size");
1463 why = WHY_EXCEPTION;
1464 }
1465 else {
1466 for (; --oparg >= 0; ) {
1467 w = PyTuple_GET_ITEM(v, oparg);
1468 Py_INCREF(w);
1469 PUSH(w);
1470 }
1471 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001472 }
Barry Warsawe42b18f1997-08-25 22:13:04 +00001473 else if (PyList_Check(v)) {
1474 if (PyList_Size(v) != oparg) {
1475 PyErr_SetString(PyExc_ValueError,
1476 "unpack list of wrong size");
1477 why = WHY_EXCEPTION;
1478 }
1479 else {
1480 for (; --oparg >= 0; ) {
1481 w = PyList_GET_ITEM(v, oparg);
1482 Py_INCREF(w);
1483 PUSH(w);
1484 }
1485 }
1486 }
1487 else if (PySequence_Check(v)) {
1488 if (unpack_sequence(v, oparg,
1489 stack_pointer + oparg))
1490 stack_pointer += oparg;
1491 else
1492 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001493 }
1494 else {
Barry Warsawe42b18f1997-08-25 22:13:04 +00001495 PyErr_SetString(PyExc_TypeError,
1496 "unpack non-sequence");
1497 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001498 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001499 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001500 break;
1501
1502 case STORE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001503 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001504 v = POP();
1505 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001506 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1507 Py_DECREF(v);
1508 Py_DECREF(u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001509 break;
1510
1511 case DELETE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001512 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001513 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001514 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1515 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001516 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001517 break;
1518
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001519 case STORE_GLOBAL:
1520 w = GETNAMEV(oparg);
1521 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001522 err = PyDict_SetItem(f->f_globals, w, v);
1523 Py_DECREF(v);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001524 break;
1525
1526 case DELETE_GLOBAL:
1527 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001528 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
Paul Prescode68140d2000-08-30 20:25:01 +00001529 format_exc_check_arg(
1530 PyExc_NameError, NAME_ERROR_MSG ,w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001531 break;
1532
Guido van Rossum374a9221991-04-04 10:40:29 +00001533 case LOAD_CONST:
1534 x = GETCONST(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001535 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001536 PUSH(x);
1537 break;
1538
1539 case LOAD_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001540 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001541 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001542 PyErr_SetString(PyExc_SystemError,
1543 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001544 break;
1545 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001546 x = PyDict_GetItem(x, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001547 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001548 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001549 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001550 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001551 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001552 format_exc_check_arg(
1553 PyExc_NameError,
1554 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001555 break;
1556 }
1557 }
1558 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001559 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001560 PUSH(x);
1561 break;
1562
1563 case LOAD_GLOBAL:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001564 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001565 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001566 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001567 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001568 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001569 format_exc_check_arg(
1570 PyExc_NameError,
1571 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001572 break;
1573 }
1574 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001575 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001576 PUSH(x);
1577 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001578
Guido van Rossum9bfef441993-03-29 10:43:31 +00001579 case LOAD_FAST:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001580 x = GETLOCAL(oparg);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001581 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001582 format_exc_check_arg(
1583 PyExc_UnboundLocalError,
1584 UNBOUNDLOCAL_ERROR_MSG,
1585 PyTuple_GetItem(co->co_varnames, oparg)
1586 );
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001587 break;
1588 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001589 Py_INCREF(x);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001590 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001591 if (x != NULL) continue;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001592 break;
1593
1594 case STORE_FAST:
Guido van Rossum25831651993-05-19 14:50:45 +00001595 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001596 SETLOCAL(oparg, v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001597 continue;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001598
1599 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001600 x = GETLOCAL(oparg);
1601 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001602 format_exc_check_arg(
1603 PyExc_UnboundLocalError,
1604 UNBOUNDLOCAL_ERROR_MSG,
1605 PyTuple_GetItem(co->co_varnames, oparg)
1606 );
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001607 break;
1608 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001609 SETLOCAL(oparg, NULL);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001610 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001611
1612 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001613 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001614 if (x != NULL) {
1615 for (; --oparg >= 0;) {
1616 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001617 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001618 }
1619 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001620 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001621 }
1622 break;
1623
1624 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001625 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001626 if (x != NULL) {
1627 for (; --oparg >= 0;) {
1628 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001629 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001630 }
1631 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001632 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001633 }
1634 break;
1635
1636 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001637 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001638 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001639 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001640 break;
1641
1642 case LOAD_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001643 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001644 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001645 x = PyObject_GetAttr(v, w);
1646 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001647 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001648 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001649 break;
1650
1651 case COMPARE_OP:
1652 w = POP();
1653 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +00001654 if (PyInt_Check(v) && PyInt_Check(w)) {
1655 /* INLINE: cmp(int, int) */
1656 register long a, b;
1657 register int res;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001658 a = PyInt_AS_LONG(v);
1659 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001660 switch (oparg) {
1661 case LT: res = a < b; break;
1662 case LE: res = a <= b; break;
1663 case EQ: res = a == b; break;
1664 case NE: res = a != b; break;
1665 case GT: res = a > b; break;
1666 case GE: res = a >= b; break;
1667 case IS: res = v == w; break;
1668 case IS_NOT: res = v != w; break;
1669 default: goto slow_compare;
1670 }
1671 x = res ? Py_True : Py_False;
1672 Py_INCREF(x);
1673 }
1674 else {
1675 slow_compare:
1676 x = cmp_outcome(oparg, v, w);
1677 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001678 Py_DECREF(v);
1679 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001680 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001681 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001682 break;
1683
1684 case IMPORT_NAME:
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001685 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001686 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001687 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001688 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001689 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001690 break;
1691 }
Thomas Woutersdd13e4f2000-08-27 20:31:27 +00001692 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001693 w = Py_BuildValue("(OOOO)",
Guido van Rossum681d79a1995-07-18 14:51:37 +00001694 w,
1695 f->f_globals,
Guido van Rossuma027efa1997-05-05 20:56:21 +00001696 f->f_locals == NULL ?
1697 Py_None : f->f_locals,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001698 u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001699 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001700 if (w == NULL) {
1701 x = NULL;
1702 break;
1703 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001704 x = PyEval_CallObject(x, w);
1705 Py_DECREF(w);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001706 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001707 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001708 break;
1709
Thomas Wouters52152252000-08-17 22:55:00 +00001710 case IMPORT_STAR:
1711 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001712 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001713 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001714 PyErr_SetString(PyExc_SystemError,
1715 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001716 break;
1717 }
Thomas Wouters52152252000-08-17 22:55:00 +00001718 err = import_all_from(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001719 PyFrame_LocalsToFast(f, 0);
Thomas Wouters52152252000-08-17 22:55:00 +00001720 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001721 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001722 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001723
Thomas Wouters52152252000-08-17 22:55:00 +00001724 case IMPORT_FROM:
1725 w = GETNAMEV(oparg);
1726 v = TOP();
1727 x = import_from(v, w);
1728 PUSH(x);
1729 if (x != NULL) continue;
1730 break;
1731
Guido van Rossum374a9221991-04-04 10:40:29 +00001732 case JUMP_FORWARD:
1733 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001734 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001735
1736 case JUMP_IF_FALSE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001737 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001738 if (err > 0)
1739 err = 0;
1740 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00001741 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001742 else
1743 break;
1744 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001745
1746 case JUMP_IF_TRUE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001747 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001748 if (err > 0) {
1749 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00001750 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001751 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001752 else if (err == 0)
1753 ;
1754 else
1755 break;
1756 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001757
1758 case JUMP_ABSOLUTE:
1759 JUMPTO(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001760 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001761
1762 case FOR_LOOP:
1763 /* for v in s: ...
1764 On entry: stack contains s, i.
1765 On exit: stack contains s, i+1, s[i];
1766 but if loop exhausted:
1767 s, i are popped, and we jump */
1768 w = POP(); /* Loop index */
1769 v = POP(); /* Sequence object */
1770 u = loop_subscript(v, w);
1771 if (u != NULL) {
1772 PUSH(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001773 x = PyInt_FromLong(PyInt_AsLong(w)+1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001774 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001775 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001776 PUSH(u);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001777 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001778 }
1779 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001780 Py_DECREF(v);
1781 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001782 /* A NULL can mean "s exhausted"
1783 but also an error: */
Guido van Rossumb209a111997-04-29 18:18:01 +00001784 if (PyErr_Occurred())
Guido van Rossum374a9221991-04-04 10:40:29 +00001785 why = WHY_EXCEPTION;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001786 else {
Guido van Rossum374a9221991-04-04 10:40:29 +00001787 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001788 continue;
1789 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001790 }
1791 break;
1792
1793 case SETUP_LOOP:
1794 case SETUP_EXCEPT:
1795 case SETUP_FINALLY:
Guido van Rossumb209a111997-04-29 18:18:01 +00001796 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Guido van Rossum374a9221991-04-04 10:40:29 +00001797 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001798 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001799
1800 case SET_LINENO:
Guido van Rossum96a42c81992-01-12 02:29:51 +00001801#ifdef LLTRACE
1802 if (lltrace)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001803 printf("--- %s:%d \n", filename, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001804#endif
Guido van Rossum96a42c81992-01-12 02:29:51 +00001805 f->f_lineno = oparg;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001806 if (f->f_trace == NULL)
1807 continue;
1808 /* Trace each line of code reached */
1809 f->f_lasti = INSTR_OFFSET();
1810 err = call_trace(&f->f_trace, &f->f_trace,
Guido van Rossumb209a111997-04-29 18:18:01 +00001811 f, "line", Py_None);
Guido van Rossum374a9221991-04-04 10:40:29 +00001812 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001813
1814 case CALL_FUNCTION:
Jeremy Hylton52820442001-01-03 23:52:36 +00001815 {
1816 int na = oparg & 0xff;
1817 int nk = (oparg>>8) & 0xff;
1818 int n = na + 2 * nk;
1819 PyObject **pfunc = stack_pointer - n - 1;
1820 PyObject *func = *pfunc;
1821 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
1822
1823 /* Always dispatch PyCFunction first, because
1824 these are presumed to be the most frequent
1825 callable object.
1826 */
1827 if (PyCFunction_Check(func)) {
1828 if (PyCFunction_GET_FLAGS(func) == 0) {
1829 x = fast_cfunction(func,
1830 &stack_pointer, na);
1831 } else {
1832 x = do_call(func, &stack_pointer,
1833 na, nk);
1834 }
1835 } else {
1836 if (PyMethod_Check(func)
1837 && PyMethod_GET_SELF(func) != NULL) {
1838 /* optimize access to bound methods */
1839 PyObject *self = PyMethod_GET_SELF(func);
1840 Py_INCREF(self);
1841 func = PyMethod_GET_FUNCTION(func);
1842 Py_INCREF(func);
1843 Py_DECREF(*pfunc);
1844 *pfunc = self;
1845 na++;
1846 n++;
1847 } else
1848 Py_INCREF(func);
1849 if (PyFunction_Check(func)) {
1850 x = fast_function(func, &stack_pointer,
1851 n, na, nk);
1852 } else {
1853 x = do_call(func, &stack_pointer,
1854 na, nk);
1855 }
1856 Py_DECREF(func);
1857 }
1858
1859 while (stack_pointer > pfunc) {
1860 w = POP();
1861 Py_DECREF(w);
1862 }
1863 PUSH(x);
1864 if (x != NULL)
1865 continue;
1866 break;
1867 }
1868
Jeremy Hylton76901512000-03-28 23:49:17 +00001869 case CALL_FUNCTION_VAR:
1870 case CALL_FUNCTION_KW:
1871 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00001872 {
Jeremy Hylton76901512000-03-28 23:49:17 +00001873 int na = oparg & 0xff;
1874 int nk = (oparg>>8) & 0xff;
1875 int flags = (opcode - CALL_FUNCTION) & 3;
Jeremy Hylton52820442001-01-03 23:52:36 +00001876 int n = na + 2 * nk;
1877 PyObject **pfunc, *func;
1878 if (flags & CALL_FLAG_VAR)
1879 n++;
1880 if (flags & CALL_FLAG_KW)
1881 n++;
1882 pfunc = stack_pointer - n - 1;
1883 func = *pfunc;
Jeremy Hylton76901512000-03-28 23:49:17 +00001884 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
Jeremy Hylton52820442001-01-03 23:52:36 +00001885
1886 if (PyMethod_Check(func)
1887 && PyMethod_GET_SELF(func) != NULL) {
1888 PyObject *self = PyMethod_GET_SELF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00001889 Py_INCREF(self);
Jeremy Hylton52820442001-01-03 23:52:36 +00001890 func = PyMethod_GET_FUNCTION(func);
1891 Py_INCREF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00001892 Py_DECREF(*pfunc);
1893 *pfunc = self;
1894 na++;
1895 n++;
Jeremy Hylton52820442001-01-03 23:52:36 +00001896 } else
1897 Py_INCREF(func);
1898 x = ext_do_call(func, &stack_pointer, flags, na, nk);
Jeremy Hylton76901512000-03-28 23:49:17 +00001899 Py_DECREF(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00001900
Jeremy Hylton76901512000-03-28 23:49:17 +00001901 while (stack_pointer > pfunc) {
Jeremy Hylton52820442001-01-03 23:52:36 +00001902 w = POP();
1903 Py_DECREF(w);
Jeremy Hylton76901512000-03-28 23:49:17 +00001904 }
1905 PUSH(x);
Jeremy Hylton52820442001-01-03 23:52:36 +00001906 if (x != NULL)
1907 continue;
Jeremy Hylton76901512000-03-28 23:49:17 +00001908 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001909 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001910
Guido van Rossum681d79a1995-07-18 14:51:37 +00001911 case MAKE_FUNCTION:
1912 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00001913 x = PyFunction_New(v, f->f_globals);
1914 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001915 /* XXX Maybe this should be a separate opcode? */
1916 if (x != NULL && oparg > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001917 v = PyTuple_New(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001918 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001919 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001920 x = NULL;
1921 break;
1922 }
1923 while (--oparg >= 0) {
1924 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001925 PyTuple_SET_ITEM(v, oparg, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001926 }
1927 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001928 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001929 }
1930 PUSH(x);
1931 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001932
1933 case BUILD_SLICE:
1934 if (oparg == 3)
1935 w = POP();
1936 else
1937 w = NULL;
1938 v = POP();
1939 u = POP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00001940 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001941 Py_DECREF(u);
1942 Py_DECREF(v);
1943 Py_XDECREF(w);
Guido van Rossum8861b741996-07-30 16:49:37 +00001944 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001945 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00001946 break;
1947
Fred Drakeef8ace32000-08-24 00:32:09 +00001948 case EXTENDED_ARG:
1949 opcode = NEXTOP();
1950 oparg = oparg<<16 | NEXTARG();
1951 goto dispatch_opcode;
1952 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001953
Guido van Rossum374a9221991-04-04 10:40:29 +00001954 default:
1955 fprintf(stderr,
1956 "XXX lineno: %d, opcode: %d\n",
Guido van Rossum96a42c81992-01-12 02:29:51 +00001957 f->f_lineno, opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00001958 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00001959 why = WHY_EXCEPTION;
1960 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001961
1962#ifdef CASE_TOO_BIG
1963 }
1964#endif
1965
Guido van Rossum374a9221991-04-04 10:40:29 +00001966 } /* switch */
1967
1968 on_error:
1969
1970 /* Quickly continue if no error occurred */
1971
1972 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001973 if (err == 0 && x != NULL) {
1974#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001975 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001976 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00001977 fprintf(stderr,
1978 "XXX undetected error\n");
1979 else
1980#endif
1981 continue; /* Normal, fast path */
1982 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001983 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00001984 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00001985 err = 0;
1986 }
1987
Guido van Rossum374a9221991-04-04 10:40:29 +00001988 /* Double-check exception status */
1989
1990 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001991 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001992 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001993 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00001994 why = WHY_EXCEPTION;
1995 }
1996 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001997#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00001998 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001999 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00002000 if (PyErr_Occurred()) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002001 fprintf(stderr,
2002 "XXX undetected error (why=%d)\n",
2003 why);
2004 why = WHY_EXCEPTION;
2005 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002006 }
2007#endif
2008
2009 /* Log traceback info if this is a real exception */
2010
2011 if (why == WHY_EXCEPTION) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00002012 f->f_lasti = INSTR_OFFSET() - 1;
Guido van Rossum374a9221991-04-04 10:40:29 +00002013 if (HAS_ARG(opcode))
Guido van Rossum96a42c81992-01-12 02:29:51 +00002014 f->f_lasti -= 2;
Guido van Rossumb209a111997-04-29 18:18:01 +00002015 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002016
Guido van Rossume59214e1994-08-30 08:01:59 +00002017 if (f->f_trace)
2018 call_exc_trace(&f->f_trace, &f->f_trace, f);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002019 if (tstate->sys_profilefunc)
2020 call_exc_trace(&tstate->sys_profilefunc,
2021 (PyObject**)0, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00002022 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002023
2024 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
2025
2026 if (why == WHY_RERAISE)
2027 why = WHY_EXCEPTION;
2028
2029 /* Unwind stacks if a (pseudo) exception occurred */
2030
2031 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002032 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00002033 while (STACK_LEVEL() > b->b_level) {
2034 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00002035 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00002036 }
2037 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
2038 why = WHY_NOT;
2039 JUMPTO(b->b_handler);
2040 break;
2041 }
2042 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00002043 (b->b_type == SETUP_EXCEPT &&
2044 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00002045 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002046 PyObject *exc, *val, *tb;
2047 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002048 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002049 val = Py_None;
2050 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00002051 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002052 /* Make the raw exception data
2053 available to the handler,
2054 so a program can emulate the
2055 Python main loop. Don't do
2056 this for 'finally'. */
2057 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00002058 PyErr_NormalizeException(
2059 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002060 set_exc_info(tstate,
2061 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002062 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002063 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002064 PUSH(val);
2065 PUSH(exc);
2066 }
2067 else {
2068 if (why == WHY_RETURN)
2069 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00002070 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00002071 PUSH(v);
2072 }
2073 why = WHY_NOT;
2074 JUMPTO(b->b_handler);
2075 break;
2076 }
2077 } /* unwind stack */
2078
2079 /* End the loop if we still have an error (or return) */
2080
2081 if (why != WHY_NOT)
2082 break;
2083
2084 } /* main loop */
2085
2086 /* Pop remaining stack entries */
2087
2088 while (!EMPTY()) {
2089 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00002090 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00002091 }
2092
Guido van Rossum96a42c81992-01-12 02:29:51 +00002093 if (why != WHY_RETURN)
2094 retval = NULL;
2095
Guido van Rossume59214e1994-08-30 08:01:59 +00002096 if (f->f_trace) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00002097 if (why == WHY_RETURN) {
Guido van Rossume59214e1994-08-30 08:01:59 +00002098 if (call_trace(&f->f_trace, &f->f_trace, f,
2099 "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002100 Py_XDECREF(retval);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002101 retval = NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002102 why = WHY_EXCEPTION;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002103 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002104 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002105 }
2106
Guido van Rossuma027efa1997-05-05 20:56:21 +00002107 if (tstate->sys_profilefunc && why == WHY_RETURN) {
2108 if (call_trace(&tstate->sys_profilefunc, (PyObject**)0,
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002109 f, "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002110 Py_XDECREF(retval);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002111 retval = NULL;
2112 why = WHY_EXCEPTION;
2113 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002114 }
Guido van Rossuma4240131997-01-21 21:18:36 +00002115
Guido van Rossuma027efa1997-05-05 20:56:21 +00002116 reset_exc_info(tstate);
2117
2118 --tstate->recursion_depth;
Guido van Rossum8c5df061997-01-24 04:19:24 +00002119
2120 fail: /* Jump here from prelude on failure */
Guido van Rossum96a42c81992-01-12 02:29:51 +00002121
Guido van Rossum374a9221991-04-04 10:40:29 +00002122 /* Restore previous frame and release the current one */
Guido van Rossum681d79a1995-07-18 14:51:37 +00002123
Guido van Rossuma027efa1997-05-05 20:56:21 +00002124 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +00002125 Py_DECREF(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00002126
Guido van Rossum96a42c81992-01-12 02:29:51 +00002127 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00002128}
2129
Guido van Rossuma027efa1997-05-05 20:56:21 +00002130static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002131set_exc_info(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002132{
2133 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002134 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00002135
Guido van Rossuma027efa1997-05-05 20:56:21 +00002136 frame = tstate->frame;
2137 if (frame->f_exc_type == NULL) {
2138 /* This frame didn't catch an exception before */
2139 /* Save previous exception of this thread in this frame */
Guido van Rossuma027efa1997-05-05 20:56:21 +00002140 if (tstate->exc_type == NULL) {
2141 Py_INCREF(Py_None);
2142 tstate->exc_type = Py_None;
2143 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002144 tmp_type = frame->f_exc_type;
2145 tmp_value = frame->f_exc_value;
2146 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002147 Py_XINCREF(tstate->exc_type);
2148 Py_XINCREF(tstate->exc_value);
2149 Py_XINCREF(tstate->exc_traceback);
2150 frame->f_exc_type = tstate->exc_type;
2151 frame->f_exc_value = tstate->exc_value;
2152 frame->f_exc_traceback = tstate->exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002153 Py_XDECREF(tmp_type);
2154 Py_XDECREF(tmp_value);
2155 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002156 }
2157 /* Set new exception for this thread */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002158 tmp_type = tstate->exc_type;
2159 tmp_value = tstate->exc_value;
2160 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002161 Py_XINCREF(type);
2162 Py_XINCREF(value);
2163 Py_XINCREF(tb);
2164 tstate->exc_type = type;
2165 tstate->exc_value = value;
2166 tstate->exc_traceback = tb;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002167 Py_XDECREF(tmp_type);
2168 Py_XDECREF(tmp_value);
2169 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002170 /* For b/w compatibility */
2171 PySys_SetObject("exc_type", type);
2172 PySys_SetObject("exc_value", value);
2173 PySys_SetObject("exc_traceback", tb);
2174}
2175
2176static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002177reset_exc_info(PyThreadState *tstate)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002178{
2179 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002180 PyObject *tmp_type, *tmp_value, *tmp_tb;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002181 frame = tstate->frame;
2182 if (frame->f_exc_type != NULL) {
2183 /* This frame caught an exception */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002184 tmp_type = tstate->exc_type;
2185 tmp_value = tstate->exc_value;
2186 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002187 Py_XINCREF(frame->f_exc_type);
2188 Py_XINCREF(frame->f_exc_value);
2189 Py_XINCREF(frame->f_exc_traceback);
2190 tstate->exc_type = frame->f_exc_type;
2191 tstate->exc_value = frame->f_exc_value;
2192 tstate->exc_traceback = frame->f_exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002193 Py_XDECREF(tmp_type);
2194 Py_XDECREF(tmp_value);
2195 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002196 /* For b/w compatibility */
2197 PySys_SetObject("exc_type", frame->f_exc_type);
2198 PySys_SetObject("exc_value", frame->f_exc_value);
2199 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
2200 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002201 tmp_type = frame->f_exc_type;
2202 tmp_value = frame->f_exc_value;
2203 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002204 frame->f_exc_type = NULL;
2205 frame->f_exc_value = NULL;
2206 frame->f_exc_traceback = NULL;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002207 Py_XDECREF(tmp_type);
2208 Py_XDECREF(tmp_value);
2209 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002210}
2211
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002212/* Logic for the raise statement (too complicated for inlining).
2213 This *consumes* a reference count to each of its arguments. */
Guido van Rossum1aa14831997-01-21 05:34:20 +00002214static enum why_code
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002215do_raise(PyObject *type, PyObject *value, PyObject *tb)
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002216{
Guido van Rossumd295f121998-04-09 21:39:57 +00002217 if (type == NULL) {
2218 /* Reraise */
2219 PyThreadState *tstate = PyThreadState_Get();
2220 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
2221 value = tstate->exc_value;
2222 tb = tstate->exc_traceback;
2223 Py_XINCREF(type);
2224 Py_XINCREF(value);
2225 Py_XINCREF(tb);
2226 }
2227
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002228 /* We support the following forms of raise:
2229 raise <class>, <classinstance>
2230 raise <class>, <argument tuple>
2231 raise <class>, None
2232 raise <class>, <argument>
2233 raise <classinstance>, None
2234 raise <string>, <object>
2235 raise <string>, None
2236
2237 An omitted second argument is the same as None.
2238
2239 In addition, raise <tuple>, <anything> is the same as
2240 raising the tuple's first item (and it better have one!);
2241 this rule is applied recursively.
2242
2243 Finally, an optional third argument can be supplied, which
2244 gives the traceback to be substituted (useful when
2245 re-raising an exception after examining it). */
2246
2247 /* First, check the traceback argument, replacing None with
2248 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002249 if (tb == Py_None) {
2250 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002251 tb = NULL;
2252 }
2253 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002254 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002255 "raise: arg 3 must be a traceback or None");
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002256 goto raise_error;
2257 }
2258
2259 /* Next, replace a missing value with None */
2260 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002261 value = Py_None;
2262 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002263 }
2264
2265 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00002266 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
2267 PyObject *tmp = type;
2268 type = PyTuple_GET_ITEM(type, 0);
2269 Py_INCREF(type);
2270 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002271 }
2272
Barry Warsaw4249f541997-08-22 21:26:19 +00002273 if (PyString_Check(type))
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002274 ;
Barry Warsaw4249f541997-08-22 21:26:19 +00002275
2276 else if (PyClass_Check(type))
2277 PyErr_NormalizeException(&type, &value, &tb);
2278
Guido van Rossumb209a111997-04-29 18:18:01 +00002279 else if (PyInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002280 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002281 if (value != Py_None) {
2282 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002283 "instance exception may not have a separate value");
2284 goto raise_error;
2285 }
2286 else {
2287 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00002288 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002289 value = type;
Guido van Rossumb209a111997-04-29 18:18:01 +00002290 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2291 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002292 }
2293 }
2294 else {
2295 /* Not something you can raise. You get an exception
2296 anyway, just not what you specified :-) */
Guido van Rossumb209a111997-04-29 18:18:01 +00002297 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002298 "exceptions must be strings, classes, or instances");
2299 goto raise_error;
2300 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002301 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002302 if (tb == NULL)
2303 return WHY_EXCEPTION;
2304 else
2305 return WHY_RERAISE;
2306 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002307 Py_XDECREF(value);
2308 Py_XDECREF(type);
2309 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002310 return WHY_EXCEPTION;
2311}
2312
Barry Warsawe42b18f1997-08-25 22:13:04 +00002313static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002314unpack_sequence(PyObject *v, int argcnt, PyObject **sp)
Barry Warsawe42b18f1997-08-25 22:13:04 +00002315{
2316 int i;
2317 PyObject *w;
2318
2319 for (i = 0; i < argcnt; i++) {
2320 if (! (w = PySequence_GetItem(v, i))) {
2321 if (PyErr_ExceptionMatches(PyExc_IndexError))
2322 PyErr_SetString(PyExc_ValueError,
2323 "unpack sequence of wrong size");
2324 goto finally;
2325 }
2326 *--sp = w;
2327 }
2328 /* we better get an IndexError now */
2329 if (PySequence_GetItem(v, i) == NULL) {
2330 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2331 PyErr_Clear();
2332 return 1;
2333 }
2334 /* some other exception occurred. fall through to finally */
2335 }
2336 else
2337 PyErr_SetString(PyExc_ValueError,
2338 "unpack sequence of wrong size");
2339 /* fall through */
2340finally:
Barry Warsaw91010551997-08-25 22:30:51 +00002341 for (; i > 0; i--, sp++)
2342 Py_DECREF(*sp);
Barry Warsawe42b18f1997-08-25 22:13:04 +00002343
2344 return 0;
2345}
2346
2347
Guido van Rossum96a42c81992-01-12 02:29:51 +00002348#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00002349static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002350prtrace(PyObject *v, char *str)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002351{
Guido van Rossum3f5da241990-12-20 15:06:42 +00002352 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00002353 if (PyObject_Print(v, stdout, 0) != 0)
2354 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00002355 printf("\n");
Guido van Rossumcc229ea2000-05-04 00:55:17 +00002356 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002357}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002358#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002359
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002360static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002361call_exc_trace(PyObject **p_trace, PyObject **p_newtrace, PyFrameObject *f)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002362{
Guido van Rossumb209a111997-04-29 18:18:01 +00002363 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002364 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002365 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002366 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002367 value = Py_None;
2368 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002369 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002370 arg = Py_BuildValue("(OOO)", type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002371 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002372 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002373 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002374 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002375 err = call_trace(p_trace, p_newtrace, f, "exception", arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002376 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002377 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00002378 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002379 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002380 Py_XDECREF(type);
2381 Py_XDECREF(value);
2382 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002383 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002384}
2385
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002386/* PyObject **p_trace: in/out; may not be NULL;
2387 may not point to NULL variable initially
2388 PyObject **p_newtrace: in/out; may be NULL;
2389 may point to NULL variable;
2390 may be same variable as p_newtrace */
2391
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002392static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002393call_trace(PyObject **p_trace, PyObject **p_newtrace, PyFrameObject *f,
2394 char *msg, PyObject *arg)
Guido van Rossum96a42c81992-01-12 02:29:51 +00002395{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002396 PyThreadState *tstate = f->f_tstate;
Guido van Rossumb209a111997-04-29 18:18:01 +00002397 PyObject *args, *what;
2398 PyObject *res = NULL;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002399
Guido van Rossuma027efa1997-05-05 20:56:21 +00002400 if (tstate->tracing) {
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002401 /* Don't do recursive traces */
2402 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002403 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002404 *p_newtrace = NULL;
2405 }
2406 return 0;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002407 }
2408
Guido van Rossumb209a111997-04-29 18:18:01 +00002409 args = PyTuple_New(3);
Guido van Rossumf10570b1995-07-07 22:53:21 +00002410 if (args == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002411 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002412 what = PyString_FromString(msg);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002413 if (what == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002414 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002415 Py_INCREF(f);
2416 PyTuple_SET_ITEM(args, 0, (PyObject *)f);
2417 PyTuple_SET_ITEM(args, 1, what);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002418 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002419 arg = Py_None;
2420 Py_INCREF(arg);
2421 PyTuple_SET_ITEM(args, 2, arg);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002422 tstate->tracing++;
Guido van Rossumb209a111997-04-29 18:18:01 +00002423 PyFrame_FastToLocals(f);
2424 res = PyEval_CallObject(*p_trace, args); /* May clear *p_trace! */
2425 PyFrame_LocalsToFast(f, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002426 tstate->tracing--;
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002427 cleanup:
Guido van Rossumb209a111997-04-29 18:18:01 +00002428 Py_XDECREF(args);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002429 if (res == NULL) {
2430 /* The trace proc raised an exception */
Guido van Rossumb209a111997-04-29 18:18:01 +00002431 PyTraceBack_Here(f);
2432 Py_XDECREF(*p_trace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002433 *p_trace = NULL;
2434 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002435 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002436 *p_newtrace = NULL;
2437 }
Barry Warsawf6202631999-09-08 16:26:33 +00002438 /* to be extra double plus sure we don't get recursive
2439 * calls inf either tracefunc or profilefunc gets an
2440 * exception, zap the global variables.
2441 */
2442 Py_XDECREF(tstate->sys_tracefunc);
2443 tstate->sys_tracefunc = NULL;
2444 Py_XDECREF(tstate->sys_profilefunc);
2445 tstate->sys_profilefunc = NULL;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002446 return -1;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002447 }
2448 else {
2449 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002450 Py_XDECREF(*p_newtrace);
2451 if (res == Py_None)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002452 *p_newtrace = NULL;
2453 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002454 Py_INCREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002455 *p_newtrace = res;
2456 }
2457 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002458 Py_DECREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002459 return 0;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002460 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002461}
2462
Guido van Rossumb209a111997-04-29 18:18:01 +00002463PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002464PyEval_GetBuiltins(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00002465{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002466 PyThreadState *tstate = PyThreadState_Get();
2467 PyFrameObject *current_frame = tstate->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002468 if (current_frame == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002469 return tstate->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00002470 else
2471 return current_frame->f_builtins;
2472}
2473
Guido van Rossumb209a111997-04-29 18:18:01 +00002474PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002475PyEval_GetLocals(void)
Guido van Rossum5b722181993-03-30 17:46:03 +00002476{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002477 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum5b722181993-03-30 17:46:03 +00002478 if (current_frame == NULL)
2479 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002480 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00002481 return current_frame->f_locals;
2482}
2483
Guido van Rossumb209a111997-04-29 18:18:01 +00002484PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002485PyEval_GetGlobals(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002486{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002487 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002488 if (current_frame == NULL)
2489 return NULL;
2490 else
2491 return current_frame->f_globals;
2492}
2493
Guido van Rossumb209a111997-04-29 18:18:01 +00002494PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002495PyEval_GetFrame(void)
Guido van Rossume59214e1994-08-30 08:01:59 +00002496{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002497 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossumb209a111997-04-29 18:18:01 +00002498 return (PyObject *)current_frame;
Guido van Rossume59214e1994-08-30 08:01:59 +00002499}
2500
Guido van Rossum6135a871995-01-09 17:53:26 +00002501int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002502PyEval_GetRestricted(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00002503{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002504 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002505 return current_frame == NULL ? 0 : current_frame->f_restricted;
2506}
2507
Guido van Rossumbe270261997-05-22 22:26:18 +00002508int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002509Py_FlushLine(void)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002510{
Guido van Rossumb209a111997-04-29 18:18:01 +00002511 PyObject *f = PySys_GetObject("stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00002512 if (f == NULL)
2513 return 0;
2514 if (!PyFile_SoftSpace(f, 0))
2515 return 0;
2516 return PyFile_WriteString("\n", f);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002517}
2518
Guido van Rossum3f5da241990-12-20 15:06:42 +00002519
Guido van Rossum681d79a1995-07-18 14:51:37 +00002520/* External interface to call any callable object.
2521 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002522
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002523#undef PyEval_CallObject
2524/* for backward compatibility: export this interface */
2525
Guido van Rossumb209a111997-04-29 18:18:01 +00002526PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002527PyEval_CallObject(PyObject *func, PyObject *arg)
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002528{
Guido van Rossumb209a111997-04-29 18:18:01 +00002529 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002530}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002531#define PyEval_CallObject(func,arg) \
2532 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00002533
Guido van Rossumb209a111997-04-29 18:18:01 +00002534PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002535PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum681d79a1995-07-18 14:51:37 +00002536{
Jeremy Hylton52820442001-01-03 23:52:36 +00002537 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002538
2539 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002540 arg = PyTuple_New(0);
2541 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002542 PyErr_SetString(PyExc_TypeError,
2543 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002544 return NULL;
2545 }
2546 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002547 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002548
Guido van Rossumb209a111997-04-29 18:18:01 +00002549 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002550 PyErr_SetString(PyExc_TypeError,
2551 "keyword list must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00002552 Py_DECREF(arg);
Guido van Rossume3e61c11995-08-04 04:14:47 +00002553 return NULL;
2554 }
2555
Jeremy Hylton52820442001-01-03 23:52:36 +00002556 result = call_object(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002557 Py_DECREF(arg);
Jeremy Hylton52820442001-01-03 23:52:36 +00002558 return result;
2559}
2560
2561/* How often is each kind of object called? The answer depends on the
2562 program. An instrumented call_object() was used to run the Python
2563 regression test suite. The results were:
2564 4200000 PyCFunctions
2565 390000 fast_function() calls
2566 94000 other functions
2567 480000 all functions (sum of prev two)
2568 150000 methods
2569 100000 classes
2570
2571 Tests on other bodies of code show that PyCFunctions are still
2572 most common, but not by such a large margin.
2573*/
2574
2575static PyObject *
2576call_object(PyObject *func, PyObject *arg, PyObject *kw)
2577{
2578 ternaryfunc call;
2579 PyObject *result;
2580
2581 if (PyMethod_Check(func))
2582 result = call_method(func, arg, kw);
2583 else if (PyFunction_Check(func))
2584 result = call_eval_code2(func, arg, kw);
2585 else if (PyCFunction_Check(func))
2586 result = call_cfunction(func, arg, kw);
2587 else if (PyClass_Check(func))
2588 result = PyInstance_New(func, arg, kw);
2589 else if (PyInstance_Check(func))
2590 result = call_instance(func, arg, kw);
2591 else if ((call = func->ob_type->tp_call) != NULL)
2592 result = (*call)(func, arg, kw);
2593 else {
2594 PyErr_Format(PyExc_TypeError, "object is not callable: %s",
2595 PyString_AS_STRING(PyObject_Repr(func)));
2596 return NULL;
2597 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002598 if (result == NULL && !PyErr_Occurred())
2599 PyErr_SetString(PyExc_SystemError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002600 "NULL result without error in call_object");
Guido van Rossume59214e1994-08-30 08:01:59 +00002601
2602 return result;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002603}
2604
Guido van Rossumb209a111997-04-29 18:18:01 +00002605static PyObject *
Jeremy Hylton52820442001-01-03 23:52:36 +00002606call_cfunction(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002607{
Jeremy Hylton52820442001-01-03 23:52:36 +00002608 PyCFunctionObject* f = (PyCFunctionObject*)func;
2609 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
2610 PyObject *self = PyCFunction_GET_SELF(func);
2611 int flags = PyCFunction_GET_FLAGS(func);
2612
Jeremy Hylton52820442001-01-03 23:52:36 +00002613 if (flags & METH_KEYWORDS) {
Fred Drake1a7aab72001-01-04 22:33:02 +00002614 if (kw == NULL) {
2615 static PyObject *dict = NULL;
2616 if (dict == NULL) {
2617 dict = PyDict_New();
2618 if (dict == NULL)
2619 return NULL;
2620 }
2621 kw = dict;
2622 Py_INCREF(dict);
2623 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002624 return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002625 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002626 if (kw != NULL && PyDict_Size(kw) != 0) {
2627 PyErr_Format(PyExc_TypeError,
2628 "%.200s() takes no keyword arguments",
2629 f->m_ml->ml_name);
2630 return NULL;
2631 }
Fred Drake1a7aab72001-01-04 22:33:02 +00002632 if (flags & METH_VARARGS) {
2633 return (*meth)(self, arg);
2634 }
2635 if (!(flags & METH_VARARGS)) {
2636 /* the really old style */
2637 int size = PyTuple_GET_SIZE(arg);
2638 if (size == 1)
2639 arg = PyTuple_GET_ITEM(arg, 0);
2640 else if (size == 0)
2641 arg = NULL;
2642 return (*meth)(self, arg);
2643 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002644 /* should never get here ??? */
2645 PyErr_BadInternalCall();
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002646 return NULL;
2647}
2648
Guido van Rossumb209a111997-04-29 18:18:01 +00002649static PyObject *
Jeremy Hylton52820442001-01-03 23:52:36 +00002650call_instance(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002651{
Jeremy Hylton52820442001-01-03 23:52:36 +00002652 PyObject *res, *call = PyObject_GetAttrString(func, "__call__");
2653 if (call == NULL) {
2654 PyInstanceObject *inst = (PyInstanceObject*) func;
2655 PyErr_Clear();
2656 PyErr_Format(PyExc_AttributeError,
2657 "%.200s instance has no __call__ method",
2658 PyString_AsString(inst->in_class->cl_name));
Guido van Rossum681d79a1995-07-18 14:51:37 +00002659 return NULL;
2660 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002661 res = call_object(call, arg, kw);
2662 Py_DECREF(call);
2663 return res;
2664}
2665
2666static PyObject *
2667call_method(PyObject *func, PyObject *arg, PyObject *kw)
2668{
2669 PyObject *self = PyMethod_GET_SELF(func);
2670 PyObject *class = PyMethod_GET_CLASS(func);
2671 PyObject *result;
2672
2673 func = PyMethod_GET_FUNCTION(func);
2674 if (self == NULL) {
2675 /* Unbound methods must be called with an instance of
2676 the class (or a derived class) as first argument */
2677 if (PyTuple_Size(arg) >= 1)
2678 self = PyTuple_GET_ITEM(arg, 0);
2679 if (!(self != NULL && PyInstance_Check(self)
2680 && PyClass_IsSubclass((PyObject *)
2681 (((PyInstanceObject *)self)->in_class),
2682 class))) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00002683 PyObject* fn = ((PyFunctionObject*) func)->func_name;
2684 PyErr_Format(PyExc_TypeError,
2685 "unbound method %s%smust be "
2686 "called with instance as first argument",
2687 fn ? PyString_AsString(fn) : "",
2688 fn ? "() " : "");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002689 return NULL;
2690 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002691 Py_INCREF(arg);
Jeremy Hylton52820442001-01-03 23:52:36 +00002692 } else {
2693 int argcount = PyTuple_Size(arg);
2694 PyObject *newarg = PyTuple_New(argcount + 1);
2695 int i;
2696 if (newarg == NULL)
2697 return NULL;
2698 Py_INCREF(self);
2699 PyTuple_SET_ITEM(newarg, 0, self);
2700 for (i = 0; i < argcount; i++) {
2701 PyObject *v = PyTuple_GET_ITEM(arg, i);
2702 Py_XINCREF(v);
2703 PyTuple_SET_ITEM(newarg, i+1, v);
2704 }
2705 arg = newarg;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002706 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002707 result = call_object(func, arg, kw);
2708 Py_DECREF(arg);
2709 return result;
2710}
2711
2712static PyObject *
2713call_eval_code2(PyObject *func, PyObject *arg, PyObject *kw)
2714{
2715 PyObject *result;
2716 PyObject *argdefs;
2717 PyObject **d, **k;
2718 int nk, nd;
2719
2720 argdefs = PyFunction_GET_DEFAULTS(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00002721 if (argdefs != NULL && PyTuple_Check(argdefs)) {
2722 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
2723 nd = PyTuple_Size(argdefs);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002724 }
2725 else {
2726 d = NULL;
2727 nd = 0;
2728 }
2729
2730 if (kw != NULL) {
2731 int pos, i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002732 nk = PyDict_Size(kw);
2733 k = PyMem_NEW(PyObject *, 2*nk);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002734 if (k == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002735 PyErr_NoMemory();
2736 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002737 return NULL;
Guido van Rossume59214e1994-08-30 08:01:59 +00002738 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002739 pos = i = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002740 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002741 i += 2;
2742 nk = i/2;
2743 /* XXX This is broken if the caller deletes dict items! */
2744 }
2745 else {
2746 k = NULL;
2747 nk = 0;
Guido van Rossume59214e1994-08-30 08:01:59 +00002748 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002749
Guido van Rossum681d79a1995-07-18 14:51:37 +00002750 result = eval_code2(
Jeremy Hylton52820442001-01-03 23:52:36 +00002751 (PyCodeObject *)PyFunction_GET_CODE(func),
2752 PyFunction_GET_GLOBALS(func), (PyObject *)NULL,
Guido van Rossumb209a111997-04-29 18:18:01 +00002753 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
Guido van Rossum681d79a1995-07-18 14:51:37 +00002754 k, nk,
Jeremy Hylton52820442001-01-03 23:52:36 +00002755 d, nd);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002756
Guido van Rossumb18618d2000-05-03 23:44:39 +00002757 if (k != NULL)
2758 PyMem_DEL(k);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002759
Guido van Rossum681d79a1995-07-18 14:51:37 +00002760 return result;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002761}
2762
Jeremy Hylton52820442001-01-03 23:52:36 +00002763#define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))
2764
2765/* The two fast_xxx() functions optimize calls for which no argument
2766 tuple is necessary; the objects are passed directly from the stack.
2767 fast_cfunction() is called for METH_OLDARGS functions.
2768 fast_function() is for functions with no special argument handling.
2769*/
2770
2771static PyObject *
2772fast_cfunction(PyObject *func, PyObject ***pp_stack, int na)
2773{
2774 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
2775 PyObject *self = PyCFunction_GET_SELF(func);
2776
2777 if (na == 0)
2778 return (*meth)(self, NULL);
Charles G. Waldmaneec72a72001-01-10 22:11:59 +00002779 else if (na == 1) {
2780 PyObject *arg = EXT_POP(*pp_stack);
2781 PyObject *result = (*meth)(self, arg);
2782 Py_DECREF(arg);
2783 return result;
2784 } else {
Jeremy Hylton52820442001-01-03 23:52:36 +00002785 PyObject *args = load_args(pp_stack, na);
2786 PyObject *result = (*meth)(self, args);
2787 Py_DECREF(args);
2788 return result;
2789 }
2790}
2791
2792static PyObject *
2793fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
2794{
2795 PyObject *co = PyFunction_GET_CODE(func);
2796 PyObject *globals = PyFunction_GET_GLOBALS(func);
2797 PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
2798 PyObject **d = NULL;
2799 int nd = 0;
2800
2801 if (argdefs != NULL) {
2802 d = &PyTuple_GET_ITEM(argdefs, 0);
2803 nd = ((PyTupleObject *)argdefs)->ob_size;
2804 }
2805 return eval_code2((PyCodeObject *)co, globals,
2806 (PyObject *)NULL, (*pp_stack)-n, na,
2807 (*pp_stack)-2*nk, nk, d, nd);
2808}
2809
2810static PyObject *
Ka-Ping Yee20579702001-01-15 22:14:16 +00002811update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack,
2812 PyObject *func)
Jeremy Hylton52820442001-01-03 23:52:36 +00002813{
2814 PyObject *kwdict = NULL;
2815 if (orig_kwdict == NULL)
2816 kwdict = PyDict_New();
2817 else {
2818 kwdict = PyDict_Copy(orig_kwdict);
2819 Py_DECREF(orig_kwdict);
2820 }
2821 if (kwdict == NULL)
2822 return NULL;
2823 while (--nk >= 0) {
2824 int err;
2825 PyObject *value = EXT_POP(*pp_stack);
2826 PyObject *key = EXT_POP(*pp_stack);
2827 if (PyDict_GetItem(kwdict, key) != NULL) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00002828 PyObject* fn = ((PyFunctionObject*) func)->func_name;
2829 PyErr_Format(PyExc_TypeError,
2830 "%.200s%s got multiple values "
2831 "for keyword argument '%.400s'",
2832 fn ? PyString_AsString(fn) : "function",
2833 fn ? "()" : "", PyString_AsString(key));
Jeremy Hylton52820442001-01-03 23:52:36 +00002834 Py_DECREF(key);
2835 Py_DECREF(value);
2836 Py_DECREF(kwdict);
2837 return NULL;
2838 }
2839 err = PyDict_SetItem(kwdict, key, value);
2840 Py_DECREF(key);
2841 Py_DECREF(value);
2842 if (err) {
2843 Py_DECREF(kwdict);
2844 return NULL;
2845 }
2846 }
2847 return kwdict;
2848}
2849
2850static PyObject *
2851update_star_args(int nstack, int nstar, PyObject *stararg,
2852 PyObject ***pp_stack)
2853{
2854 PyObject *callargs, *w;
2855
2856 callargs = PyTuple_New(nstack + nstar);
2857 if (callargs == NULL) {
2858 return NULL;
2859 }
2860 if (nstar) {
2861 int i;
2862 for (i = 0; i < nstar; i++) {
2863 PyObject *a = PyTuple_GET_ITEM(stararg, i);
2864 Py_INCREF(a);
2865 PyTuple_SET_ITEM(callargs, nstack + i, a);
2866 }
2867 }
2868 while (--nstack >= 0) {
2869 w = EXT_POP(*pp_stack);
2870 PyTuple_SET_ITEM(callargs, nstack, w);
2871 }
2872 return callargs;
2873}
2874
2875static PyObject *
2876load_args(PyObject ***pp_stack, int na)
2877{
2878 PyObject *args = PyTuple_New(na);
2879 PyObject *w;
2880
2881 if (args == NULL)
2882 return NULL;
2883 while (--na >= 0) {
2884 w = EXT_POP(*pp_stack);
2885 PyTuple_SET_ITEM(args, na, w);
2886 }
2887 return args;
2888}
2889
2890static PyObject *
2891do_call(PyObject *func, PyObject ***pp_stack, int na, int nk)
2892{
2893 PyObject *callargs = NULL;
2894 PyObject *kwdict = NULL;
2895 PyObject *result = NULL;
2896
2897 if (nk > 0) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00002898 kwdict = update_keyword_args(NULL, nk, pp_stack, func);
Jeremy Hylton52820442001-01-03 23:52:36 +00002899 if (kwdict == NULL)
2900 goto call_fail;
2901 }
2902 callargs = load_args(pp_stack, na);
2903 if (callargs == NULL)
2904 goto call_fail;
2905 result = call_object(func, callargs, kwdict);
2906 call_fail:
2907 Py_XDECREF(callargs);
2908 Py_XDECREF(kwdict);
2909 return result;
2910}
2911
2912static PyObject *
2913ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
2914{
2915 int nstar = 0;
2916 PyObject *callargs = NULL;
2917 PyObject *stararg = NULL;
2918 PyObject *kwdict = NULL;
2919 PyObject *result = NULL;
2920
2921 if (flags & CALL_FLAG_KW) {
2922 kwdict = EXT_POP(*pp_stack);
2923 if (!(kwdict && PyDict_Check(kwdict))) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00002924 PyObject* fn = ((PyFunctionObject*) func)->func_name;
2925 PyErr_Format(PyExc_TypeError,
2926 "%s%s argument after ** must be a dictionary",
2927 fn ? PyString_AsString(fn) : "function",
2928 fn ? "()" : "");
Jeremy Hylton52820442001-01-03 23:52:36 +00002929 goto ext_call_fail;
2930 }
2931 }
2932 if (flags & CALL_FLAG_VAR) {
2933 stararg = EXT_POP(*pp_stack);
2934 if (!PyTuple_Check(stararg)) {
2935 PyObject *t = NULL;
2936 t = PySequence_Tuple(stararg);
2937 if (t == NULL) {
2938 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00002939 PyObject* fn =
2940 ((PyFunctionObject*) func)->func_name;
2941 PyErr_Format(PyExc_TypeError,
2942 "%s%s argument after * must be a sequence",
2943 fn ? PyString_AsString(fn) : "function",
2944 fn ? "()" : "");
Jeremy Hylton52820442001-01-03 23:52:36 +00002945 }
2946 goto ext_call_fail;
2947 }
2948 Py_DECREF(stararg);
2949 stararg = t;
2950 }
2951 nstar = PyTuple_GET_SIZE(stararg);
2952 }
2953 if (nk > 0) {
Ka-Ping Yee20579702001-01-15 22:14:16 +00002954 kwdict = update_keyword_args(kwdict, nk, pp_stack, func);
Jeremy Hylton52820442001-01-03 23:52:36 +00002955 if (kwdict == NULL)
2956 goto ext_call_fail;
2957 }
2958 callargs = update_star_args(na, nstar, stararg, pp_stack);
2959 if (callargs == NULL)
2960 goto ext_call_fail;
2961 result = call_object(func, callargs, kwdict);
2962 ext_call_fail:
2963 Py_XDECREF(callargs);
2964 Py_XDECREF(kwdict);
2965 Py_XDECREF(stararg);
2966 return result;
2967}
2968
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002969#define SLICE_ERROR_MSG \
2970 "standard sequence type does not support step size other than one"
2971
Guido van Rossumb209a111997-04-29 18:18:01 +00002972static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002973loop_subscript(PyObject *v, PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002974{
Guido van Rossumb209a111997-04-29 18:18:01 +00002975 PySequenceMethods *sq = v->ob_type->tp_as_sequence;
Guido van Rossume59214e1994-08-30 08:01:59 +00002976 int i;
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002977 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002978 PyErr_SetString(PyExc_TypeError, "loop over non-sequence");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002979 return NULL;
2980 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002981 i = PyInt_AsLong(w);
Guido van Rossume59214e1994-08-30 08:01:59 +00002982 v = (*sq->sq_item)(v, i);
2983 if (v)
2984 return v;
Barry Warsaw4249f541997-08-22 21:26:19 +00002985 if (PyErr_ExceptionMatches(PyExc_IndexError))
Guido van Rossumb209a111997-04-29 18:18:01 +00002986 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002987 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002988}
2989
Guido van Rossum20c6add2000-05-08 14:06:50 +00002990/* Extract a slice index from a PyInt or PyLong, the index is bound to
2991 the range [-INT_MAX+1, INTMAX]. Returns 0 and an exception if there is
2992 and error. Returns 1 on success.*/
2993
2994int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002995_PyEval_SliceIndex(PyObject *v, int *pi)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002996{
2997 if (v != NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002998 long x;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002999 if (PyInt_Check(v)) {
3000 x = PyInt_AsLong(v);
3001 } else if (PyLong_Check(v)) {
3002 x = PyLong_AsLong(v);
3003 if (x==-1 && PyErr_Occurred()) {
3004 PyObject *long_zero;
3005
3006 if (!PyErr_ExceptionMatches( PyExc_OverflowError ) ) {
3007 /* It's not an overflow error, so just
3008 signal an error */
Guido van Rossum20c6add2000-05-08 14:06:50 +00003009 return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00003010 }
3011
3012 /* It's an overflow error, so we need to
3013 check the sign of the long integer,
3014 set the value to INT_MAX or 0, and clear
3015 the error. */
3016
3017 /* Create a long integer with a value of 0 */
3018 long_zero = PyLong_FromLong( 0L );
Guido van Rossum20c6add2000-05-08 14:06:50 +00003019 if (long_zero == NULL) return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00003020
3021 /* Check sign */
3022 if (PyObject_Compare(long_zero, v) < 0)
3023 x = INT_MAX;
3024 else
3025 x = 0;
3026
3027 /* Free the long integer we created, and clear the
3028 OverflowError */
3029 Py_DECREF(long_zero);
3030 PyErr_Clear();
3031 }
3032 } else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003033 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003034 "slice indices must be integers");
Guido van Rossum20c6add2000-05-08 14:06:50 +00003035 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003036 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00003037 /* Truncate -- very long indices are truncated anyway */
3038 if (x > INT_MAX)
3039 x = INT_MAX;
3040 else if (x < -INT_MAX)
3041 x = 0;
3042 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003043 }
Guido van Rossum20c6add2000-05-08 14:06:50 +00003044 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003045}
3046
Guido van Rossumb209a111997-04-29 18:18:01 +00003047static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003048apply_slice(PyObject *u, PyObject *v, PyObject *w) /* return u[v:w] */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003049{
Guido van Rossuma027efa1997-05-05 20:56:21 +00003050 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003051 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003052 return NULL;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003053 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum04691fc1992-08-12 15:35:34 +00003054 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00003055 return PySequence_GetSlice(u, ilow, ihigh);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003056}
Guido van Rossum3f5da241990-12-20 15:06:42 +00003057
3058static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003059assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x) /* u[v:w] = x */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003060{
Guido van Rossuma027efa1997-05-05 20:56:21 +00003061 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003062 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum3f5da241990-12-20 15:06:42 +00003063 return -1;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003064 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum3f5da241990-12-20 15:06:42 +00003065 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00003066 if (x == NULL)
3067 return PySequence_DelSlice(u, ilow, ihigh);
3068 else
3069 return PySequence_SetSlice(u, ilow, ihigh, x);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003070}
3071
Guido van Rossumb209a111997-04-29 18:18:01 +00003072static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003073cmp_outcome(int op, register PyObject *v, register PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003074{
3075 register int cmp;
3076 register int res = 0;
3077 switch (op) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00003078 case IS:
3079 case IS_NOT:
3080 res = (v == w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00003081 if (op == (int) IS_NOT)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003082 res = !res;
3083 break;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003084 case IN:
3085 case NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00003086 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00003087 if (res < 0)
3088 return NULL;
Guido van Rossum04691fc1992-08-12 15:35:34 +00003089 if (op == (int) NOT_IN)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003090 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003091 break;
3092 case EXC_MATCH:
Barry Warsaw4249f541997-08-22 21:26:19 +00003093 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003094 break;
3095 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00003096 cmp = PyObject_Compare(v, w);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00003097 if (cmp && PyErr_Occurred())
3098 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00003099 switch (op) {
3100 case LT: res = cmp < 0; break;
3101 case LE: res = cmp <= 0; break;
3102 case EQ: res = cmp == 0; break;
3103 case NE: res = cmp != 0; break;
3104 case GT: res = cmp > 0; break;
3105 case GE: res = cmp >= 0; break;
3106 /* XXX no default? (res is initialized to 0 though) */
3107 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003108 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003109 v = res ? Py_True : Py_False;
3110 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003111 return v;
3112}
3113
Thomas Wouters52152252000-08-17 22:55:00 +00003114static PyObject *
3115import_from(PyObject *v, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00003116{
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003117 PyObject *x;
3118
3119 x = PyObject_GetAttr(v, name);
3120 if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
Thomas Wouters52152252000-08-17 22:55:00 +00003121 PyErr_Format(PyExc_ImportError,
3122 "cannot import name %.230s",
3123 PyString_AsString(name));
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003124 }
Thomas Wouters52152252000-08-17 22:55:00 +00003125 return x;
3126}
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003127
Thomas Wouters52152252000-08-17 22:55:00 +00003128static int
3129import_all_from(PyObject *locals, PyObject *v)
3130{
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003131 PyObject *all = PyObject_GetAttrString(v, "__all__");
3132 PyObject *dict, *name, *value;
3133 int skip_leading_underscores = 0;
3134 int pos, err;
Thomas Wouters52152252000-08-17 22:55:00 +00003135
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003136 if (all == NULL) {
3137 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
3138 return -1; /* Unexpected error */
3139 PyErr_Clear();
3140 dict = PyObject_GetAttrString(v, "__dict__");
3141 if (dict == NULL) {
3142 if (!PyErr_ExceptionMatches(PyExc_AttributeError))
3143 return -1;
3144 PyErr_SetString(PyExc_ImportError,
3145 "from-import-* object has no __dict__ and no __all__");
Guido van Rossum3f5da241990-12-20 15:06:42 +00003146 return -1;
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003147 }
3148 all = PyMapping_Keys(dict);
3149 Py_DECREF(dict);
3150 if (all == NULL)
3151 return -1;
3152 skip_leading_underscores = 1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003153 }
Guido van Rossum18d4d8f2001-01-12 16:24:03 +00003154
3155 for (pos = 0, err = 0; ; pos++) {
3156 name = PySequence_GetItem(all, pos);
3157 if (name == NULL) {
3158 if (!PyErr_ExceptionMatches(PyExc_IndexError))
3159 err = -1;
3160 else
3161 PyErr_Clear();
3162 break;
3163 }
3164 if (skip_leading_underscores &&
3165 PyString_Check(name) &&
3166 PyString_AS_STRING(name)[0] == '_')
3167 {
3168 Py_DECREF(name);
3169 continue;
3170 }
3171 value = PyObject_GetAttr(v, name);
3172 if (value == NULL)
3173 err = -1;
3174 else
3175 err = PyDict_SetItem(locals, name, value);
3176 Py_DECREF(name);
3177 Py_XDECREF(value);
3178 if (err != 0)
3179 break;
3180 }
3181 Py_DECREF(all);
3182 return err;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003183}
3184
Guido van Rossumb209a111997-04-29 18:18:01 +00003185static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003186build_class(PyObject *methods, PyObject *bases, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00003187{
Guido van Rossumcd649651997-08-22 16:56:16 +00003188 int i, n;
Guido van Rossumb209a111997-04-29 18:18:01 +00003189 if (!PyTuple_Check(bases)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003190 PyErr_SetString(PyExc_SystemError,
3191 "build_class with non-tuple bases");
Guido van Rossum25831651993-05-19 14:50:45 +00003192 return NULL;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003193 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003194 if (!PyDict_Check(methods)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003195 PyErr_SetString(PyExc_SystemError,
3196 "build_class with non-dictionary");
Guido van Rossume9736fc1990-11-18 17:33:06 +00003197 return NULL;
3198 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003199 if (!PyString_Check(name)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003200 PyErr_SetString(PyExc_SystemError,
Guido van Rossum7a5b7962000-03-31 13:52:29 +00003201 "build_class with non-string name");
Guido van Rossum25831651993-05-19 14:50:45 +00003202 return NULL;
3203 }
Guido van Rossumcd649651997-08-22 16:56:16 +00003204 n = PyTuple_Size(bases);
3205 for (i = 0; i < n; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003206 PyObject *base = PyTuple_GET_ITEM(bases, i);
3207 if (!PyClass_Check(base)) {
Guido van Rossum150b2df1996-12-05 23:17:11 +00003208 /* Call the base's *type*, if it is callable.
3209 This code is a hook for Donald Beaudry's
3210 and Jim Fulton's type extensions. In
Thomas Wouters7e474022000-07-16 12:04:32 +00003211 unextended Python it will never be triggered
Guido van Rossum55b9ab51997-07-31 03:54:02 +00003212 since its types are not callable.
3213 Ditto: call the bases's *class*, if it has
3214 one. This makes the same thing possible
3215 without writing C code. A true meta-object
3216 protocol! */
3217 PyObject *basetype = (PyObject *)base->ob_type;
3218 PyObject *callable = NULL;
3219 if (PyCallable_Check(basetype))
3220 callable = basetype;
3221 else
3222 callable = PyObject_GetAttrString(
3223 base, "__class__");
3224 if (callable) {
3225 PyObject *args;
3226 PyObject *newclass = NULL;
3227 args = Py_BuildValue(
3228 "(OOO)", name, bases, methods);
3229 if (args != NULL) {
3230 newclass = PyEval_CallObject(
3231 callable, args);
3232 Py_DECREF(args);
3233 }
Guido van Rossum730806d1998-04-10 22:27:42 +00003234 if (callable != basetype) {
Guido van Rossum55b9ab51997-07-31 03:54:02 +00003235 Py_DECREF(callable);
Guido van Rossum730806d1998-04-10 22:27:42 +00003236 }
Guido van Rossum55b9ab51997-07-31 03:54:02 +00003237 return newclass;
Guido van Rossum150b2df1996-12-05 23:17:11 +00003238 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003239 PyErr_SetString(PyExc_TypeError,
Guido van Rossum25831651993-05-19 14:50:45 +00003240 "base is not a class object");
3241 return NULL;
3242 }
3243 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003244 return PyClass_New(bases, methods, name);
Guido van Rossum25831651993-05-19 14:50:45 +00003245}
3246
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003247static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003248exec_statement(PyFrameObject *f, PyObject *prog, PyObject *globals,
3249 PyObject *locals)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003250{
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003251 int n;
Guido van Rossumb209a111997-04-29 18:18:01 +00003252 PyObject *v;
Guido van Rossum681d79a1995-07-18 14:51:37 +00003253 int plain = 0;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003254
Guido van Rossumb209a111997-04-29 18:18:01 +00003255 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
3256 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003257 /* Backward compatibility hack */
Guido van Rossumb209a111997-04-29 18:18:01 +00003258 globals = PyTuple_GetItem(prog, 1);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003259 if (n == 3)
Guido van Rossumb209a111997-04-29 18:18:01 +00003260 locals = PyTuple_GetItem(prog, 2);
3261 prog = PyTuple_GetItem(prog, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003262 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003263 if (globals == Py_None) {
3264 globals = PyEval_GetGlobals();
3265 if (locals == Py_None) {
3266 locals = PyEval_GetLocals();
Guido van Rossum681d79a1995-07-18 14:51:37 +00003267 plain = 1;
3268 }
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003269 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003270 else if (locals == Py_None)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003271 locals = globals;
Guido van Rossumb209a111997-04-29 18:18:01 +00003272 if (!PyString_Check(prog) &&
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +00003273 !PyUnicode_Check(prog) &&
Guido van Rossumb209a111997-04-29 18:18:01 +00003274 !PyCode_Check(prog) &&
3275 !PyFile_Check(prog)) {
3276 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003277 "exec: arg 1 must be a string, file, or code object");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003278 return -1;
3279 }
Fred Drake661ea262000-10-24 19:57:45 +00003280 if (!PyDict_Check(globals)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003281 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003282 "exec: arg 2 must be a dictionary or None");
3283 return -1;
3284 }
3285 if (!PyDict_Check(locals)) {
3286 PyErr_SetString(PyExc_TypeError,
3287 "exec: arg 3 must be a dictionary or None");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003288 return -1;
3289 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003290 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00003291 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
Guido van Rossumb209a111997-04-29 18:18:01 +00003292 if (PyCode_Check(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003293 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003294 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003295 else if (PyFile_Check(prog)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003296 FILE *fp = PyFile_AsFile(prog);
3297 char *name = PyString_AsString(PyFile_Name(prog));
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003298 v = PyRun_File(fp, name, Py_file_input, globals, locals);
3299 }
3300 else {
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +00003301 char *str;
3302 if (PyString_AsStringAndSize(prog, &str, NULL))
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003303 return -1;
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +00003304 v = PyRun_String(str, Py_file_input, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003305 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003306 if (plain)
3307 PyFrame_LocalsToFast(f, 0);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003308 if (v == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003309 return -1;
Guido van Rossumb209a111997-04-29 18:18:01 +00003310 Py_DECREF(v);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003311 return 0;
3312}
Guido van Rossum24c13741995-02-14 09:42:43 +00003313
Paul Prescode68140d2000-08-30 20:25:01 +00003314static void
3315format_exc_check_arg(PyObject *exc, char *format_str, PyObject *obj)
3316{
3317 char *obj_str;
3318
3319 if (!obj)
3320 return;
3321
3322 obj_str = PyString_AsString(obj);
3323 if (!obj_str)
3324 return;
3325
3326 PyErr_Format(exc, format_str, obj_str);
3327}
Guido van Rossum950361c1997-01-24 13:49:28 +00003328
3329#ifdef DYNAMIC_EXECUTION_PROFILE
3330
3331PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003332getarray(long a[256])
Guido van Rossum950361c1997-01-24 13:49:28 +00003333{
3334 int i;
3335 PyObject *l = PyList_New(256);
3336 if (l == NULL) return NULL;
3337 for (i = 0; i < 256; i++) {
3338 PyObject *x = PyInt_FromLong(a[i]);
3339 if (x == NULL) {
3340 Py_DECREF(l);
3341 return NULL;
3342 }
3343 PyList_SetItem(l, i, x);
3344 }
3345 for (i = 0; i < 256; i++)
3346 a[i] = 0;
3347 return l;
3348}
3349
3350PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003351_Py_GetDXProfile(PyObject *self, PyObject *args)
Guido van Rossum950361c1997-01-24 13:49:28 +00003352{
3353#ifndef DXPAIRS
3354 return getarray(dxp);
3355#else
3356 int i;
3357 PyObject *l = PyList_New(257);
3358 if (l == NULL) return NULL;
3359 for (i = 0; i < 257; i++) {
3360 PyObject *x = getarray(dxpairs[i]);
3361 if (x == NULL) {
3362 Py_DECREF(l);
3363 return NULL;
3364 }
3365 PyList_SetItem(l, i, x);
3366 }
3367 return l;
3368#endif
3369}
3370
3371#endif