mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-19 02:53:22 +08:00
[0.3.x] added : typedVar.method has optional argument 'prototype' to work with overloaded methods
git-svn-id: https://pykd.svn.codeplex.com/svn@91089 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
d1a4b3e089
commit
03ff35d64f
@ -938,7 +938,7 @@ BOOST_PYTHON_MODULE( pykd )
|
||||
"Return list of tuple ( filedName, fieldOffset, fieldValue )" )
|
||||
.def( "fieldName", TypedVarAdapter::getElementName,
|
||||
"Return name of struct field by index" )
|
||||
.def("method", TypedVarAdapter::getMethodByName,
|
||||
.def("method", TypedVarAdapter::getMethodByName, ( python::arg("name"), python::arg("prototype") = "" ),
|
||||
"Return method of class as an object attribute" )
|
||||
.def("deref",TypedVarAdapter::deref,
|
||||
"Return value by pointer" )
|
||||
|
@ -129,10 +129,10 @@ struct TypedVarAdapter {
|
||||
return typedVar.getElement( index );
|
||||
}
|
||||
|
||||
static kdlib::TypedVarPtr getMethodByName(kdlib::TypedVar& typedVar, const std::wstring &name)
|
||||
static kdlib::TypedVarPtr getMethodByName(kdlib::TypedVar& typedVar, const std::wstring &name, const std::wstring &prototype = L"")
|
||||
{
|
||||
AutoRestorePyState pystate;
|
||||
return typedVar.getMethod(name);
|
||||
return typedVar.getMethod(name, prototype);
|
||||
}
|
||||
|
||||
static std::wstring print( kdlib::TypedVar& typedVar )
|
||||
|
@ -401,12 +401,18 @@ class TypedVarTest( unittest.TestCase ):
|
||||
|
||||
def testCallMethod(self):
|
||||
g_classChild = target.module.typedVar("g_classChild")
|
||||
self.assertEqual( 1000*5, g_classChild.method("childMethod").call(10) )
|
||||
self.assertEqual( 1000*5, g_classChild.childMethod(10) )
|
||||
|
||||
def testCallStdStr(self):
|
||||
g_stdString = target.module.typedVar("g_stdString")
|
||||
self.assertEqual( "testString".find('S'), g_stdString.find_first_of(ord('S'), 0) )
|
||||
|
||||
def testCallOverloadMethod(self):
|
||||
g_classChild = target.module.typedVar("g_classChild")
|
||||
self.assertEqual( 10*10, g_classChild.method("overloadMethod", "Int4B(__thiscall)(Int4B)").call(10))
|
||||
self.assertEqual( 5*8, g_classChild.method("overloadMethod", "Int4B(__thiscall)(Int4B,Int4B)").call(5,8))
|
||||
|
||||
def testGetTypedVar(self):
|
||||
addr = pykd.getOffset("g_structTest")
|
||||
self.assertTrue( None != target.module.type( "structTest" ).getTypedVar(addr) )
|
||||
|
@ -329,7 +329,7 @@ class TypeInfoTest( unittest.TestCase ):
|
||||
self.assertRaises(pykd.TypeException, pykd.baseTypes.UInt8B.arrayOf, 0xFFFFFFFFFFFFFFFF)
|
||||
|
||||
def testMethodCount(self):
|
||||
self.assertEqual( 8, target.module.type("classChild").getNumberMethods() )
|
||||
self.assertEqual( 12, target.module.type("classChild").getNumberMethods() )
|
||||
|
||||
def testGetMethod(self):
|
||||
self.assertEqual( "Int4B(__thiscall classChild::)(Int4B)", target.module.type("classChild").method("childMethod").name() )
|
||||
|
Loading…
Reference in New Issue
Block a user