diff --git a/include/typings/pkpy.pyi b/include/typings/pkpy.pyi index e6837216..36ed66d9 100644 --- a/include/typings/pkpy.pyi +++ b/include/typings/pkpy.pyi @@ -14,3 +14,6 @@ class TValue[T]: def memory_usage() -> str: """Return a summary of the memory usage.""" + +def is_user_defined_type(t: type) -> bool: + """Check if a type is user-defined. This means the type was created by executing python `class` statement.""" \ No newline at end of file diff --git a/src/modules/pkpy.c b/src/modules/pkpy.c index 594fee47..f1a76c2f 100644 --- a/src/modules/pkpy.c +++ b/src/modules/pkpy.c @@ -55,6 +55,14 @@ static bool pkpy_memory_usage(int argc, py_Ref argv) { return true; } +static bool pkpy_is_user_defined_type(int argc, py_Ref argv) { + PY_CHECK_ARGC(1); + PY_CHECK_ARG_TYPE(0, tp_type); + py_TypeInfo* ti = pk__type_info(py_totype(argv)); + py_newbool(py_retval(), ti->is_python); + return true; +} + void pk__add_module_pkpy() { py_Ref mod = py_newmodule("pkpy"); @@ -90,6 +98,7 @@ void pk__add_module_pkpy() { py_pop(); py_bindfunc(mod, "memory_usage", pkpy_memory_usage); + py_bindfunc(mod, "is_user_defined_type", pkpy_is_user_defined_type); } #undef DEF_TVALUE_METHODS \ No newline at end of file diff --git a/tests/91_pdb.py b/tests/91_pdb.py deleted file mode 100644 index f60ef89d..00000000 --- a/tests/91_pdb.py +++ /dev/null @@ -1,19 +0,0 @@ -# a = 1 -# b = 2 - -# print(a, b) - - -# def f(a, b): -# b = a + b -# print(a, b) -# return b - -# def g(a, b): -# breakpoint() -# c = f(a, b) -# return c - -# g(1, 2) -# f(3, 4) - diff --git a/tests/92_pkpy.py b/tests/92_pkpy.py new file mode 100644 index 00000000..8c0b164d --- /dev/null +++ b/tests/92_pkpy.py @@ -0,0 +1,8 @@ +from pkpy import is_user_defined_type + +class A: + pass + +assert is_user_defined_type(A) +assert not is_user_defined_type(int) +assert not is_user_defined_type(dict) \ No newline at end of file