forked from qt-creator/qt-creator
Debugger: Add helper function for value creation
Change-Id: Ibdf496e5d6f6772d5c9fd831b8c66823c7ba8e72 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -74,14 +74,8 @@ static PyObject *cdbext_listOfLocals(PyObject *, PyObject *) // -> [ Value ]
|
|||||||
const auto children = sg->root()->children();
|
const auto children = sg->root()->children();
|
||||||
auto locals = PyList_New(0);
|
auto locals = PyList_New(0);
|
||||||
for (AbstractSymbolGroupNode *abstractChild : children) {
|
for (AbstractSymbolGroupNode *abstractChild : children) {
|
||||||
Value *childValue = PyObject_New(Value, value_pytype());
|
if (SymbolGroupNode* child = abstractChild->asSymbolGroupNode())
|
||||||
if (childValue != NULL) {
|
PyList_Append(locals, createValue(child->index(), sg->debugSymbolGroup()));
|
||||||
if (SymbolGroupNode* child = abstractChild->asSymbolGroupNode()) {
|
|
||||||
childValue->m_index = child->index();
|
|
||||||
childValue->m_symbolGroup = sg->debugSymbolGroup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PyList_Append(locals, reinterpret_cast<PyObject*>(childValue));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return locals;
|
return locals;
|
||||||
|
@@ -125,23 +125,18 @@ PyObject *value_Dereference(Value *self)
|
|||||||
|
|
||||||
char *name = getTypeName(params.Module, params.TypeId);
|
char *name = getTypeName(params.Module, params.TypeId);
|
||||||
|
|
||||||
Value *ret = self;
|
PyObject *ret = reinterpret_cast<PyObject*>(self);
|
||||||
if (endsWith(std::string(name), "*")) {
|
if (endsWith(std::string(name), "*")) {
|
||||||
if (numberOfChildren(self) > 0 && expandValue(self)) {
|
if (numberOfChildren(self) > 0 && expandValue(self)) {
|
||||||
ULONG symbolCount = 0;
|
ULONG symbolCount = 0;
|
||||||
self->m_symbolGroup->GetNumberSymbols(&symbolCount);
|
self->m_symbolGroup->GetNumberSymbols(&symbolCount);
|
||||||
if (symbolCount > self->m_index + 1) {
|
if (symbolCount > self->m_index + 1)
|
||||||
ret = PyObject_New(Value, value_pytype());
|
ret = createValue(self->m_index + 1, self->m_symbolGroup);
|
||||||
if (ret != NULL) {
|
|
||||||
ret->m_index = self->m_index + 1;
|
|
||||||
ret->m_symbolGroup = self->m_symbolGroup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] name;
|
delete[] name;
|
||||||
return reinterpret_cast<PyObject*>(ret);
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *value_HasChildren(Value *self)
|
PyObject *value_HasChildren(Value *self)
|
||||||
@@ -187,14 +182,8 @@ PyObject *value_ChildFromName(Value *self, PyObject *args)
|
|||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
|
||||||
for (ULONG childIndex = self->m_index + 1 ; childIndex <= self->m_index + childCount; ++childIndex) {
|
for (ULONG childIndex = self->m_index + 1 ; childIndex <= self->m_index + childCount; ++childIndex) {
|
||||||
if (getSymbolName(self->m_symbolGroup, childIndex) == name) {
|
if (getSymbolName(self->m_symbolGroup, childIndex) == name)
|
||||||
Value *childValue = PyObject_New(Value, value_pytype());
|
return createValue(childIndex, self->m_symbolGroup);
|
||||||
if (childValue != NULL) {
|
|
||||||
childValue->m_index = childIndex;
|
|
||||||
childValue->m_symbolGroup = self->m_symbolGroup;
|
|
||||||
}
|
|
||||||
return reinterpret_cast<PyObject*>(childValue);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
@@ -241,12 +230,7 @@ PyObject *value_ChildFromField(Value *self, PyObject *args)
|
|||||||
if (FAILED(self->m_symbolGroup->AddSymbol(name.c_str(), &index)))
|
if (FAILED(self->m_symbolGroup->AddSymbol(name.c_str(), &index)))
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
|
||||||
Value *childValue = PyObject_New(Value, value_pytype());
|
return createValue(index, self->m_symbolGroup);
|
||||||
if (childValue != NULL) {
|
|
||||||
childValue->m_index = index;
|
|
||||||
childValue->m_symbolGroup = self->m_symbolGroup;
|
|
||||||
}
|
|
||||||
return reinterpret_cast<PyObject*>(childValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject *value_ChildFromIndex(Value *self, PyObject *args)
|
PyObject *value_ChildFromIndex(Value *self, PyObject *args)
|
||||||
@@ -264,13 +248,7 @@ PyObject *value_ChildFromIndex(Value *self, PyObject *args)
|
|||||||
if (childCount <= index || !expandValue(self))
|
if (childCount <= index || !expandValue(self))
|
||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
|
|
||||||
Value *childValue = PyObject_New(Value, value_pytype());
|
return createValue(self->m_index + index + 1, self->m_symbolGroup);
|
||||||
if (childValue != NULL) {
|
|
||||||
childValue->m_index = self->m_index + index + 1;
|
|
||||||
childValue->m_symbolGroup = self->m_symbolGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
return reinterpret_cast<PyObject*>(childValue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void value_Dealloc(Value *)
|
void value_Dealloc(Value *)
|
||||||
@@ -290,6 +268,16 @@ void initValue(Value *value)
|
|||||||
value->m_symbolGroup = nullptr;
|
value->m_symbolGroup = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PyObject *createValue(ULONG index, CIDebugSymbolGroup *symbolGroup)
|
||||||
|
{
|
||||||
|
Value *value = PyObject_New(Value, value_pytype());
|
||||||
|
if (value != NULL) {
|
||||||
|
value->m_index = index;
|
||||||
|
value->m_symbolGroup = symbolGroup;
|
||||||
|
}
|
||||||
|
return reinterpret_cast<PyObject*>(value);
|
||||||
|
}
|
||||||
|
|
||||||
static PyMethodDef valueMethods[] = {
|
static PyMethodDef valueMethods[] = {
|
||||||
{"name", PyCFunction(value_Name), METH_NOARGS,
|
{"name", PyCFunction(value_Name), METH_NOARGS,
|
||||||
"Name of this thing or None"},
|
"Name of this thing or None"},
|
||||||
|
@@ -40,3 +40,4 @@ struct Value
|
|||||||
|
|
||||||
PyTypeObject *value_pytype();
|
PyTypeObject *value_pytype();
|
||||||
void initValue(Value *value);
|
void initValue(Value *value);
|
||||||
|
PyObject *createValue(ULONG index, CIDebugSymbolGroup *symbolGroup);
|
||||||
|
Reference in New Issue
Block a user