blob: 0bf5d00410614a2e882da0fbb6f149611dd67681 [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
Guido van Rossumc6004111993-11-05 10:22:19 +000026#include <ctype.h>
27
Guido van Rossuma027efa1997-05-05 20:56:21 +000028#ifdef HAVE_LIMITS_H
29#include <limits.h>
30#else
31#define INT_MAX 2147483647
32#endif
33
Guido van Rossum04691fc1992-08-12 15:35:34 +000034/* Turn this on if your compiler chokes on the big switch: */
Guido van Rossum1ae940a1995-01-02 19:04:15 +000035/* #define CASE_TOO_BIG 1 */
Guido van Rossum04691fc1992-08-12 15:35:34 +000036
Guido van Rossum408027e1996-12-30 16:17:54 +000037#ifdef Py_DEBUG
Guido van Rossum96a42c81992-01-12 02:29:51 +000038/* For debugging the interpreter: */
39#define LLTRACE 1 /* Low-level trace feature */
40#define CHECKEXC 1 /* Double-check exception checking */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000041#endif
42
Guido van Rossum5b722181993-03-30 17:46:03 +000043
Guido van Rossum374a9221991-04-04 10:40:29 +000044/* Forward declarations */
Guido van Rossum374a9221991-04-04 10:40:29 +000045
Tim Petersdbd9ba62000-07-09 03:09:57 +000046static PyObject *eval_code2(PyCodeObject *,
47 PyObject *, PyObject *,
48 PyObject **, int,
49 PyObject **, int,
50 PyObject **, int,
51 PyObject *);
Guido van Rossum0a066c01992-03-27 17:29:15 +000052#ifdef LLTRACE
Tim Petersdbd9ba62000-07-09 03:09:57 +000053static int prtrace(PyObject *, char *);
Guido van Rossum0a066c01992-03-27 17:29:15 +000054#endif
Tim Petersdbd9ba62000-07-09 03:09:57 +000055static void call_exc_trace(PyObject **, PyObject**, PyFrameObject *);
56static int call_trace(PyObject **, PyObject **,
57 PyFrameObject *, char *, PyObject *);
58static PyObject *call_builtin(PyObject *, PyObject *, PyObject *);
59static PyObject *call_function(PyObject *, PyObject *, PyObject *);
60static PyObject *loop_subscript(PyObject *, PyObject *);
61static PyObject *apply_slice(PyObject *, PyObject *, PyObject *);
62static int assign_slice(PyObject *, PyObject *,
63 PyObject *, PyObject *);
64static PyObject *cmp_outcome(int, PyObject *, PyObject *);
65static int import_from(PyObject *, PyObject *, PyObject *);
66static PyObject *build_class(PyObject *, PyObject *, PyObject *);
67static int exec_statement(PyFrameObject *,
68 PyObject *, PyObject *, PyObject *);
69static PyObject *find_from_args(PyFrameObject *, int);
70static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *);
71static void reset_exc_info(PyThreadState *);
Guido van Rossum374a9221991-04-04 10:40:29 +000072
73
Guido van Rossum950361c1997-01-24 13:49:28 +000074/* Dynamic execution profile */
75#ifdef DYNAMIC_EXECUTION_PROFILE
76#ifdef DXPAIRS
77static long dxpairs[257][256];
78#define dxp dxpairs[256]
79#else
80static long dxp[256];
81#endif
82#endif
83
84
Guido van Rossume59214e1994-08-30 08:01:59 +000085#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +000086
Guido van Rossum2571cc81999-04-07 16:07:23 +000087#ifndef DONT_HAVE_ERRNO_H
Guido van Rossum1984f1e1992-08-04 12:41:02 +000088#include <errno.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +000089#endif
Guido van Rossum49b56061998-10-01 20:42:43 +000090#include "pythread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000091
Guido van Rossuma027efa1997-05-05 20:56:21 +000092extern int _PyThread_Started; /* Flag for Py_Exit */
93
Guido van Rossum65d5b571998-12-21 19:32:43 +000094static PyThread_type_lock interpreter_lock = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +000095static long main_thread = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +000096
97void
Guido van Rossumb209a111997-04-29 18:18:01 +000098PyEval_InitThreads()
Guido van Rossum1984f1e1992-08-04 12:41:02 +000099{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000100 if (interpreter_lock)
Sjoerd Mullendered59d201993-01-06 13:36:38 +0000101 return;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000102 _PyThread_Started = 1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000103 interpreter_lock = PyThread_allocate_lock();
104 PyThread_acquire_lock(interpreter_lock, 1);
105 main_thread = PyThread_get_thread_ident();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000106}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000107
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000108void
Guido van Rossum25ce5661997-08-02 03:10:38 +0000109PyEval_AcquireLock()
110{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000111 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000112}
113
114void
115PyEval_ReleaseLock()
116{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000117 PyThread_release_lock(interpreter_lock);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000118}
119
120void
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000121PyEval_AcquireThread(tstate)
122 PyThreadState *tstate;
123{
124 if (tstate == NULL)
125 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000126 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000127 if (PyThreadState_Swap(tstate) != NULL)
128 Py_FatalError(
129 "PyEval_AcquireThread: non-NULL old thread state");
130}
131
132void
133PyEval_ReleaseThread(tstate)
134 PyThreadState *tstate;
135{
136 if (tstate == NULL)
137 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
138 if (PyThreadState_Swap(NULL) != tstate)
139 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000140 PyThread_release_lock(interpreter_lock);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000141}
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000142#endif
143
Guido van Rossumff4949e1992-08-05 19:58:53 +0000144/* Functions save_thread and restore_thread are always defined so
145 dynamically loaded modules needn't be compiled separately for use
146 with and without threads: */
147
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000148PyThreadState *
Guido van Rossumb209a111997-04-29 18:18:01 +0000149PyEval_SaveThread()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000150{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000151 PyThreadState *tstate = PyThreadState_Swap(NULL);
152 if (tstate == NULL)
153 Py_FatalError("PyEval_SaveThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000154#ifdef WITH_THREAD
Guido van Rossumb74eca91997-09-30 22:03:16 +0000155 if (interpreter_lock)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000156 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000157#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000158 return tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000159}
160
161void
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000162PyEval_RestoreThread(tstate)
163 PyThreadState *tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000164{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000165 if (tstate == NULL)
166 Py_FatalError("PyEval_RestoreThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000167#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000168 if (interpreter_lock) {
Guido van Rossumb74eca91997-09-30 22:03:16 +0000169 int err = errno;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000170 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000171 errno = err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000172 }
173#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000174 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000175}
176
177
Guido van Rossuma9672091994-09-14 13:31:22 +0000178/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
179 signal handlers or Mac I/O completion routines) can schedule calls
180 to a function to be called synchronously.
181 The synchronous function is called with one void* argument.
182 It should return 0 for success or -1 for failure -- failure should
183 be accompanied by an exception.
184
185 If registry succeeds, the registry function returns 0; if it fails
186 (e.g. due to too many pending calls) it returns -1 (without setting
187 an exception condition).
188
189 Note that because registry may occur from within signal handlers,
190 or other asynchronous events, calling malloc() is unsafe!
191
192#ifdef WITH_THREAD
193 Any thread can schedule pending calls, but only the main thread
194 will execute them.
195#endif
196
197 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
198 There are two possible race conditions:
199 (1) nested asynchronous registry calls;
200 (2) registry calls made while pending calls are being processed.
201 While (1) is very unlikely, (2) is a real possibility.
202 The current code is safe against (2), but not against (1).
203 The safety against (2) is derived from the fact that only one
204 thread (the main thread) ever takes things out of the queue.
Guido van Rossuma9672091994-09-14 13:31:22 +0000205
Guido van Rossuma027efa1997-05-05 20:56:21 +0000206 XXX Darn! With the advent of thread state, we should have an array
207 of pending calls per thread in the thread state! Later...
208*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000209
Guido van Rossuma9672091994-09-14 13:31:22 +0000210#define NPENDINGCALLS 32
211static struct {
Tim Petersdbd9ba62000-07-09 03:09:57 +0000212 int (*func)(ANY *);
Guido van Rossuma9672091994-09-14 13:31:22 +0000213 ANY *arg;
214} pendingcalls[NPENDINGCALLS];
215static volatile int pendingfirst = 0;
216static volatile int pendinglast = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000217static volatile int things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000218
219int
220Py_AddPendingCall(func, arg)
Tim Petersdbd9ba62000-07-09 03:09:57 +0000221 int (*func)(ANY *);
Guido van Rossuma9672091994-09-14 13:31:22 +0000222 ANY *arg;
223{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000224 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000225 int i, j;
226 /* XXX Begin critical section */
227 /* XXX If you want this to be safe against nested
228 XXX asynchronous calls, you'll have to work harder! */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000229 if (busy)
230 return -1;
231 busy = 1;
Guido van Rossuma9672091994-09-14 13:31:22 +0000232 i = pendinglast;
233 j = (i + 1) % NPENDINGCALLS;
234 if (j == pendingfirst)
235 return -1; /* Queue full */
236 pendingcalls[i].func = func;
237 pendingcalls[i].arg = arg;
238 pendinglast = j;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000239 things_to_do = 1; /* Signal main loop */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000240 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000241 /* XXX End critical section */
242 return 0;
243}
244
Guido van Rossum180d7b41994-09-29 09:45:57 +0000245int
246Py_MakePendingCalls()
Guido van Rossuma9672091994-09-14 13:31:22 +0000247{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000248 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000249#ifdef WITH_THREAD
Guido van Rossum65d5b571998-12-21 19:32:43 +0000250 if (main_thread && PyThread_get_thread_ident() != main_thread)
Guido van Rossuma9672091994-09-14 13:31:22 +0000251 return 0;
252#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000253 if (busy)
Guido van Rossum180d7b41994-09-29 09:45:57 +0000254 return 0;
255 busy = 1;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000256 things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000257 for (;;) {
258 int i;
Tim Petersdbd9ba62000-07-09 03:09:57 +0000259 int (*func)(ANY *);
Guido van Rossuma9672091994-09-14 13:31:22 +0000260 ANY *arg;
261 i = pendingfirst;
262 if (i == pendinglast)
263 break; /* Queue empty */
264 func = pendingcalls[i].func;
265 arg = pendingcalls[i].arg;
266 pendingfirst = (i + 1) % NPENDINGCALLS;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000267 if (func(arg) < 0) {
268 busy = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000269 things_to_do = 1; /* We're not done yet */
Guido van Rossuma9672091994-09-14 13:31:22 +0000270 return -1;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000271 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000272 }
Guido van Rossum180d7b41994-09-29 09:45:57 +0000273 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000274 return 0;
275}
276
277
Guido van Rossum374a9221991-04-04 10:40:29 +0000278/* Status code for main loop (reason for stack unwind) */
279
280enum why_code {
281 WHY_NOT, /* No error */
282 WHY_EXCEPTION, /* Exception occurred */
283 WHY_RERAISE, /* Exception re-raised by 'finally' */
284 WHY_RETURN, /* 'return' statement */
285 WHY_BREAK /* 'break' statement */
286};
287
Tim Petersdbd9ba62000-07-09 03:09:57 +0000288static enum why_code do_raise(PyObject *, PyObject *, PyObject *);
289static int unpack_sequence(PyObject *, int, PyObject **);
Guido van Rossum1aa14831997-01-21 05:34:20 +0000290
Guido van Rossum374a9221991-04-04 10:40:29 +0000291
Guido van Rossumb209a111997-04-29 18:18:01 +0000292PyObject *
293PyEval_EvalCode(co, globals, locals)
294 PyCodeObject *co;
295 PyObject *globals;
296 PyObject *locals;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000297{
298 return eval_code2(co,
299 globals, locals,
Guido van Rossumb209a111997-04-29 18:18:01 +0000300 (PyObject **)NULL, 0,
301 (PyObject **)NULL, 0,
302 (PyObject **)NULL, 0,
303 (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000304}
305
306
307/* Interpreter main loop */
308
Guido van Rossum8861b741996-07-30 16:49:37 +0000309#ifndef MAX_RECURSION_DEPTH
310#define MAX_RECURSION_DEPTH 10000
311#endif
312
Guido van Rossumb209a111997-04-29 18:18:01 +0000313static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +0000314eval_code2(co, globals, locals,
315 args, argcount, kws, kwcount, defs, defcount, owner)
Guido van Rossumb209a111997-04-29 18:18:01 +0000316 PyCodeObject *co;
317 PyObject *globals;
318 PyObject *locals;
319 PyObject **args;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000320 int argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000321 PyObject **kws; /* length: 2*kwcount */
Guido van Rossum681d79a1995-07-18 14:51:37 +0000322 int kwcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000323 PyObject **defs;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000324 int defcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000325 PyObject *owner;
Guido van Rossum374a9221991-04-04 10:40:29 +0000326{
Guido van Rossum950361c1997-01-24 13:49:28 +0000327#ifdef DXPAIRS
328 int lastopcode = 0;
329#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000330 register unsigned char *next_instr;
Guido van Rossum50cd3481998-11-17 17:02:51 +0000331 register int opcode; /* Current opcode */
332 register int oparg; /* Current opcode argument, if any */
Guido van Rossumb209a111997-04-29 18:18:01 +0000333 register PyObject **stack_pointer;
Guido van Rossum374a9221991-04-04 10:40:29 +0000334 register enum why_code why; /* Reason for block stack unwind */
335 register int err; /* Error status -- nonzero if error */
Guido van Rossumb209a111997-04-29 18:18:01 +0000336 register PyObject *x; /* Result object -- NULL if error */
337 register PyObject *v; /* Temporary objects popped off stack */
338 register PyObject *w;
339 register PyObject *u;
340 register PyObject *t;
341 register PyFrameObject *f; /* Current frame */
Guido van Rossum50cd3481998-11-17 17:02:51 +0000342 register PyObject **fastlocals;
Guido van Rossum014518f1998-11-23 21:09:51 +0000343 PyObject *retval = NULL; /* Return value */
Guido van Rossum885553e1998-12-21 18:33:30 +0000344 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossumd076c731998-10-07 19:42:25 +0000345 unsigned char *first_instr;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000346#ifdef LLTRACE
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000347 int lltrace;
Guido van Rossum374a9221991-04-04 10:40:29 +0000348#endif
Guido van Rossum408027e1996-12-30 16:17:54 +0000349#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000350 /* Make it easier to find out where we are with a debugger */
Guido van Rossumb209a111997-04-29 18:18:01 +0000351 char *filename = PyString_AsString(co->co_filename);
Guido van Rossum99bec951992-09-03 20:29:45 +0000352#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000353
354/* Code access macros */
355
356#define GETCONST(i) Getconst(f, i)
357#define GETNAME(i) Getname(f, i)
358#define GETNAMEV(i) Getnamev(f, i)
Guido van Rossumd076c731998-10-07 19:42:25 +0000359#define INSTR_OFFSET() (next_instr - first_instr)
Guido van Rossum374a9221991-04-04 10:40:29 +0000360#define NEXTOP() (*next_instr++)
361#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
Guido van Rossumd076c731998-10-07 19:42:25 +0000362#define JUMPTO(x) (next_instr = first_instr + (x))
Guido van Rossum374a9221991-04-04 10:40:29 +0000363#define JUMPBY(x) (next_instr += (x))
364
365/* Stack manipulation macros */
366
367#define STACK_LEVEL() (stack_pointer - f->f_valuestack)
368#define EMPTY() (STACK_LEVEL() == 0)
369#define TOP() (stack_pointer[-1])
370#define BASIC_PUSH(v) (*stack_pointer++ = (v))
371#define BASIC_POP() (*--stack_pointer)
372
Guido van Rossum96a42c81992-01-12 02:29:51 +0000373#ifdef LLTRACE
374#define PUSH(v) (BASIC_PUSH(v), lltrace && prtrace(TOP(), "push"))
375#define POP() (lltrace && prtrace(TOP(), "pop"), BASIC_POP())
Guido van Rossum374a9221991-04-04 10:40:29 +0000376#else
377#define PUSH(v) BASIC_PUSH(v)
378#define POP() BASIC_POP()
379#endif
380
Guido van Rossum681d79a1995-07-18 14:51:37 +0000381/* Local variable macros */
382
383#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumb209a111997-04-29 18:18:01 +0000384#define SETLOCAL(i, value) do { Py_XDECREF(GETLOCAL(i)); \
Guido van Rossum681d79a1995-07-18 14:51:37 +0000385 GETLOCAL(i) = value; } while (0)
386
Guido van Rossuma027efa1997-05-05 20:56:21 +0000387/* Start of code */
388
Guido van Rossum8861b741996-07-30 16:49:37 +0000389#ifdef USE_STACKCHECK
Guido van Rossuma027efa1997-05-05 20:56:21 +0000390 if (tstate->recursion_depth%10 == 0 && PyOS_CheckStack()) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000391 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
Guido van Rossum8861b741996-07-30 16:49:37 +0000392 return NULL;
393 }
394#endif
395
Guido van Rossum681d79a1995-07-18 14:51:37 +0000396 if (globals == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000397 PyErr_SetString(PyExc_SystemError, "eval_code2: NULL globals");
Guido van Rossum6135a871995-01-09 17:53:26 +0000398 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000399 }
400
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000401#ifdef LLTRACE
Guido van Rossumb209a111997-04-29 18:18:01 +0000402 lltrace = PyDict_GetItemString(globals, "__lltrace__") != NULL;
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000403#endif
404
Guido van Rossumb209a111997-04-29 18:18:01 +0000405 f = PyFrame_New(
Guido van Rossuma027efa1997-05-05 20:56:21 +0000406 tstate, /*back*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000407 co, /*code*/
408 globals, /*globals*/
Guido van Rossum76836021997-01-20 04:26:20 +0000409 locals); /*locals*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000410 if (f == NULL)
411 return NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000412
Guido van Rossuma027efa1997-05-05 20:56:21 +0000413 tstate->frame = f;
Guido van Rossumdeb0c5e1997-01-27 23:42:36 +0000414 fastlocals = f->f_localsplus;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000415
416 if (co->co_argcount > 0 ||
417 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
418 int i;
419 int n = argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000420 PyObject *kwdict = NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000421 if (co->co_flags & CO_VARKEYWORDS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000422 kwdict = PyDict_New();
Guido van Rossum681d79a1995-07-18 14:51:37 +0000423 if (kwdict == NULL)
424 goto fail;
Guido van Rossum8c5df061997-01-24 04:19:24 +0000425 i = co->co_argcount;
426 if (co->co_flags & CO_VARARGS)
427 i++;
428 SETLOCAL(i, kwdict);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000429 }
430 if (argcount > co->co_argcount) {
431 if (!(co->co_flags & CO_VARARGS)) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000432 PyErr_Format(PyExc_TypeError,
433 "too many arguments; expected %d, got %d",
434 co->co_argcount, argcount);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000435 goto fail;
436 }
437 n = co->co_argcount;
438 }
439 for (i = 0; i < n; i++) {
440 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000441 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000442 SETLOCAL(i, x);
443 }
444 if (co->co_flags & CO_VARARGS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000445 u = PyTuple_New(argcount - n);
Guido van Rossum8c5df061997-01-24 04:19:24 +0000446 if (u == NULL)
447 goto fail;
448 SETLOCAL(co->co_argcount, u);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000449 for (i = n; i < argcount; i++) {
450 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000451 Py_INCREF(x);
452 PyTuple_SET_ITEM(u, i-n, x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000453 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000454 }
455 for (i = 0; i < kwcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000456 PyObject *keyword = kws[2*i];
457 PyObject *value = kws[2*i + 1];
Guido van Rossum681d79a1995-07-18 14:51:37 +0000458 int j;
Guido van Rossum25da5be1999-10-26 00:12:20 +0000459 if (keyword == NULL || !PyString_Check(keyword)) {
460 PyErr_SetString(PyExc_TypeError,
461 "keywords must be strings");
462 goto fail;
463 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000464 /* XXX slow -- speed up using dictionary? */
465 for (j = 0; j < co->co_argcount; j++) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000466 PyObject *nm = PyTuple_GET_ITEM(
467 co->co_varnames, j);
Guido van Rossumb209a111997-04-29 18:18:01 +0000468 if (PyObject_Compare(keyword, nm) == 0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000469 break;
470 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000471 /* Check errors from Compare */
472 if (PyErr_Occurred())
473 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000474 if (j >= co->co_argcount) {
475 if (kwdict == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000476 PyErr_Format(PyExc_TypeError,
Guido van Rossuma027efa1997-05-05 20:56:21 +0000477 "unexpected keyword argument: %.400s",
Jeremy Hylton76901512000-03-28 23:49:17 +0000478 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000479 goto fail;
480 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000481 PyDict_SetItem(kwdict, keyword, value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000482 }
483 else {
484 if (GETLOCAL(j) != NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +0000485 PyErr_Format(PyExc_TypeError,
486 "keyword parameter redefined: %.400s",
487 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000488 goto fail;
489 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000490 Py_INCREF(value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000491 SETLOCAL(j, value);
492 }
493 }
494 if (argcount < co->co_argcount) {
495 int m = co->co_argcount - defcount;
496 for (i = argcount; i < m; i++) {
497 if (GETLOCAL(i) == NULL) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000498 PyErr_Format(PyExc_TypeError,
499 "not enough arguments; expected %d, got %d",
500 m, i);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000501 goto fail;
502 }
503 }
504 if (n > m)
505 i = n - m;
506 else
507 i = 0;
508 for (; i < defcount; i++) {
509 if (GETLOCAL(m+i) == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000510 PyObject *def = defs[i];
511 Py_INCREF(def);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000512 SETLOCAL(m+i, def);
513 }
514 }
515 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000516 }
517 else {
518 if (argcount > 0 || kwcount > 0) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000519 PyErr_SetString(PyExc_TypeError,
520 "no arguments expected");
Guido van Rossum8c5df061997-01-24 04:19:24 +0000521 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000522 }
523 }
524
Guido van Rossuma027efa1997-05-05 20:56:21 +0000525 if (tstate->sys_tracefunc != NULL) {
526 /* tstate->sys_tracefunc, if defined, is a function that
527 will be called on *every* entry to a code block.
Guido van Rossum96a42c81992-01-12 02:29:51 +0000528 Its return value, if not None, is a function that
529 will be called at the start of each executed line
530 of code. (Actually, the function must return
531 itself in order to continue tracing.)
532 The trace functions are called with three arguments:
533 a pointer to the current frame, a string indicating
534 why the function is called, and an argument which
535 depends on the situation. The global trace function
536 (sys.trace) is also called whenever an exception
537 is detected. */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000538 if (call_trace(&tstate->sys_tracefunc,
539 &f->f_trace, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000540 Py_None/*XXX how to compute arguments now?*/)) {
Guido van Rossum96a42c81992-01-12 02:29:51 +0000541 /* Trace function raised an error */
Guido van Rossum8c5df061997-01-24 04:19:24 +0000542 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000543 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000544 }
545
Guido van Rossuma027efa1997-05-05 20:56:21 +0000546 if (tstate->sys_profilefunc != NULL) {
547 /* Similar for sys_profilefunc, except it needn't return
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000548 itself and isn't called for "line" events */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000549 if (call_trace(&tstate->sys_profilefunc,
550 (PyObject**)0, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000551 Py_None/*XXX*/)) {
Guido van Rossum8c5df061997-01-24 04:19:24 +0000552 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000553 }
554 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000555
Guido van Rossuma027efa1997-05-05 20:56:21 +0000556 if (++tstate->recursion_depth > MAX_RECURSION_DEPTH) {
557 --tstate->recursion_depth;
558 PyErr_SetString(PyExc_RuntimeError,
559 "Maximum recursion depth exceeded");
560 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +0000561 Py_DECREF(f);
Guido van Rossum8861b741996-07-30 16:49:37 +0000562 return NULL;
563 }
564
Guido van Rossumd076c731998-10-07 19:42:25 +0000565 _PyCode_GETCODEPTR(co, &first_instr);
566 next_instr = first_instr;
Guido van Rossum374a9221991-04-04 10:40:29 +0000567 stack_pointer = f->f_valuestack;
568
Guido van Rossum374a9221991-04-04 10:40:29 +0000569 why = WHY_NOT;
570 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000571 x = Py_None; /* Not a reference, just anything non-NULL */
Guido van Rossum374a9221991-04-04 10:40:29 +0000572
573 for (;;) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000574 /* Do periodic things. Doing this every time through
575 the loop would add too much overhead, so we do it
576 only every Nth instruction. We also do it if
577 ``things_to_do'' is set, i.e. when an asynchronous
578 event needs attention (e.g. a signal handler or
579 async I/O handler); see Py_AddPendingCall() and
580 Py_MakePendingCalls() above. */
Guido van Rossuma9672091994-09-14 13:31:22 +0000581
Guido van Rossuma027efa1997-05-05 20:56:21 +0000582 if (things_to_do || --tstate->ticker < 0) {
Guido van Rossum25ce5661997-08-02 03:10:38 +0000583 tstate->ticker = tstate->interp->checkinterval;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000584 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000585 if (Py_MakePendingCalls() < 0) {
586 why = WHY_EXCEPTION;
587 goto on_error;
588 }
589 }
Guido van Rossumdf0d00e1997-05-20 15:57:49 +0000590#if !defined(HAVE_SIGNAL_H) || defined(macintosh)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000591 /* If we have true signals, the signal handler
592 will call Py_AddPendingCall() so we don't
593 have to call sigcheck(). On the Mac and
594 DOS, alas, we have to call it. */
Guido van Rossumb209a111997-04-29 18:18:01 +0000595 if (PyErr_CheckSignals()) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000596 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +0000597 goto on_error;
598 }
Guido van Rossum70d44781997-01-21 06:15:24 +0000599#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000600
Guido van Rossume59214e1994-08-30 08:01:59 +0000601#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000602 if (interpreter_lock) {
603 /* Give another thread a chance */
604
Guido van Rossum25ce5661997-08-02 03:10:38 +0000605 if (PyThreadState_Swap(NULL) != tstate)
606 Py_FatalError("ceval: tstate mix-up");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000607 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000608
609 /* Other threads may run now */
610
Guido van Rossum65d5b571998-12-21 19:32:43 +0000611 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000612 if (PyThreadState_Swap(tstate) != NULL)
613 Py_FatalError("ceval: orphan tstate");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000614 }
615#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000616 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000617
Guido van Rossum374a9221991-04-04 10:40:29 +0000618 /* Extract opcode and argument */
Guido van Rossum99bec951992-09-03 20:29:45 +0000619
Guido van Rossum408027e1996-12-30 16:17:54 +0000620#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum99bec951992-09-03 20:29:45 +0000621 f->f_lasti = INSTR_OFFSET();
622#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000623
624 opcode = NEXTOP();
625 if (HAS_ARG(opcode))
626 oparg = NEXTARG();
Guido van Rossum950361c1997-01-24 13:49:28 +0000627#ifdef DYNAMIC_EXECUTION_PROFILE
628#ifdef DXPAIRS
629 dxpairs[lastopcode][opcode]++;
630 lastopcode = opcode;
631#endif
632 dxp[opcode]++;
633#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000634
Guido van Rossum96a42c81992-01-12 02:29:51 +0000635#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000636 /* Instruction tracing */
637
Guido van Rossum96a42c81992-01-12 02:29:51 +0000638 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000639 if (HAS_ARG(opcode)) {
640 printf("%d: %d, %d\n",
641 (int) (INSTR_OFFSET() - 3),
642 opcode, oparg);
643 }
644 else {
645 printf("%d: %d\n",
646 (int) (INSTR_OFFSET() - 1), opcode);
647 }
648 }
649#endif
650
651 /* Main switch on opcode */
652
653 switch (opcode) {
654
655 /* BEWARE!
656 It is essential that any operation that fails sets either
657 x to NULL, err to nonzero, or why to anything but WHY_NOT,
658 and that no operation that succeeds does this! */
659
660 /* case STOP_CODE: this is an error! */
661
662 case POP_TOP:
663 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000664 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000665 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000666
667 case ROT_TWO:
668 v = POP();
669 w = POP();
670 PUSH(v);
671 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000672 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000673
674 case ROT_THREE:
675 v = POP();
676 w = POP();
677 x = POP();
678 PUSH(v);
679 PUSH(x);
680 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000681 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000682
683 case DUP_TOP:
684 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000685 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000686 PUSH(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000687 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000688
689 case UNARY_POSITIVE:
690 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000691 x = PyNumber_Positive(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000692 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000693 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000694 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000695 break;
696
697 case UNARY_NEGATIVE:
698 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000699 x = PyNumber_Negative(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000700 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000701 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000702 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000703 break;
704
705 case UNARY_NOT:
706 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000707 err = PyObject_IsTrue(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000708 Py_DECREF(v);
Guido van Rossumfc490731997-05-06 15:06:49 +0000709 if (err == 0) {
710 Py_INCREF(Py_True);
711 PUSH(Py_True);
712 continue;
713 }
714 else if (err > 0) {
715 Py_INCREF(Py_False);
716 PUSH(Py_False);
717 err = 0;
718 continue;
719 }
Guido van Rossum374a9221991-04-04 10:40:29 +0000720 break;
721
722 case UNARY_CONVERT:
723 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000724 x = PyObject_Repr(v);
725 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000726 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000727 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000728 break;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000729
730 case UNARY_INVERT:
731 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000732 x = PyNumber_Invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000733 Py_DECREF(v);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000734 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000735 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000736 break;
Guido van Rossum374a9221991-04-04 10:40:29 +0000737
Guido van Rossum50564e81996-01-12 01:13:16 +0000738 case BINARY_POWER:
739 w = POP();
740 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000741 x = PyNumber_Power(v, w, Py_None);
Guido van Rossumb209a111997-04-29 18:18:01 +0000742 Py_DECREF(v);
743 Py_DECREF(w);
Guido van Rossum50564e81996-01-12 01:13:16 +0000744 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000745 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +0000746 break;
747
Guido van Rossum374a9221991-04-04 10:40:29 +0000748 case BINARY_MULTIPLY:
749 w = POP();
750 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000751 x = PyNumber_Multiply(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000752 Py_DECREF(v);
753 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000754 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000755 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000756 break;
757
758 case BINARY_DIVIDE:
759 w = POP();
760 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000761 x = PyNumber_Divide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000762 Py_DECREF(v);
763 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000764 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000765 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000766 break;
767
768 case BINARY_MODULO:
769 w = POP();
770 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000771 x = PyNumber_Remainder(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000772 Py_DECREF(v);
773 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000774 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000775 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000776 break;
777
778 case BINARY_ADD:
779 w = POP();
780 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000781 if (PyInt_Check(v) && PyInt_Check(w)) {
782 /* INLINE: int + int */
783 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000784 a = PyInt_AS_LONG(v);
785 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000786 i = a + b;
787 if ((i^a) < 0 && (i^b) < 0) {
788 PyErr_SetString(PyExc_OverflowError,
789 "integer addition");
790 x = NULL;
791 }
792 else
793 x = PyInt_FromLong(i);
794 }
795 else
796 x = PyNumber_Add(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000797 Py_DECREF(v);
798 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000799 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000800 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000801 break;
802
803 case BINARY_SUBTRACT:
804 w = POP();
805 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000806 if (PyInt_Check(v) && PyInt_Check(w)) {
807 /* INLINE: int - int */
808 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000809 a = PyInt_AS_LONG(v);
810 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000811 i = a - b;
812 if ((i^a) < 0 && (i^~b) < 0) {
813 PyErr_SetString(PyExc_OverflowError,
814 "integer subtraction");
815 x = NULL;
816 }
817 else
818 x = PyInt_FromLong(i);
819 }
820 else
821 x = PyNumber_Subtract(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000822 Py_DECREF(v);
823 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000824 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000825 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000826 break;
827
828 case BINARY_SUBSCR:
829 w = POP();
830 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000831 if (PyList_Check(v) && PyInt_Check(w)) {
832 /* INLINE: list[int] */
833 long i = PyInt_AsLong(w);
834 if (i < 0)
Guido van Rossumfa00e951998-07-08 15:02:37 +0000835 i += PyList_GET_SIZE(v);
Guido van Rossumc12da691997-07-17 23:12:42 +0000836 if (i < 0 ||
Guido van Rossumfa00e951998-07-08 15:02:37 +0000837 i >= PyList_GET_SIZE(v)) {
Guido van Rossumc12da691997-07-17 23:12:42 +0000838 PyErr_SetString(PyExc_IndexError,
839 "list index out of range");
840 x = NULL;
841 }
842 else {
Guido van Rossumfa00e951998-07-08 15:02:37 +0000843 x = PyList_GET_ITEM(v, i);
Guido van Rossumc12da691997-07-17 23:12:42 +0000844 Py_INCREF(x);
845 }
846 }
847 else
848 x = PyObject_GetItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000849 Py_DECREF(v);
850 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000851 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000852 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000853 break;
854
Guido van Rossum7928cd71991-10-24 14:59:31 +0000855 case BINARY_LSHIFT:
856 w = POP();
857 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000858 x = PyNumber_Lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000859 Py_DECREF(v);
860 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000861 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000862 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000863 break;
864
865 case BINARY_RSHIFT:
866 w = POP();
867 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000868 x = PyNumber_Rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000869 Py_DECREF(v);
870 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000871 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000872 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000873 break;
874
875 case BINARY_AND:
876 w = POP();
877 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000878 x = PyNumber_And(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000879 Py_DECREF(v);
880 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000881 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000882 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000883 break;
884
885 case BINARY_XOR:
886 w = POP();
887 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000888 x = PyNumber_Xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000889 Py_DECREF(v);
890 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000891 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000892 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000893 break;
894
895 case BINARY_OR:
896 w = POP();
897 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000898 x = PyNumber_Or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000899 Py_DECREF(v);
900 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000901 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000902 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000903 break;
904
Guido van Rossum374a9221991-04-04 10:40:29 +0000905 case SLICE+0:
906 case SLICE+1:
907 case SLICE+2:
908 case SLICE+3:
909 if ((opcode-SLICE) & 2)
910 w = POP();
911 else
912 w = NULL;
913 if ((opcode-SLICE) & 1)
914 v = POP();
915 else
916 v = NULL;
917 u = POP();
918 x = apply_slice(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000919 Py_DECREF(u);
920 Py_XDECREF(v);
921 Py_XDECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000922 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000923 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000924 break;
925
926 case STORE_SLICE+0:
927 case STORE_SLICE+1:
928 case STORE_SLICE+2:
929 case STORE_SLICE+3:
930 if ((opcode-STORE_SLICE) & 2)
931 w = POP();
932 else
933 w = NULL;
934 if ((opcode-STORE_SLICE) & 1)
935 v = POP();
936 else
937 v = NULL;
938 u = POP();
939 t = POP();
940 err = assign_slice(u, v, w, t); /* u[v:w] = t */
Guido van Rossumb209a111997-04-29 18:18:01 +0000941 Py_DECREF(t);
942 Py_DECREF(u);
943 Py_XDECREF(v);
944 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000945 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000946 break;
947
948 case DELETE_SLICE+0:
949 case DELETE_SLICE+1:
950 case DELETE_SLICE+2:
951 case DELETE_SLICE+3:
952 if ((opcode-DELETE_SLICE) & 2)
953 w = POP();
954 else
955 w = NULL;
956 if ((opcode-DELETE_SLICE) & 1)
957 v = POP();
958 else
959 v = NULL;
960 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000961 err = assign_slice(u, v, w, (PyObject *)NULL);
Guido van Rossum374a9221991-04-04 10:40:29 +0000962 /* del u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +0000963 Py_DECREF(u);
964 Py_XDECREF(v);
965 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000966 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000967 break;
968
969 case STORE_SUBSCR:
970 w = POP();
971 v = POP();
972 u = POP();
973 /* v[w] = u */
Guido van Rossumfc490731997-05-06 15:06:49 +0000974 err = PyObject_SetItem(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +0000975 Py_DECREF(u);
976 Py_DECREF(v);
977 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000978 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000979 break;
980
981 case DELETE_SUBSCR:
982 w = POP();
983 v = POP();
984 /* del v[w] */
Guido van Rossumfc490731997-05-06 15:06:49 +0000985 err = PyObject_DelItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000986 Py_DECREF(v);
987 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000988 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000989 break;
990
991 case PRINT_EXPR:
992 v = POP();
Guido van Rossumaa06b0e1997-12-26 22:15:57 +0000993 /* Print value except if None */
994 /* After printing, also assign to '_' */
995 /* Before, set '_' to None to avoid recursion */
Guido van Rossumb209a111997-04-29 18:18:01 +0000996 if (v != Py_None &&
Guido van Rossuma027efa1997-05-05 20:56:21 +0000997 (err = PyDict_SetItemString(
Guido van Rossumaa06b0e1997-12-26 22:15:57 +0000998 f->f_builtins, "_", Py_None)) == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +0000999 err = Py_FlushLine();
Guido van Rossumc12da691997-07-17 23:12:42 +00001000 if (err == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +00001001 x = PySys_GetObject("stdout");
Guido van Rossum8f183201997-12-31 05:53:15 +00001002 if (x == NULL) {
1003 PyErr_SetString(
1004 PyExc_RuntimeError,
1005 "lost sys.stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00001006 err = -1;
Guido van Rossum8f183201997-12-31 05:53:15 +00001007 }
Guido van Rossumbe270261997-05-22 22:26:18 +00001008 }
1009 if (err == 0)
1010 err = PyFile_WriteObject(v, x, 0);
1011 if (err == 0) {
1012 PyFile_SoftSpace(x, 1);
1013 err = Py_FlushLine();
1014 }
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001015 if (err == 0) {
1016 err = PyDict_SetItemString(
1017 f->f_builtins, "_", v);
1018 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001019 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001020 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001021 break;
1022
1023 case PRINT_ITEM:
1024 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001025 w = PySys_GetObject("stdout");
Guido van Rossum8f183201997-12-31 05:53:15 +00001026 if (w == NULL) {
1027 PyErr_SetString(PyExc_RuntimeError,
1028 "lost sys.stdout");
1029 err = -1;
1030 }
1031 else if (PyFile_SoftSpace(w, 1))
Guido van Rossumbe270261997-05-22 22:26:18 +00001032 err = PyFile_WriteString(" ", w);
1033 if (err == 0)
1034 err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
Guido van Rossumb209a111997-04-29 18:18:01 +00001035 if (err == 0 && PyString_Check(v)) {
Guido van Rossumc6004111993-11-05 10:22:19 +00001036 /* XXX move into writeobject() ? */
Guido van Rossumb209a111997-04-29 18:18:01 +00001037 char *s = PyString_AsString(v);
1038 int len = PyString_Size(v);
Guido van Rossum7f7f2741995-02-10 17:01:56 +00001039 if (len > 0 &&
1040 isspace(Py_CHARMASK(s[len-1])) &&
Guido van Rossumc6004111993-11-05 10:22:19 +00001041 s[len-1] != ' ')
Guido van Rossumb209a111997-04-29 18:18:01 +00001042 PyFile_SoftSpace(w, 0);
Guido van Rossum374a9221991-04-04 10:40:29 +00001043 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001044 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001045 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001046 break;
1047
1048 case PRINT_NEWLINE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001049 x = PySys_GetObject("stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001050 if (x == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00001051 PyErr_SetString(PyExc_RuntimeError,
1052 "lost sys.stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001053 else {
Guido van Rossumbe270261997-05-22 22:26:18 +00001054 err = PyFile_WriteString("\n", x);
1055 if (err == 0)
1056 PyFile_SoftSpace(x, 0);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001057 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001058 break;
1059
1060 case BREAK_LOOP:
1061 why = WHY_BREAK;
1062 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001063
Guido van Rossumf10570b1995-07-07 22:53:21 +00001064 case RAISE_VARARGS:
1065 u = v = w = NULL;
1066 switch (oparg) {
1067 case 3:
1068 u = POP(); /* traceback */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001069 /* Fallthrough */
1070 case 2:
1071 v = POP(); /* value */
1072 /* Fallthrough */
1073 case 1:
1074 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001075 case 0: /* Fallthrough */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001076 why = do_raise(w, v, u);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001077 break;
1078 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001079 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001080 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001081 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001082 break;
1083 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001084 break;
1085
1086 case LOAD_LOCALS:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001087 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001088 PyErr_SetString(PyExc_SystemError,
1089 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001090 break;
1091 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001092 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001093 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001094 break;
1095
1096 case RETURN_VALUE:
1097 retval = POP();
1098 why = WHY_RETURN;
1099 break;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001100
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001101 case EXEC_STMT:
1102 w = POP();
1103 v = POP();
1104 u = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001105 err = exec_statement(f, u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001106 Py_DECREF(u);
1107 Py_DECREF(v);
1108 Py_DECREF(w);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001109 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001110
Guido van Rossum374a9221991-04-04 10:40:29 +00001111 case POP_BLOCK:
1112 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001113 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001114 while (STACK_LEVEL() > b->b_level) {
1115 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001116 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001117 }
1118 }
1119 break;
1120
1121 case END_FINALLY:
1122 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001123 if (PyInt_Check(v)) {
1124 why = (enum why_code) PyInt_AsLong(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001125 if (why == WHY_RETURN)
1126 retval = POP();
1127 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001128 else if (PyString_Check(v) || PyClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001129 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001130 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001131 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001132 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001133 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001134 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001135 else if (v != Py_None) {
1136 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001137 "'finally' pops bad exception");
1138 why = WHY_EXCEPTION;
1139 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001140 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001141 break;
1142
1143 case BUILD_CLASS:
Guido van Rossum25831651993-05-19 14:50:45 +00001144 u = POP();
Guido van Rossum374a9221991-04-04 10:40:29 +00001145 v = POP();
Guido van Rossum25831651993-05-19 14:50:45 +00001146 w = POP();
1147 x = build_class(u, v, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001148 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001149 Py_DECREF(u);
1150 Py_DECREF(v);
1151 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001152 break;
1153
1154 case STORE_NAME:
1155 w = GETNAMEV(oparg);
1156 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001157 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001158 PyErr_SetString(PyExc_SystemError,
1159 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001160 break;
1161 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001162 err = PyDict_SetItem(x, w, v);
1163 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001164 break;
1165
1166 case DELETE_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001167 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001168 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001169 PyErr_SetString(PyExc_SystemError,
1170 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001171 break;
1172 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001173 if ((err = PyDict_DelItem(x, w)) != 0)
1174 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001175 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001176
1177#ifdef CASE_TOO_BIG
1178 default: switch (opcode) {
1179#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001180
1181 case UNPACK_TUPLE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001182 case UNPACK_LIST:
1183 v = POP();
Barry Warsawe42b18f1997-08-25 22:13:04 +00001184 if (PyTuple_Check(v)) {
1185 if (PyTuple_Size(v) != oparg) {
1186 PyErr_SetString(PyExc_ValueError,
1187 "unpack tuple of wrong size");
1188 why = WHY_EXCEPTION;
1189 }
1190 else {
1191 for (; --oparg >= 0; ) {
1192 w = PyTuple_GET_ITEM(v, oparg);
1193 Py_INCREF(w);
1194 PUSH(w);
1195 }
1196 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001197 }
Barry Warsawe42b18f1997-08-25 22:13:04 +00001198 else if (PyList_Check(v)) {
1199 if (PyList_Size(v) != oparg) {
1200 PyErr_SetString(PyExc_ValueError,
1201 "unpack list of wrong size");
1202 why = WHY_EXCEPTION;
1203 }
1204 else {
1205 for (; --oparg >= 0; ) {
1206 w = PyList_GET_ITEM(v, oparg);
1207 Py_INCREF(w);
1208 PUSH(w);
1209 }
1210 }
1211 }
1212 else if (PySequence_Check(v)) {
1213 if (unpack_sequence(v, oparg,
1214 stack_pointer + oparg))
1215 stack_pointer += oparg;
1216 else
1217 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001218 }
1219 else {
Barry Warsawe42b18f1997-08-25 22:13:04 +00001220 PyErr_SetString(PyExc_TypeError,
1221 "unpack non-sequence");
1222 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001223 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001224 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001225 break;
1226
1227 case STORE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001228 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001229 v = POP();
1230 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001231 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1232 Py_DECREF(v);
1233 Py_DECREF(u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001234 break;
1235
1236 case DELETE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001237 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001238 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001239 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1240 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001241 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001242 break;
1243
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001244 case STORE_GLOBAL:
1245 w = GETNAMEV(oparg);
1246 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001247 err = PyDict_SetItem(f->f_globals, w, v);
1248 Py_DECREF(v);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001249 break;
1250
1251 case DELETE_GLOBAL:
1252 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001253 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
1254 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001255 break;
1256
Guido van Rossum374a9221991-04-04 10:40:29 +00001257 case LOAD_CONST:
1258 x = GETCONST(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001259 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001260 PUSH(x);
1261 break;
1262
1263 case LOAD_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001264 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001265 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001266 PyErr_SetString(PyExc_SystemError,
1267 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001268 break;
1269 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001270 x = PyDict_GetItem(x, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001271 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001272 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001273 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001274 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001275 if (x == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001276 PyErr_SetObject(
1277 PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001278 break;
1279 }
1280 }
1281 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001282 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001283 PUSH(x);
1284 break;
1285
1286 case LOAD_GLOBAL:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001287 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001288 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001289 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001290 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001291 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001292 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001293 break;
1294 }
1295 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001296 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001297 PUSH(x);
1298 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001299
Guido van Rossum9bfef441993-03-29 10:43:31 +00001300 case LOAD_FAST:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001301 x = GETLOCAL(oparg);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001302 if (x == NULL) {
Guido van Rossum87460821999-06-22 14:47:32 +00001303 PyErr_SetObject(PyExc_UnboundLocalError,
Guido van Rossumb209a111997-04-29 18:18:01 +00001304 PyTuple_GetItem(co->co_varnames,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001305 oparg));
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001306 break;
1307 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001308 Py_INCREF(x);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001309 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001310 if (x != NULL) continue;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001311 break;
1312
1313 case STORE_FAST:
Guido van Rossum25831651993-05-19 14:50:45 +00001314 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001315 SETLOCAL(oparg, v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001316 continue;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001317
1318 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001319 x = GETLOCAL(oparg);
1320 if (x == NULL) {
Guido van Rossum87460821999-06-22 14:47:32 +00001321 PyErr_SetObject(PyExc_UnboundLocalError,
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001322 PyTuple_GetItem(co->co_varnames,
1323 oparg));
1324 break;
1325 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001326 SETLOCAL(oparg, NULL);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001327 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001328
1329 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001330 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001331 if (x != NULL) {
1332 for (; --oparg >= 0;) {
1333 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001334 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001335 }
1336 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001337 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001338 }
1339 break;
1340
1341 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001342 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001343 if (x != NULL) {
1344 for (; --oparg >= 0;) {
1345 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001346 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001347 }
1348 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001349 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001350 }
1351 break;
1352
1353 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001354 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001355 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001356 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001357 break;
1358
1359 case LOAD_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001360 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001361 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001362 x = PyObject_GetAttr(v, w);
1363 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001364 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001365 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001366 break;
1367
1368 case COMPARE_OP:
1369 w = POP();
1370 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +00001371 if (PyInt_Check(v) && PyInt_Check(w)) {
1372 /* INLINE: cmp(int, int) */
1373 register long a, b;
1374 register int res;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001375 a = PyInt_AS_LONG(v);
1376 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001377 switch (oparg) {
1378 case LT: res = a < b; break;
1379 case LE: res = a <= b; break;
1380 case EQ: res = a == b; break;
1381 case NE: res = a != b; break;
1382 case GT: res = a > b; break;
1383 case GE: res = a >= b; break;
1384 case IS: res = v == w; break;
1385 case IS_NOT: res = v != w; break;
1386 default: goto slow_compare;
1387 }
1388 x = res ? Py_True : Py_False;
1389 Py_INCREF(x);
1390 }
1391 else {
1392 slow_compare:
1393 x = cmp_outcome(oparg, v, w);
1394 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001395 Py_DECREF(v);
1396 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001397 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001398 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001399 break;
1400
1401 case IMPORT_NAME:
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001402 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001403 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001404 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001405 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001406 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001407 break;
1408 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001409 u = find_from_args(f, INSTR_OFFSET());
1410 if (u == NULL) {
1411 x = u;
1412 break;
Guido van Rossum24c13741995-02-14 09:42:43 +00001413 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001414 w = Py_BuildValue("(OOOO)",
Guido van Rossum681d79a1995-07-18 14:51:37 +00001415 w,
1416 f->f_globals,
Guido van Rossuma027efa1997-05-05 20:56:21 +00001417 f->f_locals == NULL ?
1418 Py_None : f->f_locals,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001419 u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001420 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001421 if (w == NULL) {
1422 x = NULL;
1423 break;
1424 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001425 x = PyEval_CallObject(x, w);
1426 Py_DECREF(w);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001427 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001428 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001429 break;
1430
1431 case IMPORT_FROM:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001432 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001433 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001434 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001435 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001436 PyErr_SetString(PyExc_SystemError,
1437 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001438 break;
1439 }
1440 err = import_from(x, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001441 PyFrame_LocalsToFast(f, 0);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001442 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001443 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001444
Guido van Rossum374a9221991-04-04 10:40:29 +00001445 case JUMP_FORWARD:
1446 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001447 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001448
1449 case JUMP_IF_FALSE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001450 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001451 if (err > 0)
1452 err = 0;
1453 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00001454 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001455 else
1456 break;
1457 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001458
1459 case JUMP_IF_TRUE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001460 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001461 if (err > 0) {
1462 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00001463 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001464 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001465 else if (err == 0)
1466 ;
1467 else
1468 break;
1469 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001470
1471 case JUMP_ABSOLUTE:
1472 JUMPTO(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001473 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001474
1475 case FOR_LOOP:
1476 /* for v in s: ...
1477 On entry: stack contains s, i.
1478 On exit: stack contains s, i+1, s[i];
1479 but if loop exhausted:
1480 s, i are popped, and we jump */
1481 w = POP(); /* Loop index */
1482 v = POP(); /* Sequence object */
1483 u = loop_subscript(v, w);
1484 if (u != NULL) {
1485 PUSH(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001486 x = PyInt_FromLong(PyInt_AsLong(w)+1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001487 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001488 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001489 PUSH(u);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001490 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001491 }
1492 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001493 Py_DECREF(v);
1494 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001495 /* A NULL can mean "s exhausted"
1496 but also an error: */
Guido van Rossumb209a111997-04-29 18:18:01 +00001497 if (PyErr_Occurred())
Guido van Rossum374a9221991-04-04 10:40:29 +00001498 why = WHY_EXCEPTION;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001499 else {
Guido van Rossum374a9221991-04-04 10:40:29 +00001500 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001501 continue;
1502 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001503 }
1504 break;
1505
1506 case SETUP_LOOP:
1507 case SETUP_EXCEPT:
1508 case SETUP_FINALLY:
Guido van Rossumb209a111997-04-29 18:18:01 +00001509 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Guido van Rossum374a9221991-04-04 10:40:29 +00001510 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001511 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001512
1513 case SET_LINENO:
Guido van Rossum96a42c81992-01-12 02:29:51 +00001514#ifdef LLTRACE
1515 if (lltrace)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001516 printf("--- %s:%d \n", filename, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001517#endif
Guido van Rossum96a42c81992-01-12 02:29:51 +00001518 f->f_lineno = oparg;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001519 if (f->f_trace == NULL)
1520 continue;
1521 /* Trace each line of code reached */
1522 f->f_lasti = INSTR_OFFSET();
1523 err = call_trace(&f->f_trace, &f->f_trace,
Guido van Rossumb209a111997-04-29 18:18:01 +00001524 f, "line", Py_None);
Guido van Rossum374a9221991-04-04 10:40:29 +00001525 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001526
1527 case CALL_FUNCTION:
Jeremy Hylton76901512000-03-28 23:49:17 +00001528 case CALL_FUNCTION_VAR:
1529 case CALL_FUNCTION_KW:
1530 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00001531 {
Jeremy Hylton76901512000-03-28 23:49:17 +00001532 int na = oparg & 0xff;
1533 int nk = (oparg>>8) & 0xff;
1534 int flags = (opcode - CALL_FUNCTION) & 3;
1535 int n = na + 2*nk + (flags & 1) + ((flags >> 1) & 1);
1536 PyObject **pfunc = stack_pointer - n - 1;
1537 PyObject *func = *pfunc;
1538 PyObject *self = NULL;
1539 PyObject *class = NULL;
1540 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
1541 if (PyMethod_Check(func)) {
1542 self = PyMethod_Self(func);
1543 class = PyMethod_Class(func);
1544 func = PyMethod_Function(func);
1545 Py_INCREF(func);
1546 if (self != NULL) {
1547 Py_INCREF(self);
1548 Py_DECREF(*pfunc);
1549 *pfunc = self;
1550 na++;
1551 n++;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001552 }
1553 else {
Jeremy Hylton76901512000-03-28 23:49:17 +00001554 /* Unbound methods must be called with an
1555 instance of the class (or a derived
1556 class) as first argument */
1557 if (na > 0 && (self = stack_pointer[-n]) != NULL
1558 && PyInstance_Check(self)
1559 && PyClass_IsSubclass((PyObject *)
1560 (((PyInstanceObject *)self)->in_class),
1561 class))
1562 /* Handy-dandy */ ;
1563 else {
1564 PyErr_SetString(PyExc_TypeError,
1565 "unbound method must be called with class instance 1st argument");
1566 x = NULL;
1567 break;
1568 }
1569 }
1570 }
1571 else
1572 Py_INCREF(func);
1573 if (PyFunction_Check(func) && flags == 0) {
1574 PyObject *co = PyFunction_GetCode(func);
1575 PyObject *globals = PyFunction_GetGlobals(func);
1576 PyObject *argdefs = PyFunction_GetDefaults(func);
1577 PyObject **d;
1578 int nd;
1579 if (argdefs != NULL) {
1580 d = &PyTuple_GET_ITEM(argdefs, 0);
1581 nd = ((PyTupleObject *)argdefs)->ob_size;
1582 }
1583 else {
1584 d = NULL;
1585 nd = 0;
1586 }
1587 x = eval_code2((PyCodeObject *)co, globals,
1588 (PyObject *)NULL, stack_pointer-n, na,
1589 stack_pointer-2*nk, nk, d, nd,
1590 class);
1591 }
1592 else {
1593 int nstar = 0;
Jeremy Hylton387b1012000-03-31 01:22:54 +00001594 PyObject *callargs;
Jeremy Hylton76901512000-03-28 23:49:17 +00001595 PyObject *stararg = 0;
1596 PyObject *kwdict = NULL;
1597 if (flags & 2) {
1598 kwdict = POP();
1599 if (!PyDict_Check(kwdict)) {
1600 PyErr_SetString(PyExc_TypeError,
1601 "** argument must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00001602 goto extcall_fail;
Jeremy Hylton76901512000-03-28 23:49:17 +00001603 }
1604 }
1605 if (flags & 1) {
1606 stararg = POP();
1607 if (!PySequence_Check(stararg)) {
1608 PyErr_SetString(PyExc_TypeError,
1609 "* argument must be a sequence");
Guido van Rossum25826c92000-04-21 21:17:39 +00001610 goto extcall_fail;
Jeremy Hylton76901512000-03-28 23:49:17 +00001611 }
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001612 /* Convert abstract sequence to concrete tuple */
1613 if (!PyTuple_Check(stararg)) {
1614 PyObject *t = NULL;
1615 t = PySequence_Tuple(stararg);
1616 if (t == NULL) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001617 goto extcall_fail;
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001618 }
1619 Py_DECREF(stararg);
1620 stararg = t;
1621 }
1622 nstar = PyTuple_GET_SIZE(stararg);
Barry Warsaw4961ef72000-03-29 18:30:03 +00001623 if (nstar < 0) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001624 goto extcall_fail;
Barry Warsaw4961ef72000-03-29 18:30:03 +00001625 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001626 }
1627 if (nk > 0) {
1628 if (kwdict == NULL) {
1629 kwdict = PyDict_New();
1630 if (kwdict == NULL) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001631 goto extcall_fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001632 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001633 }
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001634 else {
1635 PyObject *d = PyDict_Copy(kwdict);
1636 if (d == NULL) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001637 goto extcall_fail;
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001638 }
1639 Py_DECREF(kwdict);
1640 kwdict = d;
1641 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001642 err = 0;
1643 while (--nk >= 0) {
1644 PyObject *value = POP();
1645 PyObject *key = POP();
1646 if (PyDict_GetItem(kwdict, key) != NULL) {
1647 err = 1;
1648 PyErr_Format(PyExc_TypeError,
1649 "keyword parameter redefined: %.400s",
1650 PyString_AsString(key));
Jeremy Hylton387b1012000-03-31 01:22:54 +00001651 Py_DECREF(key);
1652 Py_DECREF(value);
Guido van Rossum25826c92000-04-21 21:17:39 +00001653 goto extcall_fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001654 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001655 err = PyDict_SetItem(kwdict, key, value);
1656 Py_DECREF(key);
1657 Py_DECREF(value);
1658 if (err)
1659 break;
1660 }
1661 if (err) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001662 extcall_fail:
1663 Py_XDECREF(kwdict);
1664 Py_XDECREF(stararg);
1665 Py_DECREF(func);
1666 x=NULL;
Jeremy Hylton76901512000-03-28 23:49:17 +00001667 break;
1668 }
Guido van Rossumf10570b1995-07-07 22:53:21 +00001669 }
Jeremy Hylton387b1012000-03-31 01:22:54 +00001670 callargs = PyTuple_New(na + nstar);
1671 if (callargs == NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +00001672 x = NULL;
1673 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001674 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001675 if (stararg) {
Jeremy Hylton76901512000-03-28 23:49:17 +00001676 int i;
Jeremy Hylton76901512000-03-28 23:49:17 +00001677 for (i = 0; i < nstar; i++) {
1678 PyObject *a = PyTuple_GET_ITEM(stararg, i);
1679 Py_INCREF(a);
Jeremy Hylton387b1012000-03-31 01:22:54 +00001680 PyTuple_SET_ITEM(callargs, na + i, a);
Jeremy Hylton76901512000-03-28 23:49:17 +00001681 }
1682 Py_DECREF(stararg);
1683 }
1684 while (--na >= 0) {
1685 w = POP();
Jeremy Hylton387b1012000-03-31 01:22:54 +00001686 PyTuple_SET_ITEM(callargs, na, w);
Jeremy Hylton76901512000-03-28 23:49:17 +00001687 }
Jeremy Hylton387b1012000-03-31 01:22:54 +00001688 x = PyEval_CallObjectWithKeywords(func,
1689 callargs,
1690 kwdict);
1691 Py_DECREF(callargs);
Jeremy Hylton76901512000-03-28 23:49:17 +00001692 Py_XDECREF(kwdict);
1693 }
1694 Py_DECREF(func);
1695 while (stack_pointer > pfunc) {
1696 w = POP();
1697 Py_DECREF(w);
1698 }
1699 PUSH(x);
1700 if (x != NULL) continue;
1701 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001702 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001703
Guido van Rossum681d79a1995-07-18 14:51:37 +00001704 case MAKE_FUNCTION:
1705 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00001706 x = PyFunction_New(v, f->f_globals);
1707 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001708 /* XXX Maybe this should be a separate opcode? */
1709 if (x != NULL && oparg > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001710 v = PyTuple_New(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001711 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001712 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001713 x = NULL;
1714 break;
1715 }
1716 while (--oparg >= 0) {
1717 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001718 PyTuple_SET_ITEM(v, oparg, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001719 }
1720 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001721 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001722 }
1723 PUSH(x);
1724 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001725
1726 case BUILD_SLICE:
1727 if (oparg == 3)
1728 w = POP();
1729 else
1730 w = NULL;
1731 v = POP();
1732 u = POP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00001733 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001734 Py_DECREF(u);
1735 Py_DECREF(v);
1736 Py_XDECREF(w);
Guido van Rossum8861b741996-07-30 16:49:37 +00001737 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001738 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00001739 break;
1740
1741
Guido van Rossum374a9221991-04-04 10:40:29 +00001742 default:
1743 fprintf(stderr,
1744 "XXX lineno: %d, opcode: %d\n",
Guido van Rossum96a42c81992-01-12 02:29:51 +00001745 f->f_lineno, opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00001746 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00001747 why = WHY_EXCEPTION;
1748 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001749
1750#ifdef CASE_TOO_BIG
1751 }
1752#endif
1753
Guido van Rossum374a9221991-04-04 10:40:29 +00001754 } /* switch */
1755
1756 on_error:
1757
1758 /* Quickly continue if no error occurred */
1759
1760 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001761 if (err == 0 && x != NULL) {
1762#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001763 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001764 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00001765 fprintf(stderr,
1766 "XXX undetected error\n");
1767 else
1768#endif
1769 continue; /* Normal, fast path */
1770 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001771 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00001772 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00001773 err = 0;
1774 }
1775
Guido van Rossum374a9221991-04-04 10:40:29 +00001776 /* Double-check exception status */
1777
1778 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001779 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001780 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001781 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00001782 why = WHY_EXCEPTION;
1783 }
1784 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001785#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00001786 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001787 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001788 if (PyErr_Occurred()) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001789 fprintf(stderr,
1790 "XXX undetected error (why=%d)\n",
1791 why);
1792 why = WHY_EXCEPTION;
1793 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001794 }
1795#endif
1796
1797 /* Log traceback info if this is a real exception */
1798
1799 if (why == WHY_EXCEPTION) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001800 f->f_lasti = INSTR_OFFSET() - 1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001801 if (HAS_ARG(opcode))
Guido van Rossum96a42c81992-01-12 02:29:51 +00001802 f->f_lasti -= 2;
Guido van Rossumb209a111997-04-29 18:18:01 +00001803 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001804
Guido van Rossume59214e1994-08-30 08:01:59 +00001805 if (f->f_trace)
1806 call_exc_trace(&f->f_trace, &f->f_trace, f);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001807 if (tstate->sys_profilefunc)
1808 call_exc_trace(&tstate->sys_profilefunc,
1809 (PyObject**)0, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00001810 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001811
1812 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
1813
1814 if (why == WHY_RERAISE)
1815 why = WHY_EXCEPTION;
1816
1817 /* Unwind stacks if a (pseudo) exception occurred */
1818
1819 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001820 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001821 while (STACK_LEVEL() > b->b_level) {
1822 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001823 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001824 }
1825 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
1826 why = WHY_NOT;
1827 JUMPTO(b->b_handler);
1828 break;
1829 }
1830 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00001831 (b->b_type == SETUP_EXCEPT &&
1832 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001833 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001834 PyObject *exc, *val, *tb;
1835 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001836 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001837 val = Py_None;
1838 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00001839 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001840 /* Make the raw exception data
1841 available to the handler,
1842 so a program can emulate the
1843 Python main loop. Don't do
1844 this for 'finally'. */
1845 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00001846 PyErr_NormalizeException(
1847 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001848 set_exc_info(tstate,
1849 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001850 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001851 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001852 PUSH(val);
1853 PUSH(exc);
1854 }
1855 else {
1856 if (why == WHY_RETURN)
1857 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00001858 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00001859 PUSH(v);
1860 }
1861 why = WHY_NOT;
1862 JUMPTO(b->b_handler);
1863 break;
1864 }
1865 } /* unwind stack */
1866
1867 /* End the loop if we still have an error (or return) */
1868
1869 if (why != WHY_NOT)
1870 break;
1871
1872 } /* main loop */
1873
1874 /* Pop remaining stack entries */
1875
1876 while (!EMPTY()) {
1877 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001878 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001879 }
1880
Guido van Rossum96a42c81992-01-12 02:29:51 +00001881 if (why != WHY_RETURN)
1882 retval = NULL;
1883
Guido van Rossume59214e1994-08-30 08:01:59 +00001884 if (f->f_trace) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001885 if (why == WHY_RETURN) {
Guido van Rossume59214e1994-08-30 08:01:59 +00001886 if (call_trace(&f->f_trace, &f->f_trace, f,
1887 "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001888 Py_XDECREF(retval);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001889 retval = NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001890 why = WHY_EXCEPTION;
Guido van Rossum96a42c81992-01-12 02:29:51 +00001891 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001892 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001893 }
1894
Guido van Rossuma027efa1997-05-05 20:56:21 +00001895 if (tstate->sys_profilefunc && why == WHY_RETURN) {
1896 if (call_trace(&tstate->sys_profilefunc, (PyObject**)0,
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001897 f, "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001898 Py_XDECREF(retval);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001899 retval = NULL;
1900 why = WHY_EXCEPTION;
1901 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001902 }
Guido van Rossuma4240131997-01-21 21:18:36 +00001903
Guido van Rossuma027efa1997-05-05 20:56:21 +00001904 reset_exc_info(tstate);
1905
1906 --tstate->recursion_depth;
Guido van Rossum8c5df061997-01-24 04:19:24 +00001907
1908 fail: /* Jump here from prelude on failure */
Guido van Rossum96a42c81992-01-12 02:29:51 +00001909
Guido van Rossum374a9221991-04-04 10:40:29 +00001910 /* Restore previous frame and release the current one */
Guido van Rossum681d79a1995-07-18 14:51:37 +00001911
Guido van Rossuma027efa1997-05-05 20:56:21 +00001912 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +00001913 Py_DECREF(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001914
Guido van Rossum96a42c81992-01-12 02:29:51 +00001915 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00001916}
1917
Guido van Rossuma027efa1997-05-05 20:56:21 +00001918static void
1919set_exc_info(tstate, type, value, tb)
1920 PyThreadState *tstate;
1921 PyObject *type;
1922 PyObject *value;
1923 PyObject *tb;
1924{
1925 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001926 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00001927
Guido van Rossuma027efa1997-05-05 20:56:21 +00001928 frame = tstate->frame;
1929 if (frame->f_exc_type == NULL) {
1930 /* This frame didn't catch an exception before */
1931 /* Save previous exception of this thread in this frame */
Guido van Rossuma027efa1997-05-05 20:56:21 +00001932 if (tstate->exc_type == NULL) {
1933 Py_INCREF(Py_None);
1934 tstate->exc_type = Py_None;
1935 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001936 tmp_type = frame->f_exc_type;
1937 tmp_value = frame->f_exc_value;
1938 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001939 Py_XINCREF(tstate->exc_type);
1940 Py_XINCREF(tstate->exc_value);
1941 Py_XINCREF(tstate->exc_traceback);
1942 frame->f_exc_type = tstate->exc_type;
1943 frame->f_exc_value = tstate->exc_value;
1944 frame->f_exc_traceback = tstate->exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001945 Py_XDECREF(tmp_type);
1946 Py_XDECREF(tmp_value);
1947 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001948 }
1949 /* Set new exception for this thread */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001950 tmp_type = tstate->exc_type;
1951 tmp_value = tstate->exc_value;
1952 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001953 Py_XINCREF(type);
1954 Py_XINCREF(value);
1955 Py_XINCREF(tb);
1956 tstate->exc_type = type;
1957 tstate->exc_value = value;
1958 tstate->exc_traceback = tb;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001959 Py_XDECREF(tmp_type);
1960 Py_XDECREF(tmp_value);
1961 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001962 /* For b/w compatibility */
1963 PySys_SetObject("exc_type", type);
1964 PySys_SetObject("exc_value", value);
1965 PySys_SetObject("exc_traceback", tb);
1966}
1967
1968static void
1969reset_exc_info(tstate)
1970 PyThreadState *tstate;
1971{
1972 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001973 PyObject *tmp_type, *tmp_value, *tmp_tb;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001974 frame = tstate->frame;
1975 if (frame->f_exc_type != NULL) {
1976 /* This frame caught an exception */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001977 tmp_type = tstate->exc_type;
1978 tmp_value = tstate->exc_value;
1979 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001980 Py_XINCREF(frame->f_exc_type);
1981 Py_XINCREF(frame->f_exc_value);
1982 Py_XINCREF(frame->f_exc_traceback);
1983 tstate->exc_type = frame->f_exc_type;
1984 tstate->exc_value = frame->f_exc_value;
1985 tstate->exc_traceback = frame->f_exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001986 Py_XDECREF(tmp_type);
1987 Py_XDECREF(tmp_value);
1988 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001989 /* For b/w compatibility */
1990 PySys_SetObject("exc_type", frame->f_exc_type);
1991 PySys_SetObject("exc_value", frame->f_exc_value);
1992 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
1993 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001994 tmp_type = frame->f_exc_type;
1995 tmp_value = frame->f_exc_value;
1996 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001997 frame->f_exc_type = NULL;
1998 frame->f_exc_value = NULL;
1999 frame->f_exc_traceback = NULL;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002000 Py_XDECREF(tmp_type);
2001 Py_XDECREF(tmp_value);
2002 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002003}
2004
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002005/* Logic for the raise statement (too complicated for inlining).
2006 This *consumes* a reference count to each of its arguments. */
Guido van Rossum1aa14831997-01-21 05:34:20 +00002007static enum why_code
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002008do_raise(type, value, tb)
Guido van Rossumb209a111997-04-29 18:18:01 +00002009 PyObject *type, *value, *tb;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002010{
Guido van Rossumd295f121998-04-09 21:39:57 +00002011 if (type == NULL) {
2012 /* Reraise */
2013 PyThreadState *tstate = PyThreadState_Get();
2014 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
2015 value = tstate->exc_value;
2016 tb = tstate->exc_traceback;
2017 Py_XINCREF(type);
2018 Py_XINCREF(value);
2019 Py_XINCREF(tb);
2020 }
2021
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002022 /* We support the following forms of raise:
2023 raise <class>, <classinstance>
2024 raise <class>, <argument tuple>
2025 raise <class>, None
2026 raise <class>, <argument>
2027 raise <classinstance>, None
2028 raise <string>, <object>
2029 raise <string>, None
2030
2031 An omitted second argument is the same as None.
2032
2033 In addition, raise <tuple>, <anything> is the same as
2034 raising the tuple's first item (and it better have one!);
2035 this rule is applied recursively.
2036
2037 Finally, an optional third argument can be supplied, which
2038 gives the traceback to be substituted (useful when
2039 re-raising an exception after examining it). */
2040
2041 /* First, check the traceback argument, replacing None with
2042 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002043 if (tb == Py_None) {
2044 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002045 tb = NULL;
2046 }
2047 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002048 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002049 "raise 3rd arg must be traceback or None");
2050 goto raise_error;
2051 }
2052
2053 /* Next, replace a missing value with None */
2054 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002055 value = Py_None;
2056 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002057 }
2058
2059 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00002060 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
2061 PyObject *tmp = type;
2062 type = PyTuple_GET_ITEM(type, 0);
2063 Py_INCREF(type);
2064 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002065 }
2066
Barry Warsaw4249f541997-08-22 21:26:19 +00002067 if (PyString_Check(type))
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002068 ;
Barry Warsaw4249f541997-08-22 21:26:19 +00002069
2070 else if (PyClass_Check(type))
2071 PyErr_NormalizeException(&type, &value, &tb);
2072
Guido van Rossumb209a111997-04-29 18:18:01 +00002073 else if (PyInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002074 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002075 if (value != Py_None) {
2076 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002077 "instance exception may not have a separate value");
2078 goto raise_error;
2079 }
2080 else {
2081 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00002082 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002083 value = type;
Guido van Rossumb209a111997-04-29 18:18:01 +00002084 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2085 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002086 }
2087 }
2088 else {
2089 /* Not something you can raise. You get an exception
2090 anyway, just not what you specified :-) */
Guido van Rossumb209a111997-04-29 18:18:01 +00002091 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002092 "exceptions must be strings, classes, or instances");
2093 goto raise_error;
2094 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002095 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002096 if (tb == NULL)
2097 return WHY_EXCEPTION;
2098 else
2099 return WHY_RERAISE;
2100 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002101 Py_XDECREF(value);
2102 Py_XDECREF(type);
2103 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002104 return WHY_EXCEPTION;
2105}
2106
Barry Warsawe42b18f1997-08-25 22:13:04 +00002107static int
2108unpack_sequence(v, argcnt, sp)
2109 PyObject *v;
2110 int argcnt;
2111 PyObject **sp;
2112{
2113 int i;
2114 PyObject *w;
2115
2116 for (i = 0; i < argcnt; i++) {
2117 if (! (w = PySequence_GetItem(v, i))) {
2118 if (PyErr_ExceptionMatches(PyExc_IndexError))
2119 PyErr_SetString(PyExc_ValueError,
2120 "unpack sequence of wrong size");
2121 goto finally;
2122 }
2123 *--sp = w;
2124 }
2125 /* we better get an IndexError now */
2126 if (PySequence_GetItem(v, i) == NULL) {
2127 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2128 PyErr_Clear();
2129 return 1;
2130 }
2131 /* some other exception occurred. fall through to finally */
2132 }
2133 else
2134 PyErr_SetString(PyExc_ValueError,
2135 "unpack sequence of wrong size");
2136 /* fall through */
2137finally:
Barry Warsaw91010551997-08-25 22:30:51 +00002138 for (; i > 0; i--, sp++)
2139 Py_DECREF(*sp);
Barry Warsawe42b18f1997-08-25 22:13:04 +00002140
2141 return 0;
2142}
2143
2144
Guido van Rossum96a42c81992-01-12 02:29:51 +00002145#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00002146static int
2147prtrace(v, str)
Guido van Rossumb209a111997-04-29 18:18:01 +00002148 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002149 char *str;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002150{
Guido van Rossum3f5da241990-12-20 15:06:42 +00002151 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00002152 if (PyObject_Print(v, stdout, 0) != 0)
2153 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00002154 printf("\n");
Guido van Rossumcc229ea2000-05-04 00:55:17 +00002155 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002156}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002157#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002158
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002159static void
2160call_exc_trace(p_trace, p_newtrace, f)
Guido van Rossumb209a111997-04-29 18:18:01 +00002161 PyObject **p_trace, **p_newtrace;
2162 PyFrameObject *f;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002163{
Guido van Rossumb209a111997-04-29 18:18:01 +00002164 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002165 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002166 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002167 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002168 value = Py_None;
2169 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002170 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002171 arg = Py_BuildValue("(OOO)", type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002172 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002173 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002174 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002175 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002176 err = call_trace(p_trace, p_newtrace, f, "exception", arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002177 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002178 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00002179 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002180 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002181 Py_XDECREF(type);
2182 Py_XDECREF(value);
2183 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002184 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002185}
2186
2187static int
2188call_trace(p_trace, p_newtrace, f, msg, arg)
Guido van Rossumb209a111997-04-29 18:18:01 +00002189 PyObject **p_trace; /* in/out; may not be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002190 may not point to NULL variable initially */
Guido van Rossumb209a111997-04-29 18:18:01 +00002191 PyObject **p_newtrace; /* in/out; may be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002192 may point to NULL variable;
2193 may be same variable as p_newtrace */
Guido van Rossumb209a111997-04-29 18:18:01 +00002194 PyFrameObject *f;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002195 char *msg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002196 PyObject *arg;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002197{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002198 PyThreadState *tstate = f->f_tstate;
Guido van Rossumb209a111997-04-29 18:18:01 +00002199 PyObject *args, *what;
2200 PyObject *res = NULL;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002201
Guido van Rossuma027efa1997-05-05 20:56:21 +00002202 if (tstate->tracing) {
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002203 /* Don't do recursive traces */
2204 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002205 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002206 *p_newtrace = NULL;
2207 }
2208 return 0;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002209 }
2210
Guido van Rossumb209a111997-04-29 18:18:01 +00002211 args = PyTuple_New(3);
Guido van Rossumf10570b1995-07-07 22:53:21 +00002212 if (args == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002213 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002214 what = PyString_FromString(msg);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002215 if (what == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002216 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002217 Py_INCREF(f);
2218 PyTuple_SET_ITEM(args, 0, (PyObject *)f);
2219 PyTuple_SET_ITEM(args, 1, what);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002220 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002221 arg = Py_None;
2222 Py_INCREF(arg);
2223 PyTuple_SET_ITEM(args, 2, arg);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002224 tstate->tracing++;
Guido van Rossumb209a111997-04-29 18:18:01 +00002225 PyFrame_FastToLocals(f);
2226 res = PyEval_CallObject(*p_trace, args); /* May clear *p_trace! */
2227 PyFrame_LocalsToFast(f, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002228 tstate->tracing--;
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002229 cleanup:
Guido van Rossumb209a111997-04-29 18:18:01 +00002230 Py_XDECREF(args);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002231 if (res == NULL) {
2232 /* The trace proc raised an exception */
Guido van Rossumb209a111997-04-29 18:18:01 +00002233 PyTraceBack_Here(f);
2234 Py_XDECREF(*p_trace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002235 *p_trace = NULL;
2236 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002237 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002238 *p_newtrace = NULL;
2239 }
Barry Warsawf6202631999-09-08 16:26:33 +00002240 /* to be extra double plus sure we don't get recursive
2241 * calls inf either tracefunc or profilefunc gets an
2242 * exception, zap the global variables.
2243 */
2244 Py_XDECREF(tstate->sys_tracefunc);
2245 tstate->sys_tracefunc = NULL;
2246 Py_XDECREF(tstate->sys_profilefunc);
2247 tstate->sys_profilefunc = NULL;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002248 return -1;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002249 }
2250 else {
2251 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002252 Py_XDECREF(*p_newtrace);
2253 if (res == Py_None)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002254 *p_newtrace = NULL;
2255 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002256 Py_INCREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002257 *p_newtrace = res;
2258 }
2259 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002260 Py_DECREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002261 return 0;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002262 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002263}
2264
Guido van Rossumb209a111997-04-29 18:18:01 +00002265PyObject *
2266PyEval_GetBuiltins()
Guido van Rossum6135a871995-01-09 17:53:26 +00002267{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002268 PyThreadState *tstate = PyThreadState_Get();
2269 PyFrameObject *current_frame = tstate->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002270 if (current_frame == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002271 return tstate->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00002272 else
2273 return current_frame->f_builtins;
2274}
2275
Guido van Rossumb209a111997-04-29 18:18:01 +00002276PyObject *
2277PyEval_GetLocals()
Guido van Rossum5b722181993-03-30 17:46:03 +00002278{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002279 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum5b722181993-03-30 17:46:03 +00002280 if (current_frame == NULL)
2281 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002282 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00002283 return current_frame->f_locals;
2284}
2285
Guido van Rossumb209a111997-04-29 18:18:01 +00002286PyObject *
2287PyEval_GetGlobals()
Guido van Rossum3f5da241990-12-20 15:06:42 +00002288{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002289 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002290 if (current_frame == NULL)
2291 return NULL;
2292 else
2293 return current_frame->f_globals;
2294}
2295
Guido van Rossumb209a111997-04-29 18:18:01 +00002296PyObject *
2297PyEval_GetFrame()
Guido van Rossume59214e1994-08-30 08:01:59 +00002298{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002299 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossumb209a111997-04-29 18:18:01 +00002300 return (PyObject *)current_frame;
Guido van Rossume59214e1994-08-30 08:01:59 +00002301}
2302
Guido van Rossum6135a871995-01-09 17:53:26 +00002303int
Guido van Rossumb209a111997-04-29 18:18:01 +00002304PyEval_GetRestricted()
Guido van Rossum6135a871995-01-09 17:53:26 +00002305{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002306 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002307 return current_frame == NULL ? 0 : current_frame->f_restricted;
2308}
2309
Guido van Rossumbe270261997-05-22 22:26:18 +00002310int
Guido van Rossumb209a111997-04-29 18:18:01 +00002311Py_FlushLine()
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002312{
Guido van Rossumb209a111997-04-29 18:18:01 +00002313 PyObject *f = PySys_GetObject("stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00002314 if (f == NULL)
2315 return 0;
2316 if (!PyFile_SoftSpace(f, 0))
2317 return 0;
2318 return PyFile_WriteString("\n", f);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002319}
2320
Guido van Rossum3f5da241990-12-20 15:06:42 +00002321
Guido van Rossum681d79a1995-07-18 14:51:37 +00002322/* External interface to call any callable object.
2323 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002324
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002325#undef PyEval_CallObject
2326/* for backward compatibility: export this interface */
2327
Guido van Rossumb209a111997-04-29 18:18:01 +00002328PyObject *
2329PyEval_CallObject(func, arg)
2330 PyObject *func;
2331 PyObject *arg;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002332{
Guido van Rossumb209a111997-04-29 18:18:01 +00002333 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002334}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002335#define PyEval_CallObject(func,arg) \
2336 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00002337
Guido van Rossumb209a111997-04-29 18:18:01 +00002338PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002339PyEval_CallObjectWithKeywords(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002340 PyObject *func;
2341 PyObject *arg;
2342 PyObject *kw;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002343{
2344 ternaryfunc call;
Guido van Rossumb209a111997-04-29 18:18:01 +00002345 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002346
2347 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002348 arg = PyTuple_New(0);
2349 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002350 PyErr_SetString(PyExc_TypeError,
2351 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002352 return NULL;
2353 }
2354 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002355 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002356
Guido van Rossumb209a111997-04-29 18:18:01 +00002357 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002358 PyErr_SetString(PyExc_TypeError,
2359 "keyword list must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00002360 Py_DECREF(arg);
Guido van Rossume3e61c11995-08-04 04:14:47 +00002361 return NULL;
2362 }
2363
Guido van Rossum150b2df1996-12-05 23:17:11 +00002364 if ((call = func->ob_type->tp_call) != NULL)
Guido van Rossum681d79a1995-07-18 14:51:37 +00002365 result = (*call)(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002366 else if (PyMethod_Check(func) || PyFunction_Check(func))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002367 result = call_function(func, arg, kw);
2368 else
2369 result = call_builtin(func, arg, kw);
2370
Guido van Rossumb209a111997-04-29 18:18:01 +00002371 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002372
Guido van Rossumb209a111997-04-29 18:18:01 +00002373 if (result == NULL && !PyErr_Occurred())
2374 PyErr_SetString(PyExc_SystemError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002375 "NULL result without error in call_object");
Guido van Rossume59214e1994-08-30 08:01:59 +00002376
2377 return result;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002378}
2379
Guido van Rossumb209a111997-04-29 18:18:01 +00002380static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002381call_builtin(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002382 PyObject *func;
2383 PyObject *arg;
2384 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002385{
Guido van Rossumb209a111997-04-29 18:18:01 +00002386 if (PyCFunction_Check(func)) {
2387 PyCFunction meth = PyCFunction_GetFunction(func);
2388 PyObject *self = PyCFunction_GetSelf(func);
2389 int flags = PyCFunction_GetFlags(func);
Guido van Rossumff8b4941995-07-26 18:16:42 +00002390 if (!(flags & METH_VARARGS)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002391 int size = PyTuple_Size(arg);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002392 if (size == 1)
Guido van Rossumb209a111997-04-29 18:18:01 +00002393 arg = PyTuple_GET_ITEM(arg, 0);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002394 else if (size == 0)
2395 arg = NULL;
2396 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002397 if (flags & METH_KEYWORDS)
2398 return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002399 if (kw != NULL && PyDict_Size(kw) != 0) {
2400 PyErr_SetString(PyExc_TypeError,
Guido van Rossumff8b4941995-07-26 18:16:42 +00002401 "this function takes no keyword arguments");
2402 return NULL;
2403 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002404 return (*meth)(self, arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002405 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002406 if (PyClass_Check(func)) {
2407 return PyInstance_New(func, arg, kw);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002408 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002409 if (PyInstance_Check(func)) {
2410 PyObject *res, *call = PyObject_GetAttrString(func,"__call__");
Guido van Rossume59214e1994-08-30 08:01:59 +00002411 if (call == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002412 PyErr_Clear();
2413 PyErr_SetString(PyExc_AttributeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002414 "no __call__ method defined");
Guido van Rossume59214e1994-08-30 08:01:59 +00002415 return NULL;
2416 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002417 res = PyEval_CallObjectWithKeywords(call, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002418 Py_DECREF(call);
Guido van Rossume59214e1994-08-30 08:01:59 +00002419 return res;
2420 }
Guido van Rossumba98a421999-11-15 19:29:33 +00002421 PyErr_Format(PyExc_TypeError, "call of non-function (type %.400s)",
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002422 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002423 return NULL;
2424}
2425
Guido van Rossumb209a111997-04-29 18:18:01 +00002426static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002427call_function(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002428 PyObject *func;
2429 PyObject *arg;
2430 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002431{
Guido van Rossumb209a111997-04-29 18:18:01 +00002432 PyObject *class = NULL; /* == owner */
2433 PyObject *argdefs;
2434 PyObject **d, **k;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002435 int nk, nd;
Guido van Rossumb209a111997-04-29 18:18:01 +00002436 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002437
Guido van Rossumb209a111997-04-29 18:18:01 +00002438 if (kw != NULL && !PyDict_Check(kw)) {
2439 PyErr_BadInternalCall();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002440 return NULL;
2441 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002442
Guido van Rossumb209a111997-04-29 18:18:01 +00002443 if (PyMethod_Check(func)) {
2444 PyObject *self = PyMethod_Self(func);
2445 class = PyMethod_Class(func);
2446 func = PyMethod_Function(func);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002447 if (self == NULL) {
2448 /* Unbound methods must be called with an instance of
2449 the class (or a derived class) as first argument */
Guido van Rossumb209a111997-04-29 18:18:01 +00002450 if (PyTuple_Size(arg) >= 1) {
2451 self = PyTuple_GET_ITEM(arg, 0);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002452 if (self != NULL &&
Guido van Rossumb209a111997-04-29 18:18:01 +00002453 PyInstance_Check(self) &&
2454 PyClass_IsSubclass((PyObject *)
2455 (((PyInstanceObject *)self)->in_class),
Guido van Rossumb3f72581993-05-21 19:56:10 +00002456 class))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002457 /* Handy-dandy */ ;
Guido van Rossumb3f72581993-05-21 19:56:10 +00002458 else
2459 self = NULL;
2460 }
2461 if (self == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002462 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002463 "unbound method must be called with class instance 1st argument");
Guido van Rossumb3f72581993-05-21 19:56:10 +00002464 return NULL;
2465 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002466 Py_INCREF(arg);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002467 }
2468 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002469 int argcount = PyTuple_Size(arg);
2470 PyObject *newarg = PyTuple_New(argcount + 1);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002471 int i;
Guido van Rossum81daa321993-05-20 14:24:46 +00002472 if (newarg == NULL)
2473 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002474 Py_INCREF(self);
2475 PyTuple_SET_ITEM(newarg, 0, self);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002476 for (i = 0; i < argcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002477 PyObject *v = PyTuple_GET_ITEM(arg, i);
2478 Py_XINCREF(v);
2479 PyTuple_SET_ITEM(newarg, i+1, v);
Guido van Rossum81daa321993-05-20 14:24:46 +00002480 }
2481 arg = newarg;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002482 }
Guido van Rossum7859f871998-07-08 14:58:16 +00002483 if (!PyFunction_Check(func)) {
2484 result = PyEval_CallObjectWithKeywords(func, arg, kw);
2485 Py_DECREF(arg);
2486 return result;
2487 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002488 }
2489 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002490 if (!PyFunction_Check(func)) {
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002491 PyErr_Format(PyExc_TypeError,
Guido van Rossum5db862d2000-04-10 12:46:51 +00002492 "call of non-function (type %.200s)",
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002493 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002494 return NULL;
2495 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002496 Py_INCREF(arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002497 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002498
2499 argdefs = PyFunction_GetDefaults(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00002500 if (argdefs != NULL && PyTuple_Check(argdefs)) {
2501 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
2502 nd = PyTuple_Size(argdefs);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002503 }
2504 else {
2505 d = NULL;
2506 nd = 0;
2507 }
2508
2509 if (kw != NULL) {
2510 int pos, i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002511 nk = PyDict_Size(kw);
2512 k = PyMem_NEW(PyObject *, 2*nk);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002513 if (k == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002514 PyErr_NoMemory();
2515 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002516 return NULL;
Guido van Rossume59214e1994-08-30 08:01:59 +00002517 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002518 pos = i = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002519 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002520 i += 2;
2521 nk = i/2;
2522 /* XXX This is broken if the caller deletes dict items! */
2523 }
2524 else {
2525 k = NULL;
2526 nk = 0;
Guido van Rossume59214e1994-08-30 08:01:59 +00002527 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002528
Guido van Rossum681d79a1995-07-18 14:51:37 +00002529 result = eval_code2(
Guido van Rossumb209a111997-04-29 18:18:01 +00002530 (PyCodeObject *)PyFunction_GetCode(func),
2531 PyFunction_GetGlobals(func), (PyObject *)NULL,
2532 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
Guido van Rossum681d79a1995-07-18 14:51:37 +00002533 k, nk,
2534 d, nd,
2535 class);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002536
Guido van Rossumb209a111997-04-29 18:18:01 +00002537 Py_DECREF(arg);
Guido van Rossumb18618d2000-05-03 23:44:39 +00002538 if (k != NULL)
2539 PyMem_DEL(k);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002540
Guido van Rossum681d79a1995-07-18 14:51:37 +00002541 return result;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002542}
2543
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002544#define SLICE_ERROR_MSG \
2545 "standard sequence type does not support step size other than one"
2546
Guido van Rossumb209a111997-04-29 18:18:01 +00002547static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002548loop_subscript(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002549 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002550{
Guido van Rossumb209a111997-04-29 18:18:01 +00002551 PySequenceMethods *sq = v->ob_type->tp_as_sequence;
Guido van Rossume59214e1994-08-30 08:01:59 +00002552 int i;
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002553 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002554 PyErr_SetString(PyExc_TypeError, "loop over non-sequence");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002555 return NULL;
2556 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002557 i = PyInt_AsLong(w);
Guido van Rossume59214e1994-08-30 08:01:59 +00002558 v = (*sq->sq_item)(v, i);
2559 if (v)
2560 return v;
Barry Warsaw4249f541997-08-22 21:26:19 +00002561 if (PyErr_ExceptionMatches(PyExc_IndexError))
Guido van Rossumb209a111997-04-29 18:18:01 +00002562 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002563 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002564}
2565
Guido van Rossum20c6add2000-05-08 14:06:50 +00002566/* Extract a slice index from a PyInt or PyLong, the index is bound to
2567 the range [-INT_MAX+1, INTMAX]. Returns 0 and an exception if there is
2568 and error. Returns 1 on success.*/
2569
2570int
2571_PyEval_SliceIndex(v, pi)
Guido van Rossumb209a111997-04-29 18:18:01 +00002572 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002573 int *pi;
2574{
2575 if (v != NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002576 long x;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002577 if (PyInt_Check(v)) {
2578 x = PyInt_AsLong(v);
2579 } else if (PyLong_Check(v)) {
2580 x = PyLong_AsLong(v);
2581 if (x==-1 && PyErr_Occurred()) {
2582 PyObject *long_zero;
2583
2584 if (!PyErr_ExceptionMatches( PyExc_OverflowError ) ) {
2585 /* It's not an overflow error, so just
2586 signal an error */
Guido van Rossum20c6add2000-05-08 14:06:50 +00002587 return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002588 }
2589
2590 /* It's an overflow error, so we need to
2591 check the sign of the long integer,
2592 set the value to INT_MAX or 0, and clear
2593 the error. */
2594
2595 /* Create a long integer with a value of 0 */
2596 long_zero = PyLong_FromLong( 0L );
Guido van Rossum20c6add2000-05-08 14:06:50 +00002597 if (long_zero == NULL) return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002598
2599 /* Check sign */
2600 if (PyObject_Compare(long_zero, v) < 0)
2601 x = INT_MAX;
2602 else
2603 x = 0;
2604
2605 /* Free the long integer we created, and clear the
2606 OverflowError */
2607 Py_DECREF(long_zero);
2608 PyErr_Clear();
2609 }
2610 } else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002611 PyErr_SetString(PyExc_TypeError,
2612 "slice index must be int");
Guido van Rossum20c6add2000-05-08 14:06:50 +00002613 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002614 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00002615 /* Truncate -- very long indices are truncated anyway */
2616 if (x > INT_MAX)
2617 x = INT_MAX;
2618 else if (x < -INT_MAX)
2619 x = 0;
2620 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002621 }
Guido van Rossum20c6add2000-05-08 14:06:50 +00002622 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002623}
2624
Guido van Rossumb209a111997-04-29 18:18:01 +00002625static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002626apply_slice(u, v, w) /* return u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +00002627 PyObject *u, *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002628{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002629 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002630 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002631 return NULL;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002632 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum04691fc1992-08-12 15:35:34 +00002633 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002634 return PySequence_GetSlice(u, ilow, ihigh);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002635}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002636
2637static int
Guido van Rossum3f5da241990-12-20 15:06:42 +00002638assign_slice(u, v, w, x) /* u[v:w] = x */
Guido van Rossumb209a111997-04-29 18:18:01 +00002639 PyObject *u, *v, *w, *x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002640{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002641 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002642 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002643 return -1;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002644 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002645 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002646 if (x == NULL)
2647 return PySequence_DelSlice(u, ilow, ihigh);
2648 else
2649 return PySequence_SetSlice(u, ilow, ihigh, x);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002650}
2651
Guido van Rossumb209a111997-04-29 18:18:01 +00002652static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002653cmp_outcome(op, v, w)
Guido van Rossum5b7313a1992-04-06 13:24:57 +00002654 int op;
Guido van Rossumb209a111997-04-29 18:18:01 +00002655 register PyObject *v;
2656 register PyObject *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002657{
2658 register int cmp;
2659 register int res = 0;
2660 switch (op) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00002661 case IS:
2662 case IS_NOT:
2663 res = (v == w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002664 if (op == (int) IS_NOT)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002665 res = !res;
2666 break;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002667 case IN:
2668 case NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002669 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002670 if (res < 0)
2671 return NULL;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002672 if (op == (int) NOT_IN)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002673 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002674 break;
2675 case EXC_MATCH:
Barry Warsaw4249f541997-08-22 21:26:19 +00002676 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002677 break;
2678 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00002679 cmp = PyObject_Compare(v, w);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00002680 if (cmp && PyErr_Occurred())
2681 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002682 switch (op) {
2683 case LT: res = cmp < 0; break;
2684 case LE: res = cmp <= 0; break;
2685 case EQ: res = cmp == 0; break;
2686 case NE: res = cmp != 0; break;
2687 case GT: res = cmp > 0; break;
2688 case GE: res = cmp >= 0; break;
2689 /* XXX no default? (res is initialized to 0 though) */
2690 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002691 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002692 v = res ? Py_True : Py_False;
2693 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002694 return v;
2695}
2696
Guido van Rossum3f5da241990-12-20 15:06:42 +00002697static int
2698import_from(locals, v, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002699 PyObject *locals;
2700 PyObject *v;
2701 PyObject *name;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002702{
Guido van Rossumb209a111997-04-29 18:18:01 +00002703 PyObject *w, *x;
2704 if (!PyModule_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002705 PyErr_SetString(PyExc_TypeError,
2706 "import-from requires module object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002707 return -1;
2708 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002709 w = PyModule_GetDict(v);
2710 if (PyString_AsString(name)[0] == '*') {
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002711 int pos, err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002712 PyObject *name, *value;
Guido van Rossum25831651993-05-19 14:50:45 +00002713 pos = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002714 while (PyDict_Next(w, &pos, &name, &value)) {
2715 if (!PyString_Check(name) ||
2716 PyString_AsString(name)[0] == '_')
Guido van Rossume9736fc1990-11-18 17:33:06 +00002717 continue;
Guido van Rossumb209a111997-04-29 18:18:01 +00002718 Py_INCREF(value);
2719 err = PyDict_SetItem(locals, name, value);
2720 Py_DECREF(value);
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002721 if (err != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002722 return -1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002723 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002724 return 0;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002725 }
2726 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002727 x = PyDict_GetItem(w, name);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002728 if (x == NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +00002729 PyErr_Format(PyExc_ImportError,
2730 "cannot import name %.230s",
2731 PyString_AsString(name));
Guido van Rossum3f5da241990-12-20 15:06:42 +00002732 return -1;
2733 }
2734 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002735 return PyDict_SetItem(locals, name, x);
Guido van Rossume9736fc1990-11-18 17:33:06 +00002736 }
2737}
2738
Guido van Rossumb209a111997-04-29 18:18:01 +00002739static PyObject *
Guido van Rossum25831651993-05-19 14:50:45 +00002740build_class(methods, bases, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002741 PyObject *methods; /* dictionary */
2742 PyObject *bases; /* tuple containing classes */
2743 PyObject *name; /* string */
Guido van Rossume9736fc1990-11-18 17:33:06 +00002744{
Guido van Rossumcd649651997-08-22 16:56:16 +00002745 int i, n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002746 if (!PyTuple_Check(bases)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002747 PyErr_SetString(PyExc_SystemError,
2748 "build_class with non-tuple bases");
Guido van Rossum25831651993-05-19 14:50:45 +00002749 return NULL;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002750 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002751 if (!PyDict_Check(methods)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002752 PyErr_SetString(PyExc_SystemError,
2753 "build_class with non-dictionary");
Guido van Rossume9736fc1990-11-18 17:33:06 +00002754 return NULL;
2755 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002756 if (!PyString_Check(name)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002757 PyErr_SetString(PyExc_SystemError,
Guido van Rossum7a5b7962000-03-31 13:52:29 +00002758 "build_class with non-string name");
Guido van Rossum25831651993-05-19 14:50:45 +00002759 return NULL;
2760 }
Guido van Rossumcd649651997-08-22 16:56:16 +00002761 n = PyTuple_Size(bases);
2762 for (i = 0; i < n; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002763 PyObject *base = PyTuple_GET_ITEM(bases, i);
2764 if (!PyClass_Check(base)) {
Guido van Rossum150b2df1996-12-05 23:17:11 +00002765 /* Call the base's *type*, if it is callable.
2766 This code is a hook for Donald Beaudry's
2767 and Jim Fulton's type extensions. In
2768 unexended Python it will never be triggered
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002769 since its types are not callable.
2770 Ditto: call the bases's *class*, if it has
2771 one. This makes the same thing possible
2772 without writing C code. A true meta-object
2773 protocol! */
2774 PyObject *basetype = (PyObject *)base->ob_type;
2775 PyObject *callable = NULL;
2776 if (PyCallable_Check(basetype))
2777 callable = basetype;
2778 else
2779 callable = PyObject_GetAttrString(
2780 base, "__class__");
2781 if (callable) {
2782 PyObject *args;
2783 PyObject *newclass = NULL;
2784 args = Py_BuildValue(
2785 "(OOO)", name, bases, methods);
2786 if (args != NULL) {
2787 newclass = PyEval_CallObject(
2788 callable, args);
2789 Py_DECREF(args);
2790 }
Guido van Rossum730806d1998-04-10 22:27:42 +00002791 if (callable != basetype) {
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002792 Py_DECREF(callable);
Guido van Rossum730806d1998-04-10 22:27:42 +00002793 }
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002794 return newclass;
Guido van Rossum150b2df1996-12-05 23:17:11 +00002795 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002796 PyErr_SetString(PyExc_TypeError,
Guido van Rossum25831651993-05-19 14:50:45 +00002797 "base is not a class object");
2798 return NULL;
2799 }
2800 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002801 return PyClass_New(bases, methods, name);
Guido van Rossum25831651993-05-19 14:50:45 +00002802}
2803
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002804static int
Guido van Rossuma027efa1997-05-05 20:56:21 +00002805exec_statement(f, prog, globals, locals)
2806 PyFrameObject *f;
Guido van Rossumb209a111997-04-29 18:18:01 +00002807 PyObject *prog;
2808 PyObject *globals;
2809 PyObject *locals;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002810{
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002811 int n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002812 PyObject *v;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002813 int plain = 0;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002814
Guido van Rossumb209a111997-04-29 18:18:01 +00002815 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
2816 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002817 /* Backward compatibility hack */
Guido van Rossumb209a111997-04-29 18:18:01 +00002818 globals = PyTuple_GetItem(prog, 1);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002819 if (n == 3)
Guido van Rossumb209a111997-04-29 18:18:01 +00002820 locals = PyTuple_GetItem(prog, 2);
2821 prog = PyTuple_GetItem(prog, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002822 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002823 if (globals == Py_None) {
2824 globals = PyEval_GetGlobals();
2825 if (locals == Py_None) {
2826 locals = PyEval_GetLocals();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002827 plain = 1;
2828 }
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002829 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002830 else if (locals == Py_None)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002831 locals = globals;
Guido van Rossumb209a111997-04-29 18:18:01 +00002832 if (!PyString_Check(prog) &&
2833 !PyCode_Check(prog) &&
2834 !PyFile_Check(prog)) {
2835 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002836 "exec 1st arg must be string, code or file object");
2837 return -1;
2838 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002839 if (!PyDict_Check(globals) || !PyDict_Check(locals)) {
2840 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002841 "exec 2nd/3rd args must be dict or None");
2842 return -1;
2843 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002844 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002845 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
Guido van Rossumb209a111997-04-29 18:18:01 +00002846 if (PyCode_Check(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002847 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002848 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002849 else if (PyFile_Check(prog)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002850 FILE *fp = PyFile_AsFile(prog);
2851 char *name = PyString_AsString(PyFile_Name(prog));
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002852 v = PyRun_File(fp, name, Py_file_input, globals, locals);
2853 }
2854 else {
2855 char *s = PyString_AsString(prog);
Guido van Rossum582acec2000-06-28 22:07:35 +00002856 if (strlen(s) != (size_t)PyString_Size(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002857 PyErr_SetString(PyExc_ValueError,
2858 "embedded '\\0' in exec string");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002859 return -1;
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002860 }
2861 v = PyRun_String(s, Py_file_input, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002862 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002863 if (plain)
2864 PyFrame_LocalsToFast(f, 0);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002865 if (v == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002866 return -1;
Guido van Rossumb209a111997-04-29 18:18:01 +00002867 Py_DECREF(v);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002868 return 0;
2869}
Guido van Rossum24c13741995-02-14 09:42:43 +00002870
Guido van Rossum1aa14831997-01-21 05:34:20 +00002871/* Hack for ni.py */
Guido van Rossumb209a111997-04-29 18:18:01 +00002872static PyObject *
Guido van Rossum24c13741995-02-14 09:42:43 +00002873find_from_args(f, nexti)
Guido van Rossumb209a111997-04-29 18:18:01 +00002874 PyFrameObject *f;
Guido van Rossum24c13741995-02-14 09:42:43 +00002875 int nexti;
2876{
2877 int opcode;
2878 int oparg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002879 PyObject *list, *name;
Guido van Rossum24c13741995-02-14 09:42:43 +00002880 unsigned char *next_instr;
2881
Guido van Rossumd076c731998-10-07 19:42:25 +00002882 _PyCode_GETCODEPTR(f->f_code, &next_instr);
2883 next_instr += nexti;
2884
Guido van Rossum24c13741995-02-14 09:42:43 +00002885 opcode = (*next_instr++);
2886 if (opcode != IMPORT_FROM) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002887 Py_INCREF(Py_None);
2888 return Py_None;
Guido van Rossum24c13741995-02-14 09:42:43 +00002889 }
2890
Guido van Rossumb209a111997-04-29 18:18:01 +00002891 list = PyList_New(0);
Guido van Rossum24c13741995-02-14 09:42:43 +00002892 if (list == NULL)
2893 return NULL;
2894
2895 do {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002896 oparg = (next_instr[1]<<8) + next_instr[0];
2897 next_instr += 2;
Guido van Rossum24c13741995-02-14 09:42:43 +00002898 name = Getnamev(f, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002899 if (PyList_Append(list, name) < 0) {
2900 Py_DECREF(list);
Guido van Rossum24c13741995-02-14 09:42:43 +00002901 break;
2902 }
2903 opcode = (*next_instr++);
2904 } while (opcode == IMPORT_FROM);
2905
2906 return list;
2907}
Guido van Rossum950361c1997-01-24 13:49:28 +00002908
2909
2910#ifdef DYNAMIC_EXECUTION_PROFILE
2911
2912PyObject *
2913getarray(a)
2914 long a[256];
2915{
2916 int i;
2917 PyObject *l = PyList_New(256);
2918 if (l == NULL) return NULL;
2919 for (i = 0; i < 256; i++) {
2920 PyObject *x = PyInt_FromLong(a[i]);
2921 if (x == NULL) {
2922 Py_DECREF(l);
2923 return NULL;
2924 }
2925 PyList_SetItem(l, i, x);
2926 }
2927 for (i = 0; i < 256; i++)
2928 a[i] = 0;
2929 return l;
2930}
2931
2932PyObject *
2933_Py_GetDXProfile(self, args)
2934 PyObject *self, *args;
2935{
2936#ifndef DXPAIRS
2937 return getarray(dxp);
2938#else
2939 int i;
2940 PyObject *l = PyList_New(257);
2941 if (l == NULL) return NULL;
2942 for (i = 0; i < 257; i++) {
2943 PyObject *x = getarray(dxpairs[i]);
2944 if (x == NULL) {
2945 Py_DECREF(l);
2946 return NULL;
2947 }
2948 PyList_SetItem(l, i, x);
2949 }
2950 return l;
2951#endif
2952}
2953
2954#endif