blob: 3225685c89efb3ac45cd77a54a1ef20334556b40 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00002Copyright (c) 2000, BeOpen.com.
3Copyright (c) 1995-2000, Corporation for National Research Initiatives.
4Copyright (c) 1990-1995, Stichting Mathematisch Centrum.
5All rights reserved.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00006
Guido van Rossumfd71b9e2000-06-30 23:50:40 +00007See the file "Misc/COPYRIGHT" for information on usage and
8redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009******************************************************************/
10
Guido van Rossum3f5da241990-12-20 15:06:42 +000011/* Execute compiled code */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000012
Guido van Rossum681d79a1995-07-18 14:51:37 +000013/* XXX TO DO:
14 XXX how to pass arguments to call_trace?
Guido van Rossum681d79a1995-07-18 14:51:37 +000015 XXX speed up searching for keywords by using a dictionary
Guido van Rossum681d79a1995-07-18 14:51:37 +000016 XXX document it!
17 */
18
Guido van Rossumb209a111997-04-29 18:18:01 +000019#include "Python.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000020
Guido van Rossum10dc2e81990-11-18 17:27:39 +000021#include "compile.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000022#include "frameobject.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000023#include "eval.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000024#include "opcode.h"
25
Jack Jansencbf630f2000-07-11 21:59:16 +000026#ifdef macintosh
27#include "macglue.h"
28#endif
29
Guido van Rossumc6004111993-11-05 10:22:19 +000030#include <ctype.h>
31
Guido van Rossuma027efa1997-05-05 20:56:21 +000032#ifdef HAVE_LIMITS_H
33#include <limits.h>
34#else
35#define INT_MAX 2147483647
36#endif
37
Guido van Rossum04691fc1992-08-12 15:35:34 +000038/* Turn this on if your compiler chokes on the big switch: */
Guido van Rossum1ae940a1995-01-02 19:04:15 +000039/* #define CASE_TOO_BIG 1 */
Guido van Rossum04691fc1992-08-12 15:35:34 +000040
Guido van Rossum408027e1996-12-30 16:17:54 +000041#ifdef Py_DEBUG
Guido van Rossum96a42c81992-01-12 02:29:51 +000042/* For debugging the interpreter: */
43#define LLTRACE 1 /* Low-level trace feature */
44#define CHECKEXC 1 /* Double-check exception checking */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000045#endif
46
Guido van Rossum5b722181993-03-30 17:46:03 +000047
Guido van Rossum374a9221991-04-04 10:40:29 +000048/* Forward declarations */
Guido van Rossum374a9221991-04-04 10:40:29 +000049
Tim Petersdbd9ba62000-07-09 03:09:57 +000050static PyObject *eval_code2(PyCodeObject *,
51 PyObject *, PyObject *,
52 PyObject **, int,
53 PyObject **, int,
54 PyObject **, int,
55 PyObject *);
Guido van Rossum0a066c01992-03-27 17:29:15 +000056#ifdef LLTRACE
Tim Petersdbd9ba62000-07-09 03:09:57 +000057static int prtrace(PyObject *, char *);
Guido van Rossum0a066c01992-03-27 17:29:15 +000058#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000059static void call_exc_trace(PyObject **, PyObject**, PyFrameObject *);
60static int call_trace(PyObject **, PyObject **,
61 PyFrameObject *, char *, PyObject *);
62static PyObject *call_builtin(PyObject *, PyObject *, PyObject *);
63static PyObject *call_function(PyObject *, PyObject *, PyObject *);
64static PyObject *loop_subscript(PyObject *, PyObject *);
65static PyObject *apply_slice(PyObject *, PyObject *, PyObject *);
66static int assign_slice(PyObject *, PyObject *,
67 PyObject *, PyObject *);
68static PyObject *cmp_outcome(int, PyObject *, PyObject *);
69static int import_from(PyObject *, PyObject *, PyObject *);
70static PyObject *build_class(PyObject *, PyObject *, PyObject *);
71static int exec_statement(PyFrameObject *,
72 PyObject *, PyObject *, PyObject *);
73static PyObject *find_from_args(PyFrameObject *, int);
74static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *);
75static void reset_exc_info(PyThreadState *);
Guido van Rossum374a9221991-04-04 10:40:29 +000076
77
Guido van Rossum950361c1997-01-24 13:49:28 +000078/* Dynamic execution profile */
79#ifdef DYNAMIC_EXECUTION_PROFILE
80#ifdef DXPAIRS
81static long dxpairs[257][256];
82#define dxp dxpairs[256]
83#else
84static long dxp[256];
85#endif
86#endif
87
88
Guido van Rossume59214e1994-08-30 08:01:59 +000089#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +000090
Guido van Rossum2571cc81999-04-07 16:07:23 +000091#ifndef DONT_HAVE_ERRNO_H
Guido van Rossum1984f1e1992-08-04 12:41:02 +000092#include <errno.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000093#endif
Guido van Rossum49b56061998-10-01 20:42:43 +000094#include "pythread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000095
Guido van Rossuma027efa1997-05-05 20:56:21 +000096extern int _PyThread_Started; /* Flag for Py_Exit */
97
Guido van Rossum65d5b571998-12-21 19:32:43 +000098static PyThread_type_lock interpreter_lock = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +000099static long main_thread = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000100
101void
Guido van Rossumb209a111997-04-29 18:18:01 +0000102PyEval_InitThreads()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000103{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000104 if (interpreter_lock)
Sjoerd Mullendered59d201993-01-06 13:36:38 +0000105 return;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000106 _PyThread_Started = 1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000107 interpreter_lock = PyThread_allocate_lock();
108 PyThread_acquire_lock(interpreter_lock, 1);
109 main_thread = PyThread_get_thread_ident();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000110}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000111
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000112void
Guido van Rossum25ce5661997-08-02 03:10:38 +0000113PyEval_AcquireLock()
114{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000115 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000116}
117
118void
119PyEval_ReleaseLock()
120{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000121 PyThread_release_lock(interpreter_lock);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000122}
123
124void
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000125PyEval_AcquireThread(tstate)
126 PyThreadState *tstate;
127{
128 if (tstate == NULL)
129 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000130 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000131 if (PyThreadState_Swap(tstate) != NULL)
132 Py_FatalError(
133 "PyEval_AcquireThread: non-NULL old thread state");
134}
135
136void
137PyEval_ReleaseThread(tstate)
138 PyThreadState *tstate;
139{
140 if (tstate == NULL)
141 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
142 if (PyThreadState_Swap(NULL) != tstate)
143 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000144 PyThread_release_lock(interpreter_lock);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000145}
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000146#endif
147
Guido van Rossumff4949e1992-08-05 19:58:53 +0000148/* Functions save_thread and restore_thread are always defined so
149 dynamically loaded modules needn't be compiled separately for use
150 with and without threads: */
151
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000152PyThreadState *
Guido van Rossumb209a111997-04-29 18:18:01 +0000153PyEval_SaveThread()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000154{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000155 PyThreadState *tstate = PyThreadState_Swap(NULL);
156 if (tstate == NULL)
157 Py_FatalError("PyEval_SaveThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000158#ifdef WITH_THREAD
Guido van Rossumb74eca91997-09-30 22:03:16 +0000159 if (interpreter_lock)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000160 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000161#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000162 return tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000163}
164
165void
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000166PyEval_RestoreThread(tstate)
167 PyThreadState *tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000168{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000169 if (tstate == NULL)
170 Py_FatalError("PyEval_RestoreThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000171#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000172 if (interpreter_lock) {
Guido van Rossumb74eca91997-09-30 22:03:16 +0000173 int err = errno;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000174 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000175 errno = err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000176 }
177#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000178 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000179}
180
181
Guido van Rossuma9672091994-09-14 13:31:22 +0000182/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
183 signal handlers or Mac I/O completion routines) can schedule calls
184 to a function to be called synchronously.
185 The synchronous function is called with one void* argument.
186 It should return 0 for success or -1 for failure -- failure should
187 be accompanied by an exception.
188
189 If registry succeeds, the registry function returns 0; if it fails
190 (e.g. due to too many pending calls) it returns -1 (without setting
191 an exception condition).
192
193 Note that because registry may occur from within signal handlers,
194 or other asynchronous events, calling malloc() is unsafe!
195
196#ifdef WITH_THREAD
197 Any thread can schedule pending calls, but only the main thread
198 will execute them.
199#endif
200
201 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
202 There are two possible race conditions:
203 (1) nested asynchronous registry calls;
204 (2) registry calls made while pending calls are being processed.
205 While (1) is very unlikely, (2) is a real possibility.
206 The current code is safe against (2), but not against (1).
207 The safety against (2) is derived from the fact that only one
208 thread (the main thread) ever takes things out of the queue.
Guido van Rossuma9672091994-09-14 13:31:22 +0000209
Guido van Rossuma027efa1997-05-05 20:56:21 +0000210 XXX Darn! With the advent of thread state, we should have an array
211 of pending calls per thread in the thread state! Later...
212*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000213
Guido van Rossuma9672091994-09-14 13:31:22 +0000214#define NPENDINGCALLS 32
215static struct {
Tim Petersdbd9ba62000-07-09 03:09:57 +0000216 int (*func)(ANY *);
Guido van Rossuma9672091994-09-14 13:31:22 +0000217 ANY *arg;
218} pendingcalls[NPENDINGCALLS];
219static volatile int pendingfirst = 0;
220static volatile int pendinglast = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000221static volatile int things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000222
223int
224Py_AddPendingCall(func, arg)
Tim Petersdbd9ba62000-07-09 03:09:57 +0000225 int (*func)(ANY *);
Guido van Rossuma9672091994-09-14 13:31:22 +0000226 ANY *arg;
227{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000228 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000229 int i, j;
230 /* XXX Begin critical section */
231 /* XXX If you want this to be safe against nested
232 XXX asynchronous calls, you'll have to work harder! */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000233 if (busy)
234 return -1;
235 busy = 1;
Guido van Rossuma9672091994-09-14 13:31:22 +0000236 i = pendinglast;
237 j = (i + 1) % NPENDINGCALLS;
238 if (j == pendingfirst)
239 return -1; /* Queue full */
240 pendingcalls[i].func = func;
241 pendingcalls[i].arg = arg;
242 pendinglast = j;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000243 things_to_do = 1; /* Signal main loop */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000244 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000245 /* XXX End critical section */
246 return 0;
247}
248
Guido van Rossum180d7b41994-09-29 09:45:57 +0000249int
250Py_MakePendingCalls()
Guido van Rossuma9672091994-09-14 13:31:22 +0000251{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000252 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000253#ifdef WITH_THREAD
Guido van Rossum65d5b571998-12-21 19:32:43 +0000254 if (main_thread && PyThread_get_thread_ident() != main_thread)
Guido van Rossuma9672091994-09-14 13:31:22 +0000255 return 0;
256#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000257 if (busy)
Guido van Rossum180d7b41994-09-29 09:45:57 +0000258 return 0;
259 busy = 1;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000260 things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000261 for (;;) {
262 int i;
Tim Petersdbd9ba62000-07-09 03:09:57 +0000263 int (*func)(ANY *);
Guido van Rossuma9672091994-09-14 13:31:22 +0000264 ANY *arg;
265 i = pendingfirst;
266 if (i == pendinglast)
267 break; /* Queue empty */
268 func = pendingcalls[i].func;
269 arg = pendingcalls[i].arg;
270 pendingfirst = (i + 1) % NPENDINGCALLS;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000271 if (func(arg) < 0) {
272 busy = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000273 things_to_do = 1; /* We're not done yet */
Guido van Rossuma9672091994-09-14 13:31:22 +0000274 return -1;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000275 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000276 }
Guido van Rossum180d7b41994-09-29 09:45:57 +0000277 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000278 return 0;
279}
280
281
Guido van Rossum374a9221991-04-04 10:40:29 +0000282/* Status code for main loop (reason for stack unwind) */
283
284enum why_code {
285 WHY_NOT, /* No error */
286 WHY_EXCEPTION, /* Exception occurred */
287 WHY_RERAISE, /* Exception re-raised by 'finally' */
288 WHY_RETURN, /* 'return' statement */
289 WHY_BREAK /* 'break' statement */
290};
291
Tim Petersdbd9ba62000-07-09 03:09:57 +0000292static enum why_code do_raise(PyObject *, PyObject *, PyObject *);
293static int unpack_sequence(PyObject *, int, PyObject **);
Guido van Rossum1aa14831997-01-21 05:34:20 +0000294
Guido van Rossum374a9221991-04-04 10:40:29 +0000295
Guido van Rossumb209a111997-04-29 18:18:01 +0000296PyObject *
297PyEval_EvalCode(co, globals, locals)
298 PyCodeObject *co;
299 PyObject *globals;
300 PyObject *locals;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000301{
302 return eval_code2(co,
303 globals, locals,
Guido van Rossumb209a111997-04-29 18:18:01 +0000304 (PyObject **)NULL, 0,
305 (PyObject **)NULL, 0,
306 (PyObject **)NULL, 0,
307 (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000308}
309
310
311/* Interpreter main loop */
312
Guido van Rossum8861b741996-07-30 16:49:37 +0000313#ifndef MAX_RECURSION_DEPTH
314#define MAX_RECURSION_DEPTH 10000
315#endif
316
Guido van Rossumb209a111997-04-29 18:18:01 +0000317static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +0000318eval_code2(co, globals, locals,
319 args, argcount, kws, kwcount, defs, defcount, owner)
Guido van Rossumb209a111997-04-29 18:18:01 +0000320 PyCodeObject *co;
321 PyObject *globals;
322 PyObject *locals;
323 PyObject **args;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000324 int argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000325 PyObject **kws; /* length: 2*kwcount */
Guido van Rossum681d79a1995-07-18 14:51:37 +0000326 int kwcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000327 PyObject **defs;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000328 int defcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000329 PyObject *owner;
Guido van Rossum374a9221991-04-04 10:40:29 +0000330{
Guido van Rossum950361c1997-01-24 13:49:28 +0000331#ifdef DXPAIRS
332 int lastopcode = 0;
333#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000334 register unsigned char *next_instr;
Guido van Rossum50cd3481998-11-17 17:02:51 +0000335 register int opcode; /* Current opcode */
336 register int oparg; /* Current opcode argument, if any */
Guido van Rossumb209a111997-04-29 18:18:01 +0000337 register PyObject **stack_pointer;
Guido van Rossum374a9221991-04-04 10:40:29 +0000338 register enum why_code why; /* Reason for block stack unwind */
339 register int err; /* Error status -- nonzero if error */
Guido van Rossumb209a111997-04-29 18:18:01 +0000340 register PyObject *x; /* Result object -- NULL if error */
341 register PyObject *v; /* Temporary objects popped off stack */
342 register PyObject *w;
343 register PyObject *u;
344 register PyObject *t;
345 register PyFrameObject *f; /* Current frame */
Guido van Rossum50cd3481998-11-17 17:02:51 +0000346 register PyObject **fastlocals;
Guido van Rossum014518f1998-11-23 21:09:51 +0000347 PyObject *retval = NULL; /* Return value */
Guido van Rossum885553e1998-12-21 18:33:30 +0000348 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossumd076c731998-10-07 19:42:25 +0000349 unsigned char *first_instr;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000350#ifdef LLTRACE
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000351 int lltrace;
Guido van Rossum374a9221991-04-04 10:40:29 +0000352#endif
Guido van Rossum408027e1996-12-30 16:17:54 +0000353#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000354 /* Make it easier to find out where we are with a debugger */
Guido van Rossumb209a111997-04-29 18:18:01 +0000355 char *filename = PyString_AsString(co->co_filename);
Guido van Rossum99bec951992-09-03 20:29:45 +0000356#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000357
358/* Code access macros */
359
360#define GETCONST(i) Getconst(f, i)
361#define GETNAME(i) Getname(f, i)
362#define GETNAMEV(i) Getnamev(f, i)
Guido van Rossumd076c731998-10-07 19:42:25 +0000363#define INSTR_OFFSET() (next_instr - first_instr)
Guido van Rossum374a9221991-04-04 10:40:29 +0000364#define NEXTOP() (*next_instr++)
365#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
Guido van Rossumd076c731998-10-07 19:42:25 +0000366#define JUMPTO(x) (next_instr = first_instr + (x))
Guido van Rossum374a9221991-04-04 10:40:29 +0000367#define JUMPBY(x) (next_instr += (x))
368
369/* Stack manipulation macros */
370
371#define STACK_LEVEL() (stack_pointer - f->f_valuestack)
372#define EMPTY() (STACK_LEVEL() == 0)
373#define TOP() (stack_pointer[-1])
374#define BASIC_PUSH(v) (*stack_pointer++ = (v))
375#define BASIC_POP() (*--stack_pointer)
376
Guido van Rossum96a42c81992-01-12 02:29:51 +0000377#ifdef LLTRACE
378#define PUSH(v) (BASIC_PUSH(v), lltrace && prtrace(TOP(), "push"))
379#define POP() (lltrace && prtrace(TOP(), "pop"), BASIC_POP())
Guido van Rossum374a9221991-04-04 10:40:29 +0000380#else
381#define PUSH(v) BASIC_PUSH(v)
382#define POP() BASIC_POP()
383#endif
384
Guido van Rossum681d79a1995-07-18 14:51:37 +0000385/* Local variable macros */
386
387#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumb209a111997-04-29 18:18:01 +0000388#define SETLOCAL(i, value) do { Py_XDECREF(GETLOCAL(i)); \
Guido van Rossum681d79a1995-07-18 14:51:37 +0000389 GETLOCAL(i) = value; } while (0)
390
Guido van Rossuma027efa1997-05-05 20:56:21 +0000391/* Start of code */
392
Guido van Rossum8861b741996-07-30 16:49:37 +0000393#ifdef USE_STACKCHECK
Guido van Rossuma027efa1997-05-05 20:56:21 +0000394 if (tstate->recursion_depth%10 == 0 && PyOS_CheckStack()) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000395 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
Guido van Rossum8861b741996-07-30 16:49:37 +0000396 return NULL;
397 }
398#endif
399
Guido van Rossum681d79a1995-07-18 14:51:37 +0000400 if (globals == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000401 PyErr_SetString(PyExc_SystemError, "eval_code2: NULL globals");
Guido van Rossum6135a871995-01-09 17:53:26 +0000402 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000403 }
404
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000405#ifdef LLTRACE
Guido van Rossumb209a111997-04-29 18:18:01 +0000406 lltrace = PyDict_GetItemString(globals, "__lltrace__") != NULL;
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000407#endif
408
Guido van Rossumb209a111997-04-29 18:18:01 +0000409 f = PyFrame_New(
Guido van Rossuma027efa1997-05-05 20:56:21 +0000410 tstate, /*back*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000411 co, /*code*/
412 globals, /*globals*/
Guido van Rossum76836021997-01-20 04:26:20 +0000413 locals); /*locals*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000414 if (f == NULL)
415 return NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000416
Guido van Rossuma027efa1997-05-05 20:56:21 +0000417 tstate->frame = f;
Guido van Rossumdeb0c5e1997-01-27 23:42:36 +0000418 fastlocals = f->f_localsplus;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000419
420 if (co->co_argcount > 0 ||
421 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
422 int i;
423 int n = argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000424 PyObject *kwdict = NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000425 if (co->co_flags & CO_VARKEYWORDS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000426 kwdict = PyDict_New();
Guido van Rossum681d79a1995-07-18 14:51:37 +0000427 if (kwdict == NULL)
428 goto fail;
Guido van Rossum8c5df061997-01-24 04:19:24 +0000429 i = co->co_argcount;
430 if (co->co_flags & CO_VARARGS)
431 i++;
432 SETLOCAL(i, kwdict);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000433 }
434 if (argcount > co->co_argcount) {
435 if (!(co->co_flags & CO_VARARGS)) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000436 PyErr_Format(PyExc_TypeError,
437 "too many arguments; expected %d, got %d",
438 co->co_argcount, argcount);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000439 goto fail;
440 }
441 n = co->co_argcount;
442 }
443 for (i = 0; i < n; i++) {
444 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000445 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000446 SETLOCAL(i, x);
447 }
448 if (co->co_flags & CO_VARARGS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000449 u = PyTuple_New(argcount - n);
Guido van Rossum8c5df061997-01-24 04:19:24 +0000450 if (u == NULL)
451 goto fail;
452 SETLOCAL(co->co_argcount, u);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000453 for (i = n; i < argcount; i++) {
454 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000455 Py_INCREF(x);
456 PyTuple_SET_ITEM(u, i-n, x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000457 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000458 }
459 for (i = 0; i < kwcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000460 PyObject *keyword = kws[2*i];
461 PyObject *value = kws[2*i + 1];
Guido van Rossum681d79a1995-07-18 14:51:37 +0000462 int j;
Guido van Rossum25da5be1999-10-26 00:12:20 +0000463 if (keyword == NULL || !PyString_Check(keyword)) {
464 PyErr_SetString(PyExc_TypeError,
465 "keywords must be strings");
466 goto fail;
467 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000468 /* XXX slow -- speed up using dictionary? */
469 for (j = 0; j < co->co_argcount; j++) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000470 PyObject *nm = PyTuple_GET_ITEM(
471 co->co_varnames, j);
Guido van Rossumb209a111997-04-29 18:18:01 +0000472 if (PyObject_Compare(keyword, nm) == 0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000473 break;
474 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000475 /* Check errors from Compare */
476 if (PyErr_Occurred())
477 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000478 if (j >= co->co_argcount) {
479 if (kwdict == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000480 PyErr_Format(PyExc_TypeError,
Guido van Rossuma027efa1997-05-05 20:56:21 +0000481 "unexpected keyword argument: %.400s",
Jeremy Hylton76901512000-03-28 23:49:17 +0000482 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000483 goto fail;
484 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000485 PyDict_SetItem(kwdict, keyword, value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000486 }
487 else {
488 if (GETLOCAL(j) != NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +0000489 PyErr_Format(PyExc_TypeError,
490 "keyword parameter redefined: %.400s",
491 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000492 goto fail;
493 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000494 Py_INCREF(value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000495 SETLOCAL(j, value);
496 }
497 }
498 if (argcount < co->co_argcount) {
499 int m = co->co_argcount - defcount;
500 for (i = argcount; i < m; i++) {
501 if (GETLOCAL(i) == NULL) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000502 PyErr_Format(PyExc_TypeError,
503 "not enough arguments; expected %d, got %d",
504 m, i);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000505 goto fail;
506 }
507 }
508 if (n > m)
509 i = n - m;
510 else
511 i = 0;
512 for (; i < defcount; i++) {
513 if (GETLOCAL(m+i) == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000514 PyObject *def = defs[i];
515 Py_INCREF(def);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000516 SETLOCAL(m+i, def);
517 }
518 }
519 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000520 }
521 else {
522 if (argcount > 0 || kwcount > 0) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000523 PyErr_SetString(PyExc_TypeError,
524 "no arguments expected");
Guido van Rossum8c5df061997-01-24 04:19:24 +0000525 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000526 }
527 }
528
Guido van Rossuma027efa1997-05-05 20:56:21 +0000529 if (tstate->sys_tracefunc != NULL) {
530 /* tstate->sys_tracefunc, if defined, is a function that
531 will be called on *every* entry to a code block.
Guido van Rossum96a42c81992-01-12 02:29:51 +0000532 Its return value, if not None, is a function that
533 will be called at the start of each executed line
534 of code. (Actually, the function must return
535 itself in order to continue tracing.)
536 The trace functions are called with three arguments:
537 a pointer to the current frame, a string indicating
538 why the function is called, and an argument which
539 depends on the situation. The global trace function
540 (sys.trace) is also called whenever an exception
541 is detected. */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000542 if (call_trace(&tstate->sys_tracefunc,
543 &f->f_trace, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000544 Py_None/*XXX how to compute arguments now?*/)) {
Guido van Rossum96a42c81992-01-12 02:29:51 +0000545 /* Trace function raised an error */
Guido van Rossum8c5df061997-01-24 04:19:24 +0000546 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000547 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000548 }
549
Guido van Rossuma027efa1997-05-05 20:56:21 +0000550 if (tstate->sys_profilefunc != NULL) {
551 /* Similar for sys_profilefunc, except it needn't return
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000552 itself and isn't called for "line" events */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000553 if (call_trace(&tstate->sys_profilefunc,
554 (PyObject**)0, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000555 Py_None/*XXX*/)) {
Guido van Rossum8c5df061997-01-24 04:19:24 +0000556 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000557 }
558 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000559
Guido van Rossuma027efa1997-05-05 20:56:21 +0000560 if (++tstate->recursion_depth > MAX_RECURSION_DEPTH) {
561 --tstate->recursion_depth;
562 PyErr_SetString(PyExc_RuntimeError,
563 "Maximum recursion depth exceeded");
564 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +0000565 Py_DECREF(f);
Guido van Rossum8861b741996-07-30 16:49:37 +0000566 return NULL;
567 }
568
Guido van Rossumd076c731998-10-07 19:42:25 +0000569 _PyCode_GETCODEPTR(co, &first_instr);
570 next_instr = first_instr;
Guido van Rossum374a9221991-04-04 10:40:29 +0000571 stack_pointer = f->f_valuestack;
572
Guido van Rossum374a9221991-04-04 10:40:29 +0000573 why = WHY_NOT;
574 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000575 x = Py_None; /* Not a reference, just anything non-NULL */
Guido van Rossum374a9221991-04-04 10:40:29 +0000576
577 for (;;) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000578 /* Do periodic things. Doing this every time through
579 the loop would add too much overhead, so we do it
580 only every Nth instruction. We also do it if
581 ``things_to_do'' is set, i.e. when an asynchronous
582 event needs attention (e.g. a signal handler or
583 async I/O handler); see Py_AddPendingCall() and
584 Py_MakePendingCalls() above. */
Guido van Rossuma9672091994-09-14 13:31:22 +0000585
Guido van Rossuma027efa1997-05-05 20:56:21 +0000586 if (things_to_do || --tstate->ticker < 0) {
Guido van Rossum25ce5661997-08-02 03:10:38 +0000587 tstate->ticker = tstate->interp->checkinterval;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000588 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000589 if (Py_MakePendingCalls() < 0) {
590 why = WHY_EXCEPTION;
591 goto on_error;
592 }
593 }
Guido van Rossumdf0d00e1997-05-20 15:57:49 +0000594#if !defined(HAVE_SIGNAL_H) || defined(macintosh)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000595 /* If we have true signals, the signal handler
596 will call Py_AddPendingCall() so we don't
597 have to call sigcheck(). On the Mac and
598 DOS, alas, we have to call it. */
Guido van Rossumb209a111997-04-29 18:18:01 +0000599 if (PyErr_CheckSignals()) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000600 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +0000601 goto on_error;
602 }
Guido van Rossum70d44781997-01-21 06:15:24 +0000603#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000604
Guido van Rossume59214e1994-08-30 08:01:59 +0000605#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000606 if (interpreter_lock) {
607 /* Give another thread a chance */
608
Guido van Rossum25ce5661997-08-02 03:10:38 +0000609 if (PyThreadState_Swap(NULL) != tstate)
610 Py_FatalError("ceval: tstate mix-up");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000611 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000612
613 /* Other threads may run now */
614
Guido van Rossum65d5b571998-12-21 19:32:43 +0000615 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000616 if (PyThreadState_Swap(tstate) != NULL)
617 Py_FatalError("ceval: orphan tstate");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000618 }
619#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000620 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000621
Guido van Rossum374a9221991-04-04 10:40:29 +0000622 /* Extract opcode and argument */
Guido van Rossum99bec951992-09-03 20:29:45 +0000623
Guido van Rossum408027e1996-12-30 16:17:54 +0000624#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum99bec951992-09-03 20:29:45 +0000625 f->f_lasti = INSTR_OFFSET();
626#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000627
628 opcode = NEXTOP();
629 if (HAS_ARG(opcode))
630 oparg = NEXTARG();
Guido van Rossum950361c1997-01-24 13:49:28 +0000631#ifdef DYNAMIC_EXECUTION_PROFILE
632#ifdef DXPAIRS
633 dxpairs[lastopcode][opcode]++;
634 lastopcode = opcode;
635#endif
636 dxp[opcode]++;
637#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000638
Guido van Rossum96a42c81992-01-12 02:29:51 +0000639#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000640 /* Instruction tracing */
641
Guido van Rossum96a42c81992-01-12 02:29:51 +0000642 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000643 if (HAS_ARG(opcode)) {
644 printf("%d: %d, %d\n",
645 (int) (INSTR_OFFSET() - 3),
646 opcode, oparg);
647 }
648 else {
649 printf("%d: %d\n",
650 (int) (INSTR_OFFSET() - 1), opcode);
651 }
652 }
653#endif
654
655 /* Main switch on opcode */
656
657 switch (opcode) {
658
659 /* BEWARE!
660 It is essential that any operation that fails sets either
661 x to NULL, err to nonzero, or why to anything but WHY_NOT,
662 and that no operation that succeeds does this! */
663
664 /* case STOP_CODE: this is an error! */
665
666 case POP_TOP:
667 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000668 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000669 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000670
671 case ROT_TWO:
672 v = POP();
673 w = POP();
674 PUSH(v);
675 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000676 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000677
678 case ROT_THREE:
679 v = POP();
680 w = POP();
681 x = POP();
682 PUSH(v);
683 PUSH(x);
684 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000685 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000686
687 case DUP_TOP:
688 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000689 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000690 PUSH(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000691 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000692
693 case UNARY_POSITIVE:
694 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000695 x = PyNumber_Positive(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000696 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000697 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000698 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000699 break;
700
701 case UNARY_NEGATIVE:
702 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000703 x = PyNumber_Negative(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000704 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000705 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000706 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000707 break;
708
709 case UNARY_NOT:
710 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000711 err = PyObject_IsTrue(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000712 Py_DECREF(v);
Guido van Rossumfc490731997-05-06 15:06:49 +0000713 if (err == 0) {
714 Py_INCREF(Py_True);
715 PUSH(Py_True);
716 continue;
717 }
718 else if (err > 0) {
719 Py_INCREF(Py_False);
720 PUSH(Py_False);
721 err = 0;
722 continue;
723 }
Guido van Rossum374a9221991-04-04 10:40:29 +0000724 break;
725
726 case UNARY_CONVERT:
727 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000728 x = PyObject_Repr(v);
729 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000730 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000731 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000732 break;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000733
734 case UNARY_INVERT:
735 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000736 x = PyNumber_Invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000737 Py_DECREF(v);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000738 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000739 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000740 break;
Guido van Rossum374a9221991-04-04 10:40:29 +0000741
Guido van Rossum50564e81996-01-12 01:13:16 +0000742 case BINARY_POWER:
743 w = POP();
744 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000745 x = PyNumber_Power(v, w, Py_None);
Guido van Rossumb209a111997-04-29 18:18:01 +0000746 Py_DECREF(v);
747 Py_DECREF(w);
Guido van Rossum50564e81996-01-12 01:13:16 +0000748 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000749 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +0000750 break;
751
Guido van Rossum374a9221991-04-04 10:40:29 +0000752 case BINARY_MULTIPLY:
753 w = POP();
754 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000755 x = PyNumber_Multiply(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000756 Py_DECREF(v);
757 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000758 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000759 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000760 break;
761
762 case BINARY_DIVIDE:
763 w = POP();
764 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000765 x = PyNumber_Divide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000766 Py_DECREF(v);
767 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000768 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000769 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000770 break;
771
772 case BINARY_MODULO:
773 w = POP();
774 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000775 x = PyNumber_Remainder(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000776 Py_DECREF(v);
777 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000778 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000779 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000780 break;
781
782 case BINARY_ADD:
783 w = POP();
784 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000785 if (PyInt_Check(v) && PyInt_Check(w)) {
786 /* INLINE: int + int */
787 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000788 a = PyInt_AS_LONG(v);
789 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000790 i = a + b;
791 if ((i^a) < 0 && (i^b) < 0) {
792 PyErr_SetString(PyExc_OverflowError,
793 "integer addition");
794 x = NULL;
795 }
796 else
797 x = PyInt_FromLong(i);
798 }
799 else
800 x = PyNumber_Add(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000801 Py_DECREF(v);
802 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000803 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000804 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000805 break;
806
807 case BINARY_SUBTRACT:
808 w = POP();
809 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000810 if (PyInt_Check(v) && PyInt_Check(w)) {
811 /* INLINE: int - int */
812 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000813 a = PyInt_AS_LONG(v);
814 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000815 i = a - b;
816 if ((i^a) < 0 && (i^~b) < 0) {
817 PyErr_SetString(PyExc_OverflowError,
818 "integer subtraction");
819 x = NULL;
820 }
821 else
822 x = PyInt_FromLong(i);
823 }
824 else
825 x = PyNumber_Subtract(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000826 Py_DECREF(v);
827 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000828 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000829 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000830 break;
831
832 case BINARY_SUBSCR:
833 w = POP();
834 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000835 if (PyList_Check(v) && PyInt_Check(w)) {
836 /* INLINE: list[int] */
837 long i = PyInt_AsLong(w);
838 if (i < 0)
Guido van Rossumfa00e951998-07-08 15:02:37 +0000839 i += PyList_GET_SIZE(v);
Guido van Rossumc12da691997-07-17 23:12:42 +0000840 if (i < 0 ||
Guido van Rossumfa00e951998-07-08 15:02:37 +0000841 i >= PyList_GET_SIZE(v)) {
Guido van Rossumc12da691997-07-17 23:12:42 +0000842 PyErr_SetString(PyExc_IndexError,
843 "list index out of range");
844 x = NULL;
845 }
846 else {
Guido van Rossumfa00e951998-07-08 15:02:37 +0000847 x = PyList_GET_ITEM(v, i);
Guido van Rossumc12da691997-07-17 23:12:42 +0000848 Py_INCREF(x);
849 }
850 }
851 else
852 x = PyObject_GetItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000853 Py_DECREF(v);
854 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000855 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000856 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000857 break;
858
Guido van Rossum7928cd71991-10-24 14:59:31 +0000859 case BINARY_LSHIFT:
860 w = POP();
861 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000862 x = PyNumber_Lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000863 Py_DECREF(v);
864 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000865 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000866 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000867 break;
868
869 case BINARY_RSHIFT:
870 w = POP();
871 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000872 x = PyNumber_Rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000873 Py_DECREF(v);
874 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000875 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000876 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000877 break;
878
879 case BINARY_AND:
880 w = POP();
881 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000882 x = PyNumber_And(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000883 Py_DECREF(v);
884 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000885 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000886 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000887 break;
888
889 case BINARY_XOR:
890 w = POP();
891 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000892 x = PyNumber_Xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000893 Py_DECREF(v);
894 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000895 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000896 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000897 break;
898
899 case BINARY_OR:
900 w = POP();
901 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000902 x = PyNumber_Or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000903 Py_DECREF(v);
904 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000905 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000906 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000907 break;
908
Guido van Rossum374a9221991-04-04 10:40:29 +0000909 case SLICE+0:
910 case SLICE+1:
911 case SLICE+2:
912 case SLICE+3:
913 if ((opcode-SLICE) & 2)
914 w = POP();
915 else
916 w = NULL;
917 if ((opcode-SLICE) & 1)
918 v = POP();
919 else
920 v = NULL;
921 u = POP();
922 x = apply_slice(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000923 Py_DECREF(u);
924 Py_XDECREF(v);
925 Py_XDECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000926 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000927 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000928 break;
929
930 case STORE_SLICE+0:
931 case STORE_SLICE+1:
932 case STORE_SLICE+2:
933 case STORE_SLICE+3:
934 if ((opcode-STORE_SLICE) & 2)
935 w = POP();
936 else
937 w = NULL;
938 if ((opcode-STORE_SLICE) & 1)
939 v = POP();
940 else
941 v = NULL;
942 u = POP();
943 t = POP();
944 err = assign_slice(u, v, w, t); /* u[v:w] = t */
Guido van Rossumb209a111997-04-29 18:18:01 +0000945 Py_DECREF(t);
946 Py_DECREF(u);
947 Py_XDECREF(v);
948 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000949 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000950 break;
951
952 case DELETE_SLICE+0:
953 case DELETE_SLICE+1:
954 case DELETE_SLICE+2:
955 case DELETE_SLICE+3:
956 if ((opcode-DELETE_SLICE) & 2)
957 w = POP();
958 else
959 w = NULL;
960 if ((opcode-DELETE_SLICE) & 1)
961 v = POP();
962 else
963 v = NULL;
964 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000965 err = assign_slice(u, v, w, (PyObject *)NULL);
Guido van Rossum374a9221991-04-04 10:40:29 +0000966 /* del u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +0000967 Py_DECREF(u);
968 Py_XDECREF(v);
969 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000970 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000971 break;
972
973 case STORE_SUBSCR:
974 w = POP();
975 v = POP();
976 u = POP();
977 /* v[w] = u */
Guido van Rossumfc490731997-05-06 15:06:49 +0000978 err = PyObject_SetItem(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +0000979 Py_DECREF(u);
980 Py_DECREF(v);
981 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000982 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000983 break;
984
985 case DELETE_SUBSCR:
986 w = POP();
987 v = POP();
988 /* del v[w] */
Guido van Rossumfc490731997-05-06 15:06:49 +0000989 err = PyObject_DelItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000990 Py_DECREF(v);
991 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000992 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000993 break;
994
995 case PRINT_EXPR:
996 v = POP();
Guido van Rossumaa06b0e1997-12-26 22:15:57 +0000997 /* Print value except if None */
998 /* After printing, also assign to '_' */
999 /* Before, set '_' to None to avoid recursion */
Guido van Rossumb209a111997-04-29 18:18:01 +00001000 if (v != Py_None &&
Guido van Rossuma027efa1997-05-05 20:56:21 +00001001 (err = PyDict_SetItemString(
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001002 f->f_builtins, "_", Py_None)) == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +00001003 err = Py_FlushLine();
Guido van Rossumc12da691997-07-17 23:12:42 +00001004 if (err == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +00001005 x = PySys_GetObject("stdout");
Guido van Rossum8f183201997-12-31 05:53:15 +00001006 if (x == NULL) {
1007 PyErr_SetString(
1008 PyExc_RuntimeError,
1009 "lost sys.stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00001010 err = -1;
Guido van Rossum8f183201997-12-31 05:53:15 +00001011 }
Guido van Rossumbe270261997-05-22 22:26:18 +00001012 }
1013 if (err == 0)
1014 err = PyFile_WriteObject(v, x, 0);
1015 if (err == 0) {
1016 PyFile_SoftSpace(x, 1);
1017 err = Py_FlushLine();
1018 }
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001019 if (err == 0) {
1020 err = PyDict_SetItemString(
1021 f->f_builtins, "_", v);
1022 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001023 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001024 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001025 break;
1026
1027 case PRINT_ITEM:
1028 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001029 w = PySys_GetObject("stdout");
Guido van Rossum8f183201997-12-31 05:53:15 +00001030 if (w == NULL) {
1031 PyErr_SetString(PyExc_RuntimeError,
1032 "lost sys.stdout");
1033 err = -1;
1034 }
1035 else if (PyFile_SoftSpace(w, 1))
Guido van Rossumbe270261997-05-22 22:26:18 +00001036 err = PyFile_WriteString(" ", w);
1037 if (err == 0)
1038 err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
Guido van Rossumb209a111997-04-29 18:18:01 +00001039 if (err == 0 && PyString_Check(v)) {
Guido van Rossumc6004111993-11-05 10:22:19 +00001040 /* XXX move into writeobject() ? */
Guido van Rossumb209a111997-04-29 18:18:01 +00001041 char *s = PyString_AsString(v);
1042 int len = PyString_Size(v);
Guido van Rossum7f7f2741995-02-10 17:01:56 +00001043 if (len > 0 &&
1044 isspace(Py_CHARMASK(s[len-1])) &&
Guido van Rossumc6004111993-11-05 10:22:19 +00001045 s[len-1] != ' ')
Guido van Rossumb209a111997-04-29 18:18:01 +00001046 PyFile_SoftSpace(w, 0);
Guido van Rossum374a9221991-04-04 10:40:29 +00001047 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001048 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001049 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001050 break;
1051
1052 case PRINT_NEWLINE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001053 x = PySys_GetObject("stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001054 if (x == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00001055 PyErr_SetString(PyExc_RuntimeError,
1056 "lost sys.stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001057 else {
Guido van Rossumbe270261997-05-22 22:26:18 +00001058 err = PyFile_WriteString("\n", x);
1059 if (err == 0)
1060 PyFile_SoftSpace(x, 0);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001061 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001062 break;
1063
1064 case BREAK_LOOP:
1065 why = WHY_BREAK;
1066 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001067
Guido van Rossumf10570b1995-07-07 22:53:21 +00001068 case RAISE_VARARGS:
1069 u = v = w = NULL;
1070 switch (oparg) {
1071 case 3:
1072 u = POP(); /* traceback */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001073 /* Fallthrough */
1074 case 2:
1075 v = POP(); /* value */
1076 /* Fallthrough */
1077 case 1:
1078 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001079 case 0: /* Fallthrough */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001080 why = do_raise(w, v, u);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001081 break;
1082 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001083 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001084 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001085 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001086 break;
1087 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001088 break;
1089
1090 case LOAD_LOCALS:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001091 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001092 PyErr_SetString(PyExc_SystemError,
1093 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001094 break;
1095 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001096 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001097 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001098 break;
1099
1100 case RETURN_VALUE:
1101 retval = POP();
1102 why = WHY_RETURN;
1103 break;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001104
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001105 case EXEC_STMT:
1106 w = POP();
1107 v = POP();
1108 u = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001109 err = exec_statement(f, u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001110 Py_DECREF(u);
1111 Py_DECREF(v);
1112 Py_DECREF(w);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001113 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001114
Guido van Rossum374a9221991-04-04 10:40:29 +00001115 case POP_BLOCK:
1116 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001117 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001118 while (STACK_LEVEL() > b->b_level) {
1119 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001120 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001121 }
1122 }
1123 break;
1124
1125 case END_FINALLY:
1126 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001127 if (PyInt_Check(v)) {
1128 why = (enum why_code) PyInt_AsLong(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001129 if (why == WHY_RETURN)
1130 retval = POP();
1131 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001132 else if (PyString_Check(v) || PyClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001133 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001134 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001135 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001136 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001137 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001138 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001139 else if (v != Py_None) {
1140 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001141 "'finally' pops bad exception");
1142 why = WHY_EXCEPTION;
1143 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001144 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001145 break;
1146
1147 case BUILD_CLASS:
Guido van Rossum25831651993-05-19 14:50:45 +00001148 u = POP();
Guido van Rossum374a9221991-04-04 10:40:29 +00001149 v = POP();
Guido van Rossum25831651993-05-19 14:50:45 +00001150 w = POP();
1151 x = build_class(u, v, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001152 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001153 Py_DECREF(u);
1154 Py_DECREF(v);
1155 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001156 break;
1157
1158 case STORE_NAME:
1159 w = GETNAMEV(oparg);
1160 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001161 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001162 PyErr_SetString(PyExc_SystemError,
1163 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001164 break;
1165 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001166 err = PyDict_SetItem(x, w, v);
1167 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001168 break;
1169
1170 case DELETE_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001171 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001172 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001173 PyErr_SetString(PyExc_SystemError,
1174 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001175 break;
1176 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001177 if ((err = PyDict_DelItem(x, w)) != 0)
1178 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001179 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001180
1181#ifdef CASE_TOO_BIG
1182 default: switch (opcode) {
1183#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001184
1185 case UNPACK_TUPLE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001186 case UNPACK_LIST:
1187 v = POP();
Barry Warsawe42b18f1997-08-25 22:13:04 +00001188 if (PyTuple_Check(v)) {
1189 if (PyTuple_Size(v) != oparg) {
1190 PyErr_SetString(PyExc_ValueError,
1191 "unpack tuple of wrong size");
1192 why = WHY_EXCEPTION;
1193 }
1194 else {
1195 for (; --oparg >= 0; ) {
1196 w = PyTuple_GET_ITEM(v, oparg);
1197 Py_INCREF(w);
1198 PUSH(w);
1199 }
1200 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001201 }
Barry Warsawe42b18f1997-08-25 22:13:04 +00001202 else if (PyList_Check(v)) {
1203 if (PyList_Size(v) != oparg) {
1204 PyErr_SetString(PyExc_ValueError,
1205 "unpack list of wrong size");
1206 why = WHY_EXCEPTION;
1207 }
1208 else {
1209 for (; --oparg >= 0; ) {
1210 w = PyList_GET_ITEM(v, oparg);
1211 Py_INCREF(w);
1212 PUSH(w);
1213 }
1214 }
1215 }
1216 else if (PySequence_Check(v)) {
1217 if (unpack_sequence(v, oparg,
1218 stack_pointer + oparg))
1219 stack_pointer += oparg;
1220 else
1221 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001222 }
1223 else {
Barry Warsawe42b18f1997-08-25 22:13:04 +00001224 PyErr_SetString(PyExc_TypeError,
1225 "unpack non-sequence");
1226 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001227 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001228 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001229 break;
1230
1231 case STORE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001232 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001233 v = POP();
1234 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001235 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1236 Py_DECREF(v);
1237 Py_DECREF(u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001238 break;
1239
1240 case DELETE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001241 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001242 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001243 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1244 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001245 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001246 break;
1247
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001248 case STORE_GLOBAL:
1249 w = GETNAMEV(oparg);
1250 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001251 err = PyDict_SetItem(f->f_globals, w, v);
1252 Py_DECREF(v);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001253 break;
1254
1255 case DELETE_GLOBAL:
1256 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001257 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
1258 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001259 break;
1260
Guido van Rossum374a9221991-04-04 10:40:29 +00001261 case LOAD_CONST:
1262 x = GETCONST(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001263 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001264 PUSH(x);
1265 break;
1266
1267 case LOAD_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001268 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001269 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001270 PyErr_SetString(PyExc_SystemError,
1271 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001272 break;
1273 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001274 x = PyDict_GetItem(x, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001275 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001276 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001277 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001278 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001279 if (x == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001280 PyErr_SetObject(
1281 PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001282 break;
1283 }
1284 }
1285 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001286 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001287 PUSH(x);
1288 break;
1289
1290 case LOAD_GLOBAL:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001291 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001292 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001293 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001294 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001295 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001296 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001297 break;
1298 }
1299 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001300 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001301 PUSH(x);
1302 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001303
Guido van Rossum9bfef441993-03-29 10:43:31 +00001304 case LOAD_FAST:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001305 x = GETLOCAL(oparg);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001306 if (x == NULL) {
Guido van Rossum87460821999-06-22 14:47:32 +00001307 PyErr_SetObject(PyExc_UnboundLocalError,
Guido van Rossumb209a111997-04-29 18:18:01 +00001308 PyTuple_GetItem(co->co_varnames,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001309 oparg));
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001310 break;
1311 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001312 Py_INCREF(x);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001313 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001314 if (x != NULL) continue;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001315 break;
1316
1317 case STORE_FAST:
Guido van Rossum25831651993-05-19 14:50:45 +00001318 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001319 SETLOCAL(oparg, v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001320 continue;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001321
1322 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001323 x = GETLOCAL(oparg);
1324 if (x == NULL) {
Guido van Rossum87460821999-06-22 14:47:32 +00001325 PyErr_SetObject(PyExc_UnboundLocalError,
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001326 PyTuple_GetItem(co->co_varnames,
1327 oparg));
1328 break;
1329 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001330 SETLOCAL(oparg, NULL);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001331 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001332
1333 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001334 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001335 if (x != NULL) {
1336 for (; --oparg >= 0;) {
1337 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001338 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001339 }
1340 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001341 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001342 }
1343 break;
1344
1345 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001346 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001347 if (x != NULL) {
1348 for (; --oparg >= 0;) {
1349 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001350 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001351 }
1352 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001353 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001354 }
1355 break;
1356
1357 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001358 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001359 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001360 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001361 break;
1362
1363 case LOAD_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001364 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001365 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001366 x = PyObject_GetAttr(v, w);
1367 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001368 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001369 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001370 break;
1371
1372 case COMPARE_OP:
1373 w = POP();
1374 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +00001375 if (PyInt_Check(v) && PyInt_Check(w)) {
1376 /* INLINE: cmp(int, int) */
1377 register long a, b;
1378 register int res;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001379 a = PyInt_AS_LONG(v);
1380 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001381 switch (oparg) {
1382 case LT: res = a < b; break;
1383 case LE: res = a <= b; break;
1384 case EQ: res = a == b; break;
1385 case NE: res = a != b; break;
1386 case GT: res = a > b; break;
1387 case GE: res = a >= b; break;
1388 case IS: res = v == w; break;
1389 case IS_NOT: res = v != w; break;
1390 default: goto slow_compare;
1391 }
1392 x = res ? Py_True : Py_False;
1393 Py_INCREF(x);
1394 }
1395 else {
1396 slow_compare:
1397 x = cmp_outcome(oparg, v, w);
1398 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001399 Py_DECREF(v);
1400 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001401 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001402 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001403 break;
1404
1405 case IMPORT_NAME:
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001406 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001407 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001408 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001409 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001410 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001411 break;
1412 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001413 u = find_from_args(f, INSTR_OFFSET());
1414 if (u == NULL) {
1415 x = u;
1416 break;
Guido van Rossum24c13741995-02-14 09:42:43 +00001417 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001418 w = Py_BuildValue("(OOOO)",
Guido van Rossum681d79a1995-07-18 14:51:37 +00001419 w,
1420 f->f_globals,
Guido van Rossuma027efa1997-05-05 20:56:21 +00001421 f->f_locals == NULL ?
1422 Py_None : f->f_locals,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001423 u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001424 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001425 if (w == NULL) {
1426 x = NULL;
1427 break;
1428 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001429 x = PyEval_CallObject(x, w);
1430 Py_DECREF(w);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001431 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001432 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001433 break;
1434
1435 case IMPORT_FROM:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001436 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001437 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001438 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001439 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001440 PyErr_SetString(PyExc_SystemError,
1441 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001442 break;
1443 }
1444 err = import_from(x, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001445 PyFrame_LocalsToFast(f, 0);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001446 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001447 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001448
Guido van Rossum374a9221991-04-04 10:40:29 +00001449 case JUMP_FORWARD:
1450 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001451 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001452
1453 case JUMP_IF_FALSE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001454 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001455 if (err > 0)
1456 err = 0;
1457 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00001458 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001459 else
1460 break;
1461 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001462
1463 case JUMP_IF_TRUE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001464 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001465 if (err > 0) {
1466 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00001467 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001468 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001469 else if (err == 0)
1470 ;
1471 else
1472 break;
1473 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001474
1475 case JUMP_ABSOLUTE:
1476 JUMPTO(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001477 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001478
1479 case FOR_LOOP:
1480 /* for v in s: ...
1481 On entry: stack contains s, i.
1482 On exit: stack contains s, i+1, s[i];
1483 but if loop exhausted:
1484 s, i are popped, and we jump */
1485 w = POP(); /* Loop index */
1486 v = POP(); /* Sequence object */
1487 u = loop_subscript(v, w);
1488 if (u != NULL) {
1489 PUSH(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001490 x = PyInt_FromLong(PyInt_AsLong(w)+1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001491 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001492 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001493 PUSH(u);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001494 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001495 }
1496 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001497 Py_DECREF(v);
1498 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001499 /* A NULL can mean "s exhausted"
1500 but also an error: */
Guido van Rossumb209a111997-04-29 18:18:01 +00001501 if (PyErr_Occurred())
Guido van Rossum374a9221991-04-04 10:40:29 +00001502 why = WHY_EXCEPTION;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001503 else {
Guido van Rossum374a9221991-04-04 10:40:29 +00001504 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001505 continue;
1506 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001507 }
1508 break;
1509
1510 case SETUP_LOOP:
1511 case SETUP_EXCEPT:
1512 case SETUP_FINALLY:
Guido van Rossumb209a111997-04-29 18:18:01 +00001513 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Guido van Rossum374a9221991-04-04 10:40:29 +00001514 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001515 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001516
1517 case SET_LINENO:
Guido van Rossum96a42c81992-01-12 02:29:51 +00001518#ifdef LLTRACE
1519 if (lltrace)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001520 printf("--- %s:%d \n", filename, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001521#endif
Guido van Rossum96a42c81992-01-12 02:29:51 +00001522 f->f_lineno = oparg;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001523 if (f->f_trace == NULL)
1524 continue;
1525 /* Trace each line of code reached */
1526 f->f_lasti = INSTR_OFFSET();
1527 err = call_trace(&f->f_trace, &f->f_trace,
Guido van Rossumb209a111997-04-29 18:18:01 +00001528 f, "line", Py_None);
Guido van Rossum374a9221991-04-04 10:40:29 +00001529 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001530
1531 case CALL_FUNCTION:
Jeremy Hylton76901512000-03-28 23:49:17 +00001532 case CALL_FUNCTION_VAR:
1533 case CALL_FUNCTION_KW:
1534 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00001535 {
Jeremy Hylton76901512000-03-28 23:49:17 +00001536 int na = oparg & 0xff;
1537 int nk = (oparg>>8) & 0xff;
1538 int flags = (opcode - CALL_FUNCTION) & 3;
1539 int n = na + 2*nk + (flags & 1) + ((flags >> 1) & 1);
1540 PyObject **pfunc = stack_pointer - n - 1;
1541 PyObject *func = *pfunc;
1542 PyObject *self = NULL;
1543 PyObject *class = NULL;
1544 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
1545 if (PyMethod_Check(func)) {
1546 self = PyMethod_Self(func);
1547 class = PyMethod_Class(func);
1548 func = PyMethod_Function(func);
1549 Py_INCREF(func);
1550 if (self != NULL) {
1551 Py_INCREF(self);
1552 Py_DECREF(*pfunc);
1553 *pfunc = self;
1554 na++;
1555 n++;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001556 }
1557 else {
Jeremy Hylton76901512000-03-28 23:49:17 +00001558 /* Unbound methods must be called with an
1559 instance of the class (or a derived
1560 class) as first argument */
1561 if (na > 0 && (self = stack_pointer[-n]) != NULL
1562 && PyInstance_Check(self)
1563 && PyClass_IsSubclass((PyObject *)
1564 (((PyInstanceObject *)self)->in_class),
1565 class))
1566 /* Handy-dandy */ ;
1567 else {
1568 PyErr_SetString(PyExc_TypeError,
1569 "unbound method must be called with class instance 1st argument");
1570 x = NULL;
1571 break;
1572 }
1573 }
1574 }
1575 else
1576 Py_INCREF(func);
1577 if (PyFunction_Check(func) && flags == 0) {
1578 PyObject *co = PyFunction_GetCode(func);
1579 PyObject *globals = PyFunction_GetGlobals(func);
1580 PyObject *argdefs = PyFunction_GetDefaults(func);
1581 PyObject **d;
1582 int nd;
1583 if (argdefs != NULL) {
1584 d = &PyTuple_GET_ITEM(argdefs, 0);
1585 nd = ((PyTupleObject *)argdefs)->ob_size;
1586 }
1587 else {
1588 d = NULL;
1589 nd = 0;
1590 }
1591 x = eval_code2((PyCodeObject *)co, globals,
1592 (PyObject *)NULL, stack_pointer-n, na,
1593 stack_pointer-2*nk, nk, d, nd,
1594 class);
1595 }
1596 else {
1597 int nstar = 0;
Jeremy Hylton387b1012000-03-31 01:22:54 +00001598 PyObject *callargs;
Jeremy Hylton76901512000-03-28 23:49:17 +00001599 PyObject *stararg = 0;
1600 PyObject *kwdict = NULL;
1601 if (flags & 2) {
1602 kwdict = POP();
1603 if (!PyDict_Check(kwdict)) {
1604 PyErr_SetString(PyExc_TypeError,
1605 "** argument must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00001606 goto extcall_fail;
Jeremy Hylton76901512000-03-28 23:49:17 +00001607 }
1608 }
1609 if (flags & 1) {
1610 stararg = POP();
1611 if (!PySequence_Check(stararg)) {
1612 PyErr_SetString(PyExc_TypeError,
1613 "* argument must be a sequence");
Guido van Rossum25826c92000-04-21 21:17:39 +00001614 goto extcall_fail;
Jeremy Hylton76901512000-03-28 23:49:17 +00001615 }
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001616 /* Convert abstract sequence to concrete tuple */
1617 if (!PyTuple_Check(stararg)) {
1618 PyObject *t = NULL;
1619 t = PySequence_Tuple(stararg);
1620 if (t == NULL) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001621 goto extcall_fail;
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001622 }
1623 Py_DECREF(stararg);
1624 stararg = t;
1625 }
1626 nstar = PyTuple_GET_SIZE(stararg);
Barry Warsaw4961ef72000-03-29 18:30:03 +00001627 if (nstar < 0) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001628 goto extcall_fail;
Barry Warsaw4961ef72000-03-29 18:30:03 +00001629 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001630 }
1631 if (nk > 0) {
1632 if (kwdict == NULL) {
1633 kwdict = PyDict_New();
1634 if (kwdict == NULL) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001635 goto extcall_fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001636 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001637 }
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001638 else {
1639 PyObject *d = PyDict_Copy(kwdict);
1640 if (d == NULL) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001641 goto extcall_fail;
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001642 }
1643 Py_DECREF(kwdict);
1644 kwdict = d;
1645 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001646 err = 0;
1647 while (--nk >= 0) {
1648 PyObject *value = POP();
1649 PyObject *key = POP();
1650 if (PyDict_GetItem(kwdict, key) != NULL) {
1651 err = 1;
1652 PyErr_Format(PyExc_TypeError,
1653 "keyword parameter redefined: %.400s",
1654 PyString_AsString(key));
Jeremy Hylton387b1012000-03-31 01:22:54 +00001655 Py_DECREF(key);
1656 Py_DECREF(value);
Guido van Rossum25826c92000-04-21 21:17:39 +00001657 goto extcall_fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001658 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001659 err = PyDict_SetItem(kwdict, key, value);
1660 Py_DECREF(key);
1661 Py_DECREF(value);
1662 if (err)
1663 break;
1664 }
1665 if (err) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001666 extcall_fail:
1667 Py_XDECREF(kwdict);
1668 Py_XDECREF(stararg);
1669 Py_DECREF(func);
1670 x=NULL;
Jeremy Hylton76901512000-03-28 23:49:17 +00001671 break;
1672 }
Guido van Rossumf10570b1995-07-07 22:53:21 +00001673 }
Jeremy Hylton387b1012000-03-31 01:22:54 +00001674 callargs = PyTuple_New(na + nstar);
1675 if (callargs == NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +00001676 x = NULL;
1677 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001678 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001679 if (stararg) {
Jeremy Hylton76901512000-03-28 23:49:17 +00001680 int i;
Jeremy Hylton76901512000-03-28 23:49:17 +00001681 for (i = 0; i < nstar; i++) {
1682 PyObject *a = PyTuple_GET_ITEM(stararg, i);
1683 Py_INCREF(a);
Jeremy Hylton387b1012000-03-31 01:22:54 +00001684 PyTuple_SET_ITEM(callargs, na + i, a);
Jeremy Hylton76901512000-03-28 23:49:17 +00001685 }
1686 Py_DECREF(stararg);
1687 }
1688 while (--na >= 0) {
1689 w = POP();
Jeremy Hylton387b1012000-03-31 01:22:54 +00001690 PyTuple_SET_ITEM(callargs, na, w);
Jeremy Hylton76901512000-03-28 23:49:17 +00001691 }
Jeremy Hylton387b1012000-03-31 01:22:54 +00001692 x = PyEval_CallObjectWithKeywords(func,
1693 callargs,
1694 kwdict);
1695 Py_DECREF(callargs);
Jeremy Hylton76901512000-03-28 23:49:17 +00001696 Py_XDECREF(kwdict);
1697 }
1698 Py_DECREF(func);
1699 while (stack_pointer > pfunc) {
1700 w = POP();
1701 Py_DECREF(w);
1702 }
1703 PUSH(x);
1704 if (x != NULL) continue;
1705 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001706 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001707
Guido van Rossum681d79a1995-07-18 14:51:37 +00001708 case MAKE_FUNCTION:
1709 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00001710 x = PyFunction_New(v, f->f_globals);
1711 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001712 /* XXX Maybe this should be a separate opcode? */
1713 if (x != NULL && oparg > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001714 v = PyTuple_New(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001715 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001716 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001717 x = NULL;
1718 break;
1719 }
1720 while (--oparg >= 0) {
1721 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001722 PyTuple_SET_ITEM(v, oparg, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001723 }
1724 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001725 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001726 }
1727 PUSH(x);
1728 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001729
1730 case BUILD_SLICE:
1731 if (oparg == 3)
1732 w = POP();
1733 else
1734 w = NULL;
1735 v = POP();
1736 u = POP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00001737 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001738 Py_DECREF(u);
1739 Py_DECREF(v);
1740 Py_XDECREF(w);
Guido van Rossum8861b741996-07-30 16:49:37 +00001741 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001742 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00001743 break;
1744
1745
Guido van Rossum374a9221991-04-04 10:40:29 +00001746 default:
1747 fprintf(stderr,
1748 "XXX lineno: %d, opcode: %d\n",
Guido van Rossum96a42c81992-01-12 02:29:51 +00001749 f->f_lineno, opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00001750 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00001751 why = WHY_EXCEPTION;
1752 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001753
1754#ifdef CASE_TOO_BIG
1755 }
1756#endif
1757
Guido van Rossum374a9221991-04-04 10:40:29 +00001758 } /* switch */
1759
1760 on_error:
1761
1762 /* Quickly continue if no error occurred */
1763
1764 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001765 if (err == 0 && x != NULL) {
1766#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001767 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001768 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00001769 fprintf(stderr,
1770 "XXX undetected error\n");
1771 else
1772#endif
1773 continue; /* Normal, fast path */
1774 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001775 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00001776 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00001777 err = 0;
1778 }
1779
Guido van Rossum374a9221991-04-04 10:40:29 +00001780 /* Double-check exception status */
1781
1782 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001783 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001784 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001785 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00001786 why = WHY_EXCEPTION;
1787 }
1788 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001789#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00001790 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001791 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001792 if (PyErr_Occurred()) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001793 fprintf(stderr,
1794 "XXX undetected error (why=%d)\n",
1795 why);
1796 why = WHY_EXCEPTION;
1797 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001798 }
1799#endif
1800
1801 /* Log traceback info if this is a real exception */
1802
1803 if (why == WHY_EXCEPTION) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001804 f->f_lasti = INSTR_OFFSET() - 1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001805 if (HAS_ARG(opcode))
Guido van Rossum96a42c81992-01-12 02:29:51 +00001806 f->f_lasti -= 2;
Guido van Rossumb209a111997-04-29 18:18:01 +00001807 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001808
Guido van Rossume59214e1994-08-30 08:01:59 +00001809 if (f->f_trace)
1810 call_exc_trace(&f->f_trace, &f->f_trace, f);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001811 if (tstate->sys_profilefunc)
1812 call_exc_trace(&tstate->sys_profilefunc,
1813 (PyObject**)0, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00001814 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001815
1816 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
1817
1818 if (why == WHY_RERAISE)
1819 why = WHY_EXCEPTION;
1820
1821 /* Unwind stacks if a (pseudo) exception occurred */
1822
1823 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001824 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001825 while (STACK_LEVEL() > b->b_level) {
1826 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001827 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001828 }
1829 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
1830 why = WHY_NOT;
1831 JUMPTO(b->b_handler);
1832 break;
1833 }
1834 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00001835 (b->b_type == SETUP_EXCEPT &&
1836 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001837 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001838 PyObject *exc, *val, *tb;
1839 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001840 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001841 val = Py_None;
1842 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00001843 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001844 /* Make the raw exception data
1845 available to the handler,
1846 so a program can emulate the
1847 Python main loop. Don't do
1848 this for 'finally'. */
1849 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00001850 PyErr_NormalizeException(
1851 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001852 set_exc_info(tstate,
1853 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001854 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001855 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001856 PUSH(val);
1857 PUSH(exc);
1858 }
1859 else {
1860 if (why == WHY_RETURN)
1861 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00001862 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00001863 PUSH(v);
1864 }
1865 why = WHY_NOT;
1866 JUMPTO(b->b_handler);
1867 break;
1868 }
1869 } /* unwind stack */
1870
1871 /* End the loop if we still have an error (or return) */
1872
1873 if (why != WHY_NOT)
1874 break;
1875
1876 } /* main loop */
1877
1878 /* Pop remaining stack entries */
1879
1880 while (!EMPTY()) {
1881 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001882 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001883 }
1884
Guido van Rossum96a42c81992-01-12 02:29:51 +00001885 if (why != WHY_RETURN)
1886 retval = NULL;
1887
Guido van Rossume59214e1994-08-30 08:01:59 +00001888 if (f->f_trace) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001889 if (why == WHY_RETURN) {
Guido van Rossume59214e1994-08-30 08:01:59 +00001890 if (call_trace(&f->f_trace, &f->f_trace, f,
1891 "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001892 Py_XDECREF(retval);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001893 retval = NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001894 why = WHY_EXCEPTION;
Guido van Rossum96a42c81992-01-12 02:29:51 +00001895 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001896 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001897 }
1898
Guido van Rossuma027efa1997-05-05 20:56:21 +00001899 if (tstate->sys_profilefunc && why == WHY_RETURN) {
1900 if (call_trace(&tstate->sys_profilefunc, (PyObject**)0,
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001901 f, "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001902 Py_XDECREF(retval);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001903 retval = NULL;
1904 why = WHY_EXCEPTION;
1905 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001906 }
Guido van Rossuma4240131997-01-21 21:18:36 +00001907
Guido van Rossuma027efa1997-05-05 20:56:21 +00001908 reset_exc_info(tstate);
1909
1910 --tstate->recursion_depth;
Guido van Rossum8c5df061997-01-24 04:19:24 +00001911
1912 fail: /* Jump here from prelude on failure */
Guido van Rossum96a42c81992-01-12 02:29:51 +00001913
Guido van Rossum374a9221991-04-04 10:40:29 +00001914 /* Restore previous frame and release the current one */
Guido van Rossum681d79a1995-07-18 14:51:37 +00001915
Guido van Rossuma027efa1997-05-05 20:56:21 +00001916 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +00001917 Py_DECREF(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001918
Guido van Rossum96a42c81992-01-12 02:29:51 +00001919 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00001920}
1921
Guido van Rossuma027efa1997-05-05 20:56:21 +00001922static void
1923set_exc_info(tstate, type, value, tb)
1924 PyThreadState *tstate;
1925 PyObject *type;
1926 PyObject *value;
1927 PyObject *tb;
1928{
1929 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001930 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00001931
Guido van Rossuma027efa1997-05-05 20:56:21 +00001932 frame = tstate->frame;
1933 if (frame->f_exc_type == NULL) {
1934 /* This frame didn't catch an exception before */
1935 /* Save previous exception of this thread in this frame */
Guido van Rossuma027efa1997-05-05 20:56:21 +00001936 if (tstate->exc_type == NULL) {
1937 Py_INCREF(Py_None);
1938 tstate->exc_type = Py_None;
1939 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001940 tmp_type = frame->f_exc_type;
1941 tmp_value = frame->f_exc_value;
1942 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001943 Py_XINCREF(tstate->exc_type);
1944 Py_XINCREF(tstate->exc_value);
1945 Py_XINCREF(tstate->exc_traceback);
1946 frame->f_exc_type = tstate->exc_type;
1947 frame->f_exc_value = tstate->exc_value;
1948 frame->f_exc_traceback = tstate->exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001949 Py_XDECREF(tmp_type);
1950 Py_XDECREF(tmp_value);
1951 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001952 }
1953 /* Set new exception for this thread */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001954 tmp_type = tstate->exc_type;
1955 tmp_value = tstate->exc_value;
1956 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001957 Py_XINCREF(type);
1958 Py_XINCREF(value);
1959 Py_XINCREF(tb);
1960 tstate->exc_type = type;
1961 tstate->exc_value = value;
1962 tstate->exc_traceback = tb;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001963 Py_XDECREF(tmp_type);
1964 Py_XDECREF(tmp_value);
1965 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001966 /* For b/w compatibility */
1967 PySys_SetObject("exc_type", type);
1968 PySys_SetObject("exc_value", value);
1969 PySys_SetObject("exc_traceback", tb);
1970}
1971
1972static void
1973reset_exc_info(tstate)
1974 PyThreadState *tstate;
1975{
1976 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001977 PyObject *tmp_type, *tmp_value, *tmp_tb;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001978 frame = tstate->frame;
1979 if (frame->f_exc_type != NULL) {
1980 /* This frame caught an exception */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001981 tmp_type = tstate->exc_type;
1982 tmp_value = tstate->exc_value;
1983 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001984 Py_XINCREF(frame->f_exc_type);
1985 Py_XINCREF(frame->f_exc_value);
1986 Py_XINCREF(frame->f_exc_traceback);
1987 tstate->exc_type = frame->f_exc_type;
1988 tstate->exc_value = frame->f_exc_value;
1989 tstate->exc_traceback = frame->f_exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001990 Py_XDECREF(tmp_type);
1991 Py_XDECREF(tmp_value);
1992 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001993 /* For b/w compatibility */
1994 PySys_SetObject("exc_type", frame->f_exc_type);
1995 PySys_SetObject("exc_value", frame->f_exc_value);
1996 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
1997 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001998 tmp_type = frame->f_exc_type;
1999 tmp_value = frame->f_exc_value;
2000 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002001 frame->f_exc_type = NULL;
2002 frame->f_exc_value = NULL;
2003 frame->f_exc_traceback = NULL;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002004 Py_XDECREF(tmp_type);
2005 Py_XDECREF(tmp_value);
2006 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002007}
2008
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002009/* Logic for the raise statement (too complicated for inlining).
2010 This *consumes* a reference count to each of its arguments. */
Guido van Rossum1aa14831997-01-21 05:34:20 +00002011static enum why_code
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002012do_raise(type, value, tb)
Guido van Rossumb209a111997-04-29 18:18:01 +00002013 PyObject *type, *value, *tb;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002014{
Guido van Rossumd295f121998-04-09 21:39:57 +00002015 if (type == NULL) {
2016 /* Reraise */
2017 PyThreadState *tstate = PyThreadState_Get();
2018 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
2019 value = tstate->exc_value;
2020 tb = tstate->exc_traceback;
2021 Py_XINCREF(type);
2022 Py_XINCREF(value);
2023 Py_XINCREF(tb);
2024 }
2025
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002026 /* We support the following forms of raise:
2027 raise <class>, <classinstance>
2028 raise <class>, <argument tuple>
2029 raise <class>, None
2030 raise <class>, <argument>
2031 raise <classinstance>, None
2032 raise <string>, <object>
2033 raise <string>, None
2034
2035 An omitted second argument is the same as None.
2036
2037 In addition, raise <tuple>, <anything> is the same as
2038 raising the tuple's first item (and it better have one!);
2039 this rule is applied recursively.
2040
2041 Finally, an optional third argument can be supplied, which
2042 gives the traceback to be substituted (useful when
2043 re-raising an exception after examining it). */
2044
2045 /* First, check the traceback argument, replacing None with
2046 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002047 if (tb == Py_None) {
2048 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002049 tb = NULL;
2050 }
2051 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002052 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002053 "raise 3rd arg must be traceback or None");
2054 goto raise_error;
2055 }
2056
2057 /* Next, replace a missing value with None */
2058 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002059 value = Py_None;
2060 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002061 }
2062
2063 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00002064 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
2065 PyObject *tmp = type;
2066 type = PyTuple_GET_ITEM(type, 0);
2067 Py_INCREF(type);
2068 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002069 }
2070
Barry Warsaw4249f541997-08-22 21:26:19 +00002071 if (PyString_Check(type))
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002072 ;
Barry Warsaw4249f541997-08-22 21:26:19 +00002073
2074 else if (PyClass_Check(type))
2075 PyErr_NormalizeException(&type, &value, &tb);
2076
Guido van Rossumb209a111997-04-29 18:18:01 +00002077 else if (PyInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002078 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002079 if (value != Py_None) {
2080 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002081 "instance exception may not have a separate value");
2082 goto raise_error;
2083 }
2084 else {
2085 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00002086 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002087 value = type;
Guido van Rossumb209a111997-04-29 18:18:01 +00002088 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2089 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002090 }
2091 }
2092 else {
2093 /* Not something you can raise. You get an exception
2094 anyway, just not what you specified :-) */
Guido van Rossumb209a111997-04-29 18:18:01 +00002095 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002096 "exceptions must be strings, classes, or instances");
2097 goto raise_error;
2098 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002099 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002100 if (tb == NULL)
2101 return WHY_EXCEPTION;
2102 else
2103 return WHY_RERAISE;
2104 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002105 Py_XDECREF(value);
2106 Py_XDECREF(type);
2107 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002108 return WHY_EXCEPTION;
2109}
2110
Barry Warsawe42b18f1997-08-25 22:13:04 +00002111static int
2112unpack_sequence(v, argcnt, sp)
2113 PyObject *v;
2114 int argcnt;
2115 PyObject **sp;
2116{
2117 int i;
2118 PyObject *w;
2119
2120 for (i = 0; i < argcnt; i++) {
2121 if (! (w = PySequence_GetItem(v, i))) {
2122 if (PyErr_ExceptionMatches(PyExc_IndexError))
2123 PyErr_SetString(PyExc_ValueError,
2124 "unpack sequence of wrong size");
2125 goto finally;
2126 }
2127 *--sp = w;
2128 }
2129 /* we better get an IndexError now */
2130 if (PySequence_GetItem(v, i) == NULL) {
2131 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2132 PyErr_Clear();
2133 return 1;
2134 }
2135 /* some other exception occurred. fall through to finally */
2136 }
2137 else
2138 PyErr_SetString(PyExc_ValueError,
2139 "unpack sequence of wrong size");
2140 /* fall through */
2141finally:
Barry Warsaw91010551997-08-25 22:30:51 +00002142 for (; i > 0; i--, sp++)
2143 Py_DECREF(*sp);
Barry Warsawe42b18f1997-08-25 22:13:04 +00002144
2145 return 0;
2146}
2147
2148
Guido van Rossum96a42c81992-01-12 02:29:51 +00002149#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00002150static int
2151prtrace(v, str)
Guido van Rossumb209a111997-04-29 18:18:01 +00002152 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002153 char *str;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002154{
Guido van Rossum3f5da241990-12-20 15:06:42 +00002155 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00002156 if (PyObject_Print(v, stdout, 0) != 0)
2157 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00002158 printf("\n");
Guido van Rossumcc229ea2000-05-04 00:55:17 +00002159 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002160}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002161#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002162
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002163static void
2164call_exc_trace(p_trace, p_newtrace, f)
Guido van Rossumb209a111997-04-29 18:18:01 +00002165 PyObject **p_trace, **p_newtrace;
2166 PyFrameObject *f;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002167{
Guido van Rossumb209a111997-04-29 18:18:01 +00002168 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002169 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002170 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002171 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002172 value = Py_None;
2173 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002174 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002175 arg = Py_BuildValue("(OOO)", type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002176 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002177 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002178 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002179 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002180 err = call_trace(p_trace, p_newtrace, f, "exception", arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002181 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002182 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00002183 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002184 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002185 Py_XDECREF(type);
2186 Py_XDECREF(value);
2187 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002188 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002189}
2190
2191static int
2192call_trace(p_trace, p_newtrace, f, msg, arg)
Guido van Rossumb209a111997-04-29 18:18:01 +00002193 PyObject **p_trace; /* in/out; may not be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002194 may not point to NULL variable initially */
Guido van Rossumb209a111997-04-29 18:18:01 +00002195 PyObject **p_newtrace; /* in/out; may be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002196 may point to NULL variable;
2197 may be same variable as p_newtrace */
Guido van Rossumb209a111997-04-29 18:18:01 +00002198 PyFrameObject *f;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002199 char *msg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002200 PyObject *arg;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002201{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002202 PyThreadState *tstate = f->f_tstate;
Guido van Rossumb209a111997-04-29 18:18:01 +00002203 PyObject *args, *what;
2204 PyObject *res = NULL;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002205
Guido van Rossuma027efa1997-05-05 20:56:21 +00002206 if (tstate->tracing) {
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002207 /* Don't do recursive traces */
2208 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002209 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002210 *p_newtrace = NULL;
2211 }
2212 return 0;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002213 }
2214
Guido van Rossumb209a111997-04-29 18:18:01 +00002215 args = PyTuple_New(3);
Guido van Rossumf10570b1995-07-07 22:53:21 +00002216 if (args == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002217 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002218 what = PyString_FromString(msg);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002219 if (what == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002220 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002221 Py_INCREF(f);
2222 PyTuple_SET_ITEM(args, 0, (PyObject *)f);
2223 PyTuple_SET_ITEM(args, 1, what);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002224 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002225 arg = Py_None;
2226 Py_INCREF(arg);
2227 PyTuple_SET_ITEM(args, 2, arg);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002228 tstate->tracing++;
Guido van Rossumb209a111997-04-29 18:18:01 +00002229 PyFrame_FastToLocals(f);
2230 res = PyEval_CallObject(*p_trace, args); /* May clear *p_trace! */
2231 PyFrame_LocalsToFast(f, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002232 tstate->tracing--;
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002233 cleanup:
Guido van Rossumb209a111997-04-29 18:18:01 +00002234 Py_XDECREF(args);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002235 if (res == NULL) {
2236 /* The trace proc raised an exception */
Guido van Rossumb209a111997-04-29 18:18:01 +00002237 PyTraceBack_Here(f);
2238 Py_XDECREF(*p_trace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002239 *p_trace = NULL;
2240 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002241 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002242 *p_newtrace = NULL;
2243 }
Barry Warsawf6202631999-09-08 16:26:33 +00002244 /* to be extra double plus sure we don't get recursive
2245 * calls inf either tracefunc or profilefunc gets an
2246 * exception, zap the global variables.
2247 */
2248 Py_XDECREF(tstate->sys_tracefunc);
2249 tstate->sys_tracefunc = NULL;
2250 Py_XDECREF(tstate->sys_profilefunc);
2251 tstate->sys_profilefunc = NULL;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002252 return -1;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002253 }
2254 else {
2255 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002256 Py_XDECREF(*p_newtrace);
2257 if (res == Py_None)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002258 *p_newtrace = NULL;
2259 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002260 Py_INCREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002261 *p_newtrace = res;
2262 }
2263 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002264 Py_DECREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002265 return 0;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002266 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002267}
2268
Guido van Rossumb209a111997-04-29 18:18:01 +00002269PyObject *
2270PyEval_GetBuiltins()
Guido van Rossum6135a871995-01-09 17:53:26 +00002271{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002272 PyThreadState *tstate = PyThreadState_Get();
2273 PyFrameObject *current_frame = tstate->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002274 if (current_frame == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002275 return tstate->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00002276 else
2277 return current_frame->f_builtins;
2278}
2279
Guido van Rossumb209a111997-04-29 18:18:01 +00002280PyObject *
2281PyEval_GetLocals()
Guido van Rossum5b722181993-03-30 17:46:03 +00002282{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002283 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum5b722181993-03-30 17:46:03 +00002284 if (current_frame == NULL)
2285 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002286 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00002287 return current_frame->f_locals;
2288}
2289
Guido van Rossumb209a111997-04-29 18:18:01 +00002290PyObject *
2291PyEval_GetGlobals()
Guido van Rossum3f5da241990-12-20 15:06:42 +00002292{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002293 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002294 if (current_frame == NULL)
2295 return NULL;
2296 else
2297 return current_frame->f_globals;
2298}
2299
Guido van Rossumb209a111997-04-29 18:18:01 +00002300PyObject *
2301PyEval_GetFrame()
Guido van Rossume59214e1994-08-30 08:01:59 +00002302{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002303 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossumb209a111997-04-29 18:18:01 +00002304 return (PyObject *)current_frame;
Guido van Rossume59214e1994-08-30 08:01:59 +00002305}
2306
Guido van Rossum6135a871995-01-09 17:53:26 +00002307int
Guido van Rossumb209a111997-04-29 18:18:01 +00002308PyEval_GetRestricted()
Guido van Rossum6135a871995-01-09 17:53:26 +00002309{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002310 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002311 return current_frame == NULL ? 0 : current_frame->f_restricted;
2312}
2313
Guido van Rossumbe270261997-05-22 22:26:18 +00002314int
Guido van Rossumb209a111997-04-29 18:18:01 +00002315Py_FlushLine()
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002316{
Guido van Rossumb209a111997-04-29 18:18:01 +00002317 PyObject *f = PySys_GetObject("stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00002318 if (f == NULL)
2319 return 0;
2320 if (!PyFile_SoftSpace(f, 0))
2321 return 0;
2322 return PyFile_WriteString("\n", f);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002323}
2324
Guido van Rossum3f5da241990-12-20 15:06:42 +00002325
Guido van Rossum681d79a1995-07-18 14:51:37 +00002326/* External interface to call any callable object.
2327 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002328
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002329#undef PyEval_CallObject
2330/* for backward compatibility: export this interface */
2331
Guido van Rossumb209a111997-04-29 18:18:01 +00002332PyObject *
2333PyEval_CallObject(func, arg)
2334 PyObject *func;
2335 PyObject *arg;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002336{
Guido van Rossumb209a111997-04-29 18:18:01 +00002337 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002338}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002339#define PyEval_CallObject(func,arg) \
2340 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00002341
Guido van Rossumb209a111997-04-29 18:18:01 +00002342PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002343PyEval_CallObjectWithKeywords(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002344 PyObject *func;
2345 PyObject *arg;
2346 PyObject *kw;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002347{
2348 ternaryfunc call;
Guido van Rossumb209a111997-04-29 18:18:01 +00002349 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002350
2351 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002352 arg = PyTuple_New(0);
2353 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002354 PyErr_SetString(PyExc_TypeError,
2355 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002356 return NULL;
2357 }
2358 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002359 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002360
Guido van Rossumb209a111997-04-29 18:18:01 +00002361 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002362 PyErr_SetString(PyExc_TypeError,
2363 "keyword list must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00002364 Py_DECREF(arg);
Guido van Rossume3e61c11995-08-04 04:14:47 +00002365 return NULL;
2366 }
2367
Guido van Rossum150b2df1996-12-05 23:17:11 +00002368 if ((call = func->ob_type->tp_call) != NULL)
Guido van Rossum681d79a1995-07-18 14:51:37 +00002369 result = (*call)(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002370 else if (PyMethod_Check(func) || PyFunction_Check(func))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002371 result = call_function(func, arg, kw);
2372 else
2373 result = call_builtin(func, arg, kw);
2374
Guido van Rossumb209a111997-04-29 18:18:01 +00002375 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002376
Guido van Rossumb209a111997-04-29 18:18:01 +00002377 if (result == NULL && !PyErr_Occurred())
2378 PyErr_SetString(PyExc_SystemError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002379 "NULL result without error in call_object");
Guido van Rossume59214e1994-08-30 08:01:59 +00002380
2381 return result;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002382}
2383
Guido van Rossumb209a111997-04-29 18:18:01 +00002384static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002385call_builtin(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002386 PyObject *func;
2387 PyObject *arg;
2388 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002389{
Guido van Rossumb209a111997-04-29 18:18:01 +00002390 if (PyCFunction_Check(func)) {
2391 PyCFunction meth = PyCFunction_GetFunction(func);
2392 PyObject *self = PyCFunction_GetSelf(func);
2393 int flags = PyCFunction_GetFlags(func);
Guido van Rossumff8b4941995-07-26 18:16:42 +00002394 if (!(flags & METH_VARARGS)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002395 int size = PyTuple_Size(arg);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002396 if (size == 1)
Guido van Rossumb209a111997-04-29 18:18:01 +00002397 arg = PyTuple_GET_ITEM(arg, 0);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002398 else if (size == 0)
2399 arg = NULL;
2400 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002401 if (flags & METH_KEYWORDS)
2402 return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002403 if (kw != NULL && PyDict_Size(kw) != 0) {
2404 PyErr_SetString(PyExc_TypeError,
Guido van Rossumff8b4941995-07-26 18:16:42 +00002405 "this function takes no keyword arguments");
2406 return NULL;
2407 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002408 return (*meth)(self, arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002409 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002410 if (PyClass_Check(func)) {
2411 return PyInstance_New(func, arg, kw);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002412 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002413 if (PyInstance_Check(func)) {
2414 PyObject *res, *call = PyObject_GetAttrString(func,"__call__");
Guido van Rossume59214e1994-08-30 08:01:59 +00002415 if (call == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002416 PyErr_Clear();
2417 PyErr_SetString(PyExc_AttributeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002418 "no __call__ method defined");
Guido van Rossume59214e1994-08-30 08:01:59 +00002419 return NULL;
2420 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002421 res = PyEval_CallObjectWithKeywords(call, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002422 Py_DECREF(call);
Guido van Rossume59214e1994-08-30 08:01:59 +00002423 return res;
2424 }
Guido van Rossumba98a421999-11-15 19:29:33 +00002425 PyErr_Format(PyExc_TypeError, "call of non-function (type %.400s)",
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002426 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002427 return NULL;
2428}
2429
Guido van Rossumb209a111997-04-29 18:18:01 +00002430static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002431call_function(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002432 PyObject *func;
2433 PyObject *arg;
2434 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002435{
Guido van Rossumb209a111997-04-29 18:18:01 +00002436 PyObject *class = NULL; /* == owner */
2437 PyObject *argdefs;
2438 PyObject **d, **k;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002439 int nk, nd;
Guido van Rossumb209a111997-04-29 18:18:01 +00002440 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002441
Guido van Rossumb209a111997-04-29 18:18:01 +00002442 if (kw != NULL && !PyDict_Check(kw)) {
2443 PyErr_BadInternalCall();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002444 return NULL;
2445 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002446
Guido van Rossumb209a111997-04-29 18:18:01 +00002447 if (PyMethod_Check(func)) {
2448 PyObject *self = PyMethod_Self(func);
2449 class = PyMethod_Class(func);
2450 func = PyMethod_Function(func);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002451 if (self == NULL) {
2452 /* Unbound methods must be called with an instance of
2453 the class (or a derived class) as first argument */
Guido van Rossumb209a111997-04-29 18:18:01 +00002454 if (PyTuple_Size(arg) >= 1) {
2455 self = PyTuple_GET_ITEM(arg, 0);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002456 if (self != NULL &&
Guido van Rossumb209a111997-04-29 18:18:01 +00002457 PyInstance_Check(self) &&
2458 PyClass_IsSubclass((PyObject *)
2459 (((PyInstanceObject *)self)->in_class),
Guido van Rossumb3f72581993-05-21 19:56:10 +00002460 class))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002461 /* Handy-dandy */ ;
Guido van Rossumb3f72581993-05-21 19:56:10 +00002462 else
2463 self = NULL;
2464 }
2465 if (self == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002466 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002467 "unbound method must be called with class instance 1st argument");
Guido van Rossumb3f72581993-05-21 19:56:10 +00002468 return NULL;
2469 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002470 Py_INCREF(arg);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002471 }
2472 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002473 int argcount = PyTuple_Size(arg);
2474 PyObject *newarg = PyTuple_New(argcount + 1);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002475 int i;
Guido van Rossum81daa321993-05-20 14:24:46 +00002476 if (newarg == NULL)
2477 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002478 Py_INCREF(self);
2479 PyTuple_SET_ITEM(newarg, 0, self);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002480 for (i = 0; i < argcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002481 PyObject *v = PyTuple_GET_ITEM(arg, i);
2482 Py_XINCREF(v);
2483 PyTuple_SET_ITEM(newarg, i+1, v);
Guido van Rossum81daa321993-05-20 14:24:46 +00002484 }
2485 arg = newarg;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002486 }
Guido van Rossum7859f871998-07-08 14:58:16 +00002487 if (!PyFunction_Check(func)) {
2488 result = PyEval_CallObjectWithKeywords(func, arg, kw);
2489 Py_DECREF(arg);
2490 return result;
2491 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002492 }
2493 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002494 if (!PyFunction_Check(func)) {
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002495 PyErr_Format(PyExc_TypeError,
Guido van Rossum5db862d2000-04-10 12:46:51 +00002496 "call of non-function (type %.200s)",
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002497 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002498 return NULL;
2499 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002500 Py_INCREF(arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002501 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002502
2503 argdefs = PyFunction_GetDefaults(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00002504 if (argdefs != NULL && PyTuple_Check(argdefs)) {
2505 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
2506 nd = PyTuple_Size(argdefs);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002507 }
2508 else {
2509 d = NULL;
2510 nd = 0;
2511 }
2512
2513 if (kw != NULL) {
2514 int pos, i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002515 nk = PyDict_Size(kw);
2516 k = PyMem_NEW(PyObject *, 2*nk);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002517 if (k == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002518 PyErr_NoMemory();
2519 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002520 return NULL;
Guido van Rossume59214e1994-08-30 08:01:59 +00002521 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002522 pos = i = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002523 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002524 i += 2;
2525 nk = i/2;
2526 /* XXX This is broken if the caller deletes dict items! */
2527 }
2528 else {
2529 k = NULL;
2530 nk = 0;
Guido van Rossume59214e1994-08-30 08:01:59 +00002531 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002532
Guido van Rossum681d79a1995-07-18 14:51:37 +00002533 result = eval_code2(
Guido van Rossumb209a111997-04-29 18:18:01 +00002534 (PyCodeObject *)PyFunction_GetCode(func),
2535 PyFunction_GetGlobals(func), (PyObject *)NULL,
2536 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
Guido van Rossum681d79a1995-07-18 14:51:37 +00002537 k, nk,
2538 d, nd,
2539 class);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002540
Guido van Rossumb209a111997-04-29 18:18:01 +00002541 Py_DECREF(arg);
Guido van Rossumb18618d2000-05-03 23:44:39 +00002542 if (k != NULL)
2543 PyMem_DEL(k);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002544
Guido van Rossum681d79a1995-07-18 14:51:37 +00002545 return result;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002546}
2547
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002548#define SLICE_ERROR_MSG \
2549 "standard sequence type does not support step size other than one"
2550
Guido van Rossumb209a111997-04-29 18:18:01 +00002551static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002552loop_subscript(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002553 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002554{
Guido van Rossumb209a111997-04-29 18:18:01 +00002555 PySequenceMethods *sq = v->ob_type->tp_as_sequence;
Guido van Rossume59214e1994-08-30 08:01:59 +00002556 int i;
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002557 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002558 PyErr_SetString(PyExc_TypeError, "loop over non-sequence");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002559 return NULL;
2560 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002561 i = PyInt_AsLong(w);
Guido van Rossume59214e1994-08-30 08:01:59 +00002562 v = (*sq->sq_item)(v, i);
2563 if (v)
2564 return v;
Barry Warsaw4249f541997-08-22 21:26:19 +00002565 if (PyErr_ExceptionMatches(PyExc_IndexError))
Guido van Rossumb209a111997-04-29 18:18:01 +00002566 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002567 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002568}
2569
Guido van Rossum20c6add2000-05-08 14:06:50 +00002570/* Extract a slice index from a PyInt or PyLong, the index is bound to
2571 the range [-INT_MAX+1, INTMAX]. Returns 0 and an exception if there is
2572 and error. Returns 1 on success.*/
2573
2574int
2575_PyEval_SliceIndex(v, pi)
Guido van Rossumb209a111997-04-29 18:18:01 +00002576 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002577 int *pi;
2578{
2579 if (v != NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002580 long x;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002581 if (PyInt_Check(v)) {
2582 x = PyInt_AsLong(v);
2583 } else if (PyLong_Check(v)) {
2584 x = PyLong_AsLong(v);
2585 if (x==-1 && PyErr_Occurred()) {
2586 PyObject *long_zero;
2587
2588 if (!PyErr_ExceptionMatches( PyExc_OverflowError ) ) {
2589 /* It's not an overflow error, so just
2590 signal an error */
Guido van Rossum20c6add2000-05-08 14:06:50 +00002591 return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002592 }
2593
2594 /* It's an overflow error, so we need to
2595 check the sign of the long integer,
2596 set the value to INT_MAX or 0, and clear
2597 the error. */
2598
2599 /* Create a long integer with a value of 0 */
2600 long_zero = PyLong_FromLong( 0L );
Guido van Rossum20c6add2000-05-08 14:06:50 +00002601 if (long_zero == NULL) return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002602
2603 /* Check sign */
2604 if (PyObject_Compare(long_zero, v) < 0)
2605 x = INT_MAX;
2606 else
2607 x = 0;
2608
2609 /* Free the long integer we created, and clear the
2610 OverflowError */
2611 Py_DECREF(long_zero);
2612 PyErr_Clear();
2613 }
2614 } else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002615 PyErr_SetString(PyExc_TypeError,
2616 "slice index must be int");
Guido van Rossum20c6add2000-05-08 14:06:50 +00002617 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002618 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00002619 /* Truncate -- very long indices are truncated anyway */
2620 if (x > INT_MAX)
2621 x = INT_MAX;
2622 else if (x < -INT_MAX)
2623 x = 0;
2624 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002625 }
Guido van Rossum20c6add2000-05-08 14:06:50 +00002626 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002627}
2628
Guido van Rossumb209a111997-04-29 18:18:01 +00002629static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002630apply_slice(u, v, w) /* return u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +00002631 PyObject *u, *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002632{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002633 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002634 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002635 return NULL;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002636 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum04691fc1992-08-12 15:35:34 +00002637 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002638 return PySequence_GetSlice(u, ilow, ihigh);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002639}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002640
2641static int
Guido van Rossum3f5da241990-12-20 15:06:42 +00002642assign_slice(u, v, w, x) /* u[v:w] = x */
Guido van Rossumb209a111997-04-29 18:18:01 +00002643 PyObject *u, *v, *w, *x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002644{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002645 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002646 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002647 return -1;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002648 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002649 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002650 if (x == NULL)
2651 return PySequence_DelSlice(u, ilow, ihigh);
2652 else
2653 return PySequence_SetSlice(u, ilow, ihigh, x);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002654}
2655
Guido van Rossumb209a111997-04-29 18:18:01 +00002656static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002657cmp_outcome(op, v, w)
Guido van Rossum5b7313a1992-04-06 13:24:57 +00002658 int op;
Guido van Rossumb209a111997-04-29 18:18:01 +00002659 register PyObject *v;
2660 register PyObject *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002661{
2662 register int cmp;
2663 register int res = 0;
2664 switch (op) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00002665 case IS:
2666 case IS_NOT:
2667 res = (v == w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002668 if (op == (int) IS_NOT)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002669 res = !res;
2670 break;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002671 case IN:
2672 case NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002673 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002674 if (res < 0)
2675 return NULL;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002676 if (op == (int) NOT_IN)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002677 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002678 break;
2679 case EXC_MATCH:
Barry Warsaw4249f541997-08-22 21:26:19 +00002680 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002681 break;
2682 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00002683 cmp = PyObject_Compare(v, w);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00002684 if (cmp && PyErr_Occurred())
2685 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002686 switch (op) {
2687 case LT: res = cmp < 0; break;
2688 case LE: res = cmp <= 0; break;
2689 case EQ: res = cmp == 0; break;
2690 case NE: res = cmp != 0; break;
2691 case GT: res = cmp > 0; break;
2692 case GE: res = cmp >= 0; break;
2693 /* XXX no default? (res is initialized to 0 though) */
2694 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002695 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002696 v = res ? Py_True : Py_False;
2697 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002698 return v;
2699}
2700
Guido van Rossum3f5da241990-12-20 15:06:42 +00002701static int
2702import_from(locals, v, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002703 PyObject *locals;
2704 PyObject *v;
2705 PyObject *name;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002706{
Guido van Rossumb209a111997-04-29 18:18:01 +00002707 PyObject *w, *x;
2708 if (!PyModule_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002709 PyErr_SetString(PyExc_TypeError,
2710 "import-from requires module object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002711 return -1;
2712 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002713 w = PyModule_GetDict(v);
2714 if (PyString_AsString(name)[0] == '*') {
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002715 int pos, err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002716 PyObject *name, *value;
Guido van Rossum25831651993-05-19 14:50:45 +00002717 pos = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002718 while (PyDict_Next(w, &pos, &name, &value)) {
2719 if (!PyString_Check(name) ||
2720 PyString_AsString(name)[0] == '_')
Guido van Rossume9736fc1990-11-18 17:33:06 +00002721 continue;
Guido van Rossumb209a111997-04-29 18:18:01 +00002722 Py_INCREF(value);
2723 err = PyDict_SetItem(locals, name, value);
2724 Py_DECREF(value);
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002725 if (err != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002726 return -1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002727 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002728 return 0;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002729 }
2730 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002731 x = PyDict_GetItem(w, name);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002732 if (x == NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +00002733 PyErr_Format(PyExc_ImportError,
2734 "cannot import name %.230s",
2735 PyString_AsString(name));
Guido van Rossum3f5da241990-12-20 15:06:42 +00002736 return -1;
2737 }
2738 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002739 return PyDict_SetItem(locals, name, x);
Guido van Rossume9736fc1990-11-18 17:33:06 +00002740 }
2741}
2742
Guido van Rossumb209a111997-04-29 18:18:01 +00002743static PyObject *
Guido van Rossum25831651993-05-19 14:50:45 +00002744build_class(methods, bases, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002745 PyObject *methods; /* dictionary */
2746 PyObject *bases; /* tuple containing classes */
2747 PyObject *name; /* string */
Guido van Rossume9736fc1990-11-18 17:33:06 +00002748{
Guido van Rossumcd649651997-08-22 16:56:16 +00002749 int i, n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002750 if (!PyTuple_Check(bases)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002751 PyErr_SetString(PyExc_SystemError,
2752 "build_class with non-tuple bases");
Guido van Rossum25831651993-05-19 14:50:45 +00002753 return NULL;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002754 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002755 if (!PyDict_Check(methods)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002756 PyErr_SetString(PyExc_SystemError,
2757 "build_class with non-dictionary");
Guido van Rossume9736fc1990-11-18 17:33:06 +00002758 return NULL;
2759 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002760 if (!PyString_Check(name)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002761 PyErr_SetString(PyExc_SystemError,
Guido van Rossum7a5b7962000-03-31 13:52:29 +00002762 "build_class with non-string name");
Guido van Rossum25831651993-05-19 14:50:45 +00002763 return NULL;
2764 }
Guido van Rossumcd649651997-08-22 16:56:16 +00002765 n = PyTuple_Size(bases);
2766 for (i = 0; i < n; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002767 PyObject *base = PyTuple_GET_ITEM(bases, i);
2768 if (!PyClass_Check(base)) {
Guido van Rossum150b2df1996-12-05 23:17:11 +00002769 /* Call the base's *type*, if it is callable.
2770 This code is a hook for Donald Beaudry's
2771 and Jim Fulton's type extensions. In
Thomas Wouters7e474022000-07-16 12:04:32 +00002772 unextended Python it will never be triggered
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002773 since its types are not callable.
2774 Ditto: call the bases's *class*, if it has
2775 one. This makes the same thing possible
2776 without writing C code. A true meta-object
2777 protocol! */
2778 PyObject *basetype = (PyObject *)base->ob_type;
2779 PyObject *callable = NULL;
2780 if (PyCallable_Check(basetype))
2781 callable = basetype;
2782 else
2783 callable = PyObject_GetAttrString(
2784 base, "__class__");
2785 if (callable) {
2786 PyObject *args;
2787 PyObject *newclass = NULL;
2788 args = Py_BuildValue(
2789 "(OOO)", name, bases, methods);
2790 if (args != NULL) {
2791 newclass = PyEval_CallObject(
2792 callable, args);
2793 Py_DECREF(args);
2794 }
Guido van Rossum730806d1998-04-10 22:27:42 +00002795 if (callable != basetype) {
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002796 Py_DECREF(callable);
Guido van Rossum730806d1998-04-10 22:27:42 +00002797 }
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002798 return newclass;
Guido van Rossum150b2df1996-12-05 23:17:11 +00002799 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002800 PyErr_SetString(PyExc_TypeError,
Guido van Rossum25831651993-05-19 14:50:45 +00002801 "base is not a class object");
2802 return NULL;
2803 }
2804 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002805 return PyClass_New(bases, methods, name);
Guido van Rossum25831651993-05-19 14:50:45 +00002806}
2807
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002808static int
Guido van Rossuma027efa1997-05-05 20:56:21 +00002809exec_statement(f, prog, globals, locals)
2810 PyFrameObject *f;
Guido van Rossumb209a111997-04-29 18:18:01 +00002811 PyObject *prog;
2812 PyObject *globals;
2813 PyObject *locals;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002814{
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002815 int n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002816 PyObject *v;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002817 int plain = 0;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002818
Guido van Rossumb209a111997-04-29 18:18:01 +00002819 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
2820 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002821 /* Backward compatibility hack */
Guido van Rossumb209a111997-04-29 18:18:01 +00002822 globals = PyTuple_GetItem(prog, 1);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002823 if (n == 3)
Guido van Rossumb209a111997-04-29 18:18:01 +00002824 locals = PyTuple_GetItem(prog, 2);
2825 prog = PyTuple_GetItem(prog, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002826 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002827 if (globals == Py_None) {
2828 globals = PyEval_GetGlobals();
2829 if (locals == Py_None) {
2830 locals = PyEval_GetLocals();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002831 plain = 1;
2832 }
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002833 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002834 else if (locals == Py_None)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002835 locals = globals;
Guido van Rossumb209a111997-04-29 18:18:01 +00002836 if (!PyString_Check(prog) &&
2837 !PyCode_Check(prog) &&
2838 !PyFile_Check(prog)) {
2839 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002840 "exec 1st arg must be string, code or file object");
2841 return -1;
2842 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002843 if (!PyDict_Check(globals) || !PyDict_Check(locals)) {
2844 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002845 "exec 2nd/3rd args must be dict or None");
2846 return -1;
2847 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002848 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002849 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
Guido van Rossumb209a111997-04-29 18:18:01 +00002850 if (PyCode_Check(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002851 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002852 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002853 else if (PyFile_Check(prog)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002854 FILE *fp = PyFile_AsFile(prog);
2855 char *name = PyString_AsString(PyFile_Name(prog));
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002856 v = PyRun_File(fp, name, Py_file_input, globals, locals);
2857 }
2858 else {
2859 char *s = PyString_AsString(prog);
Guido van Rossum582acec2000-06-28 22:07:35 +00002860 if (strlen(s) != (size_t)PyString_Size(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002861 PyErr_SetString(PyExc_ValueError,
2862 "embedded '\\0' in exec string");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002863 return -1;
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002864 }
2865 v = PyRun_String(s, Py_file_input, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002866 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002867 if (plain)
2868 PyFrame_LocalsToFast(f, 0);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002869 if (v == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002870 return -1;
Guido van Rossumb209a111997-04-29 18:18:01 +00002871 Py_DECREF(v);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002872 return 0;
2873}
Guido van Rossum24c13741995-02-14 09:42:43 +00002874
Guido van Rossum1aa14831997-01-21 05:34:20 +00002875/* Hack for ni.py */
Guido van Rossumb209a111997-04-29 18:18:01 +00002876static PyObject *
Guido van Rossum24c13741995-02-14 09:42:43 +00002877find_from_args(f, nexti)
Guido van Rossumb209a111997-04-29 18:18:01 +00002878 PyFrameObject *f;
Guido van Rossum24c13741995-02-14 09:42:43 +00002879 int nexti;
2880{
2881 int opcode;
2882 int oparg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002883 PyObject *list, *name;
Guido van Rossum24c13741995-02-14 09:42:43 +00002884 unsigned char *next_instr;
2885
Guido van Rossumd076c731998-10-07 19:42:25 +00002886 _PyCode_GETCODEPTR(f->f_code, &next_instr);
2887 next_instr += nexti;
2888
Guido van Rossum24c13741995-02-14 09:42:43 +00002889 opcode = (*next_instr++);
2890 if (opcode != IMPORT_FROM) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002891 Py_INCREF(Py_None);
2892 return Py_None;
Guido van Rossum24c13741995-02-14 09:42:43 +00002893 }
2894
Guido van Rossumb209a111997-04-29 18:18:01 +00002895 list = PyList_New(0);
Guido van Rossum24c13741995-02-14 09:42:43 +00002896 if (list == NULL)
2897 return NULL;
2898
2899 do {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002900 oparg = (next_instr[1]<<8) + next_instr[0];
2901 next_instr += 2;
Guido van Rossum24c13741995-02-14 09:42:43 +00002902 name = Getnamev(f, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002903 if (PyList_Append(list, name) < 0) {
2904 Py_DECREF(list);
Guido van Rossum24c13741995-02-14 09:42:43 +00002905 break;
2906 }
2907 opcode = (*next_instr++);
2908 } while (opcode == IMPORT_FROM);
2909
2910 return list;
2911}
Guido van Rossum950361c1997-01-24 13:49:28 +00002912
2913
2914#ifdef DYNAMIC_EXECUTION_PROFILE
2915
2916PyObject *
2917getarray(a)
2918 long a[256];
2919{
2920 int i;
2921 PyObject *l = PyList_New(256);
2922 if (l == NULL) return NULL;
2923 for (i = 0; i < 256; i++) {
2924 PyObject *x = PyInt_FromLong(a[i]);
2925 if (x == NULL) {
2926 Py_DECREF(l);
2927 return NULL;
2928 }
2929 PyList_SetItem(l, i, x);
2930 }
2931 for (i = 0; i < 256; i++)
2932 a[i] = 0;
2933 return l;
2934}
2935
2936PyObject *
2937_Py_GetDXProfile(self, args)
2938 PyObject *self, *args;
2939{
2940#ifndef DXPAIRS
2941 return getarray(dxp);
2942#else
2943 int i;
2944 PyObject *l = PyList_New(257);
2945 if (l == NULL) return NULL;
2946 for (i = 0; i < 257; i++) {
2947 PyObject *x = getarray(dxpairs[i]);
2948 if (x == NULL) {
2949 Py_DECREF(l);
2950 return NULL;
2951 }
2952 PyList_SetItem(l, i, x);
2953 }
2954 return l;
2955#endif
2956}
2957
2958#endif