blob: d7171c8de3aaffaa957a6636883f46c881eacae2 [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);
Barry Warsaw4961ef72000-03-29 18:30:03 +00001639 if (nstar < 0) {
Barry Warsawb2ba9d82000-03-29 18:36:49 +00001640 x = NULL;
1641 break;
Barry Warsaw4961ef72000-03-29 18:30:03 +00001642 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001643 }
1644 if (nk > 0) {
1645 if (kwdict == NULL) {
1646 kwdict = PyDict_New();
1647 if (kwdict == NULL) {
1648 x = NULL;
1649 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001650 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001651 }
1652 err = 0;
1653 while (--nk >= 0) {
1654 PyObject *value = POP();
1655 PyObject *key = POP();
1656 if (PyDict_GetItem(kwdict, key) != NULL) {
1657 err = 1;
1658 PyErr_Format(PyExc_TypeError,
1659 "keyword parameter redefined: %.400s",
1660 PyString_AsString(key));
1661 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001662 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001663 err = PyDict_SetItem(kwdict, key, value);
1664 Py_DECREF(key);
1665 Py_DECREF(value);
1666 if (err)
1667 break;
1668 }
1669 if (err) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001670 Py_DECREF(args);
Jeremy Hylton76901512000-03-28 23:49:17 +00001671 Py_DECREF(kwdict);
1672 break;
1673 }
Guido van Rossumf10570b1995-07-07 22:53:21 +00001674 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001675 args = PyTuple_New(na + nstar);
1676 if (args == NULL) {
1677 x = NULL;
1678 break;
Guido van Rossum681d79a1995-07-18 14:51:37 +00001679 }
Jeremy Hylton76901512000-03-28 23:49:17 +00001680 if (stararg) {
1681 PyObject *t = NULL;
1682 int i;
1683 if (!PyTuple_Check(stararg)) {
1684 /* must be sequence to pass earlier test */
1685 t = PySequence_Tuple(stararg);
1686 if (t == NULL) {
1687 x = NULL;
1688 break;
1689 }
1690 Py_DECREF(stararg);
1691 stararg = t;
1692 }
1693 for (i = 0; i < nstar; i++) {
1694 PyObject *a = PyTuple_GET_ITEM(stararg, i);
1695 Py_INCREF(a);
1696 PyTuple_SET_ITEM(args, na + i, a);
1697 }
1698 Py_DECREF(stararg);
1699 }
1700 while (--na >= 0) {
1701 w = POP();
1702 PyTuple_SET_ITEM(args, na, w);
1703 }
1704 x = PyEval_CallObjectWithKeywords(func, args, kwdict);
1705 Py_DECREF(args);
1706 Py_XDECREF(kwdict);
1707 }
1708 Py_DECREF(func);
1709 while (stack_pointer > pfunc) {
1710 w = POP();
1711 Py_DECREF(w);
1712 }
1713 PUSH(x);
1714 if (x != NULL) continue;
1715 break;
Guido van Rossumf10570b1995-07-07 22:53:21 +00001716 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001717
Guido van Rossum681d79a1995-07-18 14:51:37 +00001718 case MAKE_FUNCTION:
1719 v = POP(); /* code object */
Guido van Rossumb209a111997-04-29 18:18:01 +00001720 x = PyFunction_New(v, f->f_globals);
1721 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001722 /* XXX Maybe this should be a separate opcode? */
1723 if (x != NULL && oparg > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001724 v = PyTuple_New(oparg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001725 if (v == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001726 Py_DECREF(x);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001727 x = NULL;
1728 break;
1729 }
1730 while (--oparg >= 0) {
1731 w = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001732 PyTuple_SET_ITEM(v, oparg, w);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001733 }
1734 err = PyFunction_SetDefaults(x, v);
Guido van Rossumb209a111997-04-29 18:18:01 +00001735 Py_DECREF(v);
Guido van Rossum681d79a1995-07-18 14:51:37 +00001736 }
1737 PUSH(x);
1738 break;
Guido van Rossum8861b741996-07-30 16:49:37 +00001739
1740 case BUILD_SLICE:
1741 if (oparg == 3)
1742 w = POP();
1743 else
1744 w = NULL;
1745 v = POP();
1746 u = POP();
Guido van Rossum1aa14831997-01-21 05:34:20 +00001747 x = PySlice_New(u, v, w);
Guido van Rossumb209a111997-04-29 18:18:01 +00001748 Py_DECREF(u);
1749 Py_DECREF(v);
1750 Py_XDECREF(w);
Guido van Rossum8861b741996-07-30 16:49:37 +00001751 PUSH(x);
Guido van Rossum3dfd53b1997-01-18 02:46:13 +00001752 if (x != NULL) continue;
Guido van Rossum8861b741996-07-30 16:49:37 +00001753 break;
1754
1755
Guido van Rossum374a9221991-04-04 10:40:29 +00001756 default:
1757 fprintf(stderr,
1758 "XXX lineno: %d, opcode: %d\n",
Guido van Rossum96a42c81992-01-12 02:29:51 +00001759 f->f_lineno, opcode);
Guido van Rossumb209a111997-04-29 18:18:01 +00001760 PyErr_SetString(PyExc_SystemError, "unknown opcode");
Guido van Rossum374a9221991-04-04 10:40:29 +00001761 why = WHY_EXCEPTION;
1762 break;
Guido van Rossum04691fc1992-08-12 15:35:34 +00001763
1764#ifdef CASE_TOO_BIG
1765 }
1766#endif
1767
Guido van Rossum374a9221991-04-04 10:40:29 +00001768 } /* switch */
1769
1770 on_error:
1771
1772 /* Quickly continue if no error occurred */
1773
1774 if (why == WHY_NOT) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001775 if (err == 0 && x != NULL) {
1776#ifdef CHECKEXC
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001777 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001778 if (PyErr_Occurred())
Guido van Rossum681d79a1995-07-18 14:51:37 +00001779 fprintf(stderr,
1780 "XXX undetected error\n");
1781 else
1782#endif
1783 continue; /* Normal, fast path */
1784 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001785 why = WHY_EXCEPTION;
Guido van Rossumb209a111997-04-29 18:18:01 +00001786 x = Py_None;
Guido van Rossum374a9221991-04-04 10:40:29 +00001787 err = 0;
1788 }
1789
Guido van Rossum374a9221991-04-04 10:40:29 +00001790 /* Double-check exception status */
1791
1792 if (why == WHY_EXCEPTION || why == WHY_RERAISE) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001793 if (!PyErr_Occurred()) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00001794 PyErr_SetString(PyExc_SystemError,
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001795 "error return without exception set");
Guido van Rossum374a9221991-04-04 10:40:29 +00001796 why = WHY_EXCEPTION;
1797 }
1798 }
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001799#ifdef CHECKEXC
Guido van Rossum374a9221991-04-04 10:40:29 +00001800 else {
Guido van Rossumeb894eb1999-03-09 16:16:45 +00001801 /* This check is expensive! */
Guido van Rossumb209a111997-04-29 18:18:01 +00001802 if (PyErr_Occurred()) {
Guido van Rossum681d79a1995-07-18 14:51:37 +00001803 fprintf(stderr,
1804 "XXX undetected error (why=%d)\n",
1805 why);
1806 why = WHY_EXCEPTION;
1807 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001808 }
1809#endif
1810
1811 /* Log traceback info if this is a real exception */
1812
1813 if (why == WHY_EXCEPTION) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001814 f->f_lasti = INSTR_OFFSET() - 1;
Guido van Rossum374a9221991-04-04 10:40:29 +00001815 if (HAS_ARG(opcode))
Guido van Rossum96a42c81992-01-12 02:29:51 +00001816 f->f_lasti -= 2;
Guido van Rossumb209a111997-04-29 18:18:01 +00001817 PyTraceBack_Here(f);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001818
Guido van Rossume59214e1994-08-30 08:01:59 +00001819 if (f->f_trace)
1820 call_exc_trace(&f->f_trace, &f->f_trace, f);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001821 if (tstate->sys_profilefunc)
1822 call_exc_trace(&tstate->sys_profilefunc,
1823 (PyObject**)0, f);
Guido van Rossum014518f1998-11-23 21:09:51 +00001824 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001825
1826 /* For the rest, treat WHY_RERAISE as WHY_EXCEPTION */
1827
1828 if (why == WHY_RERAISE)
1829 why = WHY_EXCEPTION;
1830
1831 /* Unwind stacks if a (pseudo) exception occurred */
1832
1833 while (why != WHY_NOT && f->f_iblock > 0) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001834 PyTryBlock *b = PyFrame_BlockPop(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001835 while (STACK_LEVEL() > b->b_level) {
1836 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001837 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001838 }
1839 if (b->b_type == SETUP_LOOP && why == WHY_BREAK) {
1840 why = WHY_NOT;
1841 JUMPTO(b->b_handler);
1842 break;
1843 }
1844 if (b->b_type == SETUP_FINALLY ||
Guido van Rossum150b2df1996-12-05 23:17:11 +00001845 (b->b_type == SETUP_EXCEPT &&
1846 why == WHY_EXCEPTION)) {
Guido van Rossum374a9221991-04-04 10:40:29 +00001847 if (why == WHY_EXCEPTION) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001848 PyObject *exc, *val, *tb;
1849 PyErr_Fetch(&exc, &val, &tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001850 if (val == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001851 val = Py_None;
1852 Py_INCREF(val);
Guido van Rossum374a9221991-04-04 10:40:29 +00001853 }
Guido van Rossum374a9221991-04-04 10:40:29 +00001854 /* Make the raw exception data
1855 available to the handler,
1856 so a program can emulate the
1857 Python main loop. Don't do
1858 this for 'finally'. */
1859 if (b->b_type == SETUP_EXCEPT) {
Barry Warsaweaedc7c1997-08-28 22:36:40 +00001860 PyErr_NormalizeException(
1861 &exc, &val, &tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001862 set_exc_info(tstate,
1863 exc, val, tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001864 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00001865 PUSH(tb);
Guido van Rossum374a9221991-04-04 10:40:29 +00001866 PUSH(val);
1867 PUSH(exc);
1868 }
1869 else {
1870 if (why == WHY_RETURN)
1871 PUSH(retval);
Guido van Rossumb209a111997-04-29 18:18:01 +00001872 v = PyInt_FromLong((long)why);
Guido van Rossum374a9221991-04-04 10:40:29 +00001873 PUSH(v);
1874 }
1875 why = WHY_NOT;
1876 JUMPTO(b->b_handler);
1877 break;
1878 }
1879 } /* unwind stack */
1880
1881 /* End the loop if we still have an error (or return) */
1882
1883 if (why != WHY_NOT)
1884 break;
1885
1886 } /* main loop */
1887
1888 /* Pop remaining stack entries */
1889
1890 while (!EMPTY()) {
1891 v = POP();
Guido van Rossumb209a111997-04-29 18:18:01 +00001892 Py_XDECREF(v);
Guido van Rossum374a9221991-04-04 10:40:29 +00001893 }
1894
Guido van Rossum96a42c81992-01-12 02:29:51 +00001895 if (why != WHY_RETURN)
1896 retval = NULL;
1897
Guido van Rossume59214e1994-08-30 08:01:59 +00001898 if (f->f_trace) {
Guido van Rossum96a42c81992-01-12 02:29:51 +00001899 if (why == WHY_RETURN) {
Guido van Rossume59214e1994-08-30 08:01:59 +00001900 if (call_trace(&f->f_trace, &f->f_trace, f,
1901 "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001902 Py_XDECREF(retval);
Guido van Rossum96a42c81992-01-12 02:29:51 +00001903 retval = NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001904 why = WHY_EXCEPTION;
Guido van Rossum96a42c81992-01-12 02:29:51 +00001905 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001906 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001907 }
1908
Guido van Rossuma027efa1997-05-05 20:56:21 +00001909 if (tstate->sys_profilefunc && why == WHY_RETURN) {
1910 if (call_trace(&tstate->sys_profilefunc, (PyObject**)0,
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001911 f, "return", retval)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00001912 Py_XDECREF(retval);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00001913 retval = NULL;
1914 why = WHY_EXCEPTION;
1915 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00001916 }
Guido van Rossuma4240131997-01-21 21:18:36 +00001917
Guido van Rossuma027efa1997-05-05 20:56:21 +00001918 reset_exc_info(tstate);
1919
1920 --tstate->recursion_depth;
Guido van Rossum8c5df061997-01-24 04:19:24 +00001921
1922 fail: /* Jump here from prelude on failure */
Guido van Rossum96a42c81992-01-12 02:29:51 +00001923
Guido van Rossum374a9221991-04-04 10:40:29 +00001924 /* Restore previous frame and release the current one */
Guido van Rossum681d79a1995-07-18 14:51:37 +00001925
Guido van Rossuma027efa1997-05-05 20:56:21 +00001926 tstate->frame = f->f_back;
Guido van Rossumb209a111997-04-29 18:18:01 +00001927 Py_DECREF(f);
Guido van Rossum374a9221991-04-04 10:40:29 +00001928
Guido van Rossum96a42c81992-01-12 02:29:51 +00001929 return retval;
Guido van Rossum374a9221991-04-04 10:40:29 +00001930}
1931
Guido van Rossuma027efa1997-05-05 20:56:21 +00001932static void
1933set_exc_info(tstate, type, value, tb)
1934 PyThreadState *tstate;
1935 PyObject *type;
1936 PyObject *value;
1937 PyObject *tb;
1938{
1939 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001940 PyObject *tmp_type, *tmp_value, *tmp_tb;
Barry Warsaw4249f541997-08-22 21:26:19 +00001941
Guido van Rossuma027efa1997-05-05 20:56:21 +00001942 frame = tstate->frame;
1943 if (frame->f_exc_type == NULL) {
1944 /* This frame didn't catch an exception before */
1945 /* Save previous exception of this thread in this frame */
Guido van Rossuma027efa1997-05-05 20:56:21 +00001946 if (tstate->exc_type == NULL) {
1947 Py_INCREF(Py_None);
1948 tstate->exc_type = Py_None;
1949 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001950 tmp_type = frame->f_exc_type;
1951 tmp_value = frame->f_exc_value;
1952 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001953 Py_XINCREF(tstate->exc_type);
1954 Py_XINCREF(tstate->exc_value);
1955 Py_XINCREF(tstate->exc_traceback);
1956 frame->f_exc_type = tstate->exc_type;
1957 frame->f_exc_value = tstate->exc_value;
1958 frame->f_exc_traceback = tstate->exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001959 Py_XDECREF(tmp_type);
1960 Py_XDECREF(tmp_value);
1961 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001962 }
1963 /* Set new exception for this thread */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001964 tmp_type = tstate->exc_type;
1965 tmp_value = tstate->exc_value;
1966 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001967 Py_XINCREF(type);
1968 Py_XINCREF(value);
1969 Py_XINCREF(tb);
1970 tstate->exc_type = type;
1971 tstate->exc_value = value;
1972 tstate->exc_traceback = tb;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001973 Py_XDECREF(tmp_type);
1974 Py_XDECREF(tmp_value);
1975 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00001976 /* For b/w compatibility */
1977 PySys_SetObject("exc_type", type);
1978 PySys_SetObject("exc_value", value);
1979 PySys_SetObject("exc_traceback", tb);
1980}
1981
1982static void
1983reset_exc_info(tstate)
1984 PyThreadState *tstate;
1985{
1986 PyFrameObject *frame;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001987 PyObject *tmp_type, *tmp_value, *tmp_tb;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001988 frame = tstate->frame;
1989 if (frame->f_exc_type != NULL) {
1990 /* This frame caught an exception */
Guido van Rossumdf4c3081997-05-20 17:06:11 +00001991 tmp_type = tstate->exc_type;
1992 tmp_value = tstate->exc_value;
1993 tmp_tb = tstate->exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00001994 Py_XINCREF(frame->f_exc_type);
1995 Py_XINCREF(frame->f_exc_value);
1996 Py_XINCREF(frame->f_exc_traceback);
1997 tstate->exc_type = frame->f_exc_type;
1998 tstate->exc_value = frame->f_exc_value;
1999 tstate->exc_traceback = frame->f_exc_traceback;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002000 Py_XDECREF(tmp_type);
2001 Py_XDECREF(tmp_value);
2002 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002003 /* For b/w compatibility */
2004 PySys_SetObject("exc_type", frame->f_exc_type);
2005 PySys_SetObject("exc_value", frame->f_exc_value);
2006 PySys_SetObject("exc_traceback", frame->f_exc_traceback);
2007 }
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002008 tmp_type = frame->f_exc_type;
2009 tmp_value = frame->f_exc_value;
2010 tmp_tb = frame->f_exc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002011 frame->f_exc_type = NULL;
2012 frame->f_exc_value = NULL;
2013 frame->f_exc_traceback = NULL;
Guido van Rossumdf4c3081997-05-20 17:06:11 +00002014 Py_XDECREF(tmp_type);
2015 Py_XDECREF(tmp_value);
2016 Py_XDECREF(tmp_tb);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002017}
2018
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002019/* Logic for the raise statement (too complicated for inlining).
2020 This *consumes* a reference count to each of its arguments. */
Guido van Rossum1aa14831997-01-21 05:34:20 +00002021static enum why_code
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002022do_raise(type, value, tb)
Guido van Rossumb209a111997-04-29 18:18:01 +00002023 PyObject *type, *value, *tb;
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002024{
Guido van Rossumd295f121998-04-09 21:39:57 +00002025 if (type == NULL) {
2026 /* Reraise */
2027 PyThreadState *tstate = PyThreadState_Get();
2028 type = tstate->exc_type == NULL ? Py_None : tstate->exc_type;
2029 value = tstate->exc_value;
2030 tb = tstate->exc_traceback;
2031 Py_XINCREF(type);
2032 Py_XINCREF(value);
2033 Py_XINCREF(tb);
2034 }
2035
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002036 /* We support the following forms of raise:
2037 raise <class>, <classinstance>
2038 raise <class>, <argument tuple>
2039 raise <class>, None
2040 raise <class>, <argument>
2041 raise <classinstance>, None
2042 raise <string>, <object>
2043 raise <string>, None
2044
2045 An omitted second argument is the same as None.
2046
2047 In addition, raise <tuple>, <anything> is the same as
2048 raising the tuple's first item (and it better have one!);
2049 this rule is applied recursively.
2050
2051 Finally, an optional third argument can be supplied, which
2052 gives the traceback to be substituted (useful when
2053 re-raising an exception after examining it). */
2054
2055 /* First, check the traceback argument, replacing None with
2056 NULL. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002057 if (tb == Py_None) {
2058 Py_DECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002059 tb = NULL;
2060 }
2061 else if (tb != NULL && !PyTraceBack_Check(tb)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002062 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002063 "raise 3rd arg must be traceback or None");
2064 goto raise_error;
2065 }
2066
2067 /* Next, replace a missing value with None */
2068 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002069 value = Py_None;
2070 Py_INCREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002071 }
2072
2073 /* Next, repeatedly, replace a tuple exception with its first item */
Guido van Rossumb209a111997-04-29 18:18:01 +00002074 while (PyTuple_Check(type) && PyTuple_Size(type) > 0) {
2075 PyObject *tmp = type;
2076 type = PyTuple_GET_ITEM(type, 0);
2077 Py_INCREF(type);
2078 Py_DECREF(tmp);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002079 }
2080
Barry Warsaw4249f541997-08-22 21:26:19 +00002081 if (PyString_Check(type))
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002082 ;
Barry Warsaw4249f541997-08-22 21:26:19 +00002083
2084 else if (PyClass_Check(type))
2085 PyErr_NormalizeException(&type, &value, &tb);
2086
Guido van Rossumb209a111997-04-29 18:18:01 +00002087 else if (PyInstance_Check(type)) {
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002088 /* Raising an instance. The value should be a dummy. */
Guido van Rossumb209a111997-04-29 18:18:01 +00002089 if (value != Py_None) {
2090 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002091 "instance exception may not have a separate value");
2092 goto raise_error;
2093 }
2094 else {
2095 /* Normalize to raise <class>, <instance> */
Guido van Rossumb209a111997-04-29 18:18:01 +00002096 Py_DECREF(value);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002097 value = type;
Guido van Rossumb209a111997-04-29 18:18:01 +00002098 type = (PyObject*) ((PyInstanceObject*)type)->in_class;
2099 Py_INCREF(type);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002100 }
2101 }
2102 else {
2103 /* Not something you can raise. You get an exception
2104 anyway, just not what you specified :-) */
Guido van Rossumb209a111997-04-29 18:18:01 +00002105 PyErr_SetString(PyExc_TypeError,
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002106 "exceptions must be strings, classes, or instances");
2107 goto raise_error;
2108 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002109 PyErr_Restore(type, value, tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002110 if (tb == NULL)
2111 return WHY_EXCEPTION;
2112 else
2113 return WHY_RERAISE;
2114 raise_error:
Guido van Rossumb209a111997-04-29 18:18:01 +00002115 Py_XDECREF(value);
2116 Py_XDECREF(type);
2117 Py_XDECREF(tb);
Guido van Rossum0aa9ee61996-12-10 18:07:35 +00002118 return WHY_EXCEPTION;
2119}
2120
Barry Warsawe42b18f1997-08-25 22:13:04 +00002121static int
2122unpack_sequence(v, argcnt, sp)
2123 PyObject *v;
2124 int argcnt;
2125 PyObject **sp;
2126{
2127 int i;
2128 PyObject *w;
2129
2130 for (i = 0; i < argcnt; i++) {
2131 if (! (w = PySequence_GetItem(v, i))) {
2132 if (PyErr_ExceptionMatches(PyExc_IndexError))
2133 PyErr_SetString(PyExc_ValueError,
2134 "unpack sequence of wrong size");
2135 goto finally;
2136 }
2137 *--sp = w;
2138 }
2139 /* we better get an IndexError now */
2140 if (PySequence_GetItem(v, i) == NULL) {
2141 if (PyErr_ExceptionMatches(PyExc_IndexError)) {
2142 PyErr_Clear();
2143 return 1;
2144 }
2145 /* some other exception occurred. fall through to finally */
2146 }
2147 else
2148 PyErr_SetString(PyExc_ValueError,
2149 "unpack sequence of wrong size");
2150 /* fall through */
2151finally:
Barry Warsaw91010551997-08-25 22:30:51 +00002152 for (; i > 0; i--, sp++)
2153 Py_DECREF(*sp);
Barry Warsawe42b18f1997-08-25 22:13:04 +00002154
2155 return 0;
2156}
2157
2158
Guido van Rossum96a42c81992-01-12 02:29:51 +00002159#ifdef LLTRACE
Guido van Rossum3f5da241990-12-20 15:06:42 +00002160static int
2161prtrace(v, str)
Guido van Rossumb209a111997-04-29 18:18:01 +00002162 PyObject *v;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002163 char *str;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002164{
Guido van Rossum3f5da241990-12-20 15:06:42 +00002165 printf("%s ", str);
Guido van Rossumb209a111997-04-29 18:18:01 +00002166 if (PyObject_Print(v, stdout, 0) != 0)
2167 PyErr_Clear(); /* Don't know what else to do */
Guido van Rossum3f5da241990-12-20 15:06:42 +00002168 printf("\n");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002169}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002170#endif
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002171
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002172static void
2173call_exc_trace(p_trace, p_newtrace, f)
Guido van Rossumb209a111997-04-29 18:18:01 +00002174 PyObject **p_trace, **p_newtrace;
2175 PyFrameObject *f;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002176{
Guido van Rossumb209a111997-04-29 18:18:01 +00002177 PyObject *type, *value, *traceback, *arg;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002178 int err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002179 PyErr_Fetch(&type, &value, &traceback);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002180 if (value == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002181 value = Py_None;
2182 Py_INCREF(value);
Guido van Rossumbd9ccca1992-04-09 14:58:08 +00002183 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002184 arg = Py_BuildValue("(OOO)", type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002185 if (arg == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002186 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002187 return;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002188 }
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002189 err = call_trace(p_trace, p_newtrace, f, "exception", arg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002190 Py_DECREF(arg);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002191 if (err == 0)
Guido van Rossumb209a111997-04-29 18:18:01 +00002192 PyErr_Restore(type, value, traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002193 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002194 Py_XDECREF(type);
2195 Py_XDECREF(value);
2196 Py_XDECREF(traceback);
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002197 }
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002198}
2199
2200static int
2201call_trace(p_trace, p_newtrace, f, msg, arg)
Guido van Rossumb209a111997-04-29 18:18:01 +00002202 PyObject **p_trace; /* in/out; may not be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002203 may not point to NULL variable initially */
Guido van Rossumb209a111997-04-29 18:18:01 +00002204 PyObject **p_newtrace; /* in/out; may be NULL;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002205 may point to NULL variable;
2206 may be same variable as p_newtrace */
Guido van Rossumb209a111997-04-29 18:18:01 +00002207 PyFrameObject *f;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002208 char *msg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002209 PyObject *arg;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002210{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002211 PyThreadState *tstate = f->f_tstate;
Guido van Rossumb209a111997-04-29 18:18:01 +00002212 PyObject *args, *what;
2213 PyObject *res = NULL;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002214
Guido van Rossuma027efa1997-05-05 20:56:21 +00002215 if (tstate->tracing) {
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002216 /* Don't do recursive traces */
2217 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002218 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002219 *p_newtrace = NULL;
2220 }
2221 return 0;
Guido van Rossum96a42c81992-01-12 02:29:51 +00002222 }
2223
Guido van Rossumb209a111997-04-29 18:18:01 +00002224 args = PyTuple_New(3);
Guido van Rossumf10570b1995-07-07 22:53:21 +00002225 if (args == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002226 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002227 what = PyString_FromString(msg);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002228 if (what == NULL)
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002229 goto cleanup;
Guido van Rossumb209a111997-04-29 18:18:01 +00002230 Py_INCREF(f);
2231 PyTuple_SET_ITEM(args, 0, (PyObject *)f);
2232 PyTuple_SET_ITEM(args, 1, what);
Guido van Rossum96a42c81992-01-12 02:29:51 +00002233 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002234 arg = Py_None;
2235 Py_INCREF(arg);
2236 PyTuple_SET_ITEM(args, 2, arg);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002237 tstate->tracing++;
Guido van Rossumb209a111997-04-29 18:18:01 +00002238 PyFrame_FastToLocals(f);
2239 res = PyEval_CallObject(*p_trace, args); /* May clear *p_trace! */
2240 PyFrame_LocalsToFast(f, 1);
Guido van Rossuma027efa1997-05-05 20:56:21 +00002241 tstate->tracing--;
Guido van Rossumf9c90c51997-08-05 02:18:01 +00002242 cleanup:
Guido van Rossumb209a111997-04-29 18:18:01 +00002243 Py_XDECREF(args);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002244 if (res == NULL) {
2245 /* The trace proc raised an exception */
Guido van Rossumb209a111997-04-29 18:18:01 +00002246 PyTraceBack_Here(f);
2247 Py_XDECREF(*p_trace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002248 *p_trace = NULL;
2249 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002250 Py_XDECREF(*p_newtrace);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002251 *p_newtrace = NULL;
2252 }
Barry Warsawf6202631999-09-08 16:26:33 +00002253 /* to be extra double plus sure we don't get recursive
2254 * calls inf either tracefunc or profilefunc gets an
2255 * exception, zap the global variables.
2256 */
2257 Py_XDECREF(tstate->sys_tracefunc);
2258 tstate->sys_tracefunc = NULL;
2259 Py_XDECREF(tstate->sys_profilefunc);
2260 tstate->sys_profilefunc = NULL;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002261 return -1;
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002262 }
2263 else {
2264 if (p_newtrace) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002265 Py_XDECREF(*p_newtrace);
2266 if (res == Py_None)
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002267 *p_newtrace = NULL;
2268 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002269 Py_INCREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002270 *p_newtrace = res;
2271 }
2272 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002273 Py_DECREF(res);
Guido van Rossum9c8d70d1992-03-23 18:19:28 +00002274 return 0;
Guido van Rossumeee3fd41992-04-05 14:18:13 +00002275 }
Guido van Rossum96a42c81992-01-12 02:29:51 +00002276}
2277
Guido van Rossumb209a111997-04-29 18:18:01 +00002278PyObject *
2279PyEval_GetBuiltins()
Guido van Rossum6135a871995-01-09 17:53:26 +00002280{
Guido van Rossum25ce5661997-08-02 03:10:38 +00002281 PyThreadState *tstate = PyThreadState_Get();
2282 PyFrameObject *current_frame = tstate->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002283 if (current_frame == NULL)
Guido van Rossum25ce5661997-08-02 03:10:38 +00002284 return tstate->interp->builtins;
Guido van Rossum6135a871995-01-09 17:53:26 +00002285 else
2286 return current_frame->f_builtins;
2287}
2288
Guido van Rossumb209a111997-04-29 18:18:01 +00002289PyObject *
2290PyEval_GetLocals()
Guido van Rossum5b722181993-03-30 17:46:03 +00002291{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002292 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum5b722181993-03-30 17:46:03 +00002293 if (current_frame == NULL)
2294 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002295 PyFrame_FastToLocals(current_frame);
Guido van Rossum5b722181993-03-30 17:46:03 +00002296 return current_frame->f_locals;
2297}
2298
Guido van Rossumb209a111997-04-29 18:18:01 +00002299PyObject *
2300PyEval_GetGlobals()
Guido van Rossum3f5da241990-12-20 15:06:42 +00002301{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002302 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002303 if (current_frame == NULL)
2304 return NULL;
2305 else
2306 return current_frame->f_globals;
2307}
2308
Guido van Rossumb209a111997-04-29 18:18:01 +00002309PyObject *
2310PyEval_GetFrame()
Guido van Rossume59214e1994-08-30 08:01:59 +00002311{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002312 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossumb209a111997-04-29 18:18:01 +00002313 return (PyObject *)current_frame;
Guido van Rossume59214e1994-08-30 08:01:59 +00002314}
2315
Guido van Rossum6135a871995-01-09 17:53:26 +00002316int
Guido van Rossumb209a111997-04-29 18:18:01 +00002317PyEval_GetRestricted()
Guido van Rossum6135a871995-01-09 17:53:26 +00002318{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002319 PyFrameObject *current_frame = PyThreadState_Get()->frame;
Guido van Rossum6135a871995-01-09 17:53:26 +00002320 return current_frame == NULL ? 0 : current_frame->f_restricted;
2321}
2322
Guido van Rossumbe270261997-05-22 22:26:18 +00002323int
Guido van Rossumb209a111997-04-29 18:18:01 +00002324Py_FlushLine()
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002325{
Guido van Rossumb209a111997-04-29 18:18:01 +00002326 PyObject *f = PySys_GetObject("stdout");
Guido van Rossumbe270261997-05-22 22:26:18 +00002327 if (f == NULL)
2328 return 0;
2329 if (!PyFile_SoftSpace(f, 0))
2330 return 0;
2331 return PyFile_WriteString("\n", f);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002332}
2333
Guido van Rossum3f5da241990-12-20 15:06:42 +00002334
Guido van Rossum681d79a1995-07-18 14:51:37 +00002335/* External interface to call any callable object.
2336 The arg must be a tuple or NULL. */
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002337
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002338#undef PyEval_CallObject
2339/* for backward compatibility: export this interface */
2340
Guido van Rossumb209a111997-04-29 18:18:01 +00002341PyObject *
2342PyEval_CallObject(func, arg)
2343 PyObject *func;
2344 PyObject *arg;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002345{
Guido van Rossumb209a111997-04-29 18:18:01 +00002346 return PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002347}
Guido van Rossumd7ed6831997-08-30 15:02:50 +00002348#define PyEval_CallObject(func,arg) \
2349 PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
Guido van Rossume59214e1994-08-30 08:01:59 +00002350
Guido van Rossumb209a111997-04-29 18:18:01 +00002351PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002352PyEval_CallObjectWithKeywords(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002353 PyObject *func;
2354 PyObject *arg;
2355 PyObject *kw;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002356{
2357 ternaryfunc call;
Guido van Rossumb209a111997-04-29 18:18:01 +00002358 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002359
2360 if (arg == NULL)
Guido van Rossumb209a111997-04-29 18:18:01 +00002361 arg = PyTuple_New(0);
2362 else if (!PyTuple_Check(arg)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002363 PyErr_SetString(PyExc_TypeError,
2364 "argument list must be a tuple");
Guido van Rossum681d79a1995-07-18 14:51:37 +00002365 return NULL;
2366 }
2367 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002368 Py_INCREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002369
Guido van Rossumb209a111997-04-29 18:18:01 +00002370 if (kw != NULL && !PyDict_Check(kw)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002371 PyErr_SetString(PyExc_TypeError,
2372 "keyword list must be a dictionary");
Guido van Rossume3e61c11995-08-04 04:14:47 +00002373 return NULL;
2374 }
2375
Guido van Rossum150b2df1996-12-05 23:17:11 +00002376 if ((call = func->ob_type->tp_call) != NULL)
Guido van Rossum681d79a1995-07-18 14:51:37 +00002377 result = (*call)(func, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002378 else if (PyMethod_Check(func) || PyFunction_Check(func))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002379 result = call_function(func, arg, kw);
2380 else
2381 result = call_builtin(func, arg, kw);
2382
Guido van Rossumb209a111997-04-29 18:18:01 +00002383 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002384
Guido van Rossumb209a111997-04-29 18:18:01 +00002385 if (result == NULL && !PyErr_Occurred())
2386 PyErr_SetString(PyExc_SystemError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002387 "NULL result without error in call_object");
Guido van Rossume59214e1994-08-30 08:01:59 +00002388
2389 return result;
Guido van Rossum83bf35c1991-07-27 21:32:34 +00002390}
2391
Guido van Rossumb209a111997-04-29 18:18:01 +00002392static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002393call_builtin(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002394 PyObject *func;
2395 PyObject *arg;
2396 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002397{
Guido van Rossumb209a111997-04-29 18:18:01 +00002398 if (PyCFunction_Check(func)) {
2399 PyCFunction meth = PyCFunction_GetFunction(func);
2400 PyObject *self = PyCFunction_GetSelf(func);
2401 int flags = PyCFunction_GetFlags(func);
Guido van Rossumff8b4941995-07-26 18:16:42 +00002402 if (!(flags & METH_VARARGS)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002403 int size = PyTuple_Size(arg);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002404 if (size == 1)
Guido van Rossumb209a111997-04-29 18:18:01 +00002405 arg = PyTuple_GET_ITEM(arg, 0);
Guido van Rossum9c7b8611991-12-16 13:04:47 +00002406 else if (size == 0)
2407 arg = NULL;
2408 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002409 if (flags & METH_KEYWORDS)
2410 return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002411 if (kw != NULL && PyDict_Size(kw) != 0) {
2412 PyErr_SetString(PyExc_TypeError,
Guido van Rossumff8b4941995-07-26 18:16:42 +00002413 "this function takes no keyword arguments");
2414 return NULL;
2415 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002416 return (*meth)(self, arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002417 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002418 if (PyClass_Check(func)) {
2419 return PyInstance_New(func, arg, kw);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002420 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002421 if (PyInstance_Check(func)) {
2422 PyObject *res, *call = PyObject_GetAttrString(func,"__call__");
Guido van Rossume59214e1994-08-30 08:01:59 +00002423 if (call == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002424 PyErr_Clear();
2425 PyErr_SetString(PyExc_AttributeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002426 "no __call__ method defined");
Guido van Rossume59214e1994-08-30 08:01:59 +00002427 return NULL;
2428 }
Guido van Rossumff8b4941995-07-26 18:16:42 +00002429 res = PyEval_CallObjectWithKeywords(call, arg, kw);
Guido van Rossumb209a111997-04-29 18:18:01 +00002430 Py_DECREF(call);
Guido van Rossume59214e1994-08-30 08:01:59 +00002431 return res;
2432 }
Guido van Rossumba98a421999-11-15 19:29:33 +00002433 PyErr_Format(PyExc_TypeError, "call of non-function (type %.400s)",
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002434 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002435 return NULL;
2436}
2437
Guido van Rossumb209a111997-04-29 18:18:01 +00002438static PyObject *
Guido van Rossum681d79a1995-07-18 14:51:37 +00002439call_function(func, arg, kw)
Guido van Rossumb209a111997-04-29 18:18:01 +00002440 PyObject *func;
2441 PyObject *arg;
2442 PyObject *kw;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002443{
Guido van Rossumb209a111997-04-29 18:18:01 +00002444 PyObject *class = NULL; /* == owner */
2445 PyObject *argdefs;
2446 PyObject **d, **k;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002447 int nk, nd;
Guido van Rossumb209a111997-04-29 18:18:01 +00002448 PyObject *result;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002449
Guido van Rossumb209a111997-04-29 18:18:01 +00002450 if (kw != NULL && !PyDict_Check(kw)) {
2451 PyErr_BadInternalCall();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002452 return NULL;
2453 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002454
Guido van Rossumb209a111997-04-29 18:18:01 +00002455 if (PyMethod_Check(func)) {
2456 PyObject *self = PyMethod_Self(func);
2457 class = PyMethod_Class(func);
2458 func = PyMethod_Function(func);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002459 if (self == NULL) {
2460 /* Unbound methods must be called with an instance of
2461 the class (or a derived class) as first argument */
Guido van Rossumb209a111997-04-29 18:18:01 +00002462 if (PyTuple_Size(arg) >= 1) {
2463 self = PyTuple_GET_ITEM(arg, 0);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002464 if (self != NULL &&
Guido van Rossumb209a111997-04-29 18:18:01 +00002465 PyInstance_Check(self) &&
2466 PyClass_IsSubclass((PyObject *)
2467 (((PyInstanceObject *)self)->in_class),
Guido van Rossumb3f72581993-05-21 19:56:10 +00002468 class))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002469 /* Handy-dandy */ ;
Guido van Rossumb3f72581993-05-21 19:56:10 +00002470 else
2471 self = NULL;
2472 }
2473 if (self == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002474 PyErr_SetString(PyExc_TypeError,
Guido van Rossum681d79a1995-07-18 14:51:37 +00002475 "unbound method must be called with class instance 1st argument");
Guido van Rossumb3f72581993-05-21 19:56:10 +00002476 return NULL;
2477 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002478 Py_INCREF(arg);
Guido van Rossumb3f72581993-05-21 19:56:10 +00002479 }
2480 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002481 int argcount = PyTuple_Size(arg);
2482 PyObject *newarg = PyTuple_New(argcount + 1);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002483 int i;
Guido van Rossum81daa321993-05-20 14:24:46 +00002484 if (newarg == NULL)
2485 return NULL;
Guido van Rossumb209a111997-04-29 18:18:01 +00002486 Py_INCREF(self);
2487 PyTuple_SET_ITEM(newarg, 0, self);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002488 for (i = 0; i < argcount; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002489 PyObject *v = PyTuple_GET_ITEM(arg, i);
2490 Py_XINCREF(v);
2491 PyTuple_SET_ITEM(newarg, i+1, v);
Guido van Rossum81daa321993-05-20 14:24:46 +00002492 }
2493 arg = newarg;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002494 }
Guido van Rossum7859f871998-07-08 14:58:16 +00002495 if (!PyFunction_Check(func)) {
2496 result = PyEval_CallObjectWithKeywords(func, arg, kw);
2497 Py_DECREF(arg);
2498 return result;
2499 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002500 }
2501 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002502 if (!PyFunction_Check(func)) {
Guido van Rossum2d1ad391998-08-25 18:16:54 +00002503 PyErr_Format(PyExc_TypeError,
2504 "call of non-function (type %s)",
2505 func->ob_type->tp_name);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002506 return NULL;
2507 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002508 Py_INCREF(arg);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002509 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002510
2511 argdefs = PyFunction_GetDefaults(func);
Guido van Rossumb209a111997-04-29 18:18:01 +00002512 if (argdefs != NULL && PyTuple_Check(argdefs)) {
2513 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
2514 nd = PyTuple_Size(argdefs);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002515 }
2516 else {
2517 d = NULL;
2518 nd = 0;
2519 }
2520
2521 if (kw != NULL) {
2522 int pos, i;
Guido van Rossumb209a111997-04-29 18:18:01 +00002523 nk = PyDict_Size(kw);
2524 k = PyMem_NEW(PyObject *, 2*nk);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002525 if (k == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002526 PyErr_NoMemory();
2527 Py_DECREF(arg);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002528 return NULL;
Guido van Rossume59214e1994-08-30 08:01:59 +00002529 }
Guido van Rossum681d79a1995-07-18 14:51:37 +00002530 pos = i = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002531 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
Guido van Rossum681d79a1995-07-18 14:51:37 +00002532 i += 2;
2533 nk = i/2;
2534 /* XXX This is broken if the caller deletes dict items! */
2535 }
2536 else {
2537 k = NULL;
2538 nk = 0;
Guido van Rossume59214e1994-08-30 08:01:59 +00002539 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002540
Guido van Rossum681d79a1995-07-18 14:51:37 +00002541 result = eval_code2(
Guido van Rossumb209a111997-04-29 18:18:01 +00002542 (PyCodeObject *)PyFunction_GetCode(func),
2543 PyFunction_GetGlobals(func), (PyObject *)NULL,
2544 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
Guido van Rossum681d79a1995-07-18 14:51:37 +00002545 k, nk,
2546 d, nd,
2547 class);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002548
Guido van Rossumb209a111997-04-29 18:18:01 +00002549 Py_DECREF(arg);
2550 PyMem_XDEL(k);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002551
Guido van Rossum681d79a1995-07-18 14:51:37 +00002552 return result;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002553}
2554
Guido van Rossum3b9c6671996-07-30 18:40:29 +00002555#define SLICE_ERROR_MSG \
2556 "standard sequence type does not support step size other than one"
2557
Guido van Rossumb209a111997-04-29 18:18:01 +00002558static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002559loop_subscript(v, w)
Guido van Rossumb209a111997-04-29 18:18:01 +00002560 PyObject *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002561{
Guido van Rossumb209a111997-04-29 18:18:01 +00002562 PySequenceMethods *sq = v->ob_type->tp_as_sequence;
Guido van Rossume59214e1994-08-30 08:01:59 +00002563 int i;
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002564 if (sq == NULL || sq->sq_item == NULL) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002565 PyErr_SetString(PyExc_TypeError, "loop over non-sequence");
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002566 return NULL;
2567 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002568 i = PyInt_AsLong(w);
Guido van Rossume59214e1994-08-30 08:01:59 +00002569 v = (*sq->sq_item)(v, i);
2570 if (v)
2571 return v;
Barry Warsaw4249f541997-08-22 21:26:19 +00002572 if (PyErr_ExceptionMatches(PyExc_IndexError))
Guido van Rossumb209a111997-04-29 18:18:01 +00002573 PyErr_Clear();
Guido van Rossume59214e1994-08-30 08:01:59 +00002574 return NULL;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002575}
2576
2577static int
Guido van Rossuma027efa1997-05-05 20:56:21 +00002578slice_index(v, pi)
Guido van Rossumb209a111997-04-29 18:18:01 +00002579 PyObject *v;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002580 int *pi;
2581{
2582 if (v != NULL) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002583 long x;
Andrew M. Kuchling2194b162000-02-23 22:18:48 +00002584 if (PyInt_Check(v)) {
2585 x = PyInt_AsLong(v);
2586 } else if (PyLong_Check(v)) {
2587 x = PyLong_AsLong(v);
2588 if (x==-1 && PyErr_Occurred()) {
2589 PyObject *long_zero;
2590
2591 if (!PyErr_ExceptionMatches( PyExc_OverflowError ) ) {
2592 /* It's not an overflow error, so just
2593 signal an error */
2594 return -1;
2595 }
2596
2597 /* It's an overflow error, so we need to
2598 check the sign of the long integer,
2599 set the value to INT_MAX or 0, and clear
2600 the error. */
2601
2602 /* Create a long integer with a value of 0 */
2603 long_zero = PyLong_FromLong( 0L );
2604 if (long_zero == NULL) return -1;
2605
2606 /* Check sign */
2607 if (PyObject_Compare(long_zero, v) < 0)
2608 x = INT_MAX;
2609 else
2610 x = 0;
2611
2612 /* Free the long integer we created, and clear the
2613 OverflowError */
2614 Py_DECREF(long_zero);
2615 PyErr_Clear();
2616 }
2617 } else {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002618 PyErr_SetString(PyExc_TypeError,
2619 "slice index must be int");
Guido van Rossum3f5da241990-12-20 15:06:42 +00002620 return -1;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002621 }
Guido van Rossuma027efa1997-05-05 20:56:21 +00002622 /* Truncate -- very long indices are truncated anyway */
2623 if (x > INT_MAX)
2624 x = INT_MAX;
2625 else if (x < -INT_MAX)
2626 x = 0;
2627 *pi = x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002628 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002629 return 0;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002630}
2631
Guido van Rossumb209a111997-04-29 18:18:01 +00002632static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002633apply_slice(u, v, w) /* return u[v:w] */
Guido van Rossumb209a111997-04-29 18:18:01 +00002634 PyObject *u, *v, *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002635{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002636 int ilow = 0, ihigh = INT_MAX;
2637 if (slice_index(v, &ilow) != 0)
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002638 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002639 if (slice_index(w, &ihigh) != 0)
Guido van Rossum04691fc1992-08-12 15:35:34 +00002640 return NULL;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002641 return PySequence_GetSlice(u, ilow, ihigh);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002642}
Guido van Rossum3f5da241990-12-20 15:06:42 +00002643
2644static int
Guido van Rossum3f5da241990-12-20 15:06:42 +00002645assign_slice(u, v, w, x) /* u[v:w] = x */
Guido van Rossumb209a111997-04-29 18:18:01 +00002646 PyObject *u, *v, *w, *x;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002647{
Guido van Rossuma027efa1997-05-05 20:56:21 +00002648 int ilow = 0, ihigh = INT_MAX;
2649 if (slice_index(v, &ilow) != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002650 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002651 if (slice_index(w, &ihigh) != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002652 return -1;
Guido van Rossuma027efa1997-05-05 20:56:21 +00002653 if (x == NULL)
2654 return PySequence_DelSlice(u, ilow, ihigh);
2655 else
2656 return PySequence_SetSlice(u, ilow, ihigh, x);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002657}
2658
Guido van Rossumb209a111997-04-29 18:18:01 +00002659static PyObject *
Guido van Rossum3f5da241990-12-20 15:06:42 +00002660cmp_outcome(op, v, w)
Guido van Rossum5b7313a1992-04-06 13:24:57 +00002661 int op;
Guido van Rossumb209a111997-04-29 18:18:01 +00002662 register PyObject *v;
2663 register PyObject *w;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002664{
2665 register int cmp;
2666 register int res = 0;
2667 switch (op) {
Guido van Rossum3f5da241990-12-20 15:06:42 +00002668 case IS:
2669 case IS_NOT:
2670 res = (v == w);
Guido van Rossum04691fc1992-08-12 15:35:34 +00002671 if (op == (int) IS_NOT)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002672 res = !res;
2673 break;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002674 case IN:
2675 case NOT_IN:
Guido van Rossum7e33c6e1998-05-22 00:52:29 +00002676 res = PySequence_Contains(w, v);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002677 if (res < 0)
2678 return NULL;
Guido van Rossum04691fc1992-08-12 15:35:34 +00002679 if (op == (int) NOT_IN)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002680 res = !res;
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002681 break;
2682 case EXC_MATCH:
Barry Warsaw4249f541997-08-22 21:26:19 +00002683 res = PyErr_GivenExceptionMatches(v, w);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002684 break;
2685 default:
Guido van Rossumb209a111997-04-29 18:18:01 +00002686 cmp = PyObject_Compare(v, w);
Guido van Rossumc8b6df91997-05-23 00:06:51 +00002687 if (cmp && PyErr_Occurred())
2688 return NULL;
Guido van Rossum3f5da241990-12-20 15:06:42 +00002689 switch (op) {
2690 case LT: res = cmp < 0; break;
2691 case LE: res = cmp <= 0; break;
2692 case EQ: res = cmp == 0; break;
2693 case NE: res = cmp != 0; break;
2694 case GT: res = cmp > 0; break;
2695 case GE: res = cmp >= 0; break;
2696 /* XXX no default? (res is initialized to 0 though) */
2697 }
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002698 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002699 v = res ? Py_True : Py_False;
2700 Py_INCREF(v);
Guido van Rossum10dc2e81990-11-18 17:27:39 +00002701 return v;
2702}
2703
Guido van Rossum3f5da241990-12-20 15:06:42 +00002704static int
2705import_from(locals, v, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002706 PyObject *locals;
2707 PyObject *v;
2708 PyObject *name;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002709{
Guido van Rossumb209a111997-04-29 18:18:01 +00002710 PyObject *w, *x;
2711 if (!PyModule_Check(v)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002712 PyErr_SetString(PyExc_TypeError,
2713 "import-from requires module object");
Guido van Rossum1ae940a1995-01-02 19:04:15 +00002714 return -1;
2715 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002716 w = PyModule_GetDict(v);
2717 if (PyString_AsString(name)[0] == '*') {
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002718 int pos, err;
Guido van Rossumb209a111997-04-29 18:18:01 +00002719 PyObject *name, *value;
Guido van Rossum25831651993-05-19 14:50:45 +00002720 pos = 0;
Guido van Rossumb209a111997-04-29 18:18:01 +00002721 while (PyDict_Next(w, &pos, &name, &value)) {
2722 if (!PyString_Check(name) ||
2723 PyString_AsString(name)[0] == '_')
Guido van Rossume9736fc1990-11-18 17:33:06 +00002724 continue;
Guido van Rossumb209a111997-04-29 18:18:01 +00002725 Py_INCREF(value);
2726 err = PyDict_SetItem(locals, name, value);
2727 Py_DECREF(value);
Guido van Rossumeb6b33a1993-05-25 09:38:27 +00002728 if (err != 0)
Guido van Rossum3f5da241990-12-20 15:06:42 +00002729 return -1;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002730 }
Guido van Rossum3f5da241990-12-20 15:06:42 +00002731 return 0;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002732 }
2733 else {
Guido van Rossumb209a111997-04-29 18:18:01 +00002734 x = PyDict_GetItem(w, name);
Guido van Rossum3f5da241990-12-20 15:06:42 +00002735 if (x == NULL) {
Jeremy Hylton76901512000-03-28 23:49:17 +00002736 PyErr_Format(PyExc_ImportError,
2737 "cannot import name %.230s",
2738 PyString_AsString(name));
Guido van Rossum3f5da241990-12-20 15:06:42 +00002739 return -1;
2740 }
2741 else
Guido van Rossumb209a111997-04-29 18:18:01 +00002742 return PyDict_SetItem(locals, name, x);
Guido van Rossume9736fc1990-11-18 17:33:06 +00002743 }
2744}
2745
Guido van Rossumb209a111997-04-29 18:18:01 +00002746static PyObject *
Guido van Rossum25831651993-05-19 14:50:45 +00002747build_class(methods, bases, name)
Guido van Rossumb209a111997-04-29 18:18:01 +00002748 PyObject *methods; /* dictionary */
2749 PyObject *bases; /* tuple containing classes */
2750 PyObject *name; /* string */
Guido van Rossume9736fc1990-11-18 17:33:06 +00002751{
Guido van Rossumcd649651997-08-22 16:56:16 +00002752 int i, n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002753 if (!PyTuple_Check(bases)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002754 PyErr_SetString(PyExc_SystemError,
2755 "build_class with non-tuple bases");
Guido van Rossum25831651993-05-19 14:50:45 +00002756 return NULL;
Guido van Rossume9736fc1990-11-18 17:33:06 +00002757 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002758 if (!PyDict_Check(methods)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002759 PyErr_SetString(PyExc_SystemError,
2760 "build_class with non-dictionary");
Guido van Rossume9736fc1990-11-18 17:33:06 +00002761 return NULL;
2762 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002763 if (!PyString_Check(name)) {
Guido van Rossuma027efa1997-05-05 20:56:21 +00002764 PyErr_SetString(PyExc_SystemError,
2765 "build_class witn non-string name");
Guido van Rossum25831651993-05-19 14:50:45 +00002766 return NULL;
2767 }
Guido van Rossumcd649651997-08-22 16:56:16 +00002768 n = PyTuple_Size(bases);
2769 for (i = 0; i < n; i++) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002770 PyObject *base = PyTuple_GET_ITEM(bases, i);
2771 if (!PyClass_Check(base)) {
Guido van Rossum150b2df1996-12-05 23:17:11 +00002772 /* Call the base's *type*, if it is callable.
2773 This code is a hook for Donald Beaudry's
2774 and Jim Fulton's type extensions. In
2775 unexended Python it will never be triggered
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002776 since its types are not callable.
2777 Ditto: call the bases's *class*, if it has
2778 one. This makes the same thing possible
2779 without writing C code. A true meta-object
2780 protocol! */
2781 PyObject *basetype = (PyObject *)base->ob_type;
2782 PyObject *callable = NULL;
2783 if (PyCallable_Check(basetype))
2784 callable = basetype;
2785 else
2786 callable = PyObject_GetAttrString(
2787 base, "__class__");
2788 if (callable) {
2789 PyObject *args;
2790 PyObject *newclass = NULL;
2791 args = Py_BuildValue(
2792 "(OOO)", name, bases, methods);
2793 if (args != NULL) {
2794 newclass = PyEval_CallObject(
2795 callable, args);
2796 Py_DECREF(args);
2797 }
Guido van Rossum730806d1998-04-10 22:27:42 +00002798 if (callable != basetype) {
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002799 Py_DECREF(callable);
Guido van Rossum730806d1998-04-10 22:27:42 +00002800 }
Guido van Rossum55b9ab51997-07-31 03:54:02 +00002801 return newclass;
Guido van Rossum150b2df1996-12-05 23:17:11 +00002802 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002803 PyErr_SetString(PyExc_TypeError,
Guido van Rossum25831651993-05-19 14:50:45 +00002804 "base is not a class object");
2805 return NULL;
2806 }
2807 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002808 return PyClass_New(bases, methods, name);
Guido van Rossum25831651993-05-19 14:50:45 +00002809}
2810
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002811static int
Guido van Rossuma027efa1997-05-05 20:56:21 +00002812exec_statement(f, prog, globals, locals)
2813 PyFrameObject *f;
Guido van Rossumb209a111997-04-29 18:18:01 +00002814 PyObject *prog;
2815 PyObject *globals;
2816 PyObject *locals;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002817{
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002818 int n;
Guido van Rossumb209a111997-04-29 18:18:01 +00002819 PyObject *v;
Guido van Rossum681d79a1995-07-18 14:51:37 +00002820 int plain = 0;
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002821
Guido van Rossumb209a111997-04-29 18:18:01 +00002822 if (PyTuple_Check(prog) && globals == Py_None && locals == Py_None &&
2823 ((n = PyTuple_Size(prog)) == 2 || n == 3)) {
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002824 /* Backward compatibility hack */
Guido van Rossumb209a111997-04-29 18:18:01 +00002825 globals = PyTuple_GetItem(prog, 1);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002826 if (n == 3)
Guido van Rossumb209a111997-04-29 18:18:01 +00002827 locals = PyTuple_GetItem(prog, 2);
2828 prog = PyTuple_GetItem(prog, 0);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002829 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002830 if (globals == Py_None) {
2831 globals = PyEval_GetGlobals();
2832 if (locals == Py_None) {
2833 locals = PyEval_GetLocals();
Guido van Rossum681d79a1995-07-18 14:51:37 +00002834 plain = 1;
2835 }
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002836 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002837 else if (locals == Py_None)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002838 locals = globals;
Guido van Rossumb209a111997-04-29 18:18:01 +00002839 if (!PyString_Check(prog) &&
2840 !PyCode_Check(prog) &&
2841 !PyFile_Check(prog)) {
2842 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002843 "exec 1st arg must be string, code or file object");
2844 return -1;
2845 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002846 if (!PyDict_Check(globals) || !PyDict_Check(locals)) {
2847 PyErr_SetString(PyExc_TypeError,
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002848 "exec 2nd/3rd args must be dict or None");
2849 return -1;
2850 }
Guido van Rossumb209a111997-04-29 18:18:01 +00002851 if (PyDict_GetItemString(globals, "__builtins__") == NULL)
Guido van Rossuma027efa1997-05-05 20:56:21 +00002852 PyDict_SetItemString(globals, "__builtins__", f->f_builtins);
Guido van Rossumb209a111997-04-29 18:18:01 +00002853 if (PyCode_Check(prog)) {
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002854 v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002855 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002856 else if (PyFile_Check(prog)) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002857 FILE *fp = PyFile_AsFile(prog);
2858 char *name = PyString_AsString(PyFile_Name(prog));
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002859 v = PyRun_File(fp, name, Py_file_input, globals, locals);
2860 }
2861 else {
2862 char *s = PyString_AsString(prog);
2863 if ((int)strlen(s) != PyString_Size(prog)) {
2864 PyErr_SetString(PyExc_ValueError,
2865 "embedded '\\0' in exec string");
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002866 return -1;
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002867 }
2868 v = PyRun_String(s, Py_file_input, globals, locals);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002869 }
Guido van Rossuma400d8a2000-01-12 22:45:54 +00002870 if (plain)
2871 PyFrame_LocalsToFast(f, 0);
Guido van Rossum681d79a1995-07-18 14:51:37 +00002872 if (v == NULL)
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002873 return -1;
Guido van Rossumb209a111997-04-29 18:18:01 +00002874 Py_DECREF(v);
Guido van Rossumdb3165e1993-10-18 17:06:59 +00002875 return 0;
2876}
Guido van Rossum24c13741995-02-14 09:42:43 +00002877
Guido van Rossum1aa14831997-01-21 05:34:20 +00002878/* Hack for ni.py */
Guido van Rossumb209a111997-04-29 18:18:01 +00002879static PyObject *
Guido van Rossum24c13741995-02-14 09:42:43 +00002880find_from_args(f, nexti)
Guido van Rossumb209a111997-04-29 18:18:01 +00002881 PyFrameObject *f;
Guido van Rossum24c13741995-02-14 09:42:43 +00002882 int nexti;
2883{
2884 int opcode;
2885 int oparg;
Guido van Rossumb209a111997-04-29 18:18:01 +00002886 PyObject *list, *name;
Guido van Rossum24c13741995-02-14 09:42:43 +00002887 unsigned char *next_instr;
2888
Guido van Rossumd076c731998-10-07 19:42:25 +00002889 _PyCode_GETCODEPTR(f->f_code, &next_instr);
2890 next_instr += nexti;
2891
Guido van Rossum24c13741995-02-14 09:42:43 +00002892 opcode = (*next_instr++);
2893 if (opcode != IMPORT_FROM) {
Guido van Rossumb209a111997-04-29 18:18:01 +00002894 Py_INCREF(Py_None);
2895 return Py_None;
Guido van Rossum24c13741995-02-14 09:42:43 +00002896 }
2897
Guido van Rossumb209a111997-04-29 18:18:01 +00002898 list = PyList_New(0);
Guido van Rossum24c13741995-02-14 09:42:43 +00002899 if (list == NULL)
2900 return NULL;
2901
2902 do {
Guido van Rossum681d79a1995-07-18 14:51:37 +00002903 oparg = (next_instr[1]<<8) + next_instr[0];
2904 next_instr += 2;
Guido van Rossum24c13741995-02-14 09:42:43 +00002905 name = Getnamev(f, oparg);
Guido van Rossumb209a111997-04-29 18:18:01 +00002906 if (PyList_Append(list, name) < 0) {
2907 Py_DECREF(list);
Guido van Rossum24c13741995-02-14 09:42:43 +00002908 break;
2909 }
2910 opcode = (*next_instr++);
2911 } while (opcode == IMPORT_FROM);
2912
2913 return list;
2914}
Guido van Rossum950361c1997-01-24 13:49:28 +00002915
2916
2917#ifdef DYNAMIC_EXECUTION_PROFILE
2918
2919PyObject *
2920getarray(a)
2921 long a[256];
2922{
2923 int i;
2924 PyObject *l = PyList_New(256);
2925 if (l == NULL) return NULL;
2926 for (i = 0; i < 256; i++) {
2927 PyObject *x = PyInt_FromLong(a[i]);
2928 if (x == NULL) {
2929 Py_DECREF(l);
2930 return NULL;
2931 }
2932 PyList_SetItem(l, i, x);
2933 }
2934 for (i = 0; i < 256; i++)
2935 a[i] = 0;
2936 return l;
2937}
2938
2939PyObject *
2940_Py_GetDXProfile(self, args)
2941 PyObject *self, *args;
2942{
2943#ifndef DXPAIRS
2944 return getarray(dxp);
2945#else
2946 int i;
2947 PyObject *l = PyList_New(257);
2948 if (l == NULL) return NULL;
2949 for (i = 0; i < 257; i++) {
2950 PyObject *x = getarray(dxpairs[i]);
2951 if (x == NULL) {
2952 Py_DECREF(l);
2953 return NULL;
2954 }
2955 PyList_SetItem(l, i, x);
2956 }
2957 return l;
2958#endif
2959}
2960
2961#endif