blob: 347a5411f9368f4c8e8b7cc9fea474c8a42d9736 [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();
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001248 w = PySys_GetObject("displayhook");
1249 if (w == NULL) {
1250 PyErr_SetString(PyExc_RuntimeError,
1251 "lost sys.displayhook");
1252 err = -1;
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001253 x = NULL;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001254 }
1255 if (err == 0) {
1256 x = Py_BuildValue("(O)", v);
1257 if (x == NULL)
1258 err = -1;
1259 }
1260 if (err == 0) {
1261 w = PyEval_CallObject(w, x);
Moshe Zadkaf5df3832001-01-11 11:55:37 +00001262 Py_XDECREF(w);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001263 if (w == NULL)
1264 err = -1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001265 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001266 Py_DECREF(v);
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001267 Py_XDECREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001268 break;
Moshe Zadkaf68f2fe2001-01-11 05:41:27 +00001269
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001270 case PRINT_ITEM_TO:
1271 w = stream = POP();
1272 /* fall through to PRINT_ITEM */
1273
Guido van Rossum374a9221991-04-04 10:40:29 +00001274 case PRINT_ITEM:
1275 v = POP();
Barry Warsaw093abe02000-08-29 04:56:13 +00001276 if (stream == NULL || stream == Py_None) {
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001277 w = PySys_GetObject("stdout");
1278 if (w == NULL) {
1279 PyErr_SetString(PyExc_RuntimeError,
1280 "lost sys.stdout");
1281 err = -1;
1282 }
Guido van Rossum8f183201997-12-31 05:53:15 +00001283 }
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001284 if (w != NULL && PyFile_SoftSpace(w, 1))
Guido van Rossumbe270261997-05-22 22:26:18 +00001285 err = PyFile_WriteString(" ", w);
1286 if (err == 0)
1287 err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
Guido van Rossumb209a111997-04-29 18:18:01 +00001288 if (err == 0 && PyString_Check(v)) {
Guido van Rossumc6004111993-11-05 10:22:19 +00001289 /* XXX move into writeobject() ? */
Guido van Rossumb209a111997-04-29 18:18:01 +00001290 char *s = PyString_AsString(v);
1291 int len = PyString_Size(v);
Guido van Rossum7f7f2741995-02-10 17:01:56 +00001292 if (len > 0 &&
1293 isspace(Py_CHARMASK(s[len-1])) &&
Guido van Rossumc6004111993-11-05 10:22:19 +00001294 s[len-1] != ' ')
Guido van Rossumb209a111997-04-29 18:18:01 +00001295 PyFile_SoftSpace(w, 0);
Guido van Rossum374a9221991-04-04 10:40:29 +00001296 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001297 Py_DECREF(v);
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001298 Py_XDECREF(stream);
1299 stream = NULL;
1300 if (err == 0)
1301 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001302 break;
1303
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001304 case PRINT_NEWLINE_TO:
1305 w = stream = POP();
1306 /* fall through to PRINT_NEWLINE */
1307
Guido van Rossum374a9221991-04-04 10:40:29 +00001308 case PRINT_NEWLINE:
Barry Warsaw093abe02000-08-29 04:56:13 +00001309 if (stream == NULL || stream == Py_None) {
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001310 w = PySys_GetObject("stdout");
1311 if (w == NULL)
1312 PyErr_SetString(PyExc_RuntimeError,
1313 "lost sys.stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001314 }
Barry Warsaw23c9ec82000-08-21 15:44:01 +00001315 if (w != NULL) {
1316 err = PyFile_WriteString("\n", w);
1317 if (err == 0)
1318 PyFile_SoftSpace(w, 0);
1319 }
1320 Py_XDECREF(stream);
1321 stream = NULL;
Guido van Rossum374a9221991-04-04 10:40:29 +00001322 break;
1323
Thomas Wouters434d0822000-08-24 20:11:32 +00001324
1325#ifdef CASE_TOO_BIG
1326 default: switch (opcode) {
1327#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001328 case BREAK_LOOP:
1329 why = WHY_BREAK;
1330 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001331
Guido van Rossumf10570b1995-07-07 22:53:21 +00001332 case RAISE_VARARGS:
1333 u = v = w = NULL;
1334 switch (oparg) {
1335 case 3:
1336 u = POP(); /* traceback */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001337 /* Fallthrough */
1338 case 2:
1339 v = POP(); /* value */
1340 /* Fallthrough */
1341 case 1:
1342 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001343 case 0: /* Fallthrough */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001344 why = do_raise(w, v, u);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001345 break;
1346 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001347 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001348 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001349 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001350 break;
1351 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001352 break;
1353
1354 case LOAD_LOCALS:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001355 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001356 PyErr_SetString(PyExc_SystemError,
1357 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001358 break;
1359 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001360 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001361 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001362 break;
1363
1364 case RETURN_VALUE:
1365 retval = POP();
1366 why = WHY_RETURN;
1367 break;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001368
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001369 case EXEC_STMT:
1370 w = POP();
1371 v = POP();
1372 u = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001373 err = exec_statement(f, u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001374 Py_DECREF(u);
1375 Py_DECREF(v);
1376 Py_DECREF(w);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001377 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001378
Guido van Rossum374a9221991-04-04 10:40:29 +00001379 case POP_BLOCK:
1380 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001381 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001382 while (STACK_LEVEL() > b->b_level) {
1383 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001384 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001385 }
1386 }
1387 break;
1388
1389 case END_FINALLY:
1390 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001391 if (PyInt_Check(v)) {
1392 why = (enum why_code) PyInt_AsLong(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001393 if (why == WHY_RETURN)
1394 retval = POP();
1395 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001396 else if (PyString_Check(v) || PyClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001397 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001398 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001399 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001400 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001401 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001402 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001403 else if (v != Py_None) {
1404 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001405 "'finally' pops bad exception");
1406 why = WHY_EXCEPTION;
1407 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001408 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001409 break;
1410
1411 case BUILD_CLASS:
Guido van Rossum25831651993-05-19 14:50:45 +00001412 u = POP();
Guido van Rossum374a9221991-04-04 10:40:29 +00001413 v = POP();
Guido van Rossum25831651993-05-19 14:50:45 +00001414 w = POP();
1415 x = build_class(u, v, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001416 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001417 Py_DECREF(u);
1418 Py_DECREF(v);
1419 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001420 break;
1421
1422 case STORE_NAME:
1423 w = GETNAMEV(oparg);
1424 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001425 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001426 PyErr_SetString(PyExc_SystemError,
1427 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001428 break;
1429 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001430 err = PyDict_SetItem(x, w, v);
1431 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001432 break;
1433
1434 case DELETE_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001435 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001436 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001437 PyErr_SetString(PyExc_SystemError,
1438 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001439 break;
1440 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001441 if ((err = PyDict_DelItem(x, w)) != 0)
Paul Prescode68140d2000-08-30 20:25:01 +00001442 format_exc_check_arg(PyExc_NameError,
1443 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001444 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001445
Thomas Wouters0be5aab2000-08-11 22:15:52 +00001446 case UNPACK_SEQUENCE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001447 v = POP();
Barry Warsawe42b18f1997-08-25 22:13:04 +00001448 if (PyTuple_Check(v)) {
1449 if (PyTuple_Size(v) != oparg) {
1450 PyErr_SetString(PyExc_ValueError,
1451 "unpack tuple of wrong size");
1452 why = WHY_EXCEPTION;
1453 }
1454 else {
1455 for (; --oparg >= 0; ) {
1456 w = PyTuple_GET_ITEM(v, oparg);
1457 Py_INCREF(w);
1458 PUSH(w);
1459 }
1460 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001461 }
Barry Warsawe42b18f1997-08-25 22:13:04 +00001462 else if (PyList_Check(v)) {
1463 if (PyList_Size(v) != oparg) {
1464 PyErr_SetString(PyExc_ValueError,
1465 "unpack list of wrong size");
1466 why = WHY_EXCEPTION;
1467 }
1468 else {
1469 for (; --oparg >= 0; ) {
1470 w = PyList_GET_ITEM(v, oparg);
1471 Py_INCREF(w);
1472 PUSH(w);
1473 }
1474 }
1475 }
1476 else if (PySequence_Check(v)) {
1477 if (unpack_sequence(v, oparg,
1478 stack_pointer + oparg))
1479 stack_pointer += oparg;
1480 else
1481 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001482 }
1483 else {
Barry Warsawe42b18f1997-08-25 22:13:04 +00001484 PyErr_SetString(PyExc_TypeError,
1485 "unpack non-sequence");
1486 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001487 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001488 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001489 break;
1490
1491 case STORE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001492 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001493 v = POP();
1494 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001495 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1496 Py_DECREF(v);
1497 Py_DECREF(u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001498 break;
1499
1500 case DELETE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001501 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001502 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001503 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1504 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001505 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001506 break;
1507
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001508 case STORE_GLOBAL:
1509 w = GETNAMEV(oparg);
1510 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001511 err = PyDict_SetItem(f->f_globals, w, v);
1512 Py_DECREF(v);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001513 break;
1514
1515 case DELETE_GLOBAL:
1516 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001517 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
Paul Prescode68140d2000-08-30 20:25:01 +00001518 format_exc_check_arg(
1519 PyExc_NameError, NAME_ERROR_MSG ,w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001520 break;
1521
Guido van Rossum374a9221991-04-04 10:40:29 +00001522 case LOAD_CONST:
1523 x = GETCONST(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001524 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001525 PUSH(x);
1526 break;
1527
1528 case LOAD_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001529 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001530 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001531 PyErr_SetString(PyExc_SystemError,
1532 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001533 break;
1534 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001535 x = PyDict_GetItem(x, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001536 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001537 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001538 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001539 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001540 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001541 format_exc_check_arg(
1542 PyExc_NameError,
1543 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001544 break;
1545 }
1546 }
1547 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001548 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001549 PUSH(x);
1550 break;
1551
1552 case LOAD_GLOBAL:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001553 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001554 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001555 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001556 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001557 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001558 format_exc_check_arg(
1559 PyExc_NameError,
1560 NAME_ERROR_MSG ,w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001561 break;
1562 }
1563 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001564 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001565 PUSH(x);
1566 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001567
Guido van Rossum9bfef441993-03-29 10:43:31 +00001568 case LOAD_FAST:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001569 x = GETLOCAL(oparg);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001570 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001571 format_exc_check_arg(
1572 PyExc_UnboundLocalError,
1573 UNBOUNDLOCAL_ERROR_MSG,
1574 PyTuple_GetItem(co->co_varnames, oparg)
1575 );
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001576 break;
1577 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001578 Py_INCREF(x);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001579 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001580 if (x != NULL) continue;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001581 break;
1582
1583 case STORE_FAST:
Guido van Rossum25831651993-05-19 14:50:45 +00001584 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001585 SETLOCAL(oparg, v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001586 continue;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001587
1588 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001589 x = GETLOCAL(oparg);
1590 if (x == NULL) {
Paul Prescode68140d2000-08-30 20:25:01 +00001591 format_exc_check_arg(
1592 PyExc_UnboundLocalError,
1593 UNBOUNDLOCAL_ERROR_MSG,
1594 PyTuple_GetItem(co->co_varnames, oparg)
1595 );
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001596 break;
1597 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001598 SETLOCAL(oparg, NULL);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001599 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001600
1601 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001602 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001603 if (x != NULL) {
1604 for (; --oparg >= 0;) {
1605 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001606 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001607 }
1608 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001609 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001610 }
1611 break;
1612
1613 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001614 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001615 if (x != NULL) {
1616 for (; --oparg >= 0;) {
1617 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001618 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001619 }
1620 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001621 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001622 }
1623 break;
1624
1625 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001626 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001627 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001628 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001629 break;
1630
1631 case LOAD_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001632 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001633 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001634 x = PyObject_GetAttr(v, w);
1635 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001636 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001637 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001638 break;
1639
1640 case COMPARE_OP:
1641 w = POP();
1642 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +00001643 if (PyInt_Check(v) && PyInt_Check(w)) {
1644 /* INLINE: cmp(int, int) */
1645 register long a, b;
1646 register int res;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001647 a = PyInt_AS_LONG(v);
1648 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001649 switch (oparg) {
1650 case LT: res = a < b; break;
1651 case LE: res = a <= b; break;
1652 case EQ: res = a == b; break;
1653 case NE: res = a != b; break;
1654 case GT: res = a > b; break;
1655 case GE: res = a >= b; break;
1656 case IS: res = v == w; break;
1657 case IS_NOT: res = v != w; break;
1658 default: goto slow_compare;
1659 }
1660 x = res ? Py_True : Py_False;
1661 Py_INCREF(x);
1662 }
1663 else {
1664 slow_compare:
1665 x = cmp_outcome(oparg, v, w);
1666 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001667 Py_DECREF(v);
1668 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001669 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001670 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001671 break;
1672
1673 case IMPORT_NAME:
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001674 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001675 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001676 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001677 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001678 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001679 break;
1680 }
Thomas Woutersdd13e4f2000-08-27 20:31:27 +00001681 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001682 w = Py_BuildValue("(OOOO)",
Guido van Rossum681d79a1995-07-18 14:51:37 +00001683 w,
1684 f->f_globals,
Guido van Rossuma027efa1997-05-05 20:56:21 +00001685 f->f_locals == NULL ?
1686 Py_None : f->f_locals,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001687 u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001688 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001689 if (w == NULL) {
1690 x = NULL;
1691 break;
1692 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001693 x = PyEval_CallObject(x, w);
1694 Py_DECREF(w);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001695 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001696 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001697 break;
1698
Thomas Wouters52152252000-08-17 22:55:00 +00001699 case IMPORT_STAR:
1700 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001701 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001702 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001703 PyErr_SetString(PyExc_SystemError,
1704 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001705 break;
1706 }
Thomas Wouters52152252000-08-17 22:55:00 +00001707 err = import_all_from(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001708 PyFrame_LocalsToFast(f, 0);
Thomas Wouters52152252000-08-17 22:55:00 +00001709 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001710 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001711 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001712
Thomas Wouters52152252000-08-17 22:55:00 +00001713 case IMPORT_FROM:
1714 w = GETNAMEV(oparg);
1715 v = TOP();
1716 x = import_from(v, w);
1717 PUSH(x);
1718 if (x != NULL) continue;
1719 break;
1720
Guido van Rossum374a9221991-04-04 10:40:29 +00001721 case JUMP_FORWARD:
1722 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001723 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001724
1725 case JUMP_IF_FALSE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001726 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001727 if (err > 0)
1728 err = 0;
1729 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00001730 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001731 else
1732 break;
1733 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001734
1735 case JUMP_IF_TRUE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001736 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001737 if (err > 0) {
1738 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00001739 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001740 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001741 else if (err == 0)
1742 ;
1743 else
1744 break;
1745 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001746
1747 case JUMP_ABSOLUTE:
1748 JUMPTO(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001749 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001750
1751 case FOR_LOOP:
1752 /* for v in s: ...
1753 On entry: stack contains s, i.
1754 On exit: stack contains s, i+1, s[i];
1755 but if loop exhausted:
1756 s, i are popped, and we jump */
1757 w = POP(); /* Loop index */
1758 v = POP(); /* Sequence object */
1759 u = loop_subscript(v, w);
1760 if (u != NULL) {
1761 PUSH(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001762 x = PyInt_FromLong(PyInt_AsLong(w)+1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001763 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001764 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001765 PUSH(u);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001766 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001767 }
1768 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001769 Py_DECREF(v);
1770 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001771 /* A NULL can mean "s exhausted"
1772 but also an error: */
Guido van Rossumb209a111997-04-29 18:18:01 +00001773 if (PyErr_Occurred())
Guido van Rossum374a9221991-04-04 10:40:29 +00001774 why = WHY_EXCEPTION;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001775 else {
Guido van Rossum374a9221991-04-04 10:40:29 +00001776 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001777 continue;
1778 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001779 }
1780 break;
1781
1782 case SETUP_LOOP:
1783 case SETUP_EXCEPT:
1784 case SETUP_FINALLY:
Guido van Rossumb209a111997-04-29 18:18:01 +00001785 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Guido van Rossum374a9221991-04-04 10:40:29 +00001786 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001787 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001788
1789 case SET_LINENO:
Guido van Rossum96a42c81992-01-12 02:29:51 +00001790#ifdef LLTRACE
1791 if (lltrace)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001792 printf("--- %s:%d \n", filename, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001793#endif
Guido van Rossum96a42c81992-01-12 02:29:51 +00001794 f->f_lineno = oparg;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001795 if (f->f_trace == NULL)
1796 continue;
1797 /* Trace each line of code reached */
1798 f->f_lasti = INSTR_OFFSET();
1799 err = call_trace(&f->f_trace, &f->f_trace,
Guido van Rossumb209a111997-04-29 18:18:01 +00001800 f, "line", Py_None);
Guido van Rossum374a9221991-04-04 10:40:29 +00001801 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001802
1803 case CALL_FUNCTION:
Jeremy Hylton52820442001-01-03 23:52:36 +00001804 {
1805 int na = oparg & 0xff;
1806 int nk = (oparg>>8) & 0xff;
1807 int n = na + 2 * nk;
1808 PyObject **pfunc = stack_pointer - n - 1;
1809 PyObject *func = *pfunc;
1810 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
1811
1812 /* Always dispatch PyCFunction first, because
1813 these are presumed to be the most frequent
1814 callable object.
1815 */
1816 if (PyCFunction_Check(func)) {
1817 if (PyCFunction_GET_FLAGS(func) == 0) {
1818 x = fast_cfunction(func,
1819 &stack_pointer, na);
1820 } else {
1821 x = do_call(func, &stack_pointer,
1822 na, nk);
1823 }
1824 } else {
1825 if (PyMethod_Check(func)
1826 && PyMethod_GET_SELF(func) != NULL) {
1827 /* optimize access to bound methods */
1828 PyObject *self = PyMethod_GET_SELF(func);
1829 Py_INCREF(self);
1830 func = PyMethod_GET_FUNCTION(func);
1831 Py_INCREF(func);
1832 Py_DECREF(*pfunc);
1833 *pfunc = self;
1834 na++;
1835 n++;
1836 } else
1837 Py_INCREF(func);
1838 if (PyFunction_Check(func)) {
1839 x = fast_function(func, &stack_pointer,
1840 n, na, nk);
1841 } else {
1842 x = do_call(func, &stack_pointer,
1843 na, nk);
1844 }
1845 Py_DECREF(func);
1846 }
1847
1848 while (stack_pointer > pfunc) {
1849 w = POP();
1850 Py_DECREF(w);
1851 }
1852 PUSH(x);
1853 if (x != NULL)
1854 continue;
1855 break;
1856 }
1857
Jeremy Hylton76901512000-03-28 23:49:17 +00001858 case CALL_FUNCTION_VAR:
1859 case CALL_FUNCTION_KW:
1860 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00001861 {
Jeremy Hylton76901512000-03-28 23:49:17 +00001862 int na = oparg & 0xff;
1863 int nk = (oparg>>8) & 0xff;
1864 int flags = (opcode - CALL_FUNCTION) & 3;
Jeremy Hylton52820442001-01-03 23:52:36 +00001865 int n = na + 2 * nk;
1866 PyObject **pfunc, *func;
1867 if (flags & CALL_FLAG_VAR)
1868 n++;
1869 if (flags & CALL_FLAG_KW)
1870 n++;
1871 pfunc = stack_pointer - n - 1;
1872 func = *pfunc;
Jeremy Hylton76901512000-03-28 23:49:17 +00001873 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
Jeremy Hylton52820442001-01-03 23:52:36 +00001874
1875 if (PyMethod_Check(func)
1876 && PyMethod_GET_SELF(func) != NULL) {
1877 PyObject *self = PyMethod_GET_SELF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00001878 Py_INCREF(self);
Jeremy Hylton52820442001-01-03 23:52:36 +00001879 func = PyMethod_GET_FUNCTION(func);
1880 Py_INCREF(func);
Jeremy Hylton76901512000-03-28 23:49:17 +00001881 Py_DECREF(*pfunc);
1882 *pfunc = self;
1883 na++;
1884 n++;
Jeremy Hylton52820442001-01-03 23:52:36 +00001885 } else
1886 Py_INCREF(func);
1887 x = ext_do_call(func, &stack_pointer, flags, na, nk);
Jeremy Hylton76901512000-03-28 23:49:17 +00001888 Py_DECREF(func);
Jeremy Hylton52820442001-01-03 23:52:36 +00001889
Jeremy Hylton76901512000-03-28 23:49:17 +00001890 while (stack_pointer > pfunc) {
Jeremy Hylton52820442001-01-03 23:52:36 +00001891 w = POP();
1892 Py_DECREF(w);
Jeremy Hylton76901512000-03-28 23:49:17 +00001893 }
1894 PUSH(x);
Jeremy Hylton52820442001-01-03 23:52:36 +00001895 if (x != NULL)
1896 continue;
Jeremy Hylton76901512000-03-28 23:49:17 +00001897 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001898 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001899
Guido van Rossum681d79a1995-07-18 14:51:37 +00001900 case MAKE_FUNCTION:
1901 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00001902 x = PyFunction_New(v, f->f_globals);
1903 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001904 /* XXX Maybe this should be a separate opcode? */
1905 if (x != NULL && oparg > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001906 v = PyTuple_New(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001907 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001908 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001909 x = NULL;
1910 break;
1911 }
1912 while (--oparg >= 0) {
1913 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001914 PyTuple_SET_ITEM(v, oparg, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001915 }
1916 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001917 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001918 }
1919 PUSH(x);
1920 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001921
1922 case BUILD_SLICE:
1923 if (oparg == 3)
1924 w = POP();
1925 else
1926 w = NULL;
1927 v = POP();
1928 u = POP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00001929 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001930 Py_DECREF(u);
1931 Py_DECREF(v);
1932 Py_XDECREF(w);
Guido van Rossum8861b741996-07-30 16:49:37 +00001933 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001934 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00001935 break;
1936
Fred Drakeef8ace32000-08-24 00:32:09 +00001937 case EXTENDED_ARG:
1938 opcode = NEXTOP();
1939 oparg = oparg<<16 | NEXTARG();
1940 goto dispatch_opcode;
1941 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001942
Guido van Rossum374a9221991-04-04 10:40:29 +00001943 default:
1944 fprintf(stderr,
1945 "XXX lineno: %d, opcode: %d\n",
Guido van Rossum96a42c81992-01-12 02:29:51 +00001946 f->f_lineno, opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00001947 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00001948 why = WHY_EXCEPTION;
1949 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001950
1951#ifdef CASE_TOO_BIG
1952 }
1953#endif
1954
Guido van Rossum374a9221991-04-04 10:40:29 +00001955 } /* switch */
1956
1957 on_error:
1958
1959 /* Quickly continue if no error occurred */
1960
1961 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001962 if (err == 0 && x != NULL) {
1963#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001964 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001965 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00001966 fprintf(stderr,
1967 "XXX undetected error\n");
1968 else
1969#endif
1970 continue; /* Normal, fast path */
1971 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001972 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00001973 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00001974 err = 0;
1975 }
1976
Guido van Rossum374a9221991-04-04 10:40:29 +00001977 /* Double-check exception status */
1978
1979 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001980 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001981 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001982 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00001983 why = WHY_EXCEPTION;
1984 }
1985 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001986#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00001987 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001988 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001989 if (PyErr_Occurred()) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001990 fprintf(stderr,
1991 "XXX undetected error (why=%d)\n",
1992 why);
1993 why = WHY_EXCEPTION;
1994 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001995 }
1996#endif
1997
1998 /* Log traceback info if this is a real exception */
1999
2000 if (why == WHY_EXCEPTION) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00002001 f->f_lasti = INSTR_OFFSET() - 1;
Guido van Rossum374a9221991-04-04 10:40:29 +00002002 if (HAS_ARG(opcode))
Guido van Rossum96a42c81992-01-12 02:29:51 +00002003 f->f_lasti -= 2;
Guido van Rossumb209a111997-04-29 18:18:01 +00002004 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002005
Guido van Rossume59214e1994-08-30 08:01:59 +00002006 if (f->f_trace)
2007 call_exc_trace(&f->f_trace, &f->f_trace, f);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002008 if (tstate->sys_profilefunc)
2009 call_exc_trace(&tstate->sys_profilefunc,
2010 (PyObject**)0, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00002011 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002012
2013 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
2014
2015 if (why == WHY_RERAISE)
2016 why = WHY_EXCEPTION;
2017
2018 /* Unwind stacks if a (pseudo) exception occurred */
2019
2020 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002021 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00002022 while (STACK_LEVEL() > b->b_level) {
2023 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00002024 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00002025 }
2026 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
2027 why = WHY_NOT;
2028 JUMPTO(b->b_handler);
2029 break;
2030 }
2031 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00002032 (b->b_type == SETUP_EXCEPT &&
2033 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00002034 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002035 PyObject *exc, *val, *tb;
2036 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002037 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002038 val = Py_None;
2039 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00002040 }
Guido van Rossum374a9221991-04-04 10:40:29 +00002041 /* Make the raw exception data
2042 available to the handler,
2043 so a program can emulate the
2044 Python main loop. Don't do
2045 this for 'finally'. */
2046 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00002047 PyErr_NormalizeException(
2048 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002049 set_exc_info(tstate,
2050 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002051 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002052 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00002053 PUSH(val);
2054 PUSH(exc);
2055 }
2056 else {
2057 if (why == WHY_RETURN)
2058 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00002059 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00002060 PUSH(v);
2061 }
2062 why = WHY_NOT;
2063 JUMPTO(b->b_handler);
2064 break;
2065 }
2066 } /* unwind stack */
2067
2068 /* End the loop if we still have an error (or return) */
2069
2070 if (why != WHY_NOT)
2071 break;
2072
2073 } /* main loop */
2074
2075 /* Pop remaining stack entries */
2076
2077 while (!EMPTY()) {
2078 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00002079 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00002080 }
2081
Guido van Rossum96a42c81992-01-12 02:29:51 +00002082 if (why != WHY_RETURN)
2083 retval = NULL;
2084
Guido van Rossume59214e1994-08-30 08:01:59 +00002085 if (f->f_trace) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00002086 if (why == WHY_RETURN) {
Guido van Rossume59214e1994-08-30 08:01:59 +00002087 if (call_trace(&f->f_trace, &f->f_trace, f,
2088 "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002089 Py_XDECREF(retval);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002090 retval = NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002091 why = WHY_EXCEPTION;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002092 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002093 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002094 }
2095
Guido van Rossuma027efa1997-05-05 20:56:21 +00002096 if (tstate->sys_profilefunc && why == WHY_RETURN) {
2097 if (call_trace(&tstate->sys_profilefunc, (PyObject**)0,
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002098 f, "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002099 Py_XDECREF(retval);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002100 retval = NULL;
2101 why = WHY_EXCEPTION;
2102 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002103 }
Guido van Rossuma4240131997-01-21 21:18:36 +00002104
Guido van Rossuma027efa1997-05-05 20:56:21 +00002105 reset_exc_info(tstate);
2106
2107 --tstate->recursion_depth;
Guido van Rossum8c5df061997-01-24 04:19:24 +00002108
2109 fail: /* Jump here from prelude on failure */
Guido van Rossum96a42c81992-01-12 02:29:51 +00002110
Guido van Rossum374a9221991-04-04 10:40:29 +00002111 /* Restore previous frame and release the current one */
Guido van Rossum681d79a1995-07-18 14:51:37 +00002112
Guido van Rossuma027efa1997-05-05 20:56:21 +00002113 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +00002114 Py_DECREF(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00002115
Guido van Rossum96a42c81992-01-12 02:29:51 +00002116 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00002117}
2118
Guido van Rossuma027efa1997-05-05 20:56:21 +00002119static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002120set_exc_info(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002121{
2122 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002123 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00002124
Guido van Rossuma027efa1997-05-05 20:56:21 +00002125 frame = tstate->frame;
2126 if (frame->f_exc_type == NULL) {
2127 /* This frame didn't catch an exception before */
2128 /* Save previous exception of this thread in this frame */
Guido van Rossuma027efa1997-05-05 20:56:21 +00002129 if (tstate->exc_type == NULL) {
2130 Py_INCREF(Py_None);
2131 tstate->exc_type = Py_None;
2132 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002133 tmp_type = frame->f_exc_type;
2134 tmp_value = frame->f_exc_value;
2135 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002136 Py_XINCREF(tstate->exc_type);
2137 Py_XINCREF(tstate->exc_value);
2138 Py_XINCREF(tstate->exc_traceback);
2139 frame->f_exc_type = tstate->exc_type;
2140 frame->f_exc_value = tstate->exc_value;
2141 frame->f_exc_traceback = tstate->exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002142 Py_XDECREF(tmp_type);
2143 Py_XDECREF(tmp_value);
2144 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002145 }
2146 /* Set new exception for this thread */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002147 tmp_type = tstate->exc_type;
2148 tmp_value = tstate->exc_value;
2149 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002150 Py_XINCREF(type);
2151 Py_XINCREF(value);
2152 Py_XINCREF(tb);
2153 tstate->exc_type = type;
2154 tstate->exc_value = value;
2155 tstate->exc_traceback = tb;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002156 Py_XDECREF(tmp_type);
2157 Py_XDECREF(tmp_value);
2158 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002159 /* For b/w compatibility */
2160 PySys_SetObject("exc_type", type);
2161 PySys_SetObject("exc_value", value);
2162 PySys_SetObject("exc_traceback", tb);
2163}
2164
2165static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002166reset_exc_info(PyThreadState *tstate)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002167{
2168 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002169 PyObject *tmp_type, *tmp_value, *tmp_tb;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002170 frame = tstate->frame;
2171 if (frame->f_exc_type != NULL) {
2172 /* This frame caught an exception */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002173 tmp_type = tstate->exc_type;
2174 tmp_value = tstate->exc_value;
2175 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002176 Py_XINCREF(frame->f_exc_type);
2177 Py_XINCREF(frame->f_exc_value);
2178 Py_XINCREF(frame->f_exc_traceback);
2179 tstate->exc_type = frame->f_exc_type;
2180 tstate->exc_value = frame->f_exc_value;
2181 tstate->exc_traceback = frame->f_exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002182 Py_XDECREF(tmp_type);
2183 Py_XDECREF(tmp_value);
2184 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002185 /* For b/w compatibility */
2186 PySys_SetObject("exc_type", frame->f_exc_type);
2187 PySys_SetObject("exc_value", frame->f_exc_value);
2188 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
2189 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002190 tmp_type = frame->f_exc_type;
2191 tmp_value = frame->f_exc_value;
2192 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002193 frame->f_exc_type = NULL;
2194 frame->f_exc_value = NULL;
2195 frame->f_exc_traceback = NULL;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002196 Py_XDECREF(tmp_type);
2197 Py_XDECREF(tmp_value);
2198 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002199}
2200
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002201/* Logic for the raise statement (too complicated for inlining).
2202 This *consumes* a reference count to each of its arguments. */
Guido van Rossum1aa14831997-01-21 05:34:20 +00002203static enum why_code
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002204do_raise(PyObject *type, PyObject *value, PyObject *tb)
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002205{
Guido van Rossumd295f121998-04-09 21:39:57 +00002206 if (type == NULL) {
2207 /* Reraise */
2208 PyThreadState *tstate = PyThreadState_Get();
2209 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
2210 value = tstate->exc_value;
2211 tb = tstate->exc_traceback;
2212 Py_XINCREF(type);
2213 Py_XINCREF(value);
2214 Py_XINCREF(tb);
2215 }
2216
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002217 /* We support the following forms of raise:
2218 raise <class>, <classinstance>
2219 raise <class>, <argument tuple>
2220 raise <class>, None
2221 raise <class>, <argument>
2222 raise <classinstance>, None
2223 raise <string>, <object>
2224 raise <string>, None
2225
2226 An omitted second argument is the same as None.
2227
2228 In addition, raise <tuple>, <anything> is the same as
2229 raising the tuple's first item (and it better have one!);
2230 this rule is applied recursively.
2231
2232 Finally, an optional third argument can be supplied, which
2233 gives the traceback to be substituted (useful when
2234 re-raising an exception after examining it). */
2235
2236 /* First, check the traceback argument, replacing None with
2237 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002238 if (tb == Py_None) {
2239 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002240 tb = NULL;
2241 }
2242 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002243 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00002244 "raise: arg 3 must be a traceback or None");
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002245 goto raise_error;
2246 }
2247
2248 /* Next, replace a missing value with None */
2249 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002250 value = Py_None;
2251 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002252 }
2253
2254 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00002255 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
2256 PyObject *tmp = type;
2257 type = PyTuple_GET_ITEM(type, 0);
2258 Py_INCREF(type);
2259 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002260 }
2261
Barry Warsaw4249f541997-08-22 21:26:19 +00002262 if (PyString_Check(type))
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002263 ;
Barry Warsaw4249f541997-08-22 21:26:19 +00002264
2265 else if (PyClass_Check(type))
2266 PyErr_NormalizeException(&type, &value, &tb);
2267
Guido van Rossumb209a111997-04-29 18:18:01 +00002268 else if (PyInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002269 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002270 if (value != Py_None) {
2271 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002272 "instance exception may not have a separate value");
2273 goto raise_error;
2274 }
2275 else {
2276 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00002277 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002278 value = type;
Guido van Rossumb209a111997-04-29 18:18:01 +00002279 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2280 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002281 }
2282 }
2283 else {
2284 /* Not something you can raise. You get an exception
2285 anyway, just not what you specified :-) */
Guido van Rossumb209a111997-04-29 18:18:01 +00002286 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002287 "exceptions must be strings, classes, or instances");
2288 goto raise_error;
2289 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002290 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002291 if (tb == NULL)
2292 return WHY_EXCEPTION;
2293 else
2294 return WHY_RERAISE;
2295 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002296 Py_XDECREF(value);
2297 Py_XDECREF(type);
2298 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002299 return WHY_EXCEPTION;
2300}
2301
Barry Warsawe42b18f1997-08-25 22:13:04 +00002302static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002303unpack_sequence(PyObject *v, int argcnt, PyObject **sp)
Barry Warsawe42b18f1997-08-25 22:13:04 +00002304{
2305 int i;
2306 PyObject *w;
2307
2308 for (i = 0; i < argcnt; i++) {
2309 if (! (w = PySequence_GetItem(v, i))) {
2310 if (PyErr_ExceptionMatches(PyExc_IndexError))
2311 PyErr_SetString(PyExc_ValueError,
2312 "unpack sequence of wrong size");
2313 goto finally;
2314 }
2315 *--sp = w;
2316 }
2317 /* we better get an IndexError now */
2318 if (PySequence_GetItem(v, i) == NULL) {
2319 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2320 PyErr_Clear();
2321 return 1;
2322 }
2323 /* some other exception occurred. fall through to finally */
2324 }
2325 else
2326 PyErr_SetString(PyExc_ValueError,
2327 "unpack sequence of wrong size");
2328 /* fall through */
2329finally:
Barry Warsaw91010551997-08-25 22:30:51 +00002330 for (; i > 0; i--, sp++)
2331 Py_DECREF(*sp);
Barry Warsawe42b18f1997-08-25 22:13:04 +00002332
2333 return 0;
2334}
2335
2336
Guido van Rossum96a42c81992-01-12 02:29:51 +00002337#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00002338static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002339prtrace(PyObject *v, char *str)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002340{
Guido van Rossum3f5da241990-12-20 15:06:42 +00002341 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00002342 if (PyObject_Print(v, stdout, 0) != 0)
2343 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00002344 printf("\n");
Guido van Rossumcc229ea2000-05-04 00:55:17 +00002345 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002346}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002347#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002348
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002349static void
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002350call_exc_trace(PyObject **p_trace, PyObject **p_newtrace, PyFrameObject *f)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002351{
Guido van Rossumb209a111997-04-29 18:18:01 +00002352 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002353 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002354 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002355 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002356 value = Py_None;
2357 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002358 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002359 arg = Py_BuildValue("(OOO)", type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002360 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002361 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002362 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002363 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002364 err = call_trace(p_trace, p_newtrace, f, "exception", arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002365 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002366 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00002367 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002368 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002369 Py_XDECREF(type);
2370 Py_XDECREF(value);
2371 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002372 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002373}
2374
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002375/* PyObject **p_trace: in/out; may not be NULL;
2376 may not point to NULL variable initially
2377 PyObject **p_newtrace: in/out; may be NULL;
2378 may point to NULL variable;
2379 may be same variable as p_newtrace */
2380
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002381static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002382call_trace(PyObject **p_trace, PyObject **p_newtrace, PyFrameObject *f,
2383 char *msg, PyObject *arg)
Guido van Rossum96a42c81992-01-12 02:29:51 +00002384{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002385 PyThreadState *tstate = f->f_tstate;
Guido van Rossumb209a111997-04-29 18:18:01 +00002386 PyObject *args, *what;
2387 PyObject *res = NULL;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002388
Guido van Rossuma027efa1997-05-05 20:56:21 +00002389 if (tstate->tracing) {
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002390 /* Don't do recursive traces */
2391 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002392 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002393 *p_newtrace = NULL;
2394 }
2395 return 0;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002396 }
2397
Guido van Rossumb209a111997-04-29 18:18:01 +00002398 args = PyTuple_New(3);
Guido van Rossumf10570b1995-07-07 22:53:21 +00002399 if (args == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002400 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002401 what = PyString_FromString(msg);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002402 if (what == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002403 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002404 Py_INCREF(f);
2405 PyTuple_SET_ITEM(args, 0, (PyObject *)f);
2406 PyTuple_SET_ITEM(args, 1, what);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002407 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002408 arg = Py_None;
2409 Py_INCREF(arg);
2410 PyTuple_SET_ITEM(args, 2, arg);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002411 tstate->tracing++;
Guido van Rossumb209a111997-04-29 18:18:01 +00002412 PyFrame_FastToLocals(f);
2413 res = PyEval_CallObject(*p_trace, args); /* May clear *p_trace! */
2414 PyFrame_LocalsToFast(f, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002415 tstate->tracing--;
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002416 cleanup:
Guido van Rossumb209a111997-04-29 18:18:01 +00002417 Py_XDECREF(args);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002418 if (res == NULL) {
2419 /* The trace proc raised an exception */
Guido van Rossumb209a111997-04-29 18:18:01 +00002420 PyTraceBack_Here(f);
2421 Py_XDECREF(*p_trace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002422 *p_trace = NULL;
2423 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002424 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002425 *p_newtrace = NULL;
2426 }
Barry Warsawf6202631999-09-08 16:26:33 +00002427 /* to be extra double plus sure we don't get recursive
2428 * calls inf either tracefunc or profilefunc gets an
2429 * exception, zap the global variables.
2430 */
2431 Py_XDECREF(tstate->sys_tracefunc);
2432 tstate->sys_tracefunc = NULL;
2433 Py_XDECREF(tstate->sys_profilefunc);
2434 tstate->sys_profilefunc = NULL;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002435 return -1;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002436 }
2437 else {
2438 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002439 Py_XDECREF(*p_newtrace);
2440 if (res == Py_None)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002441 *p_newtrace = NULL;
2442 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002443 Py_INCREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002444 *p_newtrace = res;
2445 }
2446 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002447 Py_DECREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002448 return 0;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002449 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002450}
2451
Guido van Rossumb209a111997-04-29 18:18:01 +00002452PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002453PyEval_GetBuiltins(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00002454{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002455 PyThreadState *tstate = PyThreadState_Get();
2456 PyFrameObject *current_frame = tstate->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002457 if (current_frame == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002458 return tstate->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00002459 else
2460 return current_frame->f_builtins;
2461}
2462
Guido van Rossumb209a111997-04-29 18:18:01 +00002463PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002464PyEval_GetLocals(void)
Guido van Rossum5b722181993-03-30 17:46:03 +00002465{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002466 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum5b722181993-03-30 17:46:03 +00002467 if (current_frame == NULL)
2468 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002469 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00002470 return current_frame->f_locals;
2471}
2472
Guido van Rossumb209a111997-04-29 18:18:01 +00002473PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002474PyEval_GetGlobals(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002475{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002476 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002477 if (current_frame == NULL)
2478 return NULL;
2479 else
2480 return current_frame->f_globals;
2481}
2482
Guido van Rossumb209a111997-04-29 18:18:01 +00002483PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002484PyEval_GetFrame(void)
Guido van Rossume59214e1994-08-30 08:01:59 +00002485{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002486 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossumb209a111997-04-29 18:18:01 +00002487 return (PyObject *)current_frame;
Guido van Rossume59214e1994-08-30 08:01:59 +00002488}
2489
Guido van Rossum6135a871995-01-09 17:53:26 +00002490int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002491PyEval_GetRestricted(void)
Guido van Rossum6135a871995-01-09 17:53:26 +00002492{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002493 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002494 return current_frame == NULL ? 0 : current_frame->f_restricted;
2495}
2496
Guido van Rossumbe270261997-05-22 22:26:18 +00002497int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002498Py_FlushLine(void)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002499{
Guido van Rossumb209a111997-04-29 18:18:01 +00002500 PyObject *f = PySys_GetObject("stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00002501 if (f == NULL)
2502 return 0;
2503 if (!PyFile_SoftSpace(f, 0))
2504 return 0;
2505 return PyFile_WriteString("\n", f);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002506}
2507
Guido van Rossum3f5da241990-12-20 15:06:42 +00002508
Guido van Rossum681d79a1995-07-18 14:51:37 +00002509/* External interface to call any callable object.
2510 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002511
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002512#undef PyEval_CallObject
2513/* for backward compatibility: export this interface */
2514
Guido van Rossumb209a111997-04-29 18:18:01 +00002515PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002516PyEval_CallObject(PyObject *func, PyObject *arg)
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002517{
Guido van Rossumb209a111997-04-29 18:18:01 +00002518 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002519}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002520#define PyEval_CallObject(func,arg) \
2521 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00002522
Guido van Rossumb209a111997-04-29 18:18:01 +00002523PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002524PyEval_CallObjectWithKeywords(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum681d79a1995-07-18 14:51:37 +00002525{
Jeremy Hylton52820442001-01-03 23:52:36 +00002526 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002527
2528 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002529 arg = PyTuple_New(0);
2530 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002531 PyErr_SetString(PyExc_TypeError,
2532 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002533 return NULL;
2534 }
2535 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002536 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002537
Guido van Rossumb209a111997-04-29 18:18:01 +00002538 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002539 PyErr_SetString(PyExc_TypeError,
2540 "keyword list must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00002541 Py_DECREF(arg);
Guido van Rossume3e61c11995-08-04 04:14:47 +00002542 return NULL;
2543 }
2544
Jeremy Hylton52820442001-01-03 23:52:36 +00002545 result = call_object(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002546 Py_DECREF(arg);
Jeremy Hylton52820442001-01-03 23:52:36 +00002547 return result;
2548}
2549
2550/* How often is each kind of object called? The answer depends on the
2551 program. An instrumented call_object() was used to run the Python
2552 regression test suite. The results were:
2553 4200000 PyCFunctions
2554 390000 fast_function() calls
2555 94000 other functions
2556 480000 all functions (sum of prev two)
2557 150000 methods
2558 100000 classes
2559
2560 Tests on other bodies of code show that PyCFunctions are still
2561 most common, but not by such a large margin.
2562*/
2563
2564static PyObject *
2565call_object(PyObject *func, PyObject *arg, PyObject *kw)
2566{
2567 ternaryfunc call;
2568 PyObject *result;
2569
2570 if (PyMethod_Check(func))
2571 result = call_method(func, arg, kw);
2572 else if (PyFunction_Check(func))
2573 result = call_eval_code2(func, arg, kw);
2574 else if (PyCFunction_Check(func))
2575 result = call_cfunction(func, arg, kw);
2576 else if (PyClass_Check(func))
2577 result = PyInstance_New(func, arg, kw);
2578 else if (PyInstance_Check(func))
2579 result = call_instance(func, arg, kw);
2580 else if ((call = func->ob_type->tp_call) != NULL)
2581 result = (*call)(func, arg, kw);
2582 else {
2583 PyErr_Format(PyExc_TypeError, "object is not callable: %s",
2584 PyString_AS_STRING(PyObject_Repr(func)));
2585 return NULL;
2586 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002587 if (result == NULL && !PyErr_Occurred())
2588 PyErr_SetString(PyExc_SystemError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002589 "NULL result without error in call_object");
Guido van Rossume59214e1994-08-30 08:01:59 +00002590
2591 return result;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002592}
2593
Guido van Rossumb209a111997-04-29 18:18:01 +00002594static PyObject *
Jeremy Hylton52820442001-01-03 23:52:36 +00002595call_cfunction(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002596{
Jeremy Hylton52820442001-01-03 23:52:36 +00002597 PyCFunctionObject* f = (PyCFunctionObject*)func;
2598 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
2599 PyObject *self = PyCFunction_GET_SELF(func);
2600 int flags = PyCFunction_GET_FLAGS(func);
2601
Jeremy Hylton52820442001-01-03 23:52:36 +00002602 if (flags & METH_KEYWORDS) {
Fred Drake1a7aab72001-01-04 22:33:02 +00002603 if (kw == NULL) {
2604 static PyObject *dict = NULL;
2605 if (dict == NULL) {
2606 dict = PyDict_New();
2607 if (dict == NULL)
2608 return NULL;
2609 }
2610 kw = dict;
2611 Py_INCREF(dict);
2612 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002613 return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002614 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002615 if (kw != NULL && PyDict_Size(kw) != 0) {
2616 PyErr_Format(PyExc_TypeError,
2617 "%.200s() takes no keyword arguments",
2618 f->m_ml->ml_name);
2619 return NULL;
2620 }
Fred Drake1a7aab72001-01-04 22:33:02 +00002621 if (flags & METH_VARARGS) {
2622 return (*meth)(self, arg);
2623 }
2624 if (!(flags & METH_VARARGS)) {
2625 /* the really old style */
2626 int size = PyTuple_GET_SIZE(arg);
2627 if (size == 1)
2628 arg = PyTuple_GET_ITEM(arg, 0);
2629 else if (size == 0)
2630 arg = NULL;
2631 return (*meth)(self, arg);
2632 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002633 /* should never get here ??? */
2634 PyErr_BadInternalCall();
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002635 return NULL;
2636}
2637
Guido van Rossumb209a111997-04-29 18:18:01 +00002638static PyObject *
Jeremy Hylton52820442001-01-03 23:52:36 +00002639call_instance(PyObject *func, PyObject *arg, PyObject *kw)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002640{
Jeremy Hylton52820442001-01-03 23:52:36 +00002641 PyObject *res, *call = PyObject_GetAttrString(func, "__call__");
2642 if (call == NULL) {
2643 PyInstanceObject *inst = (PyInstanceObject*) func;
2644 PyErr_Clear();
2645 PyErr_Format(PyExc_AttributeError,
2646 "%.200s instance has no __call__ method",
2647 PyString_AsString(inst->in_class->cl_name));
Guido van Rossum681d79a1995-07-18 14:51:37 +00002648 return NULL;
2649 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002650 res = call_object(call, arg, kw);
2651 Py_DECREF(call);
2652 return res;
2653}
2654
2655static PyObject *
2656call_method(PyObject *func, PyObject *arg, PyObject *kw)
2657{
2658 PyObject *self = PyMethod_GET_SELF(func);
2659 PyObject *class = PyMethod_GET_CLASS(func);
2660 PyObject *result;
2661
2662 func = PyMethod_GET_FUNCTION(func);
2663 if (self == NULL) {
2664 /* Unbound methods must be called with an instance of
2665 the class (or a derived class) as first argument */
2666 if (PyTuple_Size(arg) >= 1)
2667 self = PyTuple_GET_ITEM(arg, 0);
2668 if (!(self != NULL && PyInstance_Check(self)
2669 && PyClass_IsSubclass((PyObject *)
2670 (((PyInstanceObject *)self)->in_class),
2671 class))) {
2672 PyErr_SetString(PyExc_TypeError,
2673 "unbound method must be called with instance as first argument");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002674 return NULL;
2675 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002676 Py_INCREF(arg);
Jeremy Hylton52820442001-01-03 23:52:36 +00002677 } else {
2678 int argcount = PyTuple_Size(arg);
2679 PyObject *newarg = PyTuple_New(argcount + 1);
2680 int i;
2681 if (newarg == NULL)
2682 return NULL;
2683 Py_INCREF(self);
2684 PyTuple_SET_ITEM(newarg, 0, self);
2685 for (i = 0; i < argcount; i++) {
2686 PyObject *v = PyTuple_GET_ITEM(arg, i);
2687 Py_XINCREF(v);
2688 PyTuple_SET_ITEM(newarg, i+1, v);
2689 }
2690 arg = newarg;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002691 }
Jeremy Hylton52820442001-01-03 23:52:36 +00002692 result = call_object(func, arg, kw);
2693 Py_DECREF(arg);
2694 return result;
2695}
2696
2697static PyObject *
2698call_eval_code2(PyObject *func, PyObject *arg, PyObject *kw)
2699{
2700 PyObject *result;
2701 PyObject *argdefs;
2702 PyObject **d, **k;
2703 int nk, nd;
2704
2705 argdefs = PyFunction_GET_DEFAULTS(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00002706 if (argdefs != NULL && PyTuple_Check(argdefs)) {
2707 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
2708 nd = PyTuple_Size(argdefs);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002709 }
2710 else {
2711 d = NULL;
2712 nd = 0;
2713 }
2714
2715 if (kw != NULL) {
2716 int pos, i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002717 nk = PyDict_Size(kw);
2718 k = PyMem_NEW(PyObject *, 2*nk);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002719 if (k == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002720 PyErr_NoMemory();
2721 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002722 return NULL;
Guido van Rossume59214e1994-08-30 08:01:59 +00002723 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002724 pos = i = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002725 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002726 i += 2;
2727 nk = i/2;
2728 /* XXX This is broken if the caller deletes dict items! */
2729 }
2730 else {
2731 k = NULL;
2732 nk = 0;
Guido van Rossume59214e1994-08-30 08:01:59 +00002733 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002734
Guido van Rossum681d79a1995-07-18 14:51:37 +00002735 result = eval_code2(
Jeremy Hylton52820442001-01-03 23:52:36 +00002736 (PyCodeObject *)PyFunction_GET_CODE(func),
2737 PyFunction_GET_GLOBALS(func), (PyObject *)NULL,
Guido van Rossumb209a111997-04-29 18:18:01 +00002738 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
Guido van Rossum681d79a1995-07-18 14:51:37 +00002739 k, nk,
Jeremy Hylton52820442001-01-03 23:52:36 +00002740 d, nd);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002741
Guido van Rossumb18618d2000-05-03 23:44:39 +00002742 if (k != NULL)
2743 PyMem_DEL(k);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002744
Guido van Rossum681d79a1995-07-18 14:51:37 +00002745 return result;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002746}
2747
Jeremy Hylton52820442001-01-03 23:52:36 +00002748#define EXT_POP(STACK_POINTER) (*--(STACK_POINTER))
2749
2750/* The two fast_xxx() functions optimize calls for which no argument
2751 tuple is necessary; the objects are passed directly from the stack.
2752 fast_cfunction() is called for METH_OLDARGS functions.
2753 fast_function() is for functions with no special argument handling.
2754*/
2755
2756static PyObject *
2757fast_cfunction(PyObject *func, PyObject ***pp_stack, int na)
2758{
2759 PyCFunction meth = PyCFunction_GET_FUNCTION(func);
2760 PyObject *self = PyCFunction_GET_SELF(func);
2761
2762 if (na == 0)
2763 return (*meth)(self, NULL);
Charles G. Waldmaneec72a72001-01-10 22:11:59 +00002764 else if (na == 1) {
2765 PyObject *arg = EXT_POP(*pp_stack);
2766 PyObject *result = (*meth)(self, arg);
2767 Py_DECREF(arg);
2768 return result;
2769 } else {
Jeremy Hylton52820442001-01-03 23:52:36 +00002770 PyObject *args = load_args(pp_stack, na);
2771 PyObject *result = (*meth)(self, args);
2772 Py_DECREF(args);
2773 return result;
2774 }
2775}
2776
2777static PyObject *
2778fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
2779{
2780 PyObject *co = PyFunction_GET_CODE(func);
2781 PyObject *globals = PyFunction_GET_GLOBALS(func);
2782 PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
2783 PyObject **d = NULL;
2784 int nd = 0;
2785
2786 if (argdefs != NULL) {
2787 d = &PyTuple_GET_ITEM(argdefs, 0);
2788 nd = ((PyTupleObject *)argdefs)->ob_size;
2789 }
2790 return eval_code2((PyCodeObject *)co, globals,
2791 (PyObject *)NULL, (*pp_stack)-n, na,
2792 (*pp_stack)-2*nk, nk, d, nd);
2793}
2794
2795static PyObject *
2796update_keyword_args(PyObject *orig_kwdict, int nk, PyObject ***pp_stack)
2797{
2798 PyObject *kwdict = NULL;
2799 if (orig_kwdict == NULL)
2800 kwdict = PyDict_New();
2801 else {
2802 kwdict = PyDict_Copy(orig_kwdict);
2803 Py_DECREF(orig_kwdict);
2804 }
2805 if (kwdict == NULL)
2806 return NULL;
2807 while (--nk >= 0) {
2808 int err;
2809 PyObject *value = EXT_POP(*pp_stack);
2810 PyObject *key = EXT_POP(*pp_stack);
2811 if (PyDict_GetItem(kwdict, key) != NULL) {
2812 PyErr_Format(PyExc_TypeError,
2813 "keyword parameter '%.400s' "
2814 "redefined in function call",
2815 PyString_AsString(key));
2816 Py_DECREF(key);
2817 Py_DECREF(value);
2818 Py_DECREF(kwdict);
2819 return NULL;
2820 }
2821 err = PyDict_SetItem(kwdict, key, value);
2822 Py_DECREF(key);
2823 Py_DECREF(value);
2824 if (err) {
2825 Py_DECREF(kwdict);
2826 return NULL;
2827 }
2828 }
2829 return kwdict;
2830}
2831
2832static PyObject *
2833update_star_args(int nstack, int nstar, PyObject *stararg,
2834 PyObject ***pp_stack)
2835{
2836 PyObject *callargs, *w;
2837
2838 callargs = PyTuple_New(nstack + nstar);
2839 if (callargs == NULL) {
2840 return NULL;
2841 }
2842 if (nstar) {
2843 int i;
2844 for (i = 0; i < nstar; i++) {
2845 PyObject *a = PyTuple_GET_ITEM(stararg, i);
2846 Py_INCREF(a);
2847 PyTuple_SET_ITEM(callargs, nstack + i, a);
2848 }
2849 }
2850 while (--nstack >= 0) {
2851 w = EXT_POP(*pp_stack);
2852 PyTuple_SET_ITEM(callargs, nstack, w);
2853 }
2854 return callargs;
2855}
2856
2857static PyObject *
2858load_args(PyObject ***pp_stack, int na)
2859{
2860 PyObject *args = PyTuple_New(na);
2861 PyObject *w;
2862
2863 if (args == NULL)
2864 return NULL;
2865 while (--na >= 0) {
2866 w = EXT_POP(*pp_stack);
2867 PyTuple_SET_ITEM(args, na, w);
2868 }
2869 return args;
2870}
2871
2872static PyObject *
2873do_call(PyObject *func, PyObject ***pp_stack, int na, int nk)
2874{
2875 PyObject *callargs = NULL;
2876 PyObject *kwdict = NULL;
2877 PyObject *result = NULL;
2878
2879 if (nk > 0) {
2880 kwdict = update_keyword_args(NULL, nk, pp_stack);
2881 if (kwdict == NULL)
2882 goto call_fail;
2883 }
2884 callargs = load_args(pp_stack, na);
2885 if (callargs == NULL)
2886 goto call_fail;
2887 result = call_object(func, callargs, kwdict);
2888 call_fail:
2889 Py_XDECREF(callargs);
2890 Py_XDECREF(kwdict);
2891 return result;
2892}
2893
2894static PyObject *
2895ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk)
2896{
2897 int nstar = 0;
2898 PyObject *callargs = NULL;
2899 PyObject *stararg = NULL;
2900 PyObject *kwdict = NULL;
2901 PyObject *result = NULL;
2902
2903 if (flags & CALL_FLAG_KW) {
2904 kwdict = EXT_POP(*pp_stack);
2905 if (!(kwdict && PyDict_Check(kwdict))) {
2906 PyErr_SetString(PyExc_TypeError,
2907 "** argument must be a dictionary");
2908 goto ext_call_fail;
2909 }
2910 }
2911 if (flags & CALL_FLAG_VAR) {
2912 stararg = EXT_POP(*pp_stack);
2913 if (!PyTuple_Check(stararg)) {
2914 PyObject *t = NULL;
2915 t = PySequence_Tuple(stararg);
2916 if (t == NULL) {
2917 if (PyErr_ExceptionMatches(PyExc_TypeError)) {
2918 PyErr_SetString(PyExc_TypeError,
2919 "* argument must be a sequence");
2920 }
2921 goto ext_call_fail;
2922 }
2923 Py_DECREF(stararg);
2924 stararg = t;
2925 }
2926 nstar = PyTuple_GET_SIZE(stararg);
2927 }
2928 if (nk > 0) {
2929 kwdict = update_keyword_args(kwdict, nk, pp_stack);
2930 if (kwdict == NULL)
2931 goto ext_call_fail;
2932 }
2933 callargs = update_star_args(na, nstar, stararg, pp_stack);
2934 if (callargs == NULL)
2935 goto ext_call_fail;
2936 result = call_object(func, callargs, kwdict);
2937 ext_call_fail:
2938 Py_XDECREF(callargs);
2939 Py_XDECREF(kwdict);
2940 Py_XDECREF(stararg);
2941 return result;
2942}
2943
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002944#define SLICE_ERROR_MSG \
2945 "standard sequence type does not support step size other than one"
2946
Guido van Rossumb209a111997-04-29 18:18:01 +00002947static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002948loop_subscript(PyObject *v, PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002949{
Guido van Rossumb209a111997-04-29 18:18:01 +00002950 PySequenceMethods *sq = v->ob_type->tp_as_sequence;
Guido van Rossume59214e1994-08-30 08:01:59 +00002951 int i;
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002952 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002953 PyErr_SetString(PyExc_TypeError, "loop over non-sequence");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002954 return NULL;
2955 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002956 i = PyInt_AsLong(w);
Guido van Rossume59214e1994-08-30 08:01:59 +00002957 v = (*sq->sq_item)(v, i);
2958 if (v)
2959 return v;
Barry Warsaw4249f541997-08-22 21:26:19 +00002960 if (PyErr_ExceptionMatches(PyExc_IndexError))
Guido van Rossumb209a111997-04-29 18:18:01 +00002961 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002962 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002963}
2964
Guido van Rossum20c6add2000-05-08 14:06:50 +00002965/* Extract a slice index from a PyInt or PyLong, the index is bound to
2966 the range [-INT_MAX+1, INTMAX]. Returns 0 and an exception if there is
2967 and error. Returns 1 on success.*/
2968
2969int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00002970_PyEval_SliceIndex(PyObject *v, int *pi)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002971{
2972 if (v != NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002973 long x;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002974 if (PyInt_Check(v)) {
2975 x = PyInt_AsLong(v);
2976 } else if (PyLong_Check(v)) {
2977 x = PyLong_AsLong(v);
2978 if (x==-1 && PyErr_Occurred()) {
2979 PyObject *long_zero;
2980
2981 if (!PyErr_ExceptionMatches( PyExc_OverflowError ) ) {
2982 /* It's not an overflow error, so just
2983 signal an error */
Guido van Rossum20c6add2000-05-08 14:06:50 +00002984 return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002985 }
2986
2987 /* It's an overflow error, so we need to
2988 check the sign of the long integer,
2989 set the value to INT_MAX or 0, and clear
2990 the error. */
2991
2992 /* Create a long integer with a value of 0 */
2993 long_zero = PyLong_FromLong( 0L );
Guido van Rossum20c6add2000-05-08 14:06:50 +00002994 if (long_zero == NULL) return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002995
2996 /* Check sign */
2997 if (PyObject_Compare(long_zero, v) < 0)
2998 x = INT_MAX;
2999 else
3000 x = 0;
3001
3002 /* Free the long integer we created, and clear the
3003 OverflowError */
3004 Py_DECREF(long_zero);
3005 PyErr_Clear();
3006 }
3007 } else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003008 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003009 "slice indices must be integers");
Guido van Rossum20c6add2000-05-08 14:06:50 +00003010 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003011 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00003012 /* Truncate -- very long indices are truncated anyway */
3013 if (x > INT_MAX)
3014 x = INT_MAX;
3015 else if (x < -INT_MAX)
3016 x = 0;
3017 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003018 }
Guido van Rossum20c6add2000-05-08 14:06:50 +00003019 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003020}
3021
Guido van Rossumb209a111997-04-29 18:18:01 +00003022static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003023apply_slice(PyObject *u, PyObject *v, PyObject *w) /* return u[v:w] */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003024{
Guido van Rossuma027efa1997-05-05 20:56:21 +00003025 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003026 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003027 return NULL;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003028 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum04691fc1992-08-12 15:35:34 +00003029 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00003030 return PySequence_GetSlice(u, ilow, ihigh);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003031}
Guido van Rossum3f5da241990-12-20 15:06:42 +00003032
3033static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003034assign_slice(PyObject *u, PyObject *v, PyObject *w, PyObject *x) /* u[v:w] = x */
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003035{
Guido van Rossuma027efa1997-05-05 20:56:21 +00003036 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003037 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum3f5da241990-12-20 15:06:42 +00003038 return -1;
Guido van Rossum20c6add2000-05-08 14:06:50 +00003039 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum3f5da241990-12-20 15:06:42 +00003040 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00003041 if (x == NULL)
3042 return PySequence_DelSlice(u, ilow, ihigh);
3043 else
3044 return PySequence_SetSlice(u, ilow, ihigh, x);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003045}
3046
Guido van Rossumb209a111997-04-29 18:18:01 +00003047static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003048cmp_outcome(int op, register PyObject *v, register PyObject *w)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003049{
3050 register int cmp;
3051 register int res = 0;
3052 switch (op) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00003053 case IS:
3054 case IS_NOT:
3055 res = (v == w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00003056 if (op == (int) IS_NOT)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003057 res = !res;
3058 break;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003059 case IN:
3060 case NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00003061 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00003062 if (res < 0)
3063 return NULL;
Guido van Rossum04691fc1992-08-12 15:35:34 +00003064 if (op == (int) NOT_IN)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003065 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003066 break;
3067 case EXC_MATCH:
Barry Warsaw4249f541997-08-22 21:26:19 +00003068 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003069 break;
3070 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00003071 cmp = PyObject_Compare(v, w);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00003072 if (cmp && PyErr_Occurred())
3073 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00003074 switch (op) {
3075 case LT: res = cmp < 0; break;
3076 case LE: res = cmp <= 0; break;
3077 case EQ: res = cmp == 0; break;
3078 case NE: res = cmp != 0; break;
3079 case GT: res = cmp > 0; break;
3080 case GE: res = cmp >= 0; break;
3081 /* XXX no default? (res is initialized to 0 though) */
3082 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003083 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003084 v = res ? Py_True : Py_False;
3085 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00003086 return v;
3087}
3088
Thomas Wouters52152252000-08-17 22:55:00 +00003089static PyObject *
3090import_from(PyObject *v, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00003091{
Guido van Rossumb209a111997-04-29 18:18:01 +00003092 PyObject *w, *x;
3093 if (!PyModule_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003094 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003095 "import-from requires a module object");
Thomas Wouters52152252000-08-17 22:55:00 +00003096 return NULL;
3097 }
3098 w = PyModule_GetDict(v); /* TDB: can this not fail ? */
3099 x = PyDict_GetItem(w, name);
3100 if (x == NULL) {
3101 PyErr_Format(PyExc_ImportError,
3102 "cannot import name %.230s",
3103 PyString_AsString(name));
3104 } else
3105 Py_INCREF(x);
3106 return x;
3107}
3108
3109static int
3110import_all_from(PyObject *locals, PyObject *v)
3111{
3112 int pos = 0, err;
3113 PyObject *name, *value;
3114 PyObject *w;
3115
3116 if (!PyModule_Check(v)) {
3117 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003118 "import-from requires a module object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00003119 return -1;
3120 }
Thomas Wouters52152252000-08-17 22:55:00 +00003121 w = PyModule_GetDict(v); /* TBD: can this not fail ? */
3122
3123 while (PyDict_Next(w, &pos, &name, &value)) {
3124 if (!PyString_Check(name) ||
3125 PyString_AsString(name)[0] == '_')
Guido van Rossume9736fc1990-11-18 17:33:06 +00003126 continue;
Thomas Wouters52152252000-08-17 22:55:00 +00003127 Py_INCREF(value);
3128 err = PyDict_SetItem(locals, name, value);
3129 Py_DECREF(value);
3130 if (err != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00003131 return -1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003132 }
Thomas Wouters52152252000-08-17 22:55:00 +00003133 return 0;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003134}
3135
Guido van Rossumb209a111997-04-29 18:18:01 +00003136static PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003137build_class(PyObject *methods, PyObject *bases, PyObject *name)
Guido van Rossume9736fc1990-11-18 17:33:06 +00003138{
Guido van Rossumcd649651997-08-22 16:56:16 +00003139 int i, n;
Guido van Rossumb209a111997-04-29 18:18:01 +00003140 if (!PyTuple_Check(bases)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003141 PyErr_SetString(PyExc_SystemError,
3142 "build_class with non-tuple bases");
Guido van Rossum25831651993-05-19 14:50:45 +00003143 return NULL;
Guido van Rossume9736fc1990-11-18 17:33:06 +00003144 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003145 if (!PyDict_Check(methods)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003146 PyErr_SetString(PyExc_SystemError,
3147 "build_class with non-dictionary");
Guido van Rossume9736fc1990-11-18 17:33:06 +00003148 return NULL;
3149 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003150 if (!PyString_Check(name)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003151 PyErr_SetString(PyExc_SystemError,
Guido van Rossum7a5b7962000-03-31 13:52:29 +00003152 "build_class with non-string name");
Guido van Rossum25831651993-05-19 14:50:45 +00003153 return NULL;
3154 }
Guido van Rossumcd649651997-08-22 16:56:16 +00003155 n = PyTuple_Size(bases);
3156 for (i = 0; i < n; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003157 PyObject *base = PyTuple_GET_ITEM(bases, i);
3158 if (!PyClass_Check(base)) {
Guido van Rossum150b2df1996-12-05 23:17:11 +00003159 /* Call the base's *type*, if it is callable.
3160 This code is a hook for Donald Beaudry's
3161 and Jim Fulton's type extensions. In
Thomas Wouters7e474022000-07-16 12:04:32 +00003162 unextended Python it will never be triggered
Guido van Rossum55b9ab51997-07-31 03:54:02 +00003163 since its types are not callable.
3164 Ditto: call the bases's *class*, if it has
3165 one. This makes the same thing possible
3166 without writing C code. A true meta-object
3167 protocol! */
3168 PyObject *basetype = (PyObject *)base->ob_type;
3169 PyObject *callable = NULL;
3170 if (PyCallable_Check(basetype))
3171 callable = basetype;
3172 else
3173 callable = PyObject_GetAttrString(
3174 base, "__class__");
3175 if (callable) {
3176 PyObject *args;
3177 PyObject *newclass = NULL;
3178 args = Py_BuildValue(
3179 "(OOO)", name, bases, methods);
3180 if (args != NULL) {
3181 newclass = PyEval_CallObject(
3182 callable, args);
3183 Py_DECREF(args);
3184 }
Guido van Rossum730806d1998-04-10 22:27:42 +00003185 if (callable != basetype) {
Guido van Rossum55b9ab51997-07-31 03:54:02 +00003186 Py_DECREF(callable);
Guido van Rossum730806d1998-04-10 22:27:42 +00003187 }
Guido van Rossum55b9ab51997-07-31 03:54:02 +00003188 return newclass;
Guido van Rossum150b2df1996-12-05 23:17:11 +00003189 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003190 PyErr_SetString(PyExc_TypeError,
Guido van Rossum25831651993-05-19 14:50:45 +00003191 "base is not a class object");
3192 return NULL;
3193 }
3194 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003195 return PyClass_New(bases, methods, name);
Guido van Rossum25831651993-05-19 14:50:45 +00003196}
3197
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003198static int
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003199exec_statement(PyFrameObject *f, PyObject *prog, PyObject *globals,
3200 PyObject *locals)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003201{
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003202 int n;
Guido van Rossumb209a111997-04-29 18:18:01 +00003203 PyObject *v;
Guido van Rossum681d79a1995-07-18 14:51:37 +00003204 int plain = 0;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003205
Guido van Rossumb209a111997-04-29 18:18:01 +00003206 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
3207 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003208 /* Backward compatibility hack */
Guido van Rossumb209a111997-04-29 18:18:01 +00003209 globals = PyTuple_GetItem(prog, 1);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003210 if (n == 3)
Guido van Rossumb209a111997-04-29 18:18:01 +00003211 locals = PyTuple_GetItem(prog, 2);
3212 prog = PyTuple_GetItem(prog, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003213 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003214 if (globals == Py_None) {
3215 globals = PyEval_GetGlobals();
3216 if (locals == Py_None) {
3217 locals = PyEval_GetLocals();
Guido van Rossum681d79a1995-07-18 14:51:37 +00003218 plain = 1;
3219 }
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003220 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003221 else if (locals == Py_None)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003222 locals = globals;
Guido van Rossumb209a111997-04-29 18:18:01 +00003223 if (!PyString_Check(prog) &&
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +00003224 !PyUnicode_Check(prog) &&
Guido van Rossumb209a111997-04-29 18:18:01 +00003225 !PyCode_Check(prog) &&
3226 !PyFile_Check(prog)) {
3227 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003228 "exec: arg 1 must be a string, file, or code object");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003229 return -1;
3230 }
Fred Drake661ea262000-10-24 19:57:45 +00003231 if (!PyDict_Check(globals)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003232 PyErr_SetString(PyExc_TypeError,
Fred Drake661ea262000-10-24 19:57:45 +00003233 "exec: arg 2 must be a dictionary or None");
3234 return -1;
3235 }
3236 if (!PyDict_Check(locals)) {
3237 PyErr_SetString(PyExc_TypeError,
3238 "exec: arg 3 must be a dictionary or None");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003239 return -1;
3240 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003241 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00003242 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
Guido van Rossumb209a111997-04-29 18:18:01 +00003243 if (PyCode_Check(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003244 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003245 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003246 else if (PyFile_Check(prog)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003247 FILE *fp = PyFile_AsFile(prog);
3248 char *name = PyString_AsString(PyFile_Name(prog));
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003249 v = PyRun_File(fp, name, Py_file_input, globals, locals);
3250 }
3251 else {
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +00003252 char *str;
3253 if (PyString_AsStringAndSize(prog, &str, NULL))
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003254 return -1;
Marc-André Lemburgd1ba4432000-09-19 21:04:18 +00003255 v = PyRun_String(str, Py_file_input, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003256 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00003257 if (plain)
3258 PyFrame_LocalsToFast(f, 0);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003259 if (v == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003260 return -1;
Guido van Rossumb209a111997-04-29 18:18:01 +00003261 Py_DECREF(v);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003262 return 0;
3263}
Guido van Rossum24c13741995-02-14 09:42:43 +00003264
Paul Prescode68140d2000-08-30 20:25:01 +00003265static void
3266format_exc_check_arg(PyObject *exc, char *format_str, PyObject *obj)
3267{
3268 char *obj_str;
3269
3270 if (!obj)
3271 return;
3272
3273 obj_str = PyString_AsString(obj);
3274 if (!obj_str)
3275 return;
3276
3277 PyErr_Format(exc, format_str, obj_str);
3278}
Guido van Rossum950361c1997-01-24 13:49:28 +00003279
3280#ifdef DYNAMIC_EXECUTION_PROFILE
3281
3282PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003283getarray(long a[256])
Guido van Rossum950361c1997-01-24 13:49:28 +00003284{
3285 int i;
3286 PyObject *l = PyList_New(256);
3287 if (l == NULL) return NULL;
3288 for (i = 0; i < 256; i++) {
3289 PyObject *x = PyInt_FromLong(a[i]);
3290 if (x == NULL) {
3291 Py_DECREF(l);
3292 return NULL;
3293 }
3294 PyList_SetItem(l, i, x);
3295 }
3296 for (i = 0; i < 256; i++)
3297 a[i] = 0;
3298 return l;
3299}
3300
3301PyObject *
Thomas Woutersf70ef4f2000-07-22 18:47:25 +00003302_Py_GetDXProfile(PyObject *self, PyObject *args)
Guido van Rossum950361c1997-01-24 13:49:28 +00003303{
3304#ifndef DXPAIRS
3305 return getarray(dxp);
3306#else
3307 int i;
3308 PyObject *l = PyList_New(257);
3309 if (l == NULL) return NULL;
3310 for (i = 0; i < 257; i++) {
3311 PyObject *x = getarray(dxpairs[i]);
3312 if (x == NULL) {
3313 Py_DECREF(l);
3314 return NULL;
3315 }
3316 PyList_SetItem(l, i, x);
3317 }
3318 return l;
3319#endif
3320}
3321
3322#endif