Generated by Cython 0.29.23
Yellow lines hint at Python interaction.
Click on a line that starts with a "+
" to see the C code that Cython generated for it.
Raw output: opcode_metric.c
+01: import types
__pyx_t_1 = __Pyx_Import(__pyx_n_s_types, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_types, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
02: from cpython.object cimport PyObject_HasAttr
03: from py_pal.data_collection.metric cimport CallMetric
04:
05: from py_pal.data_collection.arguments cimport unpack_oparg
06:
+07: from py_pal.data_collection.metric import AvgBuiltinFuncComplexity
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_AvgBuiltinFuncComplexity); __Pyx_GIVEREF(__pyx_n_s_AvgBuiltinFuncComplexity); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_AvgBuiltinFuncComplexity); __pyx_t_2 = __Pyx_Import(__pyx_n_s_py_pal_data_collection_metric, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_AvgBuiltinFuncComplexity); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_AvgBuiltinFuncComplexity, __pyx_t_1) < 0) __PYX_ERR(0, 7, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
08:
+09: cdef class OpcodeMetric:
struct __pyx_vtabstruct_6py_pal_15data_collection_13opcode_metric_OpcodeMetric { Py_ssize_t (*get_value)(struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *, PyFrameObject *); Py_ssize_t (*get_function_opcodes)(struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *, PyObject *, PyObject *, PyObject *); int (*in_complexity_map)(struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *, PyObject *); }; static struct __pyx_vtabstruct_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *__pyx_vtabptr_6py_pal_15data_collection_13opcode_metric_OpcodeMetric;
10: """Base opcode metric."""
11:
+12: def __init__(self):
/* Python wrapper */ static int __pyx_pw_6py_pal_15data_collection_13opcode_metric_12OpcodeMetric_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ static char __pyx_doc_6py_pal_15data_collection_13opcode_metric_12OpcodeMetric___init__[] = "`builtin_calls` counts calls to Python builtin functions. `hits` indicates how many builtin calls were\n weighted by a function from :class:`py_pal.data_collection.AvgBuiltinFuncComplexity`.\n "; #if CYTHON_COMPILING_IN_CPYTHON struct wrapperbase __pyx_wrapperbase_6py_pal_15data_collection_13opcode_metric_12OpcodeMetric___init__; #endif static int __pyx_pw_6py_pal_15data_collection_13opcode_metric_12OpcodeMetric_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1; __pyx_r = __pyx_pf_6py_pal_15data_collection_13opcode_metric_12OpcodeMetric___init__(((struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *)__pyx_v_self)); /* function exit code */ __Pyx_RefNannyFinishContext(); return __pyx_r; } static int __pyx_pf_6py_pal_15data_collection_13opcode_metric_12OpcodeMetric___init__(struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *__pyx_v_self) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__", 0); /* … */ /* function exit code */ __pyx_r = 0; __Pyx_RefNannyFinishContext(); return __pyx_r; }
13: """`builtin_calls` counts calls to Python builtin functions. `hits` indicates how many builtin calls were
14: weighted by a function from :class:`py_pal.data_collection.AvgBuiltinFuncComplexity`.
15: """
+16: self.hits = 0
__pyx_v_self->hits = 0;
+17: self.builtin_calls = 0
__pyx_v_self->builtin_calls = 0;
18:
+19: cdef Py_ssize_t get_value(self, FrameType frame):
static Py_ssize_t __pyx_f_6py_pal_15data_collection_13opcode_metric_12OpcodeMetric_get_value(CYTHON_UNUSED struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *__pyx_v_self, CYTHON_UNUSED PyFrameObject *__pyx_v_frame) { Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_value", 0); /* … */ /* function exit code */ __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
+20: return 1
__pyx_r = 1; goto __pyx_L0;
21:
+22: cdef bint in_complexity_map(self, function):
static int __pyx_f_6py_pal_15data_collection_13opcode_metric_12OpcodeMetric_in_complexity_map(CYTHON_UNUSED struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *__pyx_v_self, PyObject *__pyx_v_function) { int __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("in_complexity_map", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); __Pyx_XDECREF(__pyx_t_5); __Pyx_WriteUnraisable("py_pal.data_collection.opcode_metric.OpcodeMetric.in_complexity_map", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); __pyx_r = 0; __pyx_L0:; __Pyx_RefNannyFinishContext(); return __pyx_r; }
+23: return PyObject_HasAttr(function, '__qualname__') and function.__qualname__ in AvgBuiltinFuncComplexity.mapping
__pyx_t_2 = (PyObject_HasAttr(__pyx_v_function, __pyx_n_s_qualname) != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L3_bool_binop_done; } __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_function, __pyx_n_s_qualname); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_AvgBuiltinFuncComplexity); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_mapping); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_t_5, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 23, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = (__pyx_t_2 != 0); __pyx_t_1 = __pyx_t_6; __pyx_L3_bool_binop_done:; __pyx_r = __pyx_t_1; goto __pyx_L0;
24:
+25: cdef Py_ssize_t get_function_opcodes(self, object function, object args, object kwargs):
static Py_ssize_t __pyx_f_6py_pal_15data_collection_13opcode_metric_12OpcodeMetric_get_function_opcodes(struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *__pyx_v_self, PyObject *__pyx_v_function, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) { struct __pyx_obj_6py_pal_15data_collection_6metric_CallMetric *__pyx_v_instance = 0; PyObject *__pyx_v_complexity_class = NULL; Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_function_opcodes", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); __Pyx_XDECREF(__pyx_t_7); __Pyx_WriteUnraisable("py_pal.data_collection.opcode_metric.OpcodeMetric.get_function_opcodes", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF((PyObject *)__pyx_v_instance); __Pyx_XDECREF(__pyx_v_complexity_class); __Pyx_RefNannyFinishContext(); return __pyx_r; }
26: cdef CallMetric instance
27:
+28: if isinstance(function, types.BuiltinFunctionType):
__Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_types); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_BuiltinFunctionType); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = PyObject_IsInstance(__pyx_v_function, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 28, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* … */ }
29: # Statistics
+30: self.builtin_calls += 1
__pyx_v_self->builtin_calls = (__pyx_v_self->builtin_calls + 1);
+31: if self.in_complexity_map(function):
__pyx_t_4 = (((struct __pyx_vtabstruct_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *)__pyx_v_self->__pyx_vtab)->in_complexity_map(__pyx_v_self, __pyx_v_function) != 0); if (__pyx_t_4) { /* … */ }
+32: self.hits += 1
__pyx_v_self->hits = (__pyx_v_self->hits + 1);
33:
+34: if self.in_complexity_map(function):
__pyx_t_4 = (((struct __pyx_vtabstruct_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *)__pyx_v_self->__pyx_vtab)->in_complexity_map(__pyx_v_self, __pyx_v_function) != 0); if (__pyx_t_4) { /* … */ }
+35: complexity_class = AvgBuiltinFuncComplexity.mapping[function.__qualname__]
__Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_AvgBuiltinFuncComplexity); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_mapping); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_function, __pyx_n_s_qualname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 35, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_complexity_class = __pyx_t_5; __pyx_t_5 = 0;
+36: instance = complexity_class(args, kwargs)
__Pyx_INCREF(__pyx_v_complexity_class); __pyx_t_2 = __pyx_v_complexity_class; __pyx_t_1 = NULL; __pyx_t_6 = 0; if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_1)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_1); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); __pyx_t_6 = 1; } } #if CYTHON_FAST_PYCALL if (PyFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_args, __pyx_v_kwargs}; __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 36, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_5); } else #endif #if CYTHON_FAST_PYCCALL if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_args, __pyx_v_kwargs}; __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 36, __pyx_L1_error) __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GOTREF(__pyx_t_5); } else #endif { __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 36, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); if (__pyx_t_1) { __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1); __pyx_t_1 = NULL; } __Pyx_INCREF(__pyx_v_args); __Pyx_GIVEREF(__pyx_v_args); PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_args); __Pyx_INCREF(__pyx_v_kwargs); __Pyx_GIVEREF(__pyx_v_kwargs); PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_kwargs); __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 36, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_6py_pal_15data_collection_6metric_CallMetric))))) __PYX_ERR(0, 36, __pyx_L1_error) __pyx_v_instance = ((struct __pyx_obj_6py_pal_15data_collection_6metric_CallMetric *)__pyx_t_5); __pyx_t_5 = 0;
+37: return instance.value()
__pyx_r = ((struct __pyx_vtabstruct_6py_pal_15data_collection_6metric_CallMetric *)__pyx_v_instance->__pyx_vtab)->value(__pyx_v_instance); goto __pyx_L0;
38:
+39: return 1
__pyx_r = 1; goto __pyx_L0;
40:
+41: cdef class AdvancedOpcodeMetric(OpcodeMetric):
struct __pyx_vtabstruct_6py_pal_15data_collection_13opcode_metric_AdvancedOpcodeMetric { struct __pyx_vtabstruct_6py_pal_15data_collection_13opcode_metric_OpcodeMetric __pyx_base; }; static struct __pyx_vtabstruct_6py_pal_15data_collection_13opcode_metric_AdvancedOpcodeMetric *__pyx_vtabptr_6py_pal_15data_collection_13opcode_metric_AdvancedOpcodeMetric;
42: """Extended opcode metric that assigns a value dependent on the arguments to builtin calls instead of a constant
43: value.
44: """
+45: cdef Py_ssize_t get_value(self, FrameType frame):
static Py_ssize_t __pyx_f_6py_pal_15data_collection_13opcode_metric_20AdvancedOpcodeMetric_get_value(struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_AdvancedOpcodeMetric *__pyx_v_self, PyFrameObject *__pyx_v_frame) { PyObject *__pyx_v_code = NULL; PyObject *__pyx_v_op = NULL; PyObject *__pyx_v_argc = NULL; PyObject *__pyx_v_valuestack = NULL; PyObject *__pyx_v_args = NULL; PyObject *__pyx_v__callable = NULL; PyObject *__pyx_v_kw_names = NULL; PyObject *__pyx_v_kwargs = NULL; PyObject *__pyx_v_name = NULL; Py_ssize_t __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("get_value", 0); /* … */ /* function exit code */ __pyx_L1_error:; __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_WriteUnraisable("py_pal.data_collection.opcode_metric.AdvancedOpcodeMetric.get_value", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); __pyx_r = 0; __pyx_L0:; __Pyx_XDECREF(__pyx_v_code); __Pyx_XDECREF(__pyx_v_op); __Pyx_XDECREF(__pyx_v_argc); __Pyx_XDECREF(__pyx_v_valuestack); __Pyx_XDECREF(__pyx_v_args); __Pyx_XDECREF(__pyx_v__callable); __Pyx_XDECREF(__pyx_v_kw_names); __Pyx_XDECREF(__pyx_v_kwargs); __Pyx_XDECREF(__pyx_v_name); __Pyx_RefNannyFinishContext(); return __pyx_r; }
+46: if frame.f_lasti < 0:
__pyx_t_1 = ((__pyx_v_frame->f_lasti < 0) != 0); if (__pyx_t_1) { /* … */ }
+47: return 1
__pyx_r = 1; goto __pyx_L0;
48:
+49: code = frame.f_code.co_code
__pyx_t_2 = __pyx_v_frame->f_code->co_code;
__Pyx_INCREF(__pyx_t_2);
__pyx_v_code = __pyx_t_2;
__pyx_t_2 = 0;
+50: op = code[frame.f_lasti]
__pyx_t_2 = __Pyx_GetItemInt(__pyx_v_code, __pyx_v_frame->f_lasti, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_op = __pyx_t_2; __pyx_t_2 = 0;
51:
+52: if op == 131:
__pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_131, 0x83, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { /* … */ }
53: # CALL_FUNCTION
+54: argc = unpack_oparg(code[frame.f_lasti:])
__pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_v_code, __pyx_v_frame->f_lasti, 0, NULL, NULL, NULL, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __pyx_f_6py_pal_15data_collection_9arguments_unpack_oparg(__pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_argc = __pyx_t_3; __pyx_t_3 = 0;
+55: valuestack = <list> get_valuestack(<PyFrameObject *> frame, argc + 1)
__pyx_t_3 = __Pyx_PyInt_AddObjC(__pyx_v_argc, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_4 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 55, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_5 = get_valuestack(((PyFrameObject *)__pyx_v_frame), __pyx_t_4); __pyx_t_3 = ((PyObject *)__pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_v_valuestack = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+56: args = valuestack[1:]
if (unlikely(__pyx_v_valuestack == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 56, __pyx_L1_error) } __pyx_t_3 = __Pyx_PyList_GetSlice(__pyx_v_valuestack, 1, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_v_args = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
+57: _callable = valuestack[0]
if (unlikely(__pyx_v_valuestack == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); __PYX_ERR(0, 57, __pyx_L1_error) } __pyx_t_3 = PyList_GET_ITEM(__pyx_v_valuestack, 0); __Pyx_INCREF(__pyx_t_3); __pyx_v__callable = __pyx_t_3; __pyx_t_3 = 0;
58:
+59: return self.get_function_opcodes(_callable, args, {})
__pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = ((struct __pyx_vtabstruct_6py_pal_15data_collection_13opcode_metric_AdvancedOpcodeMetric *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_function_opcodes(((struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *)__pyx_v_self), __pyx_v__callable, __pyx_v_args, __pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L0;
60:
+61: elif op == 141:
__pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_141, 0x8D, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 61, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_1) { /* … */ }
62: # CALL_FUNCTION_KW
+63: argc = unpack_oparg(code[frame.f_lasti:])
__pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_code, __pyx_v_frame->f_lasti, 0, NULL, NULL, NULL, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __pyx_f_6py_pal_15data_collection_9arguments_unpack_oparg(__pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_argc = __pyx_t_2; __pyx_t_2 = 0;
+64: valuestack = <list> get_valuestack(<PyFrameObject *> frame, argc + 2)
__pyx_t_2 = __Pyx_PyInt_AddObjC(__pyx_v_argc, __pyx_int_2, 2, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 64, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_4 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 64, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_5 = get_valuestack(((PyFrameObject *)__pyx_v_frame), __pyx_t_4); __pyx_t_2 = ((PyObject *)__pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_v_valuestack = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
65:
+66: _callable = valuestack.pop(0)
if (unlikely(__pyx_v_valuestack == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop"); __PYX_ERR(0, 66, __pyx_L1_error) } __pyx_t_2 = __Pyx_PyList_PopIndex(__pyx_v_valuestack, __pyx_int_0, 0, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v__callable = __pyx_t_2; __pyx_t_2 = 0;
+67: kw_names = valuestack.pop()
if (unlikely(__pyx_v_valuestack == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop"); __PYX_ERR(0, 67, __pyx_L1_error) } __pyx_t_2 = __Pyx_PyList_Pop(__pyx_v_valuestack); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_kw_names = __pyx_t_2; __pyx_t_2 = 0;
+68: kwargs = {}
__pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 68, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_kwargs = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+69: for name in kw_names:
if (likely(PyList_CheckExact(__pyx_v_kw_names)) || PyTuple_CheckExact(__pyx_v_kw_names)) { __pyx_t_2 = __pyx_v_kw_names; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0; __pyx_t_6 = NULL; } else { __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_kw_names); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 69, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_2))) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 69, __pyx_L1_error) #else __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif } else { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 69, __pyx_L1_error) #else __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 69, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif } } else { __pyx_t_3 = __pyx_t_6(__pyx_t_2); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 69, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_3); } __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_3); __pyx_t_3 = 0; /* … */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+70: kwargs[name] = valuestack.pop()
if (unlikely(__pyx_v_valuestack == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop"); __PYX_ERR(0, 70, __pyx_L1_error) } __pyx_t_3 = __Pyx_PyList_Pop(__pyx_v_valuestack); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (unlikely(PyDict_SetItem(__pyx_v_kwargs, __pyx_v_name, __pyx_t_3) < 0)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
71:
+72: return self.get_function_opcodes(_callable, valuestack, kwargs)
__pyx_r = ((struct __pyx_vtabstruct_6py_pal_15data_collection_13opcode_metric_AdvancedOpcodeMetric *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.get_function_opcodes(((struct __pyx_obj_6py_pal_15data_collection_13opcode_metric_OpcodeMetric *)__pyx_v_self), __pyx_v__callable, __pyx_v_valuestack, __pyx_v_kwargs); goto __pyx_L0;
73:
+74: return 1
__pyx_r = 1; goto __pyx_L0;