]> granicus.if.org Git - python/commitdiff
Simplify previous checkin (bitfields for WHY codes).
authorRaymond Hettinger <python@rcn.com>
Tue, 6 Apr 2004 10:11:10 +0000 (10:11 +0000)
committerRaymond Hettinger <python@rcn.com>
Tue, 6 Apr 2004 10:11:10 +0000 (10:11 +0000)
Restores the self-documenting enum declaration.

Python/ceval.c

index b8196c60a0f33363427bf66afff5525eb2ad0477..e9e41535a5e28b1f98be0bed6ef0f4d075301421 100644 (file)
@@ -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) {