winedbg: Fix the way array derefs are done.

oldstable
Eric Pouech 2009-03-29 17:21:55 +02:00 committed by Alexandre Julliard
parent a61e117781
commit fac7496345
1 changed files with 9 additions and 9 deletions

View File

@ -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;
/*
* 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);
}
/*
* 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);
result->addr.Offset += index * (DWORD)length;
return TRUE;
}