blob: 7a97771327b5bed6f3f896ee5ab2d8f18ed1cc86 [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 Rossuma027efa1997-05-05 20:56:21 +000083static int slice_index Py_PROTO((PyObject *, int *));
Guido van Rossumb209a111997-04-29 18:18:01 +000084static PyObject *apply_slice Py_PROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossuma027efa1997-05-05 20:56:21 +000085static int assign_slice Py_PROTO((PyObject *, PyObject *,
86 PyObject *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +000087static PyObject *cmp_outcome Py_PROTO((int, PyObject *, PyObject *));
88static int import_from Py_PROTO((PyObject *, PyObject *, PyObject *));
89static PyObject *build_class Py_PROTO((PyObject *, PyObject *, PyObject *));
Guido van Rossuma027efa1997-05-05 20:56:21 +000090static int exec_statement Py_PROTO((PyFrameObject *,
91 PyObject *, PyObject *, PyObject *));
Guido van Rossumb209a111997-04-29 18:18:01 +000092static PyObject *find_from_args Py_PROTO((PyFrameObject *, int));
Guido van Rossuma027efa1997-05-05 20:56:21 +000093static void set_exc_info Py_PROTO((PyThreadState *,
94 PyObject *, PyObject *, PyObject *));
95static void reset_exc_info Py_PROTO((PyThreadState *));
Guido van Rossum374a9221991-04-04 10:40:29 +000096
97
Guido van Rossum950361c1997-01-24 13:49:28 +000098/* Dynamic execution profile */
99#ifdef DYNAMIC_EXECUTION_PROFILE
100#ifdef DXPAIRS
101static long dxpairs[257][256];
102#define dxp dxpairs[256]
103#else
104static long dxp[256];
105#endif
106#endif
107
108
Guido van Rossume59214e1994-08-30 08:01:59 +0000109#ifdef WITH_THREAD
Guido van Rossumff4949e1992-08-05 19:58:53 +0000110
Guido van Rossum2571cc81999-04-07 16:07:23 +0000111#ifndef DONT_HAVE_ERRNO_H
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000112#include <errno.h>
Guido van Rossum2571cc81999-04-07 16:07:23 +0000113#endif
Guido van Rossum49b56061998-10-01 20:42:43 +0000114#include "pythread.h"
Guido van Rossumff4949e1992-08-05 19:58:53 +0000115
Guido van Rossuma027efa1997-05-05 20:56:21 +0000116extern int _PyThread_Started; /* Flag for Py_Exit */
117
Guido van Rossum65d5b571998-12-21 19:32:43 +0000118static PyThread_type_lock interpreter_lock = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000119static long main_thread = 0;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000120
121void
Guido van Rossumb209a111997-04-29 18:18:01 +0000122PyEval_InitThreads()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000123{
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000124 if (interpreter_lock)
Sjoerd Mullendered59d201993-01-06 13:36:38 +0000125 return;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000126 _PyThread_Started = 1;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000127 interpreter_lock = PyThread_allocate_lock();
128 PyThread_acquire_lock(interpreter_lock, 1);
129 main_thread = PyThread_get_thread_ident();
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000130}
Guido van Rossumff4949e1992-08-05 19:58:53 +0000131
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000132void
Guido van Rossum25ce5661997-08-02 03:10:38 +0000133PyEval_AcquireLock()
134{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000135 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000136}
137
138void
139PyEval_ReleaseLock()
140{
Guido van Rossum65d5b571998-12-21 19:32:43 +0000141 PyThread_release_lock(interpreter_lock);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000142}
143
144void
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000145PyEval_AcquireThread(tstate)
146 PyThreadState *tstate;
147{
148 if (tstate == NULL)
149 Py_FatalError("PyEval_AcquireThread: NULL new thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000150 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000151 if (PyThreadState_Swap(tstate) != NULL)
152 Py_FatalError(
153 "PyEval_AcquireThread: non-NULL old thread state");
154}
155
156void
157PyEval_ReleaseThread(tstate)
158 PyThreadState *tstate;
159{
160 if (tstate == NULL)
161 Py_FatalError("PyEval_ReleaseThread: NULL thread state");
162 if (PyThreadState_Swap(NULL) != tstate)
163 Py_FatalError("PyEval_ReleaseThread: wrong thread state");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000164 PyThread_release_lock(interpreter_lock);
Guido van Rossum9cc8a201997-07-19 19:55:50 +0000165}
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000166#endif
167
Guido van Rossumff4949e1992-08-05 19:58:53 +0000168/* Functions save_thread and restore_thread are always defined so
169 dynamically loaded modules needn't be compiled separately for use
170 with and without threads: */
171
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000172PyThreadState *
Guido van Rossumb209a111997-04-29 18:18:01 +0000173PyEval_SaveThread()
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000174{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000175 PyThreadState *tstate = PyThreadState_Swap(NULL);
176 if (tstate == NULL)
177 Py_FatalError("PyEval_SaveThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000178#ifdef WITH_THREAD
Guido van Rossumb74eca91997-09-30 22:03:16 +0000179 if (interpreter_lock)
Guido van Rossum65d5b571998-12-21 19:32:43 +0000180 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000181#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000182 return tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000183}
184
185void
Guido van Rossum2fca21f71997-07-18 23:56:58 +0000186PyEval_RestoreThread(tstate)
187 PyThreadState *tstate;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000188{
Guido van Rossumb74eca91997-09-30 22:03:16 +0000189 if (tstate == NULL)
190 Py_FatalError("PyEval_RestoreThread: NULL tstate");
Guido van Rossume59214e1994-08-30 08:01:59 +0000191#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000192 if (interpreter_lock) {
Guido van Rossumb74eca91997-09-30 22:03:16 +0000193 int err = errno;
Guido van Rossum65d5b571998-12-21 19:32:43 +0000194 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000195 errno = err;
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000196 }
197#endif
Guido van Rossumb74eca91997-09-30 22:03:16 +0000198 PyThreadState_Swap(tstate);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000199}
200
201
Guido van Rossuma9672091994-09-14 13:31:22 +0000202/* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
203 signal handlers or Mac I/O completion routines) can schedule calls
204 to a function to be called synchronously.
205 The synchronous function is called with one void* argument.
206 It should return 0 for success or -1 for failure -- failure should
207 be accompanied by an exception.
208
209 If registry succeeds, the registry function returns 0; if it fails
210 (e.g. due to too many pending calls) it returns -1 (without setting
211 an exception condition).
212
213 Note that because registry may occur from within signal handlers,
214 or other asynchronous events, calling malloc() is unsafe!
215
216#ifdef WITH_THREAD
217 Any thread can schedule pending calls, but only the main thread
218 will execute them.
219#endif
220
221 XXX WARNING! ASYNCHRONOUSLY EXECUTING CODE!
222 There are two possible race conditions:
223 (1) nested asynchronous registry calls;
224 (2) registry calls made while pending calls are being processed.
225 While (1) is very unlikely, (2) is a real possibility.
226 The current code is safe against (2), but not against (1).
227 The safety against (2) is derived from the fact that only one
228 thread (the main thread) ever takes things out of the queue.
Guido van Rossuma9672091994-09-14 13:31:22 +0000229
Guido van Rossuma027efa1997-05-05 20:56:21 +0000230 XXX Darn! With the advent of thread state, we should have an array
231 of pending calls per thread in the thread state! Later...
232*/
Guido van Rossum8861b741996-07-30 16:49:37 +0000233
Guido van Rossuma9672091994-09-14 13:31:22 +0000234#define NPENDINGCALLS 32
235static struct {
Guido van Rossumb209a111997-04-29 18:18:01 +0000236 int (*func) Py_PROTO((ANY *));
Guido van Rossuma9672091994-09-14 13:31:22 +0000237 ANY *arg;
238} pendingcalls[NPENDINGCALLS];
239static volatile int pendingfirst = 0;
240static volatile int pendinglast = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000241static volatile int things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000242
243int
244Py_AddPendingCall(func, arg)
Guido van Rossumb209a111997-04-29 18:18:01 +0000245 int (*func) Py_PROTO((ANY *));
Guido van Rossuma9672091994-09-14 13:31:22 +0000246 ANY *arg;
247{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000248 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000249 int i, j;
250 /* XXX Begin critical section */
251 /* XXX If you want this to be safe against nested
252 XXX asynchronous calls, you'll have to work harder! */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000253 if (busy)
254 return -1;
255 busy = 1;
Guido van Rossuma9672091994-09-14 13:31:22 +0000256 i = pendinglast;
257 j = (i + 1) % NPENDINGCALLS;
258 if (j == pendingfirst)
259 return -1; /* Queue full */
260 pendingcalls[i].func = func;
261 pendingcalls[i].arg = arg;
262 pendinglast = j;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000263 things_to_do = 1; /* Signal main loop */
Guido van Rossum180d7b41994-09-29 09:45:57 +0000264 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000265 /* XXX End critical section */
266 return 0;
267}
268
Guido van Rossum180d7b41994-09-29 09:45:57 +0000269int
270Py_MakePendingCalls()
Guido van Rossuma9672091994-09-14 13:31:22 +0000271{
Guido van Rossum180d7b41994-09-29 09:45:57 +0000272 static int busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000273#ifdef WITH_THREAD
Guido van Rossum65d5b571998-12-21 19:32:43 +0000274 if (main_thread && PyThread_get_thread_ident() != main_thread)
Guido van Rossuma9672091994-09-14 13:31:22 +0000275 return 0;
276#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000277 if (busy)
Guido van Rossum180d7b41994-09-29 09:45:57 +0000278 return 0;
279 busy = 1;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000280 things_to_do = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000281 for (;;) {
282 int i;
Guido van Rossumb209a111997-04-29 18:18:01 +0000283 int (*func) Py_PROTO((ANY *));
Guido van Rossuma9672091994-09-14 13:31:22 +0000284 ANY *arg;
285 i = pendingfirst;
286 if (i == pendinglast)
287 break; /* Queue empty */
288 func = pendingcalls[i].func;
289 arg = pendingcalls[i].arg;
290 pendingfirst = (i + 1) % NPENDINGCALLS;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000291 if (func(arg) < 0) {
292 busy = 0;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000293 things_to_do = 1; /* We're not done yet */
Guido van Rossuma9672091994-09-14 13:31:22 +0000294 return -1;
Guido van Rossum180d7b41994-09-29 09:45:57 +0000295 }
Guido van Rossuma9672091994-09-14 13:31:22 +0000296 }
Guido van Rossum180d7b41994-09-29 09:45:57 +0000297 busy = 0;
Guido van Rossuma9672091994-09-14 13:31:22 +0000298 return 0;
299}
300
301
Guido van Rossum374a9221991-04-04 10:40:29 +0000302/* Status code for main loop (reason for stack unwind) */
303
304enum why_code {
305 WHY_NOT, /* No error */
306 WHY_EXCEPTION, /* Exception occurred */
307 WHY_RERAISE, /* Exception re-raised by 'finally' */
308 WHY_RETURN, /* 'return' statement */
309 WHY_BREAK /* 'break' statement */
310};
311
Guido van Rossumb209a111997-04-29 18:18:01 +0000312static enum why_code do_raise Py_PROTO((PyObject *, PyObject *, PyObject *));
Barry Warsawe42b18f1997-08-25 22:13:04 +0000313static int unpack_sequence Py_PROTO((PyObject *, int, PyObject **));
Guido van Rossum1aa14831997-01-21 05:34:20 +0000314
Guido van Rossum374a9221991-04-04 10:40:29 +0000315
Guido van Rossumb209a111997-04-29 18:18:01 +0000316PyObject *
317PyEval_EvalCode(co, globals, locals)
318 PyCodeObject *co;
319 PyObject *globals;
320 PyObject *locals;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000321{
322 return eval_code2(co,
323 globals, locals,
Guido van Rossumb209a111997-04-29 18:18:01 +0000324 (PyObject **)NULL, 0,
325 (PyObject **)NULL, 0,
326 (PyObject **)NULL, 0,
327 (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000328}
329
330
331/* Interpreter main loop */
332
Guido van Rossum8861b741996-07-30 16:49:37 +0000333#ifndef MAX_RECURSION_DEPTH
334#define MAX_RECURSION_DEPTH 10000
335#endif
336
Guido van Rossumb209a111997-04-29 18:18:01 +0000337static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +0000338eval_code2(co, globals, locals,
339 args, argcount, kws, kwcount, defs, defcount, owner)
Guido van Rossumb209a111997-04-29 18:18:01 +0000340 PyCodeObject *co;
341 PyObject *globals;
342 PyObject *locals;
343 PyObject **args;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000344 int argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000345 PyObject **kws; /* length: 2*kwcount */
Guido van Rossum681d79a1995-07-18 14:51:37 +0000346 int kwcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000347 PyObject **defs;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000348 int defcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000349 PyObject *owner;
Guido van Rossum374a9221991-04-04 10:40:29 +0000350{
Guido van Rossum950361c1997-01-24 13:49:28 +0000351#ifdef DXPAIRS
352 int lastopcode = 0;
353#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000354 register unsigned char *next_instr;
Guido van Rossum50cd3481998-11-17 17:02:51 +0000355 register int opcode; /* Current opcode */
356 register int oparg; /* Current opcode argument, if any */
Guido van Rossumb209a111997-04-29 18:18:01 +0000357 register PyObject **stack_pointer;
Guido van Rossum374a9221991-04-04 10:40:29 +0000358 register enum why_code why; /* Reason for block stack unwind */
359 register int err; /* Error status -- nonzero if error */
Guido van Rossumb209a111997-04-29 18:18:01 +0000360 register PyObject *x; /* Result object -- NULL if error */
361 register PyObject *v; /* Temporary objects popped off stack */
362 register PyObject *w;
363 register PyObject *u;
364 register PyObject *t;
365 register PyFrameObject *f; /* Current frame */
Guido van Rossum50cd3481998-11-17 17:02:51 +0000366 register PyObject **fastlocals;
Guido van Rossum014518f1998-11-23 21:09:51 +0000367 PyObject *retval = NULL; /* Return value */
Guido van Rossum885553e1998-12-21 18:33:30 +0000368 PyThreadState *tstate = PyThreadState_GET();
Guido van Rossumd076c731998-10-07 19:42:25 +0000369 unsigned char *first_instr;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000370#ifdef LLTRACE
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000371 int lltrace;
Guido van Rossum374a9221991-04-04 10:40:29 +0000372#endif
Guido van Rossum408027e1996-12-30 16:17:54 +0000373#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000374 /* Make it easier to find out where we are with a debugger */
Guido van Rossumb209a111997-04-29 18:18:01 +0000375 char *filename = PyString_AsString(co->co_filename);
Guido van Rossum99bec951992-09-03 20:29:45 +0000376#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000377
378/* Code access macros */
379
380#define GETCONST(i) Getconst(f, i)
381#define GETNAME(i) Getname(f, i)
382#define GETNAMEV(i) Getnamev(f, i)
Guido van Rossumd076c731998-10-07 19:42:25 +0000383#define INSTR_OFFSET() (next_instr - first_instr)
Guido van Rossum374a9221991-04-04 10:40:29 +0000384#define NEXTOP() (*next_instr++)
385#define NEXTARG() (next_instr += 2, (next_instr[-1]<<8) + next_instr[-2])
Guido van Rossumd076c731998-10-07 19:42:25 +0000386#define JUMPTO(x) (next_instr = first_instr + (x))
Guido van Rossum374a9221991-04-04 10:40:29 +0000387#define JUMPBY(x) (next_instr += (x))
388
389/* Stack manipulation macros */
390
391#define STACK_LEVEL() (stack_pointer - f->f_valuestack)
392#define EMPTY() (STACK_LEVEL() == 0)
393#define TOP() (stack_pointer[-1])
394#define BASIC_PUSH(v) (*stack_pointer++ = (v))
395#define BASIC_POP() (*--stack_pointer)
396
Guido van Rossum96a42c81992-01-12 02:29:51 +0000397#ifdef LLTRACE
398#define PUSH(v) (BASIC_PUSH(v), lltrace && prtrace(TOP(), "push"))
399#define POP() (lltrace && prtrace(TOP(), "pop"), BASIC_POP())
Guido van Rossum374a9221991-04-04 10:40:29 +0000400#else
401#define PUSH(v) BASIC_PUSH(v)
402#define POP() BASIC_POP()
403#endif
404
Guido van Rossum681d79a1995-07-18 14:51:37 +0000405/* Local variable macros */
406
407#define GETLOCAL(i) (fastlocals[i])
Guido van Rossumb209a111997-04-29 18:18:01 +0000408#define SETLOCAL(i, value) do { Py_XDECREF(GETLOCAL(i)); \
Guido van Rossum681d79a1995-07-18 14:51:37 +0000409 GETLOCAL(i) = value; } while (0)
410
Guido van Rossuma027efa1997-05-05 20:56:21 +0000411/* Start of code */
412
Guido van Rossum8861b741996-07-30 16:49:37 +0000413#ifdef USE_STACKCHECK
Guido van Rossuma027efa1997-05-05 20:56:21 +0000414 if (tstate->recursion_depth%10 == 0 && PyOS_CheckStack()) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000415 PyErr_SetString(PyExc_MemoryError, "Stack overflow");
Guido van Rossum8861b741996-07-30 16:49:37 +0000416 return NULL;
417 }
418#endif
419
Guido van Rossum681d79a1995-07-18 14:51:37 +0000420 if (globals == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000421 PyErr_SetString(PyExc_SystemError, "eval_code2: NULL globals");
Guido van Rossum6135a871995-01-09 17:53:26 +0000422 return NULL;
Guido van Rossum5b722181993-03-30 17:46:03 +0000423 }
424
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000425#ifdef LLTRACE
Guido van Rossumb209a111997-04-29 18:18:01 +0000426 lltrace = PyDict_GetItemString(globals, "__lltrace__") != NULL;
Guido van Rossumacbe8da1993-04-15 15:33:52 +0000427#endif
428
Guido van Rossumb209a111997-04-29 18:18:01 +0000429 f = PyFrame_New(
Guido van Rossuma027efa1997-05-05 20:56:21 +0000430 tstate, /*back*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000431 co, /*code*/
432 globals, /*globals*/
Guido van Rossum76836021997-01-20 04:26:20 +0000433 locals); /*locals*/
Guido van Rossum374a9221991-04-04 10:40:29 +0000434 if (f == NULL)
435 return NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000436
Guido van Rossuma027efa1997-05-05 20:56:21 +0000437 tstate->frame = f;
Guido van Rossumdeb0c5e1997-01-27 23:42:36 +0000438 fastlocals = f->f_localsplus;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000439
440 if (co->co_argcount > 0 ||
441 co->co_flags & (CO_VARARGS | CO_VARKEYWORDS)) {
442 int i;
443 int n = argcount;
Guido van Rossumb209a111997-04-29 18:18:01 +0000444 PyObject *kwdict = NULL;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000445 if (co->co_flags & CO_VARKEYWORDS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000446 kwdict = PyDict_New();
Guido van Rossum681d79a1995-07-18 14:51:37 +0000447 if (kwdict == NULL)
448 goto fail;
Guido van Rossum8c5df061997-01-24 04:19:24 +0000449 i = co->co_argcount;
450 if (co->co_flags & CO_VARARGS)
451 i++;
452 SETLOCAL(i, kwdict);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000453 }
454 if (argcount > co->co_argcount) {
455 if (!(co->co_flags & CO_VARARGS)) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000456 PyErr_Format(PyExc_TypeError,
457 "too many arguments; expected %d, got %d",
458 co->co_argcount, argcount);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000459 goto fail;
460 }
461 n = co->co_argcount;
462 }
463 for (i = 0; i < n; i++) {
464 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000465 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000466 SETLOCAL(i, x);
467 }
468 if (co->co_flags & CO_VARARGS) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000469 u = PyTuple_New(argcount - n);
Guido van Rossum8c5df061997-01-24 04:19:24 +0000470 if (u == NULL)
471 goto fail;
472 SETLOCAL(co->co_argcount, u);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000473 for (i = n; i < argcount; i++) {
474 x = args[i];
Guido van Rossumb209a111997-04-29 18:18:01 +0000475 Py_INCREF(x);
476 PyTuple_SET_ITEM(u, i-n, x);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000477 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000478 }
479 for (i = 0; i < kwcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000480 PyObject *keyword = kws[2*i];
481 PyObject *value = kws[2*i + 1];
Guido van Rossum681d79a1995-07-18 14:51:37 +0000482 int j;
Guido van Rossum25da5be1999-10-26 00:12:20 +0000483 if (keyword == NULL || !PyString_Check(keyword)) {
484 PyErr_SetString(PyExc_TypeError,
485 "keywords must be strings");
486 goto fail;
487 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000488 /* XXX slow -- speed up using dictionary? */
489 for (j = 0; j < co->co_argcount; j++) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000490 PyObject *nm = PyTuple_GET_ITEM(
491 co->co_varnames, j);
Guido van Rossumb209a111997-04-29 18:18:01 +0000492 if (PyObject_Compare(keyword, nm) == 0)
Guido van Rossum681d79a1995-07-18 14:51:37 +0000493 break;
494 }
Guido van Rossumc8b6df91997-05-23 00:06:51 +0000495 /* Check errors from Compare */
496 if (PyErr_Occurred())
497 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000498 if (j >= co->co_argcount) {
499 if (kwdict == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000500 PyErr_Format(PyExc_TypeError,
Guido van Rossuma027efa1997-05-05 20:56:21 +0000501 "unexpected keyword argument: %.400s",
Jeremy Hylton76901512000-03-28 23:49:17 +0000502 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000503 goto fail;
504 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000505 PyDict_SetItem(kwdict, keyword, value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000506 }
507 else {
508 if (GETLOCAL(j) != NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +0000509 PyErr_Format(PyExc_TypeError,
510 "keyword parameter redefined: %.400s",
511 PyString_AsString(keyword));
Guido van Rossum681d79a1995-07-18 14:51:37 +0000512 goto fail;
513 }
Guido van Rossumb209a111997-04-29 18:18:01 +0000514 Py_INCREF(value);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000515 SETLOCAL(j, value);
516 }
517 }
518 if (argcount < co->co_argcount) {
519 int m = co->co_argcount - defcount;
520 for (i = argcount; i < m; i++) {
521 if (GETLOCAL(i) == NULL) {
Guido van Rossumdf9db1e1997-11-19 16:05:40 +0000522 PyErr_Format(PyExc_TypeError,
523 "not enough arguments; expected %d, got %d",
524 m, i);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000525 goto fail;
526 }
527 }
528 if (n > m)
529 i = n - m;
530 else
531 i = 0;
532 for (; i < defcount; i++) {
533 if (GETLOCAL(m+i) == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +0000534 PyObject *def = defs[i];
535 Py_INCREF(def);
Guido van Rossum681d79a1995-07-18 14:51:37 +0000536 SETLOCAL(m+i, def);
537 }
538 }
539 }
Guido van Rossum681d79a1995-07-18 14:51:37 +0000540 }
541 else {
542 if (argcount > 0 || kwcount > 0) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000543 PyErr_SetString(PyExc_TypeError,
544 "no arguments expected");
Guido van Rossum8c5df061997-01-24 04:19:24 +0000545 goto fail;
Guido van Rossum681d79a1995-07-18 14:51:37 +0000546 }
547 }
548
Guido van Rossuma027efa1997-05-05 20:56:21 +0000549 if (tstate->sys_tracefunc != NULL) {
550 /* tstate->sys_tracefunc, if defined, is a function that
551 will be called on *every* entry to a code block.
Guido van Rossum96a42c81992-01-12 02:29:51 +0000552 Its return value, if not None, is a function that
553 will be called at the start of each executed line
554 of code. (Actually, the function must return
555 itself in order to continue tracing.)
556 The trace functions are called with three arguments:
557 a pointer to the current frame, a string indicating
558 why the function is called, and an argument which
559 depends on the situation. The global trace function
560 (sys.trace) is also called whenever an exception
561 is detected. */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000562 if (call_trace(&tstate->sys_tracefunc,
563 &f->f_trace, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000564 Py_None/*XXX how to compute arguments now?*/)) {
Guido van Rossum96a42c81992-01-12 02:29:51 +0000565 /* Trace function raised an error */
Guido van Rossum8c5df061997-01-24 04:19:24 +0000566 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000567 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000568 }
569
Guido van Rossuma027efa1997-05-05 20:56:21 +0000570 if (tstate->sys_profilefunc != NULL) {
571 /* Similar for sys_profilefunc, except it needn't return
Guido van Rossum9c8d70d1992-03-23 18:19:28 +0000572 itself and isn't called for "line" events */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000573 if (call_trace(&tstate->sys_profilefunc,
574 (PyObject**)0, f, "call",
Guido van Rossumb209a111997-04-29 18:18:01 +0000575 Py_None/*XXX*/)) {
Guido van Rossum8c5df061997-01-24 04:19:24 +0000576 goto fail;
Guido van Rossum96a42c81992-01-12 02:29:51 +0000577 }
578 }
Guido van Rossume59214e1994-08-30 08:01:59 +0000579
Guido van Rossuma027efa1997-05-05 20:56:21 +0000580 if (++tstate->recursion_depth > MAX_RECURSION_DEPTH) {
581 --tstate->recursion_depth;
582 PyErr_SetString(PyExc_RuntimeError,
583 "Maximum recursion depth exceeded");
584 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +0000585 Py_DECREF(f);
Guido van Rossum8861b741996-07-30 16:49:37 +0000586 return NULL;
587 }
588
Guido van Rossumd076c731998-10-07 19:42:25 +0000589 _PyCode_GETCODEPTR(co, &first_instr);
590 next_instr = first_instr;
Guido van Rossum374a9221991-04-04 10:40:29 +0000591 stack_pointer = f->f_valuestack;
592
Guido van Rossum374a9221991-04-04 10:40:29 +0000593 why = WHY_NOT;
594 err = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +0000595 x = Py_None; /* Not a reference, just anything non-NULL */
Guido van Rossum374a9221991-04-04 10:40:29 +0000596
597 for (;;) {
Guido van Rossuma027efa1997-05-05 20:56:21 +0000598 /* Do periodic things. Doing this every time through
599 the loop would add too much overhead, so we do it
600 only every Nth instruction. We also do it if
601 ``things_to_do'' is set, i.e. when an asynchronous
602 event needs attention (e.g. a signal handler or
603 async I/O handler); see Py_AddPendingCall() and
604 Py_MakePendingCalls() above. */
Guido van Rossuma9672091994-09-14 13:31:22 +0000605
Guido van Rossuma027efa1997-05-05 20:56:21 +0000606 if (things_to_do || --tstate->ticker < 0) {
Guido van Rossum25ce5661997-08-02 03:10:38 +0000607 tstate->ticker = tstate->interp->checkinterval;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000608 if (things_to_do) {
Guido van Rossum8861b741996-07-30 16:49:37 +0000609 if (Py_MakePendingCalls() < 0) {
610 why = WHY_EXCEPTION;
611 goto on_error;
612 }
613 }
Guido van Rossumdf0d00e1997-05-20 15:57:49 +0000614#if !defined(HAVE_SIGNAL_H) || defined(macintosh)
Guido van Rossuma027efa1997-05-05 20:56:21 +0000615 /* If we have true signals, the signal handler
616 will call Py_AddPendingCall() so we don't
617 have to call sigcheck(). On the Mac and
618 DOS, alas, we have to call it. */
Guido van Rossumb209a111997-04-29 18:18:01 +0000619 if (PyErr_CheckSignals()) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000620 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +0000621 goto on_error;
622 }
Guido van Rossum70d44781997-01-21 06:15:24 +0000623#endif
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000624
Guido van Rossume59214e1994-08-30 08:01:59 +0000625#ifdef WITH_THREAD
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000626 if (interpreter_lock) {
627 /* Give another thread a chance */
628
Guido van Rossum25ce5661997-08-02 03:10:38 +0000629 if (PyThreadState_Swap(NULL) != tstate)
630 Py_FatalError("ceval: tstate mix-up");
Guido van Rossum65d5b571998-12-21 19:32:43 +0000631 PyThread_release_lock(interpreter_lock);
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000632
633 /* Other threads may run now */
634
Guido van Rossum65d5b571998-12-21 19:32:43 +0000635 PyThread_acquire_lock(interpreter_lock, 1);
Guido van Rossum25ce5661997-08-02 03:10:38 +0000636 if (PyThreadState_Swap(tstate) != NULL)
637 Py_FatalError("ceval: orphan tstate");
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000638 }
639#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000640 }
Guido van Rossum1984f1e1992-08-04 12:41:02 +0000641
Guido van Rossum374a9221991-04-04 10:40:29 +0000642 /* Extract opcode and argument */
Guido van Rossum99bec951992-09-03 20:29:45 +0000643
Guido van Rossum408027e1996-12-30 16:17:54 +0000644#if defined(Py_DEBUG) || defined(LLTRACE)
Guido van Rossum99bec951992-09-03 20:29:45 +0000645 f->f_lasti = INSTR_OFFSET();
646#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000647
648 opcode = NEXTOP();
649 if (HAS_ARG(opcode))
650 oparg = NEXTARG();
Guido van Rossum950361c1997-01-24 13:49:28 +0000651#ifdef DYNAMIC_EXECUTION_PROFILE
652#ifdef DXPAIRS
653 dxpairs[lastopcode][opcode]++;
654 lastopcode = opcode;
655#endif
656 dxp[opcode]++;
657#endif
Guido van Rossum374a9221991-04-04 10:40:29 +0000658
Guido van Rossum96a42c81992-01-12 02:29:51 +0000659#ifdef LLTRACE
Guido van Rossum374a9221991-04-04 10:40:29 +0000660 /* Instruction tracing */
661
Guido van Rossum96a42c81992-01-12 02:29:51 +0000662 if (lltrace) {
Guido van Rossum374a9221991-04-04 10:40:29 +0000663 if (HAS_ARG(opcode)) {
664 printf("%d: %d, %d\n",
665 (int) (INSTR_OFFSET() - 3),
666 opcode, oparg);
667 }
668 else {
669 printf("%d: %d\n",
670 (int) (INSTR_OFFSET() - 1), opcode);
671 }
672 }
673#endif
674
675 /* Main switch on opcode */
676
677 switch (opcode) {
678
679 /* BEWARE!
680 It is essential that any operation that fails sets either
681 x to NULL, err to nonzero, or why to anything but WHY_NOT,
682 and that no operation that succeeds does this! */
683
684 /* case STOP_CODE: this is an error! */
685
686 case POP_TOP:
687 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000688 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000689 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000690
691 case ROT_TWO:
692 v = POP();
693 w = POP();
694 PUSH(v);
695 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000696 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000697
698 case ROT_THREE:
699 v = POP();
700 w = POP();
701 x = POP();
702 PUSH(v);
703 PUSH(x);
704 PUSH(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000705 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000706
707 case DUP_TOP:
708 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000709 Py_INCREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000710 PUSH(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000711 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000712
713 case UNARY_POSITIVE:
714 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000715 x = PyNumber_Positive(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000716 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000717 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000718 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000719 break;
720
721 case UNARY_NEGATIVE:
722 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000723 x = PyNumber_Negative(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000724 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000725 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000726 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000727 break;
728
729 case UNARY_NOT:
730 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000731 err = PyObject_IsTrue(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000732 Py_DECREF(v);
Guido van Rossumfc490731997-05-06 15:06:49 +0000733 if (err == 0) {
734 Py_INCREF(Py_True);
735 PUSH(Py_True);
736 continue;
737 }
738 else if (err > 0) {
739 Py_INCREF(Py_False);
740 PUSH(Py_False);
741 err = 0;
742 continue;
743 }
Guido van Rossum374a9221991-04-04 10:40:29 +0000744 break;
745
746 case UNARY_CONVERT:
747 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000748 x = PyObject_Repr(v);
749 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +0000750 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000751 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000752 break;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000753
754 case UNARY_INVERT:
755 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000756 x = PyNumber_Invert(v);
Guido van Rossumb209a111997-04-29 18:18:01 +0000757 Py_DECREF(v);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000758 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000759 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000760 break;
Guido van Rossum374a9221991-04-04 10:40:29 +0000761
Guido van Rossum50564e81996-01-12 01:13:16 +0000762 case BINARY_POWER:
763 w = POP();
764 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000765 x = PyNumber_Power(v, w, Py_None);
Guido van Rossumb209a111997-04-29 18:18:01 +0000766 Py_DECREF(v);
767 Py_DECREF(w);
Guido van Rossum50564e81996-01-12 01:13:16 +0000768 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000769 if (x != NULL) continue;
Guido van Rossum50564e81996-01-12 01:13:16 +0000770 break;
771
Guido van Rossum374a9221991-04-04 10:40:29 +0000772 case BINARY_MULTIPLY:
773 w = POP();
774 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000775 x = PyNumber_Multiply(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000776 Py_DECREF(v);
777 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000778 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000779 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000780 break;
781
782 case BINARY_DIVIDE:
783 w = POP();
784 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000785 x = PyNumber_Divide(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000786 Py_DECREF(v);
787 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000788 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000789 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000790 break;
791
792 case BINARY_MODULO:
793 w = POP();
794 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000795 x = PyNumber_Remainder(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000796 Py_DECREF(v);
797 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000798 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000799 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000800 break;
801
802 case BINARY_ADD:
803 w = POP();
804 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000805 if (PyInt_Check(v) && PyInt_Check(w)) {
806 /* INLINE: int + int */
807 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000808 a = PyInt_AS_LONG(v);
809 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000810 i = a + b;
811 if ((i^a) < 0 && (i^b) < 0) {
812 PyErr_SetString(PyExc_OverflowError,
813 "integer addition");
814 x = NULL;
815 }
816 else
817 x = PyInt_FromLong(i);
818 }
819 else
820 x = PyNumber_Add(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000821 Py_DECREF(v);
822 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000823 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000824 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000825 break;
826
827 case BINARY_SUBTRACT:
828 w = POP();
829 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000830 if (PyInt_Check(v) && PyInt_Check(w)) {
831 /* INLINE: int - int */
832 register long a, b, i;
Guido van Rossumcf183ac1998-12-04 18:51:36 +0000833 a = PyInt_AS_LONG(v);
834 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +0000835 i = a - b;
836 if ((i^a) < 0 && (i^~b) < 0) {
837 PyErr_SetString(PyExc_OverflowError,
838 "integer subtraction");
839 x = NULL;
840 }
841 else
842 x = PyInt_FromLong(i);
843 }
844 else
845 x = PyNumber_Subtract(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000846 Py_DECREF(v);
847 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000848 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000849 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000850 break;
851
852 case BINARY_SUBSCR:
853 w = POP();
854 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +0000855 if (PyList_Check(v) && PyInt_Check(w)) {
856 /* INLINE: list[int] */
857 long i = PyInt_AsLong(w);
858 if (i < 0)
Guido van Rossumfa00e951998-07-08 15:02:37 +0000859 i += PyList_GET_SIZE(v);
Guido van Rossumc12da691997-07-17 23:12:42 +0000860 if (i < 0 ||
Guido van Rossumfa00e951998-07-08 15:02:37 +0000861 i >= PyList_GET_SIZE(v)) {
Guido van Rossumc12da691997-07-17 23:12:42 +0000862 PyErr_SetString(PyExc_IndexError,
863 "list index out of range");
864 x = NULL;
865 }
866 else {
Guido van Rossumfa00e951998-07-08 15:02:37 +0000867 x = PyList_GET_ITEM(v, i);
Guido van Rossumc12da691997-07-17 23:12:42 +0000868 Py_INCREF(x);
869 }
870 }
871 else
872 x = PyObject_GetItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000873 Py_DECREF(v);
874 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000875 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000876 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000877 break;
878
Guido van Rossum7928cd71991-10-24 14:59:31 +0000879 case BINARY_LSHIFT:
880 w = POP();
881 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000882 x = PyNumber_Lshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000883 Py_DECREF(v);
884 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000885 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000886 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000887 break;
888
889 case BINARY_RSHIFT:
890 w = POP();
891 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000892 x = PyNumber_Rshift(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000893 Py_DECREF(v);
894 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000895 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000896 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000897 break;
898
899 case BINARY_AND:
900 w = POP();
901 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000902 x = PyNumber_And(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000903 Py_DECREF(v);
904 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000905 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000906 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000907 break;
908
909 case BINARY_XOR:
910 w = POP();
911 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000912 x = PyNumber_Xor(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000913 Py_DECREF(v);
914 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000915 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000916 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000917 break;
918
919 case BINARY_OR:
920 w = POP();
921 v = POP();
Guido van Rossumfc490731997-05-06 15:06:49 +0000922 x = PyNumber_Or(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000923 Py_DECREF(v);
924 Py_DECREF(w);
Guido van Rossum7928cd71991-10-24 14:59:31 +0000925 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000926 if (x != NULL) continue;
Guido van Rossum7928cd71991-10-24 14:59:31 +0000927 break;
928
Guido van Rossum374a9221991-04-04 10:40:29 +0000929 case SLICE+0:
930 case SLICE+1:
931 case SLICE+2:
932 case SLICE+3:
933 if ((opcode-SLICE) & 2)
934 w = POP();
935 else
936 w = NULL;
937 if ((opcode-SLICE) & 1)
938 v = POP();
939 else
940 v = NULL;
941 u = POP();
942 x = apply_slice(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +0000943 Py_DECREF(u);
944 Py_XDECREF(v);
945 Py_XDECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +0000946 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000947 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000948 break;
949
950 case STORE_SLICE+0:
951 case STORE_SLICE+1:
952 case STORE_SLICE+2:
953 case STORE_SLICE+3:
954 if ((opcode-STORE_SLICE) & 2)
955 w = POP();
956 else
957 w = NULL;
958 if ((opcode-STORE_SLICE) & 1)
959 v = POP();
960 else
961 v = NULL;
962 u = POP();
963 t = POP();
964 err = assign_slice(u, v, w, t); /* u[v:w] = t */
Guido van Rossumb209a111997-04-29 18:18:01 +0000965 Py_DECREF(t);
966 Py_DECREF(u);
967 Py_XDECREF(v);
968 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000969 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000970 break;
971
972 case DELETE_SLICE+0:
973 case DELETE_SLICE+1:
974 case DELETE_SLICE+2:
975 case DELETE_SLICE+3:
976 if ((opcode-DELETE_SLICE) & 2)
977 w = POP();
978 else
979 w = NULL;
980 if ((opcode-DELETE_SLICE) & 1)
981 v = POP();
982 else
983 v = NULL;
984 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +0000985 err = assign_slice(u, v, w, (PyObject *)NULL);
Guido van Rossum374a9221991-04-04 10:40:29 +0000986 /* del u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +0000987 Py_DECREF(u);
988 Py_XDECREF(v);
989 Py_XDECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +0000990 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +0000991 break;
992
993 case STORE_SUBSCR:
994 w = POP();
995 v = POP();
996 u = POP();
997 /* v[w] = u */
Guido van Rossumfc490731997-05-06 15:06:49 +0000998 err = PyObject_SetItem(v, w, u);
Guido van Rossumb209a111997-04-29 18:18:01 +0000999 Py_DECREF(u);
1000 Py_DECREF(v);
1001 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001002 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001003 break;
1004
1005 case DELETE_SUBSCR:
1006 w = POP();
1007 v = POP();
1008 /* del v[w] */
Guido van Rossumfc490731997-05-06 15:06:49 +00001009 err = PyObject_DelItem(v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001010 Py_DECREF(v);
1011 Py_DECREF(w);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001012 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001013 break;
1014
1015 case PRINT_EXPR:
1016 v = POP();
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001017 /* Print value except if None */
1018 /* After printing, also assign to '_' */
1019 /* Before, set '_' to None to avoid recursion */
Guido van Rossumb209a111997-04-29 18:18:01 +00001020 if (v != Py_None &&
Guido van Rossuma027efa1997-05-05 20:56:21 +00001021 (err = PyDict_SetItemString(
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001022 f->f_builtins, "_", Py_None)) == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +00001023 err = Py_FlushLine();
Guido van Rossumc12da691997-07-17 23:12:42 +00001024 if (err == 0) {
Guido van Rossumbe270261997-05-22 22:26:18 +00001025 x = PySys_GetObject("stdout");
Guido van Rossum8f183201997-12-31 05:53:15 +00001026 if (x == NULL) {
1027 PyErr_SetString(
1028 PyExc_RuntimeError,
1029 "lost sys.stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00001030 err = -1;
Guido van Rossum8f183201997-12-31 05:53:15 +00001031 }
Guido van Rossumbe270261997-05-22 22:26:18 +00001032 }
1033 if (err == 0)
1034 err = PyFile_WriteObject(v, x, 0);
1035 if (err == 0) {
1036 PyFile_SoftSpace(x, 1);
1037 err = Py_FlushLine();
1038 }
Guido van Rossumaa06b0e1997-12-26 22:15:57 +00001039 if (err == 0) {
1040 err = PyDict_SetItemString(
1041 f->f_builtins, "_", v);
1042 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001043 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001044 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001045 break;
1046
1047 case PRINT_ITEM:
1048 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001049 w = PySys_GetObject("stdout");
Guido van Rossum8f183201997-12-31 05:53:15 +00001050 if (w == NULL) {
1051 PyErr_SetString(PyExc_RuntimeError,
1052 "lost sys.stdout");
1053 err = -1;
1054 }
1055 else if (PyFile_SoftSpace(w, 1))
Guido van Rossumbe270261997-05-22 22:26:18 +00001056 err = PyFile_WriteString(" ", w);
1057 if (err == 0)
1058 err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
Guido van Rossumb209a111997-04-29 18:18:01 +00001059 if (err == 0 && PyString_Check(v)) {
Guido van Rossumc6004111993-11-05 10:22:19 +00001060 /* XXX move into writeobject() ? */
Guido van Rossumb209a111997-04-29 18:18:01 +00001061 char *s = PyString_AsString(v);
1062 int len = PyString_Size(v);
Guido van Rossum7f7f2741995-02-10 17:01:56 +00001063 if (len > 0 &&
1064 isspace(Py_CHARMASK(s[len-1])) &&
Guido van Rossumc6004111993-11-05 10:22:19 +00001065 s[len-1] != ' ')
Guido van Rossumb209a111997-04-29 18:18:01 +00001066 PyFile_SoftSpace(w, 0);
Guido van Rossum374a9221991-04-04 10:40:29 +00001067 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001068 Py_DECREF(v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001069 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001070 break;
1071
1072 case PRINT_NEWLINE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001073 x = PySys_GetObject("stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001074 if (x == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00001075 PyErr_SetString(PyExc_RuntimeError,
1076 "lost sys.stdout");
Guido van Rossum3165fe61992-09-25 21:59:05 +00001077 else {
Guido van Rossumbe270261997-05-22 22:26:18 +00001078 err = PyFile_WriteString("\n", x);
1079 if (err == 0)
1080 PyFile_SoftSpace(x, 0);
Guido van Rossum3165fe61992-09-25 21:59:05 +00001081 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001082 break;
1083
1084 case BREAK_LOOP:
1085 why = WHY_BREAK;
1086 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001087
Guido van Rossumf10570b1995-07-07 22:53:21 +00001088 case RAISE_VARARGS:
1089 u = v = w = NULL;
1090 switch (oparg) {
1091 case 3:
1092 u = POP(); /* traceback */
Guido van Rossumf10570b1995-07-07 22:53:21 +00001093 /* Fallthrough */
1094 case 2:
1095 v = POP(); /* value */
1096 /* Fallthrough */
1097 case 1:
1098 w = POP(); /* exc */
Guido van Rossumd295f121998-04-09 21:39:57 +00001099 case 0: /* Fallthrough */
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001100 why = do_raise(w, v, u);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001101 break;
1102 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00001103 PyErr_SetString(PyExc_SystemError,
Guido van Rossumf10570b1995-07-07 22:53:21 +00001104 "bad RAISE_VARARGS oparg");
Guido van Rossumf10570b1995-07-07 22:53:21 +00001105 why = WHY_EXCEPTION;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00001106 break;
1107 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001108 break;
1109
1110 case LOAD_LOCALS:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001111 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001112 PyErr_SetString(PyExc_SystemError,
1113 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001114 break;
1115 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001116 Py_INCREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001117 PUSH(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001118 break;
1119
1120 case RETURN_VALUE:
1121 retval = POP();
1122 why = WHY_RETURN;
1123 break;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001124
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001125 case EXEC_STMT:
1126 w = POP();
1127 v = POP();
1128 u = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001129 err = exec_statement(f, u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001130 Py_DECREF(u);
1131 Py_DECREF(v);
1132 Py_DECREF(w);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00001133 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001134
Guido van Rossum374a9221991-04-04 10:40:29 +00001135 case POP_BLOCK:
1136 {
Guido van Rossumb209a111997-04-29 18:18:01 +00001137 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001138 while (STACK_LEVEL() > b->b_level) {
1139 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001140 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001141 }
1142 }
1143 break;
1144
1145 case END_FINALLY:
1146 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001147 if (PyInt_Check(v)) {
1148 why = (enum why_code) PyInt_AsLong(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001149 if (why == WHY_RETURN)
1150 retval = POP();
1151 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001152 else if (PyString_Check(v) || PyClass_Check(v)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001153 w = POP();
Guido van Rossumf10570b1995-07-07 22:53:21 +00001154 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001155 PyErr_Restore(v, w, u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001156 why = WHY_RERAISE;
Guido van Rossum0db1ef91995-07-28 23:06:00 +00001157 break;
Guido van Rossum374a9221991-04-04 10:40:29 +00001158 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001159 else if (v != Py_None) {
1160 PyErr_SetString(PyExc_SystemError,
Guido van Rossum374a9221991-04-04 10:40:29 +00001161 "'finally' pops bad exception");
1162 why = WHY_EXCEPTION;
1163 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001164 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001165 break;
1166
1167 case BUILD_CLASS:
Guido van Rossum25831651993-05-19 14:50:45 +00001168 u = POP();
Guido van Rossum374a9221991-04-04 10:40:29 +00001169 v = POP();
Guido van Rossum25831651993-05-19 14:50:45 +00001170 w = POP();
1171 x = build_class(u, v, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001172 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001173 Py_DECREF(u);
1174 Py_DECREF(v);
1175 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001176 break;
1177
1178 case STORE_NAME:
1179 w = GETNAMEV(oparg);
1180 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001181 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001182 PyErr_SetString(PyExc_SystemError,
1183 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001184 break;
1185 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001186 err = PyDict_SetItem(x, w, v);
1187 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001188 break;
1189
1190 case DELETE_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001191 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001192 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001193 PyErr_SetString(PyExc_SystemError,
1194 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001195 break;
1196 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001197 if ((err = PyDict_DelItem(x, w)) != 0)
1198 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001199 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001200
1201#ifdef CASE_TOO_BIG
1202 default: switch (opcode) {
1203#endif
Guido van Rossum374a9221991-04-04 10:40:29 +00001204
1205 case UNPACK_TUPLE:
Guido van Rossum374a9221991-04-04 10:40:29 +00001206 case UNPACK_LIST:
1207 v = POP();
Barry Warsawe42b18f1997-08-25 22:13:04 +00001208 if (PyTuple_Check(v)) {
1209 if (PyTuple_Size(v) != oparg) {
1210 PyErr_SetString(PyExc_ValueError,
1211 "unpack tuple of wrong size");
1212 why = WHY_EXCEPTION;
1213 }
1214 else {
1215 for (; --oparg >= 0; ) {
1216 w = PyTuple_GET_ITEM(v, oparg);
1217 Py_INCREF(w);
1218 PUSH(w);
1219 }
1220 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001221 }
Barry Warsawe42b18f1997-08-25 22:13:04 +00001222 else if (PyList_Check(v)) {
1223 if (PyList_Size(v) != oparg) {
1224 PyErr_SetString(PyExc_ValueError,
1225 "unpack list of wrong size");
1226 why = WHY_EXCEPTION;
1227 }
1228 else {
1229 for (; --oparg >= 0; ) {
1230 w = PyList_GET_ITEM(v, oparg);
1231 Py_INCREF(w);
1232 PUSH(w);
1233 }
1234 }
1235 }
1236 else if (PySequence_Check(v)) {
1237 if (unpack_sequence(v, oparg,
1238 stack_pointer + oparg))
1239 stack_pointer += oparg;
1240 else
1241 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001242 }
1243 else {
Barry Warsawe42b18f1997-08-25 22:13:04 +00001244 PyErr_SetString(PyExc_TypeError,
1245 "unpack non-sequence");
1246 why = WHY_EXCEPTION;
Guido van Rossum374a9221991-04-04 10:40:29 +00001247 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001248 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001249 break;
1250
1251 case STORE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001252 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001253 v = POP();
1254 u = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001255 err = PyObject_SetAttr(v, w, u); /* v.w = u */
1256 Py_DECREF(v);
1257 Py_DECREF(u);
Guido van Rossum374a9221991-04-04 10:40:29 +00001258 break;
1259
1260 case DELETE_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001261 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001262 v = POP();
Guido van Rossuma027efa1997-05-05 20:56:21 +00001263 err = PyObject_SetAttr(v, w, (PyObject *)NULL);
1264 /* del v.w */
Guido van Rossumb209a111997-04-29 18:18:01 +00001265 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001266 break;
1267
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001268 case STORE_GLOBAL:
1269 w = GETNAMEV(oparg);
1270 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001271 err = PyDict_SetItem(f->f_globals, w, v);
1272 Py_DECREF(v);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001273 break;
1274
1275 case DELETE_GLOBAL:
1276 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001277 if ((err = PyDict_DelItem(f->f_globals, w)) != 0)
1278 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum32c6cdf1991-12-10 13:52:46 +00001279 break;
1280
Guido van Rossum374a9221991-04-04 10:40:29 +00001281 case LOAD_CONST:
1282 x = GETCONST(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001283 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001284 PUSH(x);
1285 break;
1286
1287 case LOAD_NAME:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001288 w = GETNAMEV(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001289 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001290 PyErr_SetString(PyExc_SystemError,
1291 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001292 break;
1293 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001294 x = PyDict_GetItem(x, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001295 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001296 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001297 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001298 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001299 if (x == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001300 PyErr_SetObject(
1301 PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001302 break;
1303 }
1304 }
1305 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001306 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001307 PUSH(x);
1308 break;
1309
1310 case LOAD_GLOBAL:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001311 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001312 x = PyDict_GetItem(f->f_globals, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001313 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001314 x = PyDict_GetItem(f->f_builtins, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001315 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001316 PyErr_SetObject(PyExc_NameError, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001317 break;
1318 }
1319 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001320 Py_INCREF(x);
Guido van Rossum374a9221991-04-04 10:40:29 +00001321 PUSH(x);
1322 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001323
Guido van Rossum9bfef441993-03-29 10:43:31 +00001324 case LOAD_FAST:
Guido van Rossum681d79a1995-07-18 14:51:37 +00001325 x = GETLOCAL(oparg);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001326 if (x == NULL) {
Guido van Rossum87460821999-06-22 14:47:32 +00001327 PyErr_SetObject(PyExc_UnboundLocalError,
Guido van Rossumb209a111997-04-29 18:18:01 +00001328 PyTuple_GetItem(co->co_varnames,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001329 oparg));
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001330 break;
1331 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001332 Py_INCREF(x);
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001333 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001334 if (x != NULL) continue;
Guido van Rossum9bfef441993-03-29 10:43:31 +00001335 break;
1336
1337 case STORE_FAST:
Guido van Rossum25831651993-05-19 14:50:45 +00001338 v = POP();
Guido van Rossum681d79a1995-07-18 14:51:37 +00001339 SETLOCAL(oparg, v);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001340 continue;
Guido van Rossum8b17d6b1993-03-30 13:18:41 +00001341
1342 case DELETE_FAST:
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001343 x = GETLOCAL(oparg);
1344 if (x == NULL) {
Guido van Rossum87460821999-06-22 14:47:32 +00001345 PyErr_SetObject(PyExc_UnboundLocalError,
Guido van Rossum2e4c8991998-05-12 20:27:36 +00001346 PyTuple_GetItem(co->co_varnames,
1347 oparg));
1348 break;
1349 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00001350 SETLOCAL(oparg, NULL);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001351 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001352
1353 case BUILD_TUPLE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001354 x = PyTuple_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001355 if (x != NULL) {
1356 for (; --oparg >= 0;) {
1357 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001358 PyTuple_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001359 }
1360 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001361 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001362 }
1363 break;
1364
1365 case BUILD_LIST:
Guido van Rossumb209a111997-04-29 18:18:01 +00001366 x = PyList_New(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001367 if (x != NULL) {
1368 for (; --oparg >= 0;) {
1369 w = POP();
Guido van Rossum5053efc1998-08-04 15:27:50 +00001370 PyList_SET_ITEM(x, oparg, w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001371 }
1372 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001373 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001374 }
1375 break;
1376
1377 case BUILD_MAP:
Guido van Rossumb209a111997-04-29 18:18:01 +00001378 x = PyDict_New();
Guido van Rossum374a9221991-04-04 10:40:29 +00001379 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001380 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001381 break;
1382
1383 case LOAD_ATTR:
Guido van Rossum9bfef441993-03-29 10:43:31 +00001384 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001385 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001386 x = PyObject_GetAttr(v, w);
1387 Py_DECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001388 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001389 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001390 break;
1391
1392 case COMPARE_OP:
1393 w = POP();
1394 v = POP();
Guido van Rossumc12da691997-07-17 23:12:42 +00001395 if (PyInt_Check(v) && PyInt_Check(w)) {
1396 /* INLINE: cmp(int, int) */
1397 register long a, b;
1398 register int res;
Guido van Rossumcf183ac1998-12-04 18:51:36 +00001399 a = PyInt_AS_LONG(v);
1400 b = PyInt_AS_LONG(w);
Guido van Rossumc12da691997-07-17 23:12:42 +00001401 switch (oparg) {
1402 case LT: res = a < b; break;
1403 case LE: res = a <= b; break;
1404 case EQ: res = a == b; break;
1405 case NE: res = a != b; break;
1406 case GT: res = a > b; break;
1407 case GE: res = a >= b; break;
1408 case IS: res = v == w; break;
1409 case IS_NOT: res = v != w; break;
1410 default: goto slow_compare;
1411 }
1412 x = res ? Py_True : Py_False;
1413 Py_INCREF(x);
1414 }
1415 else {
1416 slow_compare:
1417 x = cmp_outcome(oparg, v, w);
1418 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001419 Py_DECREF(v);
1420 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001421 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001422 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001423 break;
1424
1425 case IMPORT_NAME:
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001426 w = GETNAMEV(oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00001427 x = PyDict_GetItemString(f->f_builtins, "__import__");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001428 if (x == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001429 PyErr_SetString(PyExc_ImportError,
Guido van Rossumfc490731997-05-06 15:06:49 +00001430 "__import__ not found");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001431 break;
1432 }
Guido van Rossumaee0bad1997-09-05 07:33:22 +00001433 u = find_from_args(f, INSTR_OFFSET());
1434 if (u == NULL) {
1435 x = u;
1436 break;
Guido van Rossum24c13741995-02-14 09:42:43 +00001437 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001438 w = Py_BuildValue("(OOOO)",
Guido van Rossum681d79a1995-07-18 14:51:37 +00001439 w,
1440 f->f_globals,
Guido van Rossuma027efa1997-05-05 20:56:21 +00001441 f->f_locals == NULL ?
1442 Py_None : f->f_locals,
Guido van Rossum681d79a1995-07-18 14:51:37 +00001443 u);
Guido van Rossumb209a111997-04-29 18:18:01 +00001444 Py_DECREF(u);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001445 if (w == NULL) {
1446 x = NULL;
1447 break;
1448 }
Guido van Rossumb209a111997-04-29 18:18:01 +00001449 x = PyEval_CallObject(x, w);
1450 Py_DECREF(w);
Guido van Rossumf10570b1995-07-07 22:53:21 +00001451 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001452 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001453 break;
1454
1455 case IMPORT_FROM:
Guido van Rossumdf62e441991-08-16 08:56:04 +00001456 w = GETNAMEV(oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001457 v = TOP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001458 PyFrame_FastToLocals(f);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001459 if ((x = f->f_locals) == NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001460 PyErr_SetString(PyExc_SystemError,
1461 "no locals");
Guido van Rossum681d79a1995-07-18 14:51:37 +00001462 break;
1463 }
1464 err = import_from(x, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001465 PyFrame_LocalsToFast(f, 0);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001466 if (err == 0) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001467 break;
Guido van Rossum25831651993-05-19 14:50:45 +00001468
Guido van Rossum374a9221991-04-04 10:40:29 +00001469 case JUMP_FORWARD:
1470 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001471 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001472
1473 case JUMP_IF_FALSE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001474 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001475 if (err > 0)
1476 err = 0;
1477 else if (err == 0)
Guido van Rossum374a9221991-04-04 10:40:29 +00001478 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001479 else
1480 break;
1481 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001482
1483 case JUMP_IF_TRUE:
Guido van Rossumb209a111997-04-29 18:18:01 +00001484 err = PyObject_IsTrue(TOP());
Guido van Rossum04691fc1992-08-12 15:35:34 +00001485 if (err > 0) {
1486 err = 0;
Guido van Rossum374a9221991-04-04 10:40:29 +00001487 JUMPBY(oparg);
Guido van Rossum04691fc1992-08-12 15:35:34 +00001488 }
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001489 else if (err == 0)
1490 ;
1491 else
1492 break;
1493 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001494
1495 case JUMP_ABSOLUTE:
1496 JUMPTO(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001497 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001498
1499 case FOR_LOOP:
1500 /* for v in s: ...
1501 On entry: stack contains s, i.
1502 On exit: stack contains s, i+1, s[i];
1503 but if loop exhausted:
1504 s, i are popped, and we jump */
1505 w = POP(); /* Loop index */
1506 v = POP(); /* Sequence object */
1507 u = loop_subscript(v, w);
1508 if (u != NULL) {
1509 PUSH(v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001510 x = PyInt_FromLong(PyInt_AsLong(w)+1);
Guido van Rossum374a9221991-04-04 10:40:29 +00001511 PUSH(x);
Guido van Rossumb209a111997-04-29 18:18:01 +00001512 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001513 PUSH(u);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001514 if (x != NULL) continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001515 }
1516 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00001517 Py_DECREF(v);
1518 Py_DECREF(w);
Guido van Rossum374a9221991-04-04 10:40:29 +00001519 /* A NULL can mean "s exhausted"
1520 but also an error: */
Guido van Rossumb209a111997-04-29 18:18:01 +00001521 if (PyErr_Occurred())
Guido van Rossum374a9221991-04-04 10:40:29 +00001522 why = WHY_EXCEPTION;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001523 else {
Guido van Rossum374a9221991-04-04 10:40:29 +00001524 JUMPBY(oparg);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001525 continue;
1526 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001527 }
1528 break;
1529
1530 case SETUP_LOOP:
1531 case SETUP_EXCEPT:
1532 case SETUP_FINALLY:
Guido van Rossumb209a111997-04-29 18:18:01 +00001533 PyFrame_BlockSetup(f, opcode, INSTR_OFFSET() + oparg,
Guido van Rossum374a9221991-04-04 10:40:29 +00001534 STACK_LEVEL());
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001535 continue;
Guido van Rossum374a9221991-04-04 10:40:29 +00001536
1537 case SET_LINENO:
Guido van Rossum96a42c81992-01-12 02:29:51 +00001538#ifdef LLTRACE
1539 if (lltrace)
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001540 printf("--- %s:%d \n", filename, oparg);
Guido van Rossum374a9221991-04-04 10:40:29 +00001541#endif
Guido van Rossum96a42c81992-01-12 02:29:51 +00001542 f->f_lineno = oparg;
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001543 if (f->f_trace == NULL)
1544 continue;
1545 /* Trace each line of code reached */
1546 f->f_lasti = INSTR_OFFSET();
1547 err = call_trace(&f->f_trace, &f->f_trace,
Guido van Rossumb209a111997-04-29 18:18:01 +00001548 f, "line", Py_None);
Guido van Rossum374a9221991-04-04 10:40:29 +00001549 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001550
1551 case CALL_FUNCTION:
Jeremy Hylton76901512000-03-28 23:49:17 +00001552 case CALL_FUNCTION_VAR:
1553 case CALL_FUNCTION_KW:
1554 case CALL_FUNCTION_VAR_KW:
Guido van Rossumf10570b1995-07-07 22:53:21 +00001555 {
Jeremy Hylton76901512000-03-28 23:49:17 +00001556 int na = oparg & 0xff;
1557 int nk = (oparg>>8) & 0xff;
1558 int flags = (opcode - CALL_FUNCTION) & 3;
1559 int n = na + 2*nk + (flags & 1) + ((flags >> 1) & 1);
1560 PyObject **pfunc = stack_pointer - n - 1;
1561 PyObject *func = *pfunc;
1562 PyObject *self = NULL;
1563 PyObject *class = NULL;
1564 f->f_lasti = INSTR_OFFSET() - 3; /* For tracing */
1565 if (PyMethod_Check(func)) {
1566 self = PyMethod_Self(func);
1567 class = PyMethod_Class(func);
1568 func = PyMethod_Function(func);
1569 Py_INCREF(func);
1570 if (self != NULL) {
1571 Py_INCREF(self);
1572 Py_DECREF(*pfunc);
1573 *pfunc = self;
1574 na++;
1575 n++;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001576 }
1577 else {
Jeremy Hylton76901512000-03-28 23:49:17 +00001578 /* Unbound methods must be called with an
1579 instance of the class (or a derived
1580 class) as first argument */
1581 if (na > 0 && (self = stack_pointer[-n]) != NULL
1582 && PyInstance_Check(self)
1583 && PyClass_IsSubclass((PyObject *)
1584 (((PyInstanceObject *)self)->in_class),
1585 class))
1586 /* Handy-dandy */ ;
1587 else {
1588 PyErr_SetString(PyExc_TypeError,
1589 "unbound method must be called with class instance 1st argument");
1590 x = NULL;
1591 break;
1592 }
1593 }
1594 }
1595 else
1596 Py_INCREF(func);
1597 if (PyFunction_Check(func) && flags == 0) {
1598 PyObject *co = PyFunction_GetCode(func);
1599 PyObject *globals = PyFunction_GetGlobals(func);
1600 PyObject *argdefs = PyFunction_GetDefaults(func);
1601 PyObject **d;
1602 int nd;
1603 if (argdefs != NULL) {
1604 d = &PyTuple_GET_ITEM(argdefs, 0);
1605 nd = ((PyTupleObject *)argdefs)->ob_size;
1606 }
1607 else {
1608 d = NULL;
1609 nd = 0;
1610 }
1611 x = eval_code2((PyCodeObject *)co, globals,
1612 (PyObject *)NULL, stack_pointer-n, na,
1613 stack_pointer-2*nk, nk, d, nd,
1614 class);
1615 }
1616 else {
1617 int nstar = 0;
1618 PyObject *args;
1619 PyObject *stararg = 0;
1620 PyObject *kwdict = NULL;
1621 if (flags & 2) {
1622 kwdict = POP();
1623 if (!PyDict_Check(kwdict)) {
1624 PyErr_SetString(PyExc_TypeError,
1625 "** argument must be a dictionary");
1626 x = NULL;
1627 break;
1628 }
1629 }
1630 if (flags & 1) {
1631 stararg = POP();
1632 if (!PySequence_Check(stararg)) {
1633 PyErr_SetString(PyExc_TypeError,
1634 "* argument must be a sequence");
1635 x = NULL;
1636 break;
1637 }
1638 nstar = PySequence_Length(stararg);
1639 }
1640 if (nk > 0) {
1641 if (kwdict == NULL) {
1642 kwdict = PyDict_New();
1643 if (kwdict == NULL) {
1644 x = NULL;
1645 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001646 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001647 }
1648 err = 0;
1649 while (--nk >= 0) {
1650 PyObject *value = POP();
1651 PyObject *key = POP();
1652 if (PyDict_GetItem(kwdict, key) != NULL) {
1653 err = 1;
1654 PyErr_Format(PyExc_TypeError,
1655 "keyword parameter redefined: %.400s",
1656 PyString_AsString(key));
1657 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001658 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001659 err = PyDict_SetItem(kwdict, key, value);
1660 Py_DECREF(key);
1661 Py_DECREF(value);
1662 if (err)
1663 break;
1664 }
1665 if (err) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001666 Py_DECREF(args);
Jeremy Hylton76901512000-03-28 23:49:17 +00001667 Py_DECREF(kwdict);
1668 break;
1669 }
Guido van Rossumf10570b1995-07-07 22:53:21 +00001670 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001671 args = PyTuple_New(na + nstar);
1672 if (args == NULL) {
1673 x = NULL;
1674 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001675 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001676 if (stararg) {
1677 PyObject *t = NULL;
1678 int i;
1679 if (!PyTuple_Check(stararg)) {
1680 /* must be sequence to pass earlier test */
1681 t = PySequence_Tuple(stararg);
1682 if (t == NULL) {
1683 x = NULL;
1684 break;
1685 }
1686 Py_DECREF(stararg);
1687 stararg = t;
1688 }
1689 for (i = 0; i < nstar; i++) {
1690 PyObject *a = PyTuple_GET_ITEM(stararg, i);
1691 Py_INCREF(a);
1692 PyTuple_SET_ITEM(args, na + i, a);
1693 }
1694 Py_DECREF(stararg);
1695 }
1696 while (--na >= 0) {
1697 w = POP();
1698 PyTuple_SET_ITEM(args, na, w);
1699 }
1700 x = PyEval_CallObjectWithKeywords(func, args, kwdict);
1701 Py_DECREF(args);
1702 Py_XDECREF(kwdict);
1703 }
1704 Py_DECREF(func);
1705 while (stack_pointer > pfunc) {
1706 w = POP();
1707 Py_DECREF(w);
1708 }
1709 PUSH(x);
1710 if (x != NULL) continue;
1711 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001712 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001713
Guido van Rossum681d79a1995-07-18 14:51:37 +00001714 case MAKE_FUNCTION:
1715 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00001716 x = PyFunction_New(v, f->f_globals);
1717 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001718 /* XXX Maybe this should be a separate opcode? */
1719 if (x != NULL && oparg > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001720 v = PyTuple_New(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001721 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001722 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001723 x = NULL;
1724 break;
1725 }
1726 while (--oparg >= 0) {
1727 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001728 PyTuple_SET_ITEM(v, oparg, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001729 }
1730 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001731 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001732 }
1733 PUSH(x);
1734 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001735
1736 case BUILD_SLICE:
1737 if (oparg == 3)
1738 w = POP();
1739 else
1740 w = NULL;
1741 v = POP();
1742 u = POP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00001743 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001744 Py_DECREF(u);
1745 Py_DECREF(v);
1746 Py_XDECREF(w);
Guido van Rossum8861b741996-07-30 16:49:37 +00001747 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001748 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00001749 break;
1750
1751
Guido van Rossum374a9221991-04-04 10:40:29 +00001752 default:
1753 fprintf(stderr,
1754 "XXX lineno: %d, opcode: %d\n",
Guido van Rossum96a42c81992-01-12 02:29:51 +00001755 f->f_lineno, opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00001756 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00001757 why = WHY_EXCEPTION;
1758 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001759
1760#ifdef CASE_TOO_BIG
1761 }
1762#endif
1763
Guido van Rossum374a9221991-04-04 10:40:29 +00001764 } /* switch */
1765
1766 on_error:
1767
1768 /* Quickly continue if no error occurred */
1769
1770 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001771 if (err == 0 && x != NULL) {
1772#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001773 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001774 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00001775 fprintf(stderr,
1776 "XXX undetected error\n");
1777 else
1778#endif
1779 continue; /* Normal, fast path */
1780 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001781 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00001782 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00001783 err = 0;
1784 }
1785
Guido van Rossum374a9221991-04-04 10:40:29 +00001786 /* Double-check exception status */
1787
1788 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001789 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001790 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001791 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00001792 why = WHY_EXCEPTION;
1793 }
1794 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001795#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00001796 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001797 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001798 if (PyErr_Occurred()) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001799 fprintf(stderr,
1800 "XXX undetected error (why=%d)\n",
1801 why);
1802 why = WHY_EXCEPTION;
1803 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001804 }
1805#endif
1806
1807 /* Log traceback info if this is a real exception */
1808
1809 if (why == WHY_EXCEPTION) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001810 f->f_lasti = INSTR_OFFSET() - 1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001811 if (HAS_ARG(opcode))
Guido van Rossum96a42c81992-01-12 02:29:51 +00001812 f->f_lasti -= 2;
Guido van Rossumb209a111997-04-29 18:18:01 +00001813 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001814
Guido van Rossume59214e1994-08-30 08:01:59 +00001815 if (f->f_trace)
1816 call_exc_trace(&f->f_trace, &f->f_trace, f);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001817 if (tstate->sys_profilefunc)
1818 call_exc_trace(&tstate->sys_profilefunc,
1819 (PyObject**)0, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00001820 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001821
1822 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
1823
1824 if (why == WHY_RERAISE)
1825 why = WHY_EXCEPTION;
1826
1827 /* Unwind stacks if a (pseudo) exception occurred */
1828
1829 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001830 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001831 while (STACK_LEVEL() > b->b_level) {
1832 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001833 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001834 }
1835 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
1836 why = WHY_NOT;
1837 JUMPTO(b->b_handler);
1838 break;
1839 }
1840 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00001841 (b->b_type == SETUP_EXCEPT &&
1842 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001843 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001844 PyObject *exc, *val, *tb;
1845 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001846 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001847 val = Py_None;
1848 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00001849 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001850 /* Make the raw exception data
1851 available to the handler,
1852 so a program can emulate the
1853 Python main loop. Don't do
1854 this for 'finally'. */
1855 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00001856 PyErr_NormalizeException(
1857 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001858 set_exc_info(tstate,
1859 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001860 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001861 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001862 PUSH(val);
1863 PUSH(exc);
1864 }
1865 else {
1866 if (why == WHY_RETURN)
1867 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00001868 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00001869 PUSH(v);
1870 }
1871 why = WHY_NOT;
1872 JUMPTO(b->b_handler);
1873 break;
1874 }
1875 } /* unwind stack */
1876
1877 /* End the loop if we still have an error (or return) */
1878
1879 if (why != WHY_NOT)
1880 break;
1881
1882 } /* main loop */
1883
1884 /* Pop remaining stack entries */
1885
1886 while (!EMPTY()) {
1887 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001888 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001889 }
1890
Guido van Rossum96a42c81992-01-12 02:29:51 +00001891 if (why != WHY_RETURN)
1892 retval = NULL;
1893
Guido van Rossume59214e1994-08-30 08:01:59 +00001894 if (f->f_trace) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001895 if (why == WHY_RETURN) {
Guido van Rossume59214e1994-08-30 08:01:59 +00001896 if (call_trace(&f->f_trace, &f->f_trace, f,
1897 "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001898 Py_XDECREF(retval);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001899 retval = NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001900 why = WHY_EXCEPTION;
Guido van Rossum96a42c81992-01-12 02:29:51 +00001901 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001902 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001903 }
1904
Guido van Rossuma027efa1997-05-05 20:56:21 +00001905 if (tstate->sys_profilefunc && why == WHY_RETURN) {
1906 if (call_trace(&tstate->sys_profilefunc, (PyObject**)0,
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001907 f, "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001908 Py_XDECREF(retval);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001909 retval = NULL;
1910 why = WHY_EXCEPTION;
1911 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001912 }
Guido van Rossuma4240131997-01-21 21:18:36 +00001913
Guido van Rossuma027efa1997-05-05 20:56:21 +00001914 reset_exc_info(tstate);
1915
1916 --tstate->recursion_depth;
Guido van Rossum8c5df061997-01-24 04:19:24 +00001917
1918 fail: /* Jump here from prelude on failure */
Guido van Rossum96a42c81992-01-12 02:29:51 +00001919
Guido van Rossum374a9221991-04-04 10:40:29 +00001920 /* Restore previous frame and release the current one */
Guido van Rossum681d79a1995-07-18 14:51:37 +00001921
Guido van Rossuma027efa1997-05-05 20:56:21 +00001922 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +00001923 Py_DECREF(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001924
Guido van Rossum96a42c81992-01-12 02:29:51 +00001925 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00001926}
1927
Guido van Rossuma027efa1997-05-05 20:56:21 +00001928static void
1929set_exc_info(tstate, type, value, tb)
1930 PyThreadState *tstate;
1931 PyObject *type;
1932 PyObject *value;
1933 PyObject *tb;
1934{
1935 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001936 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00001937
Guido van Rossuma027efa1997-05-05 20:56:21 +00001938 frame = tstate->frame;
1939 if (frame->f_exc_type == NULL) {
1940 /* This frame didn't catch an exception before */
1941 /* Save previous exception of this thread in this frame */
Guido van Rossuma027efa1997-05-05 20:56:21 +00001942 if (tstate->exc_type == NULL) {
1943 Py_INCREF(Py_None);
1944 tstate->exc_type = Py_None;
1945 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001946 tmp_type = frame->f_exc_type;
1947 tmp_value = frame->f_exc_value;
1948 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001949 Py_XINCREF(tstate->exc_type);
1950 Py_XINCREF(tstate->exc_value);
1951 Py_XINCREF(tstate->exc_traceback);
1952 frame->f_exc_type = tstate->exc_type;
1953 frame->f_exc_value = tstate->exc_value;
1954 frame->f_exc_traceback = tstate->exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001955 Py_XDECREF(tmp_type);
1956 Py_XDECREF(tmp_value);
1957 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001958 }
1959 /* Set new exception for this thread */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001960 tmp_type = tstate->exc_type;
1961 tmp_value = tstate->exc_value;
1962 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001963 Py_XINCREF(type);
1964 Py_XINCREF(value);
1965 Py_XINCREF(tb);
1966 tstate->exc_type = type;
1967 tstate->exc_value = value;
1968 tstate->exc_traceback = tb;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001969 Py_XDECREF(tmp_type);
1970 Py_XDECREF(tmp_value);
1971 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001972 /* For b/w compatibility */
1973 PySys_SetObject("exc_type", type);
1974 PySys_SetObject("exc_value", value);
1975 PySys_SetObject("exc_traceback", tb);
1976}
1977
1978static void
1979reset_exc_info(tstate)
1980 PyThreadState *tstate;
1981{
1982 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001983 PyObject *tmp_type, *tmp_value, *tmp_tb;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001984 frame = tstate->frame;
1985 if (frame->f_exc_type != NULL) {
1986 /* This frame caught an exception */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001987 tmp_type = tstate->exc_type;
1988 tmp_value = tstate->exc_value;
1989 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001990 Py_XINCREF(frame->f_exc_type);
1991 Py_XINCREF(frame->f_exc_value);
1992 Py_XINCREF(frame->f_exc_traceback);
1993 tstate->exc_type = frame->f_exc_type;
1994 tstate->exc_value = frame->f_exc_value;
1995 tstate->exc_traceback = frame->f_exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001996 Py_XDECREF(tmp_type);
1997 Py_XDECREF(tmp_value);
1998 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001999 /* For b/w compatibility */
2000 PySys_SetObject("exc_type", frame->f_exc_type);
2001 PySys_SetObject("exc_value", frame->f_exc_value);
2002 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
2003 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002004 tmp_type = frame->f_exc_type;
2005 tmp_value = frame->f_exc_value;
2006 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002007 frame->f_exc_type = NULL;
2008 frame->f_exc_value = NULL;
2009 frame->f_exc_traceback = NULL;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002010 Py_XDECREF(tmp_type);
2011 Py_XDECREF(tmp_value);
2012 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002013}
2014
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002015/* Logic for the raise statement (too complicated for inlining).
2016 This *consumes* a reference count to each of its arguments. */
Guido van Rossum1aa14831997-01-21 05:34:20 +00002017static enum why_code
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002018do_raise(type, value, tb)
Guido van Rossumb209a111997-04-29 18:18:01 +00002019 PyObject *type, *value, *tb;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002020{
Guido van Rossumd295f121998-04-09 21:39:57 +00002021 if (type == NULL) {
2022 /* Reraise */
2023 PyThreadState *tstate = PyThreadState_Get();
2024 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
2025 value = tstate->exc_value;
2026 tb = tstate->exc_traceback;
2027 Py_XINCREF(type);
2028 Py_XINCREF(value);
2029 Py_XINCREF(tb);
2030 }
2031
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002032 /* We support the following forms of raise:
2033 raise <class>, <classinstance>
2034 raise <class>, <argument tuple>
2035 raise <class>, None
2036 raise <class>, <argument>
2037 raise <classinstance>, None
2038 raise <string>, <object>
2039 raise <string>, None
2040
2041 An omitted second argument is the same as None.
2042
2043 In addition, raise <tuple>, <anything> is the same as
2044 raising the tuple's first item (and it better have one!);
2045 this rule is applied recursively.
2046
2047 Finally, an optional third argument can be supplied, which
2048 gives the traceback to be substituted (useful when
2049 re-raising an exception after examining it). */
2050
2051 /* First, check the traceback argument, replacing None with
2052 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002053 if (tb == Py_None) {
2054 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002055 tb = NULL;
2056 }
2057 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002058 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002059 "raise 3rd arg must be traceback or None");
2060 goto raise_error;
2061 }
2062
2063 /* Next, replace a missing value with None */
2064 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002065 value = Py_None;
2066 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002067 }
2068
2069 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00002070 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
2071 PyObject *tmp = type;
2072 type = PyTuple_GET_ITEM(type, 0);
2073 Py_INCREF(type);
2074 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002075 }
2076
Barry Warsaw4249f541997-08-22 21:26:19 +00002077 if (PyString_Check(type))
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002078 ;
Barry Warsaw4249f541997-08-22 21:26:19 +00002079
2080 else if (PyClass_Check(type))
2081 PyErr_NormalizeException(&type, &value, &tb);
2082
Guido van Rossumb209a111997-04-29 18:18:01 +00002083 else if (PyInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002084 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002085 if (value != Py_None) {
2086 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002087 "instance exception may not have a separate value");
2088 goto raise_error;
2089 }
2090 else {
2091 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00002092 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002093 value = type;
Guido van Rossumb209a111997-04-29 18:18:01 +00002094 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2095 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002096 }
2097 }
2098 else {
2099 /* Not something you can raise. You get an exception
2100 anyway, just not what you specified :-) */
Guido van Rossumb209a111997-04-29 18:18:01 +00002101 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002102 "exceptions must be strings, classes, or instances");
2103 goto raise_error;
2104 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002105 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002106 if (tb == NULL)
2107 return WHY_EXCEPTION;
2108 else
2109 return WHY_RERAISE;
2110 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002111 Py_XDECREF(value);
2112 Py_XDECREF(type);
2113 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002114 return WHY_EXCEPTION;
2115}
2116
Barry Warsawe42b18f1997-08-25 22:13:04 +00002117static int
2118unpack_sequence(v, argcnt, sp)
2119 PyObject *v;
2120 int argcnt;
2121 PyObject **sp;
2122{
2123 int i;
2124 PyObject *w;
2125
2126 for (i = 0; i < argcnt; i++) {
2127 if (! (w = PySequence_GetItem(v, i))) {
2128 if (PyErr_ExceptionMatches(PyExc_IndexError))
2129 PyErr_SetString(PyExc_ValueError,
2130 "unpack sequence of wrong size");
2131 goto finally;
2132 }
2133 *--sp = w;
2134 }
2135 /* we better get an IndexError now */
2136 if (PySequence_GetItem(v, i) == NULL) {
2137 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2138 PyErr_Clear();
2139 return 1;
2140 }
2141 /* some other exception occurred. fall through to finally */
2142 }
2143 else
2144 PyErr_SetString(PyExc_ValueError,
2145 "unpack sequence of wrong size");
2146 /* fall through */
2147finally:
Barry Warsaw91010551997-08-25 22:30:51 +00002148 for (; i > 0; i--, sp++)
2149 Py_DECREF(*sp);
Barry Warsawe42b18f1997-08-25 22:13:04 +00002150
2151 return 0;
2152}
2153
2154
Guido van Rossum96a42c81992-01-12 02:29:51 +00002155#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00002156static int
2157prtrace(v, str)
Guido van Rossumb209a111997-04-29 18:18:01 +00002158 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002159 char *str;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002160{
Guido van Rossum3f5da241990-12-20 15:06:42 +00002161 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00002162 if (PyObject_Print(v, stdout, 0) != 0)
2163 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00002164 printf("\n");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002165}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002166#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002167
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002168static void
2169call_exc_trace(p_trace, p_newtrace, f)
Guido van Rossumb209a111997-04-29 18:18:01 +00002170 PyObject **p_trace, **p_newtrace;
2171 PyFrameObject *f;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002172{
Guido van Rossumb209a111997-04-29 18:18:01 +00002173 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002174 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002175 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002176 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002177 value = Py_None;
2178 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002179 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002180 arg = Py_BuildValue("(OOO)", type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002181 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002182 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002183 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002184 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002185 err = call_trace(p_trace, p_newtrace, f, "exception", arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002186 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002187 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00002188 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002189 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002190 Py_XDECREF(type);
2191 Py_XDECREF(value);
2192 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002193 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002194}
2195
2196static int
2197call_trace(p_trace, p_newtrace, f, msg, arg)
Guido van Rossumb209a111997-04-29 18:18:01 +00002198 PyObject **p_trace; /* in/out; may not be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002199 may not point to NULL variable initially */
Guido van Rossumb209a111997-04-29 18:18:01 +00002200 PyObject **p_newtrace; /* in/out; may be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002201 may point to NULL variable;
2202 may be same variable as p_newtrace */
Guido van Rossumb209a111997-04-29 18:18:01 +00002203 PyFrameObject *f;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002204 char *msg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002205 PyObject *arg;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002206{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002207 PyThreadState *tstate = f->f_tstate;
Guido van Rossumb209a111997-04-29 18:18:01 +00002208 PyObject *args, *what;
2209 PyObject *res = NULL;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002210
Guido van Rossuma027efa1997-05-05 20:56:21 +00002211 if (tstate->tracing) {
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002212 /* Don't do recursive traces */
2213 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002214 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002215 *p_newtrace = NULL;
2216 }
2217 return 0;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002218 }
2219
Guido van Rossumb209a111997-04-29 18:18:01 +00002220 args = PyTuple_New(3);
Guido van Rossumf10570b1995-07-07 22:53:21 +00002221 if (args == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002222 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002223 what = PyString_FromString(msg);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002224 if (what == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002225 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002226 Py_INCREF(f);
2227 PyTuple_SET_ITEM(args, 0, (PyObject *)f);
2228 PyTuple_SET_ITEM(args, 1, what);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002229 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002230 arg = Py_None;
2231 Py_INCREF(arg);
2232 PyTuple_SET_ITEM(args, 2, arg);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002233 tstate->tracing++;
Guido van Rossumb209a111997-04-29 18:18:01 +00002234 PyFrame_FastToLocals(f);
2235 res = PyEval_CallObject(*p_trace, args); /* May clear *p_trace! */
2236 PyFrame_LocalsToFast(f, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002237 tstate->tracing--;
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002238 cleanup:
Guido van Rossumb209a111997-04-29 18:18:01 +00002239 Py_XDECREF(args);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002240 if (res == NULL) {
2241 /* The trace proc raised an exception */
Guido van Rossumb209a111997-04-29 18:18:01 +00002242 PyTraceBack_Here(f);
2243 Py_XDECREF(*p_trace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002244 *p_trace = NULL;
2245 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002246 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002247 *p_newtrace = NULL;
2248 }
Barry Warsawf6202631999-09-08 16:26:33 +00002249 /* to be extra double plus sure we don't get recursive
2250 * calls inf either tracefunc or profilefunc gets an
2251 * exception, zap the global variables.
2252 */
2253 Py_XDECREF(tstate->sys_tracefunc);
2254 tstate->sys_tracefunc = NULL;
2255 Py_XDECREF(tstate->sys_profilefunc);
2256 tstate->sys_profilefunc = NULL;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002257 return -1;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002258 }
2259 else {
2260 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002261 Py_XDECREF(*p_newtrace);
2262 if (res == Py_None)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002263 *p_newtrace = NULL;
2264 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002265 Py_INCREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002266 *p_newtrace = res;
2267 }
2268 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002269 Py_DECREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002270 return 0;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002271 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002272}
2273
Guido van Rossumb209a111997-04-29 18:18:01 +00002274PyObject *
2275PyEval_GetBuiltins()
Guido van Rossum6135a871995-01-09 17:53:26 +00002276{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002277 PyThreadState *tstate = PyThreadState_Get();
2278 PyFrameObject *current_frame = tstate->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002279 if (current_frame == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002280 return tstate->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00002281 else
2282 return current_frame->f_builtins;
2283}
2284
Guido van Rossumb209a111997-04-29 18:18:01 +00002285PyObject *
2286PyEval_GetLocals()
Guido van Rossum5b722181993-03-30 17:46:03 +00002287{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002288 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum5b722181993-03-30 17:46:03 +00002289 if (current_frame == NULL)
2290 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002291 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00002292 return current_frame->f_locals;
2293}
2294
Guido van Rossumb209a111997-04-29 18:18:01 +00002295PyObject *
2296PyEval_GetGlobals()
Guido van Rossum3f5da241990-12-20 15:06:42 +00002297{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002298 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002299 if (current_frame == NULL)
2300 return NULL;
2301 else
2302 return current_frame->f_globals;
2303}
2304
Guido van Rossumb209a111997-04-29 18:18:01 +00002305PyObject *
2306PyEval_GetFrame()
Guido van Rossume59214e1994-08-30 08:01:59 +00002307{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002308 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossumb209a111997-04-29 18:18:01 +00002309 return (PyObject *)current_frame;
Guido van Rossume59214e1994-08-30 08:01:59 +00002310}
2311
Guido van Rossum6135a871995-01-09 17:53:26 +00002312int
Guido van Rossumb209a111997-04-29 18:18:01 +00002313PyEval_GetRestricted()
Guido van Rossum6135a871995-01-09 17:53:26 +00002314{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002315 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002316 return current_frame == NULL ? 0 : current_frame->f_restricted;
2317}
2318
Guido van Rossumbe270261997-05-22 22:26:18 +00002319int
Guido van Rossumb209a111997-04-29 18:18:01 +00002320Py_FlushLine()
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002321{
Guido van Rossumb209a111997-04-29 18:18:01 +00002322 PyObject *f = PySys_GetObject("stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00002323 if (f == NULL)
2324 return 0;
2325 if (!PyFile_SoftSpace(f, 0))
2326 return 0;
2327 return PyFile_WriteString("\n", f);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002328}
2329
Guido van Rossum3f5da241990-12-20 15:06:42 +00002330
Guido van Rossum681d79a1995-07-18 14:51:37 +00002331/* External interface to call any callable object.
2332 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002333
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002334#undef PyEval_CallObject
2335/* for backward compatibility: export this interface */
2336
Guido van Rossumb209a111997-04-29 18:18:01 +00002337PyObject *
2338PyEval_CallObject(func, arg)
2339 PyObject *func;
2340 PyObject *arg;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002341{
Guido van Rossumb209a111997-04-29 18:18:01 +00002342 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002343}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002344#define PyEval_CallObject(func,arg) \
2345 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00002346
Guido van Rossumb209a111997-04-29 18:18:01 +00002347PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002348PyEval_CallObjectWithKeywords(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002349 PyObject *func;
2350 PyObject *arg;
2351 PyObject *kw;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002352{
2353 ternaryfunc call;
Guido van Rossumb209a111997-04-29 18:18:01 +00002354 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002355
2356 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002357 arg = PyTuple_New(0);
2358 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002359 PyErr_SetString(PyExc_TypeError,
2360 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002361 return NULL;
2362 }
2363 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002364 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002365
Guido van Rossumb209a111997-04-29 18:18:01 +00002366 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002367 PyErr_SetString(PyExc_TypeError,
2368 "keyword list must be a dictionary");
Guido van Rossume3e61c11995-08-04 04:14:47 +00002369 return NULL;
2370 }
2371
Guido van Rossum150b2df1996-12-05 23:17:11 +00002372 if ((call = func->ob_type->tp_call) != NULL)
Guido van Rossum681d79a1995-07-18 14:51:37 +00002373 result = (*call)(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002374 else if (PyMethod_Check(func) || PyFunction_Check(func))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002375 result = call_function(func, arg, kw);
2376 else
2377 result = call_builtin(func, arg, kw);
2378
Guido van Rossumb209a111997-04-29 18:18:01 +00002379 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002380
Guido van Rossumb209a111997-04-29 18:18:01 +00002381 if (result == NULL && !PyErr_Occurred())
2382 PyErr_SetString(PyExc_SystemError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002383 "NULL result without error in call_object");
Guido van Rossume59214e1994-08-30 08:01:59 +00002384
2385 return result;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002386}
2387
Guido van Rossumb209a111997-04-29 18:18:01 +00002388static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002389call_builtin(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002390 PyObject *func;
2391 PyObject *arg;
2392 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002393{
Guido van Rossumb209a111997-04-29 18:18:01 +00002394 if (PyCFunction_Check(func)) {
2395 PyCFunction meth = PyCFunction_GetFunction(func);
2396 PyObject *self = PyCFunction_GetSelf(func);
2397 int flags = PyCFunction_GetFlags(func);
Guido van Rossumff8b4941995-07-26 18:16:42 +00002398 if (!(flags & METH_VARARGS)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002399 int size = PyTuple_Size(arg);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002400 if (size == 1)
Guido van Rossumb209a111997-04-29 18:18:01 +00002401 arg = PyTuple_GET_ITEM(arg, 0);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002402 else if (size == 0)
2403 arg = NULL;
2404 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002405 if (flags & METH_KEYWORDS)
2406 return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002407 if (kw != NULL && PyDict_Size(kw) != 0) {
2408 PyErr_SetString(PyExc_TypeError,
Guido van Rossumff8b4941995-07-26 18:16:42 +00002409 "this function takes no keyword arguments");
2410 return NULL;
2411 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002412 return (*meth)(self, arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002413 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002414 if (PyClass_Check(func)) {
2415 return PyInstance_New(func, arg, kw);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002416 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002417 if (PyInstance_Check(func)) {
2418 PyObject *res, *call = PyObject_GetAttrString(func,"__call__");
Guido van Rossume59214e1994-08-30 08:01:59 +00002419 if (call == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002420 PyErr_Clear();
2421 PyErr_SetString(PyExc_AttributeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002422 "no __call__ method defined");
Guido van Rossume59214e1994-08-30 08:01:59 +00002423 return NULL;
2424 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002425 res = PyEval_CallObjectWithKeywords(call, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002426 Py_DECREF(call);
Guido van Rossume59214e1994-08-30 08:01:59 +00002427 return res;
2428 }
Guido van Rossumba98a421999-11-15 19:29:33 +00002429 PyErr_Format(PyExc_TypeError, "call of non-function (type %.400s)",
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002430 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002431 return NULL;
2432}
2433
Guido van Rossumb209a111997-04-29 18:18:01 +00002434static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002435call_function(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002436 PyObject *func;
2437 PyObject *arg;
2438 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002439{
Guido van Rossumb209a111997-04-29 18:18:01 +00002440 PyObject *class = NULL; /* == owner */
2441 PyObject *argdefs;
2442 PyObject **d, **k;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002443 int nk, nd;
Guido van Rossumb209a111997-04-29 18:18:01 +00002444 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002445
Guido van Rossumb209a111997-04-29 18:18:01 +00002446 if (kw != NULL && !PyDict_Check(kw)) {
2447 PyErr_BadInternalCall();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002448 return NULL;
2449 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002450
Guido van Rossumb209a111997-04-29 18:18:01 +00002451 if (PyMethod_Check(func)) {
2452 PyObject *self = PyMethod_Self(func);
2453 class = PyMethod_Class(func);
2454 func = PyMethod_Function(func);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002455 if (self == NULL) {
2456 /* Unbound methods must be called with an instance of
2457 the class (or a derived class) as first argument */
Guido van Rossumb209a111997-04-29 18:18:01 +00002458 if (PyTuple_Size(arg) >= 1) {
2459 self = PyTuple_GET_ITEM(arg, 0);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002460 if (self != NULL &&
Guido van Rossumb209a111997-04-29 18:18:01 +00002461 PyInstance_Check(self) &&
2462 PyClass_IsSubclass((PyObject *)
2463 (((PyInstanceObject *)self)->in_class),
Guido van Rossumb3f72581993-05-21 19:56:10 +00002464 class))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002465 /* Handy-dandy */ ;
Guido van Rossumb3f72581993-05-21 19:56:10 +00002466 else
2467 self = NULL;
2468 }
2469 if (self == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002470 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002471 "unbound method must be called with class instance 1st argument");
Guido van Rossumb3f72581993-05-21 19:56:10 +00002472 return NULL;
2473 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002474 Py_INCREF(arg);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002475 }
2476 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002477 int argcount = PyTuple_Size(arg);
2478 PyObject *newarg = PyTuple_New(argcount + 1);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002479 int i;
Guido van Rossum81daa321993-05-20 14:24:46 +00002480 if (newarg == NULL)
2481 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002482 Py_INCREF(self);
2483 PyTuple_SET_ITEM(newarg, 0, self);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002484 for (i = 0; i < argcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002485 PyObject *v = PyTuple_GET_ITEM(arg, i);
2486 Py_XINCREF(v);
2487 PyTuple_SET_ITEM(newarg, i+1, v);
Guido van Rossum81daa321993-05-20 14:24:46 +00002488 }
2489 arg = newarg;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002490 }
Guido van Rossum7859f871998-07-08 14:58:16 +00002491 if (!PyFunction_Check(func)) {
2492 result = PyEval_CallObjectWithKeywords(func, arg, kw);
2493 Py_DECREF(arg);
2494 return result;
2495 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002496 }
2497 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002498 if (!PyFunction_Check(func)) {
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002499 PyErr_Format(PyExc_TypeError,
2500 "call of non-function (type %s)",
2501 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002502 return NULL;
2503 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002504 Py_INCREF(arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002505 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002506
2507 argdefs = PyFunction_GetDefaults(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00002508 if (argdefs != NULL && PyTuple_Check(argdefs)) {
2509 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
2510 nd = PyTuple_Size(argdefs);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002511 }
2512 else {
2513 d = NULL;
2514 nd = 0;
2515 }
2516
2517 if (kw != NULL) {
2518 int pos, i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002519 nk = PyDict_Size(kw);
2520 k = PyMem_NEW(PyObject *, 2*nk);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002521 if (k == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002522 PyErr_NoMemory();
2523 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002524 return NULL;
Guido van Rossume59214e1994-08-30 08:01:59 +00002525 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002526 pos = i = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002527 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002528 i += 2;
2529 nk = i/2;
2530 /* XXX This is broken if the caller deletes dict items! */
2531 }
2532 else {
2533 k = NULL;
2534 nk = 0;
Guido van Rossume59214e1994-08-30 08:01:59 +00002535 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002536
Guido van Rossum681d79a1995-07-18 14:51:37 +00002537 result = eval_code2(
Guido van Rossumb209a111997-04-29 18:18:01 +00002538 (PyCodeObject *)PyFunction_GetCode(func),
2539 PyFunction_GetGlobals(func), (PyObject *)NULL,
2540 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
Guido van Rossum681d79a1995-07-18 14:51:37 +00002541 k, nk,
2542 d, nd,
2543 class);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002544
Guido van Rossumb209a111997-04-29 18:18:01 +00002545 Py_DECREF(arg);
2546 PyMem_XDEL(k);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002547
Guido van Rossum681d79a1995-07-18 14:51:37 +00002548 return result;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002549}
2550
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002551#define SLICE_ERROR_MSG \
2552 "standard sequence type does not support step size other than one"
2553
Guido van Rossumb209a111997-04-29 18:18:01 +00002554static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002555loop_subscript(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002556 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002557{
Guido van Rossumb209a111997-04-29 18:18:01 +00002558 PySequenceMethods *sq = v->ob_type->tp_as_sequence;
Guido van Rossume59214e1994-08-30 08:01:59 +00002559 int i;
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002560 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002561 PyErr_SetString(PyExc_TypeError, "loop over non-sequence");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002562 return NULL;
2563 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002564 i = PyInt_AsLong(w);
Guido van Rossume59214e1994-08-30 08:01:59 +00002565 v = (*sq->sq_item)(v, i);
2566 if (v)
2567 return v;
Barry Warsaw4249f541997-08-22 21:26:19 +00002568 if (PyErr_ExceptionMatches(PyExc_IndexError))
Guido van Rossumb209a111997-04-29 18:18:01 +00002569 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002570 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002571}
2572
2573static int
Guido van Rossuma027efa1997-05-05 20:56:21 +00002574slice_index(v, pi)
Guido van Rossumb209a111997-04-29 18:18:01 +00002575 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002576 int *pi;
2577{
2578 if (v != NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002579 long x;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002580 if (PyInt_Check(v)) {
2581 x = PyInt_AsLong(v);
2582 } else if (PyLong_Check(v)) {
2583 x = PyLong_AsLong(v);
2584 if (x==-1 && PyErr_Occurred()) {
2585 PyObject *long_zero;
2586
2587 if (!PyErr_ExceptionMatches( PyExc_OverflowError ) ) {
2588 /* It's not an overflow error, so just
2589 signal an error */
2590 return -1;
2591 }
2592
2593 /* It's an overflow error, so we need to
2594 check the sign of the long integer,
2595 set the value to INT_MAX or 0, and clear
2596 the error. */
2597
2598 /* Create a long integer with a value of 0 */
2599 long_zero = PyLong_FromLong( 0L );
2600 if (long_zero == NULL) return -1;
2601
2602 /* Check sign */
2603 if (PyObject_Compare(long_zero, v) < 0)
2604 x = INT_MAX;
2605 else
2606 x = 0;
2607
2608 /* Free the long integer we created, and clear the
2609 OverflowError */
2610 Py_DECREF(long_zero);
2611 PyErr_Clear();
2612 }
2613 } else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002614 PyErr_SetString(PyExc_TypeError,
2615 "slice index must be int");
Guido van Rossum3f5da241990-12-20 15:06:42 +00002616 return -1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002617 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00002618 /* Truncate -- very long indices are truncated anyway */
2619 if (x > INT_MAX)
2620 x = INT_MAX;
2621 else if (x < -INT_MAX)
2622 x = 0;
2623 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002624 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002625 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002626}
2627
Guido van Rossumb209a111997-04-29 18:18:01 +00002628static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002629apply_slice(u, v, w) /* return u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +00002630 PyObject *u, *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002631{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002632 int ilow = 0, ihigh = INT_MAX;
2633 if (slice_index(v, &ilow) != 0)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002634 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002635 if (slice_index(w, &ihigh) != 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +00002636 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002637 return PySequence_GetSlice(u, ilow, ihigh);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002638}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002639
2640static int
Guido van Rossum3f5da241990-12-20 15:06:42 +00002641assign_slice(u, v, w, x) /* u[v:w] = x */
Guido van Rossumb209a111997-04-29 18:18:01 +00002642 PyObject *u, *v, *w, *x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002643{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002644 int ilow = 0, ihigh = INT_MAX;
2645 if (slice_index(v, &ilow) != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002646 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002647 if (slice_index(w, &ihigh) != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002648 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002649 if (x == NULL)
2650 return PySequence_DelSlice(u, ilow, ihigh);
2651 else
2652 return PySequence_SetSlice(u, ilow, ihigh, x);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002653}
2654
Guido van Rossumb209a111997-04-29 18:18:01 +00002655static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002656cmp_outcome(op, v, w)
Guido van Rossum5b7313a1992-04-06 13:24:57 +00002657 int op;
Guido van Rossumb209a111997-04-29 18:18:01 +00002658 register PyObject *v;
2659 register PyObject *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002660{
2661 register int cmp;
2662 register int res = 0;
2663 switch (op) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00002664 case IS:
2665 case IS_NOT:
2666 res = (v == w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002667 if (op == (int) IS_NOT)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002668 res = !res;
2669 break;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002670 case IN:
2671 case NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002672 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002673 if (res < 0)
2674 return NULL;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002675 if (op == (int) NOT_IN)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002676 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002677 break;
2678 case EXC_MATCH:
Barry Warsaw4249f541997-08-22 21:26:19 +00002679 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002680 break;
2681 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00002682 cmp = PyObject_Compare(v, w);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00002683 if (cmp && PyErr_Occurred())
2684 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002685 switch (op) {
2686 case LT: res = cmp < 0; break;
2687 case LE: res = cmp <= 0; break;
2688 case EQ: res = cmp == 0; break;
2689 case NE: res = cmp != 0; break;
2690 case GT: res = cmp > 0; break;
2691 case GE: res = cmp >= 0; break;
2692 /* XXX no default? (res is initialized to 0 though) */
2693 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002694 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002695 v = res ? Py_True : Py_False;
2696 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002697 return v;
2698}
2699
Guido van Rossum3f5da241990-12-20 15:06:42 +00002700static int
2701import_from(locals, v, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002702 PyObject *locals;
2703 PyObject *v;
2704 PyObject *name;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002705{
Guido van Rossumb209a111997-04-29 18:18:01 +00002706 PyObject *w, *x;
2707 if (!PyModule_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002708 PyErr_SetString(PyExc_TypeError,
2709 "import-from requires module object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002710 return -1;
2711 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002712 w = PyModule_GetDict(v);
2713 if (PyString_AsString(name)[0] == '*') {
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002714 int pos, err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002715 PyObject *name, *value;
Guido van Rossum25831651993-05-19 14:50:45 +00002716 pos = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002717 while (PyDict_Next(w, &pos, &name, &value)) {
2718 if (!PyString_Check(name) ||
2719 PyString_AsString(name)[0] == '_')
Guido van Rossume9736fc1990-11-18 17:33:06 +00002720 continue;
Guido van Rossumb209a111997-04-29 18:18:01 +00002721 Py_INCREF(value);
2722 err = PyDict_SetItem(locals, name, value);
2723 Py_DECREF(value);
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002724 if (err != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002725 return -1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002726 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002727 return 0;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002728 }
2729 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002730 x = PyDict_GetItem(w, name);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002731 if (x == NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +00002732 PyErr_Format(PyExc_ImportError,
2733 "cannot import name %.230s",
2734 PyString_AsString(name));
Guido van Rossum3f5da241990-12-20 15:06:42 +00002735 return -1;
2736 }
2737 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002738 return PyDict_SetItem(locals, name, x);
Guido van Rossume9736fc1990-11-18 17:33:06 +00002739 }
2740}
2741
Guido van Rossumb209a111997-04-29 18:18:01 +00002742static PyObject *
Guido van Rossum25831651993-05-19 14:50:45 +00002743build_class(methods, bases, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002744 PyObject *methods; /* dictionary */
2745 PyObject *bases; /* tuple containing classes */
2746 PyObject *name; /* string */
Guido van Rossume9736fc1990-11-18 17:33:06 +00002747{
Guido van Rossumcd649651997-08-22 16:56:16 +00002748 int i, n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002749 if (!PyTuple_Check(bases)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002750 PyErr_SetString(PyExc_SystemError,
2751 "build_class with non-tuple bases");
Guido van Rossum25831651993-05-19 14:50:45 +00002752 return NULL;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002753 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002754 if (!PyDict_Check(methods)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002755 PyErr_SetString(PyExc_SystemError,
2756 "build_class with non-dictionary");
Guido van Rossume9736fc1990-11-18 17:33:06 +00002757 return NULL;
2758 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002759 if (!PyString_Check(name)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002760 PyErr_SetString(PyExc_SystemError,
2761 "build_class witn non-string name");
Guido van Rossum25831651993-05-19 14:50:45 +00002762 return NULL;
2763 }
Guido van Rossumcd649651997-08-22 16:56:16 +00002764 n = PyTuple_Size(bases);
2765 for (i = 0; i < n; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002766 PyObject *base = PyTuple_GET_ITEM(bases, i);
2767 if (!PyClass_Check(base)) {
Guido van Rossum150b2df1996-12-05 23:17:11 +00002768 /* Call the base's *type*, if it is callable.
2769 This code is a hook for Donald Beaudry's
2770 and Jim Fulton's type extensions. In
2771 unexended Python it will never be triggered
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002772 since its types are not callable.
2773 Ditto: call the bases's *class*, if it has
2774 one. This makes the same thing possible
2775 without writing C code. A true meta-object
2776 protocol! */
2777 PyObject *basetype = (PyObject *)base->ob_type;
2778 PyObject *callable = NULL;
2779 if (PyCallable_Check(basetype))
2780 callable = basetype;
2781 else
2782 callable = PyObject_GetAttrString(
2783 base, "__class__");
2784 if (callable) {
2785 PyObject *args;
2786 PyObject *newclass = NULL;
2787 args = Py_BuildValue(
2788 "(OOO)", name, bases, methods);
2789 if (args != NULL) {
2790 newclass = PyEval_CallObject(
2791 callable, args);
2792 Py_DECREF(args);
2793 }
Guido van Rossum730806d1998-04-10 22:27:42 +00002794 if (callable != basetype) {
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002795 Py_DECREF(callable);
Guido van Rossum730806d1998-04-10 22:27:42 +00002796 }
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002797 return newclass;
Guido van Rossum150b2df1996-12-05 23:17:11 +00002798 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002799 PyErr_SetString(PyExc_TypeError,
Guido van Rossum25831651993-05-19 14:50:45 +00002800 "base is not a class object");
2801 return NULL;
2802 }
2803 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002804 return PyClass_New(bases, methods, name);
Guido van Rossum25831651993-05-19 14:50:45 +00002805}
2806
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002807static int
Guido van Rossuma027efa1997-05-05 20:56:21 +00002808exec_statement(f, prog, globals, locals)
2809 PyFrameObject *f;
Guido van Rossumb209a111997-04-29 18:18:01 +00002810 PyObject *prog;
2811 PyObject *globals;
2812 PyObject *locals;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002813{
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002814 int n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002815 PyObject *v;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002816 int plain = 0;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002817
Guido van Rossumb209a111997-04-29 18:18:01 +00002818 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
2819 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002820 /* Backward compatibility hack */
Guido van Rossumb209a111997-04-29 18:18:01 +00002821 globals = PyTuple_GetItem(prog, 1);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002822 if (n == 3)
Guido van Rossumb209a111997-04-29 18:18:01 +00002823 locals = PyTuple_GetItem(prog, 2);
2824 prog = PyTuple_GetItem(prog, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002825 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002826 if (globals == Py_None) {
2827 globals = PyEval_GetGlobals();
2828 if (locals == Py_None) {
2829 locals = PyEval_GetLocals();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002830 plain = 1;
2831 }
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002832 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002833 else if (locals == Py_None)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002834 locals = globals;
Guido van Rossumb209a111997-04-29 18:18:01 +00002835 if (!PyString_Check(prog) &&
2836 !PyCode_Check(prog) &&
2837 !PyFile_Check(prog)) {
2838 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002839 "exec 1st arg must be string, code or file object");
2840 return -1;
2841 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002842 if (!PyDict_Check(globals) || !PyDict_Check(locals)) {
2843 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002844 "exec 2nd/3rd args must be dict or None");
2845 return -1;
2846 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002847 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002848 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
Guido van Rossumb209a111997-04-29 18:18:01 +00002849 if (PyCode_Check(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002850 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002851 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002852 else if (PyFile_Check(prog)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002853 FILE *fp = PyFile_AsFile(prog);
2854 char *name = PyString_AsString(PyFile_Name(prog));
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002855 v = PyRun_File(fp, name, Py_file_input, globals, locals);
2856 }
2857 else {
2858 char *s = PyString_AsString(prog);
2859 if ((int)strlen(s) != PyString_Size(prog)) {
2860 PyErr_SetString(PyExc_ValueError,
2861 "embedded '\\0' in exec string");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002862 return -1;
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002863 }
2864 v = PyRun_String(s, Py_file_input, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002865 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002866 if (plain)
2867 PyFrame_LocalsToFast(f, 0);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002868 if (v == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002869 return -1;
Guido van Rossumb209a111997-04-29 18:18:01 +00002870 Py_DECREF(v);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002871 return 0;
2872}
Guido van Rossum24c13741995-02-14 09:42:43 +00002873
Guido van Rossum1aa14831997-01-21 05:34:20 +00002874/* Hack for ni.py */
Guido van Rossumb209a111997-04-29 18:18:01 +00002875static PyObject *
Guido van Rossum24c13741995-02-14 09:42:43 +00002876find_from_args(f, nexti)
Guido van Rossumb209a111997-04-29 18:18:01 +00002877 PyFrameObject *f;
Guido van Rossum24c13741995-02-14 09:42:43 +00002878 int nexti;
2879{
2880 int opcode;
2881 int oparg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002882 PyObject *list, *name;
Guido van Rossum24c13741995-02-14 09:42:43 +00002883 unsigned char *next_instr;
2884
Guido van Rossumd076c731998-10-07 19:42:25 +00002885 _PyCode_GETCODEPTR(f->f_code, &next_instr);
2886 next_instr += nexti;
2887
Guido van Rossum24c13741995-02-14 09:42:43 +00002888 opcode = (*next_instr++);
2889 if (opcode != IMPORT_FROM) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002890 Py_INCREF(Py_None);
2891 return Py_None;
Guido van Rossum24c13741995-02-14 09:42:43 +00002892 }
2893
Guido van Rossumb209a111997-04-29 18:18:01 +00002894 list = PyList_New(0);
Guido van Rossum24c13741995-02-14 09:42:43 +00002895 if (list == NULL)
2896 return NULL;
2897
2898 do {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002899 oparg = (next_instr[1]<<8) + next_instr[0];
2900 next_instr += 2;
Guido van Rossum24c13741995-02-14 09:42:43 +00002901 name = Getnamev(f, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002902 if (PyList_Append(list, name) < 0) {
2903 Py_DECREF(list);
Guido van Rossum24c13741995-02-14 09:42:43 +00002904 break;
2905 }
2906 opcode = (*next_instr++);
2907 } while (opcode == IMPORT_FROM);
2908
2909 return list;
2910}
Guido van Rossum950361c1997-01-24 13:49:28 +00002911
2912
2913#ifdef DYNAMIC_EXECUTION_PROFILE
2914
2915PyObject *
2916getarray(a)
2917 long a[256];
2918{
2919 int i;
2920 PyObject *l = PyList_New(256);
2921 if (l == NULL) return NULL;
2922 for (i = 0; i < 256; i++) {
2923 PyObject *x = PyInt_FromLong(a[i]);
2924 if (x == NULL) {
2925 Py_DECREF(l);
2926 return NULL;
2927 }
2928 PyList_SetItem(l, i, x);
2929 }
2930 for (i = 0; i < 256; i++)
2931 a[i] = 0;
2932 return l;
2933}
2934
2935PyObject *
2936_Py_GetDXProfile(self, args)
2937 PyObject *self, *args;
2938{
2939#ifndef DXPAIRS
2940 return getarray(dxp);
2941#else
2942 int i;
2943 PyObject *l = PyList_New(257);
2944 if (l == NULL) return NULL;
2945 for (i = 0; i < 257; i++) {
2946 PyObject *x = getarray(dxpairs[i]);
2947 if (x == NULL) {
2948 Py_DECREF(l);
2949 return NULL;
2950 }
2951 PyList_SetItem(l, i, x);
2952 }
2953 return l;
2954#endif
2955}
2956
2957#endif