Ray's playground

 

Python虚拟中的控制流(Python 源码剖析第十章)

COMPARE_OP
 1    case COMPARE_OP:
 2             w = POP();
 3             v = TOP();
 4             if (PyInt_CheckExact(w) && PyInt_CheckExact(v)) {
 5                 /* INLINE: cmp(int, int) */
 6                 register long a, b;
 7                 register int res;
 8                 a = PyInt_AS_LONG(v);
 9                 b = PyInt_AS_LONG(w);
10                 switch (oparg) {
11                 case PyCmp_LT: res = a <  b; break;
12                 case PyCmp_LE: res = a <= b; break;
13                 case PyCmp_EQ: res = a == b; break;
14                 case PyCmp_NE: res = a != b; break;
15                 case PyCmp_GT: res = a >  b; break;
16                 case PyCmp_GE: res = a >= b; break;
17                 case PyCmp_IS: res = v == w; break;
18                 case PyCmp_IS_NOT: res = v != w; break;
19                 defaultgoto slow_compare;
20                 }
21                 x = res ? Py_True : Py_False;
22                 Py_INCREF(x);
23             }
24             else {
25               slow_compare:
26                 x = cmp_outcome(oparg, v, w);
27             }
28             Py_DECREF(v);
29             Py_DECREF(w);
30             SET_TOP(x);
31             if (x == NULL) break;
32             PREDICT(POP_JUMP_IF_FALSE);
33             PREDICT(POP_JUMP_IF_TRUE);
34             continue;

 

posted on 2010-11-24 21:54  Ray Z  阅读(208)  评论(0编辑  收藏  举报

导航