diff options
Diffstat (limited to 'Python/ceval.c')
| -rw-r--r-- | Python/ceval.c | 54 | 
1 files changed, 46 insertions, 8 deletions
| diff --git a/Python/ceval.c b/Python/ceval.c index bafb88c..2dbf591 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1502,6 +1502,18 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)              DISPATCH();          } +        TARGET(BINARY_MATRIX_MULTIPLY) { +            PyObject *right = POP(); +            PyObject *left = TOP(); +            PyObject *res = PyNumber_MatrixMultiply(left, right); +            Py_DECREF(left); +            Py_DECREF(right); +            SET_TOP(res); +            if (res == NULL) +                goto error; +            DISPATCH(); +        } +          TARGET(BINARY_TRUE_DIVIDE) {              PyObject *divisor = POP();              PyObject *dividend = TOP(); @@ -1692,6 +1704,18 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)              DISPATCH();          } +        TARGET(INPLACE_MATRIX_MULTIPLY) { +            PyObject *right = POP(); +            PyObject *left = TOP(); +            PyObject *res = PyNumber_InPlaceMatrixMultiply(left, right); +            Py_DECREF(left); +            Py_DECREF(right); +            SET_TOP(res); +            if (res == NULL) +                goto error; +            DISPATCH(); +        } +          TARGET(INPLACE_TRUE_DIVIDE) {              PyObject *divisor = POP();              PyObject *dividend = TOP(); @@ -3384,10 +3408,11 @@ too_many_positional(PyCodeObject *co, int given, int defcount, PyObject **fastlo     PyEval_EvalFrame() and PyEval_EvalCodeEx() you will need to adjust     the test in the if statements in Misc/gdbinit (pystack and pystackv). */ -PyObject * -PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals, +static PyObject * +_PyEval_EvalCodeWithName(PyObject *_co, PyObject *globals, PyObject *locals,             PyObject **args, int argcount, PyObject **kws, int kwcount, -           PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure) +           PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure, +           PyObject *name, PyObject *qualname)  {      PyCodeObject* co = (PyCodeObject*)_co;      PyFrameObject *f; @@ -3579,7 +3604,7 @@ PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,          /* Create a new generator that owns the ready to run frame           * and return that as the value. */ -        return PyGen_New(f); +        return PyGen_NewWithQualName(f, name, qualname);      }      retval = PyEval_EvalFrameEx(f,0); @@ -3598,6 +3623,16 @@ fail: /* Jump here from prelude on failure */      return retval;  } +PyObject * +PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals, +           PyObject **args, int argcount, PyObject **kws, int kwcount, +           PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure) +{ +    return _PyEval_EvalCodeWithName(_co, globals, locals, +                                    args, argcount, kws, kwcount, +                                    defs, defcount, kwdefs, closure, +                                    NULL, NULL); +}  static PyObject *  special_lookup(PyObject *o, _Py_Identifier *id) @@ -4296,6 +4331,8 @@ fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)      PyObject *globals = PyFunction_GET_GLOBALS(func);      PyObject *argdefs = PyFunction_GET_DEFAULTS(func);      PyObject *kwdefs = PyFunction_GET_KW_DEFAULTS(func); +    PyObject *name = ((PyFunctionObject *)func) -> func_name; +    PyObject *qualname = ((PyFunctionObject *)func) -> func_qualname;      PyObject **d = NULL;      int nd = 0; @@ -4338,10 +4375,11 @@ fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)          d = &PyTuple_GET_ITEM(argdefs, 0);          nd = Py_SIZE(argdefs);      } -    return PyEval_EvalCodeEx((PyObject*)co, globals, -                             (PyObject *)NULL, (*pp_stack)-n, na, -                             (*pp_stack)-2*nk, nk, d, nd, kwdefs, -                             PyFunction_GET_CLOSURE(func)); +    return _PyEval_EvalCodeWithName((PyObject*)co, globals, +                                    (PyObject *)NULL, (*pp_stack)-n, na, +                                    (*pp_stack)-2*nk, nk, d, nd, kwdefs, +                                    PyFunction_GET_CLOSURE(func), +                                    name, qualname);  }  static PyObject * | 
