From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19401 invoked by alias); 30 Jun 2005 22:21:48 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 19331 invoked by uid 22791); 30 Jun 2005 22:21:39 -0000 Received: from viper.snap.net.nz (HELO viper.snap.net.nz) (202.37.101.8) by sourceware.org (qpsmtpd/0.30-dev) with ESMTP; Thu, 30 Jun 2005 22:21:39 +0000 Received: from farnswood.snap.net.nz (p236-tnt2.snap.net.nz [202.124.108.236]) by viper.snap.net.nz (Postfix) with ESMTP id 4B7E35553C7; Fri, 1 Jul 2005 10:21:34 +1200 (NZST) Received: by farnswood.snap.net.nz (Postfix, from userid 501) id 762C562A9A; Thu, 30 Jun 2005 23:22:26 +0100 (BST) From: Nick Roberts MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <17092.28833.284587.118362@farnswood.snap.net.nz> Date: Thu, 30 Jun 2005 22:21:00 -0000 To: Daniel Jacobowitz Cc: gdb-patches@sources.redhat.com Subject: Re: PATCH: Start Fortran support for variable objects. In-Reply-To: <20050630131809.GB8241@nevyn.them.org> References: <17091.4780.953681.620094@farnswood.snap.net.nz> <20050630131809.GB8241@nevyn.them.org> X-SW-Source: 2005-06/txt/msg00393.txt.bz2 Daniel Jacobowitz writes: > On Thu, Jun 30, 2005 at 09:29:16AM +1200, Nick Roberts wrote: > > ! vlang_unknown = 0, vlang_c, vlang_cplus, vlang_java, vlang_fortran, > > ! vlang_end > > Extra space before vlang_fortran. OK ... > > --- 727,742 ---- > > /* Mark as the end in case we bail out */ > > *((*childlist) + i) = NULL; > > > > + if (variable_language (var) == vlang_fortran) > > + j = i + 1; > > + else > > + j = i; > > + > > /* check if child exists, if not create */ > > ! name = name_of_child (var, j); > > child = child_exists (var, name); > > if (child == NULL) > > ! child = create_child (var, j, name); > > > > *((*childlist) + i) = child; > > } > > Do you think you should use f77_get_dynamic_lowerbound? See eval.c, > under multi_f77_subscript. As in the patch below? I don't understand the extra cases it appears to cover, but it worked for the tests I tried. Nick *** varobj.c.~1.54.~ 2005-06-29 00:28:57.000000000 +1200 --- varobj.c 2005-07-01 10:06:44.000000000 +1200 *************** *** 23,28 **** --- 23,29 ---- #include "expression.h" #include "frame.h" #include "language.h" + #include "f-lang.h" #include "wrapper.h" #include "gdbcmd.h" *************** *** 46,52 **** { "natural", "binary", "decimal", "hexadecimal", "octal" }; /* String representations of gdb's known languages */ ! char *varobj_language_string[] = { "unknown", "C", "C++", "Java" }; /* Data structures */ --- 47,53 ---- { "natural", "binary", "decimal", "hexadecimal", "octal" }; /* String representations of gdb's known languages */ ! char *varobj_language_string[] = { "unknown", "C", "C++", "Java", "Fortran" }; /* Data structures */ *************** *** 372,377 **** --- 373,390 ---- java_type_of_child, java_variable_editable, java_value_of_variable} + , + /* Fortran */ + { + vlang_fortran, + c_number_of_children, + c_name_of_variable, + c_name_of_child, + c_value_of_root, + c_value_of_child, + c_type_of_child, + c_variable_editable, + c_value_of_variable} }; /* A little convenience enum for dealing with C++/Java */ *************** *** 696,702 **** { struct varobj *child; char *name; ! int i; /* sanity check: have we been passed a pointer? */ if (childlist == NULL) --- 709,716 ---- { struct varobj *child; char *name; ! int lower_bound; ! int i, j, retcode; /* sanity check: have we been passed a pointer? */ if (childlist == NULL) *************** *** 715,725 **** /* Mark as the end in case we bail out */ *((*childlist) + i) = NULL; /* check if child exists, if not create */ ! name = name_of_child (var, i); child = child_exists (var, name); if (child == NULL) ! child = create_child (var, i, name); *((*childlist) + i) = child; } --- 729,750 ---- /* Mark as the end in case we bail out */ *((*childlist) + i) = NULL; + if (variable_language (var) == vlang_fortran) + { + retcode = f77_get_dynamic_lowerbound (var->type, &lower_bound); + if (retcode == BOUND_FETCH_ERROR) + error (_("Cannot obtain valid array lower bound")); + else + j = i + lower_bound; + } + else + j = i; + /* check if child exists, if not create */ ! name = name_of_child (var, j); child = child_exists (var, name); if (child == NULL) ! child = create_child (var, j, name); *((*childlist) + i) = child; } *************** *** 1564,1570 **** case language_java: lang = vlang_java; break; ! } return lang; } --- 1589,1598 ---- case language_java: lang = vlang_java; break; ! case language_fortran: ! lang = vlang_fortran; ! break; ! } return lang; }