bool BINARY_OPERATION_ADD_BYTES_BYTES_INPLACE(PyObject **operand1, PyObject *operand2) { assert(operand1); CHECK_OBJECT(*operand1); CHECK_OBJECT(operand2); assert(PyBytes_CheckExact(*operand1)); assert(PyBytes_CheckExact(operand2)); if (Py_REFCNT(*operand1) == 1) { return BYTES_ADD_INCREMENTAL(operand1, operand2); } // Could concat bytes here more directly. PyObject *result = PyNumber_InPlaceAdd(*operand1, operand2); if (unlikely(result == NULL)) { return false; } // We got an object handed, that we have to release. Py_DECREF(*operand1); // That's our return value then. As we use a dedicated variable, it's // OK that way. *operand1 = result; return true; }
bool BINARY_OPERATION_ADD_LONG_LONG_INPLACE(PyObject **operand1, PyObject *operand2) { assert(operand1); CHECK_OBJECT(*operand1); CHECK_OBJECT(operand2); assert(PyLong_CheckExact(*operand1)); assert(PyLong_CheckExact(operand2)); // TODO: Consider adding this shortcut, we might often be able to use // existing values at least in case of smaller right hand side, but it // may equally often not work out and not be worth it. CPython doesn't // try it. #if 0 // Adding floats to a new float could get special code too. if (Py_REFCNT(*operand1) == 1) { return LONG_ADD_INCREMENTAL(operand1, operand2); } #endif PyObject *result = PyNumber_InPlaceAdd(*operand1, operand2); if (unlikely(result == NULL)) { return false; } // We got an object handed, that we have to release. Py_DECREF(*operand1); // That's our return value then. As we use a dedicated variable, it's // OK that way. *operand1 = result; return true; }
bool BINARY_OPERATION_ADD_STR_STR_INPLACE(PyObject **operand1, PyObject *operand2) { assert(operand1); CHECK_OBJECT(*operand1); CHECK_OBJECT(operand2); assert(PyString_CheckExact(*operand1)); assert(PyString_CheckExact(operand2)); if (!PyString_CHECK_INTERNED(*operand1) && Py_REFCNT(*operand1) == 1) { return STRING_ADD_INCREMENTAL(operand1, operand2); } PyString_Concat(operand1, operand2); return !ERROR_OCCURRED(); PyObject *result = PyNumber_InPlaceAdd(*operand1, operand2); if (unlikely(result == NULL)) { return false; } // We got an object handed, that we have to release. Py_DECREF(*operand1); // That's our return value then. As we use a dedicated variable, it's // OK that way. *operand1 = result; return true; }
bool BINARY_OPERATION_ADD_OBJECT_FLOAT_INPLACE(PyObject **operand1, PyObject *operand2) { assert(operand1); CHECK_OBJECT(*operand1); CHECK_OBJECT(operand2); assert(PyFloat_CheckExact(operand2)); if (PyFloat_CheckExact(*operand1)) { // Adding floats to a new float could get special code too. if (Py_REFCNT(*operand1) == 1) { return FLOAT_ADD_INCREMENTAL(operand1, operand2); } } PyObject *result = PyNumber_InPlaceAdd(*operand1, operand2); if (unlikely(result == NULL)) { return false; } // We got an object handed, that we have to release. Py_DECREF(*operand1); // That's our return value then. As we use a dedicated variable, it's // OK that way. *operand1 = result; return true; }
bool BINARY_OPERATION_ADD_TUPLE_OBJECT_INPLACE(PyObject **operand1, PyObject *operand2) { assert(operand1); CHECK_OBJECT(*operand1); CHECK_OBJECT(operand2); assert(PyTuple_CheckExact(*operand1)); PyObject *result; if (PyTuple_CheckExact(operand2)) { // TODO: No tuple specific code, create one and use it, although it // is probably not too common to in-place to them. result = PySequence_InPlaceConcat(*operand1, operand2); } else if (PySequence_Check(operand2)) { result = PySequence_InPlaceConcat(*operand1, operand2); } else { result = PyNumber_InPlaceAdd(*operand1, operand2); } if (unlikely(result == NULL)) { return false; } // We got an object handed, that we have to release. Py_DECREF(*operand1); // That's our return value then. As we use a dedicated variable, it's // OK that way. *operand1 = result; return true; }
bool BINARY_OPERATION_ADD_OBJECT_LIST_INPLACE(PyObject **operand1, PyObject *operand2) { assert(operand1); CHECK_OBJECT(*operand1); CHECK_OBJECT(operand2); assert(PyList_CheckExact(operand2)); PyObject *result; if (PyList_CheckExact(*operand1)) { return LIST_EXTEND_FROM_LIST(*operand1, operand2); } else if (PySequence_Check(*operand1)) { result = PySequence_InPlaceConcat(*operand1, operand2); } else { result = PyNumber_InPlaceAdd(*operand1, operand2); } if (unlikely(result == NULL)) { return false; } // We got an object handed, that we have to release. Py_DECREF(*operand1); // That's our return value then. As we use a dedicated variable, it's // OK that way. *operand1 = result; return true; }
static PyObject* Capsule_instantiate(CapsuleObject* self, PyObject* args) { PyObject* addr2refct = GetAddrRefCt(); auto_pyobject ptr = GetPointer(self->capsule); auto_pyobject refct = PyObject_GetItem(addr2refct, *ptr); auto_pyobject inc = PyNumber_InPlaceAdd(*refct, ConstantOne); PyObject *obj = PyObject_CallFunctionObjArgs(Capsule_GetClass(self), self, NULL); if (obj == NULL) return NULL; if (PyObject_SetItem(addr2refct, *ptr, *inc)) { Py_DECREF(obj); return NULL; } return obj; }
static PyObject *Proxy_inplace_add(ProxyObject *self, PyObject *other) { PyObject *object = NULL; Proxy__ENSURE_WRAPPED_OR_RETURN_NULL(self); Proxy__WRAPPED_REPLACE_OR_RETURN_NULL(other); object = PyNumber_InPlaceAdd(self->wrapped, other); if (!object) return NULL; Py_DECREF(self->wrapped); self->wrapped = object; Py_INCREF(self); return (PyObject *)self; }
// This is Python2 int, for Python3 the LONG variant is to be used. bool BINARY_OPERATION_ADD_INT_OBJECT_INPLACE(PyObject **operand1, PyObject *operand2) { assert(operand1); CHECK_OBJECT(*operand1); CHECK_OBJECT(operand2); assert(PyInt_CheckExact(*operand1)); // Something similar for Python3 should exist too. if (PyInt_CheckExact(operand2)) { long a, b, i; a = PyInt_AS_LONG(*operand1); b = PyInt_AS_LONG(operand2); i = a + b; // Detect overflow, in which case, a "long" object would have to be // created, which we won't handle here. TODO: Add an else for that // case. if (likely(!((i ^ a) < 0 && (i ^ b) < 0))) { PyObject *result = PyInt_FromLong(i); Py_DECREF(*operand1); *operand1 = result; return true; } } PyObject *result = PyNumber_InPlaceAdd(*operand1, operand2); if (unlikely(result == NULL)) { return false; } // We got an object handed, that we have to release. Py_DECREF(*operand1); // That's our return value then. As we use a dedicated variable, it's // OK that way. *operand1 = result; return true; }
bool BINARY_OPERATION_ADD_UNICODE_OBJECT_INPLACE(PyObject **operand1, PyObject *operand2) { assert(operand1); CHECK_OBJECT(*operand1); CHECK_OBJECT(operand2); assert(PyUnicode_CheckExact(*operand1)); if (likely(PyUnicode_CheckExact(operand2))) { #if PYTHON_VERSION >= 300 if (Py_REFCNT(*operand1) == 1 && !PyUnicode_CHECK_INTERNED(*operand1)) { // We more or less own the operand, so we might re-use its storage and // execute stuff in-place. return UNICODE_ADD_INCREMENTAL(operand1, operand2); } #endif PyObject *result = UNICODE_CONCAT(*operand1, operand2); if (unlikely(result == NULL)) { return false; } Py_DECREF(*operand1); *operand1 = result; return true; } PyObject *result = PyNumber_InPlaceAdd(*operand1, operand2); if (unlikely(result == NULL)) { return false; } // We got an object handed, that we have to release. Py_DECREF(*operand1); // That's our return value then. As we use a dedicated variable, it's // OK that way. *operand1 = result; return true; }
/* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":72 */ __pyx_r = Py_None; Py_INCREF(Py_None); goto __pyx_L0; __pyx_r = Py_None; Py_INCREF(Py_None); goto __pyx_L0; __pyx_L1:; __Pyx_AddTraceback("pyk8055lib.K8055LibClass.WriteData"); __pyx_r = 0; __pyx_L0:; Py_DECREF(__pyx_v_self); Py_DECREF(__pyx_v_byOut); Py_DECREF(__pyx_v_byDac1); Py_DECREF(__pyx_v_byDac2); return __pyx_r; } static PyObject *__pyx_f_10pyk8055lib_13K8055LibClass_WriteasString(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_10pyk8055lib_13K8055LibClass_WriteasString(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_writedata = 0; BYTE __pyx_v_abyWrite[8]; PyObject *__pyx_v_i; PyObject *__pyx_v_strwrite; PyObject *__pyx_r; PyObject *__pyx_1 = 0; PyObject *__pyx_2 = 0; BYTE __pyx_3; Py_ssize_t __pyx_4; PyObject *__pyx_5 = 0; static char *__pyx_argnames[] = {"writedata",0}; if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_writedata)) return 0; Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_writedata); __pyx_v_i = Py_None; Py_INCREF(Py_None); __pyx_v_strwrite = Py_None; Py_INCREF(Py_None); /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":74 */ if (__Pyx_PrintItem(__pyx_v_writedata) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; goto __pyx_L1;} if (__Pyx_PrintNewline() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; goto __pyx_L1;} /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":76 */ __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; goto __pyx_L1;} Py_DECREF(__pyx_v_i); __pyx_v_i = __pyx_1; __pyx_1 = 0; /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":77 */ __pyx_1 = PyInt_FromLong(7); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;} __pyx_2 = PyObject_GetIter(__pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; for (;;) { __pyx_1 = PyIter_Next(__pyx_2); if (!__pyx_1) { if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; goto __pyx_L1;} break; } Py_DECREF(__pyx_v_i); __pyx_v_i = __pyx_1; __pyx_1 = 0; __pyx_1 = PyObject_GetItem(__pyx_v_writedata, __pyx_v_i); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; goto __pyx_L1;} __pyx_3 = PyInt_AsLong(__pyx_1); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; __pyx_4 = PyInt_AsSsize_t(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; goto __pyx_L1;} (__pyx_v_abyWrite[__pyx_4]) = __pyx_3; } Py_DECREF(__pyx_2); __pyx_2 = 0; /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":79 */ K8055_Write((&((struct __pyx_obj_10pyk8055lib_K8055LibClass *)__pyx_v_self)->ulDevHandle),8,(&(__pyx_v_abyWrite[0]))); /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":80 */ Py_INCREF(__pyx_k3p); Py_DECREF(__pyx_v_strwrite); __pyx_v_strwrite = __pyx_k3p; /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":81 */ __pyx_1 = PyInt_FromLong(0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; goto __pyx_L1;} Py_DECREF(__pyx_v_i); __pyx_v_i = __pyx_1; __pyx_1 = 0; /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":82 */ __pyx_2 = PyInt_FromLong(7); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; goto __pyx_L1;} __pyx_1 = PyObject_GetIter(__pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; for (;;) { __pyx_2 = PyIter_Next(__pyx_1); if (!__pyx_2) { if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; goto __pyx_L1;} break; } Py_DECREF(__pyx_v_i); __pyx_v_i = __pyx_2; __pyx_2 = 0; __pyx_4 = PyInt_AsSsize_t(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; goto __pyx_L1;} __pyx_2 = PyInt_FromLong((__pyx_v_abyWrite[__pyx_4])); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; goto __pyx_L1;} __pyx_5 = PyNumber_InPlaceAdd(__pyx_v_strwrite, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_strwrite); __pyx_v_strwrite = __pyx_5; } Py_DECREF(__pyx_1); __pyx_1 = 0; /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":84 */ Py_INCREF(__pyx_v_strwrite); __pyx_r = __pyx_v_strwrite; goto __pyx_L0; __pyx_r = Py_None; Py_INCREF(Py_None); goto __pyx_L0; __pyx_L1:; Py_XDECREF(__pyx_1); Py_XDECREF(__pyx_2); Py_XDECREF(__pyx_5); __Pyx_AddTraceback("pyk8055lib.K8055LibClass.WriteasString"); __pyx_r = 0; __pyx_L0:; Py_DECREF(__pyx_v_i); Py_DECREF(__pyx_v_strwrite); Py_DECREF(__pyx_v_self); Py_DECREF(__pyx_v_writedata); return __pyx_r; }
/* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":41 */ goto __pyx_L0; __pyx_L0:; Py_DECREF(__pyx_v_self); } static PyObject *__pyx_f_10pyk8055lib_13K8055LibClass_ReadasString(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static PyObject *__pyx_f_10pyk8055lib_13K8055LibClass_ReadasString(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { PyObject *__pyx_v_readdata = 0; BYTE __pyx_v_abyRead[8]; PyObject *__pyx_v_strread; PyObject *__pyx_v_i; PyObject *__pyx_r; char *__pyx_1; PyObject *__pyx_2 = 0; PyObject *__pyx_3 = 0; Py_ssize_t __pyx_4; PyObject *__pyx_5 = 0; static char *__pyx_argnames[] = {"readdata",0}; if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_readdata)) return 0; Py_INCREF(__pyx_v_self); Py_INCREF(__pyx_v_readdata); __pyx_v_strread = Py_None; Py_INCREF(Py_None); __pyx_v_i = Py_None; Py_INCREF(Py_None); /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":43 */ if (__Pyx_PrintItem(__pyx_v_readdata) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; goto __pyx_L1;} if (__Pyx_PrintNewline() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 43; goto __pyx_L1;} /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":45 */ __pyx_1 = PyString_AsString(__pyx_v_readdata); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 45; goto __pyx_L1;} strncpy(((char *)(&(__pyx_v_abyRead[0]))),__pyx_1,8); /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":46 */ K8055_Read((&((struct __pyx_obj_10pyk8055lib_K8055LibClass *)__pyx_v_self)->ulDevHandle),8,(&(__pyx_v_abyRead[0]))); /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":47 */ Py_INCREF(__pyx_k3p); Py_DECREF(__pyx_v_strread); __pyx_v_strread = __pyx_k3p; /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":48 */ __pyx_2 = PyInt_FromLong(0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; goto __pyx_L1;} Py_DECREF(__pyx_v_i); __pyx_v_i = __pyx_2; __pyx_2 = 0; /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":49 */ __pyx_2 = PyInt_FromLong(7); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;} __pyx_3 = PyObject_GetIter(__pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; for (;;) { __pyx_2 = PyIter_Next(__pyx_3); if (!__pyx_2) { if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; goto __pyx_L1;} break; } Py_DECREF(__pyx_v_i); __pyx_v_i = __pyx_2; __pyx_2 = 0; __pyx_4 = PyInt_AsSsize_t(__pyx_v_i); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;} __pyx_2 = PyInt_FromLong((__pyx_v_abyRead[__pyx_4])); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;} __pyx_5 = PyNumber_InPlaceAdd(__pyx_v_strread, __pyx_2); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_v_strread); __pyx_v_strread = __pyx_5; } Py_DECREF(__pyx_3); __pyx_3 = 0; /* "G:/Projekte/svn_mynew/svnroot/os2/usb/k8055/pyk8055/pyk8055lib.pyx":51 */ Py_INCREF(__pyx_v_strread); __pyx_r = __pyx_v_strread; goto __pyx_L0; __pyx_r = Py_None; Py_INCREF(Py_None); goto __pyx_L0; __pyx_L1:; Py_XDECREF(__pyx_2); Py_XDECREF(__pyx_3); Py_XDECREF(__pyx_5); __Pyx_AddTraceback("pyk8055lib.K8055LibClass.ReadasString"); __pyx_r = 0; __pyx_L0:; Py_DECREF(__pyx_v_strread); Py_DECREF(__pyx_v_i); Py_DECREF(__pyx_v_self); Py_DECREF(__pyx_v_readdata); return __pyx_r; }
static int __pyx_f_11inplace_lhs_f(void) { int __pyx_v_i; int __pyx_v_j; int __pyx_v_k; float __pyx_v_x; float __pyx_v_y; float __pyx_v_z; PyObject *__pyx_v_a; PyObject *__pyx_v_b; PyObject *__pyx_v_c; PyObject *__pyx_v_d; int __pyx_v_m[3]; struct __pyx_t_11inplace_lhs_S __pyx_v_s; int __pyx_r; PyObject *__pyx_1 = 0; PyObject *__pyx_2 = 0; PyObject *__pyx_3 = 0; __pyx_v_a = Py_None; Py_INCREF(Py_None); __pyx_v_b = Py_None; Py_INCREF(Py_None); __pyx_v_c = Py_None; Py_INCREF(Py_None); __pyx_v_d = Py_None; Py_INCREF(Py_None); /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":11 */ __pyx_v_i += (__pyx_v_j + __pyx_v_k); /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":12 */ __pyx_v_x += (__pyx_v_y + __pyx_v_z); /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":13 */ __pyx_v_x += __pyx_v_i; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":14 */ __pyx_1 = PyNumber_Add(__pyx_v_b, __pyx_v_c); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; goto __pyx_L1;} __pyx_2 = PyNumber_InPlaceAdd(__pyx_v_a, __pyx_1); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 14; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_v_a); __pyx_v_a = __pyx_2; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":15 */ __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_n_g); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;} __pyx_2 = PyNumber_InPlaceAdd(__pyx_1, __pyx_v_a); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; if (PyObject_SetAttr(__pyx_m, __pyx_n_g, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":16 */ (__pyx_v_m[__pyx_v_i]) += __pyx_v_j; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":17 */ __pyx_1 = PyNumber_Add(__pyx_v_b, __pyx_v_c); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; goto __pyx_L1;} __pyx_2 = PyInt_FromLong(__pyx_v_i); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; goto __pyx_L1;} __pyx_3 = PyObject_GetItem(__pyx_v_a, __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; goto __pyx_L1;} __pyx_3 = PyNumber_InPlaceAdd(__pyx_2, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; if (PyObject_SetItem(__pyx_v_a, __pyx_2, __pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 17; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":18 */ __pyx_2 = PyNumber_Add(__pyx_v_b, __pyx_v_c); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} __pyx_1 = PyObject_GetItem(__pyx_v_a, __pyx_2); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} __pyx_3 = PyNumber_InPlaceAdd(__pyx_1, __pyx_v_d); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; if (PyObject_SetItem(__pyx_v_a, __pyx_2, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":19 */ __pyx_1 = PyNumber_Add(__pyx_v_a, __pyx_v_b); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;} __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_v_c); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;} __pyx_2 = PyNumber_InPlaceAdd(__pyx_3, __pyx_v_d); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (PyObject_SetItem(__pyx_1, __pyx_v_c, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":20 */ __pyx_3 = PySequence_GetSlice(__pyx_v_a, __pyx_v_i, __pyx_v_j); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; goto __pyx_L1;} __pyx_2 = PyNumber_InPlaceAdd(__pyx_3, __pyx_v_b); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (PySequence_SetSlice(__pyx_v_a, __pyx_v_i, __pyx_v_j, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 20; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":21 */ __pyx_1 = PyNumber_Add(__pyx_v_a, __pyx_v_b); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; goto __pyx_L1;} __pyx_3 = PySequence_GetSlice(__pyx_1, __pyx_v_i, __pyx_v_j); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; goto __pyx_L1;} __pyx_2 = PyNumber_InPlaceAdd(__pyx_3, __pyx_v_c); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (PySequence_SetSlice(__pyx_1, __pyx_v_i, __pyx_v_j, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 21; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_1); __pyx_1 = 0; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":22 */ __pyx_3 = PyNumber_Add(__pyx_v_c, __pyx_v_d); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; goto __pyx_L1;} __pyx_2 = PyObject_GetAttr(__pyx_v_a, __pyx_n_b); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; goto __pyx_L1;} __pyx_1 = PyNumber_InPlaceAdd(__pyx_2, __pyx_3); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; goto __pyx_L1;} Py_DECREF(__pyx_2); __pyx_2 = 0; Py_DECREF(__pyx_3); __pyx_3 = 0; if (PyObject_SetAttr(__pyx_v_a, __pyx_n_b, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 22; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":23 */ __pyx_2 = PyNumber_Add(__pyx_v_a, __pyx_v_b); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; goto __pyx_L1;} __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_n_c); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; goto __pyx_L1;} __pyx_1 = PyNumber_InPlaceAdd(__pyx_3, __pyx_v_d); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; goto __pyx_L1;} Py_DECREF(__pyx_3); __pyx_3 = 0; if (PyObject_SetAttr(__pyx_2, __pyx_n_c, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 23; goto __pyx_L1;} Py_DECREF(__pyx_1); __pyx_1 = 0; Py_DECREF(__pyx_2); __pyx_2 = 0; /* "/Local/Projects/D/Pyrex/Source/Tests/10/inplace_lhs.pyx":24 */ __pyx_v_s.q += __pyx_v_i; __pyx_r = 0; goto __pyx_L0; __pyx_L1:; Py_XDECREF(__pyx_1); Py_XDECREF(__pyx_2); Py_XDECREF(__pyx_3); Py_XDECREF(__pyx_4); __Pyx_AddTraceback("inplace_lhs.f"); __pyx_r = (-1); __pyx_L0:; Py_DECREF(__pyx_v_a); Py_DECREF(__pyx_v_b); Py_DECREF(__pyx_v_c); Py_DECREF(__pyx_v_d); return __pyx_r; }
NUITKA_MAY_BE_UNUSED static bool BINARY_OPERATION_ADD_INPLACE( PyObject **operand1, PyObject *operand2 ) { assert( operand1 ); CHECK_OBJECT( *operand1 ); CHECK_OBJECT( operand2 ); #if PYTHON_VERSION < 300 // Something similar for Python3 should exist too. if ( PyInt_CheckExact( *operand1 ) && PyInt_CheckExact( operand2 ) ) { long a, b, i; a = PyInt_AS_LONG( *operand1 ); b = PyInt_AS_LONG( operand2 ); i = a + b; // Detect overflow, in which case, a "long" object would have to be // created, which we won't handle here. TODO: Add an else for that // case. if (likely(!( (i^a) < 0 && (i^b) < 0 ) )) { PyObject *result = PyInt_FromLong( i ); Py_DECREF( *operand1 ); *operand1 = result; return true; } } #endif #if PYTHON_VERSION < 300 if ( Py_REFCNT( *operand1 ) == 1 ) { // We more or less own the operand, so we might re-use its storage and // execute stuff in-place. if ( PyString_CheckExact( *operand1 ) && !PyString_CHECK_INTERNED( *operand1 ) && PyString_CheckExact( operand2 ) ) { return STRING_ADD_INCREMENTAL( operand1, operand2 ); } else if ( PyFloat_CheckExact( *operand1 ) && PyFloat_CheckExact( operand2 ) ) { return FLOAT_ADD_INCREMENTAL( operand1, operand2 ); } } // Strings are to be treated differently. if ( PyString_CheckExact( *operand1 ) && PyString_CheckExact( operand2 ) ) { PyString_Concat( operand1, operand2 ); return !ERROR_OCCURRED(); } #else if ( Py_REFCNT( *operand1 ) == 1 ) { // We more or less own the operand, so we might re-use its storage and // execute stuff in-place. if ( PyUnicode_CheckExact( *operand1 ) && !PyUnicode_CHECK_INTERNED( *operand1 ) && PyUnicode_CheckExact( operand2 ) ) { return UNICODE_ADD_INCREMENTAL( operand1, operand2 ); } else if ( PyFloat_CheckExact( *operand1 ) && PyFloat_CheckExact( operand2 ) ) { return FLOAT_ADD_INCREMENTAL( operand1, operand2 ); } } // Strings are to be treated differently. if ( PyUnicode_CheckExact( *operand1 ) && PyUnicode_CheckExact( operand2 ) ) { PyObject *result = PyUnicode_Concat( *operand1, operand2 ); if (unlikely( result == NULL )) { return false; } Py_DECREF( *operand1 ); *operand1 = result; return true; } #endif PyObject *result = PyNumber_InPlaceAdd( *operand1, operand2 ); if (unlikely( result == NULL )) { return false; } // We got an object handed, that we have to release. Py_DECREF( *operand1 ); // That's our return value then. As we use a dedicated variable, it's // OK that way. *operand1 = result; return true; }