diff --git a/kdlibcpp b/kdlibcpp
index 6f96e04..9fa21ea 160000
--- a/kdlibcpp
+++ b/kdlibcpp
@@ -1 +1 @@
-Subproject commit 6f96e046f3e79bc464759c6729d6d344083587e4
+Subproject commit 9fa21ea2cf01e91885b067f760f2ba1a9fd04ddd
diff --git a/pykd/pykd.vcxproj.filters b/pykd/pykd.vcxproj.filters
index 55e9996..80f1916 100644
--- a/pykd/pykd.vcxproj.filters
+++ b/pykd/pykd.vcxproj.filters
@@ -194,9 +194,6 @@
Source Files
-
- Source Files
-
Source Files
@@ -311,6 +308,9 @@
boost.python
+
+ Source Files
+
diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp
index c5cac9e..cfe7b42 100644
--- a/pykd/pymod.cpp
+++ b/pykd/pymod.cpp
@@ -609,8 +609,8 @@ void pykd_init()
python::def("loadTaggedBuffer", pykd::loadTaggedBuffer,
"Read the buffer of secondary callback data by ID" );
- python::class_( "numVariant", "numVariant", python::no_init )
- .def("__init__", python::make_constructor(&NumVariantAdaptor::getVariant) )
+ python::class_( "numVariant", "numVariant", python::no_init )
+ //.def("__init__", python::make_constructor(&NumVariantAdaptor::getVariant) )
.def( "__eq__", &NumVariantAdaptor::eq )
.def( "__ne__", &NumVariantAdaptor::ne)
.def( "__lt__", &NumVariantAdaptor::lt)
@@ -804,7 +804,7 @@ void pykd_init()
"Return heap's entries iterator object")[python::return_value_policy()] )
;
- python::class_, boost::noncopyable>("module", "Class representing executable module", python::no_init)
+ python::class_, boost::noncopyable>("module", "Class representing executable module", python::no_init)
.def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByName))
.def("__init__", python::make_constructor(&ModuleAdapter::loadModuleByOffset))
.def("begin", ModuleAdapter::getBase,
@@ -870,7 +870,7 @@ void pykd_init()
"Return address of the symbol" )
.def( "__str__", &ModuleAdapter::print );
- python::class_, boost::noncopyable >("typeInfo", "Class representing typeInfo", python::no_init )
+ python::class_, boost::noncopyable >("typeInfo", "Class representing typeInfo", python::no_init )
.def("__init__", python::make_constructor( pykd::getTypeInfoByName ) )
.def( "name", TypeInfoAdapter::getName,
"Return type name" )
@@ -963,7 +963,7 @@ void pykd_init()
.def("next", &TypedVarIterator::next)
;
- python::class_, boost::noncopyable >("typedVar",
+ python::class_, boost::noncopyable >("typedVar",
"Class of non-primitive type object, child class of typeClass. Data from target is copied into object instance", python::no_init )
.def("__init__", python::make_constructor(pykd::getTypedVarByName) )
.def("__init__", python::make_constructor(pykd::getTypedVarByTypeName) )
diff --git a/pykd/pytypeinfo.cpp b/pykd/pytypeinfo.cpp
index 3f22af5..f6a71bb 100644
--- a/pykd/pytypeinfo.cpp
+++ b/pykd/pytypeinfo.cpp
@@ -226,11 +226,11 @@ python::object callTypedVar(kdlib::TypedVarPtr& funcobj, python::tuple& args)
throw kdlib::TypeException(L"failed convert string argument");
}
- python::extract getNumVar(args[i]);
+ python::extract getNumVar(args[i]);
if ( getNumVar.check() )
{
kdlib::NumVariant var = getNumVar();
- argLst.push_back( var );
+ argLst.push_back( kdlib::TypedValue(var) );
continue;
}
@@ -238,7 +238,7 @@ python::object callTypedVar(kdlib::TypedVarPtr& funcobj, python::tuple& args)
if ( python::extract(args[i]).check() )
{
kdlib::NumVariant var= NumVariantAdaptor::convertToVariant(args[i]);
- argLst.push_back( var );
+ argLst.push_back(kdlib::TypedValue(var));
continue;
}
@@ -326,18 +326,18 @@ python::object callFunctionRaw( python::tuple& args, python::dict& kwargs)
continue;
}
- python::extract getNumVar(args[i]);
+ python::extract getNumVar(args[i]);
if ( getNumVar.check() )
{
kdlib::NumVariant var = getNumVar();
- argLst.push_back( var );
+ argLst.push_back(kdlib::TypedValue(var));
continue;
}
if ( python::extract(args[i]).check() )
{
kdlib::NumVariant var= NumVariantAdaptor::convertToVariant(args[i]);
- argLst.push_back( var );
+ argLst.push_back(kdlib::TypedValue(var));
continue;
}
diff --git a/pykd/variant.h b/pykd/variant.h
index a40ef5a..fd625df 100644
--- a/pykd/variant.h
+++ b/pykd/variant.h
@@ -9,7 +9,7 @@
namespace pykd {
-class NumVariantAdaptor : public kdlib::NumBehavior
+class NumVariantAdaptor : public kdlib::NumConvertable
{
public:
@@ -18,7 +18,7 @@ public:
{
kdlib::NumVariant var;
- python::extract getNumVar(obj);
+ python::extract getNumVar(obj);
if ( getNumVar.check() )
{
var = getNumVar();
@@ -68,7 +68,7 @@ public:
return var;
}
- static python::object NumVariantAdaptor::convertToPython( kdlib::NumVariant& var )
+ static python::object NumVariantAdaptor::convertToPython( const kdlib::NumVariant& var )
{
if ( var.isChar() )
return python::object( var.asInt() );
@@ -110,18 +110,16 @@ public:
}
- static kdlib::NumBehavior* NumVariantAdaptor::getVariant(const python::object &obj)
- {
- NumVariantAdaptor* var = new NumVariantAdaptor();
+ //static kdlib::NumConvertable* NumVariantAdaptor::getVariant(const python::object &obj)
+ //{
+ // //NumVariantAdaptor* var = new NumVariantAdaptor();
- var->m_variant = NumVariantAdaptor::convertToVariant(obj);
+ // //var->m_variant = NumVariantAdaptor::convertToVariant(obj);
- return var;
- }
+ // //return var;
+ //}
-
-
- static python::object NumVariantAdaptor::convertToPython( kdlib::NumBehavior& num )
+ static python::object NumVariantAdaptor::convertToPython( kdlib::NumConvertable& num )
{
kdlib::NumVariant var;
@@ -135,7 +133,7 @@ public:
public:
- static python::object eq( kdlib::NumBehavior& var, python::object& obj )
+ static python::object eq( kdlib::NumConvertable& var, python::object& obj )
{
try {
return convertToPython(var) == obj;
@@ -146,7 +144,7 @@ public:
return python::object(false);
}
- static python::object ne( kdlib::NumBehavior& var, python::object& obj )
+ static python::object ne( kdlib::NumConvertable& var, python::object& obj )
{
try {
return convertToPython(var) != obj;
@@ -157,103 +155,103 @@ public:
return python::object(true);
}
- static python::object lt( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object lt( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) < obj;
}
- static python::object gt( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object gt( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) > obj;
}
- static python::object le( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object le( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) <= obj;
}
- static python::object ge( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object ge( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) >= obj;
}
- static python::object add( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object add( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) + obj;
}
- static python::object sub( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object sub( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) - obj;
}
- static python::object rsub( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object rsub( kdlib::NumConvertable& var, python::object& obj ) {
return obj - convertToPython(var);
}
- static python::object mul( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object mul( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) * obj;
}
- static python::object div( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object div( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) / obj;
}
- static python::object truediv(kdlib::NumBehavior& var, python::object& obj) {
+ static python::object truediv(kdlib::NumConvertable& var, python::object& obj) {
return convertToPython(var) / obj;
}
- static python::object rtruediv(kdlib::NumBehavior& var, python::object& obj) {
+ static python::object rtruediv(kdlib::NumConvertable& var, python::object& obj) {
return obj / convertToPython(var);
}
- static python::object rdiv( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object rdiv( kdlib::NumConvertable& var, python::object& obj ) {
return obj / convertToPython(var);
}
- static python::object mod( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object mod( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) % obj;
}
- static python::object rmod( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object rmod( kdlib::NumConvertable& var, python::object& obj ) {
return obj % convertToPython(var);
}
- static python::object rshift( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object rshift( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) >> obj;
}
- static python::object rrshift( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object rrshift( kdlib::NumConvertable& var, python::object& obj ) {
return obj >> convertToPython(var);
}
- static python::object lshift( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object lshift( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) << obj;
}
- static python::object rlshift( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object rlshift( kdlib::NumConvertable& var, python::object& obj ) {
return obj << convertToPython(var);
}
- static python::object and( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object and( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) & obj;
}
- static python::object or( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object or( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) | obj;
}
- static python::object xor( kdlib::NumBehavior& var, python::object& obj ) {
+ static python::object xor( kdlib::NumConvertable& var, python::object& obj ) {
return convertToPython(var) ^ obj;
}
- static python::object neg(kdlib::NumBehavior& var) {
+ static python::object neg(kdlib::NumConvertable& var) {
return 0 - convertToPython(var);
}
- static python::object pos(kdlib::NumBehavior& var) {
+ static python::object pos(kdlib::NumConvertable& var) {
return 0 + convertToPython(var);
}
- static python::object invert(kdlib::NumBehavior& var) {
+ static python::object invert(kdlib::NumConvertable& var) {
return convertToPython(var) ^ convertToPython(var);
}
- static python::object nonzero(kdlib::NumBehavior& var) {
+ static python::object nonzero(kdlib::NumConvertable& var) {
try {
return convertToPython(var) != 0;
}
@@ -263,29 +261,30 @@ public:
return python::object(true);
}
- static python::object long_(kdlib::NumBehavior& var ) {
+ static python::object long_(kdlib::NumConvertable& var ) {
return convertToPython(var);
}
- static python::object float_(kdlib::NumBehavior& var) {
- return python::object(var.asDouble());
+ static python::object float_(kdlib::NumConvertable& var) {
+ kdlib::NumVariant v = var;
+ return python::object(v.asDouble());
}
- static python::object int_(kdlib::NumBehavior& var) {
+ static python::object int_(kdlib::NumConvertable& var) {
return convertToPython(var);
}
- static std::wstring str(kdlib::NumBehavior& var) {
+ static std::wstring str(kdlib::NumConvertable& var) {
kdlib::NumVariant v = var;
return v.asStr();
}
- static std::string hex(kdlib::NumBehavior& var) {
+ static std::string hex(kdlib::NumConvertable& var) {
kdlib::NumVariant v = var;
return std::string("0x") + std::string(_bstr_t(v.asHex().c_str()));
}
- static bool isInteger(kdlib::NumBehavior& var) {
+ static bool isInteger(kdlib::NumConvertable& var) {
kdlib::NumVariant v = var;
return v.isInteger();
}
@@ -307,7 +306,7 @@ private:
static void* numConvertible( PyObject* obj_ptr)
{
- python::extract getNumVar(obj_ptr);
+ python::extract getNumVar(obj_ptr);
if (getNumVar.check())
return obj_ptr;
@@ -320,9 +319,9 @@ private:
{
void* storage = ( (python::converter::rvalue_from_python_storage*)data)->storage.bytes;
- kdlib::NumBehavior* num = python::extract(obj_ptr);
+ kdlib::NumConvertable& num = python::extract(obj_ptr);
- kdlib::NumVariant var = *num;
+ kdlib::NumVariant var = num;
new (storage ) T( static_cast(var.asULongLong() ) );
diff --git a/test/scripts/pykdtest.py b/test/scripts/pykdtest.py
index df433b9..6963082 100644
--- a/test/scripts/pykdtest.py
+++ b/test/scripts/pykdtest.py
@@ -13,7 +13,7 @@ import pykd
import target
-import intbase
+#import intbase
import memtest
import moduletest
import typeinfo
@@ -47,7 +47,7 @@ def getTestSuite( singleName = "" ):
if singleName == "":
return unittest.TestSuite(
[
- unittest.TestLoader().loadTestsFromTestCase( intbase.IntBaseTest ),
+ #unittest.TestLoader().loadTestsFromTestCase( intbase.IntBaseTest ),
unittest.TestLoader().loadTestsFromTestCase( StartProcessWithoutParamsTest ),
# *** Test without start/kill new processes
@@ -83,14 +83,11 @@ if __name__ == "__main__":
print( "\nTesting PyKd ver. %s" % pykd.__version__ )
print( "Directory: %s" % os.path.dirname(pykd.__file__) )
- import time
- # time.sleep(30)
-
target.appPath = os.path.join( os.path.dirname(pykd.__file__), "targetapp.exe" )
target.moduleName = os.path.splitext(os.path.basename(target.appPath))[0]
unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite() )
- #unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite("regtest.CpuRegTest.testSetRegValue") )
+ #unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite("typedvar.TypedVarTest.testAttr") )
try: input = raw_input
except NameError: pass
diff --git a/test/scripts/pykdtest.pyproj b/test/scripts/pykdtest.pyproj
index 67bf6d4..a49f2bd 100644
--- a/test/scripts/pykdtest.pyproj
+++ b/test/scripts/pykdtest.pyproj
@@ -8,7 +8,7 @@
pykdtest.py
- ..\..\out\x64\Debug_3.6
+ ..\..\out\x64\Debug_2.7
.
pykdtest
pykdtest
@@ -19,7 +19,7 @@
False
False
- Global|PythonCore|3.6
+ Global|PythonCore|2.7
true
diff --git a/test/scripts/typedvar.py b/test/scripts/typedvar.py
index 4b55c99..88ec80a 100644
--- a/test/scripts/typedvar.py
+++ b/test/scripts/typedvar.py
@@ -393,7 +393,7 @@ class TypedVarTest( unittest.TestCase ):
funcptr = target.module.typedVar("StdcallFuncRet");
ucharVar = target.module.typedVar( "ucharVar" );
self.assertEqual( 10, ucharVar )
- self.assertEqual( 200000/10, funcptr( ucharVar, pykd.numVariant(200000) ) )
+ self.assertEqual( 200000/10, funcptr( ucharVar, 200000 ) )
def testCallWithWrongArgs(self):
self.assertRaises( pykd.TypeException, target.module.typedVar("StdcallFuncRet"), *(1,) )