From 683241ce2f1fc18f49d8ec8fbbc79428ab84aa76 Mon Sep 17 00:00:00 2001
From: "SND\\ussrhero_cp"
 <SND\ussrhero_cp@9b283d60-5439-405e-af05-b73fd8c4d996>
Date: Sat, 7 Jan 2017 22:19:55 +0000
Subject: [PATCH] [0.3.x] added : typedVar constructor allowing to set function
 prototype to work with overloaded functions

git-svn-id: https://pykd.svn.codeplex.com/svn@91106 9b283d60-5439-405e-af05-b73fd8c4d996
---
 pykd/pymod.cpp             | 1 +
 pykd/pytypedvar.h          | 6 ++++++
 test/scripts/moduletest.py | 2 +-
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp
index 9e6aad6..712541a 100644
--- a/pykd/pymod.cpp
+++ b/pykd/pymod.cpp
@@ -916,6 +916,7 @@ BOOST_PYTHON_MODULE( pykd )
         .def("__init__", python::make_constructor(pykd::getTypedVarByName) )
         .def("__init__", python::make_constructor(pykd::getTypedVarByTypeName) )
         .def("__init__", python::make_constructor(pykd::getTypedVarByTypeInfo) )
+        .def("__init__", python::make_constructor(pykd::getTypedVarWithPrototype) )
         .def("getLocation", TypedVarAdapter::getLocation,
             "Return location of the varibale")
         .def("getAddress", TypedVarAdapter::getAddress, 
diff --git a/pykd/pytypedvar.h b/pykd/pytypedvar.h
index c444342..301e3f9 100644
--- a/pykd/pytypedvar.h
+++ b/pykd/pytypedvar.h
@@ -32,6 +32,12 @@ inline  kdlib::TypedVarPtr getTypedVarByTypeInfo( const kdlib::TypeInfoPtr &type
     return kdlib::loadTypedVar( typeInfo, addr );
 }
 
+inline kdlib::TypedVarPtr getTypedVarWithPrototype( const std::wstring &name, const std::wstring &prototype)
+{
+    AutoRestorePyState  pystate;
+    return kdlib::loadTypedVar(name, prototype);
+}
+
 python::list getTypedVarListByTypeName( kdlib::MEMOFFSET_64 offset, const std::wstring &typeName, const std::wstring &fieldName );
 python::list getTypedVarListByType( kdlib::MEMOFFSET_64 offset, kdlib::TypeInfoPtr &typeInfo, const std::wstring &fieldName );
 python::list getTypedVarArrayByTypeName( kdlib::MEMOFFSET_64 offset, const std::wstring &typeName, size_t number );
diff --git a/test/scripts/moduletest.py b/test/scripts/moduletest.py
index f2d7b8f..f8ce2ab 100644
--- a/test/scripts/moduletest.py
+++ b/test/scripts/moduletest.py
@@ -86,7 +86,7 @@ class ModuleTest( unittest.TestCase ):
         fileName = pykd.getSourceFile(target.module.CdeclFunc )
         self.assertTrue( re.search('testfunc\\.cpp', fileName ) )
         fileName, lineNo, displacement = pykd.getSourceLine( target.module.CdeclFunc + 2)
-        self.assertEqual( 18, lineNo )
+        self.assertEqual( 27, lineNo )
         self.assertTrue( re.search('testfunc\\.cpp', fileName ) )
         self.assertEqual( 2, displacement )
         #fileName, lineNo, displacement = pykd.getSourceLine()