This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Start Fortran support for variable objects.


 > >  > First of all, never reference ->main_type - see above for the right way
 > >  > to get the low bound.  An even better way (it seems) is to call
 > >  > get_discrete_bounds.  Take a look at value_subscript for an example.
 > > 
 > > Better than TYPE_LOW_BOUND?
 > 
 > I suppose.  I don't know which one is preferred; some day, someone
 > should go through and clean them all up to be consistent.  I'm fine
 > with either choice.

To keep things simple I've used TYPE_LOW_BOUND.  I've tested with the examples
I've posted before and it works.  Presumably there should also be a test case,
so I'll create one for mi-var-child.exp and mi2-var-child.exp (you still
haven't approved my patch for mi2-cmd-stack.exp (28 Jun 2005 01:53:52 +1200).

In particular, this patch does eliminate the need for the fortran-specific
code.

Nick


2005-06-30  Nick Roberts  <nickrob@snap.net.nz>

	* varobj.c (varobj_list_children): Allow non-zero offsets for
	languages like Fortran.


Index: varobj.c
===================================================================
RCS file: /cvs/src/src/gdb/varobj.c,v
retrieving revision 1.54
diff -u -p -r1.54 varobj.c
--- varobj.c	26 Apr 2005 05:03:37 -0000	1.54
+++ varobj.c	4 Jul 2005 01:36:54 -0000
@@ -696,7 +696,7 @@ varobj_list_children (struct varobj *var
 {
   struct varobj *child;
   char *name;
-  int i;
+  int i, j, retcode;
 
   /* sanity check: have we been passed a pointer? */
   if (childlist == NULL)
@@ -715,11 +715,13 @@ varobj_list_children (struct varobj *var
       /* Mark as the end in case we bail out */
       *((*childlist) + i) = NULL;
 
+      j = i + TYPE_LOW_BOUND (TYPE_INDEX_TYPE (var->type));
+
       /* check if child exists, if not create */
-      name = name_of_child (var, i);
+      name = name_of_child (var, j);
       child = child_exists (var, name);
       if (child == NULL)
-	child = create_child (var, i, name);
+	child = create_child (var, j, name);
 
       *((*childlist) + i) = child;
     }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]