From 490fa999c4b75465d632c60d8c451ae4f93a1806 Mon Sep 17 00:00:00 2001 From: "gergely.erdelyi" Date: Sat, 11 Oct 2008 09:09:46 +0000 Subject: [PATCH] python.cpp: Added float support for extlang_python python.cpp: Proper error reporting implemented --- python.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/python.cpp b/python.cpp index 3f81582..1ea7cfe 100644 --- a/python.cpp +++ b/python.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -289,6 +290,7 @@ bool idaapi IDAPython_extlang_calcexpr(ea_t current_ea, PyObject *result; PyObject *ptype, *pvalue, *ptraceback; PyObject *module = PyImport_AddModule("__main__"); + double dresult; if (module == NULL) return false; @@ -299,9 +301,23 @@ bool idaapi IDAPython_extlang_calcexpr(ea_t current_ea, if (result == NULL) { + /* Return a formatted error or just print it to the console */ if (PyErr_Occurred()) { - PyErr_Print(); + PyErr_Fetch(&ptype, &pvalue, &ptraceback); + result = PyObject_Repr(pvalue); + if (result) + { + qsnprintf(errbuf, errbufsize, "ERROR: %s", PyString_AsString(result)); + PyErr_Clear(); + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + } + else + { + PyErr_Print(); + } } return false; } @@ -331,8 +347,9 @@ bool idaapi IDAPython_extlang_calcexpr(ea_t current_ea, if (PyFloat_Check(result)) { - rv->num = PyInt_AsLong(result); - rv->vtype = VT_LONG; + dresult = PyFloat_AsDouble(result); + ieee_realcvt((void *)&dresult, rv->e, 3); + rv->vtype = VT_FLOAT; Py_XDECREF(result); return true; }