Debugger: Remove indexing by array index in dumpers

Parents know what to do nowadays.

Change-Id: I28c6e8577ef478f9c94b0793704536b5c6c6e036
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2016-09-14 16:43:35 +02:00
committed by hjk
parent 19d4d7014d
commit 0761f32938
3 changed files with 14 additions and 47 deletions
+14 -35
View File
@@ -816,8 +816,7 @@ class DumperBase:
self.putItem(baseValue, False)
continue
name = field.arrayIndex if field.name is None else field.name
with SubItem(self, name):
with SubItem(self, field.name):
self.putItem(value[field])
@@ -2742,10 +2741,6 @@ class DumperBase:
field = self.dumper.Field(self.dumper)
field.parentType = self.type
field.name = index
elif self.dumper.isInt(index):
field = self.dumper.Field(self.dumper)
field.parentType = self.type
field.arrayIndex = index
elif isinstance(index, self.dumper.Field):
field = index
else:
@@ -2788,29 +2783,21 @@ class DumperBase:
if self.laddress is not None:
#warn("ADDRESS")
if field.arrayIndex is not None:
#warn("ARRAY")
val.laddress = self.address + field.arrayIndex * fieldSize
fieldBitpos = field.bitpos()
fieldOffset = None if fieldBitpos is None else fieldBitpos >> 3
if fieldBitpos is not None:
#warn("BITPOS: %s" % fieldBitpos)
val.laddress = self.laddress + fieldOffset
else:
fieldBitpos = field.bitpos()
fieldOffset = None if fieldBitpos is None else fieldBitpos >> 3
if fieldBitpos is not None:
#warn("BITPOS: %s" % fieldBitpos)
val.laddress = self.laddress + fieldOffset
else:
error("NO IDEA 1")
error("NO IDEA 1")
elif len(self.ldata) > 0:
#warn("DATA")
if field.arrayIndex is not None:
start = field.arrayIndex * fieldSize
val.ldata = self.ldata[start:start + fieldSize]
fieldBitpos = field.bitpos()
fieldOffset = None if fieldBitpos is None else fieldBitpos >> 3
if fieldBitpos is not None:
val.ldata = self.ldata[fieldOffset:fieldOffset + fieldSize]
else:
fieldBitpos = field.bitpos()
fieldOffset = None if fieldBitpos is None else fieldBitpos >> 3
if fieldBitpos is not None:
val.ldata = self.ldata[fieldOffset:fieldOffset + fieldSize]
else:
error("NO IDEA 2")
error("NO IDEA 2")
else:
error("NO IDEA 3")
@@ -3219,7 +3206,6 @@ class DumperBase:
def __init__(self, dumper):
self.dumper = dumper
self.name = None
self.arrayIndex = None # Item number if parent is array
self.baseIndex = None # Base class index if parent is structure
self.nativeIndex = None # Backend-defined index value
self.isBaseClass = False
@@ -3231,12 +3217,11 @@ class DumperBase:
self.isStruct = False
def __str__(self):
#return str(self.arrayIndex if self.name is None else self.name)
return ("Field(name='%s',ltype=%s,parentType=%s,bpos=%s,bsize=%s,"
+ "bidx=%s,aidx=%s,nidx=%s)") \
+ "bidx=%s,nidx=%s)") \
% (self.name, self.ltype, self.parentType,
self.lbitpos, self.lbitsize,
self.baseIndex, self.arrayIndex, self.nativeIndex)
self.baseIndex, self.nativeIndex)
def check(self):
if self.parentType.isPointerType():
@@ -3264,8 +3249,6 @@ class DumperBase:
if self.lbitpos is not None:
#warn("BITPOS KNOWN: %s %s" % (self.name, self.lbitpos))
return self.lbitpos
if self.arrayIndex is not None:
return 8 * self.arrayIndex * self.fieldType().size()
self.check()
f = self.parentType.field(self.name)
if f is not None:
@@ -3280,10 +3263,6 @@ class DumperBase:
field = self.parentType.field(self.name)
if field is not None:
return field.fieldType()
if self.arrayIndex is not None:
res = self.parentType.target()
if res is not None:
return res
#error("CANT GET FIELD TYPE FOR %s" % self)
return None
-9
View File
@@ -390,11 +390,9 @@ class Dumper(DumperBase):
field = self.Field(self)
field.ltype = self.fromNativeType(innerType)
field.parentType = self.fromNativeType(nativeType)
field.name = None
field.isBaseClass = False
field.lbitsize = innerType.sizeof
field.lbitpos = i * innerType.sizeof * 8
field.arrayIndex = i
fields.append(field)
return fields
@@ -472,13 +470,6 @@ class Dumper(DumperBase):
# The generic handling is almost good enough, but does not
# downcast the produced values.
return None
if field.arrayIndex is not None:
#warn("IS ARRAY ITEM %s" % field.arrayIndex)
if nativeValue.type.code == ArrayCode:
typeobj = nativeValue.type.strip_typedefs()
innerType = typeobj.target()
addr = nativeValue.address + arrayIndex * innerType.sizeof
return self.createValue(addr, self.fromNativeType(innerType))
if field.name is not None:
return self.nativeValueDownCast(nativeValue[field.name])
error("FIELD EXTARCTION FAILED: %s" % field)
-3
View File
@@ -335,9 +335,6 @@ class Dumper(DumperBase):
#warn("BASE BITSIZE: %s" % field.lbitsize)
# FIXME: This is wrong for virtual bases.
return None # Let standard behavior kick in.
elif field.arrayIndex is not None:
#warn("FETCHING BY ARRAY INDEX: %s: %s" % (field.arrayIndex, field.name))
val = nativeValue.GetChildAtIndex(field.arrayIndex)
else:
#warn("FETCHING BY NAME: %s: %s" % (field, field.name))
val = self.nativeValueChildFromNameHelper(nativeValue, field.name)