X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fada-varobj.c;h=3da6018920ddf11d33f664b2340522011671e037;hb=2117c711ae07700adb57ea5b5ca61e4c32d7e3d2;hp=52c76875296b002e0f0d7cb721475da2d64f0479;hpb=99ad94278d293fb7f5a823caf92221ff4419e556;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ada-varobj.c b/gdb/ada-varobj.c index 52c7687529..3da6018920 100644 --- a/gdb/ada-varobj.c +++ b/gdb/ada-varobj.c @@ -1,6 +1,6 @@ /* varobj support for Ada. - Copyright (C) 2012-2013 Free Software Foundation, Inc. + Copyright (C) 2012-2014 Free Software Foundation, Inc. This file is part of GDB. @@ -18,7 +18,6 @@ along with this program. If not, see . */ #include "defs.h" -#include "ada-varobj.h" #include "ada-lang.h" #include "varobj.h" #include "language.h" @@ -49,6 +48,9 @@ it allows the code to use the type without having to worry about it being set or not. It makes the code clearer. */ +static int ada_varobj_get_number_of_children (struct value *parent_value, + struct type *parent_type); + /* A convenience function that decodes the VALUE_PTR/TYPE_PTR couple: If there is a value (*VALUE_PTR not NULL), then perform the decoding using it, and compute the associated type from the resulting value. @@ -217,6 +219,15 @@ ada_varobj_adjust_for_child_access (struct value **value, && !ada_is_array_descriptor_type (TYPE_TARGET_TYPE (*type)) && !ada_is_constrained_packed_array_type (TYPE_TARGET_TYPE (*type))) ada_varobj_ind (*value, *type, value, type); + + /* If this is a tagged type, we need to transform it a bit in order + to be able to fetch its full view. As always with tagged types, + we can only do that if we have a value. */ + if (*value != NULL && ada_is_tagged_type (*type, 1)) + { + *value = ada_tag_value_at_base_address (*value); + *type = value_type (*value); + } } /* Assuming that the (PARENT_VALUE, PARENT_TYPE) pair is an array @@ -324,7 +335,7 @@ ada_varobj_get_ptr_number_of_children (struct value *parent_value, /* Return the number of children for the (PARENT_VALUE, PARENT_TYPE) pair. */ -int +static int ada_varobj_get_number_of_children (struct value *parent_value, struct type *parent_type) { @@ -722,7 +733,7 @@ ada_varobj_describe_child (struct value *parent_value, The result should be deallocated after use with xfree. */ -char * +static char * ada_varobj_get_name_of_child (struct value *parent_value, struct type *parent_type, const char *parent_name, int child_index) @@ -742,7 +753,7 @@ ada_varobj_get_name_of_child (struct value *parent_value, The result must be deallocated after use with xfree. */ -char * +static char * ada_varobj_get_path_expr_of_child (struct value *parent_value, struct type *parent_type, const char *parent_name, @@ -761,7 +772,7 @@ ada_varobj_get_path_expr_of_child (struct value *parent_value, /* Return the value of child number CHILD_INDEX of the (PARENT_VALUE, PARENT_TYPE) pair. PARENT_NAME is the name of the parent. */ -struct value * +static struct value * ada_varobj_get_value_of_child (struct value *parent_value, struct type *parent_type, const char *parent_name, int child_index) @@ -778,7 +789,7 @@ ada_varobj_get_value_of_child (struct value *parent_value, /* Return the type of child number CHILD_INDEX of the (PARENT_VALUE, PARENT_TYPE) pair. */ -struct type * +static struct type * ada_varobj_get_type_of_child (struct value *parent_value, struct type *parent_type, int child_index) @@ -857,7 +868,7 @@ ada_varobj_get_value_of_array_variable (struct value *value, /* Return a string representation of the (VALUE, TYPE) pair, using the given print options OPTS as our formatting options. */ -char * +static char * ada_varobj_get_value_of_variable (struct value *value, struct type *type, struct value_print_options *opts)