blob: 78196ba74b5e5c35686ace7299091e129aa20b43 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001/***********************************************************
Guido van Rossum6d023c91995-01-04 19:12:13 +00002Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
3The Netherlands.
Guido van Rossumf70e43a1991-02-19 12:39:46 +00004
5 All Rights Reserved
6
Guido van Rossumd266eb41996-10-25 14:44:06 +00007Permission to use, copy, modify, and distribute this software and its
8documentation for any purpose and without fee is hereby granted,
Guido van Rossumf70e43a1991-02-19 12:39:46 +00009provided that the above copyright notice appear in all copies and that
Guido van Rossumd266eb41996-10-25 14:44:06 +000010both that copyright notice and this permission notice appear in
Guido van Rossumf70e43a1991-02-19 12:39:46 +000011supporting documentation, and that the names of Stichting Mathematisch
Guido van Rossumd266eb41996-10-25 14:44:06 +000012Centrum or CWI or Corporation for National Research Initiatives or
13CNRI not be used in advertising or publicity pertaining to
14distribution of the software without specific, written prior
15permission.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000016
Guido van Rossumd266eb41996-10-25 14:44:06 +000017While CWI is the initial source for this software, a modified version
18is made available by the Corporation for National Research Initiatives
19(CNRI) at the Internet address ftp://ftp.python.org.
20
21STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
22REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
23MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
24CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
25DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
26PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
27TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28PERFORMANCE OF THIS SOFTWARE.
Guido van Rossumf70e43a1991-02-19 12:39:46 +000029
30******************************************************************/
31
Guido van Rossum3f5da241990-12-20 15:06:42 +000032/* Execute compiled code */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000033
Guido van Rossum681d79a1995-07-18 14:51:37 +000034/* XXX TO DO:
35 XXX how to pass arguments to call_trace?
Guido van Rossum681d79a1995-07-18 14:51:37 +000036 XXX speed up searching for keywords by using a dictionary
Guido van Rossum681d79a1995-07-18 14:51:37 +000037 XXX document it!
38 */
39
Guido van Rossumb209a111997-04-29 18:18:01 +000040#include "Python.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000041
Guido van Rossum10dc2e81990-11-18 17:27:39 +000042#include "compile.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +000043#include "frameobject.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +000044#include "eval.h"
Guido van Rossum10dc2e81990-11-18 17:27:39 +000045#include "opcode.h"
46
Guido van Rossumc6004111993-11-05 10:22:19 +000047#include <ctype.h>
48
Guido van Rossuma027efa1997-05-05 20:56:21 +000049#ifdef HAVE_LIMITS_H
50#include <limits.h>
51#else
52#define INT_MAX 2147483647
53#endif
54
Guido van Rossum04691fc1992-08-12 15:35:34 +000055/* Turn this on if your compiler chokes on the big switch: */
Guido van Rossum1ae940a1995-01-02 19:04:15 +000056/* #define CASE_TOO_BIG 1 */
Guido van Rossum04691fc1992-08-12 15:35:34 +000057
Guido van Rossum408027e1996-12-30 16:17:54 +000058#ifdef Py_DEBUG
Guido van Rossum96a42c81992-01-12 02:29:51 +000059/* For debugging the interpreter: */
60#define LLTRACE 1 /* Low-level trace feature */
61#define CHECKEXC 1 /* Double-check exception checking */
Guido van Rossum10dc2e81990-11-18 17:27:39 +000062#endif
63
Guido van Rossum5b722181993-03-30 17:46:03 +000064
Guido van Rossum374a9221991-04-04 10:40:29 +000065/* Forward declarations */
Guido van Rossum374a9221991-04-04 10:40:29 +000066
Guido van Rossumb209a111997-04-29 18:18:01 +000067static PyObject *eval_code2 Py_PROTO((PyCodeObject *,
68 PyObject *, PyObject *,
69 PyObject **, int,
70 PyObject **, int,
71 PyObject **, int,
72 PyObject *));
Guido van Rossum0a066c01992-03-27 17:29:15 +000073#ifdef LLTRACE
Guido van Rossumb209a111997-04-29 18:18:01 +000074static int prtrace Py_PROTO((PyObject *, char *));
Guido van Rossum0a066c01992-03-27 17:29:15 +000075#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +000076static void call_exc_trace Py_PROTO((PyObject **, PyObject**,
77 PyFrameObject *));
78static int call_trace Py_PROTO((PyObject **, PyObject **,
79 PyFrameObject *, char *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +000080static PyObject *call_builtin Py_PROTO((PyObject *, PyObject *, PyObject *));
81static PyObject *call_function Py_PROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +000082static PyObject *loop_subscript Py_PROTO((PyObject *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +000083static PyObject *apply_slice Py_PROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossuma027efa1997-05-05 20:56:21 +000084static int assign_slice Py_PROTO((PyObject *, PyObject *,
85 PyObject *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +000086static PyObject *cmp_outcome Py_PROTO((int, PyObject *, PyObject *));
87static int import_from Py_PROTO((PyObject *, PyObject *, PyObject *));
88static PyObject *build_class Py_PROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossuma027efa1997-05-05 20:56:21 +000089static int exec_statement Py_PROTO((PyFrameObject *,
90 PyObject *, PyObject *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +000091static PyObject *find_from_args Py_PROTO((PyFrameObject *, int));
Guido van Rossuma027efa1997-05-05 20:56:21 +000092static void set_exc_info Py_PROTO((PyThreadState *,
93 PyObject *, PyObject *, PyObject *));
94static void reset_exc_info Py_PROTO((PyThreadState *));
Guido van Rossum374a9221991-04-04 10:40:29 +000095
96
Guido van Rossum950361c1997-01-24 13:49:28 +000097/* Dynamic execution profile */
98#ifdef DYNAMIC_EXECUTION_PROFILE
99#ifdef DXPAIRS
100static long dxpairs[257][256];
101#define dxp dxpairs[256]
102#else
103static long dxp[256];
104#endif
105#endif
106
107
Guido van Rossume59214e1994-08-30 08:01:59 +0000108#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +0000109
Guido van Rossum2571cc81999-04-07 16:07:23 +0000110#ifndef DONT_HAVE_ERRNO_H
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000111#include <errno.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +0000112#endif
Guido van Rossum49b56061998-10-01 20:42:43 +0000113#include "pythread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +0000114
Guido van Rossuma027efa1997-05-05 20:56:21 +0000115extern int _PyThread_Started; /* Flag for Py_Exit */
116
Guido van Rossum65d5b571998-12-21 19:32:43 +0000117static PyThread_type_lock interpreter_lock = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000118static long main_thread = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000119
120void
Guido van Rossumb209a111997-04-29 18:18:01 +0000121PyEval_InitThreads()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000122{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000123 if (interpreter_lock)
Sjoerd Mullendered59d201993-01-06 13:36:38 +0000124 return;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000125 _PyThread_Started = 1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000126 interpreter_lock = PyThread_allocate_lock();
127 PyThread_acquire_lock(interpreter_lock, 1);
128 main_thread = PyThread_get_thread_ident();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000129}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000130
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000131void
Guido van Rossum25ce5661997-08-02 03:10:38 +0000132PyEval_AcquireLock()
133{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000134 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000135}
136
137void
138PyEval_ReleaseLock()
139{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000140 PyThread_release_lock(interpreter_lock);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000141}
142
143void
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000144PyEval_AcquireThread(tstate)
145 PyThreadState *tstate;
146{
147 if (tstate == NULL)
148 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000149 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000150 if (PyThreadState_Swap(tstate) != NULL)
151 Py_FatalError(
152 "PyEval_AcquireThread: non-NULL old thread state");
153}
154
155void
156PyEval_ReleaseThread(tstate)
157 PyThreadState *tstate;
158{
159 if (tstate == NULL)
160 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
161 if (PyThreadState_Swap(NULL) != tstate)
162 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000163 PyThread_release_lock(interpreter_lock);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000164}
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000165#endif
166
Guido van Rossumff4949e1992-08-05 19:58:53 +0000167/* Functions save_thread and restore_thread are always defined so
168 dynamically loaded modules needn't be compiled separately for use
169 with and without threads: */
170
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000171PyThreadState *
Guido van Rossumb209a111997-04-29 18:18:01 +0000172PyEval_SaveThread()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000173{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000174 PyThreadState *tstate = PyThreadState_Swap(NULL);
175 if (tstate == NULL)
176 Py_FatalError("PyEval_SaveThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000177#ifdef WITH_THREAD
Guido van Rossumb74eca91997-09-30 22:03:16 +0000178 if (interpreter_lock)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000179 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000180#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000181 return tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000182}
183
184void
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000185PyEval_RestoreThread(tstate)
186 PyThreadState *tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000187{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000188 if (tstate == NULL)
189 Py_FatalError("PyEval_RestoreThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000190#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000191 if (interpreter_lock) {
Guido van Rossumb74eca91997-09-30 22:03:16 +0000192 int err = errno;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000193 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000194 errno = err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000195 }
196#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000197 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000198}
199
200
Guido van Rossuma9672091994-09-14 13:31:22 +0000201/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
202 signal handlers or Mac I/O completion routines) can schedule calls
203 to a function to be called synchronously.
204 The synchronous function is called with one void* argument.
205 It should return 0 for success or -1 for failure -- failure should
206 be accompanied by an exception.
207
208 If registry succeeds, the registry function returns 0; if it fails
209 (e.g. due to too many pending calls) it returns -1 (without setting
210 an exception condition).
211
212 Note that because registry may occur from within signal handlers,
213 or other asynchronous events, calling malloc() is unsafe!
214
215#ifdef WITH_THREAD
216 Any thread can schedule pending calls, but only the main thread
217 will execute them.
218#endif
219
220 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
221 There are two possible race conditions:
222 (1) nested asynchronous registry calls;
223 (2) registry calls made while pending calls are being processed.
224 While (1) is very unlikely, (2) is a real possibility.
225 The current code is safe against (2), but not against (1).
226 The safety against (2) is derived from the fact that only one
227 thread (the main thread) ever takes things out of the queue.
Guido van Rossuma9672091994-09-14 13:31:22 +0000228
Guido van Rossuma027efa1997-05-05 20:56:21 +0000229 XXX Darn! With the advent of thread state, we should have an array
230 of pending calls per thread in the thread state! Later...
231*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000232
Guido van Rossuma9672091994-09-14 13:31:22 +0000233#define NPENDINGCALLS 32
234static struct {
Guido van Rossumb209a111997-04-29 18:18:01 +0000235 int (*func) Py_PROTO((ANY *));
Guido van Rossuma9672091994-09-14 13:31:22 +0000236 ANY *arg;
237} pendingcalls[NPENDINGCALLS];
238static volatile int pendingfirst = 0;
239static volatile int pendinglast = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000240static volatile int things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000241
242int
243Py_AddPendingCall(func, arg)
Guido van Rossumb209a111997-04-29 18:18:01 +0000244 int (*func) Py_PROTO((ANY *));
Guido van Rossuma9672091994-09-14 13:31:22 +0000245 ANY *arg;
246{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000247 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000248 int i, j;
249 /* XXX Begin critical section */
250 /* XXX If you want this to be safe against nested
251 XXX asynchronous calls, you'll have to work harder! */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000252 if (busy)
253 return -1;
254 busy = 1;
Guido van Rossuma9672091994-09-14 13:31:22 +0000255 i = pendinglast;
256 j = (i + 1) % NPENDINGCALLS;
257 if (j == pendingfirst)
258 return -1; /* Queue full */
259 pendingcalls[i].func = func;
260 pendingcalls[i].arg = arg;
261 pendinglast = j;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000262 things_to_do = 1; /* Signal main loop */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000263 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000264 /* XXX End critical section */
265 return 0;
266}
267
Guido van Rossum180d7b41994-09-29 09:45:57 +0000268int
269Py_MakePendingCalls()
Guido van Rossuma9672091994-09-14 13:31:22 +0000270{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000271 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000272#ifdef WITH_THREAD
Guido van Rossum65d5b571998-12-21 19:32:43 +0000273 if (main_thread && PyThread_get_thread_ident() != main_thread)
Guido van Rossuma9672091994-09-14 13:31:22 +0000274 return 0;
275#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000276 if (busy)
Guido van Rossum180d7b41994-09-29 09:45:57 +0000277 return 0;
278 busy = 1;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000279 things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000280 for (;;) {
281 int i;
Guido van Rossumb209a111997-04-29 18:18:01 +0000282 int (*func) Py_PROTO((ANY *));
Guido van Rossuma9672091994-09-14 13:31:22 +0000283 ANY *arg;
284 i = pendingfirst;
285 if (i == pendinglast)
286 break; /* Queue empty */
287 func = pendingcalls[i].func;
288 arg = pendingcalls[i].arg;
289 pendingfirst = (i + 1) % NPENDINGCALLS;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000290 if (func(arg) < 0) {
291 busy = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000292 things_to_do = 1; /* We're not done yet */
Guido van Rossuma9672091994-09-14 13:31:22 +0000293 return -1;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000294 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000295 }
Guido van Rossum180d7b41994-09-29 09:45:57 +0000296 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000297 return 0;
298}
299
300
Guido van Rossum374a9221991-04-04 10:40:29 +0000301/* Status code for main loop (reason for stack unwind) */
302
303enum why_code {
304 WHY_NOT, /* No error */
305 WHY_EXCEPTION, /* Exception occurred */
306 WHY_RERAISE, /* Exception re-raised by 'finally' */
307 WHY_RETURN, /* 'return' statement */
308 WHY_BREAK /* 'break' statement */
309};
310
Guido van Rossumb209a111997-04-29 18:18:01 +0000311static enum why_code do_raise Py_PROTO((PyObject *, PyObject *, PyObject *));
Barry Warsawe42b18f1997-08-25 22:13:04 +0000312static int unpack_sequence Py_PROTO((PyObject *, int, PyObject **));
Guido van Rossum1aa14831997-01-21 05:34:20 +0000313
Guido van Rossum374a9221991-04-04 10:40:29 +0000314
Guido van Rossumb209a111997-04-29 18:18:01 +0000315PyObject *
316PyEval_EvalCode(co, globals, locals)
317 PyCodeObject *co;
318 PyObject *globals;
319 PyObject *locals;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000320{
321 return eval_code2(co,
322 globals, locals,
Guido van Rossumb209a111997-04-29 18:18:01 +0000323 (PyObject **)NULL, 0,
324 (PyObject **)NULL, 0,
325 (PyObject **)NULL, 0,
326 (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000327}
328
329
330/* Interpreter main loop */
331
Guido van Rossum8861b741996-07-30 16:49:37 +0000332#ifndef MAX_RECURSION_DEPTH
333#define MAX_RECURSION_DEPTH 10000
334#endif
335
Guido van Rossumb209a111997-04-29 18:18:01 +0000336static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +0000337eval_code2(co, globals, locals,
338 args, argcount, kws, kwcount, defs, defcount, owner)
Guido van Rossumb209a111997-04-29 18:18:01 +0000339 PyCodeObject *co;
340 PyObject *globals;
341 PyObject *locals;
342 PyObject **args;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000343 int argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000344 PyObject **kws; /* length: 2*kwcount */
Guido van Rossum681d79a1995-07-18 14:51:37 +0000345 int kwcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000346 PyObject **defs;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000347 int defcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000348 PyObject *owner;
Guido van Rossum374a9221991-04-04 10:40:29 +0000349{
Guido van Rossum950361c1997-01-24 13:49:28 +0000350#ifdef DXPAIRS
351 int lastopcode = 0;
352#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000353 register unsigned char *next_instr;
Guido van Rossum50cd3481998-11-17 17:02:51 +0000354 register int opcode; /* Current opcode */
355 register int oparg; /* Current opcode argument, if any */
Guido van Rossumb209a111997-04-29 18:18:01 +0000356 register PyObject **stack_pointer;
Guido van Rossum374a9221991-04-04 10:40:29 +0000357 register enum why_code why; /* Reason for block stack unwind */
358 register int err; /* Error status -- nonzero if error */
Guido van Rossumb209a111997-04-29 18:18:01 +0000359 register PyObject *x; /* Result object -- NULL if error */
360 register PyObject *v; /* Temporary objects popped off stack */
361 register PyObject *w;
362 register PyObject *u;
363 register PyObject *t;
364 register PyFrameObject *f; /* Current frame */
Guido van Rossum50cd3481998-11-17 17:02:51 +0000365 register PyObject **fastlocals;
Guido van Rossum014518f1998-11-23 21:09:51 +0000366 PyObject *retval = NULL; /* Return value */
Guido van Rossum885553e1998-12-21 18:33:30 +0000367 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossumd076c731998-10-07 19:42:25 +0000368 unsigned char *first_instr;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000369#ifdef LLTRACE
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000370 int lltrace;
Guido van Rossum374a9221991-04-04 10:40:29 +0000371#endif
Guido van Rossum408027e1996-12-30 16:17:54 +0000372#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000373 /* Make it easier to find out where we are with a debugger */
Guido van Rossumb209a111997-04-29 18:18:01 +0000374 char *filename = PyString_AsString(co->co_filename);
Guido van Rossum99bec951992-09-03 20:29:45 +0000375#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000376
377/* Code access macros */
378
379#define GETCONST(i) Getconst(f, i)
380#define GETNAME(i) Getname(f, i)
381#define GETNAMEV(i) Getnamev(f, i)
Guido van Rossumd076c731998-10-07 19:42:25 +0000382#define INSTR_OFFSET() (next_instr - first_instr)
Guido van Rossum374a9221991-04-04 10:40:29 +0000383#define NEXTOP() (*next_instr++)
384#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
Guido van Rossumd076c731998-10-07 19:42:25 +0000385#define JUMPTO(x) (next_instr = first_instr + (x))
Guido van Rossum374a9221991-04-04 10:40:29 +0000386#define JUMPBY(x) (next_instr += (x))
387
388/* Stack manipulation macros */
389
390#define STACK_LEVEL() (stack_pointer - f->f_valuestack)
391#define EMPTY() (STACK_LEVEL() == 0)
392#define TOP() (stack_pointer[-1])
393#define BASIC_PUSH(v) (*stack_pointer++ = (v))
394#define BASIC_POP() (*--stack_pointer)
395
Guido van Rossum96a42c81992-01-12 02:29:51 +0000396#ifdef LLTRACE
397#define PUSH(v) (BASIC_PUSH(v), lltrace && prtrace(TOP(), "push"))
398#define POP() (lltrace && prtrace(TOP(), "pop"), BASIC_POP())
Guido van Rossum374a9221991-04-04 10:40:29 +0000399#else
400#define PUSH(v) BASIC_PUSH(v)
401#define POP() BASIC_POP()
402#endif
403
Guido van Rossum681d79a1995-07-18 14:51:37 +0000404/* Local variable macros */
405
406#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumb209a111997-04-29 18:18:01 +0000407#define SETLOCAL(i, value) do { Py_XDECREF(GETLOCAL(i)); \
Guido van Rossum681d79a1995-07-18 14:51:37 +0000408 GETLOCAL(i) = value; } while (0)
409
Guido van Rossuma027efa1997-05-05 20:56:21 +0000410/* Start of code */
411
Guido van Rossum8861b741996-07-30 16:49:37 +0000412#ifdef USE_STACKCHECK
Guido van Rossuma027efa1997-05-05 20:56:21 +0000413 if (tstate->recursion_depth%10 == 0 && PyOS_CheckStack()) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000414 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
Guido van Rossum8861b741996-07-30 16:49:37 +0000415 return NULL;
416 }
417#endif
418
Guido van Rossum681d79a1995-07-18 14:51:37 +0000419 if (globals == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000420 PyErr_SetString(PyExc_SystemError, "eval_code2: NULL globals");
Guido van Rossum6135a871995-01-09 17:53:26 +0000421 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000422 }
423
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000424#ifdef LLTRACE
Guido van Rossumb209a111997-04-29 18:18:01 +0000425 lltrace = PyDict_GetItemString(globals, "__lltrace__") != NULL;
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000426#endif
427
Guido van Rossumb209a111997-04-29 18:18:01 +0000428 f = PyFrame_New(
Guido van Rossuma027efa1997-05-05 20:56:21 +0000429 tstate, /*back*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000430 co, /*code*/
431 globals, /*globals*/
Guido van Rossum76836021997-01-20 04:26:20 +0000432 locals); /*locals*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000433 if (f == NULL)
434 return NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000435
Guido van Rossuma027efa1997-05-05 20:56:21 +0000436 tstate->frame = f;
Guido van Rossumdeb0c5e1997-01-27 23:42:36 +0000437 fastlocals = f->f_localsplus;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000438
439 if (co->co_argcount > 0 ||
440 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
441 int i;
442 int n = argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000443 PyObject *kwdict = NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000444 if (co->co_flags & CO_VARKEYWORDS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000445 kwdict = PyDict_New();
Guido van Rossum681d79a1995-07-18 14:51:37 +0000446 if (kwdict == NULL)
447 goto fail;
Guido van Rossum8c5df061997-01-24 04:19:24 +0000448 i = co->co_argcount;
449 if (co->co_flags & CO_VARARGS)
450 i++;
451 SETLOCAL(i, kwdict);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000452 }
453 if (argcount > co->co_argcount) {
454 if (!(co->co_flags & CO_VARARGS)) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000455 PyErr_Format(PyExc_TypeError,
456 "too many arguments; expected %d, got %d",
457 co->co_argcount, argcount);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000458 goto fail;
459 }
460 n = co->co_argcount;
461 }
462 for (i = 0; i < n; i++) {
463 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000464 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000465 SETLOCAL(i, x);
466 }
467 if (co->co_flags & CO_VARARGS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000468 u = PyTuple_New(argcount - n);
Guido van Rossum8c5df061997-01-24 04:19:24 +0000469 if (u == NULL)
470 goto fail;
471 SETLOCAL(co->co_argcount, u);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000472 for (i = n; i < argcount; i++) {
473 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000474 Py_INCREF(x);
475 PyTuple_SET_ITEM(u, i-n, x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000476 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000477 }
478 for (i = 0; i < kwcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000479 PyObject *keyword = kws[2*i];
480 PyObject *value = kws[2*i + 1];
Guido van Rossum681d79a1995-07-18 14:51:37 +0000481 int j;
Guido van Rossum25da5be1999-10-26 00:12:20 +0000482 if (keyword == NULL || !PyString_Check(keyword)) {
483 PyErr_SetString(PyExc_TypeError,
484 "keywords must be strings");
485 goto fail;
486 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000487 /* XXX slow -- speed up using dictionary? */
488 for (j = 0; j < co->co_argcount; j++) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000489 PyObject *nm = PyTuple_GET_ITEM(
490 co->co_varnames, j);
Guido van Rossumb209a111997-04-29 18:18:01 +0000491 if (PyObject_Compare(keyword, nm) == 0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000492 break;
493 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000494 /* Check errors from Compare */
495 if (PyErr_Occurred())
496 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000497 if (j >= co->co_argcount) {
498 if (kwdict == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000499 PyErr_Format(PyExc_TypeError,
Guido van Rossuma027efa1997-05-05 20:56:21 +0000500 "unexpected keyword argument: %.400s",
Jeremy Hylton76901512000-03-28 23:49:17 +0000501 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000502 goto fail;
503 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000504 PyDict_SetItem(kwdict, keyword, value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000505 }
506 else {
507 if (GETLOCAL(j) != NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +0000508 PyErr_Format(PyExc_TypeError,
509 "keyword parameter redefined: %.400s",
510 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000511 goto fail;
512 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000513 Py_INCREF(value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000514 SETLOCAL(j, value);
515 }
516 }
517 if (argcount < co->co_argcount) {
518 int m = co->co_argcount - defcount;
519 for (i = argcount; i < m; i++) {
520 if (GETLOCAL(i) == NULL) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000521 PyErr_Format(PyExc_TypeError,
522 "not enough arguments; expected %d, got %d",
523 m, i);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000524 goto fail;
525 }
526 }
527 if (n > m)
528 i = n - m;
529 else
530 i = 0;
531 for (; i < defcount; i++) {
532 if (GETLOCAL(m+i) == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000533 PyObject *def = defs[i];
534 Py_INCREF(def);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000535 SETLOCAL(m+i, def);
536 }
537 }
538 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000539 }
540 else {
541 if (argcount > 0 || kwcount > 0) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000542 PyErr_SetString(PyExc_TypeError,
543 "no arguments expected");
Guido van Rossum8c5df061997-01-24 04:19:24 +0000544 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000545 }
546 }
547
Guido van Rossuma027efa1997-05-05 20:56:21 +0000548 if (tstate->sys_tracefunc != NULL) {
549 /* tstate->sys_tracefunc, if defined, is a function that
550 will be called on *every* entry to a code block.
Guido van Rossum96a42c81992-01-12 02:29:51 +0000551 Its return value, if not None, is a function that
552 will be called at the start of each executed line
553 of code. (Actually, the function must return
554 itself in order to continue tracing.)
555 The trace functions are called with three arguments:
556 a pointer to the current frame, a string indicating
557 why the function is called, and an argument which
558 depends on the situation. The global trace function
559 (sys.trace) is also called whenever an exception
560 is detected. */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000561 if (call_trace(&tstate->sys_tracefunc,
562 &f->f_trace, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000563 Py_None/*XXX how to compute arguments now?*/)) {
Guido van Rossum96a42c81992-01-12 02:29:51 +0000564 /* Trace function raised an error */
Guido van Rossum8c5df061997-01-24 04:19:24 +0000565 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000566 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000567 }
568
Guido van Rossuma027efa1997-05-05 20:56:21 +0000569 if (tstate->sys_profilefunc != NULL) {
570 /* Similar for sys_profilefunc, except it needn't return
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000571 itself and isn't called for "line" events */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000572 if (call_trace(&tstate->sys_profilefunc,
573 (PyObject**)0, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000574 Py_None/*XXX*/)) {
Guido van Rossum8c5df061997-01-24 04:19:24 +0000575 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000576 }
577 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000578
Guido van Rossuma027efa1997-05-05 20:56:21 +0000579 if (++tstate->recursion_depth > MAX_RECURSION_DEPTH) {
580 --tstate->recursion_depth;
581 PyErr_SetString(PyExc_RuntimeError,
582 "Maximum recursion depth exceeded");
583 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +0000584 Py_DECREF(f);
Guido van Rossum8861b741996-07-30 16:49:37 +0000585 return NULL;
586 }
587
Guido van Rossumd076c731998-10-07 19:42:25 +0000588 _PyCode_GETCODEPTR(co, &first_instr);
589 next_instr = first_instr;
Guido van Rossum374a9221991-04-04 10:40:29 +0000590 stack_pointer = f->f_valuestack;
591
Guido van Rossum374a9221991-04-04 10:40:29 +0000592 why = WHY_NOT;
593 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000594 x = Py_None; /* Not a reference, just anything non-NULL */
Guido van Rossum374a9221991-04-04 10:40:29 +0000595
596 for (;;) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000597 /* Do periodic things. Doing this every time through
598 the loop would add too much overhead, so we do it
599 only every Nth instruction. We also do it if
600 ``things_to_do'' is set, i.e. when an asynchronous
601 event needs attention (e.g. a signal handler or
602 async I/O handler); see Py_AddPendingCall() and
603 Py_MakePendingCalls() above. */
Guido van Rossuma9672091994-09-14 13:31:22 +0000604
Guido van Rossuma027efa1997-05-05 20:56:21 +0000605 if (things_to_do || --tstate->ticker < 0) {
Guido van Rossum25ce5661997-08-02 03:10:38 +0000606 tstate->ticker = tstate->interp->checkinterval;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000607 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000608 if (Py_MakePendingCalls() < 0) {
609 why = WHY_EXCEPTION;
610 goto on_error;
611 }
612 }
Guido van Rossumdf0d00e1997-05-20 15:57:49 +0000613#if !defined(HAVE_SIGNAL_H) || defined(macintosh)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000614 /* If we have true signals, the signal handler
615 will call Py_AddPendingCall() so we don't
616 have to call sigcheck(). On the Mac and
617 DOS, alas, we have to call it. */
Guido van Rossumb209a111997-04-29 18:18:01 +0000618 if (PyErr_CheckSignals()) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000619 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +0000620 goto on_error;
621 }
Guido van Rossum70d44781997-01-21 06:15:24 +0000622#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000623
Guido van Rossume59214e1994-08-30 08:01:59 +0000624#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000625 if (interpreter_lock) {
626 /* Give another thread a chance */
627
Guido van Rossum25ce5661997-08-02 03:10:38 +0000628 if (PyThreadState_Swap(NULL) != tstate)
629 Py_FatalError("ceval: tstate mix-up");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000630 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000631
632 /* Other threads may run now */
633
Guido van Rossum65d5b571998-12-21 19:32:43 +0000634 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000635 if (PyThreadState_Swap(tstate) != NULL)
636 Py_FatalError("ceval: orphan tstate");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000637 }
638#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000639 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000640
Guido van Rossum374a9221991-04-04 10:40:29 +0000641 /* Extract opcode and argument */
Guido van Rossum99bec951992-09-03 20:29:45 +0000642
Guido van Rossum408027e1996-12-30 16:17:54 +0000643#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum99bec951992-09-03 20:29:45 +0000644 f->f_lasti = INSTR_OFFSET();
645#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000646
647 opcode = NEXTOP();
648 if (HAS_ARG(opcode))
649 oparg = NEXTARG();
Guido van Rossum950361c1997-01-24 13:49:28 +0000650#ifdef DYNAMIC_EXECUTION_PROFILE
651#ifdef DXPAIRS
652 dxpairs[lastopcode][opcode]++;
653 lastopcode = opcode;
654#endif
655 dxp[opcode]++;
656#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000657
Guido van Rossum96a42c81992-01-12 02:29:51 +0000658#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000659 /* Instruction tracing */
660
Guido van Rossum96a42c81992-01-12 02:29:51 +0000661 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000662 if (HAS_ARG(opcode)) {
663 printf("%d: %d, %d\n",
664 (int) (INSTR_OFFSET() - 3),
665 opcode, oparg);
666 }
667 else {
668 printf("%d: %d\n",
669 (int) (INSTR_OFFSET() - 1), opcode);
670 }
671 }
672#endif
673
674 /* Main switch on opcode */
675
676 switch (opcode) {
677
678 /* BEWARE!
679 It is essential that any operation that fails sets either
680 x to NULL, err to nonzero, or why to anything but WHY_NOT,
681 and that no operation that succeeds does this! */
682
683 /* case STOP_CODE: this is an error! */
684
685 case POP_TOP:
686 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000687 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000688 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000689
690 case ROT_TWO:
691 v = POP();
692 w = POP();
693 PUSH(v);
694 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000695 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000696
697 case ROT_THREE:
698 v = POP();
699 w = POP();
700 x = POP();
701 PUSH(v);
702 PUSH(x);
703 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000704 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000705
706 case DUP_TOP:
707 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000708 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000709 PUSH(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000710 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000711
712 case UNARY_POSITIVE:
713 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000714 x = PyNumber_Positive(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000715 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000716 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000717 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000718 break;
719
720 case UNARY_NEGATIVE:
721 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000722 x = PyNumber_Negative(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000723 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000724 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000725 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000726 break;
727
728 case UNARY_NOT:
729 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000730 err = PyObject_IsTrue(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000731 Py_DECREF(v);
Guido van Rossumfc490731997-05-06 15:06:49 +0000732 if (err == 0) {
733 Py_INCREF(Py_True);
734 PUSH(Py_True);
735 continue;
736 }
737 else if (err > 0) {
738 Py_INCREF(Py_False);
739 PUSH(Py_False);
740 err = 0;
741 continue;
742 }
Guido van Rossum374a9221991-04-04 10:40:29 +0000743 break;
744
745 case UNARY_CONVERT:
746 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000747 x = PyObject_Repr(v);
748 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000749 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000750 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000751 break;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000752
753 case UNARY_INVERT:
754 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000755 x = PyNumber_Invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000756 Py_DECREF(v);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000757 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000758 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000759 break;
Guido van Rossum374a9221991-04-04 10:40:29 +0000760
Guido van Rossum50564e81996-01-12 01:13:16 +0000761 case BINARY_POWER:
762 w = POP();
763 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000764 x = PyNumber_Power(v, w, Py_None);
Guido van Rossumb209a111997-04-29 18:18:01 +0000765 Py_DECREF(v);
766 Py_DECREF(w);
Guido van Rossum50564e81996-01-12 01:13:16 +0000767 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000768 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +0000769 break;
770
Guido van Rossum374a9221991-04-04 10:40:29 +0000771 case BINARY_MULTIPLY:
772 w = POP();
773 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000774 x = PyNumber_Multiply(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000775 Py_DECREF(v);
776 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000777 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000778 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000779 break;
780
781 case BINARY_DIVIDE:
782 w = POP();
783 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000784 x = PyNumber_Divide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000785 Py_DECREF(v);
786 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000787 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000788 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000789 break;
790
791 case BINARY_MODULO:
792 w = POP();
793 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000794 x = PyNumber_Remainder(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000795 Py_DECREF(v);
796 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000797 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000798 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000799 break;
800
801 case BINARY_ADD:
802 w = POP();
803 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000804 if (PyInt_Check(v) && PyInt_Check(w)) {
805 /* INLINE: int + int */
806 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000807 a = PyInt_AS_LONG(v);
808 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000809 i = a + b;
810 if ((i^a) < 0 && (i^b) < 0) {
811 PyErr_SetString(PyExc_OverflowError,
812 "integer addition");
813 x = NULL;
814 }
815 else
816 x = PyInt_FromLong(i);
817 }
818 else
819 x = PyNumber_Add(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000820 Py_DECREF(v);
821 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000822 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000823 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000824 break;
825
826 case BINARY_SUBTRACT:
827 w = POP();
828 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000829 if (PyInt_Check(v) && PyInt_Check(w)) {
830 /* INLINE: int - int */
831 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000832 a = PyInt_AS_LONG(v);
833 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000834 i = a - b;
835 if ((i^a) < 0 && (i^~b) < 0) {
836 PyErr_SetString(PyExc_OverflowError,
837 "integer subtraction");
838 x = NULL;
839 }
840 else
841 x = PyInt_FromLong(i);
842 }
843 else
844 x = PyNumber_Subtract(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000845 Py_DECREF(v);
846 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000847 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000848 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000849 break;
850
851 case BINARY_SUBSCR:
852 w = POP();
853 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000854 if (PyList_Check(v) && PyInt_Check(w)) {
855 /* INLINE: list[int] */
856 long i = PyInt_AsLong(w);
857 if (i < 0)
Guido van Rossumfa00e951998-07-08 15:02:37 +0000858 i += PyList_GET_SIZE(v);
Guido van Rossumc12da691997-07-17 23:12:42 +0000859 if (i < 0 ||
Guido van Rossumfa00e951998-07-08 15:02:37 +0000860 i >= PyList_GET_SIZE(v)) {
Guido van Rossumc12da691997-07-17 23:12:42 +0000861 PyErr_SetString(PyExc_IndexError,
862 "list index out of range");
863 x = NULL;
864 }
865 else {
Guido van Rossumfa00e951998-07-08 15:02:37 +0000866 x = PyList_GET_ITEM(v, i);
Guido van Rossumc12da691997-07-17 23:12:42 +0000867 Py_INCREF(x);
868 }
869 }
870 else
871 x = PyObject_GetItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000872 Py_DECREF(v);
873 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000874 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000875 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000876 break;
877
Guido van Rossum7928cd71991-10-24 14:59:31 +0000878 case BINARY_LSHIFT:
879 w = POP();
880 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000881 x = PyNumber_Lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000882 Py_DECREF(v);
883 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000884 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000885 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000886 break;
887
888 case BINARY_RSHIFT:
889 w = POP();
890 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000891 x = PyNumber_Rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000892 Py_DECREF(v);
893 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000894 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000895 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000896 break;
897
898 case BINARY_AND:
899 w = POP();
900 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000901 x = PyNumber_And(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000902 Py_DECREF(v);
903 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000904 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000905 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000906 break;
907
908 case BINARY_XOR:
909 w = POP();
910 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000911 x = PyNumber_Xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000912 Py_DECREF(v);
913 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000914 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000915 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000916 break;
917
918 case BINARY_OR:
919 w = POP();
920 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000921 x = PyNumber_Or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000922 Py_DECREF(v);
923 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000924 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000925 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000926 break;
927
Guido van Rossum374a9221991-04-04 10:40:29 +0000928 case SLICE+0:
929 case SLICE+1:
930 case SLICE+2:
931 case SLICE+3:
932 if ((opcode-SLICE) & 2)
933 w = POP();
934 else
935 w = NULL;
936 if ((opcode-SLICE) & 1)
937 v = POP();
938 else
939 v = NULL;
940 u = POP();
941 x = apply_slice(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000942 Py_DECREF(u);
943 Py_XDECREF(v);
944 Py_XDECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000945 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000946 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000947 break;
948
949 case STORE_SLICE+0:
950 case STORE_SLICE+1:
951 case STORE_SLICE+2:
952 case STORE_SLICE+3:
953 if ((opcode-STORE_SLICE) & 2)
954 w = POP();
955 else
956 w = NULL;
957 if ((opcode-STORE_SLICE) & 1)
958 v = POP();
959 else
960 v = NULL;
961 u = POP();
962 t = POP();
963 err = assign_slice(u, v, w, t); /* u[v:w] = t */
Guido van Rossumb209a111997-04-29 18:18:01 +0000964 Py_DECREF(t);
965 Py_DECREF(u);
966 Py_XDECREF(v);
967 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000968 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000969 break;
970
971 case DELETE_SLICE+0:
972 case DELETE_SLICE+1:
973 case DELETE_SLICE+2:
974 case DELETE_SLICE+3:
975 if ((opcode-DELETE_SLICE) & 2)
976 w = POP();
977 else
978 w = NULL;
979 if ((opcode-DELETE_SLICE) & 1)
980 v = POP();
981 else
982 v = NULL;
983 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000984 err = assign_slice(u, v, w, (PyObject *)NULL);
Guido van Rossum374a9221991-04-04 10:40:29 +0000985 /* del u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +0000986 Py_DECREF(u);
987 Py_XDECREF(v);
988 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000989 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000990 break;
991
992 case STORE_SUBSCR:
993 w = POP();
994 v = POP();
995 u = POP();
996 /* v[w] = u */
Guido van Rossumfc490731997-05-06 15:06:49 +0000997 err = PyObject_SetItem(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +0000998 Py_DECREF(u);
999 Py_DECREF(v);
1000 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001001 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001002 break;
1003
1004 case DELETE_SUBSCR:
1005 w = POP();
1006 v = POP();
1007 /* del v[w] */
Guido van Rossumfc490731997-05-06 15:06:49 +00001008 err = PyObject_DelItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001009 Py_DECREF(v);
1010 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001011 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001012 break;
1013
1014 case PRINT_EXPR:
1015 v = POP();
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001016 /* Print value except if None */
1017 /* After printing, also assign to '_' */
1018 /* Before, set '_' to None to avoid recursion */
Guido van Rossumb209a111997-04-29 18:18:01 +00001019 if (v != Py_None &&
Guido van Rossuma027efa1997-05-05 20:56:21 +00001020 (err = PyDict_SetItemString(
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001021 f->f_builtins, "_", Py_None)) == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +00001022 err = Py_FlushLine();
Guido van Rossumc12da691997-07-17 23:12:42 +00001023 if (err == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +00001024 x = PySys_GetObject("stdout");
Guido van Rossum8f183201997-12-31 05:53:15 +00001025 if (x == NULL) {
1026 PyErr_SetString(
1027 PyExc_RuntimeError,
1028 "lost sys.stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00001029 err = -1;
Guido van Rossum8f183201997-12-31 05:53:15 +00001030 }
Guido van Rossumbe270261997-05-22 22:26:18 +00001031 }
1032 if (err == 0)
1033 err = PyFile_WriteObject(v, x, 0);
1034 if (err == 0) {
1035 PyFile_SoftSpace(x, 1);
1036 err = Py_FlushLine();
1037 }
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001038 if (err == 0) {
1039 err = PyDict_SetItemString(
1040 f->f_builtins, "_", v);
1041 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001042 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001043 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001044 break;
1045
1046 case PRINT_ITEM:
1047 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001048 w = PySys_GetObject("stdout");
Guido van Rossum8f183201997-12-31 05:53:15 +00001049 if (w == NULL) {
1050 PyErr_SetString(PyExc_RuntimeError,
1051 "lost sys.stdout");
1052 err = -1;
1053 }
1054 else if (PyFile_SoftSpace(w, 1))
Guido van Rossumbe270261997-05-22 22:26:18 +00001055 err = PyFile_WriteString(" ", w);
1056 if (err == 0)
1057 err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
Guido van Rossumb209a111997-04-29 18:18:01 +00001058 if (err == 0 && PyString_Check(v)) {
Guido van Rossumc6004111993-11-05 10:22:19 +00001059 /* XXX move into writeobject() ? */
Guido van Rossumb209a111997-04-29 18:18:01 +00001060 char *s = PyString_AsString(v);
1061 int len = PyString_Size(v);
Guido van Rossum7f7f2741995-02-10 17:01:56 +00001062 if (len > 0 &&
1063 isspace(Py_CHARMASK(s[len-1])) &&
Guido van Rossumc6004111993-11-05 10:22:19 +00001064 s[len-1] != ' ')
Guido van Rossumb209a111997-04-29 18:18:01 +00001065 PyFile_SoftSpace(w, 0);
Guido van Rossum374a9221991-04-04 10:40:29 +00001066 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001067 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001068 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001069 break;
1070
1071 case PRINT_NEWLINE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001072 x = PySys_GetObject("stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001073 if (x == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00001074 PyErr_SetString(PyExc_RuntimeError,
1075 "lost sys.stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001076 else {
Guido van Rossumbe270261997-05-22 22:26:18 +00001077 err = PyFile_WriteString("\n", x);
1078 if (err == 0)
1079 PyFile_SoftSpace(x, 0);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001080 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001081 break;
1082
1083 case BREAK_LOOP:
1084 why = WHY_BREAK;
1085 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001086
Guido van Rossumf10570b1995-07-07 22:53:21 +00001087 case RAISE_VARARGS:
1088 u = v = w = NULL;
1089 switch (oparg) {
1090 case 3:
1091 u = POP(); /* traceback */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001092 /* Fallthrough */
1093 case 2:
1094 v = POP(); /* value */
1095 /* Fallthrough */
1096 case 1:
1097 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001098 case 0: /* Fallthrough */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001099 why = do_raise(w, v, u);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001100 break;
1101 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001102 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001103 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001104 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001105 break;
1106 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001107 break;
1108
1109 case LOAD_LOCALS:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001110 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001111 PyErr_SetString(PyExc_SystemError,
1112 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001113 break;
1114 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001115 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001116 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001117 break;
1118
1119 case RETURN_VALUE:
1120 retval = POP();
1121 why = WHY_RETURN;
1122 break;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001123
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001124 case EXEC_STMT:
1125 w = POP();
1126 v = POP();
1127 u = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001128 err = exec_statement(f, u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001129 Py_DECREF(u);
1130 Py_DECREF(v);
1131 Py_DECREF(w);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001132 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001133
Guido van Rossum374a9221991-04-04 10:40:29 +00001134 case POP_BLOCK:
1135 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001136 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001137 while (STACK_LEVEL() > b->b_level) {
1138 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001139 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001140 }
1141 }
1142 break;
1143
1144 case END_FINALLY:
1145 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001146 if (PyInt_Check(v)) {
1147 why = (enum why_code) PyInt_AsLong(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001148 if (why == WHY_RETURN)
1149 retval = POP();
1150 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001151 else if (PyString_Check(v) || PyClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001152 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001153 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001154 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001155 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001156 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001157 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001158 else if (v != Py_None) {
1159 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001160 "'finally' pops bad exception");
1161 why = WHY_EXCEPTION;
1162 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001163 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001164 break;
1165
1166 case BUILD_CLASS:
Guido van Rossum25831651993-05-19 14:50:45 +00001167 u = POP();
Guido van Rossum374a9221991-04-04 10:40:29 +00001168 v = POP();
Guido van Rossum25831651993-05-19 14:50:45 +00001169 w = POP();
1170 x = build_class(u, v, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001171 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001172 Py_DECREF(u);
1173 Py_DECREF(v);
1174 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001175 break;
1176
1177 case STORE_NAME:
1178 w = GETNAMEV(oparg);
1179 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001180 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001181 PyErr_SetString(PyExc_SystemError,
1182 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001183 break;
1184 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001185 err = PyDict_SetItem(x, w, v);
1186 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001187 break;
1188
1189 case DELETE_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001190 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001191 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001192 PyErr_SetString(PyExc_SystemError,
1193 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001194 break;
1195 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001196 if ((err = PyDict_DelItem(x, w)) != 0)
1197 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001198 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001199
1200#ifdef CASE_TOO_BIG
1201 default: switch (opcode) {
1202#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001203
1204 case UNPACK_TUPLE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001205 case UNPACK_LIST:
1206 v = POP();
Barry Warsawe42b18f1997-08-25 22:13:04 +00001207 if (PyTuple_Check(v)) {
1208 if (PyTuple_Size(v) != oparg) {
1209 PyErr_SetString(PyExc_ValueError,
1210 "unpack tuple of wrong size");
1211 why = WHY_EXCEPTION;
1212 }
1213 else {
1214 for (; --oparg >= 0; ) {
1215 w = PyTuple_GET_ITEM(v, oparg);
1216 Py_INCREF(w);
1217 PUSH(w);
1218 }
1219 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001220 }
Barry Warsawe42b18f1997-08-25 22:13:04 +00001221 else if (PyList_Check(v)) {
1222 if (PyList_Size(v) != oparg) {
1223 PyErr_SetString(PyExc_ValueError,
1224 "unpack list of wrong size");
1225 why = WHY_EXCEPTION;
1226 }
1227 else {
1228 for (; --oparg >= 0; ) {
1229 w = PyList_GET_ITEM(v, oparg);
1230 Py_INCREF(w);
1231 PUSH(w);
1232 }
1233 }
1234 }
1235 else if (PySequence_Check(v)) {
1236 if (unpack_sequence(v, oparg,
1237 stack_pointer + oparg))
1238 stack_pointer += oparg;
1239 else
1240 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001241 }
1242 else {
Barry Warsawe42b18f1997-08-25 22:13:04 +00001243 PyErr_SetString(PyExc_TypeError,
1244 "unpack non-sequence");
1245 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001246 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001247 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001248 break;
1249
1250 case STORE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001251 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001252 v = POP();
1253 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001254 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1255 Py_DECREF(v);
1256 Py_DECREF(u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001257 break;
1258
1259 case DELETE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001260 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001261 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001262 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1263 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001264 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001265 break;
1266
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001267 case STORE_GLOBAL:
1268 w = GETNAMEV(oparg);
1269 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001270 err = PyDict_SetItem(f->f_globals, w, v);
1271 Py_DECREF(v);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001272 break;
1273
1274 case DELETE_GLOBAL:
1275 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001276 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
1277 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001278 break;
1279
Guido van Rossum374a9221991-04-04 10:40:29 +00001280 case LOAD_CONST:
1281 x = GETCONST(oparg);
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_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001287 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001288 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001289 PyErr_SetString(PyExc_SystemError,
1290 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001291 break;
1292 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001293 x = PyDict_GetItem(x, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001294 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001295 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001296 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001297 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001298 if (x == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001299 PyErr_SetObject(
1300 PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001301 break;
1302 }
1303 }
1304 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001305 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001306 PUSH(x);
1307 break;
1308
1309 case LOAD_GLOBAL:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001310 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001311 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001312 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001313 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001314 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001315 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001316 break;
1317 }
1318 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001319 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001320 PUSH(x);
1321 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001322
Guido van Rossum9bfef441993-03-29 10:43:31 +00001323 case LOAD_FAST:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001324 x = GETLOCAL(oparg);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001325 if (x == NULL) {
Guido van Rossum87460821999-06-22 14:47:32 +00001326 PyErr_SetObject(PyExc_UnboundLocalError,
Guido van Rossumb209a111997-04-29 18:18:01 +00001327 PyTuple_GetItem(co->co_varnames,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001328 oparg));
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001329 break;
1330 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001331 Py_INCREF(x);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001332 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001333 if (x != NULL) continue;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001334 break;
1335
1336 case STORE_FAST:
Guido van Rossum25831651993-05-19 14:50:45 +00001337 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001338 SETLOCAL(oparg, v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001339 continue;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001340
1341 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001342 x = GETLOCAL(oparg);
1343 if (x == NULL) {
Guido van Rossum87460821999-06-22 14:47:32 +00001344 PyErr_SetObject(PyExc_UnboundLocalError,
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001345 PyTuple_GetItem(co->co_varnames,
1346 oparg));
1347 break;
1348 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001349 SETLOCAL(oparg, NULL);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001350 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001351
1352 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001353 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001354 if (x != NULL) {
1355 for (; --oparg >= 0;) {
1356 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001357 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001358 }
1359 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001360 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001361 }
1362 break;
1363
1364 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001365 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001366 if (x != NULL) {
1367 for (; --oparg >= 0;) {
1368 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001369 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001370 }
1371 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001372 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001373 }
1374 break;
1375
1376 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001377 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001378 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001379 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001380 break;
1381
1382 case LOAD_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001383 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001384 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001385 x = PyObject_GetAttr(v, w);
1386 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001387 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001388 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001389 break;
1390
1391 case COMPARE_OP:
1392 w = POP();
1393 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +00001394 if (PyInt_Check(v) && PyInt_Check(w)) {
1395 /* INLINE: cmp(int, int) */
1396 register long a, b;
1397 register int res;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001398 a = PyInt_AS_LONG(v);
1399 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001400 switch (oparg) {
1401 case LT: res = a < b; break;
1402 case LE: res = a <= b; break;
1403 case EQ: res = a == b; break;
1404 case NE: res = a != b; break;
1405 case GT: res = a > b; break;
1406 case GE: res = a >= b; break;
1407 case IS: res = v == w; break;
1408 case IS_NOT: res = v != w; break;
1409 default: goto slow_compare;
1410 }
1411 x = res ? Py_True : Py_False;
1412 Py_INCREF(x);
1413 }
1414 else {
1415 slow_compare:
1416 x = cmp_outcome(oparg, v, w);
1417 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001418 Py_DECREF(v);
1419 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001420 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001421 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001422 break;
1423
1424 case IMPORT_NAME:
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001425 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001426 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001427 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001428 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001429 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001430 break;
1431 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001432 u = find_from_args(f, INSTR_OFFSET());
1433 if (u == NULL) {
1434 x = u;
1435 break;
Guido van Rossum24c13741995-02-14 09:42:43 +00001436 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001437 w = Py_BuildValue("(OOOO)",
Guido van Rossum681d79a1995-07-18 14:51:37 +00001438 w,
1439 f->f_globals,
Guido van Rossuma027efa1997-05-05 20:56:21 +00001440 f->f_locals == NULL ?
1441 Py_None : f->f_locals,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001442 u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001443 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001444 if (w == NULL) {
1445 x = NULL;
1446 break;
1447 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001448 x = PyEval_CallObject(x, w);
1449 Py_DECREF(w);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001450 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001451 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001452 break;
1453
1454 case IMPORT_FROM:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001455 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001456 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001457 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001458 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001459 PyErr_SetString(PyExc_SystemError,
1460 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001461 break;
1462 }
1463 err = import_from(x, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001464 PyFrame_LocalsToFast(f, 0);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001465 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001466 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001467
Guido van Rossum374a9221991-04-04 10:40:29 +00001468 case JUMP_FORWARD:
1469 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001470 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001471
1472 case JUMP_IF_FALSE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001473 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001474 if (err > 0)
1475 err = 0;
1476 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00001477 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001478 else
1479 break;
1480 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001481
1482 case JUMP_IF_TRUE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001483 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001484 if (err > 0) {
1485 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00001486 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001487 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001488 else if (err == 0)
1489 ;
1490 else
1491 break;
1492 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001493
1494 case JUMP_ABSOLUTE:
1495 JUMPTO(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001496 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001497
1498 case FOR_LOOP:
1499 /* for v in s: ...
1500 On entry: stack contains s, i.
1501 On exit: stack contains s, i+1, s[i];
1502 but if loop exhausted:
1503 s, i are popped, and we jump */
1504 w = POP(); /* Loop index */
1505 v = POP(); /* Sequence object */
1506 u = loop_subscript(v, w);
1507 if (u != NULL) {
1508 PUSH(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001509 x = PyInt_FromLong(PyInt_AsLong(w)+1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001510 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001511 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001512 PUSH(u);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001513 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001514 }
1515 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001516 Py_DECREF(v);
1517 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001518 /* A NULL can mean "s exhausted"
1519 but also an error: */
Guido van Rossumb209a111997-04-29 18:18:01 +00001520 if (PyErr_Occurred())
Guido van Rossum374a9221991-04-04 10:40:29 +00001521 why = WHY_EXCEPTION;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001522 else {
Guido van Rossum374a9221991-04-04 10:40:29 +00001523 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001524 continue;
1525 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001526 }
1527 break;
1528
1529 case SETUP_LOOP:
1530 case SETUP_EXCEPT:
1531 case SETUP_FINALLY:
Guido van Rossumb209a111997-04-29 18:18:01 +00001532 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Guido van Rossum374a9221991-04-04 10:40:29 +00001533 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001534 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001535
1536 case SET_LINENO:
Guido van Rossum96a42c81992-01-12 02:29:51 +00001537#ifdef LLTRACE
1538 if (lltrace)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001539 printf("--- %s:%d \n", filename, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001540#endif
Guido van Rossum96a42c81992-01-12 02:29:51 +00001541 f->f_lineno = oparg;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001542 if (f->f_trace == NULL)
1543 continue;
1544 /* Trace each line of code reached */
1545 f->f_lasti = INSTR_OFFSET();
1546 err = call_trace(&f->f_trace, &f->f_trace,
Guido van Rossumb209a111997-04-29 18:18:01 +00001547 f, "line", Py_None);
Guido van Rossum374a9221991-04-04 10:40:29 +00001548 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001549
1550 case CALL_FUNCTION:
Jeremy Hylton76901512000-03-28 23:49:17 +00001551 case CALL_FUNCTION_VAR:
1552 case CALL_FUNCTION_KW:
1553 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00001554 {
Jeremy Hylton76901512000-03-28 23:49:17 +00001555 int na = oparg & 0xff;
1556 int nk = (oparg>>8) & 0xff;
1557 int flags = (opcode - CALL_FUNCTION) & 3;
1558 int n = na + 2*nk + (flags & 1) + ((flags >> 1) & 1);
1559 PyObject **pfunc = stack_pointer - n - 1;
1560 PyObject *func = *pfunc;
1561 PyObject *self = NULL;
1562 PyObject *class = NULL;
1563 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
1564 if (PyMethod_Check(func)) {
1565 self = PyMethod_Self(func);
1566 class = PyMethod_Class(func);
1567 func = PyMethod_Function(func);
1568 Py_INCREF(func);
1569 if (self != NULL) {
1570 Py_INCREF(self);
1571 Py_DECREF(*pfunc);
1572 *pfunc = self;
1573 na++;
1574 n++;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001575 }
1576 else {
Jeremy Hylton76901512000-03-28 23:49:17 +00001577 /* Unbound methods must be called with an
1578 instance of the class (or a derived
1579 class) as first argument */
1580 if (na > 0 && (self = stack_pointer[-n]) != NULL
1581 && PyInstance_Check(self)
1582 && PyClass_IsSubclass((PyObject *)
1583 (((PyInstanceObject *)self)->in_class),
1584 class))
1585 /* Handy-dandy */ ;
1586 else {
1587 PyErr_SetString(PyExc_TypeError,
1588 "unbound method must be called with class instance 1st argument");
1589 x = NULL;
1590 break;
1591 }
1592 }
1593 }
1594 else
1595 Py_INCREF(func);
1596 if (PyFunction_Check(func) && flags == 0) {
1597 PyObject *co = PyFunction_GetCode(func);
1598 PyObject *globals = PyFunction_GetGlobals(func);
1599 PyObject *argdefs = PyFunction_GetDefaults(func);
1600 PyObject **d;
1601 int nd;
1602 if (argdefs != NULL) {
1603 d = &PyTuple_GET_ITEM(argdefs, 0);
1604 nd = ((PyTupleObject *)argdefs)->ob_size;
1605 }
1606 else {
1607 d = NULL;
1608 nd = 0;
1609 }
1610 x = eval_code2((PyCodeObject *)co, globals,
1611 (PyObject *)NULL, stack_pointer-n, na,
1612 stack_pointer-2*nk, nk, d, nd,
1613 class);
1614 }
1615 else {
1616 int nstar = 0;
Jeremy Hylton387b1012000-03-31 01:22:54 +00001617 PyObject *callargs;
Jeremy Hylton76901512000-03-28 23:49:17 +00001618 PyObject *stararg = 0;
1619 PyObject *kwdict = NULL;
1620 if (flags & 2) {
1621 kwdict = POP();
1622 if (!PyDict_Check(kwdict)) {
1623 PyErr_SetString(PyExc_TypeError,
1624 "** argument must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00001625 goto extcall_fail;
Jeremy Hylton76901512000-03-28 23:49:17 +00001626 }
1627 }
1628 if (flags & 1) {
1629 stararg = POP();
1630 if (!PySequence_Check(stararg)) {
1631 PyErr_SetString(PyExc_TypeError,
1632 "* argument must be a sequence");
Guido van Rossum25826c92000-04-21 21:17:39 +00001633 goto extcall_fail;
Jeremy Hylton76901512000-03-28 23:49:17 +00001634 }
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001635 /* Convert abstract sequence to concrete tuple */
1636 if (!PyTuple_Check(stararg)) {
1637 PyObject *t = NULL;
1638 t = PySequence_Tuple(stararg);
1639 if (t == NULL) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001640 goto extcall_fail;
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001641 }
1642 Py_DECREF(stararg);
1643 stararg = t;
1644 }
1645 nstar = PyTuple_GET_SIZE(stararg);
Barry Warsaw4961ef72000-03-29 18:30:03 +00001646 if (nstar < 0) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001647 goto extcall_fail;
Barry Warsaw4961ef72000-03-29 18:30:03 +00001648 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001649 }
1650 if (nk > 0) {
1651 if (kwdict == NULL) {
1652 kwdict = PyDict_New();
1653 if (kwdict == NULL) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001654 goto extcall_fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001655 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001656 }
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001657 else {
1658 PyObject *d = PyDict_Copy(kwdict);
1659 if (d == NULL) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001660 goto extcall_fail;
Jeremy Hylton074c3e62000-03-30 23:55:31 +00001661 }
1662 Py_DECREF(kwdict);
1663 kwdict = d;
1664 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001665 err = 0;
1666 while (--nk >= 0) {
1667 PyObject *value = POP();
1668 PyObject *key = POP();
1669 if (PyDict_GetItem(kwdict, key) != NULL) {
1670 err = 1;
1671 PyErr_Format(PyExc_TypeError,
1672 "keyword parameter redefined: %.400s",
1673 PyString_AsString(key));
Jeremy Hylton387b1012000-03-31 01:22:54 +00001674 Py_DECREF(key);
1675 Py_DECREF(value);
Guido van Rossum25826c92000-04-21 21:17:39 +00001676 goto extcall_fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001677 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001678 err = PyDict_SetItem(kwdict, key, value);
1679 Py_DECREF(key);
1680 Py_DECREF(value);
1681 if (err)
1682 break;
1683 }
1684 if (err) {
Guido van Rossum25826c92000-04-21 21:17:39 +00001685 extcall_fail:
1686 Py_XDECREF(kwdict);
1687 Py_XDECREF(stararg);
1688 Py_DECREF(func);
1689 x=NULL;
Jeremy Hylton76901512000-03-28 23:49:17 +00001690 break;
1691 }
Guido van Rossumf10570b1995-07-07 22:53:21 +00001692 }
Jeremy Hylton387b1012000-03-31 01:22:54 +00001693 callargs = PyTuple_New(na + nstar);
1694 if (callargs == NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +00001695 x = NULL;
1696 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001697 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001698 if (stararg) {
Jeremy Hylton76901512000-03-28 23:49:17 +00001699 int i;
Jeremy Hylton76901512000-03-28 23:49:17 +00001700 for (i = 0; i < nstar; i++) {
1701 PyObject *a = PyTuple_GET_ITEM(stararg, i);
1702 Py_INCREF(a);
Jeremy Hylton387b1012000-03-31 01:22:54 +00001703 PyTuple_SET_ITEM(callargs, na + i, a);
Jeremy Hylton76901512000-03-28 23:49:17 +00001704 }
1705 Py_DECREF(stararg);
1706 }
1707 while (--na >= 0) {
1708 w = POP();
Jeremy Hylton387b1012000-03-31 01:22:54 +00001709 PyTuple_SET_ITEM(callargs, na, w);
Jeremy Hylton76901512000-03-28 23:49:17 +00001710 }
Jeremy Hylton387b1012000-03-31 01:22:54 +00001711 x = PyEval_CallObjectWithKeywords(func,
1712 callargs,
1713 kwdict);
1714 Py_DECREF(callargs);
Jeremy Hylton76901512000-03-28 23:49:17 +00001715 Py_XDECREF(kwdict);
1716 }
1717 Py_DECREF(func);
1718 while (stack_pointer > pfunc) {
1719 w = POP();
1720 Py_DECREF(w);
1721 }
1722 PUSH(x);
1723 if (x != NULL) continue;
1724 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001725 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001726
Guido van Rossum681d79a1995-07-18 14:51:37 +00001727 case MAKE_FUNCTION:
1728 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00001729 x = PyFunction_New(v, f->f_globals);
1730 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001731 /* XXX Maybe this should be a separate opcode? */
1732 if (x != NULL && oparg > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001733 v = PyTuple_New(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001734 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001735 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001736 x = NULL;
1737 break;
1738 }
1739 while (--oparg >= 0) {
1740 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001741 PyTuple_SET_ITEM(v, oparg, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001742 }
1743 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001744 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001745 }
1746 PUSH(x);
1747 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001748
1749 case BUILD_SLICE:
1750 if (oparg == 3)
1751 w = POP();
1752 else
1753 w = NULL;
1754 v = POP();
1755 u = POP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00001756 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001757 Py_DECREF(u);
1758 Py_DECREF(v);
1759 Py_XDECREF(w);
Guido van Rossum8861b741996-07-30 16:49:37 +00001760 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001761 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00001762 break;
1763
1764
Guido van Rossum374a9221991-04-04 10:40:29 +00001765 default:
1766 fprintf(stderr,
1767 "XXX lineno: %d, opcode: %d\n",
Guido van Rossum96a42c81992-01-12 02:29:51 +00001768 f->f_lineno, opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00001769 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00001770 why = WHY_EXCEPTION;
1771 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001772
1773#ifdef CASE_TOO_BIG
1774 }
1775#endif
1776
Guido van Rossum374a9221991-04-04 10:40:29 +00001777 } /* switch */
1778
1779 on_error:
1780
1781 /* Quickly continue if no error occurred */
1782
1783 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001784 if (err == 0 && x != NULL) {
1785#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001786 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001787 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00001788 fprintf(stderr,
1789 "XXX undetected error\n");
1790 else
1791#endif
1792 continue; /* Normal, fast path */
1793 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001794 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00001795 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00001796 err = 0;
1797 }
1798
Guido van Rossum374a9221991-04-04 10:40:29 +00001799 /* Double-check exception status */
1800
1801 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001802 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001803 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001804 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00001805 why = WHY_EXCEPTION;
1806 }
1807 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001808#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00001809 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001810 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001811 if (PyErr_Occurred()) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001812 fprintf(stderr,
1813 "XXX undetected error (why=%d)\n",
1814 why);
1815 why = WHY_EXCEPTION;
1816 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001817 }
1818#endif
1819
1820 /* Log traceback info if this is a real exception */
1821
1822 if (why == WHY_EXCEPTION) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001823 f->f_lasti = INSTR_OFFSET() - 1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001824 if (HAS_ARG(opcode))
Guido van Rossum96a42c81992-01-12 02:29:51 +00001825 f->f_lasti -= 2;
Guido van Rossumb209a111997-04-29 18:18:01 +00001826 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001827
Guido van Rossume59214e1994-08-30 08:01:59 +00001828 if (f->f_trace)
1829 call_exc_trace(&f->f_trace, &f->f_trace, f);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001830 if (tstate->sys_profilefunc)
1831 call_exc_trace(&tstate->sys_profilefunc,
1832 (PyObject**)0, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00001833 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001834
1835 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
1836
1837 if (why == WHY_RERAISE)
1838 why = WHY_EXCEPTION;
1839
1840 /* Unwind stacks if a (pseudo) exception occurred */
1841
1842 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001843 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001844 while (STACK_LEVEL() > b->b_level) {
1845 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001846 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001847 }
1848 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
1849 why = WHY_NOT;
1850 JUMPTO(b->b_handler);
1851 break;
1852 }
1853 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00001854 (b->b_type == SETUP_EXCEPT &&
1855 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001856 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001857 PyObject *exc, *val, *tb;
1858 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001859 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001860 val = Py_None;
1861 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00001862 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001863 /* Make the raw exception data
1864 available to the handler,
1865 so a program can emulate the
1866 Python main loop. Don't do
1867 this for 'finally'. */
1868 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00001869 PyErr_NormalizeException(
1870 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001871 set_exc_info(tstate,
1872 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001873 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001874 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001875 PUSH(val);
1876 PUSH(exc);
1877 }
1878 else {
1879 if (why == WHY_RETURN)
1880 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00001881 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00001882 PUSH(v);
1883 }
1884 why = WHY_NOT;
1885 JUMPTO(b->b_handler);
1886 break;
1887 }
1888 } /* unwind stack */
1889
1890 /* End the loop if we still have an error (or return) */
1891
1892 if (why != WHY_NOT)
1893 break;
1894
1895 } /* main loop */
1896
1897 /* Pop remaining stack entries */
1898
1899 while (!EMPTY()) {
1900 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001901 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001902 }
1903
Guido van Rossum96a42c81992-01-12 02:29:51 +00001904 if (why != WHY_RETURN)
1905 retval = NULL;
1906
Guido van Rossume59214e1994-08-30 08:01:59 +00001907 if (f->f_trace) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001908 if (why == WHY_RETURN) {
Guido van Rossume59214e1994-08-30 08:01:59 +00001909 if (call_trace(&f->f_trace, &f->f_trace, f,
1910 "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001911 Py_XDECREF(retval);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001912 retval = NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001913 why = WHY_EXCEPTION;
Guido van Rossum96a42c81992-01-12 02:29:51 +00001914 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001915 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001916 }
1917
Guido van Rossuma027efa1997-05-05 20:56:21 +00001918 if (tstate->sys_profilefunc && why == WHY_RETURN) {
1919 if (call_trace(&tstate->sys_profilefunc, (PyObject**)0,
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001920 f, "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001921 Py_XDECREF(retval);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001922 retval = NULL;
1923 why = WHY_EXCEPTION;
1924 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001925 }
Guido van Rossuma4240131997-01-21 21:18:36 +00001926
Guido van Rossuma027efa1997-05-05 20:56:21 +00001927 reset_exc_info(tstate);
1928
1929 --tstate->recursion_depth;
Guido van Rossum8c5df061997-01-24 04:19:24 +00001930
1931 fail: /* Jump here from prelude on failure */
Guido van Rossum96a42c81992-01-12 02:29:51 +00001932
Guido van Rossum374a9221991-04-04 10:40:29 +00001933 /* Restore previous frame and release the current one */
Guido van Rossum681d79a1995-07-18 14:51:37 +00001934
Guido van Rossuma027efa1997-05-05 20:56:21 +00001935 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +00001936 Py_DECREF(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001937
Guido van Rossum96a42c81992-01-12 02:29:51 +00001938 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00001939}
1940
Guido van Rossuma027efa1997-05-05 20:56:21 +00001941static void
1942set_exc_info(tstate, type, value, tb)
1943 PyThreadState *tstate;
1944 PyObject *type;
1945 PyObject *value;
1946 PyObject *tb;
1947{
1948 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001949 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00001950
Guido van Rossuma027efa1997-05-05 20:56:21 +00001951 frame = tstate->frame;
1952 if (frame->f_exc_type == NULL) {
1953 /* This frame didn't catch an exception before */
1954 /* Save previous exception of this thread in this frame */
Guido van Rossuma027efa1997-05-05 20:56:21 +00001955 if (tstate->exc_type == NULL) {
1956 Py_INCREF(Py_None);
1957 tstate->exc_type = Py_None;
1958 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001959 tmp_type = frame->f_exc_type;
1960 tmp_value = frame->f_exc_value;
1961 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001962 Py_XINCREF(tstate->exc_type);
1963 Py_XINCREF(tstate->exc_value);
1964 Py_XINCREF(tstate->exc_traceback);
1965 frame->f_exc_type = tstate->exc_type;
1966 frame->f_exc_value = tstate->exc_value;
1967 frame->f_exc_traceback = tstate->exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001968 Py_XDECREF(tmp_type);
1969 Py_XDECREF(tmp_value);
1970 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001971 }
1972 /* Set new exception for this thread */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001973 tmp_type = tstate->exc_type;
1974 tmp_value = tstate->exc_value;
1975 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001976 Py_XINCREF(type);
1977 Py_XINCREF(value);
1978 Py_XINCREF(tb);
1979 tstate->exc_type = type;
1980 tstate->exc_value = value;
1981 tstate->exc_traceback = tb;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001982 Py_XDECREF(tmp_type);
1983 Py_XDECREF(tmp_value);
1984 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001985 /* For b/w compatibility */
1986 PySys_SetObject("exc_type", type);
1987 PySys_SetObject("exc_value", value);
1988 PySys_SetObject("exc_traceback", tb);
1989}
1990
1991static void
1992reset_exc_info(tstate)
1993 PyThreadState *tstate;
1994{
1995 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001996 PyObject *tmp_type, *tmp_value, *tmp_tb;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001997 frame = tstate->frame;
1998 if (frame->f_exc_type != NULL) {
1999 /* This frame caught an exception */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002000 tmp_type = tstate->exc_type;
2001 tmp_value = tstate->exc_value;
2002 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002003 Py_XINCREF(frame->f_exc_type);
2004 Py_XINCREF(frame->f_exc_value);
2005 Py_XINCREF(frame->f_exc_traceback);
2006 tstate->exc_type = frame->f_exc_type;
2007 tstate->exc_value = frame->f_exc_value;
2008 tstate->exc_traceback = frame->f_exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002009 Py_XDECREF(tmp_type);
2010 Py_XDECREF(tmp_value);
2011 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002012 /* For b/w compatibility */
2013 PySys_SetObject("exc_type", frame->f_exc_type);
2014 PySys_SetObject("exc_value", frame->f_exc_value);
2015 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
2016 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002017 tmp_type = frame->f_exc_type;
2018 tmp_value = frame->f_exc_value;
2019 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002020 frame->f_exc_type = NULL;
2021 frame->f_exc_value = NULL;
2022 frame->f_exc_traceback = NULL;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002023 Py_XDECREF(tmp_type);
2024 Py_XDECREF(tmp_value);
2025 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002026}
2027
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002028/* Logic for the raise statement (too complicated for inlining).
2029 This *consumes* a reference count to each of its arguments. */
Guido van Rossum1aa14831997-01-21 05:34:20 +00002030static enum why_code
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002031do_raise(type, value, tb)
Guido van Rossumb209a111997-04-29 18:18:01 +00002032 PyObject *type, *value, *tb;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002033{
Guido van Rossumd295f121998-04-09 21:39:57 +00002034 if (type == NULL) {
2035 /* Reraise */
2036 PyThreadState *tstate = PyThreadState_Get();
2037 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
2038 value = tstate->exc_value;
2039 tb = tstate->exc_traceback;
2040 Py_XINCREF(type);
2041 Py_XINCREF(value);
2042 Py_XINCREF(tb);
2043 }
2044
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002045 /* We support the following forms of raise:
2046 raise <class>, <classinstance>
2047 raise <class>, <argument tuple>
2048 raise <class>, None
2049 raise <class>, <argument>
2050 raise <classinstance>, None
2051 raise <string>, <object>
2052 raise <string>, None
2053
2054 An omitted second argument is the same as None.
2055
2056 In addition, raise <tuple>, <anything> is the same as
2057 raising the tuple's first item (and it better have one!);
2058 this rule is applied recursively.
2059
2060 Finally, an optional third argument can be supplied, which
2061 gives the traceback to be substituted (useful when
2062 re-raising an exception after examining it). */
2063
2064 /* First, check the traceback argument, replacing None with
2065 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002066 if (tb == Py_None) {
2067 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002068 tb = NULL;
2069 }
2070 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002071 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002072 "raise 3rd arg must be traceback or None");
2073 goto raise_error;
2074 }
2075
2076 /* Next, replace a missing value with None */
2077 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002078 value = Py_None;
2079 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002080 }
2081
2082 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00002083 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
2084 PyObject *tmp = type;
2085 type = PyTuple_GET_ITEM(type, 0);
2086 Py_INCREF(type);
2087 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002088 }
2089
Barry Warsaw4249f541997-08-22 21:26:19 +00002090 if (PyString_Check(type))
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002091 ;
Barry Warsaw4249f541997-08-22 21:26:19 +00002092
2093 else if (PyClass_Check(type))
2094 PyErr_NormalizeException(&type, &value, &tb);
2095
Guido van Rossumb209a111997-04-29 18:18:01 +00002096 else if (PyInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002097 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002098 if (value != Py_None) {
2099 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002100 "instance exception may not have a separate value");
2101 goto raise_error;
2102 }
2103 else {
2104 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00002105 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002106 value = type;
Guido van Rossumb209a111997-04-29 18:18:01 +00002107 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2108 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002109 }
2110 }
2111 else {
2112 /* Not something you can raise. You get an exception
2113 anyway, just not what you specified :-) */
Guido van Rossumb209a111997-04-29 18:18:01 +00002114 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002115 "exceptions must be strings, classes, or instances");
2116 goto raise_error;
2117 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002118 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002119 if (tb == NULL)
2120 return WHY_EXCEPTION;
2121 else
2122 return WHY_RERAISE;
2123 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002124 Py_XDECREF(value);
2125 Py_XDECREF(type);
2126 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002127 return WHY_EXCEPTION;
2128}
2129
Barry Warsawe42b18f1997-08-25 22:13:04 +00002130static int
2131unpack_sequence(v, argcnt, sp)
2132 PyObject *v;
2133 int argcnt;
2134 PyObject **sp;
2135{
2136 int i;
2137 PyObject *w;
2138
2139 for (i = 0; i < argcnt; i++) {
2140 if (! (w = PySequence_GetItem(v, i))) {
2141 if (PyErr_ExceptionMatches(PyExc_IndexError))
2142 PyErr_SetString(PyExc_ValueError,
2143 "unpack sequence of wrong size");
2144 goto finally;
2145 }
2146 *--sp = w;
2147 }
2148 /* we better get an IndexError now */
2149 if (PySequence_GetItem(v, i) == NULL) {
2150 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2151 PyErr_Clear();
2152 return 1;
2153 }
2154 /* some other exception occurred. fall through to finally */
2155 }
2156 else
2157 PyErr_SetString(PyExc_ValueError,
2158 "unpack sequence of wrong size");
2159 /* fall through */
2160finally:
Barry Warsaw91010551997-08-25 22:30:51 +00002161 for (; i > 0; i--, sp++)
2162 Py_DECREF(*sp);
Barry Warsawe42b18f1997-08-25 22:13:04 +00002163
2164 return 0;
2165}
2166
2167
Guido van Rossum96a42c81992-01-12 02:29:51 +00002168#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00002169static int
2170prtrace(v, str)
Guido van Rossumb209a111997-04-29 18:18:01 +00002171 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002172 char *str;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002173{
Guido van Rossum3f5da241990-12-20 15:06:42 +00002174 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00002175 if (PyObject_Print(v, stdout, 0) != 0)
2176 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00002177 printf("\n");
Guido van Rossumcc229ea2000-05-04 00:55:17 +00002178 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002179}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002180#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002181
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002182static void
2183call_exc_trace(p_trace, p_newtrace, f)
Guido van Rossumb209a111997-04-29 18:18:01 +00002184 PyObject **p_trace, **p_newtrace;
2185 PyFrameObject *f;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002186{
Guido van Rossumb209a111997-04-29 18:18:01 +00002187 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002188 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002189 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002190 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002191 value = Py_None;
2192 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002193 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002194 arg = Py_BuildValue("(OOO)", type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002195 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002196 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002197 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002198 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002199 err = call_trace(p_trace, p_newtrace, f, "exception", arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002200 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002201 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00002202 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002203 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002204 Py_XDECREF(type);
2205 Py_XDECREF(value);
2206 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002207 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002208}
2209
2210static int
2211call_trace(p_trace, p_newtrace, f, msg, arg)
Guido van Rossumb209a111997-04-29 18:18:01 +00002212 PyObject **p_trace; /* in/out; may not be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002213 may not point to NULL variable initially */
Guido van Rossumb209a111997-04-29 18:18:01 +00002214 PyObject **p_newtrace; /* in/out; may be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002215 may point to NULL variable;
2216 may be same variable as p_newtrace */
Guido van Rossumb209a111997-04-29 18:18:01 +00002217 PyFrameObject *f;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002218 char *msg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002219 PyObject *arg;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002220{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002221 PyThreadState *tstate = f->f_tstate;
Guido van Rossumb209a111997-04-29 18:18:01 +00002222 PyObject *args, *what;
2223 PyObject *res = NULL;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002224
Guido van Rossuma027efa1997-05-05 20:56:21 +00002225 if (tstate->tracing) {
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002226 /* Don't do recursive traces */
2227 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002228 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002229 *p_newtrace = NULL;
2230 }
2231 return 0;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002232 }
2233
Guido van Rossumb209a111997-04-29 18:18:01 +00002234 args = PyTuple_New(3);
Guido van Rossumf10570b1995-07-07 22:53:21 +00002235 if (args == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002236 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002237 what = PyString_FromString(msg);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002238 if (what == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002239 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002240 Py_INCREF(f);
2241 PyTuple_SET_ITEM(args, 0, (PyObject *)f);
2242 PyTuple_SET_ITEM(args, 1, what);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002243 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002244 arg = Py_None;
2245 Py_INCREF(arg);
2246 PyTuple_SET_ITEM(args, 2, arg);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002247 tstate->tracing++;
Guido van Rossumb209a111997-04-29 18:18:01 +00002248 PyFrame_FastToLocals(f);
2249 res = PyEval_CallObject(*p_trace, args); /* May clear *p_trace! */
2250 PyFrame_LocalsToFast(f, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002251 tstate->tracing--;
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002252 cleanup:
Guido van Rossumb209a111997-04-29 18:18:01 +00002253 Py_XDECREF(args);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002254 if (res == NULL) {
2255 /* The trace proc raised an exception */
Guido van Rossumb209a111997-04-29 18:18:01 +00002256 PyTraceBack_Here(f);
2257 Py_XDECREF(*p_trace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002258 *p_trace = NULL;
2259 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002260 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002261 *p_newtrace = NULL;
2262 }
Barry Warsawf6202631999-09-08 16:26:33 +00002263 /* to be extra double plus sure we don't get recursive
2264 * calls inf either tracefunc or profilefunc gets an
2265 * exception, zap the global variables.
2266 */
2267 Py_XDECREF(tstate->sys_tracefunc);
2268 tstate->sys_tracefunc = NULL;
2269 Py_XDECREF(tstate->sys_profilefunc);
2270 tstate->sys_profilefunc = NULL;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002271 return -1;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002272 }
2273 else {
2274 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002275 Py_XDECREF(*p_newtrace);
2276 if (res == Py_None)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002277 *p_newtrace = NULL;
2278 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002279 Py_INCREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002280 *p_newtrace = res;
2281 }
2282 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002283 Py_DECREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002284 return 0;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002285 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002286}
2287
Guido van Rossumb209a111997-04-29 18:18:01 +00002288PyObject *
2289PyEval_GetBuiltins()
Guido van Rossum6135a871995-01-09 17:53:26 +00002290{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002291 PyThreadState *tstate = PyThreadState_Get();
2292 PyFrameObject *current_frame = tstate->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002293 if (current_frame == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002294 return tstate->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00002295 else
2296 return current_frame->f_builtins;
2297}
2298
Guido van Rossumb209a111997-04-29 18:18:01 +00002299PyObject *
2300PyEval_GetLocals()
Guido van Rossum5b722181993-03-30 17:46:03 +00002301{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002302 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum5b722181993-03-30 17:46:03 +00002303 if (current_frame == NULL)
2304 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002305 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00002306 return current_frame->f_locals;
2307}
2308
Guido van Rossumb209a111997-04-29 18:18:01 +00002309PyObject *
2310PyEval_GetGlobals()
Guido van Rossum3f5da241990-12-20 15:06:42 +00002311{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002312 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002313 if (current_frame == NULL)
2314 return NULL;
2315 else
2316 return current_frame->f_globals;
2317}
2318
Guido van Rossumb209a111997-04-29 18:18:01 +00002319PyObject *
2320PyEval_GetFrame()
Guido van Rossume59214e1994-08-30 08:01:59 +00002321{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002322 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossumb209a111997-04-29 18:18:01 +00002323 return (PyObject *)current_frame;
Guido van Rossume59214e1994-08-30 08:01:59 +00002324}
2325
Guido van Rossum6135a871995-01-09 17:53:26 +00002326int
Guido van Rossumb209a111997-04-29 18:18:01 +00002327PyEval_GetRestricted()
Guido van Rossum6135a871995-01-09 17:53:26 +00002328{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002329 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002330 return current_frame == NULL ? 0 : current_frame->f_restricted;
2331}
2332
Guido van Rossumbe270261997-05-22 22:26:18 +00002333int
Guido van Rossumb209a111997-04-29 18:18:01 +00002334Py_FlushLine()
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002335{
Guido van Rossumb209a111997-04-29 18:18:01 +00002336 PyObject *f = PySys_GetObject("stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00002337 if (f == NULL)
2338 return 0;
2339 if (!PyFile_SoftSpace(f, 0))
2340 return 0;
2341 return PyFile_WriteString("\n", f);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002342}
2343
Guido van Rossum3f5da241990-12-20 15:06:42 +00002344
Guido van Rossum681d79a1995-07-18 14:51:37 +00002345/* External interface to call any callable object.
2346 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002347
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002348#undef PyEval_CallObject
2349/* for backward compatibility: export this interface */
2350
Guido van Rossumb209a111997-04-29 18:18:01 +00002351PyObject *
2352PyEval_CallObject(func, arg)
2353 PyObject *func;
2354 PyObject *arg;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002355{
Guido van Rossumb209a111997-04-29 18:18:01 +00002356 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002357}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002358#define PyEval_CallObject(func,arg) \
2359 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00002360
Guido van Rossumb209a111997-04-29 18:18:01 +00002361PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002362PyEval_CallObjectWithKeywords(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002363 PyObject *func;
2364 PyObject *arg;
2365 PyObject *kw;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002366{
2367 ternaryfunc call;
Guido van Rossumb209a111997-04-29 18:18:01 +00002368 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002369
2370 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002371 arg = PyTuple_New(0);
2372 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002373 PyErr_SetString(PyExc_TypeError,
2374 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002375 return NULL;
2376 }
2377 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002378 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002379
Guido van Rossumb209a111997-04-29 18:18:01 +00002380 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002381 PyErr_SetString(PyExc_TypeError,
2382 "keyword list must be a dictionary");
Guido van Rossum25826c92000-04-21 21:17:39 +00002383 Py_DECREF(arg);
Guido van Rossume3e61c11995-08-04 04:14:47 +00002384 return NULL;
2385 }
2386
Guido van Rossum150b2df1996-12-05 23:17:11 +00002387 if ((call = func->ob_type->tp_call) != NULL)
Guido van Rossum681d79a1995-07-18 14:51:37 +00002388 result = (*call)(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002389 else if (PyMethod_Check(func) || PyFunction_Check(func))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002390 result = call_function(func, arg, kw);
2391 else
2392 result = call_builtin(func, arg, kw);
2393
Guido van Rossumb209a111997-04-29 18:18:01 +00002394 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002395
Guido van Rossumb209a111997-04-29 18:18:01 +00002396 if (result == NULL && !PyErr_Occurred())
2397 PyErr_SetString(PyExc_SystemError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002398 "NULL result without error in call_object");
Guido van Rossume59214e1994-08-30 08:01:59 +00002399
2400 return result;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002401}
2402
Guido van Rossumb209a111997-04-29 18:18:01 +00002403static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002404call_builtin(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002405 PyObject *func;
2406 PyObject *arg;
2407 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002408{
Guido van Rossumb209a111997-04-29 18:18:01 +00002409 if (PyCFunction_Check(func)) {
2410 PyCFunction meth = PyCFunction_GetFunction(func);
2411 PyObject *self = PyCFunction_GetSelf(func);
2412 int flags = PyCFunction_GetFlags(func);
Guido van Rossumff8b4941995-07-26 18:16:42 +00002413 if (!(flags & METH_VARARGS)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002414 int size = PyTuple_Size(arg);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002415 if (size == 1)
Guido van Rossumb209a111997-04-29 18:18:01 +00002416 arg = PyTuple_GET_ITEM(arg, 0);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002417 else if (size == 0)
2418 arg = NULL;
2419 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002420 if (flags & METH_KEYWORDS)
2421 return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002422 if (kw != NULL && PyDict_Size(kw) != 0) {
2423 PyErr_SetString(PyExc_TypeError,
Guido van Rossumff8b4941995-07-26 18:16:42 +00002424 "this function takes no keyword arguments");
2425 return NULL;
2426 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002427 return (*meth)(self, arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002428 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002429 if (PyClass_Check(func)) {
2430 return PyInstance_New(func, arg, kw);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002431 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002432 if (PyInstance_Check(func)) {
2433 PyObject *res, *call = PyObject_GetAttrString(func,"__call__");
Guido van Rossume59214e1994-08-30 08:01:59 +00002434 if (call == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002435 PyErr_Clear();
2436 PyErr_SetString(PyExc_AttributeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002437 "no __call__ method defined");
Guido van Rossume59214e1994-08-30 08:01:59 +00002438 return NULL;
2439 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002440 res = PyEval_CallObjectWithKeywords(call, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002441 Py_DECREF(call);
Guido van Rossume59214e1994-08-30 08:01:59 +00002442 return res;
2443 }
Guido van Rossumba98a421999-11-15 19:29:33 +00002444 PyErr_Format(PyExc_TypeError, "call of non-function (type %.400s)",
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002445 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002446 return NULL;
2447}
2448
Guido van Rossumb209a111997-04-29 18:18:01 +00002449static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002450call_function(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002451 PyObject *func;
2452 PyObject *arg;
2453 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002454{
Guido van Rossumb209a111997-04-29 18:18:01 +00002455 PyObject *class = NULL; /* == owner */
2456 PyObject *argdefs;
2457 PyObject **d, **k;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002458 int nk, nd;
Guido van Rossumb209a111997-04-29 18:18:01 +00002459 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002460
Guido van Rossumb209a111997-04-29 18:18:01 +00002461 if (kw != NULL && !PyDict_Check(kw)) {
2462 PyErr_BadInternalCall();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002463 return NULL;
2464 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002465
Guido van Rossumb209a111997-04-29 18:18:01 +00002466 if (PyMethod_Check(func)) {
2467 PyObject *self = PyMethod_Self(func);
2468 class = PyMethod_Class(func);
2469 func = PyMethod_Function(func);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002470 if (self == NULL) {
2471 /* Unbound methods must be called with an instance of
2472 the class (or a derived class) as first argument */
Guido van Rossumb209a111997-04-29 18:18:01 +00002473 if (PyTuple_Size(arg) >= 1) {
2474 self = PyTuple_GET_ITEM(arg, 0);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002475 if (self != NULL &&
Guido van Rossumb209a111997-04-29 18:18:01 +00002476 PyInstance_Check(self) &&
2477 PyClass_IsSubclass((PyObject *)
2478 (((PyInstanceObject *)self)->in_class),
Guido van Rossumb3f72581993-05-21 19:56:10 +00002479 class))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002480 /* Handy-dandy */ ;
Guido van Rossumb3f72581993-05-21 19:56:10 +00002481 else
2482 self = NULL;
2483 }
2484 if (self == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002485 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002486 "unbound method must be called with class instance 1st argument");
Guido van Rossumb3f72581993-05-21 19:56:10 +00002487 return NULL;
2488 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002489 Py_INCREF(arg);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002490 }
2491 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002492 int argcount = PyTuple_Size(arg);
2493 PyObject *newarg = PyTuple_New(argcount + 1);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002494 int i;
Guido van Rossum81daa321993-05-20 14:24:46 +00002495 if (newarg == NULL)
2496 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002497 Py_INCREF(self);
2498 PyTuple_SET_ITEM(newarg, 0, self);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002499 for (i = 0; i < argcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002500 PyObject *v = PyTuple_GET_ITEM(arg, i);
2501 Py_XINCREF(v);
2502 PyTuple_SET_ITEM(newarg, i+1, v);
Guido van Rossum81daa321993-05-20 14:24:46 +00002503 }
2504 arg = newarg;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002505 }
Guido van Rossum7859f871998-07-08 14:58:16 +00002506 if (!PyFunction_Check(func)) {
2507 result = PyEval_CallObjectWithKeywords(func, arg, kw);
2508 Py_DECREF(arg);
2509 return result;
2510 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002511 }
2512 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002513 if (!PyFunction_Check(func)) {
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002514 PyErr_Format(PyExc_TypeError,
Guido van Rossum5db862d2000-04-10 12:46:51 +00002515 "call of non-function (type %.200s)",
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002516 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002517 return NULL;
2518 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002519 Py_INCREF(arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002520 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002521
2522 argdefs = PyFunction_GetDefaults(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00002523 if (argdefs != NULL && PyTuple_Check(argdefs)) {
2524 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
2525 nd = PyTuple_Size(argdefs);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002526 }
2527 else {
2528 d = NULL;
2529 nd = 0;
2530 }
2531
2532 if (kw != NULL) {
2533 int pos, i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002534 nk = PyDict_Size(kw);
2535 k = PyMem_NEW(PyObject *, 2*nk);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002536 if (k == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002537 PyErr_NoMemory();
2538 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002539 return NULL;
Guido van Rossume59214e1994-08-30 08:01:59 +00002540 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002541 pos = i = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002542 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002543 i += 2;
2544 nk = i/2;
2545 /* XXX This is broken if the caller deletes dict items! */
2546 }
2547 else {
2548 k = NULL;
2549 nk = 0;
Guido van Rossume59214e1994-08-30 08:01:59 +00002550 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002551
Guido van Rossum681d79a1995-07-18 14:51:37 +00002552 result = eval_code2(
Guido van Rossumb209a111997-04-29 18:18:01 +00002553 (PyCodeObject *)PyFunction_GetCode(func),
2554 PyFunction_GetGlobals(func), (PyObject *)NULL,
2555 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
Guido van Rossum681d79a1995-07-18 14:51:37 +00002556 k, nk,
2557 d, nd,
2558 class);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002559
Guido van Rossumb209a111997-04-29 18:18:01 +00002560 Py_DECREF(arg);
Guido van Rossumb18618d2000-05-03 23:44:39 +00002561 if (k != NULL)
2562 PyMem_DEL(k);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002563
Guido van Rossum681d79a1995-07-18 14:51:37 +00002564 return result;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002565}
2566
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002567#define SLICE_ERROR_MSG \
2568 "standard sequence type does not support step size other than one"
2569
Guido van Rossumb209a111997-04-29 18:18:01 +00002570static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002571loop_subscript(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002572 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002573{
Guido van Rossumb209a111997-04-29 18:18:01 +00002574 PySequenceMethods *sq = v->ob_type->tp_as_sequence;
Guido van Rossume59214e1994-08-30 08:01:59 +00002575 int i;
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002576 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002577 PyErr_SetString(PyExc_TypeError, "loop over non-sequence");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002578 return NULL;
2579 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002580 i = PyInt_AsLong(w);
Guido van Rossume59214e1994-08-30 08:01:59 +00002581 v = (*sq->sq_item)(v, i);
2582 if (v)
2583 return v;
Barry Warsaw4249f541997-08-22 21:26:19 +00002584 if (PyErr_ExceptionMatches(PyExc_IndexError))
Guido van Rossumb209a111997-04-29 18:18:01 +00002585 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002586 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002587}
2588
Guido van Rossum20c6add2000-05-08 14:06:50 +00002589/* Extract a slice index from a PyInt or PyLong, the index is bound to
2590 the range [-INT_MAX+1, INTMAX]. Returns 0 and an exception if there is
2591 and error. Returns 1 on success.*/
2592
2593int
2594_PyEval_SliceIndex(v, pi)
Guido van Rossumb209a111997-04-29 18:18:01 +00002595 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002596 int *pi;
2597{
2598 if (v != NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002599 long x;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002600 if (PyInt_Check(v)) {
2601 x = PyInt_AsLong(v);
2602 } else if (PyLong_Check(v)) {
2603 x = PyLong_AsLong(v);
2604 if (x==-1 && PyErr_Occurred()) {
2605 PyObject *long_zero;
2606
2607 if (!PyErr_ExceptionMatches( PyExc_OverflowError ) ) {
2608 /* It's not an overflow error, so just
2609 signal an error */
Guido van Rossum20c6add2000-05-08 14:06:50 +00002610 return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002611 }
2612
2613 /* It's an overflow error, so we need to
2614 check the sign of the long integer,
2615 set the value to INT_MAX or 0, and clear
2616 the error. */
2617
2618 /* Create a long integer with a value of 0 */
2619 long_zero = PyLong_FromLong( 0L );
Guido van Rossum20c6add2000-05-08 14:06:50 +00002620 if (long_zero == NULL) return 0;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002621
2622 /* Check sign */
2623 if (PyObject_Compare(long_zero, v) < 0)
2624 x = INT_MAX;
2625 else
2626 x = 0;
2627
2628 /* Free the long integer we created, and clear the
2629 OverflowError */
2630 Py_DECREF(long_zero);
2631 PyErr_Clear();
2632 }
2633 } else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002634 PyErr_SetString(PyExc_TypeError,
2635 "slice index must be int");
Guido van Rossum20c6add2000-05-08 14:06:50 +00002636 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002637 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00002638 /* Truncate -- very long indices are truncated anyway */
2639 if (x > INT_MAX)
2640 x = INT_MAX;
2641 else if (x < -INT_MAX)
2642 x = 0;
2643 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002644 }
Guido van Rossum20c6add2000-05-08 14:06:50 +00002645 return 1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002646}
2647
Guido van Rossumb209a111997-04-29 18:18:01 +00002648static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002649apply_slice(u, v, w) /* return u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +00002650 PyObject *u, *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002651{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002652 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002653 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002654 return NULL;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002655 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum04691fc1992-08-12 15:35:34 +00002656 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002657 return PySequence_GetSlice(u, ilow, ihigh);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002658}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002659
2660static int
Guido van Rossum3f5da241990-12-20 15:06:42 +00002661assign_slice(u, v, w, x) /* u[v:w] = x */
Guido van Rossumb209a111997-04-29 18:18:01 +00002662 PyObject *u, *v, *w, *x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002663{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002664 int ilow = 0, ihigh = INT_MAX;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002665 if (!_PyEval_SliceIndex(v, &ilow))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002666 return -1;
Guido van Rossum20c6add2000-05-08 14:06:50 +00002667 if (!_PyEval_SliceIndex(w, &ihigh))
Guido van Rossum3f5da241990-12-20 15:06:42 +00002668 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002669 if (x == NULL)
2670 return PySequence_DelSlice(u, ilow, ihigh);
2671 else
2672 return PySequence_SetSlice(u, ilow, ihigh, x);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002673}
2674
Guido van Rossumb209a111997-04-29 18:18:01 +00002675static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002676cmp_outcome(op, v, w)
Guido van Rossum5b7313a1992-04-06 13:24:57 +00002677 int op;
Guido van Rossumb209a111997-04-29 18:18:01 +00002678 register PyObject *v;
2679 register PyObject *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002680{
2681 register int cmp;
2682 register int res = 0;
2683 switch (op) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00002684 case IS:
2685 case IS_NOT:
2686 res = (v == w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002687 if (op == (int) IS_NOT)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002688 res = !res;
2689 break;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002690 case IN:
2691 case NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002692 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002693 if (res < 0)
2694 return NULL;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002695 if (op == (int) NOT_IN)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002696 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002697 break;
2698 case EXC_MATCH:
Barry Warsaw4249f541997-08-22 21:26:19 +00002699 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002700 break;
2701 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00002702 cmp = PyObject_Compare(v, w);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00002703 if (cmp && PyErr_Occurred())
2704 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002705 switch (op) {
2706 case LT: res = cmp < 0; break;
2707 case LE: res = cmp <= 0; break;
2708 case EQ: res = cmp == 0; break;
2709 case NE: res = cmp != 0; break;
2710 case GT: res = cmp > 0; break;
2711 case GE: res = cmp >= 0; break;
2712 /* XXX no default? (res is initialized to 0 though) */
2713 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002714 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002715 v = res ? Py_True : Py_False;
2716 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002717 return v;
2718}
2719
Guido van Rossum3f5da241990-12-20 15:06:42 +00002720static int
2721import_from(locals, v, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002722 PyObject *locals;
2723 PyObject *v;
2724 PyObject *name;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002725{
Guido van Rossumb209a111997-04-29 18:18:01 +00002726 PyObject *w, *x;
2727 if (!PyModule_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002728 PyErr_SetString(PyExc_TypeError,
2729 "import-from requires module object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002730 return -1;
2731 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002732 w = PyModule_GetDict(v);
2733 if (PyString_AsString(name)[0] == '*') {
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002734 int pos, err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002735 PyObject *name, *value;
Guido van Rossum25831651993-05-19 14:50:45 +00002736 pos = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002737 while (PyDict_Next(w, &pos, &name, &value)) {
2738 if (!PyString_Check(name) ||
2739 PyString_AsString(name)[0] == '_')
Guido van Rossume9736fc1990-11-18 17:33:06 +00002740 continue;
Guido van Rossumb209a111997-04-29 18:18:01 +00002741 Py_INCREF(value);
2742 err = PyDict_SetItem(locals, name, value);
2743 Py_DECREF(value);
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002744 if (err != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002745 return -1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002746 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002747 return 0;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002748 }
2749 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002750 x = PyDict_GetItem(w, name);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002751 if (x == NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +00002752 PyErr_Format(PyExc_ImportError,
2753 "cannot import name %.230s",
2754 PyString_AsString(name));
Guido van Rossum3f5da241990-12-20 15:06:42 +00002755 return -1;
2756 }
2757 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002758 return PyDict_SetItem(locals, name, x);
Guido van Rossume9736fc1990-11-18 17:33:06 +00002759 }
2760}
2761
Guido van Rossumb209a111997-04-29 18:18:01 +00002762static PyObject *
Guido van Rossum25831651993-05-19 14:50:45 +00002763build_class(methods, bases, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002764 PyObject *methods; /* dictionary */
2765 PyObject *bases; /* tuple containing classes */
2766 PyObject *name; /* string */
Guido van Rossume9736fc1990-11-18 17:33:06 +00002767{
Guido van Rossumcd649651997-08-22 16:56:16 +00002768 int i, n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002769 if (!PyTuple_Check(bases)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002770 PyErr_SetString(PyExc_SystemError,
2771 "build_class with non-tuple bases");
Guido van Rossum25831651993-05-19 14:50:45 +00002772 return NULL;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002773 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002774 if (!PyDict_Check(methods)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002775 PyErr_SetString(PyExc_SystemError,
2776 "build_class with non-dictionary");
Guido van Rossume9736fc1990-11-18 17:33:06 +00002777 return NULL;
2778 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002779 if (!PyString_Check(name)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002780 PyErr_SetString(PyExc_SystemError,
Guido van Rossum7a5b7962000-03-31 13:52:29 +00002781 "build_class with non-string name");
Guido van Rossum25831651993-05-19 14:50:45 +00002782 return NULL;
2783 }
Guido van Rossumcd649651997-08-22 16:56:16 +00002784 n = PyTuple_Size(bases);
2785 for (i = 0; i < n; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002786 PyObject *base = PyTuple_GET_ITEM(bases, i);
2787 if (!PyClass_Check(base)) {
Guido van Rossum150b2df1996-12-05 23:17:11 +00002788 /* Call the base's *type*, if it is callable.
2789 This code is a hook for Donald Beaudry's
2790 and Jim Fulton's type extensions. In
2791 unexended Python it will never be triggered
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002792 since its types are not callable.
2793 Ditto: call the bases's *class*, if it has
2794 one. This makes the same thing possible
2795 without writing C code. A true meta-object
2796 protocol! */
2797 PyObject *basetype = (PyObject *)base->ob_type;
2798 PyObject *callable = NULL;
2799 if (PyCallable_Check(basetype))
2800 callable = basetype;
2801 else
2802 callable = PyObject_GetAttrString(
2803 base, "__class__");
2804 if (callable) {
2805 PyObject *args;
2806 PyObject *newclass = NULL;
2807 args = Py_BuildValue(
2808 "(OOO)", name, bases, methods);
2809 if (args != NULL) {
2810 newclass = PyEval_CallObject(
2811 callable, args);
2812 Py_DECREF(args);
2813 }
Guido van Rossum730806d1998-04-10 22:27:42 +00002814 if (callable != basetype) {
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002815 Py_DECREF(callable);
Guido van Rossum730806d1998-04-10 22:27:42 +00002816 }
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002817 return newclass;
Guido van Rossum150b2df1996-12-05 23:17:11 +00002818 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002819 PyErr_SetString(PyExc_TypeError,
Guido van Rossum25831651993-05-19 14:50:45 +00002820 "base is not a class object");
2821 return NULL;
2822 }
2823 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002824 return PyClass_New(bases, methods, name);
Guido van Rossum25831651993-05-19 14:50:45 +00002825}
2826
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002827static int
Guido van Rossuma027efa1997-05-05 20:56:21 +00002828exec_statement(f, prog, globals, locals)
2829 PyFrameObject *f;
Guido van Rossumb209a111997-04-29 18:18:01 +00002830 PyObject *prog;
2831 PyObject *globals;
2832 PyObject *locals;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002833{
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002834 int n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002835 PyObject *v;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002836 int plain = 0;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002837
Guido van Rossumb209a111997-04-29 18:18:01 +00002838 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
2839 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002840 /* Backward compatibility hack */
Guido van Rossumb209a111997-04-29 18:18:01 +00002841 globals = PyTuple_GetItem(prog, 1);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002842 if (n == 3)
Guido van Rossumb209a111997-04-29 18:18:01 +00002843 locals = PyTuple_GetItem(prog, 2);
2844 prog = PyTuple_GetItem(prog, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002845 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002846 if (globals == Py_None) {
2847 globals = PyEval_GetGlobals();
2848 if (locals == Py_None) {
2849 locals = PyEval_GetLocals();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002850 plain = 1;
2851 }
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002852 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002853 else if (locals == Py_None)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002854 locals = globals;
Guido van Rossumb209a111997-04-29 18:18:01 +00002855 if (!PyString_Check(prog) &&
2856 !PyCode_Check(prog) &&
2857 !PyFile_Check(prog)) {
2858 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002859 "exec 1st arg must be string, code or file object");
2860 return -1;
2861 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002862 if (!PyDict_Check(globals) || !PyDict_Check(locals)) {
2863 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002864 "exec 2nd/3rd args must be dict or None");
2865 return -1;
2866 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002867 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002868 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
Guido van Rossumb209a111997-04-29 18:18:01 +00002869 if (PyCode_Check(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002870 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002871 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002872 else if (PyFile_Check(prog)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002873 FILE *fp = PyFile_AsFile(prog);
2874 char *name = PyString_AsString(PyFile_Name(prog));
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002875 v = PyRun_File(fp, name, Py_file_input, globals, locals);
2876 }
2877 else {
2878 char *s = PyString_AsString(prog);
2879 if ((int)strlen(s) != PyString_Size(prog)) {
2880 PyErr_SetString(PyExc_ValueError,
2881 "embedded '\\0' in exec string");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002882 return -1;
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002883 }
2884 v = PyRun_String(s, Py_file_input, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002885 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002886 if (plain)
2887 PyFrame_LocalsToFast(f, 0);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002888 if (v == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002889 return -1;
Guido van Rossumb209a111997-04-29 18:18:01 +00002890 Py_DECREF(v);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002891 return 0;
2892}
Guido van Rossum24c13741995-02-14 09:42:43 +00002893
Guido van Rossum1aa14831997-01-21 05:34:20 +00002894/* Hack for ni.py */
Guido van Rossumb209a111997-04-29 18:18:01 +00002895static PyObject *
Guido van Rossum24c13741995-02-14 09:42:43 +00002896find_from_args(f, nexti)
Guido van Rossumb209a111997-04-29 18:18:01 +00002897 PyFrameObject *f;
Guido van Rossum24c13741995-02-14 09:42:43 +00002898 int nexti;
2899{
2900 int opcode;
2901 int oparg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002902 PyObject *list, *name;
Guido van Rossum24c13741995-02-14 09:42:43 +00002903 unsigned char *next_instr;
2904
Guido van Rossumd076c731998-10-07 19:42:25 +00002905 _PyCode_GETCODEPTR(f->f_code, &next_instr);
2906 next_instr += nexti;
2907
Guido van Rossum24c13741995-02-14 09:42:43 +00002908 opcode = (*next_instr++);
2909 if (opcode != IMPORT_FROM) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002910 Py_INCREF(Py_None);
2911 return Py_None;
Guido van Rossum24c13741995-02-14 09:42:43 +00002912 }
2913
Guido van Rossumb209a111997-04-29 18:18:01 +00002914 list = PyList_New(0);
Guido van Rossum24c13741995-02-14 09:42:43 +00002915 if (list == NULL)
2916 return NULL;
2917
2918 do {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002919 oparg = (next_instr[1]<<8) + next_instr[0];
2920 next_instr += 2;
Guido van Rossum24c13741995-02-14 09:42:43 +00002921 name = Getnamev(f, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002922 if (PyList_Append(list, name) < 0) {
2923 Py_DECREF(list);
Guido van Rossum24c13741995-02-14 09:42:43 +00002924 break;
2925 }
2926 opcode = (*next_instr++);
2927 } while (opcode == IMPORT_FROM);
2928
2929 return list;
2930}
Guido van Rossum950361c1997-01-24 13:49:28 +00002931
2932
2933#ifdef DYNAMIC_EXECUTION_PROFILE
2934
2935PyObject *
2936getarray(a)
2937 long a[256];
2938{
2939 int i;
2940 PyObject *l = PyList_New(256);
2941 if (l == NULL) return NULL;
2942 for (i = 0; i < 256; i++) {
2943 PyObject *x = PyInt_FromLong(a[i]);
2944 if (x == NULL) {
2945 Py_DECREF(l);
2946 return NULL;
2947 }
2948 PyList_SetItem(l, i, x);
2949 }
2950 for (i = 0; i < 256; i++)
2951 a[i] = 0;
2952 return l;
2953}
2954
2955PyObject *
2956_Py_GetDXProfile(self, args)
2957 PyObject *self, *args;
2958{
2959#ifndef DXPAIRS
2960 return getarray(dxp);
2961#else
2962 int i;
2963 PyObject *l = PyList_New(257);
2964 if (l == NULL) return NULL;
2965 for (i = 0; i < 257; i++) {
2966 PyObject *x = getarray(dxpairs[i]);
2967 if (x == NULL) {
2968 Py_DECREF(l);
2969 return NULL;
2970 }
2971 PyList_SetItem(l, i, x);
2972 }
2973 return l;
2974#endif
2975}
2976
2977#endif