This is the mail archive of the gdb-patches@sourceware.cygnus.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]

patch: parsing Java characters



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"
+ }


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