blob: 1559456e6bf9344721635ff20d4c8e3917c0f962 [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);
51static PyObject *update_keyword_args(PyObject *, int, PyObject ***);
52static PyObject *update_star_args(int, int, PyObject *, PyObject ***);
53static 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,
Fred Drake661ea262000-10-24 19:57:45 +0000454 "too many arguments to %s(); "
455 "expected %d, got %d",
456 PyString_AsString(co->co_name),
457 co->co_argcount, argcount);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000458 goto fail;
459 }
460 n = co->co_argcount;
461 }
462 for (i = 0; i < n; i++) {
463 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000464 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000465 SETLOCAL(i, x);
466 }
467 if (co->co_flags & CO_VARARGS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000468 u = PyTuple_New(argcount - n);
Guido van Rossum8c5df061997-01-24 04:19:24 +0000469 if (u == NULL)
470 goto fail;
471 SETLOCAL(co->co_argcount, u);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000472 for (i = n; i < argcount; i++) {
473 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000474 Py_INCREF(x);
475 PyTuple_SET_ITEM(u, i-n, x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000476 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000477 }
478 for (i = 0; i < kwcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000479 PyObject *keyword = kws[2*i];
480 PyObject *value = kws[2*i + 1];
Guido van Rossum681d79a1995-07-18 14:51:37 +0000481 int j;
Guido van Rossum25da5be1999-10-26 00:12:20 +0000482 if (keyword == NULL || !PyString_Check(keyword)) {
483 PyErr_SetString(PyExc_TypeError,
484 "keywords must be strings");
485 goto fail;
486 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000487 /* XXX slow -- speed up using dictionary? */
488 for (j = 0; j < co->co_argcount; j++) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000489 PyObject *nm = PyTuple_GET_ITEM(
490 co->co_varnames, j);
Guido van Rossumb209a111997-04-29 18:18:01 +0000491 if (PyObject_Compare(keyword, nm) == 0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000492 break;
493 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000494 /* Check errors from Compare */
495 if (PyErr_Occurred())
496 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000497 if (j >= co->co_argcount) {
498 if (kwdict == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000499 PyErr_Format(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000500 "%.200s() got an unexpected "
501 "keyword argument '%.400s'",
502 PyString_AsString(co->co_name),
Jeremy Hylton76901512000-03-28 23:49:17 +0000503 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000504 goto fail;
505 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000506 PyDict_SetItem(kwdict, keyword, value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000507 }
508 else {
509 if (GETLOCAL(j) != NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +0000510 PyErr_Format(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000511 "keyword parameter '%.400s' "
512 "redefined in call to %.200s()",
513 PyString_AsString(keyword),
514 PyString_AsString(co->co_name));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000515 goto fail;
516 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000517 Py_INCREF(value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000518 SETLOCAL(j, value);
519 }
520 }
521 if (argcount < co->co_argcount) {
522 int m = co->co_argcount - defcount;
523 for (i = argcount; i < m; i++) {
524 if (GETLOCAL(i) == NULL) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000525 PyErr_Format(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +0000526 "not enough arguments to "
527 "%.200s(); expected %d, got %d",
528 PyString_AsString(co->co_name),
529 m, i);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000530 goto fail;
531 }
532 }
533 if (n > m)
534 i = n - m;
535 else
536 i = 0;
537 for (; i < defcount; i++) {
538 if (GETLOCAL(m+i) == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000539 PyObject *def = defs[i];
540 Py_INCREF(def);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000541 SETLOCAL(m+i, def);
542 }
543 }
544 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000545 }
546 else {
547 if (argcount > 0 || kwcount > 0) {
Fred Drake661ea262000-10-24 19:57:45 +0000548 PyErr_Format(PyExc_TypeError,
549 "%.200s() expected no arguments",
550 PyString_AsString(co->co_name));
Guido van Rossum8c5df061997-01-24 04:19:24 +0000551 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000552 }
553 }
554
Guido van Rossuma027efa1997-05-05 20:56:21 +0000555 if (tstate->sys_tracefunc != NULL) {
556 /* tstate->sys_tracefunc, if defined, is a function that
557 will be called on *every* entry to a code block.
Guido van Rossum96a42c81992-01-12 02:29:51 +0000558 Its return value, if not None, is a function that
559 will be called at the start of each executed line
560 of code. (Actually, the function must return
561 itself in order to continue tracing.)
562 The trace functions are called with three arguments:
563 a pointer to the current frame, a string indicating
564 why the function is called, and an argument which
565 depends on the situation. The global trace function
566 (sys.trace) is also called whenever an exception
567 is detected. */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000568 if (call_trace(&tstate->sys_tracefunc,
569 &f->f_trace, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000570 Py_None/*XXX how to compute arguments now?*/)) {
Guido van Rossum96a42c81992-01-12 02:29:51 +0000571 /* Trace function raised an error */
Guido van Rossum8c5df061997-01-24 04:19:24 +0000572 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000573 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000574 }
575
Guido van Rossuma027efa1997-05-05 20:56:21 +0000576 if (tstate->sys_profilefunc != NULL) {
577 /* Similar for sys_profilefunc, except it needn't return
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000578 itself and isn't called for "line" events */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000579 if (call_trace(&tstate->sys_profilefunc,
580 (PyObject**)0, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000581 Py_None/*XXX*/)) {
Guido van Rossum8c5df061997-01-24 04:19:24 +0000582 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000583 }
584 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000585
Jeremy Hyltonee5adfb2000-08-31 19:23:01 +0000586 if (++tstate->recursion_depth > recursion_limit) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000587 --tstate->recursion_depth;
588 PyErr_SetString(PyExc_RuntimeError,
Fred Drake661ea262000-10-24 19:57:45 +0000589 "maximum recursion depth exceeded");
Guido van Rossuma027efa1997-05-05 20:56:21 +0000590 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +0000591 Py_DECREF(f);
Guido van Rossum8861b741996-07-30 16:49:37 +0000592 return NULL;
593 }
594
Guido van Rossumd076c731998-10-07 19:42:25 +0000595 _PyCode_GETCODEPTR(co, &first_instr);
596 next_instr = first_instr;
Guido van Rossum374a9221991-04-04 10:40:29 +0000597 stack_pointer = f->f_valuestack;
598
Guido van Rossum374a9221991-04-04 10:40:29 +0000599 why = WHY_NOT;
600 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000601 x = Py_None; /* Not a reference, just anything non-NULL */
Fred Drake48fba732000-10-11 13:54:07 +0000602 w = NULL;
Guido van Rossum374a9221991-04-04 10:40:29 +0000603
604 for (;;) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000605 /* Do periodic things. Doing this every time through
606 the loop would add too much overhead, so we do it
607 only every Nth instruction. We also do it if
608 ``things_to_do'' is set, i.e. when an asynchronous
609 event needs attention (e.g. a signal handler or
610 async I/O handler); see Py_AddPendingCall() and
611 Py_MakePendingCalls() above. */
Guido van Rossuma9672091994-09-14 13:31:22 +0000612
Guido van Rossuma027efa1997-05-05 20:56:21 +0000613 if (things_to_do || --tstate->ticker < 0) {
Guido van Rossum25ce5661997-08-02 03:10:38 +0000614 tstate->ticker = tstate->interp->checkinterval;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000615 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000616 if (Py_MakePendingCalls() < 0) {
617 why = WHY_EXCEPTION;
618 goto on_error;
619 }
620 }
Guido van Rossumdf0d00e1997-05-20 15:57:49 +0000621#if !defined(HAVE_SIGNAL_H) || defined(macintosh)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000622 /* If we have true signals, the signal handler
623 will call Py_AddPendingCall() so we don't
624 have to call sigcheck(). On the Mac and
625 DOS, alas, we have to call it. */
Guido van Rossumb209a111997-04-29 18:18:01 +0000626 if (PyErr_CheckSignals()) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000627 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +0000628 goto on_error;
629 }
Guido van Rossum70d44781997-01-21 06:15:24 +0000630#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000631
Guido van Rossume59214e1994-08-30 08:01:59 +0000632#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000633 if (interpreter_lock) {
634 /* Give another thread a chance */
635
Guido van Rossum25ce5661997-08-02 03:10:38 +0000636 if (PyThreadState_Swap(NULL) != tstate)
637 Py_FatalError("ceval: tstate mix-up");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000638 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000639
640 /* Other threads may run now */
641
Guido van Rossum65d5b571998-12-21 19:32:43 +0000642 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000643 if (PyThreadState_Swap(tstate) != NULL)
644 Py_FatalError("ceval: orphan tstate");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000645 }
646#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000647 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000648
Guido van Rossum374a9221991-04-04 10:40:29 +0000649 /* Extract opcode and argument */
Guido van Rossum99bec951992-09-03 20:29:45 +0000650
Guido van Rossum408027e1996-12-30 16:17:54 +0000651#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum99bec951992-09-03 20:29:45 +0000652 f->f_lasti = INSTR_OFFSET();
653#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000654
655 opcode = NEXTOP();
656 if (HAS_ARG(opcode))
657 oparg = NEXTARG();
Fred Drakeef8ace32000-08-24 00:32:09 +0000658 dispatch_opcode:
Guido van Rossum950361c1997-01-24 13:49:28 +0000659#ifdef DYNAMIC_EXECUTION_PROFILE
660#ifdef DXPAIRS
661 dxpairs[lastopcode][opcode]++;
662 lastopcode = opcode;
663#endif
664 dxp[opcode]++;
665#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000666
Guido van Rossum96a42c81992-01-12 02:29:51 +0000667#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000668 /* Instruction tracing */
669
Guido van Rossum96a42c81992-01-12 02:29:51 +0000670 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000671 if (HAS_ARG(opcode)) {
672 printf("%d: %d, %d\n",
673 (int) (INSTR_OFFSET() - 3),
674 opcode, oparg);
675 }
676 else {
677 printf("%d: %d\n",
678 (int) (INSTR_OFFSET() - 1), opcode);
679 }
680 }
681#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000682 /* Main switch on opcode */
Jeremy Hylton52820442001-01-03 23:52:36 +0000683
Guido van Rossum374a9221991-04-04 10:40:29 +0000684 switch (opcode) {
685
686 /* BEWARE!
687 It is essential that any operation that fails sets either
688 x to NULL, err to nonzero, or why to anything but WHY_NOT,
689 and that no operation that succeeds does this! */
690
691 /* case STOP_CODE: this is an error! */
692
693 case POP_TOP:
694 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000695 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000696 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000697
698 case ROT_TWO:
699 v = POP();
700 w = POP();
701 PUSH(v);
702 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000703 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000704
705 case ROT_THREE:
706 v = POP();
707 w = POP();
708 x = POP();
709 PUSH(v);
710 PUSH(x);
711 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000712 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000713
Thomas Wouters434d0822000-08-24 20:11:32 +0000714 case ROT_FOUR:
715 u = POP();
716 v = POP();
717 w = POP();
718 x = POP();
719 PUSH(u);
720 PUSH(x);
721 PUSH(w);
722 PUSH(v);
723 continue;
724
Guido van Rossum374a9221991-04-04 10:40:29 +0000725 case DUP_TOP:
726 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000727 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000728 PUSH(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000729 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000730
Thomas Wouters434d0822000-08-24 20:11:32 +0000731 case DUP_TOPX:
732 switch (oparg) {
Thomas Wouters434d0822000-08-24 20:11:32 +0000733 case 1:
Tim Peters35ba6892000-10-11 07:04:49 +0000734 x = TOP();
735 Py_INCREF(x);
736 PUSH(x);
737 continue;
738 case 2:
Thomas Wouters434d0822000-08-24 20:11:32 +0000739 x = POP();
Tim Peters35ba6892000-10-11 07:04:49 +0000740 Py_INCREF(x);
741 w = TOP();
742 Py_INCREF(w);
743 PUSH(x);
744 PUSH(w);
745 PUSH(x);
746 continue;
747 case 3:
748 x = POP();
749 Py_INCREF(x);
Thomas Wouters434d0822000-08-24 20:11:32 +0000750 w = POP();
Tim Peters35ba6892000-10-11 07:04:49 +0000751 Py_INCREF(w);
752 v = TOP();
753 Py_INCREF(v);
754 PUSH(w);
755 PUSH(x);
756 PUSH(v);
757 PUSH(w);
758 PUSH(x);
759 continue;
760 case 4:
761 x = POP();
762 Py_INCREF(x);
763 w = POP();
764 Py_INCREF(w);
Thomas Wouters434d0822000-08-24 20:11:32 +0000765 v = POP();
Tim Peters35ba6892000-10-11 07:04:49 +0000766 Py_INCREF(v);
767 u = TOP();
768 Py_INCREF(u);
769 PUSH(v);
770 PUSH(w);
771 PUSH(x);
772 PUSH(u);
773 PUSH(v);
774 PUSH(w);
775 PUSH(x);
776 continue;
777 case 5:
778 x = POP();
779 Py_INCREF(x);
780 w = POP();
781 Py_INCREF(w);
782 v = POP();
783 Py_INCREF(v);
Thomas Wouters434d0822000-08-24 20:11:32 +0000784 u = POP();
Tim Peters35ba6892000-10-11 07:04:49 +0000785 Py_INCREF(u);
786 t = TOP();
787 Py_INCREF(t);
788 PUSH(u);
789 PUSH(v);
790 PUSH(w);
791 PUSH(x);
792 PUSH(t);
793 PUSH(u);
794 PUSH(v);
795 PUSH(w);
796 PUSH(x);
797 continue;
Thomas Wouters434d0822000-08-24 20:11:32 +0000798 default:
Thomas Wouters0be483f2000-10-11 23:26:11 +0000799 Py_FatalError("invalid argument to DUP_TOPX"
800 " (bytecode corruption?)");
Thomas Wouters434d0822000-08-24 20:11:32 +0000801 }
Tim Peters35ba6892000-10-11 07:04:49 +0000802 break;
Thomas Wouters434d0822000-08-24 20:11:32 +0000803
Guido van Rossum374a9221991-04-04 10:40:29 +0000804 case UNARY_POSITIVE:
805 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000806 x = PyNumber_Positive(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000807 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000808 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000809 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000810 break;
811
812 case UNARY_NEGATIVE:
813 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000814 x = PyNumber_Negative(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000815 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000816 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000817 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000818 break;
819
820 case UNARY_NOT:
821 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000822 err = PyObject_IsTrue(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000823 Py_DECREF(v);
Guido van Rossumfc490731997-05-06 15:06:49 +0000824 if (err == 0) {
825 Py_INCREF(Py_True);
826 PUSH(Py_True);
827 continue;
828 }
829 else if (err > 0) {
830 Py_INCREF(Py_False);
831 PUSH(Py_False);
832 err = 0;
833 continue;
834 }
Guido van Rossum374a9221991-04-04 10:40:29 +0000835 break;
836
837 case UNARY_CONVERT:
838 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000839 x = PyObject_Repr(v);
840 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000841 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000842 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000843 break;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000844
845 case UNARY_INVERT:
846 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000847 x = PyNumber_Invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000848 Py_DECREF(v);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000849 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000850 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000851 break;
Guido van Rossum374a9221991-04-04 10:40:29 +0000852
Guido van Rossum50564e81996-01-12 01:13:16 +0000853 case BINARY_POWER:
854 w = POP();
855 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000856 x = PyNumber_Power(v, w, Py_None);
Guido van Rossumb209a111997-04-29 18:18:01 +0000857 Py_DECREF(v);
858 Py_DECREF(w);
Guido van Rossum50564e81996-01-12 01:13:16 +0000859 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000860 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +0000861 break;
862
Guido van Rossum374a9221991-04-04 10:40:29 +0000863 case BINARY_MULTIPLY:
864 w = POP();
865 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000866 x = PyNumber_Multiply(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000867 Py_DECREF(v);
868 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000869 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000870 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000871 break;
872
873 case BINARY_DIVIDE:
874 w = POP();
875 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000876 x = PyNumber_Divide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000877 Py_DECREF(v);
878 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000879 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000880 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000881 break;
882
883 case BINARY_MODULO:
884 w = POP();
885 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000886 x = PyNumber_Remainder(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000887 Py_DECREF(v);
888 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000889 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000890 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000891 break;
892
893 case BINARY_ADD:
894 w = POP();
895 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000896 if (PyInt_Check(v) && PyInt_Check(w)) {
897 /* INLINE: int + int */
898 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000899 a = PyInt_AS_LONG(v);
900 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000901 i = a + b;
902 if ((i^a) < 0 && (i^b) < 0) {
903 PyErr_SetString(PyExc_OverflowError,
904 "integer addition");
905 x = NULL;
906 }
907 else
908 x = PyInt_FromLong(i);
909 }
910 else
911 x = PyNumber_Add(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000912 Py_DECREF(v);
913 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000914 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000915 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000916 break;
917
918 case BINARY_SUBTRACT:
919 w = POP();
920 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000921 if (PyInt_Check(v) && PyInt_Check(w)) {
922 /* INLINE: int - int */
923 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000924 a = PyInt_AS_LONG(v);
925 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000926 i = a - b;
927 if ((i^a) < 0 && (i^~b) < 0) {
928 PyErr_SetString(PyExc_OverflowError,
929 "integer subtraction");
930 x = NULL;
931 }
932 else
933 x = PyInt_FromLong(i);
934 }
935 else
936 x = PyNumber_Subtract(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000937 Py_DECREF(v);
938 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000939 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000940 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000941 break;
942
943 case BINARY_SUBSCR:
944 w = POP();
945 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000946 if (PyList_Check(v) && PyInt_Check(w)) {
947 /* INLINE: list[int] */
948 long i = PyInt_AsLong(w);
949 if (i < 0)
Guido van Rossumfa00e951998-07-08 15:02:37 +0000950 i += PyList_GET_SIZE(v);
Guido van Rossumc12da691997-07-17 23:12:42 +0000951 if (i < 0 ||
Guido van Rossumfa00e951998-07-08 15:02:37 +0000952 i >= PyList_GET_SIZE(v)) {
Guido van Rossumc12da691997-07-17 23:12:42 +0000953 PyErr_SetString(PyExc_IndexError,
954 "list index out of range");
955 x = NULL;
956 }
957 else {
Guido van Rossumfa00e951998-07-08 15:02:37 +0000958 x = PyList_GET_ITEM(v, i);
Guido van Rossumc12da691997-07-17 23:12:42 +0000959 Py_INCREF(x);
960 }
961 }
962 else
963 x = PyObject_GetItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000964 Py_DECREF(v);
965 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000966 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000967 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000968 break;
969
Guido van Rossum7928cd71991-10-24 14:59:31 +0000970 case BINARY_LSHIFT:
971 w = POP();
972 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000973 x = PyNumber_Lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000974 Py_DECREF(v);
975 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000976 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000977 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000978 break;
979
980 case BINARY_RSHIFT:
981 w = POP();
982 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000983 x = PyNumber_Rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000984 Py_DECREF(v);
985 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000986 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000987 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000988 break;
989
990 case BINARY_AND:
991 w = POP();
992 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000993 x = PyNumber_And(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000994 Py_DECREF(v);
995 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000996 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000997 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000998 break;
999
1000 case BINARY_XOR:
1001 w = POP();
1002 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001003 x = PyNumber_Xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001004 Py_DECREF(v);
1005 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00001006 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001007 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001008 break;
1009
1010 case BINARY_OR:
1011 w = POP();
1012 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +00001013 x = PyNumber_Or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001014 Py_DECREF(v);
1015 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00001016 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001017 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001018 break;
Thomas Wouters434d0822000-08-24 20:11:32 +00001019
1020 case INPLACE_POWER:
1021 w = POP();
1022 v = POP();
1023 x = PyNumber_InPlacePower(v, w, Py_None);
1024 Py_DECREF(v);
1025 Py_DECREF(w);
1026 PUSH(x);
1027 if (x != NULL) continue;
1028 break;
Guido van Rossum7928cd71991-10-24 14:59:31 +00001029
Thomas Wouters434d0822000-08-24 20:11:32 +00001030 case INPLACE_MULTIPLY:
1031 w = POP();
1032 v = POP();
1033 x = PyNumber_InPlaceMultiply(v, w);
1034 Py_DECREF(v);
1035 Py_DECREF(w);
1036 PUSH(x);
1037 if (x != NULL) continue;
1038 break;
1039
1040 case INPLACE_DIVIDE:
1041 w = POP();
1042 v = POP();
1043 x = PyNumber_InPlaceDivide(v, w);
1044 Py_DECREF(v);
1045 Py_DECREF(w);
1046 PUSH(x);
1047 if (x != NULL) continue;
1048 break;
1049
1050 case INPLACE_MODULO:
1051 w = POP();
1052 v = POP();
1053 x = PyNumber_InPlaceRemainder(v, w);
1054 Py_DECREF(v);
1055 Py_DECREF(w);
1056 PUSH(x);
1057 if (x != NULL) continue;
1058 break;
1059
1060 case INPLACE_ADD:
1061 w = POP();
1062 v = POP();
1063 if (PyInt_Check(v) && PyInt_Check(w)) {
1064 /* INLINE: int + int */
1065 register long a, b, i;
1066 a = PyInt_AS_LONG(v);
1067 b = PyInt_AS_LONG(w);
1068 i = a + b;
1069 if ((i^a) < 0 && (i^b) < 0) {
1070 PyErr_SetString(PyExc_OverflowError,
1071 "integer addition");
1072 x = NULL;
1073 }
1074 else
1075 x = PyInt_FromLong(i);
1076 }
1077 else
1078 x = PyNumber_InPlaceAdd(v, w);
1079 Py_DECREF(v);
1080 Py_DECREF(w);
1081 PUSH(x);
1082 if (x != NULL) continue;
1083 break;
1084
1085 case INPLACE_SUBTRACT:
1086 w = POP();
1087 v = POP();
1088 if (PyInt_Check(v) && PyInt_Check(w)) {
1089 /* INLINE: int - int */
1090 register long a, b, i;
1091 a = PyInt_AS_LONG(v);
1092 b = PyInt_AS_LONG(w);
1093 i = a - b;
1094 if ((i^a) < 0 && (i^~b) < 0) {
1095 PyErr_SetString(PyExc_OverflowError,
1096 "integer subtraction");
1097 x = NULL;
1098 }
1099 else
1100 x = PyInt_FromLong(i);
1101 }
1102 else
1103 x = PyNumber_InPlaceSubtract(v, w);
1104 Py_DECREF(v);
1105 Py_DECREF(w);
1106 PUSH(x);
1107 if (x != NULL) continue;
1108 break;
1109
1110 case INPLACE_LSHIFT:
1111 w = POP();
1112 v = POP();
1113 x = PyNumber_InPlaceLshift(v, w);
1114 Py_DECREF(v);
1115 Py_DECREF(w);
1116 PUSH(x);
1117 if (x != NULL) continue;
1118 break;
1119
1120 case INPLACE_RSHIFT:
1121 w = POP();
1122 v = POP();
1123 x = PyNumber_InPlaceRshift(v, w);
1124 Py_DECREF(v);
1125 Py_DECREF(w);
1126 PUSH(x);
1127 if (x != NULL) continue;
1128 break;
1129
1130 case INPLACE_AND:
1131 w = POP();
1132 v = POP();
1133 x = PyNumber_InPlaceAnd(v, w);
1134 Py_DECREF(v);
1135 Py_DECREF(w);
1136 PUSH(x);
1137 if (x != NULL) continue;
1138 break;
1139
1140 case INPLACE_XOR:
1141 w = POP();
1142 v = POP();
1143 x = PyNumber_InPlaceXor(v, w);
1144 Py_DECREF(v);
1145 Py_DECREF(w);
1146 PUSH(x);
1147 if (x != NULL) continue;
1148 break;
1149
1150 case INPLACE_OR:
1151 w = POP();
1152 v = POP();
1153 x = PyNumber_InPlaceOr(v, w);
1154 Py_DECREF(v);
1155 Py_DECREF(w);
1156 PUSH(x);
1157 if (x != NULL) continue;
1158 break;
1159
Guido van Rossum374a9221991-04-04 10:40:29 +00001160 case SLICE+0:
1161 case SLICE+1:
1162 case SLICE+2:
1163 case SLICE+3:
1164 if ((opcode-SLICE) & 2)
1165 w = POP();
1166 else
1167 w = NULL;
1168 if ((opcode-SLICE) & 1)
1169 v = POP();
1170 else
1171 v = NULL;
1172 u = POP();
1173 x = apply_slice(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001174 Py_DECREF(u);
1175 Py_XDECREF(v);
1176 Py_XDECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001177 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001178 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001179 break;
1180
1181 case STORE_SLICE+0:
1182 case STORE_SLICE+1:
1183 case STORE_SLICE+2:
1184 case STORE_SLICE+3:
1185 if ((opcode-STORE_SLICE) & 2)
1186 w = POP();
1187 else
1188 w = NULL;
1189 if ((opcode-STORE_SLICE) & 1)
1190 v = POP();
1191 else
1192 v = NULL;
1193 u = POP();
1194 t = POP();
1195 err = assign_slice(u, v, w, t); /* u[v:w] = t */
Guido van Rossumb209a111997-04-29 18:18:01 +00001196 Py_DECREF(t);
1197 Py_DECREF(u);
1198 Py_XDECREF(v);
1199 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001200 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001201 break;
1202
1203 case DELETE_SLICE+0:
1204 case DELETE_SLICE+1:
1205 case DELETE_SLICE+2:
1206 case DELETE_SLICE+3:
1207 if ((opcode-DELETE_SLICE) & 2)
1208 w = POP();
1209 else
1210 w = NULL;
1211 if ((opcode-DELETE_SLICE) & 1)
1212 v = POP();
1213 else
1214 v = NULL;
1215 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001216 err = assign_slice(u, v, w, (PyObject *)NULL);
Guido van Rossum374a9221991-04-04 10:40:29 +00001217 /* del u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +00001218 Py_DECREF(u);
1219 Py_XDECREF(v);
1220 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001221 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001222 break;
1223
1224 case STORE_SUBSCR:
1225 w = POP();
1226 v = POP();
1227 u = POP();
1228 /* v[w] = u */
Guido van Rossumfc490731997-05-06 15:06:49 +00001229 err = PyObject_SetItem(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001230 Py_DECREF(u);
1231 Py_DECREF(v);
1232 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001233 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001234 break;
1235
1236 case DELETE_SUBSCR:
1237 w = POP();
1238 v = POP();
1239 /* del v[w] */
Guido van Rossumfc490731997-05-06 15:06:49 +00001240 err = PyObject_DelItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001241 Py_DECREF(v);
1242 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001243 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001244 break;
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001245
Guido van Rossum374a9221991-04-04 10:40:29 +00001246 case PRINT_EXPR:
1247 v = POP();
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001248 /* Print value except if None */
1249 /* After printing, also assign to '_' */
1250 /* Before, set '_' to None to avoid recursion */
Guido van Rossumb209a111997-04-29 18:18:01 +00001251 if (v != Py_None &&
Guido van Rossuma027efa1997-05-05 20:56:21 +00001252 (err = PyDict_SetItemString(
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001253 f->f_builtins, "_", Py_None)) == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +00001254 err = Py_FlushLine();
Guido van Rossumc12da691997-07-17 23:12:42 +00001255 if (err == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +00001256 x = PySys_GetObject("stdout");
Guido van Rossum8f183201997-12-31 05:53:15 +00001257 if (x == NULL) {
1258 PyErr_SetString(
1259 PyExc_RuntimeError,
1260 "lost sys.stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00001261 err = -1;
Guido van Rossum8f183201997-12-31 05:53:15 +00001262 }
Guido van Rossumbe270261997-05-22 22:26:18 +00001263 }
1264 if (err == 0)
1265 err = PyFile_WriteObject(v, x, 0);
1266 if (err == 0) {
1267 PyFile_SoftSpace(x, 1);
1268 err = Py_FlushLine();
1269 }
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001270 if (err == 0) {
1271 err = PyDict_SetItemString(
1272 f->f_builtins, "_", v);
1273 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001274 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001275 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001276 break;
1277
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001278 case PRINT_ITEM_TO:
1279 w = stream = POP();
1280 /* fall through to PRINT_ITEM */
1281
Guido van Rossum374a9221991-04-04 10:40:29 +00001282 case PRINT_ITEM:
1283 v = POP();
Barry Warsaw093abe02000-08-29 04:56:13 +00001284 if (stream == NULL || stream == Py_None) {
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001285 w = PySys_GetObject("stdout");
1286 if (w == NULL) {
1287 PyErr_SetString(PyExc_RuntimeError,
1288 "lost sys.stdout");
1289 err = -1;
1290 }
Guido van Rossum8f183201997-12-31 05:53:15 +00001291 }
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001292 if (w != NULL && PyFile_SoftSpace(w, 1))
Guido van Rossumbe270261997-05-22 22:26:18 +00001293 err = PyFile_WriteString(" ", w);
1294 if (err == 0)
1295 err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
Guido van Rossumb209a111997-04-29 18:18:01 +00001296 if (err == 0 && PyString_Check(v)) {
Guido van Rossumc6004111993-11-05 10:22:19 +00001297 /* XXX move into writeobject() ? */
Guido van Rossumb209a111997-04-29 18:18:01 +00001298 char *s = PyString_AsString(v);
1299 int len = PyString_Size(v);
Guido van Rossum7f7f2741995-02-10 17:01:56 +00001300 if (len > 0 &&
1301 isspace(Py_CHARMASK(s[len-1])) &&
Guido van Rossumc6004111993-11-05 10:22:19 +00001302 s[len-1] != ' ')
Guido van Rossumb209a111997-04-29 18:18:01 +00001303 PyFile_SoftSpace(w, 0);
Guido van Rossum374a9221991-04-04 10:40:29 +00001304 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001305 Py_DECREF(v);
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001306 Py_XDECREF(stream);
1307 stream = NULL;
1308 if (err == 0)
1309 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001310 break;
1311
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001312 case PRINT_NEWLINE_TO:
1313 w = stream = POP();
1314 /* fall through to PRINT_NEWLINE */
1315
Guido van Rossum374a9221991-04-04 10:40:29 +00001316 case PRINT_NEWLINE:
Barry Warsaw093abe02000-08-29 04:56:13 +00001317 if (stream == NULL || stream == Py_None) {
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001318 w = PySys_GetObject("stdout");
1319 if (w == NULL)
1320 PyErr_SetString(PyExc_RuntimeError,
1321 "lost sys.stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001322 }
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001323 if (w != NULL) {
1324 err = PyFile_WriteString("\n", w);
1325 if (err == 0)
1326 PyFile_SoftSpace(w, 0);
1327 }
1328 Py_XDECREF(stream);
1329 stream = NULL;
Guido van Rossum374a9221991-04-04 10:40:29 +00001330 break;
1331
Thomas Wouters434d0822000-08-24 20:11:32 +00001332
1333#ifdef CASE_TOO_BIG
1334 default: switch (opcode) {
1335#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001336 case BREAK_LOOP:
1337 why = WHY_BREAK;
1338 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001339
Guido van Rossumf10570b1995-07-07 22:53:21 +00001340 case RAISE_VARARGS:
1341 u = v = w = NULL;
1342 switch (oparg) {
1343 case 3:
1344 u = POP(); /* traceback */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001345 /* Fallthrough */
1346 case 2:
1347 v = POP(); /* value */
1348 /* Fallthrough */
1349 case 1:
1350 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001351 case 0: /* Fallthrough */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001352 why = do_raise(w, v, u);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001353 break;
1354 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001355 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001356 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001357 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001358 break;
1359 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001360 break;
1361
1362 case LOAD_LOCALS:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001363 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001364 PyErr_SetString(PyExc_SystemError,
1365 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001366 break;
1367 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001368 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001369 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001370 break;
1371
1372 case RETURN_VALUE:
1373 retval = POP();
1374 why = WHY_RETURN;
1375 break;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001376
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001377 case EXEC_STMT:
1378 w = POP();
1379 v = POP();
1380 u = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001381 err = exec_statement(f, u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001382 Py_DECREF(u);
1383 Py_DECREF(v);
1384 Py_DECREF(w);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001385 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001386
Guido van Rossum374a9221991-04-04 10:40:29 +00001387 case POP_BLOCK:
1388 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001389 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001390 while (STACK_LEVEL() > b->b_level) {
1391 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001392 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001393 }
1394 }
1395 break;
1396
1397 case END_FINALLY:
1398 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001399 if (PyInt_Check(v)) {
1400 why = (enum why_code) PyInt_AsLong(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001401 if (why == WHY_RETURN)
1402 retval = POP();
1403 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001404 else if (PyString_Check(v) || PyClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001405 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001406 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001407 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001408 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001409 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001410 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001411 else if (v != Py_None) {
1412 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001413 "'finally' pops bad exception");
1414 why = WHY_EXCEPTION;
1415 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001416 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001417 break;
1418
1419 case BUILD_CLASS:
Guido van Rossum25831651993-05-19 14:50:45 +00001420 u = POP();
Guido van Rossum374a9221991-04-04 10:40:29 +00001421 v = POP();
Guido van Rossum25831651993-05-19 14:50:45 +00001422 w = POP();
1423 x = build_class(u, v, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001424 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001425 Py_DECREF(u);
1426 Py_DECREF(v);
1427 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001428 break;
1429
1430 case STORE_NAME:
1431 w = GETNAMEV(oparg);
1432 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001433 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001434 PyErr_SetString(PyExc_SystemError,
1435 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001436 break;
1437 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001438 err = PyDict_SetItem(x, w, v);
1439 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001440 break;
1441
1442 case DELETE_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001443 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001444 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001445 PyErr_SetString(PyExc_SystemError,
1446 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001447 break;
1448 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001449 if ((err = PyDict_DelItem(x, w)) != 0)
Paul Prescode68140d2000-08-30 20:25:01 +00001450 format_exc_check_arg(PyExc_NameError,
1451 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001452 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001453
Thomas Wouters0be5aab2000-08-11 22:15:52 +00001454 case UNPACK_SEQUENCE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001455 v = POP();
Barry Warsawe42b18f1997-08-25 22:13:04 +00001456 if (PyTuple_Check(v)) {
1457 if (PyTuple_Size(v) != oparg) {
1458 PyErr_SetString(PyExc_ValueError,
1459 "unpack tuple of wrong size");
1460 why = WHY_EXCEPTION;
1461 }
1462 else {
1463 for (; --oparg >= 0; ) {
1464 w = PyTuple_GET_ITEM(v, oparg);
1465 Py_INCREF(w);
1466 PUSH(w);
1467 }
1468 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001469 }
Barry Warsawe42b18f1997-08-25 22:13:04 +00001470 else if (PyList_Check(v)) {
1471 if (PyList_Size(v) != oparg) {
1472 PyErr_SetString(PyExc_ValueError,
1473 "unpack list of wrong size");
1474 why = WHY_EXCEPTION;
1475 }
1476 else {
1477 for (; --oparg >= 0; ) {
1478 w = PyList_GET_ITEM(v, oparg);
1479 Py_INCREF(w);
1480 PUSH(w);
1481 }
1482 }
1483 }
1484 else if (PySequence_Check(v)) {
1485 if (unpack_sequence(v, oparg,
1486 stack_pointer + oparg))
1487 stack_pointer += oparg;
1488 else
1489 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001490 }
1491 else {
Barry Warsawe42b18f1997-08-25 22:13:04 +00001492 PyErr_SetString(PyExc_TypeError,
1493 "unpack non-sequence");
1494 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001495 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001496 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001497 break;
1498
1499 case STORE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001500 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001501 v = POP();
1502 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001503 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1504 Py_DECREF(v);
1505 Py_DECREF(u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001506 break;
1507
1508 case DELETE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001509 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001510 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001511 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1512 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001513 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001514 break;
1515
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001516 case STORE_GLOBAL:
1517 w = GETNAMEV(oparg);
1518 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001519 err = PyDict_SetItem(f->f_globals, w, v);
1520 Py_DECREF(v);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001521 break;
1522
1523 case DELETE_GLOBAL:
1524 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001525 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
Paul Prescode68140d2000-08-30 20:25:01 +00001526 format_exc_check_arg(
1527 PyExc_NameError, NAME_ERROR_MSG ,w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001528 break;
1529
Guido van Rossum374a9221991-04-04 10:40:29 +00001530 case LOAD_CONST:
1531 x = GETCONST(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001532 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001533 PUSH(x);
1534 break;
1535
1536 case LOAD_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001537 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001538 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001539 PyErr_SetString(PyExc_SystemError,
1540 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001541 break;
1542 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001543 x = PyDict_GetItem(x, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001544 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001545 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001546 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001547 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001548 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001549 format_exc_check_arg(
1550 PyExc_NameError,
1551 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001552 break;
1553 }
1554 }
1555 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001556 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001557 PUSH(x);
1558 break;
1559
1560 case LOAD_GLOBAL:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001561 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001562 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001563 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001564 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001565 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001566 format_exc_check_arg(
1567 PyExc_NameError,
1568 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001569 break;
1570 }
1571 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001572 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001573 PUSH(x);
1574 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001575
Guido van Rossum9bfef441993-03-29 10:43:31 +00001576 case LOAD_FAST:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001577 x = GETLOCAL(oparg);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001578 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001579 format_exc_check_arg(
1580 PyExc_UnboundLocalError,
1581 UNBOUNDLOCAL_ERROR_MSG,
1582 PyTuple_GetItem(co->co_varnames, oparg)
1583 );
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001584 break;
1585 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001586 Py_INCREF(x);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001587 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001588 if (x != NULL) continue;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001589 break;
1590
1591 case STORE_FAST:
Guido van Rossum25831651993-05-19 14:50:45 +00001592 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001593 SETLOCAL(oparg, v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001594 continue;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001595
1596 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001597 x = GETLOCAL(oparg);
1598 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001599 format_exc_check_arg(
1600 PyExc_UnboundLocalError,
1601 UNBOUNDLOCAL_ERROR_MSG,
1602 PyTuple_GetItem(co->co_varnames, oparg)
1603 );
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001604 break;
1605 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001606 SETLOCAL(oparg, NULL);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001607 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001608
1609 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001610 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001611 if (x != NULL) {
1612 for (; --oparg >= 0;) {
1613 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001614 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001615 }
1616 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001617 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001618 }
1619 break;
1620
1621 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001622 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001623 if (x != NULL) {
1624 for (; --oparg >= 0;) {
1625 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001626 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001627 }
1628 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001629 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001630 }
1631 break;
1632
1633 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001634 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001635 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001636 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001637 break;
1638
1639 case LOAD_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001640 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001641 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001642 x = PyObject_GetAttr(v, w);
1643 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001644 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001645 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001646 break;
1647
1648 case COMPARE_OP:
1649 w = POP();
1650 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +00001651 if (PyInt_Check(v) && PyInt_Check(w)) {
1652 /* INLINE: cmp(int, int) */
1653 register long a, b;
1654 register int res;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001655 a = PyInt_AS_LONG(v);
1656 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001657 switch (oparg) {
1658 case LT: res = a < b; break;
1659 case LE: res = a <= b; break;
1660 case EQ: res = a == b; break;
1661 case NE: res = a != b; break;
1662 case GT: res = a > b; break;
1663 case GE: res = a >= b; break;
1664 case IS: res = v == w; break;
1665 case IS_NOT: res = v != w; break;
1666 default: goto slow_compare;
1667 }
1668 x = res ? Py_True : Py_False;
1669 Py_INCREF(x);
1670 }
1671 else {
1672 slow_compare:
1673 x = cmp_outcome(oparg, v, w);
1674 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001675 Py_DECREF(v);
1676 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001677 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001678 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001679 break;
1680
1681 case IMPORT_NAME:
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001682 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001683 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001684 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001685 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001686 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001687 break;
1688 }
Thomas Woutersdd13e4f2000-08-27 20:31:27 +00001689 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001690 w = Py_BuildValue("(OOOO)",
Guido van Rossum681d79a1995-07-18 14:51:37 +00001691 w,
1692 f->f_globals,
Guido van Rossuma027efa1997-05-05 20:56:21 +00001693 f->f_locals == NULL ?
1694 Py_None : f->f_locals,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001695 u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001696 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001697 if (w == NULL) {
1698 x = NULL;
1699 break;
1700 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001701 x = PyEval_CallObject(x, w);
1702 Py_DECREF(w);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001703 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001704 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001705 break;
1706
Thomas Wouters52152252000-08-17 22:55:00 +00001707 case IMPORT_STAR:
1708 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001709 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001710 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001711 PyErr_SetString(PyExc_SystemError,
1712 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001713 break;
1714 }
Thomas Wouters52152252000-08-17 22:55:00 +00001715 err = import_all_from(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001716 PyFrame_LocalsToFast(f, 0);
Thomas Wouters52152252000-08-17 22:55:00 +00001717 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001718 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001719 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001720
Thomas Wouters52152252000-08-17 22:55:00 +00001721 case IMPORT_FROM:
1722 w = GETNAMEV(oparg);
1723 v = TOP();
1724 x = import_from(v, w);
1725 PUSH(x);
1726 if (x != NULL) continue;
1727 break;
1728
Guido van Rossum374a9221991-04-04 10:40:29 +00001729 case JUMP_FORWARD:
1730 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001731 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001732
1733 case JUMP_IF_FALSE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001734 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001735 if (err > 0)
1736 err = 0;
1737 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00001738 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001739 else
1740 break;
1741 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001742
1743 case JUMP_IF_TRUE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001744 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001745 if (err > 0) {
1746 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00001747 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001748 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001749 else if (err == 0)
1750 ;
1751 else
1752 break;
1753 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001754
1755 case JUMP_ABSOLUTE:
1756 JUMPTO(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001757 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001758
1759 case FOR_LOOP:
1760 /* for v in s: ...
1761 On entry: stack contains s, i.
1762 On exit: stack contains s, i+1, s[i];
1763 but if loop exhausted:
1764 s, i are popped, and we jump */
1765 w = POP(); /* Loop index */
1766 v = POP(); /* Sequence object */
1767 u = loop_subscript(v, w);
1768 if (u != NULL) {
1769 PUSH(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001770 x = PyInt_FromLong(PyInt_AsLong(w)+1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001771 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001772 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001773 PUSH(u);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001774 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001775 }
1776 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001777 Py_DECREF(v);
1778 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001779 /* A NULL can mean "s exhausted"
1780 but also an error: */
Guido van Rossumb209a111997-04-29 18:18:01 +00001781 if (PyErr_Occurred())
Guido van Rossum374a9221991-04-04 10:40:29 +00001782 why = WHY_EXCEPTION;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001783 else {
Guido van Rossum374a9221991-04-04 10:40:29 +00001784 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001785 continue;
1786 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001787 }
1788 break;
1789
1790 case SETUP_LOOP:
1791 case SETUP_EXCEPT:
1792 case SETUP_FINALLY:
Guido van Rossumb209a111997-04-29 18:18:01 +00001793 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Guido van Rossum374a9221991-04-04 10:40:29 +00001794 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001795 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001796
1797 case SET_LINENO:
Guido van Rossum96a42c81992-01-12 02:29:51 +00001798#ifdef LLTRACE
1799 if (lltrace)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001800 printf("--- %s:%d \n", filename, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001801#endif
Guido van Rossum96a42c81992-01-12 02:29:51 +00001802 f->f_lineno = oparg;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001803 if (f->f_trace == NULL)
1804 continue;
1805 /* Trace each line of code reached */
1806 f->f_lasti = INSTR_OFFSET();
1807 err = call_trace(&f->f_trace, &f->f_trace,
Guido van Rossumb209a111997-04-29 18:18:01 +00001808 f, "line", Py_None);
Guido van Rossum374a9221991-04-04 10:40:29 +00001809 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001810
1811 case CALL_FUNCTION:
Jeremy Hylton52820442001-01-03 23:52:36 +00001812 {
1813 int na = oparg & 0xff;
1814 int nk = (oparg>>8) & 0xff;
1815 int n = na + 2 * nk;
1816 PyObject **pfunc = stack_pointer - n - 1;
1817 PyObject *func = *pfunc;
1818 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
1819
1820 /* Always dispatch PyCFunction first, because
1821 these are presumed to be the most frequent
1822 callable object.
1823 */
1824 if (PyCFunction_Check(func)) {
1825 if (PyCFunction_GET_FLAGS(func) == 0) {
1826 x = fast_cfunction(func,
1827 &stack_pointer, na);
1828 } else {
1829 x = do_call(func, &stack_pointer,
1830 na, nk);
1831 }
1832 } else {
1833 if (PyMethod_Check(func)
1834 && PyMethod_GET_SELF(func) != NULL) {
1835 /* optimize access to bound methods */
1836 PyObject *self = PyMethod_GET_SELF(func);
1837 Py_INCREF(self);
1838 func = PyMethod_GET_FUNCTION(func);
1839 Py_INCREF(func);
1840 Py_DECREF(*pfunc);
1841 *pfunc = self;
1842 na++;
1843 n++;
1844 } else
1845 Py_INCREF(func);
1846 if (PyFunction_Check(func)) {
1847 x = fast_function(func, &stack_pointer,
1848 n, na, nk);
1849 } else {
1850 x = do_call(func, &stack_pointer,
1851 na, nk);
1852 }
1853 Py_DECREF(func);
1854 }
1855
1856 while (stack_pointer > pfunc) {
1857 w = POP();
1858 Py_DECREF(w);
1859 }
1860 PUSH(x);
1861 if (x != NULL)
1862 continue;
1863 break;
1864 }
1865
Jeremy Hylton76901512000-03-28 23:49:17 +00001866 case CALL_FUNCTION_VAR:
1867 case CALL_FUNCTION_KW:
1868 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00001869 {
Jeremy Hylton76901512000-03-28 23:49:17 +00001870 int na = oparg & 0xff;
1871 int nk = (oparg>>8) & 0xff;
1872 int flags = (opcode - CALL_FUNCTION) & 3;
Jeremy Hylton52820442001-01-03 23:52:36 +00001873 int n = na + 2 * nk;
1874 PyObject **pfunc, *func;
1875 if (flags & CALL_FLAG_VAR)
1876 n++;
1877 if (flags & CALL_FLAG_KW)
1878 n++;
1879 pfunc = stack_pointer - n - 1;
1880 func = *pfunc;
Jeremy Hylton76901512000-03-28 23:49:17 +00001881 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
Jeremy Hylton52820442001-01-03 23:52:36 +00001882
1883 if (PyMethod_Check(func)
1884 && PyMethod_GET_SELF(func) != NULL) {
1885 PyObject *self = PyMethod_GET_SELF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00001886 Py_INCREF(self);
Jeremy Hylton52820442001-01-03 23:52:36 +00001887 func = PyMethod_GET_FUNCTION(func);
1888 Py_INCREF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00001889 Py_DECREF(*pfunc);
1890 *pfunc = self;
1891 na++;
1892 n++;
Jeremy Hylton52820442001-01-03 23:52:36 +00001893 } else
1894 Py_INCREF(func);
1895 x = ext_do_call(func, &stack_pointer, flags, na, nk);
Jeremy Hylton76901512000-03-28 23:49:17 +00001896 Py_DECREF(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00001897
Jeremy Hylton76901512000-03-28 23:49:17 +00001898 while (stack_pointer > pfunc) {
Jeremy Hylton52820442001-01-03 23:52:36 +00001899 w = POP();
1900 Py_DECREF(w);
Jeremy Hylton76901512000-03-28 23:49:17 +00001901 }
1902 PUSH(x);
Jeremy Hylton52820442001-01-03 23:52:36 +00001903 if (x != NULL)
1904 continue;
Jeremy Hylton76901512000-03-28 23:49:17 +00001905 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001906 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001907
Guido van Rossum681d79a1995-07-18 14:51:37 +00001908 case MAKE_FUNCTION:
1909 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00001910 x = PyFunction_New(v, f->f_globals);
1911 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001912 /* XXX Maybe this should be a separate opcode? */
1913 if (x != NULL && oparg > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001914 v = PyTuple_New(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001915 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001916 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001917 x = NULL;
1918 break;
1919 }
1920 while (--oparg >= 0) {
1921 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001922 PyTuple_SET_ITEM(v, oparg, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001923 }
1924 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001925 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001926 }
1927 PUSH(x);
1928 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001929
1930 case BUILD_SLICE:
1931 if (oparg == 3)
1932 w = POP();
1933 else
1934 w = NULL;
1935 v = POP();
1936 u = POP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00001937 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001938 Py_DECREF(u);
1939 Py_DECREF(v);
1940 Py_XDECREF(w);
Guido van Rossum8861b741996-07-30 16:49:37 +00001941 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001942 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00001943 break;
1944
Fred Drakeef8ace32000-08-24 00:32:09 +00001945 case EXTENDED_ARG:
1946 opcode = NEXTOP();
1947 oparg = oparg<<16 | NEXTARG();
1948 goto dispatch_opcode;
1949 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001950
Guido van Rossum374a9221991-04-04 10:40:29 +00001951 default:
1952 fprintf(stderr,
1953 "XXX lineno: %d, opcode: %d\n",
Guido van Rossum96a42c81992-01-12 02:29:51 +00001954 f->f_lineno, opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00001955 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00001956 why = WHY_EXCEPTION;
1957 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001958
1959#ifdef CASE_TOO_BIG
1960 }
1961#endif
1962
Guido van Rossum374a9221991-04-04 10:40:29 +00001963 } /* switch */
1964
1965 on_error:
1966
1967 /* Quickly continue if no error occurred */
1968
1969 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001970 if (err == 0 && x != NULL) {
1971#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001972 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001973 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00001974 fprintf(stderr,
1975 "XXX undetected error\n");
1976 else
1977#endif
1978 continue; /* Normal, fast path */
1979 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001980 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00001981 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00001982 err = 0;
1983 }
1984
Guido van Rossum374a9221991-04-04 10:40:29 +00001985 /* Double-check exception status */
1986
1987 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001988 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001989 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001990 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00001991 why = WHY_EXCEPTION;
1992 }
1993 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001994#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00001995 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001996 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001997 if (PyErr_Occurred()) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001998 fprintf(stderr,
1999 "XXX undetected error (why=%d)\n",
2000 why);
2001 why = WHY_EXCEPTION;
2002 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002003 }
2004#endif
2005
2006 /* Log traceback info if this is a real exception */
2007
2008 if (why == WHY_EXCEPTION) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00002009 f->f_lasti = INSTR_OFFSET() - 1;
Guido van Rossum374a9221991-04-04 10:40:29 +00002010 if (HAS_ARG(opcode))
Guido van Rossum96a42c81992-01-12 02:29:51 +00002011 f->f_lasti -= 2;
Guido van Rossumb209a111997-04-29 18:18:01 +00002012 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002013
Guido van Rossume59214e1994-08-30 08:01:59 +00002014 if (f->f_trace)
2015 call_exc_trace(&f->f_trace, &f->f_trace, f);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002016 if (tstate->sys_profilefunc)
2017 call_exc_trace(&tstate->sys_profilefunc,
2018 (PyObject**)0, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00002019 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002020
2021 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
2022
2023 if (why == WHY_RERAISE)
2024 why = WHY_EXCEPTION;
2025
2026 /* Unwind stacks if a (pseudo) exception occurred */
2027
2028 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002029 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00002030 while (STACK_LEVEL() > b->b_level) {
2031 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00002032 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00002033 }
2034 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
2035 why = WHY_NOT;
2036 JUMPTO(b->b_handler);
2037 break;
2038 }
2039 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00002040 (b->b_type == SETUP_EXCEPT &&
2041 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00002042 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002043 PyObject *exc, *val, *tb;
2044 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002045 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002046 val = Py_None;
2047 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00002048 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002049 /* Make the raw exception data
2050 available to the handler,
2051 so a program can emulate the
2052 Python main loop. Don't do
2053 this for 'finally'. */
2054 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00002055 PyErr_NormalizeException(
2056 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002057 set_exc_info(tstate,
2058 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002059 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002060 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002061 PUSH(val);
2062 PUSH(exc);
2063 }
2064 else {
2065 if (why == WHY_RETURN)
2066 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00002067 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00002068 PUSH(v);
2069 }
2070 why = WHY_NOT;
2071 JUMPTO(b->b_handler);
2072 break;
2073 }
2074 } /* unwind stack */
2075
2076 /* End the loop if we still have an error (or return) */
2077
2078 if (why != WHY_NOT)
2079 break;
2080
2081 } /* main loop */
2082
2083 /* Pop remaining stack entries */
2084
2085 while (!EMPTY()) {
2086 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00002087 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00002088 }
2089
Guido van Rossum96a42c81992-01-12 02:29:51 +00002090 if (why != WHY_RETURN)
2091 retval = NULL;
2092
Guido van Rossume59214e1994-08-30 08:01:59 +00002093 if (f->f_trace) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00002094 if (why == WHY_RETURN) {
Guido van Rossume59214e1994-08-30 08:01:59 +00002095 if (call_trace(&f->f_trace, &f->f_trace, f,
2096 "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002097 Py_XDECREF(retval);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002098 retval = NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002099 why = WHY_EXCEPTION;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002100 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002101 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002102 }
2103
Guido van Rossuma027efa1997-05-05 20:56:21 +00002104 if (tstate->sys_profilefunc && why == WHY_RETURN) {
2105 if (call_trace(&tstate->sys_profilefunc, (PyObject**)0,
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002106 f, "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002107 Py_XDECREF(retval);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002108 retval = NULL;
2109 why = WHY_EXCEPTION;
2110 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002111 }
Guido van Rossuma4240131997-01-21 21:18:36 +00002112
Guido van Rossuma027efa1997-05-05 20:56:21 +00002113 reset_exc_info(tstate);
2114
2115 --tstate->recursion_depth;
Guido van Rossum8c5df061997-01-24 04:19:24 +00002116
2117 fail: /* Jump here from prelude on failure */
Guido van Rossum96a42c81992-01-12 02:29:51 +00002118
Guido van Rossum374a9221991-04-04 10:40:29 +00002119 /* Restore previous frame and release the current one */
Guido van Rossum681d79a1995-07-18 14:51:37 +00002120
Guido van Rossuma027efa1997-05-05 20:56:21 +00002121 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +00002122 Py_DECREF(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00002123
Guido van Rossum96a42c81992-01-12 02:29:51 +00002124 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00002125}
2126
Guido van Rossuma027efa1997-05-05 20:56:21 +00002127static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002128set_exc_info(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002129{
2130 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002131 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00002132
Guido van Rossuma027efa1997-05-05 20:56:21 +00002133 frame = tstate->frame;
2134 if (frame->f_exc_type == NULL) {
2135 /* This frame didn't catch an exception before */
2136 /* Save previous exception of this thread in this frame */
Guido van Rossuma027efa1997-05-05 20:56:21 +00002137 if (tstate->exc_type == NULL) {
2138 Py_INCREF(Py_None);
2139 tstate->exc_type = Py_None;
2140 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002141 tmp_type = frame->f_exc_type;
2142 tmp_value = frame->f_exc_value;
2143 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002144 Py_XINCREF(tstate->exc_type);
2145 Py_XINCREF(tstate->exc_value);
2146 Py_XINCREF(tstate->exc_traceback);
2147 frame->f_exc_type = tstate->exc_type;
2148 frame->f_exc_value = tstate->exc_value;
2149 frame->f_exc_traceback = tstate->exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002150 Py_XDECREF(tmp_type);
2151 Py_XDECREF(tmp_value);
2152 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002153 }
2154 /* Set new exception for this thread */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002155 tmp_type = tstate->exc_type;
2156 tmp_value = tstate->exc_value;
2157 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002158 Py_XINCREF(type);
2159 Py_XINCREF(value);
2160 Py_XINCREF(tb);
2161 tstate->exc_type = type;
2162 tstate->exc_value = value;
2163 tstate->exc_traceback = tb;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002164 Py_XDECREF(tmp_type);
2165 Py_XDECREF(tmp_value);
2166 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002167 /* For b/w compatibility */
2168 PySys_SetObject("exc_type", type);
2169 PySys_SetObject("exc_value", value);
2170 PySys_SetObject("exc_traceback", tb);
2171}
2172
2173static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002174reset_exc_info(PyThreadState *tstate)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002175{
2176 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002177 PyObject *tmp_type, *tmp_value, *tmp_tb;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002178 frame = tstate->frame;
2179 if (frame->f_exc_type != NULL) {
2180 /* This frame caught an exception */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002181 tmp_type = tstate->exc_type;
2182 tmp_value = tstate->exc_value;
2183 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002184 Py_XINCREF(frame->f_exc_type);
2185 Py_XINCREF(frame->f_exc_value);
2186 Py_XINCREF(frame->f_exc_traceback);
2187 tstate->exc_type = frame->f_exc_type;
2188 tstate->exc_value = frame->f_exc_value;
2189 tstate->exc_traceback = frame->f_exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002190 Py_XDECREF(tmp_type);
2191 Py_XDECREF(tmp_value);
2192 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002193 /* For b/w compatibility */
2194 PySys_SetObject("exc_type", frame->f_exc_type);
2195 PySys_SetObject("exc_value", frame->f_exc_value);
2196 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
2197 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002198 tmp_type = frame->f_exc_type;
2199 tmp_value = frame->f_exc_value;
2200 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002201 frame->f_exc_type = NULL;
2202 frame->f_exc_value = NULL;
2203 frame->f_exc_traceback = NULL;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002204 Py_XDECREF(tmp_type);
2205 Py_XDECREF(tmp_value);
2206 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002207}
2208
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002209/* Logic for the raise statement (too complicated for inlining).
2210 This *consumes* a reference count to each of its arguments. */
Guido van Rossum1aa14831997-01-21 05:34:20 +00002211static enum why_code
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002212do_raise(PyObject *type, PyObject *value, PyObject *tb)
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002213{
Guido van Rossumd295f121998-04-09 21:39:57 +00002214 if (type == NULL) {
2215 /* Reraise */
2216 PyThreadState *tstate = PyThreadState_Get();
2217 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
2218 value = tstate->exc_value;
2219 tb = tstate->exc_traceback;
2220 Py_XINCREF(type);
2221 Py_XINCREF(value);
2222 Py_XINCREF(tb);
2223 }
2224
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002225 /* We support the following forms of raise:
2226 raise <class>, <classinstance>
2227 raise <class>, <argument tuple>
2228 raise <class>, None
2229 raise <class>, <argument>
2230 raise <classinstance>, None
2231 raise <string>, <object>
2232 raise <string>, None
2233
2234 An omitted second argument is the same as None.
2235
2236 In addition, raise <tuple>, <anything> is the same as
2237 raising the tuple's first item (and it better have one!);
2238 this rule is applied recursively.
2239
2240 Finally, an optional third argument can be supplied, which
2241 gives the traceback to be substituted (useful when
2242 re-raising an exception after examining it). */
2243
2244 /* First, check the traceback argument, replacing None with
2245 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002246 if (tb == Py_None) {
2247 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002248 tb = NULL;
2249 }
2250 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002251 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002252 "raise: arg 3 must be a traceback or None");
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002253 goto raise_error;
2254 }
2255
2256 /* Next, replace a missing value with None */
2257 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002258 value = Py_None;
2259 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002260 }
2261
2262 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00002263 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
2264 PyObject *tmp = type;
2265 type = PyTuple_GET_ITEM(type, 0);
2266 Py_INCREF(type);
2267 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002268 }
2269
Barry Warsaw4249f541997-08-22 21:26:19 +00002270 if (PyString_Check(type))
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002271 ;
Barry Warsaw4249f541997-08-22 21:26:19 +00002272
2273 else if (PyClass_Check(type))
2274 PyErr_NormalizeException(&type, &value, &tb);
2275
Guido van Rossumb209a111997-04-29 18:18:01 +00002276 else if (PyInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002277 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002278 if (value != Py_None) {
2279 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002280 "instance exception may not have a separate value");
2281 goto raise_error;
2282 }
2283 else {
2284 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00002285 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002286 value = type;
Guido van Rossumb209a111997-04-29 18:18:01 +00002287 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2288 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002289 }
2290 }
2291 else {
2292 /* Not something you can raise. You get an exception
2293 anyway, just not what you specified :-) */
Guido van Rossumb209a111997-04-29 18:18:01 +00002294 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002295 "exceptions must be strings, classes, or instances");
2296 goto raise_error;
2297 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002298 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002299 if (tb == NULL)
2300 return WHY_EXCEPTION;
2301 else
2302 return WHY_RERAISE;
2303 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002304 Py_XDECREF(value);
2305 Py_XDECREF(type);
2306 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002307 return WHY_EXCEPTION;
2308}
2309
Barry Warsawe42b18f1997-08-25 22:13:04 +00002310static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002311unpack_sequence(PyObject *v, int argcnt, PyObject **sp)
Barry Warsawe42b18f1997-08-25 22:13:04 +00002312{
2313 int i;
2314 PyObject *w;
2315
2316 for (i = 0; i < argcnt; i++) {
2317 if (! (w = PySequence_GetItem(v, i))) {
2318 if (PyErr_ExceptionMatches(PyExc_IndexError))
2319 PyErr_SetString(PyExc_ValueError,
2320 "unpack sequence of wrong size");
2321 goto finally;
2322 }
2323 *--sp = w;
2324 }
2325 /* we better get an IndexError now */
2326 if (PySequence_GetItem(v, i) == NULL) {
2327 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2328 PyErr_Clear();
2329 return 1;
2330 }
2331 /* some other exception occurred. fall through to finally */
2332 }
2333 else
2334 PyErr_SetString(PyExc_ValueError,
2335 "unpack sequence of wrong size");
2336 /* fall through */
2337finally:
Barry Warsaw91010551997-08-25 22:30:51 +00002338 for (; i > 0; i--, sp++)
2339 Py_DECREF(*sp);
Barry Warsawe42b18f1997-08-25 22:13:04 +00002340
2341 return 0;
2342}
2343
2344
Guido van Rossum96a42c81992-01-12 02:29:51 +00002345#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00002346static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002347prtrace(PyObject *v, char *str)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002348{
Guido van Rossum3f5da241990-12-20 15:06:42 +00002349 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00002350 if (PyObject_Print(v, stdout, 0) != 0)
2351 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00002352 printf("\n");
Guido van Rossumcc229ea2000-05-04 00:55:17 +00002353 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002354}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002355#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002356
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002357static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002358call_exc_trace(PyObject **p_trace, PyObject **p_newtrace, PyFrameObject *f)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002359{
Guido van Rossumb209a111997-04-29 18:18:01 +00002360 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002361 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002362 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002363 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002364 value = Py_None;
2365 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002366 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002367 arg = Py_BuildValue("(OOO)", type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002368 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002369 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002370 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002371 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002372 err = call_trace(p_trace, p_newtrace, f, "exception", arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002373 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002374 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00002375 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002376 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002377 Py_XDECREF(type);
2378 Py_XDECREF(value);
2379 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002380 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002381}
2382
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002383/* PyObject **p_trace: in/out; may not be NULL;
2384 may not point to NULL variable initially
2385 PyObject **p_newtrace: in/out; may be NULL;
2386 may point to NULL variable;
2387 may be same variable as p_newtrace */
2388
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002389static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002390call_trace(PyObject **p_trace, PyObject **p_newtrace, PyFrameObject *f,
2391 char *msg, PyObject *arg)
Guido van Rossum96a42c81992-01-12 02:29:51 +00002392{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002393 PyThreadState *tstate = f->f_tstate;
Guido van Rossumb209a111997-04-29 18:18:01 +00002394 PyObject *args, *what;
2395 PyObject *res = NULL;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002396
Guido van Rossuma027efa1997-05-05 20:56:21 +00002397 if (tstate->tracing) {
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002398 /* Don't do recursive traces */
2399 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002400 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002401 *p_newtrace = NULL;
2402 }
2403 return 0;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002404 }
2405
Guido van Rossumb209a111997-04-29 18:18:01 +00002406 args = PyTuple_New(3);
Guido van Rossumf10570b1995-07-07 22:53:21 +00002407 if (args == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002408 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002409 what = PyString_FromString(msg);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002410 if (what == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002411 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002412 Py_INCREF(f);
2413 PyTuple_SET_ITEM(args, 0, (PyObject *)f);
2414 PyTuple_SET_ITEM(args, 1, what);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002415 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002416 arg = Py_None;
2417 Py_INCREF(arg);
2418 PyTuple_SET_ITEM(args, 2, arg);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002419 tstate->tracing++;
Guido van Rossumb209a111997-04-29 18:18:01 +00002420 PyFrame_FastToLocals(f);
2421 res = PyEval_CallObject(*p_trace, args); /* May clear *p_trace! */
2422 PyFrame_LocalsToFast(f, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002423 tstate->tracing--;
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002424 cleanup:
Guido van Rossumb209a111997-04-29 18:18:01 +00002425 Py_XDECREF(args);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002426 if (res == NULL) {
2427 /* The trace proc raised an exception */
Guido van Rossumb209a111997-04-29 18:18:01 +00002428 PyTraceBack_Here(f);
2429 Py_XDECREF(*p_trace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002430 *p_trace = NULL;
2431 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002432 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002433 *p_newtrace = NULL;
2434 }
Barry Warsawf6202631999-09-08 16:26:33 +00002435 /* to be extra double plus sure we don't get recursive
2436 * calls inf either tracefunc or profilefunc gets an
2437 * exception, zap the global variables.
2438 */
2439 Py_XDECREF(tstate->sys_tracefunc);
2440 tstate->sys_tracefunc = NULL;
2441 Py_XDECREF(tstate->sys_profilefunc);
2442 tstate->sys_profilefunc = NULL;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002443 return -1;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002444 }
2445 else {
2446 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002447 Py_XDECREF(*p_newtrace);
2448 if (res == Py_None)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002449 *p_newtrace = NULL;
2450 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002451 Py_INCREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002452 *p_newtrace = res;
2453 }
2454 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002455 Py_DECREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002456 return 0;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002457 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002458}
2459
Guido van Rossumb209a111997-04-29 18:18:01 +00002460PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002461PyEval_GetBuiltins(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00002462{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002463 PyThreadState *tstate = PyThreadState_Get();
2464 PyFrameObject *current_frame = tstate->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002465 if (current_frame == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002466 return tstate->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00002467 else
2468 return current_frame->f_builtins;
2469}
2470
Guido van Rossumb209a111997-04-29 18:18:01 +00002471PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002472PyEval_GetLocals(void)
Guido van Rossum5b722181993-03-30 17:46:03 +00002473{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002474 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum5b722181993-03-30 17:46:03 +00002475 if (current_frame == NULL)
2476 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002477 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00002478 return current_frame->f_locals;
2479}
2480
Guido van Rossumb209a111997-04-29 18:18:01 +00002481PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002482PyEval_GetGlobals(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002483{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002484 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002485 if (current_frame == NULL)
2486 return NULL;
2487 else
2488 return current_frame->f_globals;
2489}
2490
Guido van Rossumb209a111997-04-29 18:18:01 +00002491PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002492PyEval_GetFrame(void)
Guido van Rossume59214e1994-08-30 08:01:59 +00002493{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002494 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossumb209a111997-04-29 18:18:01 +00002495 return (PyObject *)current_frame;
Guido van Rossume59214e1994-08-30 08:01:59 +00002496}
2497
Guido van Rossum6135a871995-01-09 17:53:26 +00002498int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002499PyEval_GetRestricted(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00002500{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002501 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002502 return current_frame == NULL ? 0 : current_frame->f_restricted;
2503}
2504
Guido van Rossumbe270261997-05-22 22:26:18 +00002505int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002506Py_FlushLine(void)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002507{
Guido van Rossumb209a111997-04-29 18:18:01 +00002508 PyObject *f = PySys_GetObject("stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00002509 if (f == NULL)
2510 return 0;
2511 if (!PyFile_SoftSpace(f, 0))
2512 return 0;
2513 return PyFile_WriteString("\n", f);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002514}
2515
Guido van Rossum3f5da241990-12-20 15:06:42 +00002516
Guido van Rossum681d79a1995-07-18 14:51:37 +00002517/* External interface to call any callable object.
2518 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002519
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002520#undef PyEval_CallObject
2521/* for backward compatibility: export this interface */
2522
Guido van Rossumb209a111997-04-29 18:18:01 +00002523PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002524PyEval_CallObject(PyObject *func, PyObject *arg)
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002525{
Guido van Rossumb209a111997-04-29 18:18:01 +00002526 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002527}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002528#define PyEval_CallObject(func,arg) \
2529 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00002530
Guido van Rossumb209a111997-04-29 18:18:01 +00002531PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002532PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum681d79a1995-07-18 14:51:37 +00002533{
Jeremy Hylton52820442001-01-03 23:52:36 +00002534 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002535
2536 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002537 arg = PyTuple_New(0);
2538 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002539 PyErr_SetString(PyExc_TypeError,
2540 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002541 return NULL;
2542 }
2543 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002544 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002545
Guido van Rossumb209a111997-04-29 18:18:01 +00002546 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002547 PyErr_SetString(PyExc_TypeError,
2548 "keyword list must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00002549 Py_DECREF(arg);
Guido van Rossume3e61c11995-08-04 04:14:47 +00002550 return NULL;
2551 }
2552
Jeremy Hylton52820442001-01-03 23:52:36 +00002553 result = call_object(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002554 Py_DECREF(arg);
Jeremy Hylton52820442001-01-03 23:52:36 +00002555 return result;
2556}
2557
2558/* How often is each kind of object called? The answer depends on the
2559 program. An instrumented call_object() was used to run the Python
2560 regression test suite. The results were:
2561 4200000 PyCFunctions
2562 390000 fast_function() calls
2563 94000 other functions
2564 480000 all functions (sum of prev two)
2565 150000 methods
2566 100000 classes
2567
2568 Tests on other bodies of code show that PyCFunctions are still
2569 most common, but not by such a large margin.
2570*/
2571
2572static PyObject *
2573call_object(PyObject *func, PyObject *arg, PyObject *kw)
2574{
2575 ternaryfunc call;
2576 PyObject *result;
2577
2578 if (PyMethod_Check(func))
2579 result = call_method(func, arg, kw);
2580 else if (PyFunction_Check(func))
2581 result = call_eval_code2(func, arg, kw);
2582 else if (PyCFunction_Check(func))
2583 result = call_cfunction(func, arg, kw);
2584 else if (PyClass_Check(func))
2585 result = PyInstance_New(func, arg, kw);
2586 else if (PyInstance_Check(func))
2587 result = call_instance(func, arg, kw);
2588 else if ((call = func->ob_type->tp_call) != NULL)
2589 result = (*call)(func, arg, kw);
2590 else {
2591 PyErr_Format(PyExc_TypeError, "object is not callable: %s",
2592 PyString_AS_STRING(PyObject_Repr(func)));
2593 return NULL;
2594 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002595 if (result == NULL && !PyErr_Occurred())
2596 PyErr_SetString(PyExc_SystemError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002597 "NULL result without error in call_object");
Guido van Rossume59214e1994-08-30 08:01:59 +00002598
2599 return result;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002600}
2601
Guido van Rossumb209a111997-04-29 18:18:01 +00002602static PyObject *
Jeremy Hylton52820442001-01-03 23:52:36 +00002603call_cfunction(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002604{
Jeremy Hylton52820442001-01-03 23:52:36 +00002605 PyCFunctionObject* f = (PyCFunctionObject*)func;
2606 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
2607 PyObject *self = PyCFunction_GET_SELF(func);
2608 int flags = PyCFunction_GET_FLAGS(func);
2609
Jeremy Hylton52820442001-01-03 23:52:36 +00002610 if (flags & METH_KEYWORDS) {
Fred Drake1a7aab72001-01-04 22:33:02 +00002611 if (kw == NULL) {
2612 static PyObject *dict = NULL;
2613 if (dict == NULL) {
2614 dict = PyDict_New();
2615 if (dict == NULL)
2616 return NULL;
2617 }
2618 kw = dict;
2619 Py_INCREF(dict);
2620 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002621 return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002622 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002623 if (kw != NULL && PyDict_Size(kw) != 0) {
2624 PyErr_Format(PyExc_TypeError,
2625 "%.200s() takes no keyword arguments",
2626 f->m_ml->ml_name);
2627 return NULL;
2628 }
Fred Drake1a7aab72001-01-04 22:33:02 +00002629 if (flags & METH_VARARGS) {
2630 return (*meth)(self, arg);
2631 }
2632 if (!(flags & METH_VARARGS)) {
2633 /* the really old style */
2634 int size = PyTuple_GET_SIZE(arg);
2635 if (size == 1)
2636 arg = PyTuple_GET_ITEM(arg, 0);
2637 else if (size == 0)
2638 arg = NULL;
2639 return (*meth)(self, arg);
2640 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002641 /* should never get here ??? */
2642 PyErr_BadInternalCall();
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002643 return NULL;
2644}
2645
Guido van Rossumb209a111997-04-29 18:18:01 +00002646static PyObject *
Jeremy Hylton52820442001-01-03 23:52:36 +00002647call_instance(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002648{
Jeremy Hylton52820442001-01-03 23:52:36 +00002649 PyObject *res, *call = PyObject_GetAttrString(func, "__call__");
2650 if (call == NULL) {
2651 PyInstanceObject *inst = (PyInstanceObject*) func;
2652 PyErr_Clear();
2653 PyErr_Format(PyExc_AttributeError,
2654 "%.200s instance has no __call__ method",
2655 PyString_AsString(inst->in_class->cl_name));
Guido van Rossum681d79a1995-07-18 14:51:37 +00002656 return NULL;
2657 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002658 res = call_object(call, arg, kw);
2659 Py_DECREF(call);
2660 return res;
2661}
2662
2663static PyObject *
2664call_method(PyObject *func, PyObject *arg, PyObject *kw)
2665{
2666 PyObject *self = PyMethod_GET_SELF(func);
2667 PyObject *class = PyMethod_GET_CLASS(func);
2668 PyObject *result;
2669
2670 func = PyMethod_GET_FUNCTION(func);
2671 if (self == NULL) {
2672 /* Unbound methods must be called with an instance of
2673 the class (or a derived class) as first argument */
2674 if (PyTuple_Size(arg) >= 1)
2675 self = PyTuple_GET_ITEM(arg, 0);
2676 if (!(self != NULL && PyInstance_Check(self)
2677 && PyClass_IsSubclass((PyObject *)
2678 (((PyInstanceObject *)self)->in_class),
2679 class))) {
2680 PyErr_SetString(PyExc_TypeError,
2681 "unbound method must be called with instance as first argument");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002682 return NULL;
2683 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002684 Py_INCREF(arg);
Jeremy Hylton52820442001-01-03 23:52:36 +00002685 } else {
2686 int argcount = PyTuple_Size(arg);
2687 PyObject *newarg = PyTuple_New(argcount + 1);
2688 int i;
2689 if (newarg == NULL)
2690 return NULL;
2691 Py_INCREF(self);
2692 PyTuple_SET_ITEM(newarg, 0, self);
2693 for (i = 0; i < argcount; i++) {
2694 PyObject *v = PyTuple_GET_ITEM(arg, i);
2695 Py_XINCREF(v);
2696 PyTuple_SET_ITEM(newarg, i+1, v);
2697 }
2698 arg = newarg;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002699 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002700 result = call_object(func, arg, kw);
2701 Py_DECREF(arg);
2702 return result;
2703}
2704
2705static PyObject *
2706call_eval_code2(PyObject *func, PyObject *arg, PyObject *kw)
2707{
2708 PyObject *result;
2709 PyObject *argdefs;
2710 PyObject **d, **k;
2711 int nk, nd;
2712
2713 argdefs = PyFunction_GET_DEFAULTS(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00002714 if (argdefs != NULL && PyTuple_Check(argdefs)) {
2715 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
2716 nd = PyTuple_Size(argdefs);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002717 }
2718 else {
2719 d = NULL;
2720 nd = 0;
2721 }
2722
2723 if (kw != NULL) {
2724 int pos, i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002725 nk = PyDict_Size(kw);
2726 k = PyMem_NEW(PyObject *, 2*nk);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002727 if (k == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002728 PyErr_NoMemory();
2729 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002730 return NULL;
Guido van Rossume59214e1994-08-30 08:01:59 +00002731 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002732 pos = i = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002733 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002734 i += 2;
2735 nk = i/2;
2736 /* XXX This is broken if the caller deletes dict items! */
2737 }
2738 else {
2739 k = NULL;
2740 nk = 0;
Guido van Rossume59214e1994-08-30 08:01:59 +00002741 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002742
Guido van Rossum681d79a1995-07-18 14:51:37 +00002743 result = eval_code2(
Jeremy Hylton52820442001-01-03 23:52:36 +00002744 (PyCodeObject *)PyFunction_GET_CODE(func),
2745 PyFunction_GET_GLOBALS(func), (PyObject *)NULL,
Guido van Rossumb209a111997-04-29 18:18:01 +00002746 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
Guido van Rossum681d79a1995-07-18 14:51:37 +00002747 k, nk,
Jeremy Hylton52820442001-01-03 23:52:36 +00002748 d, nd);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002749
Guido van Rossumb18618d2000-05-03 23:44:39 +00002750 if (k != NULL)
2751 PyMem_DEL(k);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002752
Guido van Rossum681d79a1995-07-18 14:51:37 +00002753 return result;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002754}
2755
Jeremy Hylton52820442001-01-03 23:52:36 +00002756#define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))
2757
2758/* The two fast_xxx() functions optimize calls for which no argument
2759 tuple is necessary; the objects are passed directly from the stack.
2760 fast_cfunction() is called for METH_OLDARGS functions.
2761 fast_function() is for functions with no special argument handling.
2762*/
2763
2764static PyObject *
2765fast_cfunction(PyObject *func, PyObject ***pp_stack, int na)
2766{
2767 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
2768 PyObject *self = PyCFunction_GET_SELF(func);
2769
2770 if (na == 0)
2771 return (*meth)(self, NULL);
2772 else if (na == 1)
2773 return (*meth)(self, EXT_POP(*pp_stack));
2774 else {
2775 PyObject *args = load_args(pp_stack, na);
2776 PyObject *result = (*meth)(self, args);
2777 Py_DECREF(args);
2778 return result;
2779 }
2780}
2781
2782static PyObject *
2783fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
2784{
2785 PyObject *co = PyFunction_GET_CODE(func);
2786 PyObject *globals = PyFunction_GET_GLOBALS(func);
2787 PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
2788 PyObject **d = NULL;
2789 int nd = 0;
2790
2791 if (argdefs != NULL) {
2792 d = &PyTuple_GET_ITEM(argdefs, 0);
2793 nd = ((PyTupleObject *)argdefs)->ob_size;
2794 }
2795 return eval_code2((PyCodeObject *)co, globals,
2796 (PyObject *)NULL, (*pp_stack)-n, na,
2797 (*pp_stack)-2*nk, nk, d, nd);
2798}
2799
2800static PyObject *
2801update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack)
2802{
2803 PyObject *kwdict = NULL;
2804 if (orig_kwdict == NULL)
2805 kwdict = PyDict_New();
2806 else {
2807 kwdict = PyDict_Copy(orig_kwdict);
2808 Py_DECREF(orig_kwdict);
2809 }
2810 if (kwdict == NULL)
2811 return NULL;
2812 while (--nk >= 0) {
2813 int err;
2814 PyObject *value = EXT_POP(*pp_stack);
2815 PyObject *key = EXT_POP(*pp_stack);
2816 if (PyDict_GetItem(kwdict, key) != NULL) {
2817 PyErr_Format(PyExc_TypeError,
2818 "keyword parameter '%.400s' "
2819 "redefined in function call",
2820 PyString_AsString(key));
2821 Py_DECREF(key);
2822 Py_DECREF(value);
2823 Py_DECREF(kwdict);
2824 return NULL;
2825 }
2826 err = PyDict_SetItem(kwdict, key, value);
2827 Py_DECREF(key);
2828 Py_DECREF(value);
2829 if (err) {
2830 Py_DECREF(kwdict);
2831 return NULL;
2832 }
2833 }
2834 return kwdict;
2835}
2836
2837static PyObject *
2838update_star_args(int nstack, int nstar, PyObject *stararg,
2839 PyObject ***pp_stack)
2840{
2841 PyObject *callargs, *w;
2842
2843 callargs = PyTuple_New(nstack + nstar);
2844 if (callargs == NULL) {
2845 return NULL;
2846 }
2847 if (nstar) {
2848 int i;
2849 for (i = 0; i < nstar; i++) {
2850 PyObject *a = PyTuple_GET_ITEM(stararg, i);
2851 Py_INCREF(a);
2852 PyTuple_SET_ITEM(callargs, nstack + i, a);
2853 }
2854 }
2855 while (--nstack >= 0) {
2856 w = EXT_POP(*pp_stack);
2857 PyTuple_SET_ITEM(callargs, nstack, w);
2858 }
2859 return callargs;
2860}
2861
2862static PyObject *
2863load_args(PyObject ***pp_stack, int na)
2864{
2865 PyObject *args = PyTuple_New(na);
2866 PyObject *w;
2867
2868 if (args == NULL)
2869 return NULL;
2870 while (--na >= 0) {
2871 w = EXT_POP(*pp_stack);
2872 PyTuple_SET_ITEM(args, na, w);
2873 }
2874 return args;
2875}
2876
2877static PyObject *
2878do_call(PyObject *func, PyObject ***pp_stack, int na, int nk)
2879{
2880 PyObject *callargs = NULL;
2881 PyObject *kwdict = NULL;
2882 PyObject *result = NULL;
2883
2884 if (nk > 0) {
2885 kwdict = update_keyword_args(NULL, nk, pp_stack);
2886 if (kwdict == NULL)
2887 goto call_fail;
2888 }
2889 callargs = load_args(pp_stack, na);
2890 if (callargs == NULL)
2891 goto call_fail;
2892 result = call_object(func, callargs, kwdict);
2893 call_fail:
2894 Py_XDECREF(callargs);
2895 Py_XDECREF(kwdict);
2896 return result;
2897}
2898
2899static PyObject *
2900ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
2901{
2902 int nstar = 0;
2903 PyObject *callargs = NULL;
2904 PyObject *stararg = NULL;
2905 PyObject *kwdict = NULL;
2906 PyObject *result = NULL;
2907
2908 if (flags & CALL_FLAG_KW) {
2909 kwdict = EXT_POP(*pp_stack);
2910 if (!(kwdict && PyDict_Check(kwdict))) {
2911 PyErr_SetString(PyExc_TypeError,
2912 "** argument must be a dictionary");
2913 goto ext_call_fail;
2914 }
2915 }
2916 if (flags & CALL_FLAG_VAR) {
2917 stararg = EXT_POP(*pp_stack);
2918 if (!PyTuple_Check(stararg)) {
2919 PyObject *t = NULL;
2920 t = PySequence_Tuple(stararg);
2921 if (t == NULL) {
2922 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
2923 PyErr_SetString(PyExc_TypeError,
2924 "* argument must be a sequence");
2925 }
2926 goto ext_call_fail;
2927 }
2928 Py_DECREF(stararg);
2929 stararg = t;
2930 }
2931 nstar = PyTuple_GET_SIZE(stararg);
2932 }
2933 if (nk > 0) {
2934 kwdict = update_keyword_args(kwdict, nk, pp_stack);
2935 if (kwdict == NULL)
2936 goto ext_call_fail;
2937 }
2938 callargs = update_star_args(na, nstar, stararg, pp_stack);
2939 if (callargs == NULL)
2940 goto ext_call_fail;
2941 result = call_object(func, callargs, kwdict);
2942 ext_call_fail:
2943 Py_XDECREF(callargs);
2944 Py_XDECREF(kwdict);
2945 Py_XDECREF(stararg);
2946 return result;
2947}
2948
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002949#define SLICE_ERROR_MSG \
2950 "standard sequence type does not support step size other than one"
2951
Guido van Rossumb209a111997-04-29 18:18:01 +00002952static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002953loop_subscript(PyObject *v, PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002954{
Guido van Rossumb209a111997-04-29 18:18:01 +00002955 PySequenceMethods *sq = v->ob_type->tp_as_sequence;
Guido van Rossume59214e1994-08-30 08:01:59 +00002956 int i;
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002957 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002958 PyErr_SetString(PyExc_TypeError, "loop over non-sequence");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002959 return NULL;
2960 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002961 i = PyInt_AsLong(w);
Guido van Rossume59214e1994-08-30 08:01:59 +00002962 v = (*sq->sq_item)(v, i);
2963 if (v)
2964 return v;
Barry Warsaw4249f541997-08-22 21:26:19 +00002965 if (PyErr_ExceptionMatches(PyExc_IndexError))
Guido van Rossumb209a111997-04-29 18:18:01 +00002966 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002967 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002968}
2969
Guido van Rossum20c6add2000-05-08 14:06:50 +00002970/* Extract a slice index from a PyInt or PyLong, the index is bound to
2971 the range [-INT_MAX+1, INTMAX]. Returns 0 and an exception if there is
2972 and error. Returns 1 on success.*/
2973
2974int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002975_PyEval_SliceIndex(PyObject *v, int *pi)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002976{
2977 if (v != NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002978 long x;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002979 if (PyInt_Check(v)) {
2980 x = PyInt_AsLong(v);
2981 } else if (PyLong_Check(v)) {
2982 x = PyLong_AsLong(v);
2983 if (x==-1 && PyErr_Occurred()) {
2984 PyObject *long_zero;
2985
2986 if (!PyErr_ExceptionMatches( PyExc_OverflowError ) ) {
2987 /* It's not an overflow error, so just
2988 signal an error */
Guido van Rossum20c6add2000-05-08 14:06:50 +00002989 return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002990 }
2991
2992 /* It's an overflow error, so we need to
2993 check the sign of the long integer,
2994 set the value to INT_MAX or 0, and clear
2995 the error. */
2996
2997 /* Create a long integer with a value of 0 */
2998 long_zero = PyLong_FromLong( 0L );
Guido van Rossum20c6add2000-05-08 14:06:50 +00002999 if (long_zero == NULL) return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00003000
3001 /* Check sign */
3002 if (PyObject_Compare(long_zero, v) < 0)
3003 x = INT_MAX;
3004 else
3005 x = 0;
3006
3007 /* Free the long integer we created, and clear the
3008 OverflowError */
3009 Py_DECREF(long_zero);
3010 PyErr_Clear();
3011 }
3012 } else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003013 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003014 "slice indices must be integers");
Guido van Rossum20c6add2000-05-08 14:06:50 +00003015 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003016 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00003017 /* Truncate -- very long indices are truncated anyway */
3018 if (x > INT_MAX)
3019 x = INT_MAX;
3020 else if (x < -INT_MAX)
3021 x = 0;
3022 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003023 }
Guido van Rossum20c6add2000-05-08 14:06:50 +00003024 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003025}
3026
Guido van Rossumb209a111997-04-29 18:18:01 +00003027static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003028apply_slice(PyObject *u, PyObject *v, PyObject *w) /* return u[v:w] */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003029{
Guido van Rossuma027efa1997-05-05 20:56:21 +00003030 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003031 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003032 return NULL;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003033 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum04691fc1992-08-12 15:35:34 +00003034 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00003035 return PySequence_GetSlice(u, ilow, ihigh);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003036}
Guido van Rossum3f5da241990-12-20 15:06:42 +00003037
3038static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003039assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x) /* u[v:w] = x */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003040{
Guido van Rossuma027efa1997-05-05 20:56:21 +00003041 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003042 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum3f5da241990-12-20 15:06:42 +00003043 return -1;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003044 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum3f5da241990-12-20 15:06:42 +00003045 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00003046 if (x == NULL)
3047 return PySequence_DelSlice(u, ilow, ihigh);
3048 else
3049 return PySequence_SetSlice(u, ilow, ihigh, x);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003050}
3051
Guido van Rossumb209a111997-04-29 18:18:01 +00003052static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003053cmp_outcome(int op, register PyObject *v, register PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003054{
3055 register int cmp;
3056 register int res = 0;
3057 switch (op) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00003058 case IS:
3059 case IS_NOT:
3060 res = (v == w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00003061 if (op == (int) IS_NOT)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003062 res = !res;
3063 break;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003064 case IN:
3065 case NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00003066 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00003067 if (res < 0)
3068 return NULL;
Guido van Rossum04691fc1992-08-12 15:35:34 +00003069 if (op == (int) NOT_IN)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003070 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003071 break;
3072 case EXC_MATCH:
Barry Warsaw4249f541997-08-22 21:26:19 +00003073 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003074 break;
3075 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00003076 cmp = PyObject_Compare(v, w);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00003077 if (cmp && PyErr_Occurred())
3078 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00003079 switch (op) {
3080 case LT: res = cmp < 0; break;
3081 case LE: res = cmp <= 0; break;
3082 case EQ: res = cmp == 0; break;
3083 case NE: res = cmp != 0; break;
3084 case GT: res = cmp > 0; break;
3085 case GE: res = cmp >= 0; break;
3086 /* XXX no default? (res is initialized to 0 though) */
3087 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003088 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003089 v = res ? Py_True : Py_False;
3090 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003091 return v;
3092}
3093
Thomas Wouters52152252000-08-17 22:55:00 +00003094static PyObject *
3095import_from(PyObject *v, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00003096{
Guido van Rossumb209a111997-04-29 18:18:01 +00003097 PyObject *w, *x;
3098 if (!PyModule_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003099 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003100 "import-from requires a module object");
Thomas Wouters52152252000-08-17 22:55:00 +00003101 return NULL;
3102 }
3103 w = PyModule_GetDict(v); /* TDB: can this not fail ? */
3104 x = PyDict_GetItem(w, name);
3105 if (x == NULL) {
3106 PyErr_Format(PyExc_ImportError,
3107 "cannot import name %.230s",
3108 PyString_AsString(name));
3109 } else
3110 Py_INCREF(x);
3111 return x;
3112}
3113
3114static int
3115import_all_from(PyObject *locals, PyObject *v)
3116{
3117 int pos = 0, err;
3118 PyObject *name, *value;
3119 PyObject *w;
3120
3121 if (!PyModule_Check(v)) {
3122 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003123 "import-from requires a module object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003124 return -1;
3125 }
Thomas Wouters52152252000-08-17 22:55:00 +00003126 w = PyModule_GetDict(v); /* TBD: can this not fail ? */
3127
3128 while (PyDict_Next(w, &pos, &name, &value)) {
3129 if (!PyString_Check(name) ||
3130 PyString_AsString(name)[0] == '_')
Guido van Rossume9736fc1990-11-18 17:33:06 +00003131 continue;
Thomas Wouters52152252000-08-17 22:55:00 +00003132 Py_INCREF(value);
3133 err = PyDict_SetItem(locals, name, value);
3134 Py_DECREF(value);
3135 if (err != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003136 return -1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003137 }
Thomas Wouters52152252000-08-17 22:55:00 +00003138 return 0;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003139}
3140
Guido van Rossumb209a111997-04-29 18:18:01 +00003141static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003142build_class(PyObject *methods, PyObject *bases, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00003143{
Guido van Rossumcd649651997-08-22 16:56:16 +00003144 int i, n;
Guido van Rossumb209a111997-04-29 18:18:01 +00003145 if (!PyTuple_Check(bases)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003146 PyErr_SetString(PyExc_SystemError,
3147 "build_class with non-tuple bases");
Guido van Rossum25831651993-05-19 14:50:45 +00003148 return NULL;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003149 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003150 if (!PyDict_Check(methods)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003151 PyErr_SetString(PyExc_SystemError,
3152 "build_class with non-dictionary");
Guido van Rossume9736fc1990-11-18 17:33:06 +00003153 return NULL;
3154 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003155 if (!PyString_Check(name)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003156 PyErr_SetString(PyExc_SystemError,
Guido van Rossum7a5b7962000-03-31 13:52:29 +00003157 "build_class with non-string name");
Guido van Rossum25831651993-05-19 14:50:45 +00003158 return NULL;
3159 }
Guido van Rossumcd649651997-08-22 16:56:16 +00003160 n = PyTuple_Size(bases);
3161 for (i = 0; i < n; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003162 PyObject *base = PyTuple_GET_ITEM(bases, i);
3163 if (!PyClass_Check(base)) {
Guido van Rossum150b2df1996-12-05 23:17:11 +00003164 /* Call the base's *type*, if it is callable.
3165 This code is a hook for Donald Beaudry's
3166 and Jim Fulton's type extensions. In
Thomas Wouters7e474022000-07-16 12:04:32 +00003167 unextended Python it will never be triggered
Guido van Rossum55b9ab51997-07-31 03:54:02 +00003168 since its types are not callable.
3169 Ditto: call the bases's *class*, if it has
3170 one. This makes the same thing possible
3171 without writing C code. A true meta-object
3172 protocol! */
3173 PyObject *basetype = (PyObject *)base->ob_type;
3174 PyObject *callable = NULL;
3175 if (PyCallable_Check(basetype))
3176 callable = basetype;
3177 else
3178 callable = PyObject_GetAttrString(
3179 base, "__class__");
3180 if (callable) {
3181 PyObject *args;
3182 PyObject *newclass = NULL;
3183 args = Py_BuildValue(
3184 "(OOO)", name, bases, methods);
3185 if (args != NULL) {
3186 newclass = PyEval_CallObject(
3187 callable, args);
3188 Py_DECREF(args);
3189 }
Guido van Rossum730806d1998-04-10 22:27:42 +00003190 if (callable != basetype) {
Guido van Rossum55b9ab51997-07-31 03:54:02 +00003191 Py_DECREF(callable);
Guido van Rossum730806d1998-04-10 22:27:42 +00003192 }
Guido van Rossum55b9ab51997-07-31 03:54:02 +00003193 return newclass;
Guido van Rossum150b2df1996-12-05 23:17:11 +00003194 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003195 PyErr_SetString(PyExc_TypeError,
Guido van Rossum25831651993-05-19 14:50:45 +00003196 "base is not a class object");
3197 return NULL;
3198 }
3199 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003200 return PyClass_New(bases, methods, name);
Guido van Rossum25831651993-05-19 14:50:45 +00003201}
3202
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003203static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003204exec_statement(PyFrameObject *f, PyObject *prog, PyObject *globals,
3205 PyObject *locals)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003206{
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003207 int n;
Guido van Rossumb209a111997-04-29 18:18:01 +00003208 PyObject *v;
Guido van Rossum681d79a1995-07-18 14:51:37 +00003209 int plain = 0;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003210
Guido van Rossumb209a111997-04-29 18:18:01 +00003211 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
3212 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003213 /* Backward compatibility hack */
Guido van Rossumb209a111997-04-29 18:18:01 +00003214 globals = PyTuple_GetItem(prog, 1);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003215 if (n == 3)
Guido van Rossumb209a111997-04-29 18:18:01 +00003216 locals = PyTuple_GetItem(prog, 2);
3217 prog = PyTuple_GetItem(prog, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003218 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003219 if (globals == Py_None) {
3220 globals = PyEval_GetGlobals();
3221 if (locals == Py_None) {
3222 locals = PyEval_GetLocals();
Guido van Rossum681d79a1995-07-18 14:51:37 +00003223 plain = 1;
3224 }
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003225 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003226 else if (locals == Py_None)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003227 locals = globals;
Guido van Rossumb209a111997-04-29 18:18:01 +00003228 if (!PyString_Check(prog) &&
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +00003229 !PyUnicode_Check(prog) &&
Guido van Rossumb209a111997-04-29 18:18:01 +00003230 !PyCode_Check(prog) &&
3231 !PyFile_Check(prog)) {
3232 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003233 "exec: arg 1 must be a string, file, or code object");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003234 return -1;
3235 }
Fred Drake661ea262000-10-24 19:57:45 +00003236 if (!PyDict_Check(globals)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003237 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003238 "exec: arg 2 must be a dictionary or None");
3239 return -1;
3240 }
3241 if (!PyDict_Check(locals)) {
3242 PyErr_SetString(PyExc_TypeError,
3243 "exec: arg 3 must be a dictionary or None");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003244 return -1;
3245 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003246 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00003247 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
Guido van Rossumb209a111997-04-29 18:18:01 +00003248 if (PyCode_Check(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003249 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003250 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003251 else if (PyFile_Check(prog)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003252 FILE *fp = PyFile_AsFile(prog);
3253 char *name = PyString_AsString(PyFile_Name(prog));
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003254 v = PyRun_File(fp, name, Py_file_input, globals, locals);
3255 }
3256 else {
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +00003257 char *str;
3258 if (PyString_AsStringAndSize(prog, &str, NULL))
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003259 return -1;
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +00003260 v = PyRun_String(str, Py_file_input, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003261 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003262 if (plain)
3263 PyFrame_LocalsToFast(f, 0);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003264 if (v == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003265 return -1;
Guido van Rossumb209a111997-04-29 18:18:01 +00003266 Py_DECREF(v);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003267 return 0;
3268}
Guido van Rossum24c13741995-02-14 09:42:43 +00003269
Paul Prescode68140d2000-08-30 20:25:01 +00003270static void
3271format_exc_check_arg(PyObject *exc, char *format_str, PyObject *obj)
3272{
3273 char *obj_str;
3274
3275 if (!obj)
3276 return;
3277
3278 obj_str = PyString_AsString(obj);
3279 if (!obj_str)
3280 return;
3281
3282 PyErr_Format(exc, format_str, obj_str);
3283}
Guido van Rossum950361c1997-01-24 13:49:28 +00003284
3285#ifdef DYNAMIC_EXECUTION_PROFILE
3286
3287PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003288getarray(long a[256])
Guido van Rossum950361c1997-01-24 13:49:28 +00003289{
3290 int i;
3291 PyObject *l = PyList_New(256);
3292 if (l == NULL) return NULL;
3293 for (i = 0; i < 256; i++) {
3294 PyObject *x = PyInt_FromLong(a[i]);
3295 if (x == NULL) {
3296 Py_DECREF(l);
3297 return NULL;
3298 }
3299 PyList_SetItem(l, i, x);
3300 }
3301 for (i = 0; i < 256; i++)
3302 a[i] = 0;
3303 return l;
3304}
3305
3306PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003307_Py_GetDXProfile(PyObject *self, PyObject *args)
Guido van Rossum950361c1997-01-24 13:49:28 +00003308{
3309#ifndef DXPAIRS
3310 return getarray(dxp);
3311#else
3312 int i;
3313 PyObject *l = PyList_New(257);
3314 if (l == NULL) return NULL;
3315 for (i = 0; i < 257; i++) {
3316 PyObject *x = getarray(dxpairs[i]);
3317 if (x == NULL) {
3318 Py_DECREF(l);
3319 return NULL;
3320 }
3321 PyList_SetItem(l, i, x);
3322 }
3323 return l;
3324#endif
3325}
3326
3327#endif