diff --git a/ChangeLog b/ChangeLog index 85cfa8380..3fe43f84c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2005-12-12 Al Riddoch + + * rulesets/PythonWrapper.cpp: Make sure PythonWrapper holds a propper + reference to the wrapper object, to ensure its not dealloced. + + * rulesets/Py_Location.cpp: Store a PythonWrapper when creating + a new wrapper object if the entity does not already have + a script. + + * rulesets/MemMap.cpp: Fix an uninitialised variable. + 2005-12-11 Al Riddoch * rulesets/PythonWrapper.h, rulesets/PythonWrapper.cpp: Add new diff --git a/rulesets/MemMap.cpp b/rulesets/MemMap.cpp index 5fd7c9349..ae8f8b011 100644 --- a/rulesets/MemMap.cpp +++ b/rulesets/MemMap.cpp @@ -31,7 +31,7 @@ MemEntity * MemMap::addEntity(MemEntity * entity) debug(std::cout << "MemMap::addEntity " << entity << " " << entity->getId() << std::endl << std::flush;); - long next; + long next = -1; if (m_checkIterator != m_entities.end()) { next = m_checkIterator->first; } diff --git a/rulesets/Py_Location.cpp b/rulesets/Py_Location.cpp index 1cb99611b..f495af836 100644 --- a/rulesets/Py_Location.cpp +++ b/rulesets/Py_Location.cpp @@ -58,6 +58,12 @@ static PyObject * Location_getattr(PyLocation *self, char *name) if (pw == 0) { PyEntity * o = newPyEntity(); o->m_entity = self->location->m_loc; + if (self->location->m_loc->script() == &noScript) { + pw = new PythonWrapper((PyObject *)o); + self->location->m_loc->setScript(pw); + } else { + std::cerr << "Bizare script!" << std::endl << std::flush; + } return (PyObject *)o; } else { PyObject * o = pw->wrapper(); diff --git a/rulesets/PythonWrapper.cpp b/rulesets/PythonWrapper.cpp index 2c746f285..8e00b7d9f 100644 --- a/rulesets/PythonWrapper.cpp +++ b/rulesets/PythonWrapper.cpp @@ -6,8 +6,10 @@ PythonWrapper::PythonWrapper(PyObject * wrapper) : m_wrapper(wrapper) { + Py_INCREF(m_wrapper); } PythonWrapper::~PythonWrapper() { + Py_DECREF(m_wrapper); }