From c53436ffe5c9218e48f5fbfa531a26ab8d739bab Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Tue, 17 May 2016 11:52:01 +0000 Subject: [PATCH] [0.3.x] added : typedVar.castTo method ( cast variable to the type and return new typedVar instance ) git-svn-id: https://pykd.svn.codeplex.com/svn@90986 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/pymod.cpp | 4 ++++ pykd/pytypedvar.h | 12 ++++++++++++ test/scripts/typedvar.py | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index 72de152..5007617 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -827,6 +827,10 @@ BOOST_PYTHON_MODULE( pykd ) "Return value by pointer" ) .def("type", TypedVarAdapter::getType, "Return typeInfo instance" ) + .def("castTo", TypedVarAdapter::castByName, + "Cast variable to the type and return new typedVar instance") + .def("castTo", TypedVarAdapter::castByTypeInfo, + "Cast variable to the type and return new typedVar instance") .def("__getattr__", TypedVarAdapter::getFieldAttr, "Return field of structure as an object attribute" ) .def( "__str__", TypedVarAdapter::print ) diff --git a/pykd/pytypedvar.h b/pykd/pytypedvar.h index 00d190f..f020010 100644 --- a/pykd/pytypedvar.h +++ b/pykd/pytypedvar.h @@ -173,6 +173,18 @@ struct TypedVarAdapter { { return !isZero(typedVar); } + + static kdlib::TypedVarPtr castByName(kdlib::TypedVar& typedVar, const std::wstring &typeName) + { + AutoRestorePyState pystate; + return typedVar.castTo(typeName); + } + + static kdlib::TypedVarPtr castByTypeInfo(kdlib::TypedVar& typedVar, const kdlib::TypeInfoPtr& typeInfo) + { + AutoRestorePyState pystate; + return typedVar.castTo(typeInfo); + } }; } // end namespace pykd diff --git a/test/scripts/typedvar.py b/test/scripts/typedvar.py index 1dc0d60..5635648 100644 --- a/test/scripts/typedvar.py +++ b/test/scripts/typedvar.py @@ -369,3 +369,7 @@ class TypedVarTest( unittest.TestCase ): tv = target.module.typedVar( "structTest", target.module.g_structTest ) self.assertFalse(tv==None) self.assertTrue(tv!=None) + + def testCastTo(self): + self.assertEqual(0xD2, target.module.typedVar( "ulonglongVar" ).castTo("UInt1B")) + self.assertEqual(0, target.module.typedVar( "g_structTest" ).castTo("UInt4B"))