blob: dd40b460281c26e91adf66065cf90846ad8197d2 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossum6d023c91995-01-04 19:12:13 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Guido van Rossumf70e43a1991-02-19 12:39:46 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000029
30******************************************************************/
31
Guido van Rossum3f5da241990-12-20 15:06:42 +000032/* Execute compiled code */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000033
Guido van Rossum681d79a1995-07-18 14:51:37 +000034/* XXX TO DO:
35 XXX how to pass arguments to call_trace?
Guido van Rossum681d79a1995-07-18 14:51:37 +000036 XXX speed up searching for keywords by using a dictionary
Guido van Rossum681d79a1995-07-18 14:51:37 +000037 XXX document it!
38 */
39
Guido van Rossumb209a111997-04-29 18:18:01 +000040#include "Python.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000041
Guido van Rossum10dc2e81990-11-18 17:27:39 +000042#include "compile.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000043#include "frameobject.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000044#include "eval.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000045#include "opcode.h"
Guido van Rossumdb3165e1993-10-18 17:06:59 +000046#include "graminit.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000047
Guido van Rossumc6004111993-11-05 10:22:19 +000048#include <ctype.h>
49
Guido van Rossuma027efa1997-05-05 20:56:21 +000050#ifdef HAVE_LIMITS_H
51#include <limits.h>
52#else
53#define INT_MAX 2147483647
54#endif
55
Guido van Rossum04691fc1992-08-12 15:35:34 +000056/* Turn this on if your compiler chokes on the big switch: */
Guido van Rossum1ae940a1995-01-02 19:04:15 +000057/* #define CASE_TOO_BIG 1 */
Guido van Rossum04691fc1992-08-12 15:35:34 +000058
Guido van Rossum408027e1996-12-30 16:17:54 +000059#ifdef Py_DEBUG
Guido van Rossum96a42c81992-01-12 02:29:51 +000060/* For debugging the interpreter: */
61#define LLTRACE 1 /* Low-level trace feature */
62#define CHECKEXC 1 /* Double-check exception checking */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000063#endif
64
Guido van Rossum5b722181993-03-30 17:46:03 +000065
Guido van Rossum374a9221991-04-04 10:40:29 +000066/* Forward declarations */
Guido van Rossum374a9221991-04-04 10:40:29 +000067
Guido van Rossumb209a111997-04-29 18:18:01 +000068static PyObject *eval_code2 Py_PROTO((PyCodeObject *,
69 PyObject *, PyObject *,
70 PyObject **, int,
71 PyObject **, int,
72 PyObject **, int,
73 PyObject *));
Guido van Rossum0a066c01992-03-27 17:29:15 +000074#ifdef LLTRACE
Guido van Rossumb209a111997-04-29 18:18:01 +000075static int prtrace Py_PROTO((PyObject *, char *));
Guido van Rossum0a066c01992-03-27 17:29:15 +000076#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +000077static void call_exc_trace Py_PROTO((PyObject **, PyObject**,
78 PyFrameObject *));
79static int call_trace Py_PROTO((PyObject **, PyObject **,
80 PyFrameObject *, char *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +000081static PyObject *add Py_PROTO((PyObject *, PyObject *));
82static PyObject *sub Py_PROTO((PyObject *, PyObject *));
83static PyObject *powerop Py_PROTO((PyObject *, PyObject *));
84static PyObject *mul Py_PROTO((PyObject *, PyObject *));
85static PyObject *divide Py_PROTO((PyObject *, PyObject *));
86static PyObject *mod Py_PROTO((PyObject *, PyObject *));
87static PyObject *neg Py_PROTO((PyObject *));
88static PyObject *pos Py_PROTO((PyObject *));
89static PyObject *not Py_PROTO((PyObject *));
90static PyObject *invert Py_PROTO((PyObject *));
91static PyObject *lshift Py_PROTO((PyObject *, PyObject *));
92static PyObject *rshift Py_PROTO((PyObject *, PyObject *));
93static PyObject *and Py_PROTO((PyObject *, PyObject *));
94static PyObject *xor Py_PROTO((PyObject *, PyObject *));
95static PyObject *or Py_PROTO((PyObject *, PyObject *));
96static PyObject *call_builtin Py_PROTO((PyObject *, PyObject *, PyObject *));
97static PyObject *call_function Py_PROTO((PyObject *, PyObject *, PyObject *));
98static PyObject *apply_subscript Py_PROTO((PyObject *, PyObject *));
99static PyObject *loop_subscript Py_PROTO((PyObject *, PyObject *));
Guido van Rossuma027efa1997-05-05 20:56:21 +0000100static int slice_index Py_PROTO((PyObject *, int *));
Guido van Rossumb209a111997-04-29 18:18:01 +0000101static PyObject *apply_slice Py_PROTO((PyObject *, PyObject *, PyObject *));
102static int assign_subscript Py_PROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossuma027efa1997-05-05 20:56:21 +0000103static int assign_slice Py_PROTO((PyObject *, PyObject *,
104 PyObject *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +0000105static int cmp_exception Py_PROTO((PyObject *, PyObject *));
106static int cmp_member Py_PROTO((PyObject *, PyObject *));
107static PyObject *cmp_outcome Py_PROTO((int, PyObject *, PyObject *));
108static int import_from Py_PROTO((PyObject *, PyObject *, PyObject *));
109static PyObject *build_class Py_PROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossuma027efa1997-05-05 20:56:21 +0000110static int exec_statement Py_PROTO((PyFrameObject *,
111 PyObject *, PyObject *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +0000112static PyObject *find_from_args Py_PROTO((PyFrameObject *, int));
Guido van Rossuma027efa1997-05-05 20:56:21 +0000113static void set_exc_info Py_PROTO((PyThreadState *,
114 PyObject *, PyObject *, PyObject *));
115static void reset_exc_info Py_PROTO((PyThreadState *));
Guido van Rossum374a9221991-04-04 10:40:29 +0000116
117
Guido van Rossum950361c1997-01-24 13:49:28 +0000118/* Dynamic execution profile */
119#ifdef DYNAMIC_EXECUTION_PROFILE
120#ifdef DXPAIRS
121static long dxpairs[257][256];
122#define dxp dxpairs[256]
123#else
124static long dxp[256];
125#endif
126#endif
127
128
Guido van Rossume59214e1994-08-30 08:01:59 +0000129#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +0000130
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000131#include <errno.h>
132#include "thread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +0000133
Guido van Rossuma027efa1997-05-05 20:56:21 +0000134extern int _PyThread_Started; /* Flag for Py_Exit */
135
Guido van Rossuma9672091994-09-14 13:31:22 +0000136static type_lock interpreter_lock = 0;
137static long main_thread = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000138
139void
Guido van Rossumb209a111997-04-29 18:18:01 +0000140PyEval_InitThreads()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000141{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000142 if (interpreter_lock)
Sjoerd Mullendered59d201993-01-06 13:36:38 +0000143 return;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000144 _PyThread_Started = 1;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000145 interpreter_lock = allocate_lock();
146 acquire_lock(interpreter_lock, 1);
Guido van Rossuma9672091994-09-14 13:31:22 +0000147 main_thread = get_thread_ident();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000148}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000149
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000150#endif
151
Guido van Rossumff4949e1992-08-05 19:58:53 +0000152/* Functions save_thread and restore_thread are always defined so
153 dynamically loaded modules needn't be compiled separately for use
154 with and without threads: */
155
Guido van Rossumb209a111997-04-29 18:18:01 +0000156PyObject *
157PyEval_SaveThread()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000158{
Guido van Rossume59214e1994-08-30 08:01:59 +0000159#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000160 if (interpreter_lock) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000161 PyThreadState *tstate = PyThreadState_Swap(NULL);
162 PyObject *res = tstate ? (PyObject *) (tstate->frame) : NULL;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000163 release_lock(interpreter_lock);
164 return res;
165 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000166#endif
Guido van Rossum9575a441993-04-07 14:06:14 +0000167 return NULL;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000168}
169
170void
Guido van Rossumb209a111997-04-29 18:18:01 +0000171PyEval_RestoreThread(x)
172 PyObject *x;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000173{
Guido van Rossume59214e1994-08-30 08:01:59 +0000174#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000175 if (interpreter_lock) {
176 int err;
177 err = errno;
178 acquire_lock(interpreter_lock, 1);
179 errno = err;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000180 PyThreadState_Swap(x ? ((PyFrameObject *)x)->f_tstate : NULL);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000181 }
182#endif
183}
184
185
Guido van Rossuma9672091994-09-14 13:31:22 +0000186/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
187 signal handlers or Mac I/O completion routines) can schedule calls
188 to a function to be called synchronously.
189 The synchronous function is called with one void* argument.
190 It should return 0 for success or -1 for failure -- failure should
191 be accompanied by an exception.
192
193 If registry succeeds, the registry function returns 0; if it fails
194 (e.g. due to too many pending calls) it returns -1 (without setting
195 an exception condition).
196
197 Note that because registry may occur from within signal handlers,
198 or other asynchronous events, calling malloc() is unsafe!
199
200#ifdef WITH_THREAD
201 Any thread can schedule pending calls, but only the main thread
202 will execute them.
203#endif
204
205 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
206 There are two possible race conditions:
207 (1) nested asynchronous registry calls;
208 (2) registry calls made while pending calls are being processed.
209 While (1) is very unlikely, (2) is a real possibility.
210 The current code is safe against (2), but not against (1).
211 The safety against (2) is derived from the fact that only one
212 thread (the main thread) ever takes things out of the queue.
Guido van Rossuma9672091994-09-14 13:31:22 +0000213
Guido van Rossuma027efa1997-05-05 20:56:21 +0000214 XXX Darn! With the advent of thread state, we should have an array
215 of pending calls per thread in the thread state! Later...
216*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000217
Guido van Rossuma9672091994-09-14 13:31:22 +0000218#define NPENDINGCALLS 32
219static struct {
Guido van Rossumb209a111997-04-29 18:18:01 +0000220 int (*func) Py_PROTO((ANY *));
Guido van Rossuma9672091994-09-14 13:31:22 +0000221 ANY *arg;
222} pendingcalls[NPENDINGCALLS];
223static volatile int pendingfirst = 0;
224static volatile int pendinglast = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000225static volatile int things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000226
227int
228Py_AddPendingCall(func, arg)
Guido van Rossumb209a111997-04-29 18:18:01 +0000229 int (*func) Py_PROTO((ANY *));
Guido van Rossuma9672091994-09-14 13:31:22 +0000230 ANY *arg;
231{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000232 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000233 int i, j;
234 /* XXX Begin critical section */
235 /* XXX If you want this to be safe against nested
236 XXX asynchronous calls, you'll have to work harder! */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000237 if (busy)
238 return -1;
239 busy = 1;
Guido van Rossuma9672091994-09-14 13:31:22 +0000240 i = pendinglast;
241 j = (i + 1) % NPENDINGCALLS;
242 if (j == pendingfirst)
243 return -1; /* Queue full */
244 pendingcalls[i].func = func;
245 pendingcalls[i].arg = arg;
246 pendinglast = j;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000247 things_to_do = 1; /* Signal main loop */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000248 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000249 /* XXX End critical section */
250 return 0;
251}
252
Guido van Rossum180d7b41994-09-29 09:45:57 +0000253int
254Py_MakePendingCalls()
Guido van Rossuma9672091994-09-14 13:31:22 +0000255{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000256 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000257#ifdef WITH_THREAD
Guido van Rossuma027efa1997-05-05 20:56:21 +0000258 if (main_thread && get_thread_ident() != main_thread)
Guido van Rossuma9672091994-09-14 13:31:22 +0000259 return 0;
260#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000261 if (busy)
Guido van Rossum180d7b41994-09-29 09:45:57 +0000262 return 0;
263 busy = 1;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000264 things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000265 for (;;) {
266 int i;
Guido van Rossumb209a111997-04-29 18:18:01 +0000267 int (*func) Py_PROTO((ANY *));
Guido van Rossuma9672091994-09-14 13:31:22 +0000268 ANY *arg;
269 i = pendingfirst;
270 if (i == pendinglast)
271 break; /* Queue empty */
272 func = pendingcalls[i].func;
273 arg = pendingcalls[i].arg;
274 pendingfirst = (i + 1) % NPENDINGCALLS;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000275 if (func(arg) < 0) {
276 busy = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000277 things_to_do = 1; /* We're not done yet */
Guido van Rossuma9672091994-09-14 13:31:22 +0000278 return -1;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000279 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000280 }
Guido van Rossum180d7b41994-09-29 09:45:57 +0000281 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000282 return 0;
283}
284
285
Guido van Rossum374a9221991-04-04 10:40:29 +0000286/* Status code for main loop (reason for stack unwind) */
287
288enum why_code {
289 WHY_NOT, /* No error */
290 WHY_EXCEPTION, /* Exception occurred */
291 WHY_RERAISE, /* Exception re-raised by 'finally' */
292 WHY_RETURN, /* 'return' statement */
293 WHY_BREAK /* 'break' statement */
294};
295
Guido van Rossumb209a111997-04-29 18:18:01 +0000296static enum why_code do_raise Py_PROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossum1aa14831997-01-21 05:34:20 +0000297
Guido van Rossum374a9221991-04-04 10:40:29 +0000298
Guido van Rossum681d79a1995-07-18 14:51:37 +0000299/* Backward compatible interface */
Guido van Rossum374a9221991-04-04 10:40:29 +0000300
Guido van Rossumb209a111997-04-29 18:18:01 +0000301PyObject *
302PyEval_EvalCode(co, globals, locals)
303 PyCodeObject *co;
304 PyObject *globals;
305 PyObject *locals;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000306{
307 return eval_code2(co,
308 globals, locals,
Guido van Rossumb209a111997-04-29 18:18:01 +0000309 (PyObject **)NULL, 0,
310 (PyObject **)NULL, 0,
311 (PyObject **)NULL, 0,
312 (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000313}
314
315
316/* Interpreter main loop */
317
Guido van Rossum8861b741996-07-30 16:49:37 +0000318#ifndef MAX_RECURSION_DEPTH
319#define MAX_RECURSION_DEPTH 10000
320#endif
321
Guido van Rossumb209a111997-04-29 18:18:01 +0000322static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +0000323eval_code2(co, globals, locals,
324 args, argcount, kws, kwcount, defs, defcount, owner)
Guido van Rossumb209a111997-04-29 18:18:01 +0000325 PyCodeObject *co;
326 PyObject *globals;
327 PyObject *locals;
328 PyObject **args;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000329 int argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000330 PyObject **kws; /* length: 2*kwcount */
Guido van Rossum681d79a1995-07-18 14:51:37 +0000331 int kwcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000332 PyObject **defs;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000333 int defcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000334 PyObject *owner;
Guido van Rossum374a9221991-04-04 10:40:29 +0000335{
Guido van Rossum950361c1997-01-24 13:49:28 +0000336#ifdef DXPAIRS
337 int lastopcode = 0;
338#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000339 register unsigned char *next_instr;
Guido van Rossum150b2df1996-12-05 23:17:11 +0000340 register int opcode = 0; /* Current opcode */
341 register int oparg = 0; /* Current opcode argument, if any */
Guido van Rossumb209a111997-04-29 18:18:01 +0000342 register PyObject **stack_pointer;
Guido van Rossum374a9221991-04-04 10:40:29 +0000343 register enum why_code why; /* Reason for block stack unwind */
344 register int err; /* Error status -- nonzero if error */
Guido van Rossumb209a111997-04-29 18:18:01 +0000345 register PyObject *x; /* Result object -- NULL if error */
346 register PyObject *v; /* Temporary objects popped off stack */
347 register PyObject *w;
348 register PyObject *u;
349 register PyObject *t;
350 register PyFrameObject *f; /* Current frame */
351 register PyObject **fastlocals = NULL;
352 PyObject *retval = NULL; /* Return value */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000353 PyThreadState *tstate = PyThreadState_Get();
Guido van Rossum96a42c81992-01-12 02:29:51 +0000354#ifdef LLTRACE
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000355 int lltrace;
Guido van Rossum374a9221991-04-04 10:40:29 +0000356#endif
Guido van Rossum408027e1996-12-30 16:17:54 +0000357#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000358 /* Make it easier to find out where we are with a debugger */
Guido van Rossumb209a111997-04-29 18:18:01 +0000359 char *filename = PyString_AsString(co->co_filename);
Guido van Rossum99bec951992-09-03 20:29:45 +0000360#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000361
362/* Code access macros */
363
364#define GETCONST(i) Getconst(f, i)
365#define GETNAME(i) Getname(f, i)
366#define GETNAMEV(i) Getnamev(f, i)
Guido van Rossumdeb0c5e1997-01-27 23:42:36 +0000367#define FIRST_INSTR() (GETUSTRINGVALUE(co->co_code))
Guido van Rossum374a9221991-04-04 10:40:29 +0000368#define INSTR_OFFSET() (next_instr - FIRST_INSTR())
369#define NEXTOP() (*next_instr++)
370#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
371#define JUMPTO(x) (next_instr = FIRST_INSTR() + (x))
372#define JUMPBY(x) (next_instr += (x))
373
374/* Stack manipulation macros */
375
376#define STACK_LEVEL() (stack_pointer - f->f_valuestack)
377#define EMPTY() (STACK_LEVEL() == 0)
378#define TOP() (stack_pointer[-1])
379#define BASIC_PUSH(v) (*stack_pointer++ = (v))
380#define BASIC_POP() (*--stack_pointer)
381
Guido van Rossum96a42c81992-01-12 02:29:51 +0000382#ifdef LLTRACE
383#define PUSH(v) (BASIC_PUSH(v), lltrace && prtrace(TOP(), "push"))
384#define POP() (lltrace && prtrace(TOP(), "pop"), BASIC_POP())
Guido van Rossum374a9221991-04-04 10:40:29 +0000385#else
386#define PUSH(v) BASIC_PUSH(v)
387#define POP() BASIC_POP()
388#endif
389
Guido van Rossum681d79a1995-07-18 14:51:37 +0000390/* Local variable macros */
391
392#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumb209a111997-04-29 18:18:01 +0000393#define SETLOCAL(i, value) do { Py_XDECREF(GETLOCAL(i)); \
Guido van Rossum681d79a1995-07-18 14:51:37 +0000394 GETLOCAL(i) = value; } while (0)
395
Guido van Rossuma027efa1997-05-05 20:56:21 +0000396/* Start of code */
397
398 if (tstate == NULL)
399 Py_FatalError("eval_code2 called without a current thread");
400
Guido van Rossum8861b741996-07-30 16:49:37 +0000401#ifdef USE_STACKCHECK
Guido van Rossuma027efa1997-05-05 20:56:21 +0000402 if (tstate->recursion_depth%10 == 0 && PyOS_CheckStack()) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000403 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
Guido van Rossum8861b741996-07-30 16:49:37 +0000404 return NULL;
405 }
406#endif
407
Guido van Rossum681d79a1995-07-18 14:51:37 +0000408 if (globals == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000409 PyErr_SetString(PyExc_SystemError, "eval_code2: NULL globals");
Guido van Rossum6135a871995-01-09 17:53:26 +0000410 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000411 }
412
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000413#ifdef LLTRACE
Guido van Rossumb209a111997-04-29 18:18:01 +0000414 lltrace = PyDict_GetItemString(globals, "__lltrace__") != NULL;
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000415#endif
416
Guido van Rossumb209a111997-04-29 18:18:01 +0000417 f = PyFrame_New(
Guido van Rossuma027efa1997-05-05 20:56:21 +0000418 tstate, /*back*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000419 co, /*code*/
420 globals, /*globals*/
Guido van Rossum76836021997-01-20 04:26:20 +0000421 locals); /*locals*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000422 if (f == NULL)
423 return NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000424
Guido van Rossuma027efa1997-05-05 20:56:21 +0000425 tstate->frame = f;
Guido van Rossumdeb0c5e1997-01-27 23:42:36 +0000426 fastlocals = f->f_localsplus;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000427
428 if (co->co_argcount > 0 ||
429 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
430 int i;
431 int n = argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000432 PyObject *kwdict = NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000433 if (co->co_flags & CO_VARKEYWORDS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000434 kwdict = PyDict_New();
Guido van Rossum681d79a1995-07-18 14:51:37 +0000435 if (kwdict == NULL)
436 goto fail;
Guido van Rossum8c5df061997-01-24 04:19:24 +0000437 i = co->co_argcount;
438 if (co->co_flags & CO_VARARGS)
439 i++;
440 SETLOCAL(i, kwdict);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000441 }
442 if (argcount > co->co_argcount) {
443 if (!(co->co_flags & CO_VARARGS)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000444 PyErr_SetString(PyExc_TypeError,
445 "too many arguments");
Guido van Rossum681d79a1995-07-18 14:51:37 +0000446 goto fail;
447 }
448 n = co->co_argcount;
449 }
450 for (i = 0; i < n; i++) {
451 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000452 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000453 SETLOCAL(i, x);
454 }
455 if (co->co_flags & CO_VARARGS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000456 u = PyTuple_New(argcount - n);
Guido van Rossum8c5df061997-01-24 04:19:24 +0000457 if (u == NULL)
458 goto fail;
459 SETLOCAL(co->co_argcount, u);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000460 for (i = n; i < argcount; i++) {
461 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000462 Py_INCREF(x);
463 PyTuple_SET_ITEM(u, i-n, x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000464 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000465 }
466 for (i = 0; i < kwcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000467 PyObject *keyword = kws[2*i];
468 PyObject *value = kws[2*i + 1];
Guido van Rossum681d79a1995-07-18 14:51:37 +0000469 int j;
470 /* XXX slow -- speed up using dictionary? */
471 for (j = 0; j < co->co_argcount; j++) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000472 PyObject *nm = PyTuple_GET_ITEM(
473 co->co_varnames, j);
Guido van Rossumb209a111997-04-29 18:18:01 +0000474 if (PyObject_Compare(keyword, nm) == 0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000475 break;
476 }
477 if (j >= co->co_argcount) {
478 if (kwdict == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000479 PyErr_Format(PyExc_TypeError,
Guido van Rossuma027efa1997-05-05 20:56:21 +0000480 "unexpected keyword argument: %.400s",
481 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000482 goto fail;
483 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000484 PyDict_SetItem(kwdict, keyword, value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000485 }
486 else {
487 if (GETLOCAL(j) != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000488 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +0000489 "keyword parameter redefined");
490 goto fail;
491 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000492 Py_INCREF(value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000493 SETLOCAL(j, value);
494 }
495 }
496 if (argcount < co->co_argcount) {
497 int m = co->co_argcount - defcount;
498 for (i = argcount; i < m; i++) {
499 if (GETLOCAL(i) == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000500 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +0000501 "not enough arguments");
502 goto fail;
503 }
504 }
505 if (n > m)
506 i = n - m;
507 else
508 i = 0;
509 for (; i < defcount; i++) {
510 if (GETLOCAL(m+i) == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000511 PyObject *def = defs[i];
512 Py_INCREF(def);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000513 SETLOCAL(m+i, def);
514 }
515 }
516 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000517 }
518 else {
519 if (argcount > 0 || kwcount > 0) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000520 PyErr_SetString(PyExc_TypeError,
521 "no arguments expected");
Guido van Rossum8c5df061997-01-24 04:19:24 +0000522 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000523 }
524 }
525
Guido van Rossuma027efa1997-05-05 20:56:21 +0000526 if (tstate->sys_tracefunc != NULL) {
527 /* tstate->sys_tracefunc, if defined, is a function that
528 will be called on *every* entry to a code block.
Guido van Rossum96a42c81992-01-12 02:29:51 +0000529 Its return value, if not None, is a function that
530 will be called at the start of each executed line
531 of code. (Actually, the function must return
532 itself in order to continue tracing.)
533 The trace functions are called with three arguments:
534 a pointer to the current frame, a string indicating
535 why the function is called, and an argument which
536 depends on the situation. The global trace function
537 (sys.trace) is also called whenever an exception
538 is detected. */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000539 if (call_trace(&tstate->sys_tracefunc,
540 &f->f_trace, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000541 Py_None/*XXX how to compute arguments now?*/)) {
Guido van Rossum96a42c81992-01-12 02:29:51 +0000542 /* Trace function raised an error */
Guido van Rossum8c5df061997-01-24 04:19:24 +0000543 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000544 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000545 }
546
Guido van Rossuma027efa1997-05-05 20:56:21 +0000547 if (tstate->sys_profilefunc != NULL) {
548 /* Similar for sys_profilefunc, except it needn't return
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000549 itself and isn't called for "line" events */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000550 if (call_trace(&tstate->sys_profilefunc,
551 (PyObject**)0, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000552 Py_None/*XXX*/)) {
Guido van Rossum8c5df061997-01-24 04:19:24 +0000553 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000554 }
555 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000556
Guido van Rossuma027efa1997-05-05 20:56:21 +0000557 if (++tstate->recursion_depth > MAX_RECURSION_DEPTH) {
558 --tstate->recursion_depth;
559 PyErr_SetString(PyExc_RuntimeError,
560 "Maximum recursion depth exceeded");
561 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +0000562 Py_DECREF(f);
Guido van Rossum8861b741996-07-30 16:49:37 +0000563 return NULL;
564 }
565
Guido van Rossumdeb0c5e1997-01-27 23:42:36 +0000566 next_instr = GETUSTRINGVALUE(co->co_code);
Guido van Rossum374a9221991-04-04 10:40:29 +0000567 stack_pointer = f->f_valuestack;
568
Guido van Rossum374a9221991-04-04 10:40:29 +0000569 why = WHY_NOT;
570 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000571 x = Py_None; /* Not a reference, just anything non-NULL */
Guido van Rossum374a9221991-04-04 10:40:29 +0000572
573 for (;;) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000574 /* Do periodic things. Doing this every time through
575 the loop would add too much overhead, so we do it
576 only every Nth instruction. We also do it if
577 ``things_to_do'' is set, i.e. when an asynchronous
578 event needs attention (e.g. a signal handler or
579 async I/O handler); see Py_AddPendingCall() and
580 Py_MakePendingCalls() above. */
Guido van Rossuma9672091994-09-14 13:31:22 +0000581
Guido van Rossuma027efa1997-05-05 20:56:21 +0000582 if (things_to_do || --tstate->ticker < 0) {
583 tstate->ticker = tstate->sys_checkinterval;
584 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000585 if (Py_MakePendingCalls() < 0) {
586 why = WHY_EXCEPTION;
587 goto on_error;
588 }
589 }
Guido van Rossuma027efa1997-05-05 20:56:21 +0000590#if !defined(HAVE_SIGNAL_H) && !defined(macintosh)
591 /* If we have true signals, the signal handler
592 will call Py_AddPendingCall() so we don't
593 have to call sigcheck(). On the Mac and
594 DOS, alas, we have to call it. */
Guido van Rossumb209a111997-04-29 18:18:01 +0000595 if (PyErr_CheckSignals()) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000596 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +0000597 goto on_error;
598 }
Guido van Rossum70d44781997-01-21 06:15:24 +0000599#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000600
Guido van Rossume59214e1994-08-30 08:01:59 +0000601#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000602 if (interpreter_lock) {
603 /* Give another thread a chance */
604
Guido van Rossuma027efa1997-05-05 20:56:21 +0000605 PyThreadState *tstate =
606 PyThreadState_Swap(NULL);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000607 release_lock(interpreter_lock);
608
609 /* Other threads may run now */
610
611 acquire_lock(interpreter_lock, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000612 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000613 }
614#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000615 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000616
Guido van Rossum374a9221991-04-04 10:40:29 +0000617 /* Extract opcode and argument */
Guido van Rossum99bec951992-09-03 20:29:45 +0000618
Guido van Rossum408027e1996-12-30 16:17:54 +0000619#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum99bec951992-09-03 20:29:45 +0000620 f->f_lasti = INSTR_OFFSET();
621#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000622
623 opcode = NEXTOP();
624 if (HAS_ARG(opcode))
625 oparg = NEXTARG();
Guido van Rossum950361c1997-01-24 13:49:28 +0000626#ifdef DYNAMIC_EXECUTION_PROFILE
627#ifdef DXPAIRS
628 dxpairs[lastopcode][opcode]++;
629 lastopcode = opcode;
630#endif
631 dxp[opcode]++;
632#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000633
Guido van Rossum96a42c81992-01-12 02:29:51 +0000634#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000635 /* Instruction tracing */
636
Guido van Rossum96a42c81992-01-12 02:29:51 +0000637 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000638 if (HAS_ARG(opcode)) {
639 printf("%d: %d, %d\n",
640 (int) (INSTR_OFFSET() - 3),
641 opcode, oparg);
642 }
643 else {
644 printf("%d: %d\n",
645 (int) (INSTR_OFFSET() - 1), opcode);
646 }
647 }
648#endif
649
650 /* Main switch on opcode */
651
652 switch (opcode) {
653
654 /* BEWARE!
655 It is essential that any operation that fails sets either
656 x to NULL, err to nonzero, or why to anything but WHY_NOT,
657 and that no operation that succeeds does this! */
658
659 /* case STOP_CODE: this is an error! */
660
661 case POP_TOP:
662 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000663 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000664 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000665
666 case ROT_TWO:
667 v = POP();
668 w = POP();
669 PUSH(v);
670 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000671 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000672
673 case ROT_THREE:
674 v = POP();
675 w = POP();
676 x = POP();
677 PUSH(v);
678 PUSH(x);
679 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000680 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000681
682 case DUP_TOP:
683 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000684 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000685 PUSH(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000686 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000687
688 case UNARY_POSITIVE:
689 v = POP();
690 x = pos(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000691 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000692 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000693 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000694 break;
695
696 case UNARY_NEGATIVE:
697 v = POP();
698 x = neg(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000699 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000700 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000701 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000702 break;
703
704 case UNARY_NOT:
705 v = POP();
706 x = not(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000707 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000708 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000709 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000710 break;
711
712 case UNARY_CONVERT:
713 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000714 x = PyObject_Repr(v);
715 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000716 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000717 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000718 break;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000719
720 case UNARY_INVERT:
721 v = POP();
722 x = invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000723 Py_DECREF(v);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000724 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000725 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000726 break;
Guido van Rossum374a9221991-04-04 10:40:29 +0000727
Guido van Rossum50564e81996-01-12 01:13:16 +0000728 case BINARY_POWER:
729 w = POP();
730 v = POP();
Guido van Rossum3b4da591996-06-19 21:49:17 +0000731 x = powerop(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000732 Py_DECREF(v);
733 Py_DECREF(w);
Guido van Rossum50564e81996-01-12 01:13:16 +0000734 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000735 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +0000736 break;
737
Guido van Rossum374a9221991-04-04 10:40:29 +0000738 case BINARY_MULTIPLY:
739 w = POP();
740 v = POP();
741 x = mul(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000742 Py_DECREF(v);
743 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000744 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000745 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000746 break;
747
748 case BINARY_DIVIDE:
749 w = POP();
750 v = POP();
751 x = divide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000752 Py_DECREF(v);
753 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000754 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000755 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000756 break;
757
758 case BINARY_MODULO:
759 w = POP();
760 v = POP();
Guido van Rossum06186511995-01-07 12:40:10 +0000761 x = mod(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000762 Py_DECREF(v);
763 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000764 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000765 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000766 break;
767
768 case BINARY_ADD:
769 w = POP();
770 v = POP();
771 x = add(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000772 Py_DECREF(v);
773 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000774 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000775 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000776 break;
777
778 case BINARY_SUBTRACT:
779 w = POP();
780 v = POP();
781 x = sub(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000782 Py_DECREF(v);
783 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000784 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000785 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000786 break;
787
788 case BINARY_SUBSCR:
789 w = POP();
790 v = POP();
791 x = apply_subscript(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000792 Py_DECREF(v);
793 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000794 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000795 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000796 break;
797
Guido van Rossum7928cd71991-10-24 14:59:31 +0000798 case BINARY_LSHIFT:
799 w = POP();
800 v = POP();
801 x = lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000802 Py_DECREF(v);
803 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000804 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000805 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000806 break;
807
808 case BINARY_RSHIFT:
809 w = POP();
810 v = POP();
811 x = rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000812 Py_DECREF(v);
813 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000814 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000815 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000816 break;
817
818 case BINARY_AND:
819 w = POP();
820 v = POP();
821 x = and(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000822 Py_DECREF(v);
823 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000824 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000825 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000826 break;
827
828 case BINARY_XOR:
829 w = POP();
830 v = POP();
831 x = xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000832 Py_DECREF(v);
833 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000834 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000835 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000836 break;
837
838 case BINARY_OR:
839 w = POP();
840 v = POP();
841 x = or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000842 Py_DECREF(v);
843 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000844 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000845 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000846 break;
847
Guido van Rossum374a9221991-04-04 10:40:29 +0000848 case SLICE+0:
849 case SLICE+1:
850 case SLICE+2:
851 case SLICE+3:
852 if ((opcode-SLICE) & 2)
853 w = POP();
854 else
855 w = NULL;
856 if ((opcode-SLICE) & 1)
857 v = POP();
858 else
859 v = NULL;
860 u = POP();
861 x = apply_slice(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000862 Py_DECREF(u);
863 Py_XDECREF(v);
864 Py_XDECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000865 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000866 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000867 break;
868
869 case STORE_SLICE+0:
870 case STORE_SLICE+1:
871 case STORE_SLICE+2:
872 case STORE_SLICE+3:
873 if ((opcode-STORE_SLICE) & 2)
874 w = POP();
875 else
876 w = NULL;
877 if ((opcode-STORE_SLICE) & 1)
878 v = POP();
879 else
880 v = NULL;
881 u = POP();
882 t = POP();
883 err = assign_slice(u, v, w, t); /* u[v:w] = t */
Guido van Rossumb209a111997-04-29 18:18:01 +0000884 Py_DECREF(t);
885 Py_DECREF(u);
886 Py_XDECREF(v);
887 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000888 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000889 break;
890
891 case DELETE_SLICE+0:
892 case DELETE_SLICE+1:
893 case DELETE_SLICE+2:
894 case DELETE_SLICE+3:
895 if ((opcode-DELETE_SLICE) & 2)
896 w = POP();
897 else
898 w = NULL;
899 if ((opcode-DELETE_SLICE) & 1)
900 v = POP();
901 else
902 v = NULL;
903 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000904 err = assign_slice(u, v, w, (PyObject *)NULL);
Guido van Rossum374a9221991-04-04 10:40:29 +0000905 /* del u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +0000906 Py_DECREF(u);
907 Py_XDECREF(v);
908 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000909 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000910 break;
911
912 case STORE_SUBSCR:
913 w = POP();
914 v = POP();
915 u = POP();
916 /* v[w] = u */
917 err = assign_subscript(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +0000918 Py_DECREF(u);
919 Py_DECREF(v);
920 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000921 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000922 break;
923
924 case DELETE_SUBSCR:
925 w = POP();
926 v = POP();
927 /* del v[w] */
Guido van Rossumb209a111997-04-29 18:18:01 +0000928 err = assign_subscript(v, w, (PyObject *)NULL);
929 Py_DECREF(v);
930 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000931 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000932 break;
933
934 case PRINT_EXPR:
935 v = POP();
Guido van Rossum374a9221991-04-04 10:40:29 +0000936 /* Print value except if procedure result */
Guido van Rossume59214e1994-08-30 08:01:59 +0000937 /* Before printing, also assign to '_' */
Guido van Rossumb209a111997-04-29 18:18:01 +0000938 if (v != Py_None &&
Guido van Rossuma027efa1997-05-05 20:56:21 +0000939 (err = PyDict_SetItemString(
940 f->f_builtins, "_", v)) == 0 &&
Guido van Rossumb209a111997-04-29 18:18:01 +0000941 !Py_SuppressPrintingFlag) {
942 Py_FlushLine();
943 x = PySys_GetObject("stdout");
944 err = PyFile_WriteObject(v, x, 0);
945 PyFile_SoftSpace(x, 1);
946 Py_FlushLine();
Guido van Rossum374a9221991-04-04 10:40:29 +0000947 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000948 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000949 break;
950
951 case PRINT_ITEM:
952 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000953 w = PySys_GetObject("stdout");
954 if (PyFile_SoftSpace(w, 1))
955 PyFile_WriteString(" ", w);
956 err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
957 if (err == 0 && PyString_Check(v)) {
Guido van Rossumc6004111993-11-05 10:22:19 +0000958 /* XXX move into writeobject() ? */
Guido van Rossumb209a111997-04-29 18:18:01 +0000959 char *s = PyString_AsString(v);
960 int len = PyString_Size(v);
Guido van Rossum7f7f2741995-02-10 17:01:56 +0000961 if (len > 0 &&
962 isspace(Py_CHARMASK(s[len-1])) &&
Guido van Rossumc6004111993-11-05 10:22:19 +0000963 s[len-1] != ' ')
Guido van Rossumb209a111997-04-29 18:18:01 +0000964 PyFile_SoftSpace(w, 0);
Guido van Rossum374a9221991-04-04 10:40:29 +0000965 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000966 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000967 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000968 break;
969
970 case PRINT_NEWLINE:
Guido van Rossumb209a111997-04-29 18:18:01 +0000971 x = PySys_GetObject("stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +0000972 if (x == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000973 PyErr_SetString(PyExc_RuntimeError,
974 "lost sys.stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +0000975 else {
Guido van Rossumb209a111997-04-29 18:18:01 +0000976 PyFile_WriteString("\n", x);
977 PyFile_SoftSpace(x, 0);
Guido van Rossum3165fe61992-09-25 21:59:05 +0000978 }
Guido van Rossum374a9221991-04-04 10:40:29 +0000979 break;
980
981 case BREAK_LOOP:
982 why = WHY_BREAK;
983 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +0000984
Guido van Rossumf10570b1995-07-07 22:53:21 +0000985 case RAISE_VARARGS:
986 u = v = w = NULL;
987 switch (oparg) {
988 case 3:
989 u = POP(); /* traceback */
Guido van Rossumf10570b1995-07-07 22:53:21 +0000990 /* Fallthrough */
991 case 2:
992 v = POP(); /* value */
993 /* Fallthrough */
994 case 1:
995 w = POP(); /* exc */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +0000996 why = do_raise(w, v, u);
Guido van Rossumf10570b1995-07-07 22:53:21 +0000997 break;
998 default:
Guido van Rossumb209a111997-04-29 18:18:01 +0000999 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001000 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001001 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001002 break;
1003 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001004 break;
1005
1006 case LOAD_LOCALS:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001007 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001008 PyErr_SetString(PyExc_SystemError,
1009 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001010 break;
1011 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001012 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001013 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001014 break;
1015
1016 case RETURN_VALUE:
1017 retval = POP();
1018 why = WHY_RETURN;
1019 break;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001020
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001021 case EXEC_STMT:
1022 w = POP();
1023 v = POP();
1024 u = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001025 err = exec_statement(f, u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001026 Py_DECREF(u);
1027 Py_DECREF(v);
1028 Py_DECREF(w);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001029 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001030
Guido van Rossum374a9221991-04-04 10:40:29 +00001031 case POP_BLOCK:
1032 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001033 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001034 while (STACK_LEVEL() > b->b_level) {
1035 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001036 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001037 }
1038 }
1039 break;
1040
1041 case END_FINALLY:
1042 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001043 if (PyInt_Check(v)) {
1044 why = (enum why_code) PyInt_AsLong(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001045 if (why == WHY_RETURN)
1046 retval = POP();
1047 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001048 else if (PyString_Check(v) || PyClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001049 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001050 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001051 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001052 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001053 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001054 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001055 else if (v != Py_None) {
1056 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001057 "'finally' pops bad exception");
1058 why = WHY_EXCEPTION;
1059 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001060 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001061 break;
1062
1063 case BUILD_CLASS:
Guido van Rossum25831651993-05-19 14:50:45 +00001064 u = POP();
Guido van Rossum374a9221991-04-04 10:40:29 +00001065 v = POP();
Guido van Rossum25831651993-05-19 14:50:45 +00001066 w = POP();
1067 x = build_class(u, v, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001068 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001069 Py_DECREF(u);
1070 Py_DECREF(v);
1071 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001072 break;
1073
1074 case STORE_NAME:
1075 w = GETNAMEV(oparg);
1076 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001077 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001078 PyErr_SetString(PyExc_SystemError,
1079 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001080 break;
1081 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001082 err = PyDict_SetItem(x, w, v);
1083 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001084 break;
1085
1086 case DELETE_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001087 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001088 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001089 PyErr_SetString(PyExc_SystemError,
1090 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001091 break;
1092 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001093 if ((err = PyDict_DelItem(x, w)) != 0)
1094 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001095 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001096
1097#ifdef CASE_TOO_BIG
1098 default: switch (opcode) {
1099#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001100
1101 case UNPACK_TUPLE:
1102 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001103 if (!PyTuple_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001104 PyErr_SetString(PyExc_TypeError,
1105 "unpack non-tuple");
Guido van Rossum374a9221991-04-04 10:40:29 +00001106 why = WHY_EXCEPTION;
1107 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001108 else if (PyTuple_Size(v) != oparg) {
1109 PyErr_SetString(PyExc_ValueError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001110 "unpack tuple of wrong size");
1111 why = WHY_EXCEPTION;
1112 }
1113 else {
1114 for (; --oparg >= 0; ) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001115 w = PyTuple_GET_ITEM(v, oparg);
1116 Py_INCREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001117 PUSH(w);
1118 }
1119 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001120 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001121 break;
1122
1123 case UNPACK_LIST:
1124 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001125 if (!PyList_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001126 PyErr_SetString(PyExc_TypeError,
1127 "unpack non-list");
Guido van Rossum374a9221991-04-04 10:40:29 +00001128 why = WHY_EXCEPTION;
1129 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001130 else if (PyList_Size(v) != oparg) {
1131 PyErr_SetString(PyExc_ValueError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001132 "unpack list of wrong size");
1133 why = WHY_EXCEPTION;
1134 }
1135 else {
1136 for (; --oparg >= 0; ) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001137 w = PyList_GetItem(v, oparg);
1138 Py_INCREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001139 PUSH(w);
1140 }
1141 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001142 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001143 break;
1144
1145 case STORE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001146 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001147 v = POP();
1148 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001149 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1150 Py_DECREF(v);
1151 Py_DECREF(u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001152 break;
1153
1154 case DELETE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001155 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001156 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001157 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1158 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001159 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001160 break;
1161
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001162 case STORE_GLOBAL:
1163 w = GETNAMEV(oparg);
1164 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001165 err = PyDict_SetItem(f->f_globals, w, v);
1166 Py_DECREF(v);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001167 break;
1168
1169 case DELETE_GLOBAL:
1170 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001171 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
1172 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001173 break;
1174
Guido van Rossum374a9221991-04-04 10:40:29 +00001175 case LOAD_CONST:
1176 x = GETCONST(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001177 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001178 PUSH(x);
1179 break;
1180
1181 case LOAD_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001182 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001183 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001184 PyErr_SetString(PyExc_SystemError,
1185 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001186 break;
1187 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001188 x = PyDict_GetItem(x, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001189 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001190 PyErr_Clear();
1191 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001192 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001193 PyErr_Clear();
1194 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001195 if (x == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001196 PyErr_SetObject(
1197 PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001198 break;
1199 }
1200 }
1201 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001202 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001203 PUSH(x);
1204 break;
1205
1206 case LOAD_GLOBAL:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001207 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001208 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001209 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001210 PyErr_Clear();
1211 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001212 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001213 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001214 break;
1215 }
1216 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001217 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001218 PUSH(x);
1219 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001220
Guido van Rossum9bfef441993-03-29 10:43:31 +00001221 case LOAD_FAST:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001222 x = GETLOCAL(oparg);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001223 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001224 PyErr_SetObject(PyExc_NameError,
1225 PyTuple_GetItem(co->co_varnames,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001226 oparg));
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001227 break;
1228 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001229 Py_INCREF(x);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001230 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001231 if (x != NULL) continue;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001232 break;
1233
1234 case STORE_FAST:
Guido van Rossum25831651993-05-19 14:50:45 +00001235 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001236 SETLOCAL(oparg, v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001237 continue;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001238
1239 case DELETE_FAST:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001240 SETLOCAL(oparg, NULL);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001241 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001242
1243 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001244 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001245 if (x != NULL) {
1246 for (; --oparg >= 0;) {
1247 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001248 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001249 }
1250 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001251 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001252 }
1253 break;
1254
1255 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001256 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001257 if (x != NULL) {
1258 for (; --oparg >= 0;) {
1259 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001260 err = PyList_SetItem(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001261 if (err != 0)
1262 break;
1263 }
1264 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001265 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001266 }
1267 break;
1268
1269 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001270 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001271 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001272 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001273 break;
1274
1275 case LOAD_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001276 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001277 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001278 x = PyObject_GetAttr(v, w);
1279 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001280 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001281 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001282 break;
1283
1284 case COMPARE_OP:
1285 w = POP();
1286 v = POP();
Guido van Rossum5b7313a1992-04-06 13:24:57 +00001287 x = cmp_outcome(oparg, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001288 Py_DECREF(v);
1289 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001290 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001291 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001292 break;
1293
1294 case IMPORT_NAME:
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001295 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001296 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001297 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001298 PyErr_SetString(PyExc_ImportError,
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001299 "__import__ not found");
1300 break;
1301 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001302 if (PyCFunction_Check(x)) {
1303 u = Py_None;
1304 Py_INCREF(u);
Guido van Rossum24c13741995-02-14 09:42:43 +00001305 }
1306 else {
1307 u = find_from_args(f, INSTR_OFFSET());
1308 if (u == NULL) {
1309 x = u;
1310 break;
1311 }
1312 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001313 w = Py_BuildValue("(OOOO)",
Guido van Rossum681d79a1995-07-18 14:51:37 +00001314 w,
1315 f->f_globals,
Guido van Rossuma027efa1997-05-05 20:56:21 +00001316 f->f_locals == NULL ?
1317 Py_None : f->f_locals,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001318 u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001319 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001320 if (w == NULL) {
1321 x = NULL;
1322 break;
1323 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001324 x = PyEval_CallObject(x, w);
1325 Py_DECREF(w);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001326 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001327 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001328 break;
1329
1330 case IMPORT_FROM:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001331 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001332 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001333 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001334 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001335 PyErr_SetString(PyExc_SystemError,
1336 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001337 break;
1338 }
1339 err = import_from(x, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001340 PyFrame_LocalsToFast(f, 0);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001341 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001342 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001343
Guido van Rossum374a9221991-04-04 10:40:29 +00001344 case JUMP_FORWARD:
1345 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001346 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001347
1348 case JUMP_IF_FALSE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001349 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001350 if (err > 0)
1351 err = 0;
1352 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00001353 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001354 else
1355 break;
1356 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001357
1358 case JUMP_IF_TRUE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001359 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001360 if (err > 0) {
1361 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00001362 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001363 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001364 else if (err == 0)
1365 ;
1366 else
1367 break;
1368 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001369
1370 case JUMP_ABSOLUTE:
1371 JUMPTO(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001372 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001373
1374 case FOR_LOOP:
1375 /* for v in s: ...
1376 On entry: stack contains s, i.
1377 On exit: stack contains s, i+1, s[i];
1378 but if loop exhausted:
1379 s, i are popped, and we jump */
1380 w = POP(); /* Loop index */
1381 v = POP(); /* Sequence object */
1382 u = loop_subscript(v, w);
1383 if (u != NULL) {
1384 PUSH(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001385 x = PyInt_FromLong(PyInt_AsLong(w)+1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001386 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001387 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001388 PUSH(u);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001389 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001390 }
1391 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001392 Py_DECREF(v);
1393 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001394 /* A NULL can mean "s exhausted"
1395 but also an error: */
Guido van Rossumb209a111997-04-29 18:18:01 +00001396 if (PyErr_Occurred())
Guido van Rossum374a9221991-04-04 10:40:29 +00001397 why = WHY_EXCEPTION;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001398 else {
Guido van Rossum374a9221991-04-04 10:40:29 +00001399 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001400 continue;
1401 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001402 }
1403 break;
1404
1405 case SETUP_LOOP:
1406 case SETUP_EXCEPT:
1407 case SETUP_FINALLY:
Guido van Rossumb209a111997-04-29 18:18:01 +00001408 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Guido van Rossum374a9221991-04-04 10:40:29 +00001409 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001410 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001411
1412 case SET_LINENO:
Guido van Rossum96a42c81992-01-12 02:29:51 +00001413#ifdef LLTRACE
1414 if (lltrace)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001415 printf("--- %s:%d \n", filename, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001416#endif
Guido van Rossum96a42c81992-01-12 02:29:51 +00001417 f->f_lineno = oparg;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001418 if (f->f_trace == NULL)
1419 continue;
1420 /* Trace each line of code reached */
1421 f->f_lasti = INSTR_OFFSET();
1422 err = call_trace(&f->f_trace, &f->f_trace,
Guido van Rossumb209a111997-04-29 18:18:01 +00001423 f, "line", Py_None);
Guido van Rossum374a9221991-04-04 10:40:29 +00001424 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001425
1426 case CALL_FUNCTION:
1427 {
Guido van Rossumf10570b1995-07-07 22:53:21 +00001428 int na = oparg & 0xff;
1429 int nk = (oparg>>8) & 0xff;
1430 int n = na + 2*nk;
Guido van Rossumb209a111997-04-29 18:18:01 +00001431 PyObject **pfunc = stack_pointer - n - 1;
1432 PyObject *func = *pfunc;
1433 PyObject *self = NULL;
1434 PyObject *class = NULL;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001435 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
Guido van Rossumb209a111997-04-29 18:18:01 +00001436 if (PyMethod_Check(func)) {
1437 self = PyMethod_Self(func);
1438 class = PyMethod_Class(func);
1439 func = PyMethod_Function(func);
1440 Py_INCREF(func);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001441 if (self != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001442 Py_INCREF(self);
1443 Py_DECREF(*pfunc);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001444 *pfunc = self;
1445 na++;
1446 n++;
1447 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001448 else {
1449 /* Unbound methods must be
1450 called with an instance of
1451 the class (or a derived
1452 class) as first argument */
1453 if (na > 0 &&
1454 (self = stack_pointer[-n])
1455 != NULL &&
Guido van Rossumb209a111997-04-29 18:18:01 +00001456 PyInstance_Check(self) &&
1457 PyClass_IsSubclass(
1458 (PyObject *)
1459 (((PyInstanceObject *)self)
Guido van Rossum681d79a1995-07-18 14:51:37 +00001460 ->in_class),
1461 class))
1462 /* Handy-dandy */ ;
1463 else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001464 PyErr_SetString(
1465 PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001466 "unbound method must be called with class instance 1st argument");
Guido van Rossum72b56e81995-12-10 04:57:42 +00001467 x = NULL;
1468 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001469 }
1470 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001471 }
1472 else
Guido van Rossumb209a111997-04-29 18:18:01 +00001473 Py_INCREF(func);
1474 if (PyFunction_Check(func)) {
1475 PyObject *co = PyFunction_GetCode(func);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001476 PyObject *globals =
1477 PyFunction_GetGlobals(func);
1478 PyObject *argdefs =
1479 PyFunction_GetDefaults(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00001480 PyObject **d;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001481 int nd;
1482 if (argdefs != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001483 d = &PyTuple_GET_ITEM(argdefs, 0);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001484 nd = ((PyTupleObject *)argdefs) ->
1485 ob_size;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001486 }
1487 else {
1488 d = NULL;
1489 nd = 0;
1490 }
1491 x = eval_code2(
Guido van Rossumb209a111997-04-29 18:18:01 +00001492 (PyCodeObject *)co,
1493 globals, (PyObject *)NULL,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001494 stack_pointer-n, na,
1495 stack_pointer-2*nk, nk,
1496 d, nd,
1497 class);
1498 }
1499 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001500 PyObject *args = PyTuple_New(na);
1501 PyObject *kwdict = NULL;
Guido van Rossumff8b4941995-07-26 18:16:42 +00001502 if (args == NULL) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001503 x = NULL;
Guido van Rossumff8b4941995-07-26 18:16:42 +00001504 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001505 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00001506 if (nk > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001507 kwdict = PyDict_New();
Guido van Rossumff8b4941995-07-26 18:16:42 +00001508 if (kwdict == NULL) {
1509 x = NULL;
1510 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001511 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00001512 err = 0;
1513 while (--nk >= 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001514 PyObject *value = POP();
1515 PyObject *key = POP();
1516 err = PyDict_SetItem(
Guido van Rossumff8b4941995-07-26 18:16:42 +00001517 kwdict, key, value);
Guido van Rossumb209a111997-04-29 18:18:01 +00001518 Py_DECREF(key);
1519 Py_DECREF(value);
Guido van Rossumd0eb4291997-01-27 21:30:09 +00001520 if (err)
Guido van Rossumff8b4941995-07-26 18:16:42 +00001521 break;
Guido van Rossumff8b4941995-07-26 18:16:42 +00001522 }
1523 if (err) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001524 Py_DECREF(args);
1525 Py_DECREF(kwdict);
Guido van Rossumff8b4941995-07-26 18:16:42 +00001526 break;
1527 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001528 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00001529 while (--na >= 0) {
1530 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001531 PyTuple_SET_ITEM(args, na, w);
Guido van Rossumff8b4941995-07-26 18:16:42 +00001532 }
1533 x = PyEval_CallObjectWithKeywords(
1534 func, args, kwdict);
Guido van Rossumb209a111997-04-29 18:18:01 +00001535 Py_DECREF(args);
1536 Py_XDECREF(kwdict);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001537 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001538 Py_DECREF(func);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001539 while (stack_pointer > pfunc) {
1540 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001541 Py_DECREF(w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001542 }
1543 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001544 if (x != NULL) continue;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001545 break;
1546 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001547
Guido van Rossum681d79a1995-07-18 14:51:37 +00001548 case MAKE_FUNCTION:
1549 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00001550 x = PyFunction_New(v, f->f_globals);
1551 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001552 /* XXX Maybe this should be a separate opcode? */
1553 if (x != NULL && oparg > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001554 v = PyTuple_New(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001555 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001556 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001557 x = NULL;
1558 break;
1559 }
1560 while (--oparg >= 0) {
1561 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001562 PyTuple_SET_ITEM(v, oparg, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001563 }
1564 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001565 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001566 }
1567 PUSH(x);
1568 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001569
1570 case BUILD_SLICE:
1571 if (oparg == 3)
1572 w = POP();
1573 else
1574 w = NULL;
1575 v = POP();
1576 u = POP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00001577 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001578 Py_DECREF(u);
1579 Py_DECREF(v);
1580 Py_XDECREF(w);
Guido van Rossum8861b741996-07-30 16:49:37 +00001581 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001582 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00001583 break;
1584
1585
Guido van Rossum374a9221991-04-04 10:40:29 +00001586 default:
1587 fprintf(stderr,
1588 "XXX lineno: %d, opcode: %d\n",
Guido van Rossum96a42c81992-01-12 02:29:51 +00001589 f->f_lineno, opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00001590 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00001591 why = WHY_EXCEPTION;
1592 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001593
1594#ifdef CASE_TOO_BIG
1595 }
1596#endif
1597
Guido van Rossum374a9221991-04-04 10:40:29 +00001598 } /* switch */
1599
1600 on_error:
1601
1602 /* Quickly continue if no error occurred */
1603
1604 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001605 if (err == 0 && x != NULL) {
1606#ifdef CHECKEXC
Guido van Rossumb209a111997-04-29 18:18:01 +00001607 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00001608 fprintf(stderr,
1609 "XXX undetected error\n");
1610 else
1611#endif
1612 continue; /* Normal, fast path */
1613 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001614 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00001615 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00001616 err = 0;
1617 }
1618
Guido van Rossum801dcae1992-04-08 11:32:32 +00001619#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00001620 /* Double-check exception status */
1621
1622 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001623 if (!PyErr_Occurred()) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001624 fprintf(stderr, "XXX ghost error\n");
Guido van Rossuma027efa1997-05-05 20:56:21 +00001625 PyErr_SetString(PyExc_SystemError,
1626 "ghost error");
Guido van Rossum374a9221991-04-04 10:40:29 +00001627 why = WHY_EXCEPTION;
1628 }
1629 }
1630 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001631 if (PyErr_Occurred()) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001632 fprintf(stderr,
1633 "XXX undetected error (why=%d)\n",
1634 why);
1635 why = WHY_EXCEPTION;
1636 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001637 }
1638#endif
1639
1640 /* Log traceback info if this is a real exception */
1641
1642 if (why == WHY_EXCEPTION) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001643 f->f_lasti = INSTR_OFFSET() - 1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001644 if (HAS_ARG(opcode))
Guido van Rossum96a42c81992-01-12 02:29:51 +00001645 f->f_lasti -= 2;
Guido van Rossumb209a111997-04-29 18:18:01 +00001646 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001647
Guido van Rossume59214e1994-08-30 08:01:59 +00001648 if (f->f_trace)
1649 call_exc_trace(&f->f_trace, &f->f_trace, f);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001650 if (tstate->sys_profilefunc)
1651 call_exc_trace(&tstate->sys_profilefunc,
1652 (PyObject**)0, f);
1653}
Guido van Rossum374a9221991-04-04 10:40:29 +00001654
1655 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
1656
1657 if (why == WHY_RERAISE)
1658 why = WHY_EXCEPTION;
1659
1660 /* Unwind stacks if a (pseudo) exception occurred */
1661
1662 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001663 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001664 while (STACK_LEVEL() > b->b_level) {
1665 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001666 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001667 }
1668 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
1669 why = WHY_NOT;
1670 JUMPTO(b->b_handler);
1671 break;
1672 }
1673 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00001674 (b->b_type == SETUP_EXCEPT &&
1675 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001676 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001677 PyObject *exc, *val, *tb;
1678 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001679 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001680 val = Py_None;
1681 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00001682 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001683 /* Make the raw exception data
1684 available to the handler,
1685 so a program can emulate the
1686 Python main loop. Don't do
1687 this for 'finally'. */
1688 if (b->b_type == SETUP_EXCEPT) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001689 set_exc_info(tstate,
1690 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001691 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001692 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001693 PUSH(val);
1694 PUSH(exc);
1695 }
1696 else {
1697 if (why == WHY_RETURN)
1698 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00001699 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00001700 PUSH(v);
1701 }
1702 why = WHY_NOT;
1703 JUMPTO(b->b_handler);
1704 break;
1705 }
1706 } /* unwind stack */
1707
1708 /* End the loop if we still have an error (or return) */
1709
1710 if (why != WHY_NOT)
1711 break;
1712
1713 } /* main loop */
1714
1715 /* Pop remaining stack entries */
1716
1717 while (!EMPTY()) {
1718 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001719 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001720 }
1721
Guido van Rossum96a42c81992-01-12 02:29:51 +00001722 if (why != WHY_RETURN)
1723 retval = NULL;
1724
Guido van Rossume59214e1994-08-30 08:01:59 +00001725 if (f->f_trace) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001726 if (why == WHY_RETURN) {
Guido van Rossume59214e1994-08-30 08:01:59 +00001727 if (call_trace(&f->f_trace, &f->f_trace, f,
1728 "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001729 Py_XDECREF(retval);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001730 retval = NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001731 why = WHY_EXCEPTION;
Guido van Rossum96a42c81992-01-12 02:29:51 +00001732 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001733 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001734 }
1735
Guido van Rossuma027efa1997-05-05 20:56:21 +00001736 if (tstate->sys_profilefunc && why == WHY_RETURN) {
1737 if (call_trace(&tstate->sys_profilefunc, (PyObject**)0,
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001738 f, "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001739 Py_XDECREF(retval);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001740 retval = NULL;
1741 why = WHY_EXCEPTION;
1742 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001743 }
Guido van Rossuma4240131997-01-21 21:18:36 +00001744
Guido van Rossuma027efa1997-05-05 20:56:21 +00001745 reset_exc_info(tstate);
1746
1747 --tstate->recursion_depth;
Guido van Rossum8c5df061997-01-24 04:19:24 +00001748
1749 fail: /* Jump here from prelude on failure */
Guido van Rossum96a42c81992-01-12 02:29:51 +00001750
Guido van Rossum374a9221991-04-04 10:40:29 +00001751 /* Restore previous frame and release the current one */
Guido van Rossum681d79a1995-07-18 14:51:37 +00001752
Guido van Rossuma027efa1997-05-05 20:56:21 +00001753 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +00001754 Py_DECREF(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001755
Guido van Rossum96a42c81992-01-12 02:29:51 +00001756 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00001757}
1758
Guido van Rossuma027efa1997-05-05 20:56:21 +00001759static void
1760set_exc_info(tstate, type, value, tb)
1761 PyThreadState *tstate;
1762 PyObject *type;
1763 PyObject *value;
1764 PyObject *tb;
1765{
1766 PyFrameObject *frame;
1767 frame = tstate->frame;
1768 if (frame->f_exc_type == NULL) {
1769 /* This frame didn't catch an exception before */
1770 /* Save previous exception of this thread in this frame */
1771 Py_XDECREF(frame->f_exc_type);
1772 Py_XDECREF(frame->f_exc_value);
1773 Py_XDECREF(frame->f_exc_traceback);
1774 if (tstate->exc_type == NULL) {
1775 Py_INCREF(Py_None);
1776 tstate->exc_type = Py_None;
1777 }
1778 Py_XINCREF(tstate->exc_type);
1779 Py_XINCREF(tstate->exc_value);
1780 Py_XINCREF(tstate->exc_traceback);
1781 frame->f_exc_type = tstate->exc_type;
1782 frame->f_exc_value = tstate->exc_value;
1783 frame->f_exc_traceback = tstate->exc_traceback;
1784 }
1785 /* Set new exception for this thread */
1786 Py_XINCREF(type);
1787 Py_XINCREF(value);
1788 Py_XINCREF(tb);
1789 tstate->exc_type = type;
1790 tstate->exc_value = value;
1791 tstate->exc_traceback = tb;
1792 /* For b/w compatibility */
1793 PySys_SetObject("exc_type", type);
1794 PySys_SetObject("exc_value", value);
1795 PySys_SetObject("exc_traceback", tb);
1796}
1797
1798static void
1799reset_exc_info(tstate)
1800 PyThreadState *tstate;
1801{
1802 PyFrameObject *frame;
1803 frame = tstate->frame;
1804 if (frame->f_exc_type != NULL) {
1805 /* This frame caught an exception */
1806 Py_XDECREF(tstate->exc_type);
1807 Py_XDECREF(tstate->exc_value);
1808 Py_XDECREF(tstate->exc_traceback);
1809 Py_XINCREF(frame->f_exc_type);
1810 Py_XINCREF(frame->f_exc_value);
1811 Py_XINCREF(frame->f_exc_traceback);
1812 tstate->exc_type = frame->f_exc_type;
1813 tstate->exc_value = frame->f_exc_value;
1814 tstate->exc_traceback = frame->f_exc_traceback;
1815 /* For b/w compatibility */
1816 PySys_SetObject("exc_type", frame->f_exc_type);
1817 PySys_SetObject("exc_value", frame->f_exc_value);
1818 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
1819 }
1820 Py_XDECREF(frame->f_exc_type);
1821 Py_XDECREF(frame->f_exc_value);
1822 Py_XDECREF(frame->f_exc_traceback);
1823 frame->f_exc_type = NULL;
1824 frame->f_exc_value = NULL;
1825 frame->f_exc_traceback = NULL;
1826}
1827
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001828/* Logic for the raise statement (too complicated for inlining).
1829 This *consumes* a reference count to each of its arguments. */
Guido van Rossum1aa14831997-01-21 05:34:20 +00001830static enum why_code
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001831do_raise(type, value, tb)
Guido van Rossumb209a111997-04-29 18:18:01 +00001832 PyObject *type, *value, *tb;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001833{
1834 /* We support the following forms of raise:
1835 raise <class>, <classinstance>
1836 raise <class>, <argument tuple>
1837 raise <class>, None
1838 raise <class>, <argument>
1839 raise <classinstance>, None
1840 raise <string>, <object>
1841 raise <string>, None
1842
1843 An omitted second argument is the same as None.
1844
1845 In addition, raise <tuple>, <anything> is the same as
1846 raising the tuple's first item (and it better have one!);
1847 this rule is applied recursively.
1848
1849 Finally, an optional third argument can be supplied, which
1850 gives the traceback to be substituted (useful when
1851 re-raising an exception after examining it). */
1852
1853 /* First, check the traceback argument, replacing None with
1854 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00001855 if (tb == Py_None) {
1856 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001857 tb = NULL;
1858 }
1859 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001860 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001861 "raise 3rd arg must be traceback or None");
1862 goto raise_error;
1863 }
1864
1865 /* Next, replace a missing value with None */
1866 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001867 value = Py_None;
1868 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001869 }
1870
1871 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00001872 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
1873 PyObject *tmp = type;
1874 type = PyTuple_GET_ITEM(type, 0);
1875 Py_INCREF(type);
1876 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001877 }
1878
1879 /* Now switch on the exception's type */
Guido van Rossumb209a111997-04-29 18:18:01 +00001880 if (PyString_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001881 ;
1882 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001883 else if (PyClass_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001884 /* Raising a class. If the value is an instance, it
1885 better be an instance of the class. If it is not,
1886 it will be used to create an instance. */
Guido van Rossumb209a111997-04-29 18:18:01 +00001887 if (PyInstance_Check(value)) {
1888 PyObject *inclass = (PyObject*)
1889 (((PyInstanceObject*)value)->in_class);
1890 if (!PyClass_IsSubclass(inclass, type)) {
1891 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001892 "raise <class>, <instance> requires that <instance> is a member of <class>");
1893 goto raise_error;
1894 }
1895 }
1896 else {
1897 /* Go instantiate the class */
Guido van Rossumb209a111997-04-29 18:18:01 +00001898 PyObject *args, *res;
1899 if (value == Py_None)
1900 args = Py_BuildValue("()");
1901 else if (PyTuple_Check(value)) {
1902 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001903 args = value;
1904 }
1905 else
Guido van Rossumb209a111997-04-29 18:18:01 +00001906 args = Py_BuildValue("(O)", value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001907 if (args == NULL)
1908 goto raise_error;
Guido van Rossumb209a111997-04-29 18:18:01 +00001909 res = PyEval_CallObject(type, args);
1910 Py_DECREF(args);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001911 if (res == NULL)
1912 goto raise_error;
Guido van Rossumb209a111997-04-29 18:18:01 +00001913 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001914 value = res;
1915 }
1916 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001917 else if (PyInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001918 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00001919 if (value != Py_None) {
1920 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001921 "instance exception may not have a separate value");
1922 goto raise_error;
1923 }
1924 else {
1925 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00001926 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001927 value = type;
Guido van Rossumb209a111997-04-29 18:18:01 +00001928 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
1929 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001930 }
1931 }
1932 else {
1933 /* Not something you can raise. You get an exception
1934 anyway, just not what you specified :-) */
Guido van Rossumb209a111997-04-29 18:18:01 +00001935 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001936 "exceptions must be strings, classes, or instances");
1937 goto raise_error;
1938 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001939 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001940 if (tb == NULL)
1941 return WHY_EXCEPTION;
1942 else
1943 return WHY_RERAISE;
1944 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00001945 Py_XDECREF(value);
1946 Py_XDECREF(type);
1947 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001948 return WHY_EXCEPTION;
1949}
1950
Guido van Rossum96a42c81992-01-12 02:29:51 +00001951#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00001952static int
1953prtrace(v, str)
Guido van Rossumb209a111997-04-29 18:18:01 +00001954 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00001955 char *str;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00001956{
Guido van Rossum3f5da241990-12-20 15:06:42 +00001957 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00001958 if (PyObject_Print(v, stdout, 0) != 0)
1959 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00001960 printf("\n");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00001961}
Guido van Rossum3f5da241990-12-20 15:06:42 +00001962#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00001963
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001964static void
1965call_exc_trace(p_trace, p_newtrace, f)
Guido van Rossumb209a111997-04-29 18:18:01 +00001966 PyObject **p_trace, **p_newtrace;
1967 PyFrameObject *f;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001968{
Guido van Rossumb209a111997-04-29 18:18:01 +00001969 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001970 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00001971 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00001972 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001973 value = Py_None;
1974 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00001975 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001976 arg = Py_BuildValue("(OOO)", type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001977 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001978 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001979 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001980 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001981 err = call_trace(p_trace, p_newtrace, f, "exception", arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001982 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001983 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00001984 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001985 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001986 Py_XDECREF(type);
1987 Py_XDECREF(value);
1988 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001989 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001990}
1991
1992static int
1993call_trace(p_trace, p_newtrace, f, msg, arg)
Guido van Rossumb209a111997-04-29 18:18:01 +00001994 PyObject **p_trace; /* in/out; may not be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001995 may not point to NULL variable initially */
Guido van Rossumb209a111997-04-29 18:18:01 +00001996 PyObject **p_newtrace; /* in/out; may be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001997 may point to NULL variable;
1998 may be same variable as p_newtrace */
Guido van Rossumb209a111997-04-29 18:18:01 +00001999 PyFrameObject *f;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002000 char *msg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002001 PyObject *arg;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002002{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002003 PyThreadState *tstate = f->f_tstate;
Guido van Rossumb209a111997-04-29 18:18:01 +00002004 PyObject *args, *what;
2005 PyObject *res = NULL;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002006
Guido van Rossuma027efa1997-05-05 20:56:21 +00002007 if (tstate->tracing) {
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002008 /* Don't do recursive traces */
2009 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002010 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002011 *p_newtrace = NULL;
2012 }
2013 return 0;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002014 }
2015
Guido van Rossumb209a111997-04-29 18:18:01 +00002016 args = PyTuple_New(3);
Guido van Rossumf10570b1995-07-07 22:53:21 +00002017 if (args == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002018 goto Py_Cleanup;
2019 what = PyString_FromString(msg);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002020 if (what == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002021 goto Py_Cleanup;
2022 Py_INCREF(f);
2023 PyTuple_SET_ITEM(args, 0, (PyObject *)f);
2024 PyTuple_SET_ITEM(args, 1, what);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002025 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002026 arg = Py_None;
2027 Py_INCREF(arg);
2028 PyTuple_SET_ITEM(args, 2, arg);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002029 tstate->tracing++;
Guido van Rossumb209a111997-04-29 18:18:01 +00002030 PyFrame_FastToLocals(f);
2031 res = PyEval_CallObject(*p_trace, args); /* May clear *p_trace! */
2032 PyFrame_LocalsToFast(f, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002033 tstate->tracing--;
Guido van Rossumb209a111997-04-29 18:18:01 +00002034 Py_Cleanup:
2035 Py_XDECREF(args);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002036 if (res == NULL) {
2037 /* The trace proc raised an exception */
Guido van Rossumb209a111997-04-29 18:18:01 +00002038 PyTraceBack_Here(f);
2039 Py_XDECREF(*p_trace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002040 *p_trace = NULL;
2041 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002042 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002043 *p_newtrace = NULL;
2044 }
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002045 return -1;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002046 }
2047 else {
2048 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002049 Py_XDECREF(*p_newtrace);
2050 if (res == Py_None)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002051 *p_newtrace = NULL;
2052 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002053 Py_INCREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002054 *p_newtrace = res;
2055 }
2056 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002057 Py_DECREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002058 return 0;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002059 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002060}
2061
Guido van Rossumb209a111997-04-29 18:18:01 +00002062PyObject *
2063PyEval_GetBuiltins()
Guido van Rossum6135a871995-01-09 17:53:26 +00002064{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002065 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002066 if (current_frame == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002067 return PyBuiltin_GetModule();
Guido van Rossum6135a871995-01-09 17:53:26 +00002068 else
2069 return current_frame->f_builtins;
2070}
2071
Guido van Rossumb209a111997-04-29 18:18:01 +00002072PyObject *
2073PyEval_GetLocals()
Guido van Rossum5b722181993-03-30 17:46:03 +00002074{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002075 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum5b722181993-03-30 17:46:03 +00002076 if (current_frame == NULL)
2077 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002078 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00002079 return current_frame->f_locals;
2080}
2081
Guido van Rossumb209a111997-04-29 18:18:01 +00002082PyObject *
2083PyEval_GetGlobals()
Guido van Rossum3f5da241990-12-20 15:06:42 +00002084{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002085 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002086 if (current_frame == NULL)
2087 return NULL;
2088 else
2089 return current_frame->f_globals;
2090}
2091
Guido van Rossumb209a111997-04-29 18:18:01 +00002092PyObject *
2093PyEval_GetFrame()
Guido van Rossume59214e1994-08-30 08:01:59 +00002094{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002095 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossumb209a111997-04-29 18:18:01 +00002096 return (PyObject *)current_frame;
Guido van Rossume59214e1994-08-30 08:01:59 +00002097}
2098
Guido van Rossum6135a871995-01-09 17:53:26 +00002099int
Guido van Rossumb209a111997-04-29 18:18:01 +00002100PyEval_GetRestricted()
Guido van Rossum6135a871995-01-09 17:53:26 +00002101{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002102 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002103 return current_frame == NULL ? 0 : current_frame->f_restricted;
2104}
2105
Guido van Rossum3f5da241990-12-20 15:06:42 +00002106void
Guido van Rossumb209a111997-04-29 18:18:01 +00002107Py_FlushLine()
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002108{
Guido van Rossumb209a111997-04-29 18:18:01 +00002109 PyObject *f = PySys_GetObject("stdout");
2110 if (PyFile_SoftSpace(f, 0))
2111 PyFile_WriteString("\n", f);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002112}
2113
Guido van Rossum3f5da241990-12-20 15:06:42 +00002114
Guido van Rossuma027efa1997-05-05 20:56:21 +00002115/* XXX Many of the following operator implementations could be
2116 replaced by calls into the 'abstract' module. */
2117
Guido van Rossum06186511995-01-07 12:40:10 +00002118#define BINOP(opname, ropname, thisfunc) \
Guido van Rossumb209a111997-04-29 18:18:01 +00002119 if (!PyInstance_Check(v) && !PyInstance_Check(w)) \
Guido van Rossum06186511995-01-07 12:40:10 +00002120 ; \
2121 else \
Guido van Rossumb209a111997-04-29 18:18:01 +00002122 return PyInstance_DoBinOp(v, w, opname, ropname, thisfunc)
Guido van Rossum180d7b41994-09-29 09:45:57 +00002123
2124
Guido van Rossumb209a111997-04-29 18:18:01 +00002125static PyObject *
Guido van Rossum7928cd71991-10-24 14:59:31 +00002126or(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002127 PyObject *v, *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +00002128{
Guido van Rossum06186511995-01-07 12:40:10 +00002129 BINOP("__or__", "__ror__", or);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002130 if (v->ob_type->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002131 PyObject *x = NULL;
2132 PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
2133 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum7928cd71991-10-24 14:59:31 +00002134 return NULL;
2135 if ((f = v->ob_type->tp_as_number->nb_or) != NULL)
2136 x = (*f)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002137 Py_DECREF(v);
2138 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002139 if (f != NULL)
2140 return x;
2141 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002142 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for |");
Guido van Rossum7928cd71991-10-24 14:59:31 +00002143 return NULL;
2144}
2145
Guido van Rossumb209a111997-04-29 18:18:01 +00002146static PyObject *
Guido van Rossum7928cd71991-10-24 14:59:31 +00002147xor(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002148 PyObject *v, *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +00002149{
Guido van Rossum06186511995-01-07 12:40:10 +00002150 BINOP("__xor__", "__rxor__", xor);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002151 if (v->ob_type->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002152 PyObject *x = NULL;
2153 PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
2154 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum7928cd71991-10-24 14:59:31 +00002155 return NULL;
2156 if ((f = v->ob_type->tp_as_number->nb_xor) != NULL)
2157 x = (*f)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002158 Py_DECREF(v);
2159 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002160 if (f != NULL)
2161 return x;
2162 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002163 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for ^");
Guido van Rossum7928cd71991-10-24 14:59:31 +00002164 return NULL;
2165}
2166
Guido van Rossumb209a111997-04-29 18:18:01 +00002167static PyObject *
Guido van Rossum7928cd71991-10-24 14:59:31 +00002168and(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002169 PyObject *v, *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +00002170{
Guido van Rossum06186511995-01-07 12:40:10 +00002171 BINOP("__and__", "__rand__", and);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002172 if (v->ob_type->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002173 PyObject *x = NULL;
2174 PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
2175 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum7928cd71991-10-24 14:59:31 +00002176 return NULL;
2177 if ((f = v->ob_type->tp_as_number->nb_and) != NULL)
2178 x = (*f)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002179 Py_DECREF(v);
2180 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002181 if (f != NULL)
2182 return x;
2183 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002184 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for &");
Guido van Rossum7928cd71991-10-24 14:59:31 +00002185 return NULL;
2186}
2187
Guido van Rossumb209a111997-04-29 18:18:01 +00002188static PyObject *
Guido van Rossum7928cd71991-10-24 14:59:31 +00002189lshift(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002190 PyObject *v, *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +00002191{
Guido van Rossum06186511995-01-07 12:40:10 +00002192 BINOP("__lshift__", "__rlshift__", lshift);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002193 if (v->ob_type->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002194 PyObject *x = NULL;
2195 PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
2196 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum7928cd71991-10-24 14:59:31 +00002197 return NULL;
2198 if ((f = v->ob_type->tp_as_number->nb_lshift) != NULL)
2199 x = (*f)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002200 Py_DECREF(v);
2201 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002202 if (f != NULL)
2203 return x;
2204 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002205 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for <<");
Guido van Rossum7928cd71991-10-24 14:59:31 +00002206 return NULL;
2207}
2208
Guido van Rossumb209a111997-04-29 18:18:01 +00002209static PyObject *
Guido van Rossum7928cd71991-10-24 14:59:31 +00002210rshift(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002211 PyObject *v, *w;
Guido van Rossum7928cd71991-10-24 14:59:31 +00002212{
Guido van Rossum06186511995-01-07 12:40:10 +00002213 BINOP("__rshift__", "__rrshift__", rshift);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002214 if (v->ob_type->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002215 PyObject *x = NULL;
2216 PyObject * (*f) Py_FPROTO((PyObject *, PyObject *));
2217 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum7928cd71991-10-24 14:59:31 +00002218 return NULL;
2219 if ((f = v->ob_type->tp_as_number->nb_rshift) != NULL)
2220 x = (*f)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002221 Py_DECREF(v);
2222 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +00002223 if (f != NULL)
2224 return x;
2225 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002226 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for >>");
Guido van Rossum7928cd71991-10-24 14:59:31 +00002227 return NULL;
2228}
2229
Guido van Rossumb209a111997-04-29 18:18:01 +00002230static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002231add(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002232 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002233{
Guido van Rossum06186511995-01-07 12:40:10 +00002234 BINOP("__add__", "__radd__", add);
Guido van Rossume6eefc21992-08-14 12:06:52 +00002235 if (v->ob_type->tp_as_sequence != NULL)
2236 return (*v->ob_type->tp_as_sequence->sq_concat)(v, w);
2237 else if (v->ob_type->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002238 PyObject *x;
2239 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002240 return NULL;
2241 x = (*v->ob_type->tp_as_number->nb_add)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002242 Py_DECREF(v);
2243 Py_DECREF(w);
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002244 return x;
2245 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002246 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for +");
Guido van Rossum34679b71993-01-26 13:33:44 +00002247 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002248}
2249
Guido van Rossumb209a111997-04-29 18:18:01 +00002250static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002251sub(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002252 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002253{
Guido van Rossum06186511995-01-07 12:40:10 +00002254 BINOP("__sub__", "__rsub__", sub);
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002255 if (v->ob_type->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002256 PyObject *x;
2257 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002258 return NULL;
2259 x = (*v->ob_type->tp_as_number->nb_subtract)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002260 Py_DECREF(v);
2261 Py_DECREF(w);
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002262 return x;
2263 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002264 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for -");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002265 return NULL;
2266}
2267
Guido van Rossumb209a111997-04-29 18:18:01 +00002268static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002269mul(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002270 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002271{
Guido van Rossumb209a111997-04-29 18:18:01 +00002272 PyTypeObject *tp;
Guido van Rossume6eefc21992-08-14 12:06:52 +00002273 tp = v->ob_type;
Guido van Rossum06186511995-01-07 12:40:10 +00002274 BINOP("__mul__", "__rmul__", mul);
Guido van Rossume6eefc21992-08-14 12:06:52 +00002275 if (tp->tp_as_number != NULL &&
2276 w->ob_type->tp_as_sequence != NULL &&
Guido van Rossumb209a111997-04-29 18:18:01 +00002277 !PyInstance_Check(v)) {
Guido van Rossume6eefc21992-08-14 12:06:52 +00002278 /* number*sequence -- swap v and w */
Guido van Rossumb209a111997-04-29 18:18:01 +00002279 PyObject *tmp = v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002280 v = w;
2281 w = tmp;
Guido van Rossume6eefc21992-08-14 12:06:52 +00002282 tp = v->ob_type;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002283 }
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002284 if (tp->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002285 PyObject *x;
2286 if (PyInstance_Check(v)) {
Guido van Rossume6eefc21992-08-14 12:06:52 +00002287 /* Instances of user-defined classes get their
2288 other argument uncoerced, so they may
2289 implement sequence*number as well as
2290 number*number. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002291 Py_INCREF(v);
2292 Py_INCREF(w);
Guido van Rossume6eefc21992-08-14 12:06:52 +00002293 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002294 else if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002295 return NULL;
2296 x = (*v->ob_type->tp_as_number->nb_multiply)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002297 Py_DECREF(v);
2298 Py_DECREF(w);
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002299 return x;
2300 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002301 if (tp->tp_as_sequence != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002302 if (!PyInt_Check(w)) {
2303 PyErr_SetString(PyExc_TypeError,
Guido van Rossum3f5da241990-12-20 15:06:42 +00002304 "can't multiply sequence with non-int");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002305 return NULL;
2306 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002307 return (*tp->tp_as_sequence->sq_repeat)
Guido van Rossumb209a111997-04-29 18:18:01 +00002308 (v, (int)PyInt_AsLong(w));
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002309 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002310 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for *");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002311 return NULL;
2312}
2313
Guido van Rossumb209a111997-04-29 18:18:01 +00002314static PyObject *
Guido van Rossum40d0b7e1990-12-20 23:03:11 +00002315divide(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002316 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002317{
Guido van Rossum06186511995-01-07 12:40:10 +00002318 BINOP("__div__", "__rdiv__", divide);
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002319 if (v->ob_type->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002320 PyObject *x;
2321 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002322 return NULL;
2323 x = (*v->ob_type->tp_as_number->nb_divide)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002324 Py_DECREF(v);
2325 Py_DECREF(w);
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002326 return x;
2327 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002328 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for /");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002329 return NULL;
2330}
2331
Guido van Rossumb209a111997-04-29 18:18:01 +00002332static PyObject *
Guido van Rossum06186511995-01-07 12:40:10 +00002333mod(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002334 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002335{
Guido van Rossumb209a111997-04-29 18:18:01 +00002336 if (PyString_Check(v)) {
2337 return PyString_Format(v, w);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002338 }
Guido van Rossum06186511995-01-07 12:40:10 +00002339 BINOP("__mod__", "__rmod__", mod);
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002340 if (v->ob_type->tp_as_number != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002341 PyObject *x;
2342 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002343 return NULL;
2344 x = (*v->ob_type->tp_as_number->nb_remainder)(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00002345 Py_DECREF(v);
2346 Py_DECREF(w);
Guido van Rossum89d55ca1991-07-01 18:43:13 +00002347 return x;
2348 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002349 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for %");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002350 return NULL;
2351}
2352
Guido van Rossumb209a111997-04-29 18:18:01 +00002353static PyObject *
Guido van Rossum3b4da591996-06-19 21:49:17 +00002354powerop(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002355 PyObject *v, *w;
Guido van Rossum50564e81996-01-12 01:13:16 +00002356{
Guido van Rossumb209a111997-04-29 18:18:01 +00002357 PyObject *res;
Guido van Rossum3b4da591996-06-19 21:49:17 +00002358 BINOP("__pow__", "__rpow__", powerop);
Guido van Rossum50564e81996-01-12 01:13:16 +00002359 if (v->ob_type->tp_as_number == NULL ||
2360 w->ob_type->tp_as_number == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002361 PyErr_SetString(PyExc_TypeError,
2362 "pow() requires numeric arguments");
Guido van Rossum50564e81996-01-12 01:13:16 +00002363 return NULL;
2364 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002365 if (PyNumber_Coerce(&v, &w) != 0)
Guido van Rossum50564e81996-01-12 01:13:16 +00002366 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002367 res = (*v->ob_type->tp_as_number->nb_power)(v, w, Py_None);
2368 Py_DECREF(v);
2369 Py_DECREF(w);
Guido van Rossum50564e81996-01-12 01:13:16 +00002370 return res;
2371}
2372
Guido van Rossumb209a111997-04-29 18:18:01 +00002373static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002374neg(v)
Guido van Rossumb209a111997-04-29 18:18:01 +00002375 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002376{
2377 if (v->ob_type->tp_as_number != NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002378 return (*v->ob_type->tp_as_number->nb_negative)(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00002379 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for unary -");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002380 return NULL;
2381}
2382
Guido van Rossumb209a111997-04-29 18:18:01 +00002383static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002384pos(v)
Guido van Rossumb209a111997-04-29 18:18:01 +00002385 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002386{
2387 if (v->ob_type->tp_as_number != NULL)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002388 return (*v->ob_type->tp_as_number->nb_positive)(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00002389 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for unary +");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002390 return NULL;
2391}
2392
Guido van Rossumb209a111997-04-29 18:18:01 +00002393static PyObject *
Guido van Rossum7928cd71991-10-24 14:59:31 +00002394invert(v)
Guido van Rossumb209a111997-04-29 18:18:01 +00002395 PyObject *v;
Guido van Rossum7928cd71991-10-24 14:59:31 +00002396{
Guido van Rossumb209a111997-04-29 18:18:01 +00002397 PyObject * (*f) Py_FPROTO((PyObject *));
Guido van Rossum7928cd71991-10-24 14:59:31 +00002398 if (v->ob_type->tp_as_number != NULL &&
2399 (f = v->ob_type->tp_as_number->nb_invert) != NULL)
2400 return (*f)(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00002401 PyErr_SetString(PyExc_TypeError, "bad operand type(s) for unary ~");
Guido van Rossum7928cd71991-10-24 14:59:31 +00002402 return NULL;
2403}
2404
Guido van Rossumb209a111997-04-29 18:18:01 +00002405static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002406not(v)
Guido van Rossumb209a111997-04-29 18:18:01 +00002407 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002408{
Guido van Rossumb209a111997-04-29 18:18:01 +00002409 int outcome = PyObject_IsTrue(v);
2410 PyObject *w;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002411 if (outcome < 0)
2412 return NULL;
2413 if (outcome == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00002414 w = Py_True;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002415 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002416 w = Py_False;
2417 Py_INCREF(w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002418 return w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002419}
Guido van Rossum234f9421993-06-17 12:35:49 +00002420
2421
Guido van Rossum681d79a1995-07-18 14:51:37 +00002422/* External interface to call any callable object.
2423 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002424
Guido van Rossumb209a111997-04-29 18:18:01 +00002425PyObject *
2426PyEval_CallObject(func, arg)
2427 PyObject *func;
2428 PyObject *arg;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002429{
Guido van Rossumb209a111997-04-29 18:18:01 +00002430 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002431}
Guido van Rossume59214e1994-08-30 08:01:59 +00002432
Guido van Rossumb209a111997-04-29 18:18:01 +00002433PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002434PyEval_CallObjectWithKeywords(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002435 PyObject *func;
2436 PyObject *arg;
2437 PyObject *kw;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002438{
2439 ternaryfunc call;
Guido van Rossumb209a111997-04-29 18:18:01 +00002440 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002441
2442 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002443 arg = PyTuple_New(0);
2444 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002445 PyErr_SetString(PyExc_TypeError,
2446 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002447 return NULL;
2448 }
2449 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002450 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002451
Guido van Rossumb209a111997-04-29 18:18:01 +00002452 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002453 PyErr_SetString(PyExc_TypeError,
2454 "keyword list must be a dictionary");
Guido van Rossume3e61c11995-08-04 04:14:47 +00002455 return NULL;
2456 }
2457
Guido van Rossum150b2df1996-12-05 23:17:11 +00002458 if ((call = func->ob_type->tp_call) != NULL)
Guido van Rossum681d79a1995-07-18 14:51:37 +00002459 result = (*call)(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002460 else if (PyMethod_Check(func) || PyFunction_Check(func))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002461 result = call_function(func, arg, kw);
2462 else
2463 result = call_builtin(func, arg, kw);
2464
Guido van Rossumb209a111997-04-29 18:18:01 +00002465 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002466
Guido van Rossumb209a111997-04-29 18:18:01 +00002467 if (result == NULL && !PyErr_Occurred())
2468 PyErr_SetString(PyExc_SystemError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002469 "NULL result without error in call_object");
Guido van Rossume59214e1994-08-30 08:01:59 +00002470
2471 return result;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002472}
2473
Guido van Rossumb209a111997-04-29 18:18:01 +00002474static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002475call_builtin(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002476 PyObject *func;
2477 PyObject *arg;
2478 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002479{
Guido van Rossumb209a111997-04-29 18:18:01 +00002480 if (PyCFunction_Check(func)) {
2481 PyCFunction meth = PyCFunction_GetFunction(func);
2482 PyObject *self = PyCFunction_GetSelf(func);
2483 int flags = PyCFunction_GetFlags(func);
Guido van Rossumff8b4941995-07-26 18:16:42 +00002484 if (!(flags & METH_VARARGS)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002485 int size = PyTuple_Size(arg);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002486 if (size == 1)
Guido van Rossumb209a111997-04-29 18:18:01 +00002487 arg = PyTuple_GET_ITEM(arg, 0);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002488 else if (size == 0)
2489 arg = NULL;
2490 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002491 if (flags & METH_KEYWORDS)
2492 return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002493 if (kw != NULL && PyDict_Size(kw) != 0) {
2494 PyErr_SetString(PyExc_TypeError,
Guido van Rossumff8b4941995-07-26 18:16:42 +00002495 "this function takes no keyword arguments");
2496 return NULL;
2497 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002498 return (*meth)(self, arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002499 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002500 if (PyClass_Check(func)) {
2501 return PyInstance_New(func, arg, kw);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002502 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002503 if (PyInstance_Check(func)) {
2504 PyObject *res, *call = PyObject_GetAttrString(func,"__call__");
Guido van Rossume59214e1994-08-30 08:01:59 +00002505 if (call == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002506 PyErr_Clear();
2507 PyErr_SetString(PyExc_AttributeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002508 "no __call__ method defined");
Guido van Rossume59214e1994-08-30 08:01:59 +00002509 return NULL;
2510 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002511 res = PyEval_CallObjectWithKeywords(call, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002512 Py_DECREF(call);
Guido van Rossume59214e1994-08-30 08:01:59 +00002513 return res;
2514 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002515 PyErr_SetString(PyExc_TypeError, "call of non-function");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002516 return NULL;
2517}
2518
Guido van Rossumb209a111997-04-29 18:18:01 +00002519static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002520call_function(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002521 PyObject *func;
2522 PyObject *arg;
2523 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002524{
Guido van Rossumb209a111997-04-29 18:18:01 +00002525 PyObject *class = NULL; /* == owner */
2526 PyObject *argdefs;
2527 PyObject **d, **k;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002528 int nk, nd;
Guido van Rossumb209a111997-04-29 18:18:01 +00002529 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002530
Guido van Rossumb209a111997-04-29 18:18:01 +00002531 if (kw != NULL && !PyDict_Check(kw)) {
2532 PyErr_BadInternalCall();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002533 return NULL;
2534 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002535
Guido van Rossumb209a111997-04-29 18:18:01 +00002536 if (PyMethod_Check(func)) {
2537 PyObject *self = PyMethod_Self(func);
2538 class = PyMethod_Class(func);
2539 func = PyMethod_Function(func);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002540 if (self == NULL) {
2541 /* Unbound methods must be called with an instance of
2542 the class (or a derived class) as first argument */
Guido van Rossumb209a111997-04-29 18:18:01 +00002543 if (PyTuple_Size(arg) >= 1) {
2544 self = PyTuple_GET_ITEM(arg, 0);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002545 if (self != NULL &&
Guido van Rossumb209a111997-04-29 18:18:01 +00002546 PyInstance_Check(self) &&
2547 PyClass_IsSubclass((PyObject *)
2548 (((PyInstanceObject *)self)->in_class),
Guido van Rossumb3f72581993-05-21 19:56:10 +00002549 class))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002550 /* Handy-dandy */ ;
Guido van Rossumb3f72581993-05-21 19:56:10 +00002551 else
2552 self = NULL;
2553 }
2554 if (self == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002555 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002556 "unbound method must be called with class instance 1st argument");
Guido van Rossumb3f72581993-05-21 19:56:10 +00002557 return NULL;
2558 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002559 Py_INCREF(arg);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002560 }
2561 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002562 int argcount = PyTuple_Size(arg);
2563 PyObject *newarg = PyTuple_New(argcount + 1);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002564 int i;
Guido van Rossum81daa321993-05-20 14:24:46 +00002565 if (newarg == NULL)
2566 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002567 Py_INCREF(self);
2568 PyTuple_SET_ITEM(newarg, 0, self);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002569 for (i = 0; i < argcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002570 PyObject *v = PyTuple_GET_ITEM(arg, i);
2571 Py_XINCREF(v);
2572 PyTuple_SET_ITEM(newarg, i+1, v);
Guido van Rossum81daa321993-05-20 14:24:46 +00002573 }
2574 arg = newarg;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002575 }
2576 }
2577 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002578 if (!PyFunction_Check(func)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002579 PyErr_SetString(PyExc_TypeError,
2580 "call of non-function");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002581 return NULL;
2582 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002583 Py_INCREF(arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002584 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002585
2586 argdefs = PyFunction_GetDefaults(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00002587 if (argdefs != NULL && PyTuple_Check(argdefs)) {
2588 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
2589 nd = PyTuple_Size(argdefs);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002590 }
2591 else {
2592 d = NULL;
2593 nd = 0;
2594 }
2595
2596 if (kw != NULL) {
2597 int pos, i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002598 nk = PyDict_Size(kw);
2599 k = PyMem_NEW(PyObject *, 2*nk);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002600 if (k == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002601 PyErr_NoMemory();
2602 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002603 return NULL;
Guido van Rossume59214e1994-08-30 08:01:59 +00002604 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002605 pos = i = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002606 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002607 i += 2;
2608 nk = i/2;
2609 /* XXX This is broken if the caller deletes dict items! */
2610 }
2611 else {
2612 k = NULL;
2613 nk = 0;
Guido van Rossume59214e1994-08-30 08:01:59 +00002614 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002615
Guido van Rossum681d79a1995-07-18 14:51:37 +00002616 result = eval_code2(
Guido van Rossumb209a111997-04-29 18:18:01 +00002617 (PyCodeObject *)PyFunction_GetCode(func),
2618 PyFunction_GetGlobals(func), (PyObject *)NULL,
2619 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
Guido van Rossum681d79a1995-07-18 14:51:37 +00002620 k, nk,
2621 d, nd,
2622 class);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002623
Guido van Rossumb209a111997-04-29 18:18:01 +00002624 Py_DECREF(arg);
2625 PyMem_XDEL(k);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002626
Guido van Rossum681d79a1995-07-18 14:51:37 +00002627 return result;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002628}
2629
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002630#define SLICE_ERROR_MSG \
2631 "standard sequence type does not support step size other than one"
2632
Guido van Rossumb209a111997-04-29 18:18:01 +00002633static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002634apply_subscript(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002635 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002636{
Guido van Rossumb209a111997-04-29 18:18:01 +00002637 PyTypeObject *tp = v->ob_type;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002638 if (tp->tp_as_sequence == NULL && tp->tp_as_mapping == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002639 PyErr_SetString(PyExc_TypeError, "unsubscriptable object");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002640 return NULL;
2641 }
Guido van Rossum04691fc1992-08-12 15:35:34 +00002642 if (tp->tp_as_mapping != NULL) {
2643 return (*tp->tp_as_mapping->mp_subscript)(v, w);
2644 }
2645 else {
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002646 int i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002647 if (!PyInt_Check(w)) {
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002648 if (PySlice_Check(w)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002649 PyErr_SetString(PyExc_ValueError,
2650 SLICE_ERROR_MSG);
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002651 } else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002652 PyErr_SetString(PyExc_TypeError,
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002653 "sequence subscript not int");
2654 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002655 return NULL;
2656 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002657 i = PyInt_AsLong(w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002658 if (i < 0) {
2659 int len = (*tp->tp_as_sequence->sq_length)(v);
2660 if (len < 0)
2661 return NULL;
2662 i += len;
2663 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002664 return (*tp->tp_as_sequence->sq_item)(v, i);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002665 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002666}
2667
Guido van Rossumb209a111997-04-29 18:18:01 +00002668static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002669loop_subscript(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002670 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002671{
Guido van Rossumb209a111997-04-29 18:18:01 +00002672 PySequenceMethods *sq = v->ob_type->tp_as_sequence;
Guido van Rossume59214e1994-08-30 08:01:59 +00002673 int i;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002674 if (sq == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002675 PyErr_SetString(PyExc_TypeError, "loop over non-sequence");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002676 return NULL;
2677 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002678 i = PyInt_AsLong(w);
Guido van Rossume59214e1994-08-30 08:01:59 +00002679 v = (*sq->sq_item)(v, i);
2680 if (v)
2681 return v;
Guido van Rossumb209a111997-04-29 18:18:01 +00002682 if (PyErr_Occurred() == PyExc_IndexError)
2683 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002684 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002685}
2686
2687static int
Guido van Rossuma027efa1997-05-05 20:56:21 +00002688slice_index(v, pi)
Guido van Rossumb209a111997-04-29 18:18:01 +00002689 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002690 int *pi;
2691{
2692 if (v != NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002693 long x;
Guido van Rossumb209a111997-04-29 18:18:01 +00002694 if (!PyInt_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002695 PyErr_SetString(PyExc_TypeError,
2696 "slice index must be int");
Guido van Rossum3f5da241990-12-20 15:06:42 +00002697 return -1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002698 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00002699 x = PyInt_AsLong(v);
2700 /* Truncate -- very long indices are truncated anyway */
2701 if (x > INT_MAX)
2702 x = INT_MAX;
2703 else if (x < -INT_MAX)
2704 x = 0;
2705 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002706 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002707 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002708}
2709
Guido van Rossumb209a111997-04-29 18:18:01 +00002710static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002711apply_slice(u, v, w) /* return u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +00002712 PyObject *u, *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002713{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002714 int ilow = 0, ihigh = INT_MAX;
2715 if (slice_index(v, &ilow) != 0)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002716 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002717 if (slice_index(w, &ihigh) != 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +00002718 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002719 return PySequence_GetSlice(u, ilow, ihigh);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002720}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002721
2722static int
2723assign_subscript(w, key, v) /* w[key] = v */
Guido van Rossumb209a111997-04-29 18:18:01 +00002724 PyObject *w;
2725 PyObject *key;
2726 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002727{
Guido van Rossumb209a111997-04-29 18:18:01 +00002728 PyTypeObject *tp = w->ob_type;
2729 PySequenceMethods *sq;
2730 PyMappingMethods *mp;
Guido van Rossum1d339e81995-02-17 15:04:21 +00002731 int (*func1)();
2732 int (*func2)();
Guido van Rossum04691fc1992-08-12 15:35:34 +00002733 if ((mp = tp->tp_as_mapping) != NULL &&
Guido van Rossum1d339e81995-02-17 15:04:21 +00002734 (func1 = mp->mp_ass_subscript) != NULL) {
2735 return (*func1)(w, key, v);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002736 }
2737 else if ((sq = tp->tp_as_sequence) != NULL &&
Guido van Rossum1d339e81995-02-17 15:04:21 +00002738 (func2 = sq->sq_ass_item) != NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002739 if (!PyInt_Check(key)) {
2740 PyErr_SetString(PyExc_TypeError,
Guido van Rossum98256aa1991-12-24 13:25:19 +00002741 "sequence subscript must be integer (assign or del)");
Guido van Rossum3f5da241990-12-20 15:06:42 +00002742 return -1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002743 }
Guido van Rossum98256aa1991-12-24 13:25:19 +00002744 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002745 int i = PyInt_AsLong(key);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002746 if (i < 0) {
2747 int len = (*sq->sq_length)(w);
2748 if (len < 0)
2749 return -1;
2750 i += len;
2751 }
Guido van Rossum1d339e81995-02-17 15:04:21 +00002752 return (*func2)(w, i, v);
Guido van Rossum98256aa1991-12-24 13:25:19 +00002753 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002754 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002755 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002756 PyErr_SetString(PyExc_TypeError,
Guido van Rossum3f5da241990-12-20 15:06:42 +00002757 "can't assign to this subscripted object");
2758 return -1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002759 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002760}
2761
Guido van Rossum3f5da241990-12-20 15:06:42 +00002762static int
2763assign_slice(u, v, w, x) /* u[v:w] = x */
Guido van Rossumb209a111997-04-29 18:18:01 +00002764 PyObject *u, *v, *w, *x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002765{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002766 int ilow = 0, ihigh = INT_MAX;
2767 if (slice_index(v, &ilow) != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002768 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002769 if (slice_index(w, &ihigh) != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002770 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002771 if (x == NULL)
2772 return PySequence_DelSlice(u, ilow, ihigh);
2773 else
2774 return PySequence_SetSlice(u, ilow, ihigh, x);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002775}
2776
2777static int
2778cmp_exception(err, v)
Guido van Rossumb209a111997-04-29 18:18:01 +00002779 PyObject *err, *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002780{
Guido van Rossumb209a111997-04-29 18:18:01 +00002781 if (PyTuple_Check(v)) {
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002782 int i, n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002783 n = PyTuple_Size(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002784 for (i = 0; i < n; i++) {
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00002785 /* Test recursively */
Guido van Rossumb209a111997-04-29 18:18:01 +00002786 if (cmp_exception(err, PyTuple_GET_ITEM(v, i)))
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002787 return 1;
2788 }
2789 return 0;
2790 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002791 if (PyClass_Check(v) && PyClass_Check(err))
2792 return PyClass_IsSubclass(err, v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002793 return err == v;
2794}
2795
Guido van Rossum3f5da241990-12-20 15:06:42 +00002796static int
2797cmp_member(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002798 PyObject *v, *w;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002799{
Guido van Rossume59214e1994-08-30 08:01:59 +00002800 int i, cmp;
Guido van Rossumb209a111997-04-29 18:18:01 +00002801 PyObject *x;
2802 PySequenceMethods *sq;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002803 /* Special case for char in string */
Guido van Rossumb209a111997-04-29 18:18:01 +00002804 if (PyString_Check(w)) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00002805 register char *s, *end;
2806 register char c;
Guido van Rossumb209a111997-04-29 18:18:01 +00002807 if (!PyString_Check(v) || PyString_Size(v) != 1) {
2808 PyErr_SetString(PyExc_TypeError,
Guido van Rossum3f5da241990-12-20 15:06:42 +00002809 "string member test needs char left operand");
2810 return -1;
2811 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002812 c = PyString_AsString(v)[0];
2813 s = PyString_AsString(w);
2814 end = s + PyString_Size(w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002815 while (s < end) {
2816 if (c == *s++)
2817 return 1;
2818 }
2819 return 0;
2820 }
2821 sq = w->ob_type->tp_as_sequence;
2822 if (sq == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002823 PyErr_SetString(PyExc_TypeError,
Guido van Rossum3f5da241990-12-20 15:06:42 +00002824 "'in' or 'not in' needs sequence right argument");
2825 return -1;
2826 }
Guido van Rossume59214e1994-08-30 08:01:59 +00002827 for (i = 0; ; i++) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00002828 x = (*sq->sq_item)(w, i);
Guido van Rossume59214e1994-08-30 08:01:59 +00002829 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002830 if (PyErr_Occurred() == PyExc_IndexError) {
2831 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002832 break;
2833 }
2834 return -1;
2835 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002836 cmp = PyObject_Compare(v, x);
2837 Py_XDECREF(x);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002838 if (cmp == 0)
2839 return 1;
2840 }
2841 return 0;
2842}
2843
Guido van Rossumb209a111997-04-29 18:18:01 +00002844static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002845cmp_outcome(op, v, w)
Guido van Rossum5b7313a1992-04-06 13:24:57 +00002846 int op;
Guido van Rossumb209a111997-04-29 18:18:01 +00002847 register PyObject *v;
2848 register PyObject *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002849{
2850 register int cmp;
2851 register int res = 0;
2852 switch (op) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00002853 case IS:
2854 case IS_NOT:
2855 res = (v == w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002856 if (op == (int) IS_NOT)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002857 res = !res;
2858 break;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002859 case IN:
2860 case NOT_IN:
Guido van Rossum3f5da241990-12-20 15:06:42 +00002861 res = cmp_member(v, w);
2862 if (res < 0)
2863 return NULL;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002864 if (op == (int) NOT_IN)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002865 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002866 break;
2867 case EXC_MATCH:
Guido van Rossum3f5da241990-12-20 15:06:42 +00002868 res = cmp_exception(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002869 break;
2870 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00002871 cmp = PyObject_Compare(v, w);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002872 switch (op) {
2873 case LT: res = cmp < 0; break;
2874 case LE: res = cmp <= 0; break;
2875 case EQ: res = cmp == 0; break;
2876 case NE: res = cmp != 0; break;
2877 case GT: res = cmp > 0; break;
2878 case GE: res = cmp >= 0; break;
2879 /* XXX no default? (res is initialized to 0 though) */
2880 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002881 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002882 v = res ? Py_True : Py_False;
2883 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002884 return v;
2885}
2886
Guido van Rossum3f5da241990-12-20 15:06:42 +00002887static int
2888import_from(locals, v, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002889 PyObject *locals;
2890 PyObject *v;
2891 PyObject *name;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002892{
Guido van Rossumb209a111997-04-29 18:18:01 +00002893 PyObject *w, *x;
2894 if (!PyModule_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002895 PyErr_SetString(PyExc_TypeError,
2896 "import-from requires module object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002897 return -1;
2898 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002899 w = PyModule_GetDict(v);
2900 if (PyString_AsString(name)[0] == '*') {
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002901 int pos, err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002902 PyObject *name, *value;
Guido van Rossum25831651993-05-19 14:50:45 +00002903 pos = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002904 while (PyDict_Next(w, &pos, &name, &value)) {
2905 if (!PyString_Check(name) ||
2906 PyString_AsString(name)[0] == '_')
Guido van Rossume9736fc1990-11-18 17:33:06 +00002907 continue;
Guido van Rossumb209a111997-04-29 18:18:01 +00002908 Py_INCREF(value);
2909 err = PyDict_SetItem(locals, name, value);
2910 Py_DECREF(value);
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002911 if (err != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002912 return -1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002913 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002914 return 0;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002915 }
2916 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002917 x = PyDict_GetItem(w, name);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002918 if (x == NULL) {
Guido van Rossum98256aa1991-12-24 13:25:19 +00002919 char buf[250];
Guido van Rossum16dfd291992-02-05 11:17:30 +00002920 sprintf(buf, "cannot import name %.230s",
Guido van Rossumb209a111997-04-29 18:18:01 +00002921 PyString_AsString(name));
2922 PyErr_SetString(PyExc_ImportError, buf);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002923 return -1;
2924 }
2925 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002926 return PyDict_SetItem(locals, name, x);
Guido van Rossume9736fc1990-11-18 17:33:06 +00002927 }
2928}
2929
Guido van Rossumb209a111997-04-29 18:18:01 +00002930static PyObject *
Guido van Rossum25831651993-05-19 14:50:45 +00002931build_class(methods, bases, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002932 PyObject *methods; /* dictionary */
2933 PyObject *bases; /* tuple containing classes */
2934 PyObject *name; /* string */
Guido van Rossume9736fc1990-11-18 17:33:06 +00002935{
Guido van Rossum25831651993-05-19 14:50:45 +00002936 int i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002937 if (!PyTuple_Check(bases)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002938 PyErr_SetString(PyExc_SystemError,
2939 "build_class with non-tuple bases");
Guido van Rossum25831651993-05-19 14:50:45 +00002940 return NULL;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002941 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002942 if (!PyDict_Check(methods)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002943 PyErr_SetString(PyExc_SystemError,
2944 "build_class with non-dictionary");
Guido van Rossume9736fc1990-11-18 17:33:06 +00002945 return NULL;
2946 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002947 if (!PyString_Check(name)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002948 PyErr_SetString(PyExc_SystemError,
2949 "build_class witn non-string name");
Guido van Rossum25831651993-05-19 14:50:45 +00002950 return NULL;
2951 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002952 for (i = PyTuple_Size(bases); --i >= 0; ) {
2953 PyObject *base = PyTuple_GET_ITEM(bases, i);
2954 if (!PyClass_Check(base)) {
Guido van Rossum150b2df1996-12-05 23:17:11 +00002955 /* Call the base's *type*, if it is callable.
2956 This code is a hook for Donald Beaudry's
2957 and Jim Fulton's type extensions. In
2958 unexended Python it will never be triggered
2959 since its types are not callable. */
2960 if (base->ob_type->ob_type->tp_call) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002961 PyObject *args;
2962 PyObject *class;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002963 args = Py_BuildValue("(OOO)",
2964 name, bases, methods);
2965 class = PyEval_CallObject(
2966 (PyObject *)base->ob_type, args);
Guido van Rossumb209a111997-04-29 18:18:01 +00002967 Py_DECREF(args);
Guido van Rossum150b2df1996-12-05 23:17:11 +00002968 return class;
2969 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002970 PyErr_SetString(PyExc_TypeError,
Guido van Rossum25831651993-05-19 14:50:45 +00002971 "base is not a class object");
2972 return NULL;
2973 }
2974 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002975 return PyClass_New(bases, methods, name);
Guido van Rossum25831651993-05-19 14:50:45 +00002976}
2977
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002978static int
Guido van Rossuma027efa1997-05-05 20:56:21 +00002979exec_statement(f, prog, globals, locals)
2980 PyFrameObject *f;
Guido van Rossumb209a111997-04-29 18:18:01 +00002981 PyObject *prog;
2982 PyObject *globals;
2983 PyObject *locals;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002984{
2985 char *s;
2986 int n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002987 PyObject *v;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002988 int plain = 0;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002989
Guido van Rossumb209a111997-04-29 18:18:01 +00002990 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
2991 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002992 /* Backward compatibility hack */
Guido van Rossumb209a111997-04-29 18:18:01 +00002993 globals = PyTuple_GetItem(prog, 1);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002994 if (n == 3)
Guido van Rossumb209a111997-04-29 18:18:01 +00002995 locals = PyTuple_GetItem(prog, 2);
2996 prog = PyTuple_GetItem(prog, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002997 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002998 if (globals == Py_None) {
2999 globals = PyEval_GetGlobals();
3000 if (locals == Py_None) {
3001 locals = PyEval_GetLocals();
Guido van Rossum681d79a1995-07-18 14:51:37 +00003002 plain = 1;
3003 }
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003004 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003005 else if (locals == Py_None)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003006 locals = globals;
Guido van Rossumb209a111997-04-29 18:18:01 +00003007 if (!PyString_Check(prog) &&
3008 !PyCode_Check(prog) &&
3009 !PyFile_Check(prog)) {
3010 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003011 "exec 1st arg must be string, code or file object");
3012 return -1;
3013 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003014 if (!PyDict_Check(globals) || !PyDict_Check(locals)) {
3015 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003016 "exec 2nd/3rd args must be dict or None");
3017 return -1;
3018 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003019 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00003020 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
Guido van Rossumb209a111997-04-29 18:18:01 +00003021 if (PyCode_Check(prog)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003022 if (PyEval_EvalCode((PyCodeObject *) prog,
3023 globals, locals) == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003024 return -1;
3025 return 0;
3026 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003027 if (PyFile_Check(prog)) {
3028 FILE *fp = PyFile_AsFile(prog);
3029 char *name = PyString_AsString(PyFile_Name(prog));
3030 if (PyRun_File(fp, name, file_input, globals, locals) == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003031 return -1;
3032 return 0;
3033 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003034 s = PyString_AsString(prog);
3035 if (strlen(s) != PyString_Size(prog)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00003036 PyErr_SetString(PyExc_ValueError,
3037 "embedded '\\0' in exec string");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003038 return -1;
3039 }
Guido van Rossumb209a111997-04-29 18:18:01 +00003040 v = PyRun_String(s, file_input, globals, locals);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003041 if (v == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003042 return -1;
Guido van Rossumb209a111997-04-29 18:18:01 +00003043 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00003044 if (plain)
Guido van Rossuma027efa1997-05-05 20:56:21 +00003045 PyFrame_LocalsToFast(f, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00003046 return 0;
3047}
Guido van Rossum24c13741995-02-14 09:42:43 +00003048
Guido van Rossum1aa14831997-01-21 05:34:20 +00003049/* Hack for ni.py */
Guido van Rossumb209a111997-04-29 18:18:01 +00003050static PyObject *
Guido van Rossum24c13741995-02-14 09:42:43 +00003051find_from_args(f, nexti)
Guido van Rossumb209a111997-04-29 18:18:01 +00003052 PyFrameObject *f;
Guido van Rossum24c13741995-02-14 09:42:43 +00003053 int nexti;
3054{
3055 int opcode;
3056 int oparg;
Guido van Rossumb209a111997-04-29 18:18:01 +00003057 PyObject *list, *name;
Guido van Rossum24c13741995-02-14 09:42:43 +00003058 unsigned char *next_instr;
3059
3060 next_instr = GETUSTRINGVALUE(f->f_code->co_code) + nexti;
3061 opcode = (*next_instr++);
3062 if (opcode != IMPORT_FROM) {
Guido van Rossumb209a111997-04-29 18:18:01 +00003063 Py_INCREF(Py_None);
3064 return Py_None;
Guido van Rossum24c13741995-02-14 09:42:43 +00003065 }
3066
Guido van Rossumb209a111997-04-29 18:18:01 +00003067 list = PyList_New(0);
Guido van Rossum24c13741995-02-14 09:42:43 +00003068 if (list == NULL)
3069 return NULL;
3070
3071 do {
Guido van Rossum681d79a1995-07-18 14:51:37 +00003072 oparg = (next_instr[1]<<8) + next_instr[0];
3073 next_instr += 2;
Guido van Rossum24c13741995-02-14 09:42:43 +00003074 name = Getnamev(f, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00003075 if (PyList_Append(list, name) < 0) {
3076 Py_DECREF(list);
Guido van Rossum24c13741995-02-14 09:42:43 +00003077 break;
3078 }
3079 opcode = (*next_instr++);
3080 } while (opcode == IMPORT_FROM);
3081
3082 return list;
3083}
Guido van Rossum950361c1997-01-24 13:49:28 +00003084
3085
3086#ifdef DYNAMIC_EXECUTION_PROFILE
3087
3088PyObject *
3089getarray(a)
3090 long a[256];
3091{
3092 int i;
3093 PyObject *l = PyList_New(256);
3094 if (l == NULL) return NULL;
3095 for (i = 0; i < 256; i++) {
3096 PyObject *x = PyInt_FromLong(a[i]);
3097 if (x == NULL) {
3098 Py_DECREF(l);
3099 return NULL;
3100 }
3101 PyList_SetItem(l, i, x);
3102 }
3103 for (i = 0; i < 256; i++)
3104 a[i] = 0;
3105 return l;
3106}
3107
3108PyObject *
3109_Py_GetDXProfile(self, args)
3110 PyObject *self, *args;
3111{
3112#ifndef DXPAIRS
3113 return getarray(dxp);
3114#else
3115 int i;
3116 PyObject *l = PyList_New(257);
3117 if (l == NULL) return NULL;
3118 for (i = 0; i < 257; i++) {
3119 PyObject *x = getarray(dxpairs[i]);
3120 if (x == NULL) {
3121 Py_DECREF(l);
3122 return NULL;
3123 }
3124 PyList_SetItem(l, i, x);
3125 }
3126 return l;
3127#endif
3128}
3129
3130#endif