From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31526 invoked by alias); 2 May 2002 11:18:42 -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 31500 invoked from network); 2 May 2002 11:18:36 -0000 Received: from unknown (HELO cerbere.u-strasbg.fr) (130.79.112.7) by sources.redhat.com with SMTP; 2 May 2002 11:18:36 -0000 Received: from laocoon (laocoon.u-strasbg.fr [130.79.112.72]) by cerbere.u-strasbg.fr (8.9.3/8.8.7) with ESMTP id NAA23200 for ; Thu, 2 May 2002 13:18:31 +0200 Message-Id: <4.2.0.58.20020502125232.013415f0@ics.u-strasbg.fr> X-Sender: muller@ics.u-strasbg.fr Date: Thu, 02 May 2002 04:18:00 -0000 To: gdb-patches@sources.redhat.com From: Pierre Muller Subject: [PATH] Change is_pascal_string_type args Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" X-SW-Source: 2002-05/txt/msg00029.txt.bz2 The following patch is only to prepare for the next patch for p-exp.y that will enhance the field search for pascal expressions. It adds a new argument that can contain a pointer to the name of the field containing the chars of the string. If the type is a pascal string the retruned value is now the char array field index plus one. (to avoid a zero if some new pascal compiler use the first field to contain the char array one day...) ChangeLog entry: 2002-05-02 Pierre Muller * p-lang.h (is_pascal_string_type): Declaration changed, new sixth argument of type char ** added. * p-lang.c (is_pascal_string_type): Implementation changed. Args length_pos, length_size, string_pos, char_size can now be NULL. New argument arrayname set to the field name of the char array. Return value set to char array field index plus one. * p-valprint.c (pascal_val_print): Adapt to new declaration of is_pascal_string_type function. Index: p-lang.c =================================================================== RCS file: /cvs/src/src/gdb/p-lang.c,v retrieving revision 1.5 diff -u -p -r1.5 p-lang.c --- p-lang.c 13 Feb 2002 18:49:30 -0000 1.5 +++ p-lang.c 2 May 2002 11:12:00 -0000 @@ -44,7 +44,8 @@ extern void _initialize_pascal_language but this does not happen for Free Pascal nor for GPC. */ int is_pascal_string_type (struct type *type,int *length_pos, - int * length_size, int *string_pos, int *char_size) + int *length_size, int *string_pos, int *char_size, + char **arrayname) { if (TYPE_CODE (type) == TYPE_CODE_STRUCT) { @@ -54,11 +55,17 @@ is_pascal_string_type (struct type *type && strcmp (TYPE_FIELDS (type)[0].name, "length") == 0 && strcmp (TYPE_FIELDS (type)[1].name, "st") == 0) { - *length_pos = TYPE_FIELD_BITPOS (type, 0) / TARGET_CHAR_BIT; - *length_size = TYPE_FIELD_TYPE (type, 0)->length; - *string_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT; - *char_size = 1; - return 1; + if (length_pos) + *length_pos = TYPE_FIELD_BITPOS (type, 0) / TARGET_CHAR_BIT; + if (length_size) + *length_size = TYPE_FIELD_TYPE (type, 0)->length; + if (string_pos) + *string_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT; + if (char_size) + *char_size = 1; + if (arrayname) + *arrayname = TYPE_FIELDS (type)[1].name; + return 2; }; /* GNU pascal strings. */ /* Three fields: Capacity, length and schema$ or _p_schema. */ @@ -66,12 +73,18 @@ is_pascal_string_type (struct type *type && strcmp (TYPE_FIELDS (type)[0].name, "Capacity") == 0 && strcmp (TYPE_FIELDS (type)[1].name, "length") == 0) { - *length_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT; - *length_size = TYPE_FIELD_TYPE (type, 1)->length; - *string_pos = TYPE_FIELD_BITPOS (type, 2) / TARGET_CHAR_BIT; + if (length_pos) + *length_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT; + if (length_size) + *length_size = TYPE_FIELD_TYPE (type, 1)->length; + if (string_pos) + *string_pos = TYPE_FIELD_BITPOS (type, 2) / TARGET_CHAR_BIT; /* FIXME: how can I detect wide chars in GPC ?? */ - *char_size = 1; - return 1; + if (char_size) + *char_size = 1; + if (arrayname) + *arrayname = TYPE_FIELDS (type)[2].name; + return 3; }; } return 0; Index: p-lang.h =================================================================== RCS file: /cvs/src/src/gdb/p-lang.h,v retrieving revision 1.3 diff -u -p -r1.3 p-lang.h --- p-lang.h 9 Nov 2001 09:48:09 -0000 1.3 +++ p-lang.h 2 May 2002 11:12:00 -0000 @@ -38,7 +38,8 @@ extern void pascal_type_print_method_arg /* These are in p-lang.c: */ -extern int is_pascal_string_type (struct type *, int *, int *, int *, int*); +extern int + is_pascal_string_type (struct type *, int *, int *, int *, int *, char **); extern void pascal_printchar (int, struct ui_file *); Index: p-valprint.c =================================================================== RCS file: /cvs/src/src/gdb/p-valprint.c,v retrieving revision 1.9 diff -u -p -r1.9 p-valprint.c --- p-valprint.c 8 Jan 2002 02:09:31 -0000 1.9 +++ p-valprint.c 2 May 2002 11:12:01 -0000 @@ -190,8 +190,8 @@ pascal_val_print (struct type *type, cha as GDB does not recognize stabs pascal strings Pascal strings are mapped to records with lowercase names PM */ - if (is_pascal_string_type (elttype, &length_pos, - &length_size, &string_pos, &char_size) + if (is_pascal_string_type (elttype, &length_pos, &length_size, + &string_pos, &char_size, NULL) && addr != 0) { ULONGEST string_length; @@ -320,7 +320,7 @@ pascal_val_print (struct type *type, cha else { if (is_pascal_string_type (type, &length_pos, &length_size, - &string_pos, &char_size)) + &string_pos, &char_size, NULL)) { len = extract_unsigned_integer (valaddr + embedded_offset + length_pos, length_size); LA_PRINT_STRING (stream, valaddr + embedded_offset + string_pos, len, char_size, 0); Pierre Muller Institut Charles Sadron 6,rue Boussingault F 67083 STRASBOURG CEDEX (France) mailto:muller@ics.u-strasbg.fr Phone : (33)-3-88-41-40-07 Fax : (33)-3-88-41-40-99