This is the mail archive of the
gdb-patches@sourceware.cygnus.com
mailing list for the GDB project.
patch: parsing Java characters
- To: gdb-patches@sourceware.cygnus.com
- Subject: patch: parsing Java characters
- From: Jim Blandy <jimb@cygnus.com>
- Date: Thu, 17 Jun 1999 15:18:31 -0500 (EST)
This is about to be committed.
1999-06-04 Jim Blandy <jimb@savonarola.red-bean.com>
Make the '/c' print format use a true character type. This is
more appropriate than builtin_type_char for languages other than
C, and C tolerates it.
* gdbtypes.c (builtin_type_true_char): New variable.
(build_gdbtypes): Initialize it.
* gdbtypes.h (builtin_type_true_char): New declaration.
* printcmd.c (print_scalar_formatted): When the format is 'c',
extract the value as a builtin_type_true_char.
Index: gdb/gdbtypes.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbtypes.c,v
retrieving revision 2.88.12.1
diff -c -c -2 -p -r2.88.12.1 gdbtypes.c
*** gdb/gdbtypes.c 1999/03/26 01:06:29 2.88.12.1
--- gdb/gdbtypes.c 1999/06/11 04:21:10
*************** Foundation, Inc., 59 Temple Place - Suit
*** 39,42 ****
--- 39,43 ----
struct type *builtin_type_void;
struct type *builtin_type_char;
+ struct type *builtin_type_true_char;
struct type *builtin_type_short;
struct type *builtin_type_int;
*************** build_gdbtypes ()
*** 2785,2789 ****
"char", (struct objfile *) NULL);
TYPE_FLAGS (builtin_type_char) |= TYPE_FLAG_NOSIGN;
!
builtin_type_signed_char =
init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
--- 2786,2793 ----
"char", (struct objfile *) NULL);
TYPE_FLAGS (builtin_type_char) |= TYPE_FLAG_NOSIGN;
! builtin_type_true_char =
! init_type (TYPE_CODE_CHAR, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
! 0,
! "true character", (struct objfile *) NULL);
builtin_type_signed_char =
init_type (TYPE_CODE_INT, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
Index: gdb/gdbtypes.h
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/gdbtypes.h,v
retrieving revision 2.71.12.1
diff -c -c -2 -p -r2.71.12.1 gdbtypes.h
*** gdb/gdbtypes.h 1999/03/26 01:06:30 2.71.12.1
--- gdb/gdbtypes.h 1999/06/11 04:21:11
*************** extern struct type *builtin_type_int64;
*** 845,848 ****
--- 845,853 ----
extern struct type *builtin_type_uint64;
+ /* We use this for the '/c' print format, because builtin_type_char is
+ just a one-byte integral type, which languages less laid back than
+ C will print as ... well, a one-byte integral type. */
+ extern struct type *builtin_type_true_char;
+
/* This type represents a type that was unrecognized in symbol
read-in. */
Index: gdb/printcmd.c
===================================================================
RCS file: /cvs/cvsfiles/devo/gdb/printcmd.c,v
retrieving revision 1.148
diff -c -c -2 -p -r1.148 printcmd.c
*** gdb/printcmd.c 1999/03/10 00:14:04 1.148
--- gdb/printcmd.c 1999/06/11 04:21:12
*************** print_scalar_formatted (valaddr, type, f
*** 443,448 ****
case 'c':
! value_print (value_from_longest (builtin_type_char, val_long), stream, 0,
! Val_pretty_default);
break;
--- 443,448 ----
case 'c':
! value_print (value_from_longest (builtin_type_true_char, val_long),
! stream, 0, Val_pretty_default);
break;
Index: gdb/testsuite/gdb.java/jv-print.exp
===================================================================
RCS file: jv-print.exp
diff -N jv-print.exp
*** gdb/testsuite/gdb.java/jv-print.exp Mon Dec 31 20:00:00 1979
--- gdb/testsuite/gdb.java/jv-print.exp Thu Jun 10 22:00:25 1999
***************
*** 0 ****
--- 1,141 ----
+ # Copyright (C) 1999 Free Software Foundation, Inc.
+
+ # This program is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+ # the Free Software Foundation; either version 2 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ # GNU General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, write to the Free Software
+ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ # Please email any bugs, comments, and/or additions to this file to:
+ # bug-gdb@prep.ai.mit.edu
+
+ if $tracelevel then {
+ strace $tracelevel
+ }
+
+ set prms_id 0
+ set bug_id 0
+
+ # Set the current language to Java. This counts as a test. If it
+ # fails, then we skip the other tests.
+
+ proc set_lang_java {} {
+ global gdb_prompt
+
+ if [gdb_test "set language java" "" "set language java"] {
+ return 0
+ }
+
+ if [gdb_test "show language" ".* source language is \"java\".*"] {
+ return 0
+ }
+ return 1;
+ }
+
+ proc test_integer_literals_accepted {} {
+ global gdb_prompt
+
+ # Test various decimal values.
+
+ gdb_test "p 123" " = 123"
+ gdb_test "p -123" " = -123"
+ gdb_test "p/d 123" " = 123"
+
+ # Test various octal values.
+
+ gdb_test "p 0123" " = 83"
+ gdb_test "p 00123" " = 83"
+ gdb_test "p -0123" " = -83"
+ gdb_test "p/o 0123" " = 0123"
+
+ # Test various hexadecimal values.
+
+ gdb_test "p 0x123" " = 291"
+ gdb_test "p -0x123" " = -291"
+ gdb_test "p 0x0123" " = 291"
+ gdb_test "p -0x0123" " = -291"
+ gdb_test "p 0xABCDEF" " = 11259375"
+ gdb_test "p 0xabcdef" " = 11259375"
+ gdb_test "p 0xAbCdEf" " = 11259375"
+ gdb_test "p/x 0x123" " = 0x123"
+ }
+
+ proc test_character_literals_accepted {} {
+ global gdb_prompt
+
+ gdb_test "p 'a'" " = 'a'"
+ gdb_test "p/c 'a'" " = 'a'"
+ gdb_test "p/c 70" " = 'F'"
+ gdb_test "p/x 'a'" " = 0x61"
+ gdb_test "p/d 'a'" " = 97"
+ gdb_test "p/t 'a'" " = 1100001"
+ gdb_test "p/x '\\377'" " = 0xff"
+ gdb_test "p '\\''" " = '\\\\''"
+ # Note "p '\\'" => "= 92 '\\'"
+ gdb_test "p '\\\\'" " = '\\\\\\\\'"
+
+ # Test the /c print format.
+ }
+
+ proc test_integer_literals_rejected {} {
+ global gdb_prompt
+
+ test_print_reject "p 0x"
+ gdb_test "p ''" "Empty character constant\\."
+ gdb_test "p '''" "Empty character constant\\."
+ test_print_reject "p '\\'"
+
+ # Note that this turns into "p '\\\'" at gdb's input.
+ test_print_reject "p '\\\\\\'"
+
+ # Test various decimal values.
+
+ test_print_reject "p DEADBEEF"
+
+ test_print_reject "p 123DEADBEEF"
+ test_print_reject "p 123foobar.bazfoo3"
+ test_print_reject "p 123EEEEEEEEEEEEEEEEE33333k333"
+ gdb_test "p 123.4+56.7" "180.(099\[0-9]*|100\[0-9\]*)" "check for floating addition"
+
+ # Test various octal values.
+
+ test_print_reject "p 09"
+ test_print_reject "p 079"
+
+ # Test various hexadecimal values.
+
+ test_print_reject "p 0xG"
+ test_print_reject "p 0xAG"
+ }
+
+
+
+ # Start with a fresh gdb.
+
+ gdb_exit
+ gdb_start
+ gdb_reinitialize_dir $srcdir/$subdir
+
+ gdb_test "print \$pc" "No registers\\."
+ # FIXME: should also test "print $pc" when there is an execfile but no
+ # remote debugging target, process or corefile.
+
+ gdb_test "set print sevenbit-strings" ""
+ gdb_test "set print address off" "" ""
+ gdb_test "set width 0" ""
+
+ if [set_lang_java] then {
+ test_integer_literals_accepted
+ test_character_literals_accepted
+ test_integer_literals_rejected
+ } else {
+ fail "Java print command tests suppressed"
+ }