From 85028a9a1b4337d1da298d252aa1aa297c3c296f Mon Sep 17 00:00:00 2001 From: ussrhero Date: Tue, 17 Sep 2019 00:30:20 +0300 Subject: [PATCH] added TypeInfo.isConstField method (return True if a field is a const field) --- pykd/pymod.cpp | 4 ++++ pykd/pytypeinfo.h | 13 +++++++++++++ test/scripts/typeinfo.py | 7 ++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index 1dff50b..08f899a 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -917,6 +917,10 @@ void pykd_init() "Return True if a field is a static field by field name") .def("isStaticField", TypeInfoAdapter::isStaticFieldByIndex, "Return True if a field is a static field by field name") + .def("isConstField", TypeInfoAdapter::isConstField, + "Return True if a field is a const field by field name") + .def("isConstField", TypeInfoAdapter::isConstFieldByIndex, + "Return True if a field is a const field by field name") .def("bitOffset", TypeInfoAdapter::getBitOffset, "Return bit field's offset") .def("bitWidth", TypeInfoAdapter::getBitWidth, diff --git a/pykd/pytypeinfo.h b/pykd/pytypeinfo.h index f65b6e1..2c39472 100644 --- a/pykd/pytypeinfo.h +++ b/pykd/pytypeinfo.h @@ -155,6 +155,19 @@ struct TypeInfoAdapter : public kdlib::TypeInfo { return typeInfo->isStaticMember(index); } + + static bool isConstField(const kdlib::TypeInfoPtr &typeInfo, const std::wstring &name) + { + AutoRestorePyState pystate; + return typeInfo->isConstMember(name); + } + + static bool isConstFieldByIndex(const kdlib::TypeInfoPtr &typeInfo, size_t index) + { + AutoRestorePyState pystate; + return typeInfo->isConstMember(index); + } + static kdlib::TypeInfoPtr getElementByName( kdlib::TypeInfo &typeInfo, const std::wstring &name ) { AutoRestorePyState pystate; diff --git a/test/scripts/typeinfo.py b/test/scripts/typeinfo.py index 817879a..c0f2a2c 100644 --- a/test/scripts/typeinfo.py +++ b/test/scripts/typeinfo.py @@ -380,4 +380,9 @@ class TypeInfoTest( unittest.TestCase ): def testIsStaticField(self): ti = pykd.typeInfo("classChild") self.assertTrue(ti.isStaticField("m_staticField")) - self.assertFalse(ti.isStaticField("m_baseField")) \ No newline at end of file + self.assertFalse(ti.isStaticField("m_baseField")) + + def testIsConstField(self): + ti = pykd.typeInfo("classChild") + self.assertTrue(ti.isStaticField("m_staticConst")) + self.assertFalse(ti.isConstField("m_staticConst")) \ No newline at end of file