它比机器语言更高级.有一个
giant switch statement查看每个操作码并根据操作码决定做什么.以下是一些片段:
switch (opcode) {
...
TARGET(LOAD_CONST) {
PyObject *value = GETITEM(consts, oparg);
Py_INCREF(value);
PUSH(value);
FAST_DISPATCH();
}
...
TARGET(UNARY_NEGATIVE) {
PyObject *value = TOP();
PyObject *res = PyNumber_Negative(value);
Py_DECREF(value);
SET_TOP(res);
if (res == NULL)
goto error;
DISPATCH();
}
...
TARGET(BINARY_MULTIPLY) {
PyObject *right = POP();
PyObject *left = TOP();
PyObject *res = PyNumber_Multiply(left, right);
Py_DECREF(left);
Py_DECREF(right);
SET_TOP(res);
if (res == NULL)
goto error;
DISPATCH();
}
TARGET和DISPATCH的东西是优化的一部分,并没有完全通过常规的开关机制.像PyNumber_Negative和PyNumber_Multiply这样的函数是Python C API的一部分,它们调度诸如否定和乘法之类的操作.