summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2004-04-06 10:11:10 (GMT)
committerRaymond Hettinger <python@rcn.com>2004-04-06 10:11:10 (GMT)
commit7c9586545eb138343ca00ba3641e183691b4c273 (patch)
treea16d847ae37d2c28a1a5d67ee9fd1e547a38d9e9
parent06032cb664d1ffade76558be53d47d1727dfe74d (diff)
downloadcpython-7c9586545eb138343ca00ba3641e183691b4c273.zip
cpython-7c9586545eb138343ca00ba3641e183691b4c273.tar.gz
cpython-7c9586545eb138343ca00ba3641e183691b4c273.tar.bz2
Simplify previous checkin (bitfields for WHY codes).
Restores the self-documenting enum declaration.
-rw-r--r--Python/ceval.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index b8196c6..e9e4153 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -537,15 +537,17 @@ _Py_CheckRecursiveCall(char *where)
}
/* Status code for main loop (reason for stack unwind) */
-#define WHY_NOT 0x0001
-#define WHY_EXCEPTION 0x0002
-#define WHY_RERAISE 0x0004
-#define WHY_RETURN 0x0008
-#define WHY_BREAK 0x0010
-#define WHY_CONTINUE 0x0020
-#define WHY_YIELD 0x0040
-
-static int do_raise(PyObject *, PyObject *, PyObject *);
+enum why_code {
+ WHY_NOT = 0x0001, /* No error */
+ WHY_EXCEPTION = 0x0002, /* Exception occurred */
+ WHY_RERAISE = 0x0004, /* Exception re-raised by 'finally' */
+ WHY_RETURN = 0x0008, /* 'return' statement */
+ WHY_BREAK = 0x0010, /* 'break' statement */
+ WHY_CONTINUE = 0x0020, /* 'continue' statement */
+ WHY_YIELD = 0x0040 /* 'yield' operator */
+};
+
+static enum why_code do_raise(PyObject *, PyObject *, PyObject *);
static int unpack_iterable(PyObject *, int, PyObject **);
/* for manipulating the thread switch and periodic "stuff" - used to be
@@ -578,7 +580,7 @@ eval_frame(PyFrameObject *f)
register unsigned char *next_instr;
register int opcode=0; /* Current opcode */
register int oparg=0; /* Current opcode argument, if any */
- register int why; /* Reason for block stack unwind */
+ register enum why_code why; /* Reason for block stack unwind */
register int err; /* Error status -- nonzero if error */
register PyObject *x; /* Result object -- NULL if error */
register PyObject *v; /* Temporary objects popped off stack */
@@ -1650,7 +1652,7 @@ eval_frame(PyFrameObject *f)
case END_FINALLY:
v = POP();
if (PyInt_Check(v)) {
- why = (int) PyInt_AS_LONG(v);
+ why = (enum why_code) PyInt_AS_LONG(v);
assert(why != WHY_YIELD);
if (why & (WHY_RETURN | WHY_CONTINUE))
retval = POP();
@@ -2834,7 +2836,7 @@ reset_exc_info(PyThreadState *tstate)
/* Logic for the raise statement (too complicated for inlining).
This *consumes* a reference count to each of its arguments. */
-static int
+static enum why_code
do_raise(PyObject *type, PyObject *value, PyObject *tb)
{
if (type == NULL) {