winedbg: Fix the way array derefs are done.
This commit is contained in:
parent
a61e117781
commit
fac7496345
|
@ -310,26 +310,26 @@ BOOL types_array_index(const struct dbg_lvalue* lvalue, int index,
|
|||
DWORD64 length;
|
||||
|
||||
if (!types_get_real_type(&type, &tag)) return FALSE;
|
||||
/* Contents of array share same data (addr mode, module...) */
|
||||
*result = *lvalue;
|
||||
switch (tag)
|
||||
{
|
||||
case SymTagArrayType:
|
||||
types_get_info(&type, TI_GET_COUNT, &count);
|
||||
if (index < 0 || index >= count) return FALSE;
|
||||
/* fall through */
|
||||
break;
|
||||
case SymTagPointerType:
|
||||
/* Contents of array share same data (addr mode, module...) */
|
||||
*result = *lvalue;
|
||||
memory_read_value(lvalue, sizeof(result->addr.Offset), &result->addr.Offset);
|
||||
break;
|
||||
default:
|
||||
assert(FALSE);
|
||||
}
|
||||
/*
|
||||
* Get the base type, so we know how much to index by.
|
||||
*/
|
||||
types_get_info(&type, TI_GET_TYPE, &result->type.id);
|
||||
types_get_info(&result->type, TI_GET_LENGTH, &length);
|
||||
memory_read_value(lvalue, sizeof(result->addr.Offset), &result->addr.Offset);
|
||||
result->addr.Offset += index * (DWORD)length;
|
||||
break;
|
||||
default:
|
||||
assert(FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue