* value.c (value_available_contents_eq): Remove redundant local

variables.  Fix available contents comparision.
	* value.h (value_available_contents_eq): Extend describing
	comment.
This commit is contained in:
Pedro Alves 2011-02-16 10:13:53 +00:00
parent 60bbf3380a
commit cd24cfaa4f
3 changed files with 29 additions and 21 deletions

View file

@ -1,3 +1,11 @@
2011-02-16 Pedro Alves <pedro@codesourcery.com>
Jan Kratochvil <jan.kratochvil@redhat.com>
* value.c (value_available_contents_eq): Remove redundant local
variables. Fix available contents comparision.
* value.h (value_available_contents_eq): Extend describing
comment.
2011-02-16 Yao Qi <yao@codesourcery.com> 2011-02-16 Yao Qi <yao@codesourcery.com>
* thread.c (info_threads_command): Add missing i18n markup and remove * thread.c (info_threads_command): Add missing i18n markup and remove

View file

@ -533,21 +533,13 @@ value_available_contents_eq (const struct value *val1, int offset1,
const struct value *val2, int offset2, const struct value *val2, int offset2,
int length) int length)
{ {
int org_len = length;
int org_offset1 = offset1;
int org_offset2 = offset2;
int idx1 = 0, idx2 = 0; int idx1 = 0, idx2 = 0;
int prev_avail;
/* This routine is used by printing routines, where we should /* This routine is used by printing routines, where we should
already have read the value. Note that we only know whether a already have read the value. Note that we only know whether a
value chunk is available if we've tried to read it. */ value chunk is available if we've tried to read it. */
gdb_assert (!val1->lazy && !val2->lazy); gdb_assert (!val1->lazy && !val2->lazy);
/* The offset from either ORG_OFFSET1 or ORG_OFFSET2 where the
available contents we haven't compared yet start. */
prev_avail = 0;
while (length > 0) while (length > 0)
{ {
range_s *r1, *r2; range_s *r1, *r2;
@ -561,9 +553,9 @@ value_available_contents_eq (const struct value *val1, int offset1,
/* The usual case is for both values to be completely available. */ /* The usual case is for both values to be completely available. */
if (idx1 == -1 && idx2 == -1) if (idx1 == -1 && idx2 == -1)
return (memcmp (val1->contents + org_offset1 + prev_avail, return (memcmp (val1->contents + offset1,
val2->contents + org_offset2 + prev_avail, val2->contents + offset2,
org_len - prev_avail) == 0); length) == 0);
/* The contents only match equal if the available set matches as /* The contents only match equal if the available set matches as
well. */ well. */
else if (idx1 == -1 || idx2 == -1) else if (idx1 == -1 || idx2 == -1)
@ -596,12 +588,11 @@ value_available_contents_eq (const struct value *val1, int offset1,
return 0; return 0;
/* Compare the _available_ contents. */ /* Compare the _available_ contents. */
if (memcmp (val1->contents + org_offset1 + prev_avail, if (memcmp (val1->contents + offset1,
val2->contents + org_offset2 + prev_avail, val2->contents + offset2,
l2 - prev_avail) != 0) l1) != 0)
return 0; return 0;
prev_avail += h1;
length -= h1; length -= h1;
offset1 += h1; offset1 += h1;
offset2 += h1; offset2 += h1;

View file

@ -379,12 +379,21 @@ extern void mark_value_bytes_unavailable (struct value *value,
int offset, int length); int offset, int length);
/* Compare LENGTH bytes of VAL1's contents starting at OFFSET1 with /* Compare LENGTH bytes of VAL1's contents starting at OFFSET1 with
LENGTH bytes of VAL2's contents starting at OFFSET2. Returns true LENGTH bytes of VAL2's contents starting at OFFSET2.
iff the set of available contents match. Unavailable contents
compare equal with unavailable contents, and different with any Note that "contents" refers to the whole value's contents
available byte. For example, if 'x's represent an unavailable (value_contents_all), without any embedded offset adjustment. For
byte, and 'V' and 'Z' represent different available bytes, in a example, to compare a complete object value with itself, including
value with length 16: its enclosing type chunk, you'd do:
int len = TYPE_LENGTH (check_typedef (value_enclosing_type (val)));
value_available_contents (val, 0, val, 0, len);
Returns true iff the set of available contents match. Unavailable
contents compare equal with unavailable contents, and different
with any available byte. For example, if 'x's represent an
unavailable byte, and 'V' and 'Z' represent different available
bytes, in a value with length 16:
offset: 0 4 8 12 16 offset: 0 4 8 12 16
contents: xxxxVVVVxxxxVVZZ contents: xxxxVVVVxxxxVVZZ