Simpify varobj children handling for C++
Vladimir Prus
ghost@cs.msu.su
Wed Jan 24 11:11:00 GMT 2007
Daniel Jacobowitz wrote:
> On Wed, Jan 17, 2007 at 09:55:53PM +0300, Vladimir Prus wrote:
>> >> @@ -950,7 +950,8 @@ value_ind (struct value *arg1)
>> >> if (TYPE_CODE (base_type) == TYPE_CODE_INT)
>> >> return value_at_lazy (builtin_type_int,
>> >> (CORE_ADDR) value_as_long (arg1));
>> >> - else if (TYPE_CODE (base_type) == TYPE_CODE_PTR)
>> >> + else if (TYPE_CODE (base_type) == TYPE_CODE_PTR
>> >> + || TYPE_CODE (base_type) == TYPE_CODE_PTR)
>> >> {
>> >> struct type *enc_type;
>> >> /* We may be pointing to something embedded in a larger object
>> >> */
>> >
>> > Something tells me you didn't actually need value_ind to handle
>> > references... :-)
>>
>> Why? Because that's a bad idea or because varobj code does not
>> need to dereference rereferences? The latter is true,
>> attached version of the patch builds on the
>> "fix 'editable' attribute for references" patch I've posted earlier
>> and now 'adjust_value_for_child_access' asserts that the type
>> is not reference.
>
> All I meant was that you added "is TYPE_CODE_PTR or is TYPE_CODE_PTR".
> I guess you meant to check TYPE_CODE_REF, but you must not have needed
> it if you didn't notice the typo.
Ah ;-)
>> +get_value_type (struct varobj *var)
>> {
>> struct type *type;
>>
>> - type = get_type (var);
>> + if (var->value)
>> + type = value_type (var->value);
>> + else
>> + type = var->type;
>>
>> - if (type)
>> - {
>> - if (TYPE_CODE (type) == TYPE_CODE_REF)
>> - type = get_target_type (type);
>> - if (TYPE_CODE (type) == TYPE_CODE_PTR)
>> - type = get_target_type (type);
>> - }
>> + if (TYPE_CODE (type) == TYPE_CODE_REF)
>> + type = get_target_type (type);
>> +
>> + type = check_typedef (type);
>>
>> return type;
>> }
>
> I think that if you want to check for references, you need to call
> check_typedef first (I just checked that g++ does allow typedefs
> to reference types). Otherwise this looks OK to commit.
The check_typedef added in "editable fix" patch, that's checked in.
The varobj children patch for C++ proper that I've just checked in as
well is attached.
>
> It would be nice to have some tests for not stripping typedefs,
> if that's practical, but it's not really important.
It would be good, but writing comprehensive tests is not a quick task.
It's on my todo, but definitely not today.
- Volodya
-------------- next part --------------
A non-text attachment was scrubbed...
Name: path_4_unify_cpp_as_committed.diff
Type: text/x-diff
Size: 16012 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/gdb-patches/attachments/20070124/f51fd410/attachment.bin>
More information about the Gdb-patches
mailing list