From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21291 invoked by alias); 29 Apr 2010 22:18:39 -0000 Received: (qmail 21277 invoked by uid 22791); 29 Apr 2010 22:18:37 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=BAYES_00,MSGID_MULTIPLE_AT,TW_CP X-Spam-Check-By: sourceware.org Received: from mailhost.u-strasbg.fr (HELO mailhost.u-strasbg.fr) (130.79.200.158) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 29 Apr 2010 22:18:33 +0000 Received: from baal.u-strasbg.fr (baal.u-strasbg.fr [IPv6:2001:660:2402::41]) by mailhost.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id o3TMIUX2045133 for ; Fri, 30 Apr 2010 00:18:30 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from mailserver.u-strasbg.fr (ms1.u-strasbg.fr [IPv6:2001:660:2402:d::10]) by baal.u-strasbg.fr (8.14.0/jtpda-5.5pre1) with ESMTP id o3TMIUei044540 for ; Fri, 30 Apr 2010 00:18:30 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from d620muller (lec67-4-82-230-53-140.fbx.proxad.net [82.230.53.140]) (user=mullerp mech=LOGIN) by mailserver.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id o3TMITqU026541 (version=TLSv1/SSLv3 cipher=RC4-MD5 bits=128 verify=NO) for ; Fri, 30 Apr 2010 00:18:30 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) From: "Pierre Muller" To: Subject: [RFC] pascal: Add lowercase copy of symbol name Date: Thu, 29 Apr 2010 22:18:00 -0000 Message-ID: <002101cae7e9$e7229540$b567bfc0$@muller@ics-cnrs.unistra.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-04/txt/msg00967.txt.bz2 Pascal language is supposed to be case insensitive, but until now it is not true inside GDB. There are several reasons, but some would like to get better support for this feature. Here is a step in that direction: adding a new pascal_specific field for general_symbol_info structure, fill it with a lowercase copy of the symbol name and use that lowercase copy for searches if case_sensitivityy is off. I did not yet really decide exactly how I am going to use this inside that pascal expression parser. One idea would be to first try an exact match, and if that fails, try again forcing case_sensitivity to off temporarily. Comments? Pierre Muller Pascal language support maintainer for GDB 2010-04-29 Pierre Muller * symtab.h (general_symbol_info): Add pascal_specific field with lowercase_name subfield. * symtab.c (symbol_init_language_specific): Initialize pascal_specific.lowercase_name to NULL. (symbol_set_names): Construct lowercase_name string. (symbol_search_name): Return LOWERCASE_NAME for pascal language if CASE_SENSITIVITY is off. Index: src/gdb/symtab.c =================================================================== RCS file: /cvs/src/src/gdb/symtab.c,v retrieving revision 1.234 diff -u -p -r1.234 symtab.c --- src/gdb/symtab.c 29 Apr 2010 14:45:38 -0000 1.234 +++ src/gdb/symtab.c 29 Apr 2010 21:51:42 -0000 @@ -353,6 +353,10 @@ symbol_init_language_specific (struct ge { gsymbol->language_specific.cplus_specific.demangled_name = NULL; } + else if (gsymbol->language == language_pascal) + { + gsymbol->language_specific.pascal_specific.lowercase_name = NULL; + } else { memset (&gsymbol->language_specific, 0, @@ -532,6 +536,28 @@ symbol_set_names (struct general_symbol_ return; } + if (gsymbol->language == language_pascal) + { + int i; + char *lc_name; + /* In pascal, we do the symbol lookups using the lowercase name. */ + if (!copy_name) + gsymbol->name = (char *) linkage_name; + else + { + gsymbol->name = obstack_alloc (&objfile->objfile_obstack, len + 1); + memcpy (gsymbol->name, linkage_name, len); + gsymbol->name[len] = '\0'; + } + lc_name = obstack_alloc (&objfile->objfile_obstack, len + 1); + for (i = 0; i < len; i++) + lc_name[i] = tolower (linkage_name[i]); + lc_name[len] = '\0'; + gsymbol->language_specific.pascal_specific.lowercase_name = lc_name; + return; + } + + if (objfile->demangled_names_hash == NULL) create_demangled_names_hash (objfile); @@ -691,6 +717,10 @@ symbol_search_name (const struct general { if (gsymbol->language == language_ada) return gsymbol->name; + else if (gsymbol->language == language_pascal + && case_sensitivity == case_sensitive_off + && gsymbol->language_specific.pascal_specific.lowercase_name != NULL) + return gsymbol->language_specific.pascal_specific.lowercase_name; else return symbol_natural_name (gsymbol); } Index: src/gdb/symtab.h =================================================================== RCS file: /cvs/src/src/gdb/symtab.h,v retrieving revision 1.152 diff -u -p -r1.152 symtab.h --- src/gdb/symtab.h 22 Apr 2010 23:15:42 -0000 1.152 +++ src/gdb/symtab.h 29 Apr 2010 21:51:45 -0000 @@ -130,6 +130,12 @@ struct general_symbol_info char *demangled_name; } cplus_specific; + struct pascal_specific + { + /* This is used for case insensitive searching. */ + char *lowercase_name; + } + pascal_specific; } language_specific;