diff -Nrc3pad gcc-3.2.3/boehm-gc/acinclude.m4 gcc-3.3/boehm-gc/acinclude.m4 *** gcc-3.2.3/boehm-gc/acinclude.m4 2001-10-16 09:01:35.000000000 +0000 --- gcc-3.3/boehm-gc/acinclude.m4 2002-05-16 17:41:54.000000000 +0000 *************** *** 1,4 **** ! # Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved. # # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED # OR IMPLIED. ANY USE IS AT YOUR OWN RISK. --- 1,4 ---- ! # Copyright (c) 1999-2001, 2002 by Red Hat, Inc. All rights reserved. # # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED # OR IMPLIED. ANY USE IS AT YOUR OWN RISK. *************** fi *** 52,58 **** AC_CANONICAL_SYSTEM # This works around an automake problem. ! mkinstalldirs="`cd $ac_aux_dir && pwd`/mkinstalldirs" AC_SUBST(mkinstalldirs) AM_INIT_AUTOMAKE(gc, 6.1a1, no-define) --- 52,58 ---- AC_CANONICAL_SYSTEM # This works around an automake problem. ! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs" AC_SUBST(mkinstalldirs) AM_INIT_AUTOMAKE(gc, 6.1a1, no-define) diff -Nrc3pad gcc-3.2.3/boehm-gc/aclocal.m4 gcc-3.3/boehm-gc/aclocal.m4 *** gcc-3.2.3/boehm-gc/aclocal.m4 2003-04-22 06:56:18.000000000 +0000 --- gcc-3.3/boehm-gc/aclocal.m4 2003-05-14 00:18:14.000000000 +0000 *************** dnl but WITHOUT ANY WARRANTY, to the ext *** 10,16 **** dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. ! # Copyright (c) 1999-2001 by Red Hat, Inc. All rights reserved. # # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED # OR IMPLIED. ANY USE IS AT YOUR OWN RISK. --- 10,16 ---- dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. ! # Copyright (c) 1999-2001, 2002 by Red Hat, Inc. All rights reserved. # # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED # OR IMPLIED. ANY USE IS AT YOUR OWN RISK. *************** fi *** 64,70 **** AC_CANONICAL_SYSTEM # This works around an automake problem. ! mkinstalldirs="`cd $ac_aux_dir && pwd`/mkinstalldirs" AC_SUBST(mkinstalldirs) AM_INIT_AUTOMAKE(gc, 6.0, no-define) --- 64,70 ---- AC_CANONICAL_SYSTEM # This works around an automake problem. ! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs" AC_SUBST(mkinstalldirs) AM_INIT_AUTOMAKE(gc, 6.0, no-define) diff -Nrc3pad gcc-3.2.3/boehm-gc/alloc.c gcc-3.3/boehm-gc/alloc.c *** gcc-3.2.3/boehm-gc/alloc.c 2002-02-12 04:37:53.000000000 +0000 --- gcc-3.3/boehm-gc/alloc.c 2003-03-04 06:38:30.000000000 +0000 *************** void GC_maybe_gc() *** 306,311 **** --- 306,312 ---- GC_bool GC_try_to_collect_inner(stop_func) GC_stop_func stop_func; { + if (GC_dont_gc) return FALSE; if (GC_incremental && GC_collection_in_progress()) { # ifdef CONDPRINT if (GC_print_stats) { *************** int n; *** 386,391 **** --- 387,393 ---- { register int i; + if (GC_dont_gc) return; if (GC_incremental && GC_collection_in_progress()) { for (i = GC_deficit; i < GC_RATE*n; i++) { if (GC_mark_some((ptr_t)0)) { *************** GC_stop_func stop_func; *** 446,451 **** --- 448,456 ---- CLOCK_TYPE start_time, current_time; # endif + # if defined(REGISTER_LIBRARIES_EARLY) + GC_cond_register_dynamic_libraries(); + # endif STOP_WORLD(); # ifdef PRINTTIMES GET_TIME(start_time); diff -Nrc3pad gcc-3.2.3/boehm-gc/ChangeLog gcc-3.3/boehm-gc/ChangeLog *** gcc-3.2.3/boehm-gc/ChangeLog 2003-04-22 06:14:05.000000000 +0000 --- gcc-3.3/boehm-gc/ChangeLog 2003-05-14 00:08:56.000000000 +0000 *************** *** 1,10 **** ! 2003-04-22 Release Manager ! * GCC 3.2.3 Released. ! 2003-02-05 Release Manager ! * GCC 3.2.2 Released. 2003-01-27 Alexandre Oliva --- 1,61 ---- ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! ! 2003-05-13 Release Manager ! ! * GCC 3.3 Released. ! ! 2003-05-13 Release Manager ! ! * GCC 3.3 Released. ! ! 2003-04-28 Mohan Embar ! ! * configure.in: define GC_DLL under mingw if --enable-shared ! * configure: rebuilt ! * win32_threads.c: add #ifdef GC_DLL around DllMain ! ! 2003-04-09 Tom Tromey ! ! * include/private/gcconfig.h (LINUX_STACKBOTTOM): Define for ! POWERPC. ! (STACK_GRAN, HEURISTIC1): Don't define for POWERPC. ! ! 2003-03-04 Hans Boehm ! * include/private/gcconfig.h (GC_data_start): declare when needed. ! * include/private/gc_priv.h: Include gcconfig.h after ptr_t ! declaration. ! ! 2003-03-03 Hans Boehm ! * mark_rts.c (GC_cond_register_dynamic_libraries): add. ! (GC_push_roots): explicitly mark free list headers, register ! dynamic libraries only if !REGISTER_LIBRARIES_EARLY. ! * alloc.c (GC_stopped_mark): Conditionally call ! GC_cond_register_dynamic_libraries(). ! (GC_collect_a_little_inner, GC_try_to_collect_inner): Check GC_dont_gc. ! * dyn_load.c (GC_register_main_static_data): define. ! (GC_register_dyn_libraries (Linux /proc, Linux ELF versions)): ! no longer skip main data. Register main data for static executable. ! * misc.c (GC_REGISTER_MAIN_STATIC_DATA): define. ! (GC_init_inner): Make main data registration conditional. ! * include/private/gc_priv.h (GC_register_main_static_data): declare. ! * include/private/gcconfig.h (REGISTER_LIBRARIES_EARLY): define ! for LINUX. ! ! 2003-02-20 Alexandre Oliva ! ! * configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to ! config.status. ! * configure: Rebuilt. ! ! 2003-02-11 Andreas Tobler ! ! * include/private/gcconfig.h: undefine MPROTECT_VDB for MACOSX 2003-01-27 Alexandre Oliva *************** *** 13,58 **** * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. ! 2002-11-19 Release Manager ! * GCC 3.2.1 Released. ! 2002-11-19 Release Manager ! * GCC 3.2.1 Released. ! 2002-11-18 Release Manager ! * GCC 3.2.1 Released. ! 2002-10-07 Kaveh R. Ghazi ! * Makefile.am (all-multi): Fix multilib parallel build. 2002-08-23 Adam Megacz * win32_threads.cc: Removed extraneous ABORT() ! 2002-08-14 Release Manager ! * GCC 3.2 Released. ! 2002-07-25 Release Manager ! * GCC 3.1.1 Released. ! 2002-06-28 Hans Boehm ! Jonathan Clark ! * win32_threads.c (GC_push_all_stacks): Tolerate bad sp. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. 2002-05-08 Alexandre Oliva --- 64,158 ---- * Makefile.am (toolexecdir, toolexeclibdir): Don't override. * Makefile.in, configure: Rebuilt. ! 2002-12-31 Tom Tromey ! For PR libgcj/8933: ! * include/Makefile.in: Rebuilt. ! * include/Makefile.am (noinst_HEADERS): Renamed from ! include_HEADERS. ! 2002-11-19 Rainer Orth ! * ltconfig (osf[345]): Append $major to soname_spec. ! Reflect this in library_names_spec. ! * ltmain.sh (osf): Prefix $major with . for use as extension. ! 2002-10-02 Andreas Jaeger ! * include/private/gcconfig.h (HBLKSIZE): Define for x86-64. ! 2002-09-28 Richard Earnshaw ! * include/private/gcconfig.h: Don't check for __XSCALE__. Instead ! check for __arm__ or __thumb__. ! ! 2002-09-27 Ulrich Weigand ! ! * include/private/gcconfig: Add machine type S390. Add s390x support. ! * include/private/gc_locks.h (GC_test_and_set): Implement for s390. ! (GC_compare_and_exchange): Likewise. ! ! 2002-09-24 Jason Thorpe ! ! * include/private/gcconfig.h: Fix NetBSD/mips parameters. 2002-08-23 Adam Megacz * win32_threads.cc: Removed extraneous ABORT() ! 2002-09-22 Kaveh R. Ghazi ! * Makefile.am (all-multi): Fix multilib parallel build. ! 2002-07-18 Bo Thorsen ! * include/private/gcconfig.h: Add x86-64 definitions. ! * os_dep.c: Add x86-64 support. ! * configure.in: Likewise. ! * configure: Regenerate. ! 2002-07-18 H.J. Lu ! * mach_dep.c (GC_push_regs): Remove the unused Linux/mips code. ! 2002-07-18 H.J. Lu (hjl@gnu.org) ! * configure.in (machdep): Don't add mips_sgi_mach_dep.lo for ! Linux/mips. ! 2002-06-28 Hans Boehm ! Jonathan Clark ! * win32_threads.c (GC_push_all_stacks): Tolerate bad sp. ! ! 2002-06-09 H.J. Lu (hjl@gnu.org) ! ! * include/private/gc_locks.h (GC_test_and_set): Support ! Linux/mips. ! (GC_TEST_AND_SET_DEFINED): Likewise. ! ! * include/private/gcconfig.h (DYNAMIC_LOADING): Defined for ! Linux/mips. ! (DATAEND): Likewise. ! (LINUX_STACKBOTTOM): Likewise. ! (STACKBOTTOM): Removed for Linux/mips. ! ! Sun May 19 11:32:03 2002 Mark P Mitchell ! ! * irix_threads.cc (GC_pthread_detach): Do not use REAL_FUNC. ! (GC_pthread_create): Fix typo. ! (GC_TRY_LOCK): Likewise. ! * include/private/gc_locks.h (GC_test_and_set): Only take one ! one argument. ! (LOCK): Adjust appropriately. ! * include/private/gc_priv.h (SIG_SUSPEND): Use SIGRTMIN if ! _SIGRTMIN is unavailable. ! ! 2002-05-16 Rainer Orth ! ! * acinclude.m4: Allow for PWDCMD to override hardcoded pwd. ! * aclocal.m4: Regenerate. ! * configure: Regenerate. 2002-05-08 Alexandre Oliva *************** *** 83,99 **** SPARC Linux. 2002-04-09 Loren J. Rittle - Richard Henderson * include/private/gcconfig.h (DATAEND): Update comment example ! to match reality. Clarify comment. ! Change all likely references to linker script synthesized ! symbols to use this idiom: extern int etext[]; etext ! * os_dep.c (GC_init_linux_data_start): Fix references to ! __data_start and _end. 2002-04-08 Hans Boehm ! * include/private/gc_priv.h (WARN macro): Add "GC warning:" prefix. (GC_large_alloc_warn_interval, GC_large_alloc_warn_suppressed): declare. --- 183,198 ---- SPARC Linux. 2002-04-09 Loren J. Rittle * include/private/gcconfig.h (DATAEND): Update comment example ! to match reality. ! ! 2002-04-08 Loren J. Rittle ! ! * include/private/gcconfig.h (DATAEND): Clarify comment. 2002-04-08 Hans Boehm ! * include/private/gc_priv.h (WARN macro): Add "GC warning:" prefix. (GC_large_alloc_warn_interval, GC_large_alloc_warn_suppressed): declare. *************** *** 101,107 **** frequency for blacklist warning message. * misc.c (GC_large_alloc_warn_interval, GC_large_alloc_warn_suppressed): define. ! (GC_init_inner): Check GC_NO_BLACKLIST_WARNING and GC_LARGE_ALLOC_WARN_INTERVAL environment variables. * doc/README.environment (GC_NO_BLACKLIST_WARNING): Deprecate. (GC_LARGE_ALLOC_WARN_INTERVAL): Add documentation. --- 200,206 ---- frequency for blacklist warning message. * misc.c (GC_large_alloc_warn_interval, GC_large_alloc_warn_suppressed): define. ! (GC_init_inner): Check GC_NO_BLACKLIST_WARNING and GC_LARGE_ALLOC_WARN_INTERVAL environment variables. * doc/README.environment (GC_NO_BLACKLIST_WARNING): Deprecate. (GC_LARGE_ALLOC_WARN_INTERVAL): Add documentation. *************** *** 114,126 **** memory hole between the end of the initialized data segment and the start of the BSS on FreeBSD/i386. - 2002-04-01 Loren J. Rittle - - * include/private/gcconfig.h: Add unified test for FreeBSD. - Support FreeBSD/alpha. - * os_dep.c: Do not include unless available. - (GC_freebsd_stack_base): Fix types. - 2002-03-30 Krister Walfridsson * include/private/gcconfig.h: define DYNAMIC_LOADING for ELF --- 213,218 ---- *************** *** 138,147 **** Safer definition for INVALID_QTID, quick_thread_id. Fix/add comments. Rearrange tse fields. ! 2002-03-24 Jeff Sturm * linux_threads.c (GC_get_nprocs): Close file descriptor. 2002-03-15 Anthony Green * misc.c (GC_init_inner): Initialize GC_write_cs before use. --- 230,262 ---- Safer definition for INVALID_QTID, quick_thread_id. Fix/add comments. Rearrange tse fields. ! 2002-03-27 Richard Henderson ! ! * os_dep.c (GC_init_linux_data_start): Fix references to ! __data_start and _end. ! ! 2002-03-25 Loren J. Rittle ! ! * include/private/gcconfig.h: Change all likely references ! to linker script synthesized symbols to use this idiom: ! extern int etext[]; etext ! ! 2002-03-25 Jeff Sturm * linux_threads.c (GC_get_nprocs): Close file descriptor. + 2002-03-21 Loren J. Rittle + + * include/private/gcconfig.h: Add unified test for FreeBSD. + Support FreeBSD/alpha. + * os_dep.c: Do not include unless available. + (GC_freebsd_stack_base): Fix types. + + 2002-03-17 Bryce McKinlay + + * Makefile.am: Make a convenience library. + * Makefile.in: Rebuilt. + 2002-03-15 Anthony Green * misc.c (GC_init_inner): Initialize GC_write_cs before use. *************** *** 159,175 **** compiling with GCC. * mark.c (GC_mark_some): We no longer use SEH if compiling with GCC. ! 2002-03-09 Bryce McKinlay ! * include/gc_priv.h: Define ALIGN_DOUBLE on 32 bit targets if GCJ support is enabled, for hash synchronization. - 2002-03-17 Bryce McKinlay - - * Makefile.am: Make a convenience library. - * Makefile.in: Rebuilt. - 2002-02-24 Adam Megacz * Makefile.am: Added win32_threads.c to sources list. --- 274,285 ---- compiling with GCC. * mark.c (GC_mark_some): We no longer use SEH if compiling with GCC. ! 2002-03-09 Bryce McKinlay ! * include/gc_priv.h: Define ALIGN_DOUBLE on 32 bit targets if GCJ support is enabled, for hash synchronization. 2002-02-24 Adam Megacz * Makefile.am: Added win32_threads.c to sources list. *************** *** 183,190 **** 2002-02-13 Bryce McKinlay * dbg_mlc.c (GC_debug_generic_malloc): Removed. ! ! * sparc_mach_dep.S: Rename from sparc_mach_dep.s as it is a preprocessor file. * mips_sgi_mach_dep.S: Likewise. * Makefile.am: Update for above changes. --- 293,300 ---- 2002-02-13 Bryce McKinlay * dbg_mlc.c (GC_debug_generic_malloc): Removed. ! ! * sparc_mach_dep.S: Rename from sparc_mach_dep.s as it is a preprocessor file. * mips_sgi_mach_dep.S: Likewise. * Makefile.am: Update for above changes. *************** *** 231,237 **** * boehm-gc on win32 now automatically detects if it is being built as a DLL; see http://gcc.gnu.org/ml/java/2001-12/msg00240.html ! 2002-01-25 David Edelsohn * include/gc.h (GC_INIT): Add DATASTART and DATAEND roots on AIX. --- 341,347 ---- * boehm-gc on win32 now automatically detects if it is being built as a DLL; see http://gcc.gnu.org/ml/java/2001-12/msg00240.html ! 2002-01-25 David Edelsohn * include/gc.h (GC_INIT): Add DATASTART and DATAEND roots on AIX. *************** *** 252,258 **** 2001-12-16 Craig Rodrigues PR other/3725 ! * configure.in: Add AC_SUBST(target_alias). * configure: Regenerated. 2001-11-26 Loren J. Rittle --- 362,368 ---- 2001-12-16 Craig Rodrigues PR other/3725 ! * configure.in: Add AC_SUBST(target_alias). * configure: Regenerated. 2001-11-26 Loren J. Rittle *************** *** 300,306 **** * solaris_threads.c (MAX_ORIG_STACK_SIZE) [I386]: Provide special Solaris 2/Intel definition. ! * configure.in (i?86-*-solaris2.[89]*): Define SOLARIS25_PROC_VDB_BUG_FIXED. * include/private/gcconfig.h [I386 && SUNOS5]: Use it. --- 410,416 ---- * solaris_threads.c (MAX_ORIG_STACK_SIZE) [I386]: Provide special Solaris 2/Intel definition. ! * configure.in (i?86-*-solaris2.[89]*): Define SOLARIS25_PROC_VDB_BUG_FIXED. * include/private/gcconfig.h [I386 && SUNOS5]: Use it. *************** *** 485,492 **** functions. * Makefile.in: Rebuilt. * configure: Rebuilt. ! ! * linux_thread.c (GC_thr_init, GC_suspend_handler): Add SIGABRT to the list of signals which are not blocked during suspend in the NO_SIGNALS case. --- 595,602 ---- functions. * Makefile.in: Rebuilt. * configure: Rebuilt. ! ! * linux_thread.c (GC_thr_init, GC_suspend_handler): Add SIGABRT to the list of signals which are not blocked during suspend in the NO_SIGNALS case. *************** *** 513,519 **** 2000-09-30 Bryce McKinlay ! * configure.in: Define GC_GCJ_SUPPORT. Define NO_DEBUGGING in cross-compile configuration only. * Makefile.am: Build gcj_mlc.c. * configure, Makefile.in: Rebuilt. --- 623,629 ---- 2000-09-30 Bryce McKinlay ! * configure.in: Define GC_GCJ_SUPPORT. Define NO_DEBUGGING in cross-compile configuration only. * Makefile.am: Build gcj_mlc.c. * configure, Makefile.in: Rebuilt. *************** *** 596,602 **** Imported version version 5.0alpha6. * acinclude.m4: Bump version to 5.0a6. * configure.in: Don't use alpha_mach_dep.s. ! * include/private/config.h, irix_threads.c gc_watcom.asm: Delete obsolete files. * Makefile.am, Makefile.in: irix_threads.c is now hpux_irix_threads.c. --- 706,712 ---- Imported version version 5.0alpha6. * acinclude.m4: Bump version to 5.0a6. * configure.in: Don't use alpha_mach_dep.s. ! * include/private/config.h, irix_threads.c gc_watcom.asm: Delete obsolete files. * Makefile.am, Makefile.in: irix_threads.c is now hpux_irix_threads.c. *************** Fri Jan 28 17:13:20 2000 Anthony Green *** 628,634 **** 1999-12-19 Anthony Green ! * gcconfig.h: Use libgcj hack for Alpha Linux. Undefine MPROTEXT_VDB (from Jeff Sturm). * os_dep.c: Remove Alpha Linux hacks. * misc.c: Ditto. --- 738,744 ---- 1999-12-19 Anthony Green ! * gcconfig.h: Use libgcj hack for Alpha Linux. Undefine MPROTEXT_VDB (from Jeff Sturm). * os_dep.c: Remove Alpha Linux hacks. * misc.c: Ditto. *************** Mon Aug 2 23:09:41 1999 Rainer Orth < *** 825,831 **** (LTCOMPILE): Renamed; added libtool invocation. (LINK): Added libtool invocation. (.s.o): use LTCOMPILE. ! * configure.in: Call AM_PROG_LIBTOOL. (target_all): Set to libgcjgc.la. Mention `.lo' forms of object files. --- 935,941 ---- (LTCOMPILE): Renamed; added libtool invocation. (LINK): Added libtool invocation. (.s.o): use LTCOMPILE. ! * configure.in: Call AM_PROG_LIBTOOL. (target_all): Set to libgcjgc.la. Mention `.lo' forms of object files. *************** Mon Aug 2 23:09:41 1999 Rainer Orth < *** 909,915 **** * configure.in: likewise * misc.c (GC_write): add eCos support. * os_dep.c (tiny_sbrk): add eCos support. ! Thu Dec 10 18:24:34 1998 Warren Levy * misc.c (GC_init_inner): Moved STACKBASE code to os_dep.c. --- 1019,1025 ---- * configure.in: likewise * misc.c (GC_write): add eCos support. * os_dep.c (tiny_sbrk): add eCos support. ! Thu Dec 10 18:24:34 1998 Warren Levy * misc.c (GC_init_inner): Moved STACKBASE code to os_dep.c. *************** Thu Dec 10 18:24:34 1998 Warren Levy < *** 921,929 **** 1998-11-20 Andrew Haley ! * Makefile.am, Makefile.in, configure.host: tx39 build option "-G 0" added. ! 1998-11-17 Tom Tromey * configure: Rebuilt. --- 1031,1039 ---- 1998-11-20 Andrew Haley ! * Makefile.am, Makefile.in, configure.host: tx39 build option "-G 0" added. ! 1998-11-17 Tom Tromey * configure: Rebuilt. *************** Wed Apr 15 11:40:56 1998 Tom Tromey &6 ! echo "configure:597: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 604,610 ---- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:608: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** test -z "$INSTALL_SCRIPT" && INSTALL_SCR *** 646,652 **** test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 ! echo "configure:650: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile --- 657,663 ---- test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 ! echo "configure:661: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile *************** test "$program_suffix" != NONE && *** 703,709 **** test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:707: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 714,720 ---- test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:718: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** else *** 736,747 **** fi echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 ! echo "configure:740: checking for Cygwin environment" >&5 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:751: checking for Cygwin environment" >&5 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_cygwin=yes else --- 763,769 ---- return __CYGWIN__; ; return 0; } EOF ! if { (eval echo configure:767: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_cygwin=yes else *************** echo "$ac_t""$ac_cv_cygwin" 1>&6 *** 769,787 **** CYGWIN= test "$ac_cv_cygwin" = yes && CYGWIN=yes echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 ! echo "configure:773: checking for mingw32 environment" >&5 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mingw32=yes else --- 780,798 ---- CYGWIN= test "$ac_cv_cygwin" = yes && CYGWIN=yes echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 ! echo "configure:784: checking for mingw32 environment" >&5 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_mingw32=yes else *************** else { echo "configure: error: can not r *** 892,898 **** fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:896: checking host system type" >&5 host_alias=$host case "$host_alias" in --- 903,909 ---- fi echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:907: checking host system type" >&5 host_alias=$host case "$host_alias" in *************** host_os=`echo $host | sed 's/^\([^-]*\)- *** 913,919 **** echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 ! echo "configure:917: checking target system type" >&5 target_alias=$target case "$target_alias" in --- 924,930 ---- echo "$ac_t""$host" 1>&6 echo $ac_n "checking target system type""... $ac_c" 1>&6 ! echo "configure:928: checking target system type" >&5 target_alias=$target case "$target_alias" in *************** target_os=`echo $target | sed 's/^\([^-] *** 931,937 **** echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:935: checking build system type" >&5 build_alias=$build case "$build_alias" in --- 942,948 ---- echo "$ac_t""$target" 1>&6 echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:946: checking build system type" >&5 build_alias=$build case "$build_alias" in *************** test "$host_alias" != "$target_alias" && *** 955,961 **** # This works around an automake problem. ! mkinstalldirs="`cd $ac_aux_dir && pwd`/mkinstalldirs" --- 966,972 ---- # This works around an automake problem. ! mkinstalldirs="`cd $ac_aux_dir && ${PWDCMD-pwd}`/mkinstalldirs" *************** fi *** 971,977 **** missing_dir=`cd $ac_aux_dir && pwd` echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 ! echo "configure:975: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. --- 982,988 ---- missing_dir=`cd $ac_aux_dir && pwd` echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 ! echo "configure:986: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. *************** else *** 984,990 **** fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 ! echo "configure:988: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. --- 995,1001 ---- fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 ! echo "configure:999: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. *************** else *** 997,1003 **** fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 ! echo "configure:1001: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. --- 1008,1014 ---- fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 ! echo "configure:1012: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. *************** else *** 1010,1016 **** fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 ! echo "configure:1014: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. --- 1021,1027 ---- fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 ! echo "configure:1025: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. *************** else *** 1023,1029 **** fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 ! echo "configure:1027: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. --- 1034,1040 ---- fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 ! echo "configure:1038: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. *************** fi *** 1049,1055 **** # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1053: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1060,1066 ---- # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1064: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -z "$CC"; then *** 1079,1085 **** # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1083: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1090,1096 ---- # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1094: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1128,1134 **** fi echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:1132: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1139,1145 ---- fi echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:1143: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 1137,1143 **** yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1141: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no --- 1148,1154 ---- yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1152: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no *************** if test $ac_cv_prog_gcc = yes; then *** 1152,1158 **** ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:1156: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1163,1169 ---- ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:1167: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** do *** 1189,1195 **** # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1193: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1200,1206 ---- # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1204: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** test -n "$CXX" || CXX="gcc" *** 1222,1228 **** test -z "$CXX" && { echo "configure: error: no acceptable c++ found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 ! echo "configure:1226: checking whether we are using GNU C++" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1233,1239 ---- test -z "$CXX" && { echo "configure: error: no acceptable c++ found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6 ! echo "configure:1237: checking whether we are using GNU C++" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 1231,1237 **** yes; #endif EOF ! if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1235: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gxx=yes else ac_cv_prog_gxx=no --- 1242,1248 ---- yes; #endif EOF ! if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1246: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gxx=yes else ac_cv_prog_gxx=no *************** if test $ac_cv_prog_gxx = yes; then *** 1246,1252 **** ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS= echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 ! echo "configure:1250: checking whether ${CXX-g++} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1257,1263 ---- ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS= echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6 ! echo "configure:1261: checking whether ${CXX-g++} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1279,1285 **** # NEWLIB_CONFIGURE, which doesn't work because that means that it will # be run before AC_CANONICAL_HOST. echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:1283: checking build system type" >&5 build_alias=$build case "$build_alias" in --- 1290,1296 ---- # NEWLIB_CONFIGURE, which doesn't work because that means that it will # be run before AC_CANONICAL_HOST. echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:1294: checking build system type" >&5 build_alias=$build case "$build_alias" in *************** echo "$ac_t""$build" 1>&6 *** 1300,1306 **** # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1304: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1311,1317 ---- # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1315: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1332,1338 **** # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1336: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1343,1349 ---- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1347: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1364,1370 **** # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1368: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1375,1381 ---- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1379: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 1396,1402 **** # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1400: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1407,1413 ---- # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1411: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 1441,1447 **** # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:1445: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 1452,1458 ---- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:1456: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** test -z "$INSTALL_DATA" && INSTALL_DATA= *** 1495,1501 **** echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 ! echo "configure:1499: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" --- 1506,1512 ---- echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 ! echo "configure:1510: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" *************** if false; then *** 1533,1539 **** echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 ! echo "configure:1537: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1544,1550 ---- echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 ! echo "configure:1548: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 1543,1552 **** rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= ! if { (eval echo configure:1547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in ! *.c | *.o | *.obj) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done --- 1554,1563 ---- rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= ! if { (eval echo configure:1558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in ! *.c | *.o | *.obj | *.ilk | *.pdb) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done *************** ac_prog=ld *** 1665,1671 **** if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 ! echo "configure:1669: checking for ld used by GCC" >&5 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw --- 1676,1682 ---- if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 ! echo "configure:1680: checking for ld used by GCC" >&5 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw *************** echo "configure:1669: checking for ld us *** 1695,1704 **** esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 ! echo "configure:1699: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 ! echo "configure:1702: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 1706,1715 ---- esac elif test "$with_gnu_ld" = yes; then echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 ! echo "configure:1710: checking for GNU ld" >&5 else echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 ! echo "configure:1713: checking for non-GNU ld" >&5 fi if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** else *** 1733,1739 **** fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 ! echo "configure:1737: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1744,1750 ---- fi test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 ! echo "configure:1748: checking if the linker ($LD) is GNU ld" >&5 if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** with_gnu_ld=$lt_cv_prog_gnu_ld *** 1750,1756 **** echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6 ! echo "configure:1754: checking for $LD option to reload object files" >&5 if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1761,1767 ---- echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6 ! echo "configure:1765: checking for $LD option to reload object files" >&5 if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** reload_flag=$lt_cv_ld_reload_flag *** 1762,1768 **** test -n "$reload_flag" && reload_flag=" $reload_flag" echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 ! echo "configure:1766: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1773,1779 ---- test -n "$reload_flag" && reload_flag=" $reload_flag" echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 ! echo "configure:1777: checking for BSD-compatible nm" >&5 if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** NM="$lt_cv_path_NM" *** 1800,1806 **** echo "$ac_t""$NM" 1>&6 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 ! echo "configure:1804: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1811,1817 ---- echo "$ac_t""$NM" 1>&6 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 ! echo "configure:1815: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 1821,1827 **** fi echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6 ! echo "configure:1825: checking how to recognise dependant libraries" >&5 if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 1832,1838 ---- fi echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6 ! echo "configure:1836: checking how to recognise dependant libraries" >&5 if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** gnu*) *** 1893,1901 **** ;; hpux10.20*|hpux11*) ! lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' ! lt_cv_file_magic_cmd=/usr/bin/file ! lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; irix5* | irix6*) --- 1904,1921 ---- ;; hpux10.20*|hpux11*) ! case $host_cpu in ! hppa*) ! lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' ! lt_cv_file_magic_cmd=/usr/bin/file ! lt_cv_file_magic_test_file=/usr/lib/libc.sl ! ;; ! ia64*) ! lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' ! lt_cv_file_magic_cmd=/usr/bin/file ! lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ! ;; ! esac ;; irix5* | irix6*) *************** file_magic_cmd=$lt_cv_file_magic_cmd *** 1985,1997 **** deplibs_check_method=$lt_cv_deplibs_check_method echo $ac_n "checking for object suffix""... $ac_c" 1>&6 ! echo "configure:1989: checking for object suffix" >&5 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftest* echo 'int i = 1;' > conftest.$ac_ext ! if { (eval echo configure:1995: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then for ac_file in conftest.*; do case $ac_file in *.c) ;; --- 2005,2017 ---- deplibs_check_method=$lt_cv_deplibs_check_method echo $ac_n "checking for object suffix""... $ac_c" 1>&6 ! echo "configure:2009: checking for object suffix" >&5 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else rm -f conftest* echo 'int i = 1;' > conftest.$ac_ext ! if { (eval echo configure:2015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then for ac_file in conftest.*; do case $ac_file in *.c) ;; *************** case $deplibs_check_method in *** 2015,2021 **** file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6 ! echo "configure:2019: checking for ${ac_tool_prefix}file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2035,2041 ---- file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6 ! echo "configure:2039: checking for ${ac_tool_prefix}file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 2077,2083 **** if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo $ac_n "checking for file""... $ac_c" 1>&6 ! echo "configure:2081: checking for file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2097,2103 ---- if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo $ac_n "checking for file""... $ac_c" 1>&6 ! echo "configure:2101: checking for file" >&5 if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** esac *** 2148,2154 **** # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2152: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2168,2174 ---- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2172: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 2180,2186 **** # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2184: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2200,2206 ---- # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2204: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 2215,2221 **** # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2219: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2235,2241 ---- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2239: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -n "$ac_tool_prefix"; then *** 2247,2253 **** # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2251: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2267,2273 ---- # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2271: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** test x"$pic_mode" = xno && libtool_flags *** 2314,2321 **** case $host in *-*-irix6*) # Find out which ABI we are using. ! echo '#line 2318 "configure"' > conftest.$ac_ext ! if { (eval echo configure:2319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" --- 2334,2354 ---- case $host in *-*-irix6*) # Find out which ABI we are using. ! echo '#line 2338 "configure"' > conftest.$ac_ext ! if { (eval echo configure:2339: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! if test "$lt_cv_prog_gnu_ld" = yes; then ! case `/usr/bin/file conftest.$ac_objext` in ! *32-bit*) ! LD="${LD-ld} -melf32bsmip" ! ;; ! *N32*) ! LD="${LD-ld} -melf32bmipn32" ! ;; ! *64-bit*) ! LD="${LD-ld} -melf64bmip" ! ;; ! esac ! else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" *************** case $host in *** 2327,2332 **** --- 2360,2424 ---- LD="${LD-ld} -64" ;; esac + fi + fi + rm -rf conftest* + ;; + + ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo configure:2372: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + case "`/usr/bin/file conftest.o`" in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; + + x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo configure:2388: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac fi rm -rf conftest* ;; *************** case $host in *** 2336,2342 **** SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 ! echo "configure:2340: checking whether the C compiler needs -belf" >&5 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2428,2434 ---- SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 ! echo "configure:2432: checking whether the C compiler needs -belf" >&5 if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** ac_link='${CC-cc} -o conftest${ac_exeext *** 2349,2362 **** cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else --- 2441,2454 ---- cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* lt_cv_cc_needs_belf=yes else *************** echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 *** 2386,2392 **** esac echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 ! echo "configure:2390: checking how to run the C++ preprocessor" >&5 if test -z "$CXXCPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2478,2484 ---- esac echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6 ! echo "configure:2482: checking how to run the C++ preprocessor" >&5 if test -z "$CXXCPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** ac_link='${CXX-g++} -o conftest${ac_exee *** 2399,2410 **** cross_compiling=$ac_cv_prog_cxx_cross CXXCPP="${CXX-g++} -E" cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2408: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 2491,2502 ---- cross_compiling=$ac_cv_prog_cxx_cross CXXCPP="${CXX-g++} -E" cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2500: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** fi *** 2551,2557 **** echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 ! echo "configure:2555: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" --- 2643,2649 ---- echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 ! echo "configure:2647: checking whether to enable maintainer-specific portions of Makefiles" >&5 # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then enableval="$enable_maintainer_mode" *************** if false; then *** 2584,2590 **** echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 ! echo "configure:2588: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2676,2682 ---- echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 ! echo "configure:2680: checking for executable suffix" >&5 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 2594,2603 **** rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= ! if { (eval echo configure:2598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in ! *.c | *.o | *.obj) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done --- 2686,2695 ---- rm -f conftest* echo 'int main () { return 0; }' > conftest.$ac_ext ac_cv_exeext= ! if { (eval echo configure:2690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then for file in conftest.*; do case $file in ! *.c | *.o | *.obj | *.ilk | *.pdb) ;; *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; esac done *************** ac_exeext=$EXEEXT *** 2617,2623 **** fi echo $ac_n "checking for thread model used by GCC""... $ac_c" 1>&6 ! echo "configure:2621: checking for thread model used by GCC" >&5 THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` if test -z "$THREADS"; then THREADS=no --- 2709,2715 ---- fi echo $ac_n "checking for thread model used by GCC""... $ac_c" 1>&6 ! echo "configure:2713: checking for thread model used by GCC" >&5 THREADS=`$CC -v 2>&1 | sed -n 's/^Thread model: //p'` if test -z "$THREADS"; then THREADS=no *************** case "$THREADS" in *** 2646,2652 **** THREADS=posix THREADLIBS=-lpthread case "$host" in ! x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux*) cat >> confdefs.h <<\EOF #define GC_LINUX_THREADS 1 EOF --- 2738,2744 ---- THREADS=posix THREADLIBS=-lpthread case "$host" in ! x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* ) cat >> confdefs.h <<\EOF #define GC_LINUX_THREADS 1 EOF *************** EOF *** 2737,2742 **** --- 2829,2840 ---- #define NO_GETENV 1 EOF + if test $enable_shared = yes; then + cat >> confdefs.h <<\EOF + #define GC_DLL 1 + EOF + + fi ;; decosf1 | irix | mach | os2 | solaris | dce | vxworks) { echo "configure: error: thread package $THREADS not yet supported" 1>&2; exit 1; } *************** esac *** 2748,2754 **** echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 ! echo "configure:2752: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2846,2852 ---- echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 ! echo "configure:2850: checking for dlopen in -ldl" >&5 ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** else *** 2756,2762 **** ac_save_LIBS="$LIBS" LIBS="-ldl $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 2865,2871 ---- dlopen() ; return 0; } EOF ! if { (eval echo configure:2869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else *************** EOF *** 2875,2880 **** --- 2973,2980 ---- mips-dec-ultrix*) machdep="mips_ultrix_mach-dep.lo" ;; + mips*-*-linux*) + ;; mips-*-*) machdep="mips_sgi_mach_dep.lo" cat >> confdefs.h <<\EOF *************** EOF *** 2984,2990 **** EOF ;; ! x86-*-linux* | i586-*-linux* | i686-*-linux* ) cat >> confdefs.h <<\EOF #define MAKE_BACK_GRAPH 1 EOF --- 3084,3090 ---- EOF ;; ! x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* ) cat >> confdefs.h <<\EOF #define MAKE_BACK_GRAPH 1 EOF *************** trap 'rm -f $CONFIG_STATUS conftest*; ex *** 3084,3117 **** # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. ! # ! # If the first sed substitution is executed (which looks for macros that ! # take arguments), then we branch to the quote section. Otherwise, ! # look for a macro that doesn't take arguments. ! cat >confdef2opt.sed <<\_ACEOF ! t clear ! : clear ! s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g ! t quote ! s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g ! t quote ! d ! : quote ! s,[ `~#$^&*(){}\\|;'"<>?],\\&,g ! s,\[,\\&,g ! s,\],\\&,g ! s,\$,$$,g ! p ! _ACEOF ! # We use echo to avoid assuming a particular line-breaking character. ! # The extra dot is to prevent the shell from consuming trailing ! # line-breaks from the sub-command output. A line-break within ! # single-quotes doesn't work because, if this script is created in a ! # platform that uses two characters for line-breaks (e.g., DOS), tr ! # would break. ! ac_LF_and_DOT=`echo; echo .` ! DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` ! rm -f confdef2opt.sed # Without the "./", some shells look in PATH for config.status. --- 3184,3198 ---- # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. ! cat > conftest.defs <<\EOF ! s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g ! s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g ! s%\[%\\&%g ! s%\]%\\&%g ! s%\$%$$%g ! EOF ! DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` ! rm -f conftest.defs # Without the "./", some shells look in PATH for config.status. *************** cat >> $CONFIG_STATUS <<\EOF *** 3242,3248 **** # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ! ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. --- 3323,3329 ---- # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ! ac_max_sed_cmds=60 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. *************** ac_configure_args="${multilib_arg} ${ac_ *** 3344,3349 **** --- 3425,3431 ---- CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} gc_basedir=${gc_basedir} CC="${CC}" + ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}" DEFS="$DEFS" EOF diff -Nrc3pad gcc-3.2.3/boehm-gc/configure.in gcc-3.3/boehm-gc/configure.in *** gcc-3.2.3/boehm-gc/configure.in 2003-01-28 01:44:36.000000000 +0000 --- gcc-3.3/boehm-gc/configure.in 2003-04-28 20:55:07.000000000 +0000 *************** case "$THREADS" in *** 73,79 **** THREADS=posix THREADLIBS=-lpthread case "$host" in ! x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux*) AC_DEFINE(GC_LINUX_THREADS) AC_DEFINE(_REENTRANT) if test "${enable_parallel_mark}"; then --- 73,79 ---- THREADS=posix THREADLIBS=-lpthread case "$host" in ! x86-*-linux* | ia64-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* ) AC_DEFINE(GC_LINUX_THREADS) AC_DEFINE(_REENTRANT) if test "${enable_parallel_mark}"; then *************** case "$THREADS" in *** 116,121 **** --- 116,124 ---- win32) AC_DEFINE(GC_WIN32_THREADS) AC_DEFINE(NO_GETENV) + if test $enable_shared = yes; then + AC_DEFINE(GC_DLL) + fi ;; decosf1 | irix | mach | os2 | solaris | dce | vxworks) AC_MSG_ERROR(thread package $THREADS not yet supported) *************** case "$host" in *** 182,187 **** --- 185,192 ---- mips-dec-ultrix*) machdep="mips_ultrix_mach-dep.lo" ;; + mips*-*-linux*) + ;; mips-*-*) machdep="mips_sgi_mach_dep.lo" AC_DEFINE(NO_EXECUTE_PERMISSION) *************** AC_ARG_ENABLE(full-debug, *** 257,263 **** ia64-*-linux* ) AC_DEFINE(MAKE_BACK_GRAPH) ;; ! x86-*-linux* | i586-*-linux* | i686-*-linux* ) AC_DEFINE(MAKE_BACK_GRAPH) AC_MSG_WARN("Client must not use -fomit-frame-pointer.") AC_DEFINE(SAVE_CALL_COUNT, 8) --- 262,268 ---- ia64-*-linux* ) AC_DEFINE(MAKE_BACK_GRAPH) ;; ! x86-*-linux* | i586-*-linux* | i686-*-linux* | x86_64-*-linux* ) AC_DEFINE(MAKE_BACK_GRAPH) AC_MSG_WARN("Client must not use -fomit-frame-pointer.") AC_DEFINE(SAVE_CALL_COUNT, 8) *************** ac_configure_args="${multilib_arg} ${ac_ *** 299,303 **** --- 304,309 ---- CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} gc_basedir=${gc_basedir} CC="${CC}" + ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}" DEFS="$DEFS" ) diff -Nrc3pad gcc-3.2.3/boehm-gc/dyn_load.c gcc-3.3/boehm-gc/dyn_load.c *** gcc-3.2.3/boehm-gc/dyn_load.c 2002-04-09 00:03:24.000000000 +0000 --- gcc-3.3/boehm-gc/dyn_load.c 2003-03-04 06:38:30.000000000 +0000 *************** void GC_register_dynamic_libraries() *** 355,364 **** /* Stack mapping; discard */ continue; } - if (start <= datastart && end > datastart && maj_dev != 0) { - /* Main data segment; discard */ - continue; - } # ifdef THREADS if (GC_segment_is_thread_stack(start, end)) continue; # endif --- 355,360 ---- *************** void GC_register_dynamic_libraries() *** 384,389 **** --- 380,392 ---- } } + /* We now take care of the main data segment ourselves: */ + GC_bool GC_register_main_static_data() + { + return FALSE; + } + + # define HAVE_REGISTER_MAIN_STATIC_DATA // // parse_map_entry parses an entry from /proc/self/maps so we can // locate all writable data segments that belong to shared libraries. *************** static int GC_register_dynlib_callback(i *** 469,481 **** + sizeof (info->dlpi_phnum)) return -1; - /* Skip the first object - it is the main program. */ - if (*(int *)ptr == 0) - { - *(int *)ptr = 1; - return 0; - } - p = info->dlpi_phdr; for( i = 0; i < (int)(info->dlpi_phnum); ((i++),(p++)) ) { switch( p->p_type ) { --- 472,477 ---- *************** static int GC_register_dynlib_callback(i *** 491,496 **** --- 487,493 ---- } } + * (int *)ptr = 1; /* Signal that we were called */ return 0; } *************** static int GC_register_dynlib_callback(i *** 500,515 **** GC_bool GC_register_dynamic_libraries_dl_iterate_phdr() { - int tmp = 0; - if (dl_iterate_phdr) { ! dl_iterate_phdr(GC_register_dynlib_callback, &tmp); return TRUE; } else { return FALSE; } } # else /* !LINUX || version(glibc) < 2.2.4 */ /* Dynamic loading code for Linux running ELF. Somewhat tested on --- 497,527 ---- GC_bool GC_register_dynamic_libraries_dl_iterate_phdr() { if (dl_iterate_phdr) { ! int did_something = 0; ! dl_iterate_phdr(GC_register_dynlib_callback, &did_something); ! if (!did_something) { ! /* dl_iterate_phdr may forget the static data segment in */ ! /* statically linked executables. */ ! GC_add_roots_inner(DATASTART, (char *)(DATAEND), TRUE); ! # if defined(DATASTART2) ! GC_add_roots_inner(DATASTART2, (char *)(DATAEND2), TRUE); ! # endif ! } return TRUE; } else { return FALSE; } } + /* Do we need to separately register the main static data segment? */ + GC_bool GC_register_main_static_data() + { + return (dl_iterate_phdr == 0); + } + + #define HAVE_REGISTER_MAIN_STATIC_DATA + # else /* !LINUX || version(glibc) < 2.2.4 */ /* Dynamic loading code for Linux running ELF. Somewhat tested on *************** void GC_register_dynamic_libraries() *** 775,784 **** } # endif ! # ifndef MSWINCE extern GC_bool GC_no_win32_dlls; ! # endif void GC_register_dynamic_libraries() { MEMORY_BASIC_INFORMATION buf; --- 787,809 ---- } # endif ! # ifdef MSWINCE ! /* Do we need to separately register the main static data segment? */ ! GC_bool GC_register_main_static_data() ! { ! return FALSE; ! } ! # else /* win32 */ extern GC_bool GC_no_win32_dlls; ! ! GC_bool GC_register_main_static_data() ! { ! return GC_no_win32_dlls; ! } ! # endif /* win32 */ + # define HAVE_REGISTER_MAIN_STATIC_DATA + void GC_register_dynamic_libraries() { MEMORY_BASIC_INFORMATION buf; *************** void GC_register_dynamic_libraries(){} *** 1079,1082 **** --- 1104,1118 ---- int GC_no_dynamic_loading; #endif /* !PCR */ + #endif /* !DYNAMIC_LOADING */ + + #ifndef HAVE_REGISTER_MAIN_STATIC_DATA + + /* Do we need to separately register the main static data segment? */ + GC_bool GC_register_main_static_data() + { + return TRUE; + } + #endif /* HAVE_REGISTER_MAIN_STATIC_DATA */ + diff -Nrc3pad gcc-3.2.3/boehm-gc/include/Makefile.am gcc-3.3/boehm-gc/include/Makefile.am *** gcc-3.2.3/boehm-gc/include/Makefile.am 2001-09-12 01:57:03.000000000 +0000 --- gcc-3.3/boehm-gc/include/Makefile.am 2002-12-31 17:52:45.000000000 +0000 *************** *** 1,6 **** AUTOMAKE_OPTIONS = foreign ! include_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \ gc_pthread_redirects.h gc_cpp.h --- 1,6 ---- AUTOMAKE_OPTIONS = foreign ! noinst_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \ gc_pthread_redirects.h gc_cpp.h diff -Nrc3pad gcc-3.2.3/boehm-gc/include/Makefile.in gcc-3.3/boehm-gc/include/Makefile.in *** gcc-3.2.3/boehm-gc/include/Makefile.in 2002-02-12 04:37:56.000000000 +0000 --- gcc-3.3/boehm-gc/include/Makefile.in 2002-12-31 17:52:45.000000000 +0000 *************** target_all = @target_all@ *** 96,106 **** AUTOMAKE_OPTIONS = foreign ! include_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \ gc_pthread_redirects.h gc_cpp.h CONFIG_CLEAN_FILES = ! HEADERS = $(include_HEADERS) DIST_COMMON = Makefile.am Makefile.in --- 96,106 ---- AUTOMAKE_OPTIONS = foreign ! noinst_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \ gc_pthread_redirects.h gc_cpp.h CONFIG_CLEAN_FILES = ! HEADERS = $(noinst_HEADERS) DIST_COMMON = Makefile.am Makefile.in *************** Makefile: $(srcdir)/Makefile.in $(top_b *** 119,139 **** && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - install-includeHEADERS: $(include_HEADERS) - @$(NORMAL_INSTALL) - $(mkinstalldirs) $(DESTDIR)$(includedir) - @list='$(include_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \ - echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p"; \ - $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p; \ - done - - uninstall-includeHEADERS: - @$(NORMAL_UNINSTALL) - list='$(include_HEADERS)'; for p in $$list; do \ - rm -f $(DESTDIR)$(includedir)/$$p; \ - done - tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) --- 119,124 ---- *************** install-info: install-info-am *** 191,210 **** install-exec-am: install-exec: install-exec-am ! install-data-am: install-includeHEADERS install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am ! uninstall-am: uninstall-includeHEADERS uninstall: uninstall-am all-am: Makefile $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: - $(mkinstalldirs) $(DESTDIR)$(includedir) mostlyclean-generic: --- 176,194 ---- install-exec-am: install-exec: install-exec-am ! install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am ! uninstall-am: uninstall: uninstall-am all-am: Makefile $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: *************** maintainer-clean-am: maintainer-clean-t *** 236,249 **** maintainer-clean: maintainer-clean-am ! .PHONY: uninstall-includeHEADERS install-includeHEADERS tags \ ! mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \ ! distdir info-am info dvi-am dvi check check-am installcheck-am \ ! installcheck install-info-am install-info install-exec-am install-exec \ ! install-data-am install-data install-am install uninstall-am uninstall \ ! all-redirect all-am all installdirs mostlyclean-generic \ ! distclean-generic clean-generic maintainer-clean-generic clean \ ! mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. --- 220,232 ---- maintainer-clean: maintainer-clean-am ! .PHONY: tags mostlyclean-tags distclean-tags clean-tags \ ! maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \ ! installcheck-am installcheck install-info-am install-info \ ! install-exec-am install-exec install-data-am install-data install-am \ ! install uninstall-am uninstall all-redirect all-am all installdirs \ ! mostlyclean-generic distclean-generic clean-generic \ ! maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. diff -Nrc3pad gcc-3.2.3/boehm-gc/include/private/gcconfig.h gcc-3.3/boehm-gc/include/private/gcconfig.h *** gcc-3.2.3/boehm-gc/include/private/gcconfig.h 2002-04-22 06:05:04.000000000 +0000 --- gcc-3.3/boehm-gc/include/private/gcconfig.h 2003-04-10 00:08:01.000000000 +0000 *************** *** 44,50 **** # endif /* Determine the machine type: */ ! # if defined(__XSCALE__) # define ARM32 # if !defined(LINUX) # define NOSYS --- 44,50 ---- # endif /* Determine the machine type: */ ! # if defined(__arm__) || defined(__thumb__) # define ARM32 # if !defined(LINUX) # define NOSYS *************** *** 95,102 **** # if defined(nec_ews) || defined(_nec_ews) # define EWS4800 # endif ! # if !defined(LINUX) && !defined(EWS4800) ! # if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) # define ULTRIX # else # if defined(_SYSTYPE_SVR4) || defined(SYSTYPE_SVR4) \ --- 95,102 ---- # if defined(nec_ews) || defined(_nec_ews) # define EWS4800 # endif ! # if !defined(LINUX) && !defined(EWS4800) && !defined(NETBSD) ! # if defined(ultrix) || defined(__ultrix) # define ULTRIX # else # if defined(_SYSTYPE_SVR4) || defined(SYSTYPE_SVR4) \ *************** *** 107,115 **** # endif # endif # endif /* !LINUX */ - # if defined(__NetBSD__) && defined(__MIPSEL__) - # undef ULTRIX - # endif # define mach_type_known # endif # if defined(sequent) && (defined(i386) || defined(__i386__)) --- 107,112 ---- *************** *** 193,198 **** --- 190,199 ---- # define I386 # define mach_type_known # endif + # if defined(LINUX) && defined(__x86_64__) + # define X86_64 + # define mach_type_known + # endif # if defined(LINUX) && (defined(__ia64__) || defined(__ia64)) # define IA64 # define mach_type_known *************** *** 369,375 **** # define mach_type_known # endif # if defined(__s390__) && defined(LINUX) ! # define S370 # define mach_type_known # endif # if defined(__GNU__) --- 370,376 ---- # define mach_type_known # endif # if defined(__s390__) && defined(LINUX) ! # define S390 # define mach_type_known # endif # if defined(__GNU__) *************** *** 418,424 **** /* (CX_UX and DGUX) */ /* S370 ==> 370-like machine */ /* running Amdahl UTS4 */ ! /* or a 390 running LINUX */ /* ARM32 ==> Intel StrongARM */ /* IA64 ==> Intel IPF */ /* (e.g. Itanium) */ --- 419,426 ---- /* (CX_UX and DGUX) */ /* S370 ==> 370-like machine */ /* running Amdahl UTS4 */ ! /* S390 ==> 390-like machine */ ! /* running LINUX */ /* ARM32 ==> Intel StrongARM */ /* IA64 ==> Intel IPF */ /* (e.g. Itanium) */ *************** *** 427,432 **** --- 429,435 ---- /* (HPUX) */ /* SH ==> Hitachi SuperH */ /* (LINUX & MSWINCE) */ + /* X86_64 ==> AMD x86-64 */ /* *************** *** 666,675 **** # define ALIGNMENT 4 /* Guess. Can someone verify? */ /* This was 2, but that didn't sound right. */ # define OS_TYPE "LINUX" - # define HEURISTIC1 # define DYNAMIC_LOADING ! # undef STACK_GRAN ! # define STACK_GRAN 0x10000000 /* Stack usually starts at 0x80000000 */ # define LINUX_DATA_START extern int _end[]; --- 669,676 ---- # define ALIGNMENT 4 /* Guess. Can someone verify? */ /* This was 2, but that didn't sound right. */ # define OS_TYPE "LINUX" # define DYNAMIC_LOADING ! # define LINUX_STACKBOTTOM /* Stack usually starts at 0x80000000 */ # define LINUX_DATA_START extern int _end[]; *************** *** 682,688 **** # define DATASTART ((ptr_t) get_etext()) # define STACKBOTTOM ((ptr_t) 0xc0000000) # define DATAEND /* not needed */ ! # define MPROTECT_VDB # include # define GETPAGESIZE() getpagesize() # endif --- 683,689 ---- # define DATASTART ((ptr_t) get_etext()) # define STACKBOTTOM ((ptr_t) 0xc0000000) # define DATAEND /* not needed */ ! # undef MPROTECT_VDB # include # define GETPAGESIZE() getpagesize() # endif *************** *** 819,830 **** # define DATAEND (_end) # define SVR4 # ifdef __arch64__ - # define DATASTART (ptr_t)GC_SysVGetDataStart(0x100000, _etext) /* libc_stack_end is not set reliably for sparc64 */ # define STACKBOTTOM ((ptr_t) 0x80000000000) # else - # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext) # define LINUX_STACKBOTTOM # endif # endif # ifdef OPENBSD --- 820,831 ---- # define DATAEND (_end) # define SVR4 # ifdef __arch64__ /* libc_stack_end is not set reliably for sparc64 */ # define STACKBOTTOM ((ptr_t) 0x80000000000) + # define DATASTART (ptr_t)GC_SysVGetDataStart(0x100000, _etext) # else # define LINUX_STACKBOTTOM + # define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, _etext) # endif # endif # ifdef OPENBSD *************** *** 1141,1155 **** /* This was developed for a linuxce style platform. Probably */ /* needs to be tweaked for workstation class machines. */ # define OS_TYPE "LINUX" extern int __data_start[]; # define DATASTART ((ptr_t)(__data_start)) # define ALIGNMENT 4 # define USE_GENERIC_PUSH_REGS ! # define STACKBOTTOM ((ptr_t)0x7fff8000) ! /* Older toolchains may need 0x80000000. */ ! /* In many cases, this should probably use LINUX_STACKBOTTOM */ ! /* instead. But some kernel versions seem to give the wrong */ ! /* value from /proc. */ # endif /* Linux */ # ifdef EWS4800 # define HEURISTIC2 --- 1142,1155 ---- /* This was developed for a linuxce style platform. Probably */ /* needs to be tweaked for workstation class machines. */ # define OS_TYPE "LINUX" + # define DYNAMIC_LOADING + extern int _end[]; + # define DATAEND (_end) extern int __data_start[]; # define DATASTART ((ptr_t)(__data_start)) # define ALIGNMENT 4 # define USE_GENERIC_PUSH_REGS ! # define LINUX_STACKBOTTOM # endif /* Linux */ # ifdef EWS4800 # define HEURISTIC2 *************** *** 1222,1242 **** # define DATAEND /* not needed */ # endif # if defined(NETBSD) - /* This also checked for __MIPSEL__ . Why? NETBSD recognition */ - /* should be handled at the top of the file. */ - # define ALIGNMENT 4 # define OS_TYPE "NETBSD" # define HEURISTIC2 # define USE_GENERIC_PUSH_REGS ! # ifdef __ELF__ ! extern int etext[]; ! # define DATASTART GC_data_start ! # define NEED_FIND_LIMIT ! # define DYNAMIC_LOADING ! # else ! # define DATASTART ((ptr_t) 0x10000000) ! # define STACKBOTTOM ((ptr_t) 0x7ffff000) ! # endif /* _ELF_ */ # endif # endif --- 1222,1236 ---- # define DATAEND /* not needed */ # endif # if defined(NETBSD) # define OS_TYPE "NETBSD" + # define ALIGNMENT 4 # define HEURISTIC2 # define USE_GENERIC_PUSH_REGS ! extern int _fdata[]; ! # define DATASTART ((ptr_t)(_fdata)) ! extern int _end[]; ! # define DATAEND ((ptr_t)(_end)) ! # define DYNAMIC_LOADING # endif # endif *************** *** 1528,1539 **** # define DATAEND (_end) # define HEURISTIC2 # endif # ifdef LINUX # define OS_TYPE "LINUX" ! # define HEURISTIC1 # define DYNAMIC_LOADING extern int __data_start[]; # define DATASTART ((ptr_t)(__data_start)) # endif # endif --- 1522,1550 ---- # define DATAEND (_end) # define HEURISTIC2 # endif + # endif + + # ifdef S390 + # define MACH_TYPE "S390" + # define USE_GENERIC_PUSH_REGS + # ifndef __s390x__ + # define ALIGNMENT 4 + # define CPP_WORDSZ 32 + # else + # define ALIGNMENT 8 + # define CPP_WORDSZ 64 + # define HBLKSIZE 4096 + # endif # ifdef LINUX # define OS_TYPE "LINUX" ! # define LINUX_STACKBOTTOM # define DYNAMIC_LOADING extern int __data_start[]; # define DATASTART ((ptr_t)(__data_start)) + extern int _end[]; + # define DATAEND (_end) + # define CACHE_LINE_SIZE 256 + # define GETPAGESIZE() 4096 # endif # endif *************** *** 1625,1630 **** --- 1636,1679 ---- # define DATAEND /* not needed */ # endif + # ifdef X86_64 + # define MACH_TYPE "X86_64" + # define ALIGNMENT 8 + # define CPP_WORDSZ 64 + # define HBLKSIZE 4096 + # define CACHE_LINE_SIZE 64 + # define USE_GENERIC_PUSH_REGS + # ifdef LINUX + # define OS_TYPE "LINUX" + # define LINUX_STACKBOTTOM + # if !defined(GC_LINUX_THREADS) || !defined(REDIRECT_MALLOC) + # define MPROTECT_VDB + # else + /* We seem to get random errors in incremental mode, */ + /* possibly because Linux threads is itself a malloc client */ + /* and can't deal with the signals. */ + # endif + # ifdef __ELF__ + # define DYNAMIC_LOADING + # ifdef UNDEFINED /* includes ro data */ + extern int _etext[]; + # define DATASTART ((ptr_t)((((word) (_etext)) + 0xfff) & ~0xfff)) + # endif + # include + # define LINUX_DATA_START + extern int _end[]; + # define DATAEND (_end) + # else + extern int etext[]; + # define DATASTART ((ptr_t)((((word) (etext)) + 0xfff) & ~0xfff)) + # endif + # define PREFETCH(x) \ + __asm__ __volatile__ (" prefetch %0": : "m"(*(char *)(x))) + # define PREFETCH_FOR_WRITE(x) \ + __asm__ __volatile__ (" prefetchw %0": : "m"(*(char *)(x))) + # endif + # endif + #ifdef LINUX_DATA_START /* Some Linux distributions arrange to define __data_start. Some */ /* define data_start as a weak symbol. The latter is technically */ *************** *** 1750,1755 **** --- 1799,1817 ---- # define CACHE_LINE_SIZE 32 /* Wild guess */ # endif + # ifdef LINUX + # define REGISTER_LIBRARIES_EARLY + /* We sometimes use dl_iterate_phdr, which may acquire an internal */ + /* lock. This isn't safe after the world has stopped. So we must */ + /* call GC_register_dynamic_libraries before stopping the world. */ + /* For performance reasons, this may be beneficial on other */ + /* platforms as well, though it should be avoided in win32. */ + # endif /* LINUX */ + + # if defined(SEARCH_FOR_DATA_START) && defined(GC_PRIVATE_H) + extern ptr_t GC_data_start; + # endif + # ifndef CLEAR_DOUBLE # define CLEAR_DOUBLE(x) \ ((word*)x)[0] = 0; \ *************** *** 1818,1824 **** # define CAN_SAVE_CALL_STACKS # define CAN_SAVE_CALL_ARGS #endif ! #if defined(I386) && defined(LINUX) /* SAVE_CALL_CHAIN is supported if the code is compiled to save */ /* frame pointers by default, i.e. no -fomit-frame-pointer flag. */ # define CAN_SAVE_CALL_STACKS --- 1880,1886 ---- # define CAN_SAVE_CALL_STACKS # define CAN_SAVE_CALL_ARGS #endif ! #if (defined(I386) || defined(X86_64)) && defined(LINUX) /* SAVE_CALL_CHAIN is supported if the code is compiled to save */ /* frame pointers by default, i.e. no -fomit-frame-pointer flag. */ # define CAN_SAVE_CALL_STACKS diff -Nrc3pad gcc-3.2.3/boehm-gc/include/private/gc_locks.h gcc-3.3/boehm-gc/include/private/gc_locks.h *** gcc-3.2.3/boehm-gc/include/private/gc_locks.h 2001-10-16 09:01:39.000000000 +0000 --- gcc-3.3/boehm-gc/include/private/gc_locks.h 2002-09-27 20:40:06.000000000 +0000 *************** *** 209,214 **** --- 209,227 ---- } # define GC_TEST_AND_SET_DEFINED # endif /* ARM32 */ + # ifdef S390 + inline static int GC_test_and_set(volatile unsigned int *addr) { + int ret; + __asm__ __volatile__ ( + " l %0,0(%2)\n" + "0: cs %0,%1,0(%2)\n" + " jl 0b" + : "=&d" (ret) + : "d" (1), "a" (addr) + : "cc", "memory"); + return ret; + } + # endif # endif /* __GNUC__ */ # if (defined(ALPHA) && !defined(__GNUC__)) # define GC_test_and_set(addr) __cxx_test_and_set_atomic(addr, 1) *************** *** 219,229 **** # define GC_TEST_AND_SET_DEFINED # endif # ifdef MIPS ! # if __mips < 3 || !(defined (_ABIN32) || defined(_ABI64)) \ || !defined(_COMPILER_VERSION) || _COMPILER_VERSION < 700 ! # define GC_test_and_set(addr, v) test_and_set(addr,v) # else ! # define GC_test_and_set(addr, v) __test_and_set(addr,v) # define GC_clear(addr) __lock_release(addr); # define GC_CLEAR_DEFINED # endif --- 232,246 ---- # define GC_TEST_AND_SET_DEFINED # endif # ifdef MIPS ! # ifdef LINUX ! # include ! # define GC_test_and_set(addr) _test_and_set((int *) addr,1) ! # define GC_TEST_AND_SET_DEFINED ! # elif __mips < 3 || !(defined (_ABIN32) || defined(_ABI64)) \ || !defined(_COMPILER_VERSION) || _COMPILER_VERSION < 700 ! # define GC_test_and_set(addr) test_and_set(addr, 1) # else ! # define GC_test_and_set(addr) __test_and_set(addr,1) # define GC_clear(addr) __lock_release(addr); # define GC_CLEAR_DEFINED # endif *************** *** 326,331 **** --- 343,369 ---- } # endif /* 0 */ # endif /* IA64 */ + # if defined(S390) + # if !defined(GENERIC_COMPARE_AND_SWAP) + inline static GC_bool GC_compare_and_exchange(volatile C_word *addr, + GC_word old, GC_word new_val) + { + int retval; + __asm__ __volatile__ ( + # ifndef __s390x__ + " cs %1,%2,0(%3)\n" + # else + " csg %1,%2,0(%3)\n" + # endif + " ipm %0\n" + " srl %0,28\n" + : "=&d" (retval), "+d" (old) + : "d" (new_val), "a" (addr) + : "cc", "memory"); + return retval == 0; + } + # endif + # endif # if !defined(GENERIC_COMPARE_AND_SWAP) /* Returns the original value of *addr. */ inline static GC_word GC_atomic_add(volatile GC_word *addr, *************** *** 431,437 **** # define NO_THREAD (pthread_t)(-1) # define UNSET_LOCK_HOLDER() GC_lock_holder = NO_THREAD # define I_HOLD_LOCK() (pthread_equal(GC_lock_holder, pthread_self())) ! # define LOCK() { if (GC_test_and_set(&GC_allocate_lock, 1)) GC_lock(); } # define UNLOCK() GC_clear(&GC_allocate_lock); extern VOLATILE GC_bool GC_collecting; # define ENTER_GC() \ --- 469,475 ---- # define NO_THREAD (pthread_t)(-1) # define UNSET_LOCK_HOLDER() GC_lock_holder = NO_THREAD # define I_HOLD_LOCK() (pthread_equal(GC_lock_holder, pthread_self())) ! # define LOCK() { if (GC_test_and_set(&GC_allocate_lock)) GC_lock(); } # define UNLOCK() GC_clear(&GC_allocate_lock); extern VOLATILE GC_bool GC_collecting; # define ENTER_GC() \ diff -Nrc3pad gcc-3.2.3/boehm-gc/include/private/gc_priv.h gcc-3.3/boehm-gc/include/private/gc_priv.h *** gcc-3.2.3/boehm-gc/include/private/gc_priv.h 2002-04-09 00:03:24.000000000 +0000 --- gcc-3.3/boehm-gc/include/private/gc_priv.h 2003-03-04 17:56:49.000000000 +0000 *************** *** 44,53 **** # include "../gc_mark.h" # endif - # ifndef GCCONFIG_H - # include "gcconfig.h" - # endif - typedef GC_word word; typedef GC_signed_word signed_word; --- 44,49 ---- *************** typedef char * ptr_t; /* A generic point *** 60,65 **** --- 56,65 ---- /* Preferably identical to caddr_t, if it */ /* exists. */ + # ifndef GCCONFIG_H + # include "gcconfig.h" + # endif + # ifndef HEADERS_H # include "gc_hdrs.h" # endif *************** GC_bool GC_is_tmp_root GC_PROTO((ptr_t p *** 1462,1467 **** --- 1462,1472 ---- # endif void GC_register_dynamic_libraries GC_PROTO((void)); /* Add dynamic library data sections to the root set. */ + + GC_bool GC_register_main_static_data GC_PROTO((void)); + /* We need to register the main data segment. Returns */ + /* TRUE unless this is done implicitly as part of */ + /* dynamic library registration. */ /* Machine dependent startup routines */ ptr_t GC_get_stack_base GC_PROTO((void)); /* Cold end of stack */ *************** void GC_err_puts GC_PROTO((GC_CONST char *** 1916,1922 **** # define SIG_SUSPEND SIGPWR # endif # else /* !GC_LINUX_THREADS */ ! # define SIG_SUSPEND _SIGRTMIN + 6 # endif # endif /* !SIG_SUSPEND */ --- 1921,1931 ---- # define SIG_SUSPEND SIGPWR # endif # else /* !GC_LINUX_THREADS */ ! # if defined(_SIGRTMIN) ! # define SIG_SUSPEND _SIGRTMIN + 6 ! # else ! # define SIG_SUSPEND SIGRTMIN + 6 ! # endif # endif # endif /* !SIG_SUSPEND */ diff -Nrc3pad gcc-3.2.3/boehm-gc/irix_threads.c gcc-3.3/boehm-gc/irix_threads.c *** gcc-3.2.3/boehm-gc/irix_threads.c 2002-02-12 04:37:53.000000000 +0000 --- gcc-3.3/boehm-gc/irix_threads.c 2002-05-19 17:36:14.000000000 +0000 *************** int GC_pthread_detach(pthread_t thread) *** 519,525 **** LOCK(); thread_gc_id = GC_lookup_thread(thread); UNLOCK(); ! result = REAL_FUNC(pthread_detach)(thread); if (result == 0) { LOCK(); thread_gc_id -> flags |= DETACHED; --- 519,525 ---- LOCK(); thread_gc_id = GC_lookup_thread(thread); UNLOCK(); ! result = pthread_detach(thread); if (result == 0) { LOCK(); thread_gc_id -> flags |= DETACHED; *************** GC_pthread_create(pthread_t *new_thread, *** 599,605 **** si -> start_routine = start_routine; si -> arg = arg; LOCK(); ! if (!GC_initialized) GC_init(); if (NULL == attr) { stack = 0; (void) pthread_attr_init(&new_attr); --- 599,605 ---- si -> start_routine = start_routine; si -> arg = arg; LOCK(); ! if (!GC_is_initialized) GC_init(); if (NULL == attr) { stack = 0; (void) pthread_attr_init(&new_attr); *************** VOLATILE GC_bool GC_collecting = 0; *** 655,661 **** #define SLEEP_THRESHOLD 3 unsigned long GC_allocate_lock = 0; ! # define GC_TRY_LOCK() !GC_test_and_set(&GC_allocate_lock,1) # define GC_LOCK_TAKEN GC_allocate_lock void GC_lock() --- 655,661 ---- #define SLEEP_THRESHOLD 3 unsigned long GC_allocate_lock = 0; ! # define GC_TRY_LOCK() !GC_test_and_set(&GC_allocate_lock) # define GC_LOCK_TAKEN GC_allocate_lock void GC_lock() diff -Nrc3pad gcc-3.2.3/boehm-gc/linux_threads.c gcc-3.3/boehm-gc/linux_threads.c *** gcc-3.2.3/boehm-gc/linux_threads.c 2002-03-29 22:33:34.000000000 +0000 --- gcc-3.3/boehm-gc/linux_threads.c 2002-03-29 22:52:12.000000000 +0000 *************** void * GC_start_routine(void * arg) *** 1361,1366 **** --- 1361,1369 ---- GC_printf1("start_routine = 0x%lx\n", start); # endif start_arg = si -> arg; + # ifdef DEBUG_THREADS + GC_printf1("sem_post from 0x%lx\n", my_pthread); + # endif sem_post(&(si -> registered)); /* Last action on si. */ /* OK to deallocate. */ pthread_cleanup_push(GC_thread_exit_proc, 0); *************** WRAP_FUNC(pthread_create)(pthread_t *new *** 1429,1434 **** --- 1432,1441 ---- while (0 != sem_wait(&(si -> registered))) { if (EINTR != errno) ABORT("sem_wait failed"); } + # ifdef DEBUG_THREADS + GC_printf1("sem_wait complete from thread 0x%X\n", + pthread_self()); + # endif sem_destroy(&(si -> registered)); LOCK(); GC_INTERNAL_FREE(si); diff -Nrc3pad gcc-3.2.3/boehm-gc/ltconfig gcc-3.3/boehm-gc/ltconfig *** gcc-3.2.3/boehm-gc/ltconfig 2001-08-17 18:39:16.000000000 +0000 --- gcc-3.3/boehm-gc/ltconfig 2002-11-20 15:59:06.000000000 +0000 *************** os2*) *** 2017,2024 **** osf3* | osf4* | osf5*) version_type=osf need_version=no ! soname_spec='${libname}${release}.so' ! library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' shlibpath_var=LD_LIBRARY_PATH # this will be overridden with pass_all, but let us keep it just in case deplibs_check_method='file_magic COFF format alpha shared library' --- 2017,2024 ---- osf3* | osf4* | osf5*) version_type=osf need_version=no ! soname_spec='${libname}${release}.so$major' ! library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' shlibpath_var=LD_LIBRARY_PATH # this will be overridden with pass_all, but let us keep it just in case deplibs_check_method='file_magic COFF format alpha shared library' diff -Nrc3pad gcc-3.2.3/boehm-gc/ltmain.sh gcc-3.3/boehm-gc/ltmain.sh *** gcc-3.2.3/boehm-gc/ltmain.sh 2001-08-17 18:39:16.000000000 +0000 --- gcc-3.3/boehm-gc/ltmain.sh 2002-11-20 15:59:07.000000000 +0000 *************** compiler." *** 1715,1721 **** ;; osf) ! major=`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" --- 1715,1721 ---- ;; osf) ! major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" diff -Nrc3pad gcc-3.2.3/boehm-gc/mach_dep.c gcc-3.3/boehm-gc/mach_dep.c *** gcc-3.2.3/boehm-gc/mach_dep.c 2002-02-12 04:37:53.000000000 +0000 --- gcc-3.3/boehm-gc/mach_dep.c 2002-07-18 20:06:00.000000000 +0000 *************** void GC_push_regs() *** 81,103 **** register long TMP_SP; /* must be bound to r11 */ # endif - # if defined(MIPS) && defined(LINUX) - /* I'm not sure whether this has actually been tested. */ - # define call_push(x) asm("move $4," x ";"); asm("jal GC_push_one") - call_push("$2"); - call_push("$3"); - call_push("$16"); - call_push("$17"); - call_push("$18"); - call_push("$19"); - call_push("$20"); - call_push("$21"); - call_push("$22"); - call_push("$23"); - call_push("$30"); - # undef call_push - # endif /* MIPS && LINUX */ - # ifdef VAX /* VAX - generic code below does not work under 4.2 */ /* r1 through r5 are caller save, and therefore */ --- 81,86 ---- diff -Nrc3pad gcc-3.2.3/boehm-gc/mark_rts.c gcc-3.3/boehm-gc/mark_rts.c *** gcc-3.2.3/boehm-gc/mark_rts.c 2002-02-12 04:37:53.000000000 +0000 --- gcc-3.3/boehm-gc/mark_rts.c 2003-03-04 06:38:29.000000000 +0000 *************** void GC_push_gc_structures GC_PROTO((voi *** 506,511 **** --- 506,522 ---- void GC_mark_thread_local_free_lists(); #endif + void GC_cond_register_dynamic_libraries() + { + # if (defined(DYNAMIC_LOADING) || defined(MSWIN32) || defined(MSWINCE) \ + || defined(PCR)) && !defined(SRC_M3) + GC_remove_tmp_roots(); + if (!GC_no_dls) GC_register_dynamic_libraries(); + # else + GC_no_dls = TRUE; + # endif + } + /* * Call the mark routines (GC_tl_push for a single pointer, GC_push_conditional * on groups of pointers) on every top level accessible pointer. *************** void GC_push_roots(all, cold_gc_frame) *** 519,537 **** GC_bool all; ptr_t cold_gc_frame; { ! register int i; /* * Next push static data. This must happen early on, since it's * not robust against mark stack overflow. */ ! /* Reregister dynamic libraries, in case one got added. */ ! # if (defined(DYNAMIC_LOADING) || defined(MSWIN32) || defined(MSWINCE) \ ! || defined(PCR)) && !defined(SRC_M3) ! GC_remove_tmp_roots(); ! if (!GC_no_dls) GC_register_dynamic_libraries(); ! # else ! GC_no_dls = TRUE; # endif /* Mark everything in static data areas */ --- 530,549 ---- GC_bool all; ptr_t cold_gc_frame; { ! int i; ! int kind; /* * Next push static data. This must happen early on, since it's * not robust against mark stack overflow. */ ! /* Reregister dynamic libraries, in case one got added. */ ! /* There is some argument for doing this as late as possible, */ ! /* especially on win32, where it can change asynchronously. */ ! /* In those cases, we do it here. But on other platforms, it's */ ! /* not safe with the world stopped, so we do it earlier. */ ! # if !defined(REGISTER_LIBRARIES_EARLY) ! GC_cond_register_dynamic_libraries(); # endif /* Mark everything in static data areas */ *************** ptr_t cold_gc_frame; *** 541,546 **** --- 553,570 ---- GC_static_roots[i].r_end, all); } + /* Mark all free list header blocks, if those were allocated from */ + /* the garbage collected heap. This makes sure they don't */ + /* disappear if we are not marking from static data. It also */ + /* saves us the trouble of scanning them, and possibly that of */ + /* marking the freelists. */ + for (kind = 0; kind < GC_n_kinds; kind++) { + GC_PTR base = GC_base(GC_obj_kinds[kind].ok_freelist); + if (0 != base) { + GC_set_mark_bit(base); + } + } + /* Mark from GC internal roots if those might otherwise have */ /* been excluded. */ if (GC_no_dls || roots_were_cleared) { diff -Nrc3pad gcc-3.2.3/boehm-gc/misc.c gcc-3.3/boehm-gc/misc.c *** gcc-3.2.3/boehm-gc/misc.c 2002-04-09 00:03:24.000000000 +0000 --- gcc-3.3/boehm-gc/misc.c 2003-03-04 06:38:30.000000000 +0000 *************** *** 75,80 **** --- 75,88 ---- #undef STACKBASE #endif + /* Dont unnecessarily call GC_register_main_static_data() in case */ + /* dyn_load.c isn't linked in. */ + #ifdef DYNAMIC_LOADING + # define GC_REGISTER_MAIN_STATIC_DATA() GC_register_main_static_data() + #else + # define GC_REGISTER_MAIN_STATIC_DATA() TRUE + #endif + GC_FAR struct _GC_arrays GC_arrays /* = { 0 } */; *************** void GC_init_inner() *** 619,625 **** /* Add initial guess of root sets. Do this first, since sbrk(0) */ /* might be used. */ ! GC_register_data_segments(); GC_init_headers(); GC_bl_init(); GC_mark_init(); --- 627,633 ---- /* Add initial guess of root sets. Do this first, since sbrk(0) */ /* might be used. */ ! if (GC_REGISTER_MAIN_STATIC_DATA()) GC_register_data_segments(); GC_init_headers(); GC_bl_init(); GC_mark_init(); diff -Nrc3pad gcc-3.2.3/boehm-gc/os_dep.c gcc-3.3/boehm-gc/os_dep.c *** gcc-3.2.3/boehm-gc/os_dep.c 2002-04-10 01:18:07.000000000 +0000 --- gcc-3.3/boehm-gc/os_dep.c 2002-07-19 08:54:43.000000000 +0000 *************** SIG_PF GC_old_segv_handler; /* Also old *** 2174,2180 **** char * addr = (char *) (scp -> si_addr); # endif # ifdef LINUX ! # ifdef I386 char * addr = (char *) (sc.cr2); # else # if defined(M68K) --- 2174,2180 ---- char * addr = (char *) (scp -> si_addr); # endif # ifdef LINUX ! # if defined(I386) || defined (X86_64) char * addr = (char *) (sc.cr2); # else # if defined(M68K) diff -Nrc3pad gcc-3.2.3/boehm-gc/win32_threads.c gcc-3.3/boehm-gc/win32_threads.c *** gcc-3.2.3/boehm-gc/win32_threads.c 2002-09-24 00:59:04.000000000 +0000 --- gcc-3.3/boehm-gc/win32_threads.c 2003-04-28 20:55:07.000000000 +0000 *************** DWORD WINAPI main_thread_start(LPVOID ar *** 527,532 **** --- 527,534 ---- LONG WINAPI GC_write_fault_handler(struct _EXCEPTION_POINTERS *exc_info); + #ifdef GC_DLL + /* * This isn't generally safe, since DllMain is not premptible. * If another thread holds the lock while this runs we're in trouble. *************** BOOL WINAPI DllMain(HINSTANCE inst, ULON *** 635,640 **** --- 637,644 ---- return TRUE; } + # endif /* GC_DLL */ + # endif /* !MSWINCE */ #endif /* GC_WIN32_THREADS */ diff -Nrc3pad gcc-3.2.3/fastjar/acinclude.m4 gcc-3.3/fastjar/acinclude.m4 *** gcc-3.2.3/fastjar/acinclude.m4 1970-01-01 00:00:00.000000000 +0000 --- gcc-3.3/fastjar/acinclude.m4 2002-09-09 21:19:16.000000000 +0000 *************** *** 0 **** --- 1,133 ---- + + dnl Host type sizes probe. + dnl By Kaveh R. Ghazi. One typo fixed since. + dnl + AC_DEFUN([gcc_AC_COMPILE_CHECK_SIZEOF], + [changequote(<<, >>)dnl + dnl The name to #define. + define(<>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl + dnl The cache variable name. + define(<>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl + changequote([, ])dnl + AC_MSG_CHECKING(size of $1) + AC_CACHE_VAL(AC_CV_NAME, + [for ac_size in 4 8 1 2 16 $3 ; do # List sizes in rough order of prevalence. + AC_TRY_COMPILE([#include "confdefs.h" + #include + $2 + ], [switch (0) case 0: case (sizeof ($1) == $ac_size):;], AC_CV_NAME=$ac_size) + if test x$AC_CV_NAME != x ; then break; fi + done + ]) + if test x$AC_CV_NAME = x ; then + AC_MSG_ERROR([cannot determine a size for $1]) + fi + AC_MSG_RESULT($AC_CV_NAME) + AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1]) + undefine([AC_TYPE_NAME])dnl + undefine([AC_CV_NAME])dnl + ]) + + dnl Utility macro used by next two tests. + dnl AC_EXAMINE_OBJECT(C source code, + dnl commands examining object file, + dnl [commands to run if compile failed]): + dnl + dnl Compile the source code to an object file; then convert it into a + dnl printable representation. All unprintable characters and + dnl asterisks (*) are replaced by dots (.). All white space is + dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the + dnl output, but runs of newlines are compressed to a single newline. + dnl Finally, line breaks are forcibly inserted so that no line is + dnl longer than 80 columns and the file ends with a newline. The + dnl result of all this processing is in the file conftest.dmp, which + dnl may be examined by the commands in the second argument. + dnl + AC_DEFUN([gcc_AC_EXAMINE_OBJECT], + [AC_LANG_SAVE + AC_LANG_C + dnl Next bit cribbed from AC_TRY_COMPILE. + cat > conftest.$ac_ext < conftest.dmp + $2 + ifelse($3, , , else + $3 + )dnl + fi + rm -rf conftest* + AC_LANG_RESTORE]) + + dnl Host endianness probe. + dnl Differs from AC_C_BIGENDIAN in that it does not require + dnl running a program on the host. + dnl + AC_DEFUN([fastjar_AC_COMPILE_C_BIGENDIAN], + [AC_CACHE_CHECK(byte ordering, ac_cv_c_compile_endian, + [ac_cv_c_compile_endian=unknown + gcc_AC_EXAMINE_OBJECT([ + #ifdef HAVE_LIMITS_H + # include + #endif + /* This structure must have no internal padding. */ + struct { + char prefix[sizeof "\nendian:" - 1]; + short word; + char postfix[2]; + } tester = { + "\nendian:", + #if SIZEOF_SHORT == 4 + ('A' << (CHAR_BIT * 3)) | ('B' << (CHAR_BIT * 2)) | + #endif + ('A' << CHAR_BIT) | 'B', + 'X', '\n' + };], + [if grep 'endian:AB' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_compile_endian=big-endian + elif grep 'endian:BA' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_compile_endian=little-endian + fi]) + ]) + if test $ac_cv_c_compile_endian = unknown; then + AC_MSG_ERROR([*** unable to determine endianness]) + elif test $ac_cv_c_compile_endian = big-endian; then + AC_DEFINE(WORDS_BIG_ENDIAN, 1, + [Define if the host machine stores words of multi-word integers in + big-endian order.]) + fi + ]) + + dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead + dnl of the usual 2. + AC_DEFUN(gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG, + [AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg, + [AC_TRY_COMPILE([ + #include + #ifdef HAVE_SYS_STAT_H + # include + #endif + #ifdef HAVE_UNISTD_H + # include + #endif + #ifdef HAVE_DIRECT_H + # include + #endif], [mkdir ("foo", 0);], + gcc_cv_mkdir_takes_one_arg=no, gcc_cv_mkdir_takes_one_arg=yes)]) + if test $gcc_cv_mkdir_takes_one_arg = yes ; then + AC_DEFINE(MKDIR_TAKES_ONE_ARG, 1, [Define if host mkdir takes a + single argument.]) + fi + ]) diff -Nrc3pad gcc-3.2.3/fastjar/aclocal.m4 gcc-3.3/fastjar/aclocal.m4 *** gcc-3.2.3/fastjar/aclocal.m4 2002-01-09 23:22:20.000000000 +0000 --- gcc-3.3/fastjar/aclocal.m4 2003-05-14 00:18:14.000000000 +0000 *************** dnl but WITHOUT ANY WARRANTY, to the ext *** 10,15 **** --- 10,149 ---- dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. + + dnl Host type sizes probe. + dnl By Kaveh R. Ghazi. One typo fixed since. + dnl + AC_DEFUN([gcc_AC_COMPILE_CHECK_SIZEOF], + [changequote(<<, >>)dnl + dnl The name to #define. + define(<>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl + dnl The cache variable name. + define(<>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl + changequote([, ])dnl + AC_MSG_CHECKING(size of $1) + AC_CACHE_VAL(AC_CV_NAME, + [for ac_size in 4 8 1 2 16 $3 ; do # List sizes in rough order of prevalence. + AC_TRY_COMPILE([#include "confdefs.h" + #include + $2 + ], [switch (0) case 0: case (sizeof ($1) == $ac_size):;], AC_CV_NAME=$ac_size) + if test x$AC_CV_NAME != x ; then break; fi + done + ]) + if test x$AC_CV_NAME = x ; then + AC_MSG_ERROR([cannot determine a size for $1]) + fi + AC_MSG_RESULT($AC_CV_NAME) + AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [The number of bytes in type $1]) + undefine([AC_TYPE_NAME])dnl + undefine([AC_CV_NAME])dnl + ]) + + dnl Utility macro used by next two tests. + dnl AC_EXAMINE_OBJECT(C source code, + dnl commands examining object file, + dnl [commands to run if compile failed]): + dnl + dnl Compile the source code to an object file; then convert it into a + dnl printable representation. All unprintable characters and + dnl asterisks (*) are replaced by dots (.). All white space is + dnl deleted. Newlines (ASCII 0x10) in the input are preserved in the + dnl output, but runs of newlines are compressed to a single newline. + dnl Finally, line breaks are forcibly inserted so that no line is + dnl longer than 80 columns and the file ends with a newline. The + dnl result of all this processing is in the file conftest.dmp, which + dnl may be examined by the commands in the second argument. + dnl + AC_DEFUN([gcc_AC_EXAMINE_OBJECT], + [AC_LANG_SAVE + AC_LANG_C + dnl Next bit cribbed from AC_TRY_COMPILE. + cat > conftest.$ac_ext < conftest.dmp + $2 + ifelse($3, , , else + $3 + )dnl + fi + rm -rf conftest* + AC_LANG_RESTORE]) + + dnl Host endianness probe. + dnl Differs from AC_C_BIGENDIAN in that it does not require + dnl running a program on the host. + dnl + AC_DEFUN([fastjar_AC_COMPILE_C_BIGENDIAN], + [AC_CACHE_CHECK(byte ordering, ac_cv_c_compile_endian, + [ac_cv_c_compile_endian=unknown + gcc_AC_EXAMINE_OBJECT([ + #ifdef HAVE_LIMITS_H + # include + #endif + /* This structure must have no internal padding. */ + struct { + char prefix[sizeof "\nendian:" - 1]; + short word; + char postfix[2]; + } tester = { + "\nendian:", + #if SIZEOF_SHORT == 4 + ('A' << (CHAR_BIT * 3)) | ('B' << (CHAR_BIT * 2)) | + #endif + ('A' << CHAR_BIT) | 'B', + 'X', '\n' + };], + [if grep 'endian:AB' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_compile_endian=big-endian + elif grep 'endian:BA' conftest.dmp >/dev/null 2>&1; then + ac_cv_c_compile_endian=little-endian + fi]) + ]) + if test $ac_cv_c_compile_endian = unknown; then + AC_MSG_ERROR([*** unable to determine endianness]) + elif test $ac_cv_c_compile_endian = big-endian; then + AC_DEFINE(WORDS_BIG_ENDIAN, 1, + [Define if the host machine stores words of multi-word integers in + big-endian order.]) + fi + ]) + + dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead + dnl of the usual 2. + AC_DEFUN(gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG, + [AC_CACHE_CHECK([if mkdir takes one argument], gcc_cv_mkdir_takes_one_arg, + [AC_TRY_COMPILE([ + #include + #ifdef HAVE_SYS_STAT_H + # include + #endif + #ifdef HAVE_UNISTD_H + # include + #endif + #ifdef HAVE_DIRECT_H + # include + #endif], [mkdir ("foo", 0);], + gcc_cv_mkdir_takes_one_arg=no, gcc_cv_mkdir_takes_one_arg=yes)]) + if test $gcc_cv_mkdir_takes_one_arg = yes ; then + AC_DEFINE(MKDIR_TAKES_ONE_ARG, 1, [Define if host mkdir takes a + single argument.]) + fi + ]) + # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. diff -Nrc3pad gcc-3.2.3/fastjar/ChangeLog gcc-3.3/fastjar/ChangeLog *** gcc-3.2.3/fastjar/ChangeLog 2003-04-22 06:14:21.000000000 +0000 --- gcc-3.3/fastjar/ChangeLog 2003-05-14 00:09:11.000000000 +0000 *************** *** 1,22 **** ! 2003-04-22 Release Manager ! * GCC 3.2.3 Released. ! 2003-02-05 Release Manager ! * GCC 3.2.2 Released. ! 2002-11-19 Release Manager ! * GCC 3.2.1 Released. ! 2002-11-19 Release Manager ! * GCC 3.2.1 Released. ! 2002-11-18 Release Manager ! * GCC 3.2.1 Released. 2002-11-11 Tom Tromey --- 1,65 ---- ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-03-30 Joseph S. Myers ! * fastjar.texi: Remove @ at start of file. ! ! 2003-03-10 Mohan Embar ! ! * dostime.c: add #include for definition of NULL ! ! 2003-02-04 Joseph S. Myers ! ! * fastjar.texi: Update to GFDL 1.2. ! ! 2003-01-31 Daiki Ueno ! ! * jartool.c (extract_jar): Don't lseek to skip extra fields. ! (consume): If the stream is seekable, do lseek. ! ! 2003-01-28 Ranjit Mathew ! ! * jargrep.c: Include xregex.h from libiberty instead of ! system regex.h for better portability. ! ! 2003-01-21 Ranjit Mathew ! ! * jartool.c (list_jar): Terminate the 'ascii_date' buffer ! with a '\0' to guard against the case where the formatted ! time string is more than the size allowed by the buffer. ! ! 2002-12-30 DJ Delorie ! ! * Makefile.am (jar.1, grepjar.1): Protect against ! texi2pod/pod2man failing. ! * Makefile.in: Regenerated. ! ! 2002-12-23 Joseph S. Myers ! ! * fastjar.texi: Include Cover Texts in man page. ! ! 2002-12-04 Jakub Jelinek ! ! * fastjar.texi (jar @direntry, grepjar @direntry): Add (fastjar). ! ! 2002-11-21 Ranjit Mathew ! ! * jartool.c (extract_jar): Use "open" with O_BINARY instead of ! "creat" to create extracted files. 2002-11-11 Tom Tromey *************** *** 25,50 **** (unix2dostime): Handle years before 1980. Correctly compute month and day of month. 2002-11-07 Tom Tromey * dostime.c: Rewrote from scratch. * dostime.h (dostime): Removed. ! 2002-08-14 Release Manager ! * GCC 3.2 Released. ! 2002-07-25 Release Manager ! * GCC 3.1.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. 2002-03-18 Bryce McKinlay --- 68,145 ---- (unix2dostime): Handle years before 1980. Correctly compute month and day of month. + 2002-11-10 Jakub Jelinek + + * jartool.c (add_to_jar): Only compare file to jarfile if jarfile is + non-NULL. + + * configure.in (AC_CHECK_HEADERS): Add limits.h. + * configure, config.h.in: Rebuilt. + 2002-11-07 Tom Tromey * dostime.c: Rewrote from scratch. * dostime.h (dostime): Removed. ! 2002-10-20 Tom Tromey ! * jartool.c: Use mode 0666 when opening new file. ! 2002-10-15 Ranjit Mathew ! * configure, config.h.in: Rebuilt. ! * configure.in: Call gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG. ! 2002-09-11 Tom Tromey ! * Makefile.in: Rebuilt. ! * Makefile.am (TEXINFO_TEX): New macro. ! (info_TEXINFOS): Likewise. ! (fastjar_TEXINFOS): Likewise. ! (man_MANS): Likewise. ! (EXTRA_DIST): Likewise. ! (my_makei_flags): Likewise. ! (fastjar.info): New rule. ! (fastjar_TEXINFOS): Don't mention `$(srcdir)'. ! (TEXINFO_TEX): Likewise. ! (AUTOMAKE_OPTIONS): Added `cygnus'. ! 2002-09-11 Matthias Klose ! * Makefile.am: Revert the previous patch. ! * Makefile.in: Regenerated. ! ! 2002-09-10 Matthias Klose ! ! * fastjar.texi: New. ! * Makefile.am: Support building info docs and manpages. ! * Makefile.in: Regenerated. ! * configure.in: Set gcc_version. ! * configure: Regenerated. ! * jargrep.c: Update usage and help strings. ! ! 2002-09-09 Tom Tromey ! ! * jartool.c (mkdir): Define. ! * config.h.in: Rebuilt. ! * aclocal.m4, configure: Rebuilt. ! * acinclude.m4: New file. Copied gcc_AC_COMPILE_CHECK_SIZEOF, ! gcc_AC_EXAMINE_OBJECT, and fastjar_AC_COMPILE_C_BIGENDIAN from ! aclocal.m4. ! ! 2002-09-04 Tom Tromey ! ! From greenrd@hotmail.com: ! * jartool.c (list_jar): Correctly determine when new `filename' ! buffer must be allocated. Fixes PR java/7830. ! ! 2002-06-03 Geoffrey Keating ! ! * configure.in: Support cross-compiling. ! * configure: Regenerate. ! * aclocal.m4 (gcc_AC_COMPILE_CHECK_SIZEOF): New. ! (gcc_AC_EXAMINE_OBJECT): New. ! (fastjar_AC_COMPILE_C_BIGENDIAN): New. 2002-03-18 Bryce McKinlay diff -Nrc3pad gcc-3.2.3/fastjar/config.h.in gcc-3.3/fastjar/config.h.in *** gcc-3.2.3/fastjar/config.h.in 2002-01-09 23:22:20.000000000 +0000 --- gcc-3.3/fastjar/config.h.in 2002-11-10 21:04:24.000000000 +0000 *************** *** 9,33 **** /* Define if your declares struct tm. */ #undef TM_IN_SYS_TIME - /* Define if your processor stores words with the most significant - byte first (like Motorola and SPARC, unlike Intel and VAX). */ - #undef WORDS_BIGENDIAN - - /* The number of bytes in a char. */ - #undef SIZEOF_CHAR - - /* The number of bytes in a int. */ - #undef SIZEOF_INT - - /* The number of bytes in a long. */ - #undef SIZEOF_LONG - - /* The number of bytes in a long long. */ - #undef SIZEOF_LONG_LONG - - /* The number of bytes in a short. */ - #undef SIZEOF_SHORT - /* Define if you have the header file. */ #undef HAVE_DIRENT_H --- 9,14 ---- *************** *** 40,45 **** --- 21,29 ---- /* Define if you have the header file. */ #undef HAVE_STDLIB_H + /* Define if you have the header file. */ + #undef HAVE_LIMITS_H + /* Define if you have the header file. */ #undef HAVE_SYS_DIR_H *************** *** 58,60 **** --- 42,67 ---- /* Version number of package */ #undef VERSION + /* Define if host mkdir takes a + single argument. */ + #undef MKDIR_TAKES_ONE_ARG + + /* The number of bytes in type char */ + #undef SIZEOF_CHAR + + /* The number of bytes in type short */ + #undef SIZEOF_SHORT + + /* The number of bytes in type int */ + #undef SIZEOF_INT + + /* The number of bytes in type long */ + #undef SIZEOF_LONG + + /* The number of bytes in type long long */ + #undef SIZEOF_LONG_LONG + + /* Define if the host machine stores words of multi-word integers in + big-endian order. */ + #undef WORDS_BIG_ENDIAN + diff -Nrc3pad gcc-3.2.3/fastjar/configure gcc-3.3/fastjar/configure *** gcc-3.2.3/fastjar/configure 2002-01-09 23:22:20.000000000 +0000 --- gcc-3.3/fastjar/configure 2003-05-14 00:18:14.000000000 +0000 *************** EOF *** 1691,1697 **** fi ! for ac_hdr in fcntl.h unistd.h sys/param.h stdlib.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 --- 1691,1697 ---- fi ! for ac_hdr in fcntl.h unistd.h sys/param.h stdlib.h limits.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 *************** EOF *** 1800,1837 **** fi echo $ac_n "checking size of char""... $ac_c" 1>&6 ! echo "configure:1805: checking size of char" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! if test "$cross_compiling" = yes; then ! { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } ! else cat > conftest.$ac_ext < ! main() ! { ! FILE *f=fopen("conftestval", "w"); ! if (!f) exit(1); ! fprintf(f, "%d\n", sizeof(char)); ! exit(0); ! } EOF ! if { (eval echo configure:1824: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ! then ! ac_cv_sizeof_char=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_char=0 fi ! rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_char" 1>&6 cat >> confdefs.h <&6 + echo "configure:1806: checking if mkdir takes one argument" >&5 + if eval "test \"`echo '$''{'gcc_cv_mkdir_takes_one_arg'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + #ifdef HAVE_SYS_STAT_H + # include + #endif + #ifdef HAVE_UNISTD_H + # include + #endif + #ifdef HAVE_DIRECT_H + # include + #endif + int main() { + mkdir ("foo", 0); + ; return 0; } + EOF + if { (eval echo configure:1828: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + gcc_cv_mkdir_takes_one_arg=no + else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + gcc_cv_mkdir_takes_one_arg=yes + fi + rm -f conftest* + fi + + echo "$ac_t""$gcc_cv_mkdir_takes_one_arg" 1>&6 + if test $gcc_cv_mkdir_takes_one_arg = yes ; then + cat >> confdefs.h <<\EOF + #define MKDIR_TAKES_ONE_ARG 1 + EOF + + fi + + echo $ac_n "checking size of char""... $ac_c" 1>&6 ! echo "configure:1850: checking size of char" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_char'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < ! ! ! int main() { ! switch (0) case 0: case (sizeof (char) == $ac_size):; ! ; return 0; } EOF ! if { (eval echo configure:1866: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! rm -rf conftest* ! ac_cv_sizeof_char=$ac_size else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi ! rm -f conftest* ! if test x$ac_cv_sizeof_char != x ; then break; fi ! done ! fi + if test x$ac_cv_sizeof_char = x ; then + { echo "configure: error: cannot determine a size for char" 1>&2; exit 1; } fi echo "$ac_t""$ac_cv_sizeof_char" 1>&6 cat >> confdefs.h <&6 ! echo "configure:1844: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! if test "$cross_compiling" = yes; then ! { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } ! else cat > conftest.$ac_ext < ! main() ! { ! FILE *f=fopen("conftestval", "w"); ! if (!f) exit(1); ! fprintf(f, "%d\n", sizeof(short)); ! exit(0); ! } EOF ! if { (eval echo configure:1863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ! then ! ac_cv_sizeof_short=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_short=0 fi ! rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_short" 1>&6 cat >> confdefs.h <&6 ! echo "configure:1889: checking size of short" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < ! ! ! int main() { ! switch (0) case 0: case (sizeof (short) == $ac_size):; ! ; return 0; } EOF ! if { (eval echo configure:1905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! rm -rf conftest* ! ac_cv_sizeof_short=$ac_size else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi ! rm -f conftest* ! if test x$ac_cv_sizeof_short != x ; then break; fi ! done ! fi + if test x$ac_cv_sizeof_short = x ; then + { echo "configure: error: cannot determine a size for short" 1>&2; exit 1; } fi echo "$ac_t""$ac_cv_sizeof_short" 1>&6 cat >> confdefs.h <&6 ! echo "configure:1883: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! if test "$cross_compiling" = yes; then ! { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } ! else cat > conftest.$ac_ext < ! main() ! { ! FILE *f=fopen("conftestval", "w"); ! if (!f) exit(1); ! fprintf(f, "%d\n", sizeof(int)); ! exit(0); ! } EOF ! if { (eval echo configure:1902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ! then ! ac_cv_sizeof_int=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_int=0 fi ! rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_int" 1>&6 cat >> confdefs.h <&6 ! echo "configure:1928: checking size of int" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < ! ! ! int main() { ! switch (0) case 0: case (sizeof (int) == $ac_size):; ! ; return 0; } EOF ! if { (eval echo configure:1944: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! rm -rf conftest* ! ac_cv_sizeof_int=$ac_size else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi ! rm -f conftest* ! if test x$ac_cv_sizeof_int != x ; then break; fi ! done ! fi + if test x$ac_cv_sizeof_int = x ; then + { echo "configure: error: cannot determine a size for int" 1>&2; exit 1; } fi echo "$ac_t""$ac_cv_sizeof_int" 1>&6 cat >> confdefs.h <&6 ! echo "configure:1922: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! if test "$cross_compiling" = yes; then ! { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } ! else cat > conftest.$ac_ext < ! main() ! { ! FILE *f=fopen("conftestval", "w"); ! if (!f) exit(1); ! fprintf(f, "%d\n", sizeof(long)); ! exit(0); ! } EOF ! if { (eval echo configure:1941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ! then ! ac_cv_sizeof_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_long=0 fi ! rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long" 1>&6 cat >> confdefs.h <&6 ! echo "configure:1967: checking size of long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < ! ! ! int main() { ! switch (0) case 0: case (sizeof (long) == $ac_size):; ! ; return 0; } EOF ! if { (eval echo configure:1983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! rm -rf conftest* ! ac_cv_sizeof_long=$ac_size else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi ! rm -f conftest* ! if test x$ac_cv_sizeof_long != x ; then break; fi ! done ! fi + if test x$ac_cv_sizeof_long = x ; then + { echo "configure: error: cannot determine a size for long" 1>&2; exit 1; } fi echo "$ac_t""$ac_cv_sizeof_long" 1>&6 cat >> confdefs.h <&6 ! echo "configure:1961: checking size of long long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! if test "$cross_compiling" = yes; then ! { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } ! else cat > conftest.$ac_ext < ! main() ! { ! FILE *f=fopen("conftestval", "w"); ! if (!f) exit(1); ! fprintf(f, "%d\n", sizeof(long long)); ! exit(0); ! } EOF ! if { (eval echo configure:1980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ! then ! ac_cv_sizeof_long_long=`cat conftestval` else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 - rm -fr conftest* - ac_cv_sizeof_long_long=0 fi ! rm -fr conftest* fi fi echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6 cat >> confdefs.h <&6 ! echo "configure:2006: checking size of long long" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! for ac_size in 4 8 1 2 16 ; do # List sizes in rough order of prevalence. cat > conftest.$ac_ext < ! ! ! int main() { ! switch (0) case 0: case (sizeof (long long) == $ac_size):; ! ; return 0; } EOF ! if { (eval echo configure:2022: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! rm -rf conftest* ! ac_cv_sizeof_long_long=$ac_size else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi ! rm -f conftest* ! if test x$ac_cv_sizeof_long_long != x ; then break; fi ! done ! fi + if test x$ac_cv_sizeof_long_long = x ; then + { echo "configure: error: cannot determine a size for long long" 1>&2; exit 1; } fi echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6 cat >> confdefs.h <&6 ! echo "configure:2001: checking whether byte ordering is bigendian" >&5 ! if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! ac_cv_c_bigendian=unknown ! # See if sys/param.h defines the BYTE_ORDER macro. ! cat > conftest.$ac_ext < ! #include ! int main() { - #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN - bogus endian macros - #endif - ; return 0; } - EOF - if { (eval echo configure:2019: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < - #include - int main() { ! #if BYTE_ORDER != BIG_ENDIAN ! not big endian #endif ! ; return 0; } ! EOF ! if { (eval echo configure:2034: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! rm -rf conftest* ! ac_cv_c_bigendian=yes ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! ac_cv_c_bigendian=no ! fi ! rm -f conftest* ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! fi ! rm -f conftest* ! if test $ac_cv_c_bigendian = unknown; then ! if test "$cross_compiling" = yes; then ! { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } ! else ! cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null ! then ! ac_cv_c_bigendian=no ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -fr conftest* ! ac_cv_c_bigendian=yes ! fi ! rm -fr conftest* fi - fi fi ! echo "$ac_t""$ac_cv_c_bigendian" 1>&6 ! if test $ac_cv_c_bigendian = yes; then cat >> confdefs.h <<\EOF ! #define WORDS_BIGENDIAN 1 EOF fi --- 2041,2115 ---- ! echo $ac_n "checking byte ordering""... $ac_c" 1>&6 ! echo "configure:2046: checking byte ordering" >&5 ! if eval "test \"`echo '$''{'ac_cv_c_compile_endian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! ac_cv_c_compile_endian=unknown ! ! ac_ext=c ! # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ! ac_cpp='$CPP $CPPFLAGS' ! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ! cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext < #endif ! /* This structure must have no internal padding. */ ! struct { ! char prefix[sizeof "\nendian:" - 1]; ! short word; ! char postfix[2]; ! } tester = { ! "\nendian:", ! #if SIZEOF_SHORT == 4 ! ('A' << (CHAR_BIT * 3)) | ('B' << (CHAR_BIT * 2)) | ! #endif ! ('A' << CHAR_BIT) | 'B', ! 'X', '\n' ! }; EOF ! if { (eval echo configure:2080: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! od -c conftest.o | ! sed 's/^[0-7]*[ ]*/ / ! s/\*/./g ! s/ \\n/*/g ! s/ [0-9][0-9][0-9]/./g ! s/ \\[^ ]/./g' | ! tr -d ' ! ' | tr -s '*' ' ! ' | fold | sed '$a\ ! ' > conftest.dmp ! if grep 'endian:AB' conftest.dmp >/dev/null 2>&1; then ! ac_cv_c_compile_endian=big-endian ! elif grep 'endian:BA' conftest.dmp >/dev/null 2>&1; then ! ac_cv_c_compile_endian=little-endian ! fi fi + rm -rf conftest* + ac_ext=c + # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. + ac_cpp='$CPP $CPPFLAGS' + ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' + ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' + cross_compiling=$ac_cv_prog_cc_cross + fi ! echo "$ac_t""$ac_cv_c_compile_endian" 1>&6 ! if test $ac_cv_c_compile_endian = unknown; then ! { echo "configure: error: *** unable to determine endianness" 1>&2; exit 1; } ! elif test $ac_cv_c_compile_endian = big-endian; then cat >> confdefs.h <<\EOF ! #define WORDS_BIG_ENDIAN 1 EOF fi *************** ZINCS= *** 2100,2106 **** use_zlib=maybe if test "$with_system_zlib" = yes; then echo $ac_n "checking for deflate in -lz""... $ac_c" 1>&6 ! echo "configure:2104: checking for deflate in -lz" >&5 ac_lib_var=`echo z'_'deflate | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2128,2134 ---- use_zlib=maybe if test "$with_system_zlib" = yes; then echo $ac_n "checking for deflate in -lz""... $ac_c" 1>&6 ! echo "configure:2132: checking for deflate in -lz" >&5 ac_lib_var=`echo z'_'deflate | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** else *** 2108,2114 **** ac_save_LIBS="$LIBS" LIBS="-lz $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 2147,2153 ---- deflate() ; return 0; } EOF ! if { (eval echo configure:2151: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else *************** fi *** 2154,2159 **** --- 2182,2197 ---- + # Get the version trigger filename from the toplevel + if test "${with_gcc_version_trigger+set}" = set; then + gcc_version_trigger=$with_gcc_version_trigger + else + gcc_version_trigger=${srcdir}/version.c + fi + gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*"\([^"]*\)".*/\1/'` + gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'` + + trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure *************** s%@CPP@%$CPP%g *** 2312,2317 **** --- 2350,2356 ---- s%@ZLIBS@%$ZLIBS%g s%@ZDEPS@%$ZDEPS%g s%@ZINCS@%$ZINCS%g + s%@gcc_version@%$gcc_version%g CEOF EOF *************** cat >> $CONFIG_STATUS <<\EOF *** 2320,2326 **** # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ! ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. --- 2359,2365 ---- # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ! ac_max_sed_cmds=60 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. diff -Nrc3pad gcc-3.2.3/fastjar/configure.in gcc-3.3/fastjar/configure.in *** gcc-3.2.3/fastjar/configure.in 2002-01-09 23:22:20.000000000 +0000 --- gcc-3.3/fastjar/configure.in 2002-11-10 21:04:24.000000000 +0000 *************** dnl Checks for header files. *** 24,44 **** AC_HEADER_DIRENT AC_HEADER_STDC AC_STRUCT_TM ! AC_CHECK_HEADERS(fcntl.h unistd.h sys/param.h stdlib.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_TYPE_OFF_T AC_STRUCT_TM dnl Check for type-widths ! AC_CHECK_SIZEOF(char) ! AC_CHECK_SIZEOF(short) ! AC_CHECK_SIZEOF(int) ! AC_CHECK_SIZEOF(long) ! AC_CHECK_SIZEOF(long long) dnl Check byte order ! AC_C_BIGENDIAN AC_ARG_WITH(system-zlib, [ --with-system-zlib use installed libz]) --- 24,47 ---- AC_HEADER_DIRENT AC_HEADER_STDC AC_STRUCT_TM ! AC_CHECK_HEADERS(fcntl.h unistd.h sys/param.h stdlib.h limits.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_TYPE_OFF_T AC_STRUCT_TM + # mkdir takes a single argument on some systems. + gcc_AC_FUNC_MKDIR_TAKES_ONE_ARG + dnl Check for type-widths ! gcc_AC_COMPILE_CHECK_SIZEOF(char) ! gcc_AC_COMPILE_CHECK_SIZEOF(short) ! gcc_AC_COMPILE_CHECK_SIZEOF(int) ! gcc_AC_COMPILE_CHECK_SIZEOF(long) ! gcc_AC_COMPILE_CHECK_SIZEOF(long long) dnl Check byte order ! fastjar_AC_COMPILE_C_BIGENDIAN AC_ARG_WITH(system-zlib, [ --with-system-zlib use installed libz]) *************** AC_SUBST(ZLIBS) *** 63,66 **** --- 66,81 ---- AC_SUBST(ZDEPS) AC_SUBST(ZINCS) + # Get the version trigger filename from the toplevel + if test "${with_gcc_version_trigger+set}" = set; then + gcc_version_trigger=$with_gcc_version_trigger + else + gcc_version_trigger=${srcdir}/version.c + fi + changequote(,)dnl + gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*"\([^"]*\)".*/\1/'` + gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'` + changequote([,])dnl + AC_SUBST(gcc_version) + AC_OUTPUT(Makefile install-defs.sh) diff -Nrc3pad gcc-3.2.3/fastjar/.cvsignore gcc-3.3/fastjar/.cvsignore *** gcc-3.2.3/fastjar/.cvsignore 1970-01-01 00:00:00.000000000 +0000 --- gcc-3.3/fastjar/.cvsignore 2002-09-12 00:40:12.000000000 +0000 *************** *** 0 **** --- 1,3 ---- + fastjar.info + grepjar.1 + jar.1 diff -Nrc3pad gcc-3.2.3/fastjar/dostime.c gcc-3.3/fastjar/dostime.c *** gcc-3.2.3/fastjar/dostime.c 2002-11-11 22:22:31.000000000 +0000 --- gcc-3.3/fastjar/dostime.c 2003-03-10 19:53:26.000000000 +0000 *************** *** 21,26 **** --- 21,28 ---- #include + #include + #include "dostime.h" /* diff -Nrc3pad gcc-3.2.3/fastjar/fastjar.info gcc-3.3/fastjar/fastjar.info *** gcc-3.2.3/fastjar/fastjar.info 1970-01-01 00:00:00.000000000 +0000 --- gcc-3.3/fastjar/fastjar.info 2003-05-14 01:25:14.000000000 +0000 *************** *** 0 **** --- 1,956 ---- + This is fastjar.info, produced by makeinfo version 4.2 from + fastjar.texi. + + INFO-DIR-SECTION Programming + START-INFO-DIR-ENTRY + * fastjar: (fastjar). GNU jar utilities + END-INFO-DIR-ENTRY + + INFO-DIR-SECTION Individual utilities + START-INFO-DIR-ENTRY + * jar: (fastjar)Invoking jar. + An archive tool for Java archives + * grepjar: (fastjar)Invoking grepjar. + Search files in a jar file for a pattern + END-INFO-DIR-ENTRY + + Copyright (C) 2002 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 or + any later version published by the Free Software Foundation; with the + Invariant Sections being "GNU General Public License", the Front-Cover + texts being (a) (see below), and with the Back-Cover Texts being (b) + (see below). A copy of the license is included in the section entitled + "GNU Free Documentation License". + + (a) The FSF's Front-Cover Text is: + + A GNU Manual + + (b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. + +  + File: fastjar.info, Node: Top, Next: Invoking jar, Up: (dir) + + Introduction + ************ + + This manual describes how to use `jar' and `grepjar'. + + * Menu: + + * Invoking jar:: Options supported by `jar' + * Invoking grepjar:: Options supported by `grepjar' + * Copying:: The GNU General Public License + * GNU Free Documentation License:: + How you can share and copy this manual + +  + File: fastjar.info, Node: Invoking jar, Next: Invoking grepjar, Prev: Top, Up: Top + + Invoking jar + ************ + + `fastjar' is an implementation of Sun's jar utility that comes with + the JDK, written entirely in C, and runs in a fraction of the time while + being feature compatible. + + If any file is a directory then it is processed recursively. The + manifest file name and the archive file name needs to be specified in + the same order the `-m' and `-f' flags are specified. + + Exactly one of the following actions must be specified: + + `-c' + Create new archive. + + `-t' + List table of contents for archive. + + `-x' + Extract named (or all) files from archive. + + `-u' + Update existing archive. This option is disabled due to bugs + (currently fails with exit status 1 and does nothing). + + The following parameters are optional: + + `-@' + Read the names of the files to add to the archive from stdin. This + option is supported only in combination with `-c' or `-u'. Non + standard option added in the GCC version. + + `-C DIRECTORY' + Change to the DIRECTORY and include the following file. + + `-E' + Prevent fastjar from reading the content of a directory when + specifying one (and instead relying on the provided list of files + to populate the archive with regard to the directory entry). Non + standard option added in the GCC version. + + `-M' + Do not create a manifest file for the entries. + + `-0' + Store only; use no ZIP compression. + + `-V' + `--version' + Display version information. + + `-f ARCHIVE' + Specify archive file name. + + `-m MANIFEST' + Include manifest information from specified MANIFEST file. + + `-v' + Generate verbose output on standard output. + + All remaining options are considered to be names of files. + +  + File: fastjar.info, Node: Invoking grepjar, Next: Copying, Prev: Invoking jar, Up: Top + + Invoking grepjar + **************** + + The `grepjar' program can be used to search files in a jar file for + a pattern. + + `-b' + Print byte offset of match. + + `-c' + Print number of matches. + + `-i' + Compare case-insensitively. + + `-n' + Print line number of each match. + + `-s' + Suppress error messages. + + `-w' + Force PATTERN to match only whole words. + + `-e PATTERN' + Use PATTERN as regular expression. + + `--help' + Print help, then exit. + + `-V' + `--version' + Print version number, then exit. + +  + File: fastjar.info, Node: Copying, Next: GNU Free Documentation License, Prev: Invoking grepjar, Up: Top + + GNU GENERAL PUBLIC LICENSE + ************************** + + Version 2, June 1991 + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + ======== + + The licenses for most software are designed to take away your + freedom to share and change it. By contrast, the GNU General Public + License is intended to guarantee your freedom to share and change free + software--to make sure the software is free for all its users. This + General Public License applies to most of the Free Software + Foundation's software and to any other program whose authors commit to + using it. (Some other Free Software Foundation software is covered by + the GNU Library General Public License instead.) You can apply it to + your programs, too. + + When we speak of free software, we are referring to freedom, not + price. Our General Public Licenses are designed to make sure that you + have the freedom to distribute copies of free software (and charge for + this service if you wish), that you receive source code or can get it + if you want it, that you can change the software or use pieces of it in + new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid + anyone to deny you these rights or to ask you to surrender the rights. + These restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether + gratis or for a fee, you must give the recipients all the rights that + you have. You must make sure that they, too, receive or can get the + source code. And you must show them these terms so they know their + rights. + + We protect your rights with two steps: (1) copyright the software, + and (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software + patents. We wish to avoid the danger that redistributors of a free + program will individually obtain patent licenses, in effect making the + program proprietary. To prevent this, we have made it clear that any + patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed + under the terms of this General Public License. The "Program", + below, refers to any such program or work, and a "work based on + the Program" means either the Program or any derivative work under + copyright law: that is to say, a work containing the Program or a + portion of it, either verbatim or with modifications and/or + translated into another language. (Hereinafter, translation is + included without limitation in the term "modification".) Each + licensee is addressed as "you". + + Activities other than copying, distribution and modification are + not covered by this License; they are outside its scope. The act + of running the Program is not restricted, and the output from the + Program is covered only if its contents constitute a work based on + the Program (independent of having been made by running the + Program). Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's + source code as you receive it, in any medium, provided that you + conspicuously and appropriately publish on each copy an appropriate + copyright notice and disclaimer of warranty; keep intact all the + notices that refer to this License and to the absence of any + warranty; and give any other recipients of the Program a copy of + this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, + and you may at your option offer warranty protection in exchange + for a fee. + + 2. You may modify your copy or copies of the Program or any portion + of it, thus forming a work based on the Program, and copy and + distribute such modifications or work under the terms of Section 1 + above, provided that you also meet all of these conditions: + + a. You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b. You must cause any work that you distribute or publish, that + in whole or in part contains or is derived from the Program + or any part thereof, to be licensed as a whole at no charge + to all third parties under the terms of this License. + + c. If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display + an announcement including an appropriate copyright notice and + a notice that there is no warranty (or else, saying that you + provide a warranty) and that users may redistribute the + program under these conditions, and telling the user how to + view a copy of this License. (Exception: if the Program + itself is interactive but does not normally print such an + announcement, your work based on the Program is not required + to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the + Program, and can be reasonably considered independent and separate + works in themselves, then this License, and its terms, do not + apply to those sections when you distribute them as separate + works. But when you distribute the same sections as part of a + whole which is a work based on the Program, the distribution of + the whole must be on the terms of this License, whose permissions + for other licensees extend to the entire whole, and thus to each + and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or + contest your rights to work written entirely by you; rather, the + intent is to exercise the right to control the distribution of + derivative or collective works based on the Program. + + In addition, mere aggregation of another work not based on the + Program with the Program (or with a work based on the Program) on + a volume of a storage or distribution medium does not bring the + other work under the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms + of Sections 1 and 2 above provided that you also do one of the + following: + + a. Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Sections 1 and 2 above on a medium customarily used for + software interchange; or, + + b. Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a + medium customarily used for software interchange; or, + + c. Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with + such an offer, in accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete + source code means all the source code for all modules it contains, + plus any associated interface definition files, plus the scripts + used to control compilation and installation of the executable. + However, as a special exception, the source code distributed need + not include anything that is normally distributed (in either + source or binary form) with the major components (compiler, + kernel, and so on) of the operating system on which the executable + runs, unless that component itself accompanies the executable. + + If distribution of executable or object code is made by offering + access to copy from a designated place, then offering equivalent + access to copy the source code from the same place counts as + distribution of the source code, even though third parties are not + compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense or distribute the Program is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify + or distribute the Program or its derivative works. These actions + are prohibited by law if you do not accept this License. + Therefore, by modifying or distributing the Program (or any work + based on the Program), you indicate your acceptance of this + License to do so, and all its terms and conditions for copying, + distributing or modifying the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program + subject to these terms and conditions. You may not impose any + further restrictions on the recipients' exercise of the rights + granted herein. You are not responsible for enforcing compliance + by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent + issues), conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this + License. If you cannot distribute so as to satisfy simultaneously + your obligations under this License and any other pertinent + obligations, then as a consequence you may not distribute the + Program at all. For example, if a patent license would not permit + royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only + way you could satisfy both it and this License would be to refrain + entirely from distribution of the Program. + + If any portion of this section is held invalid or unenforceable + under any particular circumstance, the balance of the section is + intended to apply and the section as a whole is intended to apply + in other circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of + any such claims; this section has the sole purpose of protecting + the integrity of the free software distribution system, which is + implemented by public license practices. Many people have made + generous contributions to the wide range of software distributed + through that system in reliance on consistent application of that + system; it is up to the author/donor to decide if he or she is + willing to distribute software through any other system and a + licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed + to be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, + the original copyright holder who places the Program under this + License may add an explicit geographical distribution limitation + excluding those countries, so that distribution is permitted only + in or among countries not thus excluded. In such case, this + License incorporates the limitation as if written in the body of + this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such + new versions will be similar in spirit to the present version, but + may differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies a version number of this License which applies + to it and "any later version", you have the option of following + the terms and conditions either of that version or of any later + version published by the Free Software Foundation. If the Program + does not specify a version number of this License, you may choose + any version ever published by the Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted + by the Free Software Foundation, write to the Free Software + Foundation; we sometimes make exceptions for this. Our decision + will be guided by the two goals of preserving the free status of + all derivatives of our free software and of promoting the sharing + and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE + LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT + WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE + QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE + PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY + SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY + MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, + INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR + INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU + OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY + OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + ============================================= + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these + terms. + + To do so, attach the following notices to the program. It is safest + to attach them to the start of each source file to most effectively + convey the exclusion of warranty; and each file should have at least + the "copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. + Copyright (C) YEAR NAME OF AUTHOR + + 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. + + Also add information on how to contact you by electronic and paper + mail. + + If the program is interactive, make it output a short notice like + this when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details + type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the + appropriate parts of the General Public License. Of course, the + commands you use may be called something other than `show w' and `show + c'; they could even be mouse-clicks or menu items--whatever suits your + program. + + You should also get your employer (if you work as a programmer) or + your school, if any, to sign a "copyright disclaimer" for the program, + if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + SIGNATURE OF TY COON, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your + program into proprietary programs. If your program is a subroutine + library, you may consider it more useful to permit linking proprietary + applications with the library. If this is what you want to do, use the + GNU Library General Public License instead of this License. + +  + File: fastjar.info, Node: GNU Free Documentation License, Prev: Copying, Up: Top + + GNU Free Documentation License + ****************************** + + Version 1.2, November 2002 + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warrany Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided for under this License. Any other + attempt to copy, modify, sublicense or distribute the Document is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. + + ADDENDUM: How to use this License for your documents + ==================================================== + + To use this License in a document you have written, include a copy of + the License in the document and put the following copyright and license + notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. + A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover + Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other + combination of the three, merge those two alternatives to suit the + situation. + + If your document contains nontrivial examples of program code, we + recommend releasing these examples in parallel under your choice of + free software license, such as the GNU General Public License, to + permit their use in free software. + + +  + Tag Table: + Node: Top1236 + Node: Invoking jar1618 + Node: Invoking grepjar3399 + Node: Copying4005 + Node: GNU Free Documentation License23222 +  + End Tag Table diff -Nrc3pad gcc-3.2.3/fastjar/fastjar.texi gcc-3.3/fastjar/fastjar.texi *** gcc-3.2.3/fastjar/fastjar.texi 1970-01-01 00:00:00.000000000 +0000 --- gcc-3.3/fastjar/fastjar.texi 2003-03-30 17:01:58.000000000 +0000 *************** *** 0 **** --- 1,265 ---- + \input texinfo @c -*-texinfo-*- + @setfilename fastjar.info + @settitle Guide to GNU jar utilites + + @c Note: When reading this manual you'll find lots of strange + @c circumlocutions like ``compiler for the Java language''. + @c This is necessary due to Sun's restrictions on the use of + @c the word ``Java'. + + @c When this manual is copyrighted. + @set copyrights-fastjar 2002 + + @include gcc-common.texi + + @c Versions + @set which-gcj GCC-@value{version-GCC} + + @ifinfo + @format + @dircategory Programming + @direntry + * fastjar: (fastjar). GNU jar utilities + @end direntry + + @dircategory Individual utilities + @direntry + * jar: (fastjar)Invoking jar. + An archive tool for Java archives + * grepjar: (fastjar)Invoking grepjar. + Search files in a jar file for a pattern + @end direntry + @end format + + @c man begin COPYRIGHT + Copyright (C) @value{copyrights-fastjar} Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 or + any later version published by the Free Software Foundation; with the + Invariant Sections being ``GNU General Public License'', the Front-Cover + texts being (a) (see below), and with the Back-Cover Texts being (b) + (see below). A copy of the license is included in the + @c man end + section entitled + ``GNU Free Documentation License''. + @ignore + @c man begin COPYRIGHT + man page gfdl(7). + @c man end + @end ignore + + @c man begin COPYRIGHT + + (a) The FSF's Front-Cover Text is: + + A GNU Manual + + (b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. + @c man end + @end ifinfo + + @titlepage + @title GNU jar utilites + @author Brian Burns + + @page + @vskip 0pt plus 1filll + Copyright @copyright{} @value{copyrights-gcj} Free Software Foundation, Inc. + @sp 2 + For the @value{which-gcj} Version* + @sp 1 + Published by the Free Software Foundation @* + 59 Temple Place - Suite 330@* + Boston, MA 02111-1307, USA@* + @sp 1 + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.2 or + any later version published by the Free Software Foundation; with the + Invariant Sections being ``GNU General Public License'', the Front-Cover + texts being (a) (see below), and with the Back-Cover Texts being (b) + (see below). A copy of the license is included in the section entitled + ``GNU Free Documentation License''. + + (a) The FSF's Front-Cover Text is: + + A GNU Manual + + (b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. + @end titlepage + @contents + @page + + + @node Top + @top Introduction + + This manual describes how to use @command{jar} and @command{grepjar}. + + @menu + * Invoking jar:: Options supported by @command{jar} + * Invoking grepjar:: Options supported by @command{grepjar} + * Copying:: The GNU General Public License + * GNU Free Documentation License:: + How you can share and copy this manual + @end menu + + @node Invoking jar + @chapter Invoking jar + + @c man title jar archive tool for Java archives + + @c man begin DESCRIPTION jar + + @code{fastjar} is an implementation of Sun's jar utility that comes with + the JDK, written entirely in C, and runs in a fraction of the time while + being feature compatible. + + If any file is a directory then it is processed recursively. The + manifest file name and the archive file name needs to be specified in + the same order the @option{-m} and @option{-f} flags are specified. + + @c man end + + @ignore + @c man begin SYNOPSIS jar + jar @option{-ctxu} [@option{OPTIONS}] [@var{jar-file}] [@var{manifest-file}] [@option{-C} @var{dir}] @var{files}@dots{} + @c man end + @c man begin SEEALSO jar + gcj(1), gij(1), grepjar(1) + and the Info entry for @file{gcj}. + @c man end + @end ignore + + @c man begin OPTIONS jar + + Exactly one of the following actions must be specified: + + @table @gcctabopt + + @item -c + Create new archive. + + @item -t + List table of contents for archive. + + @item -x + Extract named (or all) files from archive. + + @item -u + Update existing archive. This option is disabled due to bugs (currently + fails with exit status 1 and does nothing). + + @end table + + The following parameters are optional: + + @table @gcctabopt + + @item -@@ + Read the names of the files to add to the archive from stdin. This + option is supported only in combination with @option{-c} or @option{-u}. + Non standard option added in the GCC version. + + @item -C @var{directory} + Change to the @var{directory} and include the following file. + + @item -E + Prevent fastjar from reading the content of a directory when specifying + one (and instead relying on the provided list of files to populate the + archive with regard to the directory entry). Non standard option added + in the GCC version. + + @item -M + Do not create a manifest file for the entries. + + @item -0 + Store only; use no ZIP compression. + + @item -V + @itemx --version + Display version information. + + @item -f @var{archive} + Specify archive file name. + + @item -m @var{manifest} + Include manifest information from specified @var{manifest} file. + + @item -v + Generate verbose output on standard output. + + @end table + + All remaining options are considered to be names of files. + + @c man end + + @node Invoking grepjar + @chapter Invoking grepjar + + @c man title grepjar search files in a jar file for a pattern + + @c man begin DESCRIPTION grepjar + + The @code{grepjar} program can be used to search files in a jar file for + a pattern. + + @c man end + + @ignore + @c man begin SYNOPSIS grepjar + grepjar [@option{-bcinsw}] @option{-e} @var{PATTERN} | @var{PATTERN} @var{files}@dots{} + @c man end + @c man begin SEEALSO grepjar + jar(1), gcj(1), gij(1), gfdl(7) and the Info entry for @file{gcj}. + @c man end + @end ignore + + @c man begin OPTIONS grepjar + + @table @gcctabopt + @item -b + Print byte offset of match. + + @item -c + Print number of matches. + + @item -i + Compare case-insensitively. + + @item -n + Print line number of each match. + + @item -s + Suppress error messages. + + @item -w + Force @var{PATTERN} to match only whole words. + + @item -e @var{PATTERN} + Use @var{PATTERN} as regular expression. + + @item --help + Print help, then exit. + + @item -V + @itemx --version + Print version number, then exit. + @end table + + @c man end + + @include gpl.texi + + @include fdl.texi + + @bye diff -Nrc3pad gcc-3.2.3/fastjar/grepjar.1 gcc-3.3/fastjar/grepjar.1 *** gcc-3.2.3/fastjar/grepjar.1 1970-01-01 00:00:00.000000000 +0000 --- gcc-3.3/fastjar/grepjar.1 2003-05-14 01:25:21.000000000 +0000 *************** *** 0 **** --- 1,202 ---- + .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 + .\" + .\" Standard preamble: + .\" ======================================================================== + .de Sh \" Subsection heading + .br + .if t .Sp + .ne 5 + .PP + \fB\\$1\fR + .PP + .. + .de Sp \" Vertical space (when we can't use .PP) + .if t .sp .5v + .if n .sp + .. + .de Vb \" Begin verbatim text + .ft CW + .nf + .ne \\$1 + .. + .de Ve \" End verbatim text + .ft R + .fi + .. + .\" Set up some character translations and predefined strings. \*(-- will + .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left + .\" double quote, and \*(R" will give a right double quote. | will give a + .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to + .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' + .\" expand to `' in nroff, nothing in troff, for use with C<>. + .tr \(*W-|\(bv\*(Tr + .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' + .ie n \{\ + . ds -- \(*W- + . ds PI pi + . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch + . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch + . ds L" "" + . ds R" "" + . ds C` "" + . ds C' "" + 'br\} + .el\{\ + . ds -- \|\(em\| + . ds PI \(*p + . ds L" `` + . ds R" '' + 'br\} + .\" + .\" If the F register is turned on, we'll generate index entries on stderr for + .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index + .\" entries marked with X<> in POD. Of course, you'll have to process the + .\" output yourself in some meaningful fashion. + .if \nF \{\ + . de IX + . tm Index:\\$1\t\\n%\t"\\$2" + .. + . nr % 0 + . rr F + .\} + .\" + .\" For nroff, turn off justification. Always turn off hyphenation; it makes + .\" way too many mistakes in technical documents. + .hy 0 + .if n .na + .\" + .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). + .\" Fear. Run. Save yourself. No user-serviceable parts. + . \" fudge factors for nroff and troff + .if n \{\ + . ds #H 0 + . ds #V .8m + . ds #F .3m + . ds #[ \f1 + . ds #] \fP + .\} + .if t \{\ + . ds #H ((1u-(\\\\n(.fu%2u))*.13m) + . ds #V .6m + . ds #F 0 + . ds #[ \& + . ds #] \& + .\} + . \" simple accents for nroff and troff + .if n \{\ + . ds ' \& + . ds ` \& + . ds ^ \& + . ds , \& + . ds ~ ~ + . ds / + .\} + .if t \{\ + . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" + . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' + . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' + . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' + . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' + . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' + .\} + . \" troff and (daisy-wheel) nroff accents + .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' + .ds 8 \h'\*(#H'\(*b\h'-\*(#H' + .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] + .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' + .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' + .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] + .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] + .ds ae a\h'-(\w'a'u*4/10)'e + .ds Ae A\h'-(\w'A'u*4/10)'E + . \" corrections for vroff + .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' + .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' + . \" for low resolution devices (crt and lpr) + .if \n(.H>23 .if \n(.V>19 \ + \{\ + . ds : e + . ds 8 ss + . ds o a + . ds d- d\h'-1'\(ga + . ds D- D\h'-1'\(hy + . ds th \o'bp' + . ds Th \o'LP' + . ds ae ae + . ds Ae AE + .\} + .rm #[ #] #H #V #F C + .\" ======================================================================== + .\" + .IX Title "GREPJAR 1" + .TH GREPJAR 1 "2003-05-14" "gcc-3.3" "GNU" + .SH "NAME" + grepjar \- search files in a jar file for a pattern + .SH "SYNOPSIS" + .IX Header "SYNOPSIS" + grepjar [\fB\-bcinsw\fR] \fB\-e\fR \fI\s-1PATTERN\s0\fR | \fI\s-1PATTERN\s0\fR \fIfiles\fR... + .SH "DESCRIPTION" + .IX Header "DESCRIPTION" + The \f(CW\*(C`grepjar\*(C'\fR program can be used to search files in a jar file for + a pattern. + .SH "OPTIONS" + .IX Header "OPTIONS" + .IP "\fB\-b\fR" 4 + .IX Item "-b" + Print byte offset of match. + .IP "\fB\-c\fR" 4 + .IX Item "-c" + Print number of matches. + .IP "\fB\-i\fR" 4 + .IX Item "-i" + Compare case\-insensitively. + .IP "\fB\-n\fR" 4 + .IX Item "-n" + Print line number of each match. + .IP "\fB\-s\fR" 4 + .IX Item "-s" + Suppress error messages. + .IP "\fB\-w\fR" 4 + .IX Item "-w" + Force \fI\s-1PATTERN\s0\fR to match only whole words. + .IP "\fB\-e\fR \fI\s-1PATTERN\s0\fR" 4 + .IX Item "-e PATTERN" + Use \fI\s-1PATTERN\s0\fR as regular expression. + .IP "\fB\-\-help\fR" 4 + .IX Item "--help" + Print help, then exit. + .IP "\fB\-V\fR" 4 + .IX Item "-V" + .PD 0 + .IP "\fB\-\-version\fR" 4 + .IX Item "--version" + .PD + Print version number, then exit. + .SH "SEE ALSO" + .IX Header "SEE ALSO" + \&\fIjar\fR\|(1), \fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgfdl\fR\|(7) and the Info entry for \fIgcj\fR. + .SH "COPYRIGHT" + .IX Header "COPYRIGHT" + Copyright (C) 2002 Free Software Foundation, Inc. + .PP + Permission is granted to copy, distribute and/or modify this document + under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or + any later version published by the Free Software Foundation; with the + Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover + texts being (a) (see below), and with the Back-Cover Texts being (b) + (see below). A copy of the license is included in the + man page \fIgfdl\fR\|(7). + .PP + (a) The \s-1FSF\s0's Front-Cover Text is: + .PP + .Vb 1 + \& A GNU Manual + .Ve + .PP + (b) The \s-1FSF\s0's Back-Cover Text is: + .PP + .Vb 3 + \& You have freedom to copy and modify this GNU Manual, like GNU + \& software. Copies published by the Free Software Foundation raise + \& funds for GNU development. + .Ve diff -Nrc3pad gcc-3.2.3/fastjar/jar.1 gcc-3.3/fastjar/jar.1 *** gcc-3.2.3/fastjar/jar.1 1970-01-01 00:00:00.000000000 +0000 --- gcc-3.3/fastjar/jar.1 2003-05-14 01:25:20.000000000 +0000 *************** *** 0 **** --- 1,231 ---- + .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 + .\" + .\" Standard preamble: + .\" ======================================================================== + .de Sh \" Subsection heading + .br + .if t .Sp + .ne 5 + .PP + \fB\\$1\fR + .PP + .. + .de Sp \" Vertical space (when we can't use .PP) + .if t .sp .5v + .if n .sp + .. + .de Vb \" Begin verbatim text + .ft CW + .nf + .ne \\$1 + .. + .de Ve \" End verbatim text + .ft R + .fi + .. + .\" Set up some character translations and predefined strings. \*(-- will + .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left + .\" double quote, and \*(R" will give a right double quote. | will give a + .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to + .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' + .\" expand to `' in nroff, nothing in troff, for use with C<>. + .tr \(*W-|\(bv\*(Tr + .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' + .ie n \{\ + . ds -- \(*W- + . ds PI pi + . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch + . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch + . ds L" "" + . ds R" "" + . ds C` "" + . ds C' "" + 'br\} + .el\{\ + . ds -- \|\(em\| + . ds PI \(*p + . ds L" `` + . ds R" '' + 'br\} + .\" + .\" If the F register is turned on, we'll generate index entries on stderr for + .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index + .\" entries marked with X<> in POD. Of course, you'll have to process the + .\" output yourself in some meaningful fashion. + .if \nF \{\ + . de IX + . tm Index:\\$1\t\\n%\t"\\$2" + .. + . nr % 0 + . rr F + .\} + .\" + .\" For nroff, turn off justification. Always turn off hyphenation; it makes + .\" way too many mistakes in technical documents. + .hy 0 + .if n .na + .\" + .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). + .\" Fear. Run. Save yourself. No user-serviceable parts. + . \" fudge factors for nroff and troff + .if n \{\ + . ds #H 0 + . ds #V .8m + . ds #F .3m + . ds #[ \f1 + . ds #] \fP + .\} + .if t \{\ + . ds #H ((1u-(\\\\n(.fu%2u))*.13m) + . ds #V .6m + . ds #F 0 + . ds #[ \& + . ds #] \& + .\} + . \" simple accents for nroff and troff + .if n \{\ + . ds ' \& + . ds ` \& + . ds ^ \& + . ds , \& + . ds ~ ~ + . ds / + .\} + .if t \{\ + . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" + . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' + . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' + . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' + . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' + . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' + .\} + . \" troff and (daisy-wheel) nroff accents + .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' + .ds 8 \h'\*(#H'\(*b\h'-\*(#H' + .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] + .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' + .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' + .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] + .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] + .ds ae a\h'-(\w'a'u*4/10)'e + .ds Ae A\h'-(\w'A'u*4/10)'E + . \" corrections for vroff + .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' + .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' + . \" for low resolution devices (crt and lpr) + .if \n(.H>23 .if \n(.V>19 \ + \{\ + . ds : e + . ds 8 ss + . ds o a + . ds d- d\h'-1'\(ga + . ds D- D\h'-1'\(hy + . ds th \o'bp' + . ds Th \o'LP' + . ds ae ae + . ds Ae AE + .\} + .rm #[ #] #H #V #F C + .\" ======================================================================== + .\" + .IX Title "FASTJAR 1" + .TH FASTJAR 1 "2003-05-14" "gcc-3.3" "GNU" + .SH "NAME" + jar \- archive tool for Java archives + .SH "SYNOPSIS" + .IX Header "SYNOPSIS" + jar \fB\-ctxu\fR [\fB\s-1OPTIONS\s0\fR] [\fIjar-file\fR] [\fImanifest-file\fR] [\fB\-C\fR \fIdir\fR] \fIfiles\fR... + .SH "DESCRIPTION" + .IX Header "DESCRIPTION" + \&\f(CW\*(C`fastjar\*(C'\fR is an implementation of Sun's jar utility that comes with + the \s-1JDK\s0, written entirely in C, and runs in a fraction of the time while + being feature compatible. + .PP + If any file is a directory then it is processed recursively. The + manifest file name and the archive file name needs to be specified in + the same order the \fB\-m\fR and \fB\-f\fR flags are specified. + .SH "OPTIONS" + .IX Header "OPTIONS" + Exactly one of the following actions must be specified: + .IP "\fB\-c\fR" 4 + .IX Item "-c" + Create new archive. + .IP "\fB\-t\fR" 4 + .IX Item "-t" + List table of contents for archive. + .IP "\fB\-x\fR" 4 + .IX Item "-x" + Extract named (or all) files from archive. + .IP "\fB\-u\fR" 4 + .IX Item "-u" + Update existing archive. This option is disabled due to bugs (currently + fails with exit status 1 and does nothing). + .PP + The following parameters are optional: + .IP "\fB\-@\fR" 4 + .IX Item "-@" + Read the names of the files to add to the archive from stdin. This + option is supported only in combination with \fB\-c\fR or \fB\-u\fR. + Non standard option added in the \s-1GCC\s0 version. + .IP "\fB\-C\fR \fIdirectory\fR" 4 + .IX Item "-C directory" + Change to the \fIdirectory\fR and include the following file. + .IP "\fB\-E\fR" 4 + .IX Item "-E" + Prevent fastjar from reading the content of a directory when specifying + one (and instead relying on the provided list of files to populate the + archive with regard to the directory entry). Non standard option added + in the \s-1GCC\s0 version. + .IP "\fB\-M\fR" 4 + .IX Item "-M" + Do not create a manifest file for the entries. + .IP "\fB\-0\fR" 4 + .IX Item "-0" + Store only; use no \s-1ZIP\s0 compression. + .IP "\fB\-V\fR" 4 + .IX Item "-V" + .PD 0 + .IP "\fB\-\-version\fR" 4 + .IX Item "--version" + .PD + Display version information. + .IP "\fB\-f\fR \fIarchive\fR" 4 + .IX Item "-f archive" + Specify archive file name. + .IP "\fB\-m\fR \fImanifest\fR" 4 + .IX Item "-m manifest" + Include manifest information from specified \fImanifest\fR file. + .IP "\fB\-v\fR" 4 + .IX Item "-v" + Generate verbose output on standard output. + .PP + All remaining options are considered to be names of files. + .SH "SEE ALSO" + .IX Header "SEE ALSO" + \&\fIgcj\fR\|(1), \fIgij\fR\|(1), \fIgrepjar\fR\|(1) + and the Info entry for \fIgcj\fR. + .SH "COPYRIGHT" + .IX Header "COPYRIGHT" + Copyright (C) 2002 Free Software Foundation, Inc. + .PP + Permission is granted to copy, distribute and/or modify this document + under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or + any later version published by the Free Software Foundation; with the + Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover + texts being (a) (see below), and with the Back-Cover Texts being (b) + (see below). A copy of the license is included in the + man page \fIgfdl\fR\|(7). + .PP + (a) The \s-1FSF\s0's Front-Cover Text is: + .PP + .Vb 1 + \& A GNU Manual + .Ve + .PP + (b) The \s-1FSF\s0's Back-Cover Text is: + .PP + .Vb 3 + \& You have freedom to copy and modify this GNU Manual, like GNU + \& software. Copies published by the Free Software Foundation raise + \& funds for GNU development. + .Ve diff -Nrc3pad gcc-3.2.3/fastjar/jargrep.c gcc-3.3/fastjar/jargrep.c *** gcc-3.2.3/fastjar/jargrep.c 2002-01-09 23:22:20.000000000 +0000 --- gcc-3.3/fastjar/jargrep.c 2003-01-28 22:25:27.000000000 +0000 *************** *** 1,6 **** /* jargrep.c - main functions for jargrep utility ! Copyright (C) 2002 Free Software Foundation Copyright (C) 1999, 2000 Bryan Burns Copyright (C) 2000 Cory Hollingsworth --- 1,6 ---- /* jargrep.c - main functions for jargrep utility ! Copyright (C) 2002, 2003 Free Software Foundation Copyright (C) 1999, 2000 Bryan Burns Copyright (C) 2000 Cory Hollingsworth *************** will test some other platforms later. *** 105,111 **** #include "config.h" #include #include - #include #include #include #include --- 105,110 ---- *************** will test some other platforms later. *** 115,120 **** --- 114,122 ---- #ifdef HAVE_STDLIB_H #include #endif + + #include "xregex.h" + #include "jargrep.h" #include "jartool.h" #include "pushback.h" *************** will test some other platforms later. *** 126,132 **** void version(void); void help(const char *name); ! #define Usage "Usage: %s [-bcinsw] <-e PATTERN | PATTERN> FILE ...\n" /* Function name: opt_valid --- 128,134 ---- void version(void); void help(const char *name); ! #define Usage "Usage: %s [-bcinsVw] [--version|--help] <-e PATTERN | PATTERN> FILE ...\n" /* Function name: opt_valid *************** Search files in a jar file for a pattern *** 769,775 **** -n print line number of each match\n\ -s suppress error messages\n\ -w force PATTERN to match only whole words\n\ ! -e PATTERN use PATTERN as regular exprssion\n\ "); exit (0); --- 771,779 ---- -n print line number of each match\n\ -s suppress error messages\n\ -w force PATTERN to match only whole words\n\ ! -e PATTERN use PATTERN as regular expression\n\ ! -V|--version print version number and exit\n\ ! --help print help\n\ "); exit (0); diff -Nrc3pad gcc-3.2.3/fastjar/jartool.c gcc-3.3/fastjar/jartool.c *** gcc-3.2.3/fastjar/jartool.c 2002-03-18 11:08:59.000000000 +0000 --- gcc-3.3/fastjar/jartool.c 2003-01-31 22:48:13.000000000 +0000 *************** *** 239,244 **** --- 239,250 ---- #include "pushback.h" #include "compress.h" + /* Some systems have mkdir that takes a single argument. */ + #ifdef MKDIR_TAKES_ONE_ARG + # define mkdir(a,b) mkdir(a) + #endif + + #ifdef WORDS_BIGENDIAN #define L2BI(l) ((l & 0xff000000) >> 24) | \ *************** int main(int argc, char **argv){ *** 433,440 **** /* create the jarfile */ if(action == ACTION_CREATE){ if(jarfile){ ! jarfd = open(jarfile, O_CREAT | O_BINARY | O_WRONLY | O_TRUNC, ! S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if(jarfd < 0){ fprintf(stderr, "Error opening %s for writing!\n", jarfile); --- 439,445 ---- /* create the jarfile */ if(action == ACTION_CREATE){ if(jarfile){ ! jarfd = open(jarfile, O_CREAT | O_BINARY | O_WRONLY | O_TRUNC, 0666); if(jarfd < 0){ fprintf(stderr, "Error opening %s for writing!\n", jarfile); *************** int add_to_jar(int fd, const char *new_d *** 838,844 **** } } ! if(!strcmp(file, jarfile)){ if(verbose) printf("skipping: %s\n", file); return 0; /* we don't want to add ourselves.. */ --- 843,849 ---- } } ! if(jarfile && !strcmp(file, jarfile)){ if(verbose) printf("skipping: %s\n", file); return 0; /* we don't want to add ourselves.. */ *************** int add_to_jar(int fd, const char *new_d *** 919,925 **** while(!use_explicit_list_only && (de = readdir(dir)) != NULL){ if(de->d_name[0] == '.') continue; ! if(!strcmp(de->d_name, jarfile)){ /* we don't want to add ourselves. Believe me */ if(verbose) printf("skipping: %s\n", de->d_name); continue; --- 924,931 ---- while(!use_explicit_list_only && (de = readdir(dir)) != NULL){ if(de->d_name[0] == '.') continue; ! if(jarfile && !strcmp(de->d_name, jarfile)){ ! /* we don't want to add ourselves. Believe me */ if(verbose) printf("skipping: %s\n", de->d_name); continue; *************** int extract_jar(int fd, char **files, in *** 1449,1455 **** } if(f_fd != -1 && handle){ ! f_fd = creat((const char *)filename, 00644); if(f_fd < 0){ fprintf(stderr, "Error extracting JAR archive!\n"); --- 1455,1462 ---- } if(f_fd != -1 && handle){ ! f_fd = open((const char *)filename, ! O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0644); if(f_fd < 0){ fprintf(stderr, "Error extracting JAR archive!\n"); *************** int extract_jar(int fd, char **files, in *** 1464,1472 **** } if(method == 8 || flags & 0x0008){ - if(seekable) - lseek(fd, eflen, SEEK_CUR); - else consume(&pbf, eflen); inflate_file(&pbf, f_fd, &ze); --- 1471,1476 ---- *************** int extract_jar(int fd, char **files, in *** 1501,1509 **** #endif } - if(seekable) - lseek(fd, eflen, SEEK_CUR); - else consume(&pbf, eflen); } --- 1505,1510 ---- *************** int list_jar(int fd, char **files, int f *** 1564,1570 **** int i, j; time_t tdate; struct tm *s_tm; ! char ascii_date[30]; zipentry ze; #ifdef DEBUG --- 1565,1571 ---- int i, j; time_t tdate; struct tm *s_tm; ! char ascii_date[31]; zipentry ze; #ifdef DEBUG *************** int list_jar(int fd, char **files, int f *** 1655,1663 **** tdate = dos2unixtime(mdate); s_tm = localtime(&tdate); strftime(ascii_date, 30, "%a %b %d %H:%M:%S %Z %Y", s_tm); } ! if(filename_len < fnlen){ if(filename != NULL) free(filename); --- 1656,1665 ---- tdate = dos2unixtime(mdate); s_tm = localtime(&tdate); strftime(ascii_date, 30, "%a %b %d %H:%M:%S %Z %Y", s_tm); + ascii_date[30] = '\0'; } ! if(filename_len < fnlen + 1){ if(filename != NULL) free(filename); *************** int list_jar(int fd, char **files, int f *** 1774,1782 **** tdate = dos2unixtime(mdate); s_tm = localtime(&tdate); strftime(ascii_date, 30, "%a %b %d %H:%M:%S %Z %Y", s_tm); } ! if(filename_len < fnlen){ if(filename != NULL) free(filename); --- 1776,1785 ---- tdate = dos2unixtime(mdate); s_tm = localtime(&tdate); strftime(ascii_date, 30, "%a %b %d %H:%M:%S %Z %Y", s_tm); + ascii_date[30] = '\0'; } ! if(filename_len < fnlen + 1){ if(filename != NULL) free(filename); *************** int consume(pb_file *pbf, int amt){ *** 1847,1852 **** --- 1850,1863 ---- printf("Consuming %d bytes\n", amt); #endif + if (seekable){ + if (amt <= (int)pbf->buff_amt) + pb_read(pbf, buff, amt); + else { + lseek(pbf->fd, amt - pbf->buff_amt, SEEK_CUR); + pb_read(pbf, buff, pbf->buff_amt); /* clear pbf */ + } + } else while(tc < amt){ rdamt = pb_read(pbf, buff, ((amt - tc) < RDSZ ? (amt - tc) : RDSZ)); #ifdef DEBUG *************** int consume(pb_file *pbf, int amt){ *** 1856,1862 **** } #ifdef DEBUG ! printf("%d bytes consumed\n", tc); #endif return 0; --- 1867,1873 ---- } #ifdef DEBUG ! printf("%d bytes consumed\n", amt); #endif return 0; diff -Nrc3pad gcc-3.2.3/fastjar/Makefile.am gcc-3.3/fastjar/Makefile.am *** gcc-3.2.3/fastjar/Makefile.am 2002-01-13 18:05:25.000000000 +0000 --- gcc-3.3/fastjar/Makefile.am 2002-12-31 01:17:12.000000000 +0000 *************** grepjar_LDADD = $(ZLIBS) $(LIBIBERTY) *** 57,59 **** --- 57,98 ---- grepjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY) AM_CFLAGS = @fastjar_warn_cflags@ + + TEXINFO_TEX = ../gcc/doc/include/texinfo.tex + info_TEXINFOS = fastjar.texi + fastjar_TEXINFOS = \ + ../gcc/doc/include/gcc-common.texi \ + ../gcc/doc/include/fdl.texi \ + ../gcc/doc/include/gpl.texi + man_MANS = jar.1 grepjar.1 + EXTRA_DIST = $(man_MANS) + + ## This is a hack. We can't set AM_MAKEINFOFLAGS, since that isn't + ## available in 1.4. Nor can we override or append to MAKEINFO or + ## MAKEINFOFLAGS, since these are overridden by the top-level + ## Makefile. So, we just duplicate the rules. FIXME: remove this + ## when we upgrade automake. Note that we don't include $(srcdir) in + ## my_makei_flags; makeinfo is run in srcdir. + my_makei_flags += -I ../gcc/doc/include + fastjar.info: fastjar.texi $(fastjar_TEXINFOS) + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) $(my_makei_flags) `echo $< | sed 's,.*/,,'` + + + TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl + POD2MAN = pod2man --center="GNU" --release="gcc-@gcc_version@" + + $(srcdir)/jar.1: $(srcdir)/fastjar.texi + -$(TEXI2POD) -D jar < $(srcdir)/fastjar.texi > fastjar.pod + -($(POD2MAN) --section=1 fastjar.pod > jar.1.T$$$$ && \ + mv -f jar.1.T$$$$ $(srcdir)/jar.1) || \ + (rm -f jar.1.T$$$$ && exit 1) + -rm -f fastjar.pod + + $(srcdir)/grepjar.1: $(srcdir)/fastjar.texi + -$(TEXI2POD) -D grepjar < $(srcdir)/fastjar.texi > grepjar.pod + -($(POD2MAN) --section=1 grepjar.pod > grepjar.1.T$$$$ && \ + mv -f grepjar.1.T$$$$ $(srcdir)/grepjar.1) || \ + (rm -f grepjar.1.T$$$$ && exit 1) + -rm -f grepjar.pod diff -Nrc3pad gcc-3.2.3/fastjar/Makefile.in gcc-3.3/fastjar/Makefile.in *** gcc-3.2.3/fastjar/Makefile.in 2002-01-13 18:05:25.000000000 +0000 --- gcc-3.3/fastjar/Makefile.in 2003-05-14 00:18:14.000000000 +0000 *************** ZDEPS = @ZDEPS@ *** 73,78 **** --- 73,79 ---- ZINCS = @ZINCS@ ZLIBS = @ZLIBS@ fastjar_warn_cflags = @fastjar_warn_cflags@ + gcc_version = @gcc_version@ AUTOMAKE_OPTIONS = no-dependencies *************** grepjar_LDADD = $(ZLIBS) $(LIBIBERTY) *** 133,138 **** --- 134,154 ---- grepjar_DEPENDENCIES = $(ZDEPS) $(LIBIBERTY) AM_CFLAGS = @fastjar_warn_cflags@ + + TEXINFO_TEX = ../gcc/doc/include/texinfo.tex + info_TEXINFOS = fastjar.texi + fastjar_TEXINFOS = \ + ../gcc/doc/include/gcc-common.texi \ + ../gcc/doc/include/fdl.texi \ + ../gcc/doc/include/gpl.texi + + man_MANS = jar.1 grepjar.1 + EXTRA_DIST = $(man_MANS) + + my_makei_flags = -I ../gcc/doc/include + + TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl + POD2MAN = pod2man --center="GNU" --release="gcc-@gcc_version@" ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h *************** CFLAGS = @CFLAGS@ *** 153,173 **** COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ ! DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \ ! Makefile.am Makefile.in NEWS aclocal.m4 config.h.in configure \ ! configure.in install-defs.sh.in install-sh missing mkinstalldirs DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) ! TAR = tar GZIP_ENV = --best SOURCES = $(jar_SOURCES) $(grepjar_SOURCES) OBJECTS = $(jar_OBJECTS) $(grepjar_OBJECTS) all: all-redirect .SUFFIXES: ! .SUFFIXES: .S .c .o .s $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile --- 169,198 ---- COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ ! TEXI2DVI = texi2dvi ! INFO_DEPS = fastjar.info ! DVIS = fastjar.dvi ! TEXINFOS = fastjar.texi ! man1dir = $(mandir)/man1 ! MANS = $(man_MANS) ! ! NROFF = nroff ! DIST_COMMON = README $(fastjar_TEXINFOS) ./stamp-h.in AUTHORS COPYING \ ! ChangeLog INSTALL Makefile.am Makefile.in NEWS acinclude.m4 aclocal.m4 \ ! config.h.in configure configure.in install-defs.sh.in install-sh \ ! missing mkinstalldirs DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) ! TAR = gtar GZIP_ENV = --best SOURCES = $(jar_SOURCES) $(grepjar_SOURCES) OBJECTS = $(jar_OBJECTS) $(grepjar_OBJECTS) all: all-redirect .SUFFIXES: ! .SUFFIXES: .S .c .dvi .info .o .ps .s .texi .texinfo .txi $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile *************** Makefile: $(srcdir)/Makefile.in $(top_b *** 175,181 **** cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status ! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) --- 200,206 ---- cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status ! $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in acinclude.m4 cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) *************** grepjar$(EXEEXT): $(grepjar_OBJECTS) $(g *** 265,270 **** --- 290,451 ---- @rm -f grepjar$(EXEEXT) $(LINK) $(grepjar_LDFLAGS) $(grepjar_OBJECTS) $(grepjar_LDADD) $(LIBS) + fastjar.info: fastjar.texi $(fastjar_TEXINFOS) + fastjar.dvi: fastjar.texi $(fastjar_TEXINFOS) + + + DVIPS = dvips + + .texi.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + + .texi.dvi: + TEXINPUTS=$(srcdir)/../gcc/doc/include:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + + .texi: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + + .texinfo.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + + .texinfo: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + + .texinfo.dvi: + TEXINPUTS=$(srcdir)/../gcc/doc/include:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + + .txi.info: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + + .txi.dvi: + TEXINPUTS=$(srcdir)/../gcc/doc/include:$$TEXINPUTS \ + MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $< + + .txi: + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) `echo $< | sed 's,.*/,,'` + .dvi.ps: + $(DVIPS) $< -o $@ + + install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(infodir) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + d=$(srcdir); \ + for ifile in `cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \ + if test -f $$d/$$ifile; then \ + echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \ + $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \ + else : ; fi; \ + done; \ + done + @$(POST_INSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\ + install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\ + done; \ + else : ; fi + + uninstall-info: + $(PRE_UNINSTALL) + @if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \ + ii=yes; \ + else ii=; fi; \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + test -z "$ii" \ + || install-info --info-dir=$(DESTDIR)$(infodir) --remove $$file; \ + done + @$(NORMAL_UNINSTALL) + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + (cd $(DESTDIR)$(infodir) && rm -f $$file $$file-[0-9] $$file-[0-9][0-9]); \ + done + + dist-info: $(INFO_DEPS) + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + d=$(srcdir); \ + for file in `cd $$d && eval echo $$base*`; do \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file; \ + done; \ + done + + mostlyclean-aminfo: + -rm -f fastjar.aux fastjar.cp fastjar.cps fastjar.dvi fastjar.fn \ + fastjar.fns fastjar.ky fastjar.kys fastjar.ps fastjar.log \ + fastjar.pg fastjar.toc fastjar.tp fastjar.tps fastjar.vr \ + fastjar.vrs fastjar.op fastjar.tr fastjar.cv fastjar.cn + + clean-aminfo: + + distclean-aminfo: + + maintainer-clean-aminfo: + cd $(srcdir) && for i in $(INFO_DEPS); do \ + rm -f $$i; \ + if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ + rm -f $$i-[0-9]*; \ + fi; \ + done + + install-man1: + $(mkinstalldirs) $(DESTDIR)$(man1dir) + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ + $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ + done + + uninstall-man1: + @list='$(man1_MANS)'; \ + l2='$(man_MANS)'; for i in $$l2; do \ + case "$$i" in \ + *.1*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ + rm -f $(DESTDIR)$(man1dir)/$$inst; \ + done + install-man: $(MANS) + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-man1 + uninstall-man: + @$(NORMAL_UNINSTALL) + $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 + tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) *************** distdir: $(DISTFILES) *** 335,350 **** @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ ! cp -pr $$/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done ! info-am: info: info-am ! dvi-am: dvi: dvi-am check-am: all-am check: check-am --- 516,532 ---- @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ ! cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done ! $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-info ! info-am: $(INFO_DEPS) info: info-am ! dvi-am: $(DVIS) dvi: dvi-am check-am: all-am check: check-am *************** all-recursive-am: config.h *** 356,375 **** install-exec-am: install-binPROGRAMS install-exec: install-exec-am ! install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am ! uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-am ! all-am: Makefile $(PROGRAMS) config.h all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: ! $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: --- 538,558 ---- install-exec-am: install-binPROGRAMS install-exec: install-exec-am ! install-data-am: install-info-am install-man install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am ! uninstall-am: uninstall-binPROGRAMS uninstall-info uninstall-man uninstall: uninstall-am ! all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(MANS) config.h all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: ! $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(infodir) \ ! $(DESTDIR)$(mandir)/man1 mostlyclean-generic: *************** distclean-generic: *** 382,406 **** maintainer-clean-generic: mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \ ! mostlyclean-compile mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am ! clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-tags \ ! clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \ ! distclean-tags distclean-generic clean-am distclean: distclean-am -rm -f config.status maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ ! maintainer-clean-compile maintainer-clean-tags \ ! maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." --- 565,591 ---- maintainer-clean-generic: mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \ ! mostlyclean-compile mostlyclean-aminfo mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am ! clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-aminfo \ ! clean-tags clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \ ! distclean-aminfo distclean-tags distclean-generic \ ! clean-am distclean: distclean-am -rm -f config.status maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ ! maintainer-clean-compile maintainer-clean-aminfo \ ! maintainer-clean-tags maintainer-clean-generic \ ! distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." *************** maintainer-clean: maintainer-clean-am *** 411,424 **** mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ ! maintainer-clean-compile tags mostlyclean-tags distclean-tags \ ! clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \ ! check-am installcheck-am installcheck all-recursive-am install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. --- 596,630 ---- mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ ! maintainer-clean-compile install-info-am uninstall-info \ ! mostlyclean-aminfo distclean-aminfo clean-aminfo \ ! maintainer-clean-aminfo install-man1 uninstall-man1 install-man \ ! uninstall-man tags mostlyclean-tags distclean-tags clean-tags \ ! maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \ ! installcheck-am installcheck all-recursive-am install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean + fastjar.info: fastjar.texi $(fastjar_TEXINFOS) + @cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9] + cd $(srcdir) \ + && $(MAKEINFO) $(my_makei_flags) `echo $< | sed 's,.*/,,'` + + $(srcdir)/jar.1: $(srcdir)/fastjar.texi + -$(TEXI2POD) -D jar < $(srcdir)/fastjar.texi > fastjar.pod + -($(POD2MAN) --section=1 fastjar.pod > jar.1.T$$$$ && \ + mv -f jar.1.T$$$$ $(srcdir)/jar.1) || \ + (rm -f jar.1.T$$$$ && exit 1) + -rm -f fastjar.pod + + $(srcdir)/grepjar.1: $(srcdir)/fastjar.texi + -$(TEXI2POD) -D grepjar < $(srcdir)/fastjar.texi > grepjar.pod + -($(POD2MAN) --section=1 grepjar.pod > grepjar.1.T$$$$ && \ + mv -f grepjar.1.T$$$$ $(srcdir)/grepjar.1) || \ + (rm -f grepjar.1.T$$$$ && exit 1) + -rm -f grepjar.pod # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nrc3pad gcc-3.2.3/gcc/java/boehm.c gcc-3.3/gcc/java/boehm.c *** gcc-3.2.3/gcc/java/boehm.c 2001-12-22 00:52:30.000000000 +0000 --- gcc-3.3/gcc/java/boehm.c 2002-03-29 21:46:26.000000000 +0000 *************** get_boehm_type_descriptor (tree type) *** 230,235 **** value = build_int_2 (2, 0); } ! TREE_TYPE (value) = type_for_mode (ptr_mode, 1); return value; } --- 230,235 ---- value = build_int_2 (2, 0); } ! TREE_TYPE (value) = java_type_for_mode (ptr_mode, 1); return value; } diff -Nrc3pad gcc-3.2.3/gcc/java/buffer.c gcc-3.3/gcc/java/buffer.c *** gcc-3.2.3/gcc/java/buffer.c 2001-04-04 00:46:27.000000000 +0000 --- gcc-3.3/gcc/java/buffer.c 2002-11-18 15:46:31.000000000 +0000 *************** buffer_grow (bufp, size) *** 37,50 **** { if (size < 120) size = 120; ! bufp->data = (unsigned char*) xmalloc (size); bufp->ptr = bufp->data; } else { int index = bufp->ptr - bufp->data; size += 2 * (bufp->limit - bufp->data); ! bufp->data = (unsigned char *) xrealloc (bufp->data, size); bufp->ptr = bufp->data + index; } bufp->limit = bufp->data + size; --- 37,50 ---- { if (size < 120) size = 120; ! bufp->data = xmalloc (size); bufp->ptr = bufp->data; } else { int index = bufp->ptr - bufp->data; size += 2 * (bufp->limit - bufp->data); ! bufp->data = xrealloc (bufp->data, size); bufp->ptr = bufp->data + index; } bufp->limit = bufp->data + size; diff -Nrc3pad gcc-3.2.3/gcc/java/builtins.c gcc-3.3/gcc/java/builtins.c *** gcc-3.2.3/gcc/java/builtins.c 2002-03-18 19:33:49.000000000 +0000 --- gcc-3.3/gcc/java/builtins.c 2003-03-04 14:37:22.000000000 +0000 *************** The Free Software Foundation is independ *** 30,36 **** #include "tree.h" #include "ggc.h" #include "flags.h" ! #include "java-tree.h" enum builtin_type --- 30,36 ---- #include "tree.h" #include "ggc.h" #include "flags.h" ! #include "langhooks.h" #include "java-tree.h" enum builtin_type *************** enum builtin_type *** 44,49 **** --- 44,50 ---- #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME, #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME, #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME, + #define DEF_FUNCTION_TYPE_VAR_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME, #define DEF_POINTER_TYPE(NAME, TYPE) NAME, #include "builtin-types.def" #undef DEF_PRIMITIVE_TYPE *************** enum builtin_type *** 55,60 **** --- 56,62 ---- #undef DEF_FUNCTION_TYPE_VAR_0 #undef DEF_FUNCTION_TYPE_VAR_1 #undef DEF_FUNCTION_TYPE_VAR_2 + #undef DEF_FUNCTION_TYPE_VAR_3 #undef DEF_POINTER_TYPE BT_LAST }; *************** typedef tree builtin_creator_function PA *** 83,103 **** /* Hold a char*, before initialization, or a tree, after initialization. */ ! union string_or_tree { ! const char *s; ! tree t; }; /* Used to hold a single builtin record. */ ! struct builtin_record { ! union string_or_tree class_name; ! union string_or_tree method_name; ! builtin_creator_function *creator; }; ! static struct builtin_record java_builtins[] = { { { "java.lang.Math" }, { "min" }, min_builtin }, { { "java.lang.Math" }, { "max" }, max_builtin }, --- 85,105 ---- /* Hold a char*, before initialization, or a tree, after initialization. */ ! union string_or_tree GTY(()) { ! const char * GTY ((tag ("0"))) s; ! tree GTY ((tag ("1"))) t; }; /* Used to hold a single builtin record. */ ! struct builtin_record GTY(()) { ! union string_or_tree GTY ((desc ("1"))) class_name; ! union string_or_tree GTY ((desc ("1"))) method_name; ! builtin_creator_function * GTY((skip (""))) creator; }; ! static GTY(()) struct builtin_record java_builtins[] = { { { "java.lang.Math" }, { "min" }, min_builtin }, { { "java.lang.Math" }, { "max" }, max_builtin }, *************** initialize_builtins () *** 273,291 **** java_builtins[i].class_name.t = klass_id; java_builtins[i].method_name.t = m; - ggc_add_tree_root (&java_builtins[i].class_name.t, 1); - ggc_add_tree_root (&java_builtins[i].method_name.t, 1); } void_list_node = end_params_node; /* Work around C-specific junk in builtin-types.def. */ #define intmax_type_node NULL_TREE - #define traditional_ptr_type_node NULL_TREE - #define traditional_cptr_type_node NULL_TREE #define c_size_type_node NULL_TREE #define const_string_type_node NULL_TREE - #define traditional_len_type_node NULL_TREE #define va_list_ref_type_node NULL_TREE #define va_list_arg_type_node NULL_TREE #define flag_isoc99 0 --- 275,288 ---- *************** initialize_builtins () *** 307,325 **** #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \ builtin_types[(int) ENUM] \ = define_builtin_type (RETURN, ARG1, ARG2, ARG3, ARG4); ! #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \ builtin_types[(int) ENUM] = NULL_TREE; ! #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \ builtin_types[(int) ENUM] = NULL_TREE; #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \ builtin_types[(int) ENUM] = NULL_TREE; #define DEF_POINTER_TYPE(ENUM, TYPE) \ builtin_types[(int) ENUM] = NULL_TREE; #include "builtin-types.def" #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, \ ! FALLBACK_P, NONANSI_P) \ define_builtin (ENUM, NAME, CLASS, builtin_types[TYPE], FALLBACK_P); #include "builtins.def" } --- 304,324 ---- #define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \ builtin_types[(int) ENUM] \ = define_builtin_type (RETURN, ARG1, ARG2, ARG3, ARG4); ! #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \ builtin_types[(int) ENUM] = NULL_TREE; ! #define DEF_FUNCTION_TYPE_VAR_1(ENUM, RETURN, ARG1) \ builtin_types[(int) ENUM] = NULL_TREE; #define DEF_FUNCTION_TYPE_VAR_2(ENUM, RETURN, ARG1, ARG2) \ builtin_types[(int) ENUM] = NULL_TREE; + #define DEF_FUNCTION_TYPE_VAR_3(ENUM, RETURN, ARG1, ARG2, ARG3) \ + builtin_types[(int) ENUM] = NULL_TREE; #define DEF_POINTER_TYPE(ENUM, TYPE) \ builtin_types[(int) ENUM] = NULL_TREE; #include "builtin-types.def" #define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, \ ! FALLBACK_P, NONANSI_P, ATTRS) \ define_builtin (ENUM, NAME, CLASS, builtin_types[TYPE], FALLBACK_P); #include "builtins.def" } *************** check_for_builtin (method, call) *** 351,353 **** --- 350,354 ---- } return call; } + + #include "gt-java-builtins.h" diff -Nrc3pad gcc-3.2.3/gcc/java/ChangeLog gcc-3.3/gcc/java/ChangeLog *** gcc-3.2.3/gcc/java/ChangeLog 2003-04-22 06:15:07.000000000 +0000 --- gcc-3.3/gcc/java/ChangeLog 2003-05-14 00:10:15.000000000 +0000 *************** *** 1,81 **** ! 2003-04-22 Release Manager ! * GCC 3.2.3 Released. ! 2003-03-17 Kaveh R. Ghazi ! Backport: ! 2002-12-05 Ranjit Mathew ! Andrew Haley ! * parse.y (source_end_java_method): Remove custom encoding of line ! numbers for a function decl before passing it to the back end. ! 2003-02-05 Gabriel Dos Reis ! * gcj.texi: Bump version. ! 2003-02-05 Release Manager ! * GCC 3.2.2 Released. ! 2003-01-28 Christian Cornelssen * Make-lang.in (java.install-common, java.uninstall) (java.install-info, java.install-man): Prepend $(DESTDIR) to destination paths in all (un)installation commands. ! 2002-11-19 Release Manager ! * GCC 3.2.1 Released. ! 2002-11-19 Release Manager ! * GCC 3.2.1 Released. ! 2002-11-18 Release Manager ! * GCC 3.2.1 Released. ! 2002-10-21 Matthias Klose ! * Backport, without whitespace change: ! 2002-06-10 Akim Demaille ! * parse.y (interface_type_list, class_member_declaration) ! (unary_expression_not_plus_minus): Remove duplicate %type. ! Whitespace changes. ! 2002-06-13 Akim Demaille ! * parse.y (class_declaration, interface_declaration): Make sure ! all their rules have an action, in order to avoid meaningless `$$ ! = $1' and their type clashes. ! * parse.y (catch_clause): Terminate with `;'. ! 2002-10-06 Roger Sayle PR optimization/6627 ! * java/lang.c (java_init): If storing the vbit in function pointers, ensure that force_align_functions_log is atleast one to aid compatability with g++ vtables. ! 2002-08-14 Release Manager ! * GCC 3.2 Released. 2002-08-04 Joseph S. Myers ! * gcj.texi (version-gcc): Increase to 3.2. ! 2002-07-25 Release Manager ! * GCC 3.1.1 Released. 2002-06-25 Andreas Schwab * expr.c (JSR): Avoid undefined operation on PC. 2002-06-10 Bryce McKinlay Don't use RTL inlining. Fix for PR java/6820. --- 1,737 ---- ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-05-13 Release Manager ! * GCC 3.3 Released. ! 2003-05-02 Tom Tromey ! PR java/10459: ! * parse.y (finish_for_loop): Do nothing if update expression is a ! EXPR_WFL_NODE wrapping nothing. ! (java_complete_lhs) : Likewise. ! 2003-04-20 Mohan Embar ! * jcf-io.c (find_class): use DIR_SEPARATOR instead of ! '/' when computing java source filename ! ! 2003-04-10 Eric Blake ! ! PR java/10253: ! * parse.y (string_convert_int_cst): Always use at least one digit ! in string conversion. Remove ASCII dependence. ! (merge_string_cste): Fix merging of 3-byte UTF-8 characters. ! ! 2003-03-16 Mohan Embar ! ! * Make-lang.in: added win32-host.c ! * jcf.h: defined macro JCF_OPEN_EXACT_CASE which ! resolves to open() on non-Win32 platforms and ! Win32-specific jcf_open_exact_case() on Win32 ! * jcf-io.c (find_class): use JCF_OPEN_EXACT_CASE ! when trying .java and .class files ! * win32-host.c: added to repository. Defines ! Win32-specific jcf_open_exact_case() ! ! 2003-04-10 Andrew Haley ! ! * jcf-write.c (struct jcf_partial): num_jsrs: new field. ! (maybe_free_localvar): Renamed from localvar_free. ! Add new arg, really. ! (generate_bytecode_insns): Set new variable, jsrs. ! Only free local vars if no jsr insns have been emittted. ! Call maybe_free_localvar, not localvar_free. ! ! 2003-03-23 Zack Weinberg ! ! PR bootstrap/10216 ! * Make-lang.in: Link jcf-dump against $(LDEXP_LIB). ! ! 2003-03-30 Joseph S. Myers ! ! * gcj.texi: Remove @ at start of file. ! ! 2003-03-28 Zack Weinberg ! ! PR bootstrap/10216 ! * javaop.h (jfloat, jdouble): Make them structures mirroring ! the bit fields of IEEE float and double respectively. ! (JFLOAT_FINITE, JFLOAT_QNAN_MASK, JFLOAT_EXP_BIAS, ! JDOUBLE_FINITE, JDOUBLE_QNAN_MASK, JDOUBLE_EXP_BIAS): New. ! (union Word, union DWord): Delete. ! (WORD_TO_FLOAT, WORDS_TO_DOUBLE): Update to match. ! ! * gjavah.c (java_float_finite, java_double_finite, F_NAN_MASK, ! D_NAN_MASK): Delete. ! (jni_print_float, jni_print_double): New. Generate ! hexadecimal floating constants. ! (print_field_info): Use jni_print_float/double. ! ! * jcf-dump.c: Include math.h. Use ldexp/frexp to assemble ! finite floating point numbers for output; special case ! non-finite floats. ! ! 2003-03-12 Andrew Haley ! ! * gjavah.c (is_first_data_member): New global variable. ! (print_c_decl): If it's the first data member, align it as the ! superclass. ! (process_file): Set is_first_data_member. ! ! 2003-03-11 Tom Tromey ! ! * parse.y (resolve_field_access): Initialize class if field is ! found in another static field. ! * expr.c (build_class_init): Don't optimize out initialization of ! implemented interface. ! ! 2003-03-10 Ranjit Mathew ! ! * jcf-io.c (caching_stat): Account for both DIR_SEPARATOR ! and DIR_SEPARATOR_2 for a target. ! Correct minor typos. ! ! * jcf-write.c (make_class_file_name): Take both DIR_SEPARATOR ! and DIR_SEPARATOR_2 for a target into account. ! ! 2003-03-05 Ranjit Mathew ! ! * jcf.h (COMPARE_FILENAMES): New macro similar to "strcmp" to ! compare file name components depending on the case-sensitivity ! or otherwise of the host file system. ! ! * jcf-path.c (add_entry): Use COMPARE_FILENAMES instead of ! "strcmp" to compare file name components. ! Use IS_DIR_SEPARATOR instead of comparing directly against ! DIR_SEPARATOR. ! (jcf_path_extdirs_arg): Use IS_DIR_SEPARATOR instead of ! comparing directly against DIR_SEPARATOR. ! ! 2003-03-04 Roger Sayle ! ! * builtins.c (builtin_type): Handle DEF_FUNCTION_TYPE_VAR_3. ! (initialize_builtins): Handle DEF_FUNCTION_TYPE_VAR_3. ! ! 2003-02-28 Tom Tromey ! ! PR java/9695: ! * class.c (maybe_layout_super_class): Always pass a WFL to ! do_resolve_class. ! * parse.y (do_resolve_class): Updated comment to explain ! parameters. ! ! 2003-02-12 Ranjit Mathew ! ! * decl.c (java_init_decl_processing): Change ! soft_lookupjnimethod_node to reflect the change in ! signature of _Jv_LookupJNIMethod in libjava/jni.cc ! * expr.c (build_jni_stub): Calculate and pass the size ! on the stack of the arguments to a JNI function. Use ! new target macro MODIFY_JNI_METHOD_CALL to allow a ! target to modify the call to a JNI method. ! ! 2003-02-04 Joseph S. Myers ! ! * gcj.texi: Update to GFDL 1.2. ! ! 2003-01-31 Andrew Haley ! ! * parse.y (java_expand_classes): Scan the whole class list looking ! for access methods that haven't yet been expanded. ! ! 2003-01-31 Adrian Bunk ! ! Fix for java/4269: ! ! * jv-scan.c: Use HAVE_LANGINFO_CODESET instead of HAVE_NL_LANGINFO ! to fix bootstrap on sparc-unknown-netbsdelf1.5. ! * jcf-parse.c: Likewise. ! ! 2003-01-31 Mark Wielaard ! ! * gjavah.c (throwable_p): Allocate 1 more byte for string. ! ! 2003-01-30 Tom Tromey ! ! * jcf-parse.c (read_class): Update identifier's class value if it ! changed during parsing. ! ! 2003-01-29 Tom Tromey ! ! * parse.y (patch_assignment): Only transform the rhs of an ! assignment when compiling to native. ! ! 2003-01-28 Tom Tromey ! ! * lex.c (java_lex): Don't include UEOF as part of token. ! (java_read_unicode): Error if \u sequence prematurely terminated. ! ! 2003-01-27 Tom Tromey ! ! * parse.y (java_check_regular_methods): Check for construct after ! checking types in throws clause. ! ! 2003-01-26 Christian Cornelssen * Make-lang.in (java.install-common, java.uninstall) (java.install-info, java.install-man): Prepend $(DESTDIR) to destination paths in all (un)installation commands. + (java.install-common): Rewrite $(LN) command to support + DESTDIR with "ln" as well as with "ln -s". ! 2003-01-24 Kaveh R. Ghazi ! * jcf-io.c (caching_stat): Cast the 3rd arg of scandir to void*. ! * jcf-write.c (generate_bytecode_insns): Avoid signed/unsigned ! warning. ! 2003-01-21 Tom Tromey ! * parse.y (method_header): Native method can't be strictfp. ! No method can be transient or volatile. ! 2003-01-14 Andrew Haley ! * decl.c (java_init_decl_processing): _Jv_NewMultiArray is a ! varargs function -- correct. ! * parse.y (patch_assignment): Copy the rhs of an assignment into a ! temporary if the RHS is a reference. ! 2003-01-05 Kaveh R. Ghazi ! * lang.c (dump_compound_expr): Prototype. ! 2003-01-03 Tom Tromey ! Fix for PR java/8712: ! * expr.c (build_instanceof): Build an NE_EXPR, not a COND_EXPR, ! when simply checking against `null'. ! 2003-01-03 Tom Tromey ! ! * gcj.texi (Standard Properties): Document http.proxyHost and ! http.proxyPort. ! ! 2003-01-03 Tom Tromey ! ! * gcj.texi (GNU Classpath Properties): Document new properties. ! ! 2002-12-30 DJ Delorie ! ! * Make-lang.in: Protect against texi2pod/pod2man failing. ! ! 2002-12-28 Joseph S. Myers ! ! * gcj.texi: Use @copying. ! ! 2002-12-23 Joseph S. Myers ! ! * gcj.texi: Include Cover Texts in man page. ! ! 2002-12-23 Joseph S. Myers ! ! * gcj.texi: Include gcc-common.texi. ! * Make-lang.in ($(srcdir)/java/gcj.info, java/gcj.dvi): Depend on ! $(srcdir)/doc/include/gcc-common.texi. ! ! 2002-12-22 Anthony Green ! ! * gcj.texi (Limitations): Add note about org.xml.sax and ! org.w3c.dom. ! ! 2002-12-20 Tom Tromey ! ! * jcf-write.c (generate_bytecode_insns) [SWITCH_EXPR]: Handle case ! where minimum case value is Integer.MIN_VALUE. ! Fixes PR java/8955. ! ! 2002-12-18 Andrew Haley ! ! * parse.y (patch_invoke): Force evaluation order when `check' is ! set. For PR libgcj/8945. ! ! 2002-12-05 Ranjit Mathew ! Andrew Haley ! ! * parse.y (source_end_java_method): Remove custom encoding of line ! numbers for a function decl before passing it to the back end. ! ! 2002-12-03 Andrew Haley ! ! * class.c (make_class_data): New field, "chain". ! * decl.c (java_init_decl_processing): Likewise. ! ! 2002-12-02 Tom Tromey ! ! For PR java/8740: ! * parse.y (do_resolve_class): Handle qualified name via ! recursion. ! ! 2002-11-27 Kaveh R. Ghazi ! ! * decl.c (java_init_decl_processing): Use `LL' on 64-bit constant. ! ! 2002-11-25 Diego Novillo ! ! * jcf-reader.c: Don't expand JCF_readu4 inside the ! expansion of JCF_SKIP. ! ! 2002-11-22 Tom Tromey ! ! * parse.y (patch_binop): Cast right hand side of shift expression ! to `int'. Fixes PR java/8676. ! ! 2002-11-22 Ranjit Mathew ! Andrew Haley ! ! * gcc/java/jcf-write.c (write_classfile): Remove target ! class file, if it exists, before renaming the temporary ! class file to it. ! ! 2002-11-19 Jason Thorpe ! ! * jvspec.c (lang_specific_spec_functions): New. ! ! 2002-11-18 Tom Tromey ! ! Fix for PR java/7912: ! * expr.c (can_widen_reference_to): Allow cast of array to ! Cloneable or Serializable. ! * java-tree.h (java_lang_cloneable_identifier_node): Declare. ! (java_io_serializable_identifier_node): Likewise. ! * parse.y (java_lang_cloneable, java_io_serializable): Removed. ! (valid_ref_assignconv_cast_p): Use new identifier nodes. ! * lex.c (java_init_lex): Don't initialize java_lang_cloneable and ! java_io_serializable. ! * decl.c (java_init_decl_processing): Initialize ! java_lang_cloneable_identifier_node and ! java_io_serializable_identifier_node. ! (java_lang_cloneable_identifier_node): New global. ! (java_io_serializable_identifier_node): Likewise. ! ! 2002-11-14 Jens-Michael Hoffmann ! ! * buffer.c: Remove unnecessary casts. ! * check-init.c: Likewise. ! * class.c: Likewise. ! * constants.c: Likewise. ! * decl.c: Likewise. ! * except.c: Likewise. ! * gjavah.c: Likewise. ! * jcf-io.c: Likewise. ! * jcf-parse.c: Likewise. ! * jcf-path.c: Likewise. ! * jvspec.c: Likewise. ! * lang.c: Likewise. ! * lex.c: Likewise. ! * verify.c: Likewise. ! ! 2002-11-06 Tom Tromey ! ! * gjavah.c (print_stub_or_jni): Include JNIEXPORT and JNICALL in ! a JNI header. ! ! 2002-11-05 Tom Tromey ! ! Fix for PR java/6388. ! * lex.h (JAVA_INTEGRAL_RANGE_ERROR): Wrap in do...while. ! * java-tree.h (enum java_tree_index): New values ! JTI_DECIMAL_INT_MAX_NODE, JTI_DECIMAL_LONG_MAX_NODE. ! (decimal_int_max, decimal_long_max): New defines. ! * lex.c (yylex): Rewrote range checking. Sign extend literals. ! (error_if_numeric_overflow): Rewrote range checking. ! * decl.c (java_init_decl_processing): Initialize decimal_int_max, ! decimal_long_max. ! ! 2002-11-02 Tom Tromey ! ! * java-tree.h: Move JV_STATE_ERROR before JV_STATE_DONE. ! ! * class.c (make_method_value): Put class name, not signature, into ! `throws' field. For PR java/8415. ! ! 2002-10-24 Tom Tromey ! ! * gcj.texi (Invoking gij): Document --showversion. ! (Standard Properties): java.library.path now set. ! ! 2002-10-23 Tom Tromey ! ! * gjavah.c (decode_signature_piece): In JNI mode, print ! `jobjectArray' when array depth is nonzero. ! Fixes PR java/8296. ! ! 2002-10-15 Andrew Haley ! ! * parse.y (patch_invoke): Call force_evaluation_order on a static ! arg list. ! (resolve_qualified_expression_name): Call force_evaluation_order ! on a arg list that is part of a Qualified Expression Name. ! ! * lang.c (dump_compound_expr): New. ! (java_dump_tree): New. ! ! 2002-10-20 Ranjit Mathew ! ! * gcj.texi: Added item describing the GCJ runtime property ! "gnu.gcj.progname". ! ! 2002-10-15 Richard Henderson ! ! * jcf-parse.c (get_constant): Fix type warning. ! ! 2002-10-15 Andrew Haley ! ! * java-tree.h (java_inlining_merge_static_initializers): Declare. ! (java_inlining_map_static_initializers): Declare. ! ! 2002-10-14 Andrew Haley ! ! * tree-inline.c (remap_block): All local class initialization ! flags go in the outermost scope. ! (expand_call_inline): Call java_inlining_map_static_initializers. ! (expand_call_inline): Call java_inlining_merge_static_initializers. ! * java/lang.c (merge_init_test_initialization): New. ! (java_inlining_merge_static_initializers): New. ! (inline_init_test_initialization): New. ! (java_inlining_map_static_initializers): New. ! ! 2002-10-11 Mark Wielaard ! ! * gcj.texi (Compatibility): Add Limitations and Extensions section. ! ! 2002-10-10 Kaveh R. Ghazi ! ! * class.c (JAVA_TREEHASHHASH_H): Use htab_hash_pointer. ! ! 2002-10-09 Kaveh R. Ghazi ! ! * parse.y (merge_string_cste): Add parentheses around & within |. ! ! 2002-10-08 Tom Tromey ! ! * parse.y (variable_declarator_id): Simplify error path for ! array declarator error. For PR java/8003. ! ! 2002-10-08 Zack Weinberg ! ! * gjavah.c, jcf-dump.c, jv-scan.c: Globally replace GCCBUGURL with ! bug_report_url. ! ! 2002-10-08 Andrew Haley ! ! * parse.y (attach_init_test_initialization_flags): Check for ! error_mark_node. ! ! 2002-10-07 Anthony Green ! ! * parse.y (merge_string_cste): Fix bug in string concatenation. ! ! 2002-10-03 Michael Koch ! ! * gcj.texi (Standard properties): ! Change default of java.awt.toolkit to gnu.awt.gtk.GtkToolkit. ! ! 2002-10-02 Roger Sayle PR optimization/6627 ! * lang.c (java_init): If storing the vbit in function pointers, ensure that force_align_functions_log is atleast one to aid compatability with g++ vtables. ! 2002-10-01 Nathan Sidwell ! * jcf-dump.c (print_constant, case CONSTANT_float): Don't fall ! foul of type-based aliasing. ! ! 2002-09-30 Anthony Green ! ! * gcj.texi (Invoking jv-scan): Fix texinfo. ! ! 2002-09-28 Anthony Green ! ! * gcj.texi (Invoking jv-scan): Add --no-assert documentation. ! (Code Generation): Add -fno-assert documentation. ! * jv-scan.c (flag_assert): New global. ! (options): Add assert option. ! (help): Add --no-assert documentation. ! * parse-scan.y (flag_assert): New global. ! * lang.c (lang_f_options): Add -fassert/-fno-assert support. ! (flag_assert): New global. ! * java-tree.h (flag_assert): New global. ! * lex.c (java_lex): Obey flag_assert. ! * jvspec.c (jvgenmain_spec): Strip -fassert/-fno-assert when ! calling cc1. ! ! 2002-09-26 Andrew Haley ! ! * expr.c (build_java_array_length_access): Check for null pointer. ! * expr.c (expand_java_arrayload): Likewise. ! ! 2002-09-21 Richard Henderson ! ! * jcf-parse.c (get_constant): Decode from IEEE no matter ! what the target format. ! ! 2002-09-20 Kazu Hirata ! ! * ChangeLog: Follow spelling conventions. ! * class.c: Likewise. ! * decl.c: Likewise. ! * expr.c: Likewise. ! * gjavah.c: Likewise. ! * java-tree.h: Likewise. ! * jcf-dump.c: Likewise. ! * jcf-parse.c: Likewise. ! * jvspec.c: Likewise. ! * lang.c: Likewise. ! * mangle.c: Likewise. ! * parse.y: Likewise. ! ! 2002-09-17 Tom Tromey ! ! * lex.c (java_read_unicode_collapsing_terminators): Handle case ! where \r appears at EOF. Fixes PR java/7950. ! ! 2002-09-16 Geoffrey Keating ! ! * java-tree.h (union lang_tree_node): Add chain_next option. ! ! 2002-09-16 Richard Henderson ! ! * jcf-parse.c (get_constant): Runtime check for IEEE format; ! use new real.h interface. ! * jcf-write.c (find_constant_index): Use new real.h interface. ! * lex.c (IS_ZERO): Use REAL_VALUES_EQUAL. ! ! 2002-09-15 Kazu Hirata ! ! * lang.c: Follow spelling conventions. ! ! 2002-09-11 Per Bothner ! ! * parse.y (fold_constant_for_init): If a VAR_DECL, convert numerical ! constant to the type of the field. ! (java_complete_tree): Remove now-redundant code. ! ! * parse.y (fold_constant_for_init): 'null' is not a constant expr. ! ! 2002-09-03 Jesse Rosenstock ! ! For PR java/5794: ! * verify.c (verify_jvm_instructions) [OPCODE_jsr]: Only push the ! return label if a ret instruction for the jsr has been reached. ! ! 2002-09-09 Ranjit Mathew ! ! * parse.y (DIR_SEPARATOR): Don't define. ! (check_class_interface_creation): Use IS_DIR_SEPARATOR. ! ! 2002-08-28 Andrew Haley ! ! * verify.c (verify_jvm_instructions): Allow exception handler ! inside code that is being protected, but generate a warning. ! * except.c (link_handler): Initialize `expanded' in new eh_range. ! (binding_depth, is_class_level, current_pc): Declare extern. ! ! 2002-09-01 Mark Wielaard ! ! * gcj.texi: Add chapter about system properties. ! Fixed some typos. ! ! 2002-08-26 Tom Tromey ! ! * parse.y (try_builtin_assignconv): Allow narrowing primitive ! conversion if RHS_TYPE is byte, short, or char. ! ! 2002-08-22 Tom Tromey ! ! * gcj.texi (Invoking gij): Document -cp and -classpath. ! ! 2002-08-21 Tom Tromey ! ! * Make-lang.in (java/jcf-path.o): Use $(datadir), not ! $(prefix)/share. For PR libgcj/7633. ! ! For PR java/6005 and PR java/7611: ! * lang.c (LANG_HOOKS_CAN_USE_BITFIELDS_P): New define. ! (java_can_use_bit_fields_p): New function. ! ! 2002-08-16 Tom Tromey ! ! * gcj.texi (Class Initialization): Mention class initialization of ! arrays. ! ! 2002-07-30 Andrew Haley ! ! * Make-lang.in (java-tree-inline.o): New. ! (JAVA_OBJS): Add java-tree-inline.o. ! * parse.y (source_end_java_method): Call java_optimize_inline. ! (java_expand_method_bodies): Save method's tree in ! DECL_SAVED_TREE. ! (add_stmt_to_compound): Keep track of the number of statments. ! * lang.c (java_init): Enable flag_inline_trees. ! (java_post_options): If flag_inline_functions is on, enable ! flag_inline_trees instread. ! (decl_constant_value): New. ! (java_tree_inlining_walk_subtrees): New. ! * java-tree.h (DECL_NUM_STMTS): New macro. ! (java_optimize_inline): Declare. ! * expr.c (java_expand_expr): Allow a BLOCK to return a value. ! Handle a LABEL_EXPR. ! * decl.c (build_result_decl): If we already have a DECL_RESULT ! don't make another. ! (dump_function): New. ! (java_optimize_inline): New. ! (dump_function): New. ! ! 2002-08-13 Jesse Rosenstock ! ! For PR java/7483: ! * parse.y (build_assertion): Invert return from ! desiredAssertionStatus. ! ! 2002-08-08 Bryce McKinlay ! ! * jcf-write.c (get_access_flags): Return correct access flags for ! private and protected inner classes. ! ! 2002-08-08 Nathan Sidwell ! ! * java/Make-lang.in (java.mostlyclean): Remove coverage files. ! ! 2002-08-05 Geoffrey Keating ! ! * mangle_name.c: Don't include obstack.h twice. ! * xref.c: Don't include obstack.h. ! ! 2002-08-04 Geoffrey Keating ! ! * class.c: (permanent_obstack): Delete declaration. ! * constants.c: (permanent_obstack): Delete declaration. ! * except.c: (permanent_obstack): Delete declaration. ! * expr.c: (permanent_obstack): Delete declaration. ! * jcf-parse.c: (permanent_obstack): Delete declaration. ! (saveable_obstack): Delete declaration. ! * parse.h: (permanent_obstack): Delete declaration. ! * typeck.c: (permanent_obstack): Delete declaration. 2002-08-04 Joseph S. Myers ! * gcj.texi (version-gcc): Increase to 3.3. ! 2002-07-22 Tom Tromey ! * lex.c (java_lex): Check for `e' or `E' after 0. ! ! 2002-07-21 Richard Henderson ! ! * lang.c (java_unsafe_for_reeval): New. ! (LANG_HOOKS_UNSAFE_FOR_REEVAL): New. ! ! 2002-07-21 Neil Booth ! ! * jcf-path.c (GET_ENV_PATH_LIST): Remove. ! (jcf_path_init): Use GET_ENVIRONMENT. ! ! 2002-07-10 Roger Sayle ! Zack Weinberg ! ! * builtins.c (initialize_builtins): Remove defines that ! handled C/C++ specific junk hereby removed from builtins.def. ! ! 2002-07-07 Neil Booth ! ! * lang.c (java_post_options): Update prototype. ! ! 2002-07-05 Roger Sayle ! ! * builtins.c (initialize_builtins): Ignore the additional ! parameter to DEF_BUILTIN. Handle more C/C++ specific junk in ! the builtins.def file. ! ! 2002-07-01 Tom Tromey ! ! For PR libgcj/7073: ! * parse.y (patch_incomplete_class_ref): Handle VOID_TYPE ! specially. ! ! 2002-07-01 Roger Sayle ! ! * java/decl.c (builtin_function): Accept additional parameter. ! (java_init_decl_processing): Pass an additional NULL_TREE ! argument to builtin_function. ! ! 2002-06-29 T.J. Mather ! ! * gcj.texi: Fixed gcj invocation example so that it compiles. ! ! 2002-06-26 Kaveh R. Ghazi ! ! * lex.c (java_init_lex): Avoid incorrect hardcoded constant 11. ! * parse.y (mark_parser_ctxt): Likewise. ! (check_modifiers, declare_local_variables): Avoid incorrect ! hardcoded constant 10. ! ! * lex.c (java_read_char): Avoid "comparison is always true" ! warning. 2002-06-25 Andreas Schwab * expr.c (JSR): Avoid undefined operation on PC. + 2002-06-21 Kaveh R. Ghazi + + * decl.c (clear_binding_level): Const-ify. + + 2002-06-13 Akim Demaille + + * parse.y (class_declaration, interface_declaration): Make sure + all their rules have an action, in order to avoid meaningless `$$ + = $1' and their type clashes. + + 2002-06-11 Tom Tromey + + * jcf-write.c (generate_classfile): Use FIELD_SYNTHETIC. + * parse-scan.y (statement_without_trailing_substatement): Added + assert_statement. + (assert_statement): New rule. + * java-tree.h (struct lang_type) [assertions]: New field. + (TYPE_USES_ASSERTIONS): New macro. + (CLASS_USES_ASSERTIONS): Likewise. + (FIELD_SYNTHETIC): New define. + * lex.c (java_lval;): Added ASSERT_TK. + * parse.y (ASSERT_TK): Added. + (statement_without_trailing_substatement): Added assert_statement. + (assert_statement): New rule. + (build_assertion): New function. + (maybe_generate_pre_expand_clinit): Create and initialize + $assertionsDisabled. + (lookup_package_type): Removed decl. + * keyword.h: Rebuilt. + * keyword.gperf (assert): New token. + + 2002-06-10 Akim Demaille + + * parse.y (interface_type_list, class_member_declaration) + (unary_expression_not_plus_minus): Remove duplicate %type. + Whitespace changes. + + 2002-06-09 Tom Tromey + + * Make-lang.in (java/lang.o): Use LANGHOOKS_DEF_H. + + * parse.y (method_header): Give error message in all cases. + Fixes PR java/6865. + 2002-06-10 Bryce McKinlay Don't use RTL inlining. Fix for PR java/6820. *************** *** 86,98 **** (java_post_options): New function. Turn off inlining unless flag_really_inline is set. 2002-06-08 H.J. Lu (hjl@gnu.org) * jcf-path.c (jcf_path_init): Allocate 1 more byte for string. ! 2002-06-03 Mark Mitchell ! 2002-05-18 Mark Mitchell * java-tree.h (CLASS_BEING_LAIDOUT): Remove duplicate definition. * jcf-io.c (dirent.h): Include it. (fnmatch.h): Likewise. --- 742,895 ---- (java_post_options): New function. Turn off inlining unless flag_really_inline is set. + 2002-06-10 Bryce McKinlay + + * gjavah.c (throwable_p): Accept argument as either a classname or + signature fragment. Create null-terminated classname string for super + when calling itself recursively. + (decode_signature_piece): Skip first character from class name + signature when calling throwable_p. + 2002-06-08 H.J. Lu (hjl@gnu.org) * jcf-path.c (jcf_path_init): Allocate 1 more byte for string. ! 2002-06-04 Tom Tromey ! * jcf-write.c (perform_relocations): Optmize a goto to a goto. ! ! 2002-06-04 Michael Koch ! ! * gcj.texi (Input Options): Fixed typo. ! ! 2002-06-04 Zack Weinberg ! ! * java-tree.h, class.c, expr.c, jcf-parse.c, parse.y, ! typeck.c, verify.c: Remove all #if JAVA_USE_HANDLES blocks, ! all mention of CLASS_TO_HANDLE_TYPE or HANDLE_TO_CLASS_TYPE, ! and all now-pointless local variables. Rename other local ! variables to reflect their not being handles. ! ! * java-tree.h, jcf-dump.c, jcf-io.c: Remove all ! #if JCF_USE_STDIO blocks. ! ! * parse.y: Add missing semicolon at end of rule. ! ! 2002-06-03 Geoffrey Keating ! ! * check-init.c (attach_initialized_static_class): Delete, unused. ! * parse.y: Use htab_t instead of struct hashtable, update ! all uses. ! * java-tree.h: Include hashtab.h instead of hash.h. ! (struct lang_decl_func): Use htab_t, set up for gengtype. ! (struct init_test_hash_entry): Delete. ! (struct treetreehash_entry): New. ! (java_treetreehash_find): New ! (java_treetreehash_new): New prototype. ! (java_treetreehash_create): New prototype. ! (java_mark_tree): Delete prototype. ! (java_hash_hash_tree_node): Delete prototype. ! (java_hash_compare_tree_node): Delete prototype. ! (attach_initialized_static_class): Delete prototype. ! * expr.c (build_class_init): Update to use java_treetreehash ! functions. ! (java_expand_expr): Update to use htab_t. ! (emit_init_test_initialization): Likewise. ! * decl.c (java_mark_tree): Delete. ! * class.c (init_test_hash_newfunc): Delete. ! (java_hash_hash_tree_node): Delete. ! (java_hash_compare_tree_node): Delete. ! (add_method_1): Update to use java_treetreehash functions. ! (JAVA_TREEHASHHASH_H): New macro. ! (java_treetreehash_hash): New function. ! (java_treetreehash_compare): New function. ! (java_treetreehash_find): New function. ! (java_treetreehash_new): New function. ! (java_treetreehash_create): New function. ! * Make-lang.in (JAVA_TREE_H): Replace hash.h by HASHTAB_H. ! ! * Make-lang.in (java/parse.o): Depend on debug.h. ! * java-tree.h (struct lang_identifier): Use gengtype. ! (union lang_tree_node): New. ! (struct lang_decl_func): Use gengtype. ! (struct lang_decl_var): Likewise. ! (struct lang_decl): Likewise. ! * parse.y: Include debug.h. ! * lang.c (LANG_HOOKS_MARK_TREE): Delete. ! ! * lang.c (struct language_function): New dummy structure. ! ! * java-tree.h (MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC): Set ! descriminator for DECL_LANG_SPECIFIC. ! (struct lang_decl_func): Rename from struct lang_decl. ! (enum lang_decl_desc): New. ! (struct lang_decl): Make it a union. Update all the accessor macros. ! (struct lang_type): Use gengtype. ! * class.c (add_method_1): Set descriminator for DECL_LANG_SPECIFIC. ! * decl.c (java_dup_lang_specific_decl): All lang_decl structures ! are now the same size. ! (lang_mark_tree): Use gengtype to mark TYPE_LANG_SPECIFIC; ! use discriminator to mark DECL_LANG_SPECIFIC. ! ! * Make-lang.in (gt-java-builtins.h): New rule. ! (java/builtins.o): Add dependency on gt-.h. ! * builtins.c: Use gengtype for roots. ! (union string_or_tree): Use gengtype. ! (struct builtin_record): Use gengtype. ! * config-lang.in (gtfiles): Add builtins.c. ! ! * Make-lang.in (gt-java-class.h, gt-java-constants.h, ! gt-java-decl.h, gt-java-expr.h, gt-java-jcf-parse.h, ! gt-java-jcf-write.h, gt-java-lang.h, gt-java-mangle.h, ! gt-java-parse.h, gtype-java.h): Add rules to generate. ! (parse.o): Add dependency on gt-java-parse.h, gt-java.h. ! (class.o): Add dependency on gt-*.h. ! (constants.o): Likewise. ! (decl.o): Likewise. ! (expr.o): Likewise. ! (jcf-parse.o): Likewise. ! (jcf-write.o): Likewise. ! (lang.o): Likewise. ! * config-lang.in (gtfiles): New. ! * class.c: Replace uses of ggc_add_* with GTY markers. Include gt-*.h. ! * constants.c: Replace uses of ggc_add_* with GTY markers. ! Include gt-*.h. ! * decl.c: Replace uses of ggc_add_* with GTY markers. Include gt-*.h. ! * expr.c: Replace uses of ggc_add_* with GTY markers. Include gt-*.h. ! * java-tree.h: Replace uses of ggc_add_* with GTY markers. ! * jcf-parse.c: Replace uses of ggc_add_* with GTY markers. ! Include gt-*.h. ! * jcf-write.c: Replace uses of ggc_add_* with GTY markers. ! Include gt-*.h. ! * lang.c: Replace uses of ggc_add_* with GTY markers. Include gt-*.h. ! * mangle.c: Replace uses of ggc_add_* with GTY markers. Include ! gt-*.h. ! * parse.y: Replace uses of ggc_add_* with GTY markers. Include gt-*.h. ! Include gtype-java.h. ! ! 2002-06-02 Tom Tromey ! ! Fix for PR java/5913: ! * parse.y (patch_binop): Call patch_string on op1. ! ! 2002-06-02 Tom Tromey ! ! Fix for PR java/1343, PR java/6336: ! * parse.y (make_nested_class_name): Remove extraneous `else'; fix ! formatting. Changed return type. ! (anonymous_class_counter): Moved to top of file. ! (maybe_make_nested_class_name): Append number to class name for ! function-local classes. ! ! 2002-05-28 Zack Weinberg ! ! * decl.c, jcf-parse.c, parse.y, typeck.c: Include real.h. ! * Make-lang.in: Update dependency lists. ! ! 2002-05-18 Mark Mitchell ! ! * gjavah.c (throwable_p): Do not free the name of the class after ! passing it to find_class. * java-tree.h (CLASS_BEING_LAIDOUT): Remove duplicate definition. * jcf-io.c (dirent.h): Include it. (fnmatch.h): Likewise. *************** *** 109,131 **** * parse.y (java_expand_classes): Write the class files in reverse order. ! 2002-05-13 Mark Mitchell ! * jcf-write.c (write_classfile): Unlink the temporary file if it ! cannot be renamed. Use concat to build up the name of the ! temporary file. - 2002-05-13 Mark Mitchell * jcf-write.c (write_classfile): Unlink the temporary file if it cannot be renamed. Use concat to build up the name of the temporary file. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. 2002-04-24 Tom Tromey --- 906,970 ---- * parse.y (java_expand_classes): Write the class files in reverse order. ! 2002-05-16 Rainer Orth ! ! * Make-lang.in: Allow for PWDCMD to override hardcoded pwd. ! ! 2002-05-13 Mark Mitchell * jcf-write.c (write_classfile): Unlink the temporary file if it cannot be renamed. Use concat to build up the name of the temporary file. ! 2002-05-08 Mark Mitchell ! * jcf-write.c (write_classfile): Write the file to a ! temporary file and then rename it. ! 2002-05-07 Tom Tromey ! * gjavah.c (throwable_p): Use xstrdup, not strdup. ! ! Fix for PR java/1200: ! * gjavah.c (throwable_p): New function. ! (decode_signature_piece): Use it. A `WeakReference' isn't the ! same as a `jweak'. ! Include hashtab.h. ! (gcjh_streq): New function. ! ! 2002-05-07 Andreas Jaeger ! ! * parse.y (finish_for_loop): Fix if statement. ! ! 2002-05-06 Tom Tromey ! ! Fix for PR java/5941: ! * parse.y (finish_for_loop): Set SUPPRESS_UNREACHABLE_ERROR for ! loop update expression. ! (java_complete_lhs): Use SUPPRESS_UNREACHABLE_ERROR. ! * java-tree.h (SUPPRESS_UNREACHABLE_ERROR): New macro. ! ! 2002-05-04 Mark Wielaard ! ! For PR java/6519: ! * parse.y (build_string_concatenation): Return just op1 only when op2 ! is null and op1 is a STRING_CST, otherwise always construct a ! StringBuffer. ! ! 2002-04-27 Tom Tromey ! ! For PR java/6382: ! * parse.y (string_convert_int_cst): New function. ! (merge_string_cste): Use it. ! ! 2002-04-25 Neil Booth ! ! * java-tree.h (java_parse_file): Update. ! (java_set_yydebug): Remove. ! * jcf-parse.c (yydebug): Remove. ! (java_set_yydebug): Die. ! (java_parse_file): Update. ! * lang.c (LANG_HOOKS_SET_YYDEBUG): Remove. 2002-04-24 Tom Tromey *************** *** 139,149 **** * java-tree.h (BCODE_RETURN_TARGET): Removed - never set. (BCODE_TARGET): Remove BCODE_RETURN_TARGET. - Tue Apr 23 14:31:23 2002 Anthony Green - - * gcj.texi (Invoking rmiregistry): Fix rmiregistry command - synopsis. - 2002-04-23 Tom Tromey For PR java/6314: --- 978,983 ---- *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 165,171 **** * jcf-parse.c (get_constant): CONSTANT_Integer: Use an unsigned HOST_WIDE_INT for num. Use JPOOL_UINT to get it. ! CONSTANT_Double: Use JPOOL_UINT to get both halves of a double. 2002-04-18 Bryce McKinlay --- 999,1009 ---- * jcf-parse.c (get_constant): CONSTANT_Integer: Use an unsigned HOST_WIDE_INT for num. Use JPOOL_UINT to get it. ! CONSTANT_Double: Use JPOOL_UINT to get both halve of a double. ! ! 2002-04-18 Neil Booth ! ! * typeck.c (incomplete_type_error): Remove. 2002-04-18 Bryce McKinlay *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 250,260 **** * gcj.texi (Invocation): Document CNI invocation API. ! 2002-04-05 Nic Ferrier ! * gcj.texi: @code{gcj} becomes @command{gcj}. ! @code{gcc} becomes @command{gcc}. ! GcjRaw changed to gnu.gcc.RawData. 2002-03-29 Martin Kahlert --- 1088,1125 ---- * gcj.texi (Invocation): Document CNI invocation API. ! 2002-04-04 Neil Booth ! * expr.c (truthvalue_conversion): Rename. Update. ! (expand_compare): Update. ! * java-tree.h (java_truthvalue_conversion): New. ! * lang.c (LANG_HOOKS_TRUTHVALUE_CONVERSION): Redefine. ! ! 2002-04-01 Neil Booth ! ! * java-tree.h (java_mark_addressable): New. ! * lang.c (LANG_HOOKS_MARK_ADDRESSABLE): Redefine. ! * typeck.c (mark_addressable): Rename, update. ! ! 2002-04-01 Neil Booth ! ! * expr.c (build_java_binop): Update. ! * java-tree.h (java_signed_type, java_unsigned_type, ! java_signed_or_unsigned_type): Update. ! * lang.c (LANG_HOOKS_SIGNED_TYPE, LANG_HOOKS_UNSIGNED_TYPE, ! LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE): New. ! * parse.y (patch_binop): Update. ! * typeck.c (signed_or_unsigned_type, unsigned_type, ! signed_type): Update. ! ! 2002-03-31 Neil Booth ! ! * lang.c (LANG_HOOKS_PRINT_ERROR_FUNCTION): Redefine. ! (java_dummy_print): Remove. ! (lang_print_error): Rename. Exit early if inhibiting output. ! (inhibit_error_printing_function): New. ! (java_init): Don't set hook. ! (lang_init_source): Use new boolean. 2002-03-29 Martin Kahlert *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 265,270 **** --- 1130,1146 ---- * parse.y (check_inner_circular_reference): Ignore incomplete types. + 2002-03-29 Neil Booth + + * Make-lang.in (builtins.o): Update. + * boehm.c (get_boehm_type_descriptor): Update. + * builtins.c: Include langhooks.h. + * decl.c (java_init_decl_processing): Update. + * java-tree.h (java_type_for_mode, java_type_for_size): New. + * lang.c (LANG_HOOKS_TYPE_FOR_MODE, LANG_HOOKS_TYPE_FOR_SIaZE): + Redefine. + * typeck.c (type_for_mode, type_for_size): Update. + 2002-03-29 Martin Kahlert * lex.c (java_new_lexer): Alias "646" to DEFAULT_ENCODING. *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 281,286 **** --- 1157,1166 ---- (read_class): Call it. (java_parse_file): Likewise. + Thu Mar 28 13:22:22 CET 2002 Jan Hubicka + + * java/lang.c (java_init_options): Set flag_trapping_math to 0. + 2002-03-28 Bryce McKinlay * parse.y (resolve_package): Initialize "decl". *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 300,310 **** * expr.c (expand_invoke): Don't generate null pointer check if we're calling . 2002-03-27 Bryce McKinlay Fix for PR java/5850: * parse.y (lookup_field_wrapper): Call itself recursively for enclosing ! context if nothing was found in the current context. * expr.c (lookup_field): Don't look in enclosing contexts. 2002-03-26 Tom Tromey --- 1180,1198 ---- * expr.c (expand_invoke): Don't generate null pointer check if we're calling . + 2002-03-27 Neil Booth + + * expr.c (java_lang_expand_expr): Rename java_expand_expr, + fix prototype. + * java-tree.h (java_lang_expand_expr): Similarly. + * lang.c (LANG_HOOKS_EXPAND_EXPR): Redefine. + (java_init): Don't set hook. + 2002-03-27 Bryce McKinlay Fix for PR java/5850: * parse.y (lookup_field_wrapper): Call itself recursively for enclosing ! context if field was not found in the current scope. * expr.c (lookup_field): Don't look in enclosing contexts. 2002-03-26 Tom Tromey *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 314,327 **** * parse.h (struct parser_ctxt) [modifier_ctx]: Array has 12 elements, not 11. 2002-03-22 Mark Wielaard Fix for PR java/5368: * parse.y (resolve_qualified_expression_name): Use decl not field_decl when printing error message. 2002-03-22 Tom Tromey ! Andrew Haley * expr.c (build_field_ref): Don't build a check if the field is a member of `this'. --- 1202,1232 ---- * parse.h (struct parser_ctxt) [modifier_ctx]: Array has 12 elements, not 11. + 2002-03-26 Neil Booth + + * decl.c (lang_mark_tree): Rename java_mark_tree. + * java-tree.h (java_mark_tree): New. + * java-lang.c (LANG_HOOKS_MARK_TREE): Redefine. + + 2002-03-25 Zack Weinberg + + * lex.c: Change java_perform_atof to take normal parameters + instead of a pointer to a parameter block. Call it directly + from java_lex. + 2002-03-22 Mark Wielaard Fix for PR java/5368: * parse.y (resolve_qualified_expression_name): Use decl not field_decl when printing error message. + 2002-03-25 Neil Booth + + * decl.c (maybe_build_cleanup): Remove. + 2002-03-22 Tom Tromey ! ! Andrew Haley * expr.c (build_field_ref): Don't build a check if the field is a member of `this'. *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 336,341 **** --- 1241,1263 ---- * parse.y (build_access_to_thisn): Stop when FROM is not an inner class. + 2002-03-21 Neil Booth + + * cp-tree.h (pushdecl, pushlevel, poplevel, set_block, + insert_block, getdecls, kept_level_p, global_bindings_p): New. + + 2002-03-20 Nic Ferrier + + * gcj.texi: @code{gcj} becomes @command{gcj}. + @code{gcc} becomes @command{gcc}. + GcjRaw changed to gnu.gcc.RawData. + + 2002-03-20 Neil Booth + + * decl.c (start_java_method): Use new hook. + * lang.c (LANG_HOOKS_DECL_PRINTABLE_NAME): Redefine. + (java_init): Remove old hook. + 2002-03-18 Alexandre Petit-Bianco * builtins.c (define_builtin): Do nothing if `type' is null. *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 350,355 **** --- 1272,1283 ---- * jcf-parse.c (get_constant): Delete unused variables. + 2002-03-17 Neil Booth + + * java-tree.h (java_parse_file): New. + * jcf-parse.c (yyparse): Rename java_parse_file. + * lang.c (LANG_HOOKS_PARSE_FILE): Redefine. + 2002-03-16 Bryce McKinlay * parse.y (craft_constructor): Return the constructor decl. *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 362,374 **** * jcf-parse.c (yyparse): Don't emit class registration constructor when compiling resource files. 2002-03-12 Tom Tromey * jcf-parse.c (get_constant) [CONSTANT_String]: String values are UTF-8, not UCS-2. Fixes PR java/5923. - 2002-03-12 Tom Tromey - * parse.y (qualify_ambiguous_name): Handle case where QUAL_WFL is a call_expr wrapped in a convert. Fixes PR java/5848. --- 1290,1308 ---- * jcf-parse.c (yyparse): Don't emit class registration constructor when compiling resource files. + 2002-03-12 Kaveh R. Ghazi + + * lang.c (java_tree_code_type, java_tree_code_length, + tree_code_name): Delete. + (tree_code_type, tree_code_length, tree_code_name): Define. + (java_init): Don't try to copy into the various tree_code + arrays. + 2002-03-12 Tom Tromey * jcf-parse.c (get_constant) [CONSTANT_String]: String values are UTF-8, not UCS-2. Fixes PR java/5923. * parse.y (qualify_ambiguous_name): Handle case where QUAL_WFL is a call_expr wrapped in a convert. Fixes PR java/5848. *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 412,423 **** --- 1346,1378 ---- Do the latter on if the return_pc has been verified (the jsr returns). (JSR): Now just call build_java_jsr. + 2002-03-07 Jeff Sturm + + * java/Make-lang.in (JAVA_TARGET_INSTALL_NAME): Define. + (java.install-common): Link native driver to + JAVA_TARGET_INSTALL_NAME. + 2002-03-05 David Billinghurst * builtins.c(cos_builtin): method_return_type ATTRIBUTE_UNUSED * builtins.c(sin_builtin): Likewise * builtins.c(sqrt_builtin): Likewise + 2002-03-03 Zack Weinberg + + * java/expr.c, java/jcf-parse.c, java/lex.c: + Remove all #ifndef REAL_ARITHMETIC blocks, make all #ifdef + REAL_ARITHMETIC blocks unconditional. Delete some further + #ifdef blocks predicated on REAL_ARITHMETIC. + + 2002-03-03 Kaveh R. Ghazi + + * class.c (init_class_processing): Use ARRAY_SIZE in lieu of + explicit sizeof/sizeof. + * decl.c (java_init_decl_processing): Likewise. + * jcf-parse.c (init_jcf_parse): Likewise. + * parse.y (init_src_parse): Likewise. + 2002-03-02 Per Bothner Make --CLASSPATH by a synonym for --classpath and -classpath. *************** Tue Apr 23 14:31:23 2002 Anthony Green *** 480,485 **** --- 1435,1452 ---- * jvspec.c: Don't pass store-check option to jvgenmain. * lang-options.h: Add help string for -fno-store-check. + 2002-02-28 Neil Booth + + * decl.c (copy_lang_decl): Rename java_dup_lang_specific_decl. + * java-tree.h (java_dup_lang_specific_decl): New. + * lang.c (LANG_HOOKS_DUP_LANG_SPECIFIC_DECL): Redefine. + + 2002-02-27 Zack Weinberg + + * builtins.c, decl.c: Delete traditional-mode-related code + copied from the C front end but not used, or used only to + permit the compiler to link. + 2002-02-22 Tom Tromey Fix for PR java/2369: *************** Tue Oct 23 14:02:17 2001 Richard Kenner *** 2361,2367 **** (generate_classfile): Compute the attribute count, invoke `append_gcj_attribute'. * jcf.h (typedef struct JCF): `seen_in_zip' and `java_source' ! turned into bit fields. New bit field `right_zip.' (JCF_ZERO): Set `right_zip' to zero. * lang-options.h (-fforce-classes-archive-check): Added flag. * lang.c (flag_force_classes_archive_check): New flag. --- 3328,3334 ---- (generate_classfile): Compute the attribute count, invoke `append_gcj_attribute'. * jcf.h (typedef struct JCF): `seen_in_zip' and `java_source' ! turned into bit-fields. New bit-field `right_zip.' (JCF_ZERO): Set `right_zip' to zero. * lang-options.h (-fforce-classes-archive-check): Added flag. * lang.c (flag_force_classes_archive_check): New flag. *************** Fri Dec 24 00:25:29 1999 Alexandre Peti *** 6443,6450 **** * jcf.h (typedef struct JCF): Field `outofsynch' deleted. (jcf_out_of_synch): Prototype deleted. * parse.h (struct parser_ctxt): `minus_seen', `java_error_flag', ! `deprecated' and `class_err': integer turned into bit fields. ! New bit fields `saved_data_ctx' and `saved_data'. Fixed comments. * parse.y (package_list): New global. (package_declaration:): Record newly parsed package name. (extra_ctxp_pushed_p): Static global deleted. --- 7410,7417 ---- * jcf.h (typedef struct JCF): Field `outofsynch' deleted. (jcf_out_of_synch): Prototype deleted. * parse.h (struct parser_ctxt): `minus_seen', `java_error_flag', ! `deprecated' and `class_err': integer turned into bit-fields. ! New bit-fields `saved_data_ctx' and `saved_data'. Fixed comments. * parse.y (package_list): New global. (package_declaration:): Record newly parsed package name. (extra_ctxp_pushed_p): Static global deleted. *************** Mon Apr 27 10:50:05 1998 Alexandre Peti *** 12419,12425 **** this_wfl. Call to parse_error_context uses this_wfl instead of relying on lookup_cl. (parser_check_super): Comment reflects function's new returned ! type (int). Function returns non zero value on error. (create_jdep_list, reverse_jdep_list, obtain_incomplete_type, register_incomplete_type, jdep_resolve_class): New functions to handle incomplete types in declarations. --- 13386,13392 ---- this_wfl. Call to parse_error_context uses this_wfl instead of relying on lookup_cl. (parser_check_super): Comment reflects function's new returned ! type (int). Function returns nonzero value on error. (create_jdep_list, reverse_jdep_list, obtain_incomplete_type, register_incomplete_type, jdep_resolve_class): New functions to handle incomplete types in declarations. diff -Nrc3pad gcc-3.2.3/gcc/java/check-init.c gcc-3.3/gcc/java/check-init.c *** gcc-3.2.3/gcc/java/check-init.c 2002-02-28 11:42:09.000000000 +0000 --- gcc-3.3/gcc/java/check-init.c 2002-11-18 15:46:31.000000000 +0000 *************** static tree get_variable_decl PARAMS ((t *** 108,114 **** static void final_assign_error PARAMS ((tree)); static void check_final_reassigned PARAMS ((tree, words)); ! #define ALLOC_WORDS(NUM) ((word*) xmalloc ((NUM) * sizeof (word))) #define FREE_WORDS(PTR) (free (PTR)) /* DECLARE_BUFFERS is used to allocate NUMBUFFER bit sets, each of --- 108,114 ---- static void final_assign_error PARAMS ((tree)); static void check_final_reassigned PARAMS ((tree, words)); ! #define ALLOC_WORDS(NUM) (xmalloc ((NUM) * sizeof (word))) #define FREE_WORDS(PTR) (free (PTR)) /* DECLARE_BUFFERS is used to allocate NUMBUFFER bit sets, each of *************** check_init (exp, before) *** 607,614 **** if (fndecl && METHOD_STATIC (fndecl) && (DECL_INITIAL (decl) == boolean_true_node || (index >= 0 && ASSIGNED_P (tmp, index)))) ! hash_lookup (&DECL_FUNCTION_INITIALIZED_CLASS_TABLE (fndecl), ! DECL_FUNCTION_INIT_TEST_CLASS(decl), TRUE, NULL); } DECL_BIT_INDEX (decl) = -1; } --- 607,616 ---- if (fndecl && METHOD_STATIC (fndecl) && (DECL_INITIAL (decl) == boolean_true_node || (index >= 0 && ASSIGNED_P (tmp, index)))) ! *(htab_find_slot ! (DECL_FUNCTION_INITIALIZED_CLASS_TABLE (fndecl), ! DECL_FUNCTION_INIT_TEST_CLASS (decl), INSERT)) = ! DECL_FUNCTION_INIT_TEST_CLASS (decl); } DECL_BIT_INDEX (decl) = -1; } *************** check_for_initialization (body, mdecl) *** 999,1025 **** start_current_locals = num_current_locals = 0; } - - /* Call for every element in DECL_FUNCTION_INITIALIZED_CLASS_TABLE of - a method to consider whether the type indirectly described by ENTRY - is definitly initialized and thus remembered as such. */ - - bool - attach_initialized_static_class (entry, ptr) - struct hash_entry *entry; - PTR ptr; - { - struct init_test_hash_entry *ite = (struct init_test_hash_entry *) entry; - tree fndecl = DECL_CONTEXT (ite->init_test_decl); - int index = DECL_BIT_INDEX (ite->init_test_decl); - - /* If the initializer flag has been definitly assigned (not taking - into account its first mandatory assignment which has been - already added but escaped analysis.) */ - if (fndecl && METHOD_STATIC (fndecl) - && (DECL_INITIAL (ite->init_test_decl) == boolean_true_node - || (index >= 0 && ASSIGNED_P (((word *) ptr), index)))) - hash_lookup (&DECL_FUNCTION_INITIALIZED_CLASS_TABLE (fndecl), - entry->key, TRUE, NULL); - return true; - } --- 1001,1003 ---- diff -Nrc3pad gcc-3.2.3/gcc/java/class.c gcc-3.3/gcc/java/class.c *** gcc-3.2.3/gcc/java/class.c 2002-04-17 23:20:43.000000000 +0000 --- gcc-3.3/gcc/java/class.c 2003-02-28 20:53:07.000000000 +0000 *************** *** 1,5 **** /* Functions related to building classes and their related objects. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Functions related to building classes and their related objects. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. *************** static tree get_dispatch_table PARAMS (( *** 55,69 **** static void add_interface_do PARAMS ((tree, tree, int)); static tree maybe_layout_super_class PARAMS ((tree, tree)); static int assume_compiled PARAMS ((const char *)); - static struct hash_entry *init_test_hash_newfunc PARAMS ((struct hash_entry *, - struct hash_table *, - hash_table_key)); static tree build_method_symbols_entry PARAMS ((tree)); ! static rtx registerClass_libfunc; ! static rtx registerResource_libfunc; - extern struct obstack permanent_obstack; struct obstack temporary_obstack; /* The compiler generates different code depending on whether or not --- 55,65 ---- static void add_interface_do PARAMS ((tree, tree, int)); static tree maybe_layout_super_class PARAMS ((tree, tree)); static int assume_compiled PARAMS ((const char *)); static tree build_method_symbols_entry PARAMS ((tree)); ! static GTY(()) rtx registerClass_libfunc; ! static GTY(()) rtx registerResource_libfunc; struct obstack temporary_obstack; /* The compiler generates different code depending on whether or not *************** typedef struct assume_compiled_node_stru *** 79,85 **** /* The class or package name. */ const char *ident; ! /* Non-zero if this represents an exclusion. */ int excludep; /* Pointers to other nodes in the tree. */ --- 75,81 ---- /* The class or package name. */ const char *ident; ! /* Nonzero if this represents an exclusion. */ int excludep; /* Pointers to other nodes in the tree. */ *************** static assume_compiled_node *find_assume *** 95,102 **** static assume_compiled_node *assume_compiled_tree; ! static tree class_roots[5] ! = { NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE }; #define registered_class class_roots[0] #define fields_ident class_roots[1] /* get_identifier ("fields") */ #define info_ident class_roots[2] /* get_identifier ("info") */ --- 91,97 ---- static assume_compiled_node *assume_compiled_tree; ! static GTY(()) tree class_roots[5]; #define registered_class class_roots[0] #define fields_ident class_roots[1] /* get_identifier ("fields") */ #define info_ident class_roots[2] /* get_identifier ("info") */ *************** find_assume_compiled_node (node, ident) *** 146,152 **** } /* Add a new IDENT to the include/exclude tree. It's an exclusion ! if EXCLUDEP is non-zero. */ void add_assume_compiled (ident, excludep) --- 141,147 ---- } /* Add a new IDENT to the include/exclude tree. It's an exclusion ! if EXCLUDEP is nonzero. */ void add_assume_compiled (ident, excludep) *************** add_assume_compiled (ident, excludep) *** 155,161 **** { assume_compiled_node *parent; assume_compiled_node *node = ! (assume_compiled_node *) xmalloc (sizeof (assume_compiled_node)); node->ident = xstrdup (ident); node->excludep = excludep; --- 150,156 ---- { assume_compiled_node *parent; assume_compiled_node *node = ! xmalloc (sizeof (assume_compiled_node)); node->ident = xstrdup (ident); node->excludep = excludep; *************** add_assume_compiled (ident, excludep) *** 165,172 **** if (NULL == assume_compiled_tree) { ! assume_compiled_tree = ! (assume_compiled_node *) xmalloc (sizeof (assume_compiled_node)); assume_compiled_tree->ident = ""; assume_compiled_tree->excludep = 0; assume_compiled_tree->sibling = NULL; --- 160,166 ---- if (NULL == assume_compiled_tree) { ! assume_compiled_tree = xmalloc (sizeof (assume_compiled_node)); assume_compiled_tree->ident = ""; assume_compiled_tree->excludep = 0; assume_compiled_tree->sibling = NULL; *************** add_assume_compiled (ident, excludep) *** 197,203 **** parent->child = node; } ! /* Returns non-zero if IDENT is the name of a class that the compiler should assume has been compiled to FIXME */ static int --- 191,197 ---- parent->child = node; } ! /* Returns nonzero if IDENT is the name of a class that the compiler should assume has been compiled to FIXME */ static int *************** ident_subst (old_name, old_length, prefi *** 237,243 **** #ifdef __GNUC__ char buffer[i]; #else ! char *buffer = (char *)alloca (i); #endif strcpy (buffer, prefix); for (i = 0; i < old_length; i++) --- 231,237 ---- #ifdef __GNUC__ char buffer[i]; #else ! char *buffer = alloca (i); #endif strcpy (buffer, prefix); for (i = 0; i < old_length; i++) *************** make_class () *** 286,306 **** { tree type; type = make_node (RECORD_TYPE); - #ifdef JAVA_USE_HANDLES - tree field1 = build_decl (FIELD_DECL, get_identifier ("obj"), - build_pointer_type (type)); - tree field2 = build_decl (FIELD_DECL, get_identifier ("methods"), - methodtable_ptr_type); - tree handle_type = make_node (RECORD_TYPE); - TREE_CHAIN (field1) = field2; - TYPE_FIELDS (handle_type) = field1; - TYPE_BINFO (type) = make_tree_vec (7); - TYPE_BINFO (handle_type) = make_tree_vec (7); - BINFO_HANDLE (TYPE_BINFO (handle_type)) = type; - BINFO_HANDLE (TYPE_BINFO (type)) = handle_type; - #else TYPE_BINFO (type) = make_tree_vec (6); - #endif MAYBE_CREATE_TYPE_TYPE_LANG_SPECIFIC (type); return type; --- 280,286 ---- *************** push_class (class_type, class_name) *** 357,371 **** DECL_ARTIFICIAL (decl) = 1; pushdecl_top_level (decl); - #ifdef JAVA_USE_HANDLES - { - tree handle_name = identifier_subst (class_name, - "Handle$", '.', '.', ""); - tree handle_decl = build_decl (TYPE_DECL, handle_name, - CLASS_TO_HANDLE_TYPE (class_type)); - pushdecl (handle_decl); - } - #endif return decl; } --- 337,342 ---- *************** build_java_method_type (fntype, this_cla *** 622,670 **** { if (access_flags & ACC_STATIC) return fntype; ! return build_method_type (CLASS_TO_HANDLE_TYPE (this_class), fntype); ! } ! ! static struct hash_entry * ! init_test_hash_newfunc (entry, table, string) ! struct hash_entry *entry; ! struct hash_table *table; ! hash_table_key string ATTRIBUTE_UNUSED; ! { ! struct init_test_hash_entry *ret = (struct init_test_hash_entry *) entry; ! if (ret == NULL) ! { ! ret = ((struct init_test_hash_entry *) ! hash_allocate (table, sizeof (struct init_test_hash_entry))); ! if (ret == NULL) ! return NULL; ! } ! ret->init_test_decl = 0; ! return (struct hash_entry *) ret; ! } ! ! /* Hash table helpers. Also reused in find_applicable_accessible_methods_list ! (parse.y). The hash of a tree node is its pointer value, comparison ! is direct. */ ! ! unsigned long ! java_hash_hash_tree_node (k) ! hash_table_key k; ! { ! return (long) k; ! } ! ! bool ! java_hash_compare_tree_node (k1, k2) ! hash_table_key k1; ! hash_table_key k2; ! { ! return ((tree) k1 == (tree) k2); } tree ! add_method_1 (handle_class, access_flags, name, function_type) ! tree handle_class; int access_flags; tree name; tree function_type; --- 593,604 ---- { if (access_flags & ACC_STATIC) return fntype; ! return build_method_type (this_class, fntype); } tree ! add_method_1 (this_class, access_flags, name, function_type) ! tree this_class; int access_flags; tree name; tree function_type; *************** add_method_1 (handle_class, access_flags *** 672,708 **** tree method_type, fndecl; method_type = build_java_method_type (function_type, ! handle_class, access_flags); fndecl = build_decl (FUNCTION_DECL, name, method_type); ! DECL_CONTEXT (fndecl) = handle_class; DECL_LANG_SPECIFIC (fndecl) ! = (struct lang_decl *) ggc_alloc_cleared (sizeof (struct lang_decl)); /* Initialize the static initializer test table. */ ! hash_table_init (&DECL_FUNCTION_INIT_TEST_TABLE (fndecl), ! init_test_hash_newfunc, java_hash_hash_tree_node, ! java_hash_compare_tree_node); /* Initialize the initialized (static) class table. */ if (access_flags & ACC_STATIC) ! hash_table_init (&DECL_FUNCTION_INITIALIZED_CLASS_TABLE (fndecl), ! init_test_hash_newfunc, java_hash_hash_tree_node, ! java_hash_compare_tree_node); /* Initialize the static method invocation compound list */ DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl) = NULL_TREE; ! TREE_CHAIN (fndecl) = TYPE_METHODS (handle_class); ! TYPE_METHODS (handle_class) = fndecl; /* Notice that this is a finalizer and update the class type accordingly. This is used to optimize instance allocation. */ if (name == finalize_identifier_node && TREE_TYPE (function_type) == void_type_node && TREE_VALUE (TYPE_ARG_TYPES (function_type)) == void_type_node) ! HAS_FINALIZER_P (handle_class) = 1; if (access_flags & ACC_PUBLIC) METHOD_PUBLIC (fndecl) = 1; if (access_flags & ACC_PROTECTED) METHOD_PROTECTED (fndecl) = 1; --- 606,642 ---- tree method_type, fndecl; method_type = build_java_method_type (function_type, ! this_class, access_flags); fndecl = build_decl (FUNCTION_DECL, name, method_type); ! DECL_CONTEXT (fndecl) = this_class; DECL_LANG_SPECIFIC (fndecl) ! = ggc_alloc_cleared (sizeof (struct lang_decl)); ! DECL_LANG_SPECIFIC (fndecl)->desc = LANG_DECL_FUNC; /* Initialize the static initializer test table. */ ! ! DECL_FUNCTION_INIT_TEST_TABLE (fndecl) = ! java_treetreehash_create (10, 1); /* Initialize the initialized (static) class table. */ if (access_flags & ACC_STATIC) ! DECL_FUNCTION_INITIALIZED_CLASS_TABLE (fndecl) = ! htab_create_ggc (50, htab_hash_pointer, htab_eq_pointer, NULL); /* Initialize the static method invocation compound list */ DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND (fndecl) = NULL_TREE; ! TREE_CHAIN (fndecl) = TYPE_METHODS (this_class); ! TYPE_METHODS (this_class) = fndecl; /* Notice that this is a finalizer and update the class type accordingly. This is used to optimize instance allocation. */ if (name == finalize_identifier_node && TREE_TYPE (function_type) == void_type_node && TREE_VALUE (TYPE_ARG_TYPES (function_type)) == void_type_node) ! HAS_FINALIZER_P (this_class) = 1; if (access_flags & ACC_PUBLIC) METHOD_PUBLIC (fndecl) = 1; if (access_flags & ACC_PROTECTED) METHOD_PROTECTED (fndecl) = 1; *************** add_method (this_class, access_flags, na *** 735,741 **** tree name; tree method_sig; { - tree handle_class = CLASS_TO_HANDLE_TYPE (this_class); tree function_type, fndecl; const unsigned char *sig = (const unsigned char *) IDENTIFIER_POINTER (method_sig); --- 669,674 ---- *************** add_method (this_class, access_flags, na *** 744,750 **** fatal_error ("bad method signature"); function_type = get_type_from_signature (method_sig); ! fndecl = add_method_1 (handle_class, access_flags, name, function_type); set_java_signature (TREE_TYPE (fndecl), method_sig); return fndecl; } --- 677,683 ---- fatal_error ("bad method signature"); function_type = get_type_from_signature (method_sig); ! fndecl = add_method_1 (this_class, access_flags, name, function_type); set_java_signature (TREE_TYPE (fndecl), method_sig); return fndecl; } *************** make_method_value (mdecl) *** 1351,1357 **** iter != NULL_TREE; iter = TREE_CHAIN (iter)) { ! tree sig = build_java_signature (TREE_VALUE (iter)); tree utf8 = build_utf8_ref (unmangle_classname (IDENTIFIER_POINTER (sig), IDENTIFIER_LENGTH (sig))); --- 1284,1290 ---- iter != NULL_TREE; iter = TREE_CHAIN (iter)) { ! tree sig = DECL_NAME (TYPE_NAME (TREE_VALUE (iter))); tree utf8 = build_utf8_ref (unmangle_classname (IDENTIFIER_POINTER (sig), IDENTIFIER_LENGTH (sig))); *************** make_class_data (type) *** 1566,1572 **** fields_decl = NULL_TREE; /* Build Method array. */ ! for (method = TYPE_METHODS (CLASS_TO_HANDLE_TYPE (type)); method != NULL_TREE; method = TREE_CHAIN (method)) { tree init; --- 1499,1505 ---- fields_decl = NULL_TREE; /* Build Method array. */ ! for (method = TYPE_METHODS (type); method != NULL_TREE; method = TREE_CHAIN (method)) { tree init; *************** make_class_data (type) *** 1732,1737 **** --- 1665,1671 ---- PUSH_FIELD_VALUE (cons, "idt", null_pointer_node); PUSH_FIELD_VALUE (cons, "arrayclass", null_pointer_node); PUSH_FIELD_VALUE (cons, "protectionDomain", null_pointer_node); + PUSH_FIELD_VALUE (cons, "chain", null_pointer_node); FINISH_RECORD_CONSTRUCTOR (cons); *************** void *** 1748,1754 **** finish_class () { tree method; ! tree type_methods = TYPE_METHODS (CLASS_TO_HANDLE_TYPE (current_class)); int saw_native_method = 0; /* Find out if we have any native methods. We use this information --- 1682,1688 ---- finish_class () { tree method; ! tree type_methods = TYPE_METHODS (current_class); int saw_native_method = 0; /* Find out if we have any native methods. We use this information *************** maybe_layout_super_class (super_class, t *** 1932,1939 **** super_class = TREE_TYPE (super_class); else { super_class = do_resolve_class (NULL_TREE, /* FIXME? */ ! super_class, NULL_TREE, this_class); if (!super_class) return NULL_TREE; /* FIXME, NULL_TREE not checked by caller. */ super_class = TREE_TYPE (super_class); --- 1866,1884 ---- super_class = TREE_TYPE (super_class); else { + /* do_resolve_class expects an EXPR_WITH_FILE_LOCATION, so + we give it one. */ + tree this_wrap = NULL_TREE; + + if (this_class) + { + tree this_decl = TYPE_NAME (this_class); + this_wrap = build_expr_wfl (this_class, + DECL_SOURCE_FILE (this_decl), + DECL_SOURCE_LINE (this_decl), 0); + } super_class = do_resolve_class (NULL_TREE, /* FIXME? */ ! super_class, NULL_TREE, this_wrap); if (!super_class) return NULL_TREE; /* FIXME, NULL_TREE not checked by caller. */ super_class = TREE_TYPE (super_class); *************** layout_class_methods (this_class) *** 2054,2066 **** tree this_class; { tree method_decl, dtable_count; ! tree super_class, handle_type; if (TYPE_NVIRTUALS (this_class)) return; super_class = CLASSTYPE_SUPER (this_class); - handle_type = CLASS_TO_HANDLE_TYPE (this_class); if (super_class) { --- 1999,2010 ---- tree this_class; { tree method_decl, dtable_count; ! tree super_class; if (TYPE_NVIRTUALS (this_class)) return; super_class = CLASSTYPE_SUPER (this_class); if (super_class) { *************** layout_class_methods (this_class) *** 2072,2089 **** else dtable_count = integer_zero_node; ! TYPE_METHODS (handle_type) = nreverse (TYPE_METHODS (handle_type)); ! for (method_decl = TYPE_METHODS (handle_type); method_decl; method_decl = TREE_CHAIN (method_decl)) dtable_count = layout_class_method (this_class, super_class, method_decl, dtable_count); TYPE_NVIRTUALS (this_class) = dtable_count; - - #ifdef JAVA_USE_HANDLES - layout_type (handle_type); - #endif } /* Return 0 if NAME is equal to STR, -1 if STR is "less" than NAME, --- 2016,2029 ---- else dtable_count = integer_zero_node; ! TYPE_METHODS (this_class) = nreverse (TYPE_METHODS (this_class)); ! for (method_decl = TYPE_METHODS (this_class); method_decl; method_decl = TREE_CHAIN (method_decl)) dtable_count = layout_class_method (this_class, super_class, method_decl, dtable_count); TYPE_NVIRTUALS (this_class) = dtable_count; } /* Return 0 if NAME is equal to STR, -1 if STR is "less" than NAME, *************** emit_offset_symbol_table () *** 2327,2338 **** void init_class_processing () { ! registerClass_libfunc = gen_rtx (SYMBOL_REF, Pmode, "_Jv_RegisterClass"); registerResource_libfunc = ! gen_rtx (SYMBOL_REF, Pmode, "_Jv_RegisterResource"); ! ggc_add_tree_root (class_roots, sizeof (class_roots) / sizeof (tree)); fields_ident = get_identifier ("fields"); info_ident = get_identifier ("info"); - ggc_add_rtx_root (®isterClass_libfunc, 1); gcc_obstack_init (&temporary_obstack); } --- 2267,2351 ---- void init_class_processing () { ! registerClass_libfunc = gen_rtx_SYMBOL_REF (Pmode, "_Jv_RegisterClass"); registerResource_libfunc = ! gen_rtx_SYMBOL_REF (Pmode, "_Jv_RegisterResource"); fields_ident = get_identifier ("fields"); info_ident = get_identifier ("info"); gcc_obstack_init (&temporary_obstack); } + + static hashval_t java_treetreehash_hash PARAMS ((const void *)); + static int java_treetreehash_compare PARAMS ((const void *, const void *)); + + /* A hash table mapping trees to trees. Used generally. */ + + #define JAVA_TREEHASHHASH_H(t) (htab_hash_pointer (t)) + + static hashval_t + java_treetreehash_hash (k_p) + const void *k_p; + { + struct treetreehash_entry *k = (struct treetreehash_entry *) k_p; + return JAVA_TREEHASHHASH_H (k->key); + } + + static int + java_treetreehash_compare (k1_p, k2_p) + const void * k1_p; + const void * k2_p; + { + struct treetreehash_entry * k1 = (struct treetreehash_entry *) k1_p; + tree k2 = (tree) k2_p; + return (k1->key == k2); + } + + tree + java_treetreehash_find (ht, t) + htab_t ht; + tree t; + { + struct treetreehash_entry *e; + hashval_t hv = JAVA_TREEHASHHASH_H (t); + e = (struct treetreehash_entry *) htab_find_with_hash (ht, t, hv); + if (e == NULL) + return NULL; + else + return e->value; + } + + tree * + java_treetreehash_new (ht, t) + htab_t ht; + tree t; + { + PTR *e; + struct treetreehash_entry *tthe; + hashval_t hv = JAVA_TREEHASHHASH_H (t); + + e = htab_find_slot_with_hash (ht, t, hv, INSERT); + if (*e == NULL) + { + tthe = (*ht->alloc_f) (1, sizeof (*tthe)); + tthe->key = t; + *e = (PTR) tthe; + } + else + tthe = (struct treetreehash_entry *) *e; + return &tthe->value; + } + + htab_t + java_treetreehash_create (size, gc) + size_t size; + int gc; + { + if (gc) + return htab_create_ggc (size, java_treetreehash_hash, + java_treetreehash_compare, NULL); + else + return htab_create_alloc (size, java_treetreehash_hash, + java_treetreehash_compare, free, xcalloc, free); + } + + #include "gt-java-class.h" diff -Nrc3pad gcc-3.2.3/gcc/java/config-lang.in gcc-3.3/gcc/java/config-lang.in *** gcc-3.2.3/gcc/java/config-lang.in 2001-12-20 00:20:47.000000000 +0000 --- gcc-3.3/gcc/java/config-lang.in 2002-06-04 07:10:47.000000000 +0000 *************** compilers="jc1\$(exeext) jvgenmain\$(exe *** 36,41 **** --- 36,43 ---- stagestuff="jc1\$(exeext) gcj\$(exeext) jvgenmain\$(exeext) gcjh\$(exeext) jv-scan\$(exeext) jcf-dump\$(exeext)" + gtfiles="\$(srcdir)/java/java-tree.h \$(srcdir)/java/builtins.c \$(srcdir)/java/class.c \$(srcdir)/java/constants.c \$(srcdir)/java/decl.c \$(srcdir)/java/expr.c \$(srcdir)/java/jcf-parse.c \$(srcdir)/java/jcf-write.c \$(srcdir)/java/lang.c \$(srcdir)/java/mangle.c \$(srcdir)/java/parse.y" + target_libs=${libgcj_saved} lang_dirs="zlib fastjar" #build_by_default=no diff -Nrc3pad gcc-3.2.3/gcc/java/constants.c gcc-3.3/gcc/java/constants.c *** gcc-3.2.3/gcc/java/constants.c 2001-04-26 18:32:22.000000000 +0000 --- gcc-3.3/gcc/java/constants.c 2002-11-18 15:46:32.000000000 +0000 *************** The Free Software Foundation is independ *** 29,36 **** #include "toplev.h" #include "ggc.h" - extern struct obstack permanent_obstack; - static void set_constant_entry PARAMS ((CPool *, int, int, jword)); static int find_class_or_string_constant PARAMS ((CPool *, int, tree)); static int find_name_and_type_constant PARAMS ((CPool *, tree, tree)); --- 29,34 ---- *************** set_constant_entry (cpool, index, tag, v *** 49,56 **** if (cpool->data == NULL) { cpool->capacity = 100; ! cpool->tags = (uint8*) xmalloc (sizeof(uint8) * cpool->capacity); ! cpool->data = (jword*) xmalloc (sizeof(jword) * cpool->capacity); cpool->count = 1; } if (index >= cpool->capacity) --- 47,54 ---- if (cpool->data == NULL) { cpool->capacity = 100; ! cpool->tags = xmalloc (sizeof(uint8) * cpool->capacity); ! cpool->data = xmalloc (sizeof(jword) * cpool->capacity); cpool->count = 1; } if (index >= cpool->capacity) *************** set_constant_entry (cpool, index, tag, v *** 58,67 **** cpool->capacity *= 2; if (index >= cpool->capacity) cpool->capacity = index + 10; ! cpool->tags = (uint8*) xrealloc (cpool->tags, ! sizeof(uint8) * cpool->capacity); ! cpool->data = (jword*) xrealloc (cpool->data, ! sizeof(jword) * cpool->capacity); } if (index >= cpool->count) cpool->count = index + 1; --- 56,63 ---- cpool->capacity *= 2; if (index >= cpool->capacity) cpool->capacity = index + 10; ! cpool->tags = xrealloc (cpool->tags, sizeof(uint8) * cpool->capacity); ! cpool->data = xrealloc (cpool->data, sizeof(jword) * cpool->capacity); } if (index >= cpool->count) cpool->count = index + 1; *************** write_constant_pool (cpool, buffer, leng *** 326,345 **** CPool *outgoing_cpool; static tree get_tag_node (tag) int tag; { /* A Cache for build_int_2 (CONSTANT_XXX, 0). */ - static tree tag_nodes[13]; - static int initialized_p; - - /* Register the TAG_NODES with the garbage collector. */ - if (!initialized_p) - { - ggc_add_tree_root (tag_nodes, 13); - initialized_p = 1; - } if (tag_nodes[tag] == NULL_TREE) tag_nodes[tag] = build_int_2 (tag, 0); --- 322,333 ---- CPool *outgoing_cpool; + static GTY(()) tree tag_nodes[13]; static tree get_tag_node (tag) int tag; { /* A Cache for build_int_2 (CONSTANT_XXX, 0). */ if (tag_nodes[tag] == NULL_TREE) tag_nodes[tag] = build_int_2 (tag, 0); *************** build_constants_constructor () *** 492,494 **** --- 480,484 ---- FINISH_RECORD_CONSTRUCTOR (cons); return cons; } + + #include "gt-java-constants.h" diff -Nrc3pad gcc-3.2.3/gcc/java/decl.c gcc-3.3/gcc/java/decl.c *** gcc-3.2.3/gcc/java/decl.c 2002-04-17 23:20:43.000000000 +0000 --- gcc-3.3/gcc/java/decl.c 2003-02-12 23:38:02.000000000 +0000 *************** *** 1,6 **** /* Process declarations and variables for the GNU compiler for the Java(TM) language. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,6 ---- /* Process declarations and variables for the GNU compiler for the Java(TM) language. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** The Free Software Foundation is independ *** 30,35 **** --- 30,36 ---- #include "system.h" #include "tree.h" #include "rtl.h" + #include "real.h" #include "toplev.h" #include "flags.h" #include "java-tree.h" *************** The Free Software Foundation is independ *** 40,48 **** #include "except.h" #include "java-except.h" #include "ggc.h" #if defined (DEBUG_JAVA_BINDING_LEVELS) ! extern void indent PROTO((void)); #endif static tree push_jvm_slot PARAMS ((int, tree)); --- 41,51 ---- #include "except.h" #include "java-except.h" #include "ggc.h" + #include "timevar.h" + #include "tree-inline.h" #if defined (DEBUG_JAVA_BINDING_LEVELS) ! extern void indent PARAMS ((void)); #endif static tree push_jvm_slot PARAMS ((int, tree)); *************** static struct binding_level *make_bindin *** 52,59 **** static tree create_primitive_vtable PARAMS ((const char *)); static tree check_local_named_variable PARAMS ((tree, tree, int, int *)); static tree check_local_unnamed_variable PARAMS ((tree, tree, tree)); ! /* Set to non-zero value in order to emit class initilization code before static field references. */ extern int always_initialize_class_p; --- 55,69 ---- static tree create_primitive_vtable PARAMS ((const char *)); static tree check_local_named_variable PARAMS ((tree, tree, int, int *)); static tree check_local_unnamed_variable PARAMS ((tree, tree, tree)); + static void dump_function PARAMS ((enum tree_dump_index, tree)); ! /* Name of the Cloneable class. */ ! tree java_lang_cloneable_identifier_node; ! ! /* Name of the Serializable class. */ ! tree java_io_serializable_identifier_node; ! ! /* Set to nonzero value in order to emit class initilization code before static field references. */ extern int always_initialize_class_p; *************** extern int always_initialize_class_p; *** 65,76 **** DECL_LOCAL_SLOT_CHAIN; the index finds the TREE_VEC element, and then we search the chain for a decl with a matching TREE_TYPE. */ ! tree decl_map; /* A list of local variables VAR_DECLs for this method that we have seen debug information, but we have not reached their starting (byte) PC yet. */ ! static tree pending_local_decls = NULL_TREE; /* Push a local variable or stack slot into the decl_map, and assign it an rtl. */ --- 75,86 ---- DECL_LOCAL_SLOT_CHAIN; the index finds the TREE_VEC element, and then we search the chain for a decl with a matching TREE_TYPE. */ ! static GTY(()) tree decl_map; /* A list of local variables VAR_DECLs for this method that we have seen debug information, but we have not reached their starting (byte) PC yet. */ ! static GTY(()) tree pending_local_decls; /* Push a local variable or stack slot into the decl_map, and assign it an rtl. */ *************** static struct binding_level *global_bind *** 307,313 **** /* Binding level structures are initialized by copying this one. */ ! static struct binding_level clear_binding_level = {NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, NULL_BINDING_LEVEL, LARGEST_PC, 0}; --- 317,323 ---- /* Binding level structures are initialized by copying this one. */ ! static const struct binding_level clear_binding_level = {NULL_TREE, NULL_TREE, NULL_TREE, NULL_TREE, NULL_BINDING_LEVEL, LARGEST_PC, 0}; *************** static tree named_labels; *** 323,330 **** static tree shadowed_labels; #endif - int flag_traditional; - tree java_global_trees[JTI_MAX]; /* Build (and pushdecl) a "promoted type" for all standard --- 333,338 ---- *************** push_promoted_type (name, actual_type) *** 359,373 **** See tree.h for its possible values. If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME, ! the name to be called if we can't opencode the function. */ tree ! builtin_function (name, type, function_code, class, library_name) const char *name; tree type; int function_code; enum built_in_class class; const char *library_name; { tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type); DECL_EXTERNAL (decl) = 1; --- 367,383 ---- See tree.h for its possible values. If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME, ! the name to be called if we can't opencode the function. If ! ATTRS is nonzero, use that for the function's attribute list. */ tree ! builtin_function (name, type, function_code, class, library_name, attrs) const char *name; tree type; int function_code; enum built_in_class class; const char *library_name; + tree attrs ATTRIBUTE_UNUSED; { tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type); DECL_EXTERNAL (decl) = 1; *************** java_init_decl_processing () *** 443,455 **** set_sizetype (make_unsigned_type (POINTER_SIZE)); /* Define these next since types below may used them. */ ! integer_type_node = type_for_size (INT_TYPE_SIZE, 0); integer_zero_node = build_int_2 (0, 0); integer_one_node = build_int_2 (1, 0); integer_two_node = build_int_2 (2, 0); integer_four_node = build_int_2 (4, 0); integer_minus_one_node = build_int_2 (-1, -1); size_zero_node = size_int (0); size_one_node = size_int (1); bitsize_zero_node = bitsize_int (0); --- 453,479 ---- set_sizetype (make_unsigned_type (POINTER_SIZE)); /* Define these next since types below may used them. */ ! integer_type_node = java_type_for_size (INT_TYPE_SIZE, 0); integer_zero_node = build_int_2 (0, 0); integer_one_node = build_int_2 (1, 0); integer_two_node = build_int_2 (2, 0); integer_four_node = build_int_2 (4, 0); integer_minus_one_node = build_int_2 (-1, -1); + /* A few values used for range checking in the lexer. */ + decimal_int_max = build_int_2 (0x80000000, 0); + TREE_TYPE (decimal_int_max) = unsigned_int_type_node; + #if HOST_BITS_PER_WIDE_INT == 64 + decimal_long_max = build_int_2 (0x8000000000000000LL, 0); + #else + #if HOST_BITS_PER_WIDE_INT == 32 + decimal_long_max = build_int_2 (0, 0x80000000); + #else + #error "unsupported size" + #endif + #endif + TREE_TYPE (decimal_long_max) = unsigned_long_type_node; + size_zero_node = size_int (0); size_one_node = size_int (1); bitsize_zero_node = bitsize_int (0); *************** java_init_decl_processing () *** 583,588 **** --- 607,616 ---- access0_identifier_node = get_identifier ("access$0"); classdollar_identifier_node = get_identifier ("class$"); + java_lang_cloneable_identifier_node = get_identifier ("java.lang.Cloneable"); + java_io_serializable_identifier_node = + get_identifier ("java.io.Serializable"); + /* for lack of a better place to put this stub call */ init_expr_processing(); *************** java_init_decl_processing () *** 607,612 **** --- 635,641 ---- one_elt_array_domain_type = build_index_type (integer_one_node); otable_type = build_array_type (integer_type_node, one_elt_array_domain_type); + TYPE_NONALIASED_COMPONENT (otable_type) = 1; otable_ptr_type = build_pointer_type (otable_type); method_symbol_type = make_node (RECORD_TYPE); *************** java_init_decl_processing () *** 679,684 **** --- 708,714 ---- PUSH_FIELD (class_type_node, field, "idt", ptr_type_node); PUSH_FIELD (class_type_node, field, "arrayclass", ptr_type_node); PUSH_FIELD (class_type_node, field, "protectionDomain", ptr_type_node); + PUSH_FIELD (class_type_node, field, "chain", ptr_type_node); for (t = TYPE_FIELDS (class_type_node); t != NULL_TREE; t = TREE_CHAIN (t)) FIELD_PRIVATE (t) = 1; push_super_field (class_type_node, object_type_node); *************** java_init_decl_processing () *** 750,788 **** tree_cons (NULL_TREE, int_type_node, endlink)); alloc_object_node = builtin_function ("_Jv_AllocObject", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); DECL_IS_MALLOC (alloc_object_node) = 1; alloc_no_finalizer_node = builtin_function ("_Jv_AllocObjectNoFinalizer", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); DECL_IS_MALLOC (alloc_no_finalizer_node) = 1; t = tree_cons (NULL_TREE, ptr_type_node, endlink); soft_initclass_node = builtin_function ("_Jv_InitClass", build_function_type (void_type_node, t), ! 0, NOT_BUILT_IN, NULL); throw_node = builtin_function ("_Jv_Throw", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); /* Mark throw_nodes as `noreturn' functions with side effects. */ TREE_THIS_VOLATILE (throw_node) = 1; TREE_SIDE_EFFECTS (throw_node) = 1; t = build_function_type (int_type_node, endlink); soft_monitorenter_node ! = builtin_function ("_Jv_MonitorEnter", t, 0, NOT_BUILT_IN, NULL); soft_monitorexit_node ! = builtin_function ("_Jv_MonitorExit", t, 0, NOT_BUILT_IN, NULL); t = tree_cons (NULL_TREE, int_type_node, tree_cons (NULL_TREE, int_type_node, endlink)); soft_newarray_node = builtin_function ("_Jv_NewPrimArray", build_function_type(ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); DECL_IS_MALLOC (soft_newarray_node) = 1; t = tree_cons (NULL_TREE, int_type_node, --- 780,820 ---- tree_cons (NULL_TREE, int_type_node, endlink)); alloc_object_node = builtin_function ("_Jv_AllocObject", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); DECL_IS_MALLOC (alloc_object_node) = 1; alloc_no_finalizer_node = builtin_function ("_Jv_AllocObjectNoFinalizer", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); DECL_IS_MALLOC (alloc_no_finalizer_node) = 1; t = tree_cons (NULL_TREE, ptr_type_node, endlink); soft_initclass_node = builtin_function ("_Jv_InitClass", build_function_type (void_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); throw_node = builtin_function ("_Jv_Throw", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); /* Mark throw_nodes as `noreturn' functions with side effects. */ TREE_THIS_VOLATILE (throw_node) = 1; TREE_SIDE_EFFECTS (throw_node) = 1; t = build_function_type (int_type_node, endlink); soft_monitorenter_node ! = builtin_function ("_Jv_MonitorEnter", t, 0, NOT_BUILT_IN, ! NULL, NULL_TREE); soft_monitorexit_node ! = builtin_function ("_Jv_MonitorExit", t, 0, NOT_BUILT_IN, ! NULL, NULL_TREE); t = tree_cons (NULL_TREE, int_type_node, tree_cons (NULL_TREE, int_type_node, endlink)); soft_newarray_node = builtin_function ("_Jv_NewPrimArray", build_function_type(ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); DECL_IS_MALLOC (soft_newarray_node) = 1; t = tree_cons (NULL_TREE, int_type_node, *************** java_init_decl_processing () *** 791,812 **** soft_anewarray_node = builtin_function ("_Jv_NewObjectArray", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); DECL_IS_MALLOC (soft_anewarray_node) = 1; t = tree_cons (NULL_TREE, ptr_type_node, ! tree_cons (NULL_TREE, int_type_node, endlink)); soft_multianewarray_node = builtin_function ("_Jv_NewMultiArray", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); DECL_IS_MALLOC (soft_multianewarray_node) = 1; t = build_function_type (void_type_node, tree_cons (NULL_TREE, int_type_node, endlink)); soft_badarrayindex_node = builtin_function ("_Jv_ThrowBadArrayIndex", t, ! 0, NOT_BUILT_IN, NULL); /* Mark soft_badarrayindex_node as a `noreturn' function with side effects. */ TREE_THIS_VOLATILE (soft_badarrayindex_node) = 1; --- 823,846 ---- soft_anewarray_node = builtin_function ("_Jv_NewObjectArray", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); DECL_IS_MALLOC (soft_anewarray_node) = 1; + /* There is no endlink here because _Jv_NewMultiArray is a varargs + function. */ t = tree_cons (NULL_TREE, ptr_type_node, ! tree_cons (NULL_TREE, int_type_node, NULL_TREE)); soft_multianewarray_node = builtin_function ("_Jv_NewMultiArray", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); DECL_IS_MALLOC (soft_multianewarray_node) = 1; t = build_function_type (void_type_node, tree_cons (NULL_TREE, int_type_node, endlink)); soft_badarrayindex_node = builtin_function ("_Jv_ThrowBadArrayIndex", t, ! 0, NOT_BUILT_IN, NULL, NULL_TREE); /* Mark soft_badarrayindex_node as a `noreturn' function with side effects. */ TREE_THIS_VOLATILE (soft_badarrayindex_node) = 1; *************** java_init_decl_processing () *** 815,821 **** soft_nullpointer_node = builtin_function ("_Jv_ThrowNullPointerException", build_function_type (void_type_node, endlink), ! 0, NOT_BUILT_IN, NULL); /* Mark soft_nullpointer_node as a `noreturn' function with side effects. */ TREE_THIS_VOLATILE (soft_nullpointer_node) = 1; --- 849,855 ---- soft_nullpointer_node = builtin_function ("_Jv_ThrowNullPointerException", build_function_type (void_type_node, endlink), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); /* Mark soft_nullpointer_node as a `noreturn' function with side effects. */ TREE_THIS_VOLATILE (soft_nullpointer_node) = 1; *************** java_init_decl_processing () *** 826,875 **** soft_checkcast_node = builtin_function ("_Jv_CheckCast", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); t = tree_cons (NULL_TREE, object_ptr_type_node, tree_cons (NULL_TREE, class_ptr_type, endlink)); soft_instanceof_node = builtin_function ("_Jv_IsInstanceOf", build_function_type (boolean_type_node, t), ! 0, NOT_BUILT_IN, NULL); t = tree_cons (NULL_TREE, object_ptr_type_node, tree_cons (NULL_TREE, object_ptr_type_node, endlink)); soft_checkarraystore_node = builtin_function ("_Jv_CheckArrayStore", build_function_type (void_type_node, t), ! 0, NOT_BUILT_IN, NULL); t = tree_cons (NULL_TREE, ptr_type_node, tree_cons (NULL_TREE, ptr_type_node, tree_cons (NULL_TREE, int_type_node, endlink))); soft_lookupinterfacemethod_node = builtin_function ("_Jv_LookupInterfaceMethodIdx", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); t = tree_cons (NULL_TREE, object_ptr_type_node, tree_cons (NULL_TREE, ptr_type_node, ! tree_cons (NULL_TREE, ptr_type_node, endlink))); soft_lookupjnimethod_node = builtin_function ("_Jv_LookupJNIMethod", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); t = tree_cons (NULL_TREE, ptr_type_node, endlink); soft_getjnienvnewframe_node = builtin_function ("_Jv_GetJNIEnvNewFrame", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); soft_jnipopsystemframe_node = builtin_function ("_Jv_JNI_PopSystemFrame", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL); t = tree_cons (NULL_TREE, double_type_node, tree_cons (NULL_TREE, double_type_node, endlink)); soft_fmod_node = builtin_function ("__builtin_fmod", build_function_type (double_type_node, t), ! BUILT_IN_FMOD, BUILT_IN_NORMAL, "fmod"); #if 0 t = tree_cons (NULL_TREE, float_type_node, --- 860,911 ---- soft_checkcast_node = builtin_function ("_Jv_CheckCast", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); t = tree_cons (NULL_TREE, object_ptr_type_node, tree_cons (NULL_TREE, class_ptr_type, endlink)); soft_instanceof_node = builtin_function ("_Jv_IsInstanceOf", build_function_type (boolean_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); t = tree_cons (NULL_TREE, object_ptr_type_node, tree_cons (NULL_TREE, object_ptr_type_node, endlink)); soft_checkarraystore_node = builtin_function ("_Jv_CheckArrayStore", build_function_type (void_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); t = tree_cons (NULL_TREE, ptr_type_node, tree_cons (NULL_TREE, ptr_type_node, tree_cons (NULL_TREE, int_type_node, endlink))); soft_lookupinterfacemethod_node = builtin_function ("_Jv_LookupInterfaceMethodIdx", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); t = tree_cons (NULL_TREE, object_ptr_type_node, tree_cons (NULL_TREE, ptr_type_node, ! tree_cons (NULL_TREE, ptr_type_node, ! tree_cons (NULL_TREE, int_type_node, ! endlink)))); soft_lookupjnimethod_node = builtin_function ("_Jv_LookupJNIMethod", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); t = tree_cons (NULL_TREE, ptr_type_node, endlink); soft_getjnienvnewframe_node = builtin_function ("_Jv_GetJNIEnvNewFrame", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); soft_jnipopsystemframe_node = builtin_function ("_Jv_JNI_PopSystemFrame", build_function_type (ptr_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); t = tree_cons (NULL_TREE, double_type_node, tree_cons (NULL_TREE, double_type_node, endlink)); soft_fmod_node = builtin_function ("__builtin_fmod", build_function_type (double_type_node, t), ! BUILT_IN_FMOD, BUILT_IN_NORMAL, "fmod", NULL_TREE); #if 0 t = tree_cons (NULL_TREE, float_type_node, *************** java_init_decl_processing () *** 877,904 **** soft_fmodf_node = builtin_function ("__builtin_fmodf", build_function_type (float_type_node, t), ! BUILT_IN_FMOD, BUILT_IN_NORMAL, "fmodf"); #endif soft_idiv_node = builtin_function ("_Jv_divI", build_function_type (int_type_node, t), ! 0, NOT_BUILT_IN, NULL); soft_irem_node = builtin_function ("_Jv_remI", build_function_type (int_type_node, t), ! 0, NOT_BUILT_IN, NULL); soft_ldiv_node = builtin_function ("_Jv_divJ", build_function_type (long_type_node, t), ! 0, NOT_BUILT_IN, NULL); soft_lrem_node = builtin_function ("_Jv_remJ", build_function_type (long_type_node, t), ! 0, NOT_BUILT_IN, NULL); /* Initialize variables for except.c. */ eh_personality_libfunc = init_one_libfunc (USING_SJLJ_EXCEPTIONS --- 913,940 ---- soft_fmodf_node = builtin_function ("__builtin_fmodf", build_function_type (float_type_node, t), ! BUILT_IN_FMOD, BUILT_IN_NORMAL, "fmodf", NULL_TREE); #endif soft_idiv_node = builtin_function ("_Jv_divI", build_function_type (int_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); soft_irem_node = builtin_function ("_Jv_remI", build_function_type (int_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); soft_ldiv_node = builtin_function ("_Jv_divJ", build_function_type (long_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); soft_lrem_node = builtin_function ("_Jv_remJ", build_function_type (long_type_node, t), ! 0, NOT_BUILT_IN, NULL, NULL_TREE); /* Initialize variables for except.c. */ eh_personality_libfunc = init_one_libfunc (USING_SJLJ_EXCEPTIONS *************** java_init_decl_processing () *** 908,919 **** init_jcf_parse (); - /* Register nodes with the garbage collector. */ - ggc_add_tree_root (java_global_trees, - sizeof (java_global_trees) / sizeof (tree)); - ggc_add_tree_root (&decl_map, 1); - ggc_add_tree_root (&pending_local_decls, 1); - initialize_builtins (); } --- 944,949 ---- *************** static struct binding_level * *** 1168,1174 **** make_binding_level () { /* NOSTRICT */ ! return (struct binding_level *) xmalloc (sizeof (struct binding_level)); } void --- 1198,1204 ---- make_binding_level () { /* NOSTRICT */ ! return xmalloc (sizeof (struct binding_level)); } void *************** set_block (block) *** 1545,1570 **** /* integrate_decl_tree calls this function. */ void ! copy_lang_decl (node) tree node; { ! int lang_decl_size ! = TREE_CODE (node) == VAR_DECL ? sizeof (struct lang_decl_var) ! : sizeof (struct lang_decl); ! struct lang_decl *x = (struct lang_decl *) ggc_alloc (lang_decl_size); ! memcpy (x, DECL_LANG_SPECIFIC (node), lang_decl_size); ! DECL_LANG_SPECIFIC (node) = x; ! } ! /* If DECL has a cleanup, build and return that cleanup here. ! This is a callback called by expand_expr. */ ! tree ! maybe_build_cleanup (decl) ! tree decl ATTRIBUTE_UNUSED; ! { ! /* There are no cleanups in Java (I think). */ ! return NULL_TREE; } void --- 1575,1593 ---- /* integrate_decl_tree calls this function. */ void ! java_dup_lang_specific_decl (node) tree node; { ! int lang_decl_size; ! struct lang_decl *x; ! if (!DECL_LANG_SPECIFIC (node)) ! return; ! lang_decl_size = sizeof (struct lang_decl); ! x = (struct lang_decl *) ggc_alloc (lang_decl_size); ! memcpy (x, DECL_LANG_SPECIFIC (node), lang_decl_size); ! DECL_LANG_SPECIFIC (node) = x; } void *************** build_result_decl (fndecl) *** 1671,1681 **** tree fndecl; { tree restype = TREE_TYPE (TREE_TYPE (fndecl)); ! /* To be compatible with C_PROMOTING_INTEGER_TYPE_P in cc1/cc1plus. */ ! if (INTEGRAL_TYPE_P (restype) ! && TYPE_PRECISION (restype) < TYPE_PRECISION (integer_type_node)) ! restype = integer_type_node; ! return (DECL_RESULT (fndecl) = build_decl (RESULT_DECL, NULL_TREE, restype)); } void --- 1694,1711 ---- tree fndecl; { tree restype = TREE_TYPE (TREE_TYPE (fndecl)); ! tree result = DECL_RESULT (fndecl); ! if (! result) ! { ! /* To be compatible with C_PROMOTING_INTEGER_TYPE_P in cc1/cc1plus. */ ! if (INTEGRAL_TYPE_P (restype) ! && TYPE_PRECISION (restype) < TYPE_PRECISION (integer_type_node)) ! restype = integer_type_node; ! result = build_decl (RESULT_DECL, NULL_TREE, restype); ! DECL_CONTEXT (result) = fndecl; ! DECL_RESULT (fndecl) = result; ! } ! return result; } void *************** start_java_method (fndecl) *** 1763,1772 **** i = DECL_MAX_LOCALS(fndecl) + DECL_MAX_STACK(fndecl); decl_map = make_tree_vec (i); ! type_map = (tree *) xrealloc (type_map, i * sizeof (tree)); #if defined(DEBUG_JAVA_BINDING_LEVELS) ! fprintf (stderr, "%s:\n", (*decl_printable_name) (fndecl, 2)); current_pc = 0; #endif /* defined(DEBUG_JAVA_BINDING_LEVELS) */ pushlevel (1); /* Push parameters. */ --- 1793,1802 ---- i = DECL_MAX_LOCALS(fndecl) + DECL_MAX_STACK(fndecl); decl_map = make_tree_vec (i); ! type_map = xrealloc (type_map, i * sizeof (tree)); #if defined(DEBUG_JAVA_BINDING_LEVELS) ! fprintf (stderr, "%s:\n", lang_printable_name (fndecl, 2)); current_pc = 0; #endif /* defined(DEBUG_JAVA_BINDING_LEVELS) */ pushlevel (1); /* Push parameters. */ *************** end_java_method () *** 1834,1897 **** current_function_decl = NULL_TREE; } ! /* Mark language-specific parts of T for garbage-collection. */ ! void ! lang_mark_tree (t) ! tree t; { ! if (TREE_CODE (t) == IDENTIFIER_NODE) ! { ! struct lang_identifier *li = (struct lang_identifier *) t; ! ggc_mark_tree (li->global_value); ! ggc_mark_tree (li->local_value); ! ggc_mark_tree (li->utf8_ref); ! } ! else if (TREE_CODE (t) == VAR_DECL ! || TREE_CODE (t) == PARM_DECL ! || TREE_CODE (t) == FIELD_DECL) ! { ! struct lang_decl_var *ldv = ! ((struct lang_decl_var *) DECL_LANG_SPECIFIC (t)); ! if (ldv) ! { ! ggc_mark (ldv); ! ggc_mark_tree (ldv->slot_chain); ! ggc_mark_tree (ldv->am); ! ggc_mark_tree (ldv->wfl); ! } ! } ! else if (TREE_CODE (t) == FUNCTION_DECL) { ! struct lang_decl *ld = DECL_LANG_SPECIFIC (t); ! ! if (ld) ! { ! ggc_mark (ld); ! ggc_mark_tree (ld->wfl); ! ggc_mark_tree (ld->throws_list); ! ggc_mark_tree (ld->function_decl_body); ! ggc_mark_tree (ld->called_constructor); ! ggc_mark_tree (ld->inner_access); ! ggc_mark_tree_hash_table (&ld->init_test_table); ! ggc_mark_tree_hash_table (&ld->ict); ! ggc_mark_tree (ld->smic); ! } } ! else if (TYPE_P (t)) { ! struct lang_type *lt = TYPE_LANG_SPECIFIC (t); ! ! if (lt) ! { ! ggc_mark (lt); ! ggc_mark_tree (lt->signature); ! ggc_mark_tree (lt->cpool_data_ref); ! ggc_mark_tree (lt->finit_stmt_list); ! ggc_mark_tree (lt->clinit_stmt_list); ! ggc_mark_tree (lt->ii_block); ! ggc_mark_tree (lt->dot_class); ! ggc_mark_tree (lt->package_list); ! } } } --- 1864,1897 ---- current_function_decl = NULL_TREE; } ! /* Dump FUNCTION_DECL FN as tree dump PHASE. */ ! static void ! dump_function (phase, fn) ! enum tree_dump_index phase; ! tree fn; { ! FILE *stream; ! int flags; ! ! stream = dump_begin (phase, &flags); ! if (stream) { ! dump_node (fn, TDF_SLIM | flags, stream); ! dump_end (phase, stream); } ! } ! ! void java_optimize_inline (fndecl) ! tree fndecl; ! { ! if (flag_inline_trees) { ! timevar_push (TV_INTEGRATION); ! optimize_inline_calls (fndecl); ! timevar_pop (TV_INTEGRATION); ! dump_function (TDI_inlined, fndecl); } } + + #include "gt-java-decl.h" diff -Nrc3pad gcc-3.2.3/gcc/java/except.c gcc-3.3/gcc/java/except.c *** gcc-3.2.3/gcc/java/except.c 2002-03-29 00:41:17.000000000 +0000 --- gcc-3.3/gcc/java/except.c 2002-11-18 15:46:32.000000000 +0000 *************** static void link_handler PARAMS ((struct *** 44,51 **** static void check_start_handlers PARAMS ((struct eh_range *, int)); static void free_eh_ranges PARAMS ((struct eh_range *range)); - extern struct obstack permanent_obstack; - struct eh_range *current_method_handlers; struct eh_range *current_try_block = NULL; --- 44,49 ---- *************** static struct eh_range *cache_next_child *** 63,71 **** struct eh_range whole_range; #if defined(DEBUG_JAVA_BINDING_LEVELS) ! int binding_depth; ! int is_class_level; ! int current_pc; extern void indent (); #endif --- 61,69 ---- struct eh_range whole_range; #if defined(DEBUG_JAVA_BINDING_LEVELS) ! extern int binding_depth; ! extern int is_class_level; ! extern int current_pc; extern void indent (); #endif *************** link_handler (range, outer) *** 155,162 **** /* Handle overlapping ranges by splitting the new range. */ if (range->start_pc < outer->start_pc || range->end_pc > outer->end_pc) { ! struct eh_range *h ! = (struct eh_range *) xmalloc (sizeof (struct eh_range)); if (range->start_pc < outer->start_pc) { h->start_pc = range->start_pc; --- 153,159 ---- /* Handle overlapping ranges by splitting the new range. */ if (range->start_pc < outer->start_pc || range->end_pc > outer->end_pc) { ! struct eh_range *h = xmalloc (sizeof (struct eh_range)); if (range->start_pc < outer->start_pc) { h->start_pc = range->start_pc; *************** link_handler (range, outer) *** 174,179 **** --- 171,177 ---- h->handlers = build_tree_list (TREE_PURPOSE (range->handlers), TREE_VALUE (range->handlers)); h->next_sibling = NULL; + h->expanded = 0; /* Restart both from the top to avoid having to make this function smart about reentrancy. */ link_handler (h, &whole_range); *************** add_handler (start_pc, end_pc, handler, *** 287,293 **** prev = ptr; } ! h = (struct eh_range *) xmalloc (sizeof (struct eh_range)); h->start_pc = start_pc; h->end_pc = end_pc; h->first_child = NULL; --- 285,291 ---- prev = ptr; } ! h = xmalloc (sizeof (struct eh_range)); h->start_pc = start_pc; h->end_pc = end_pc; h->first_child = NULL; diff -Nrc3pad gcc-3.2.3/gcc/java/expr.c gcc-3.3/gcc/java/expr.c *** gcc-3.2.3/gcc/java/expr.c 2002-06-25 13:26:04.000000000 +0000 --- gcc-3.3/gcc/java/expr.c 2003-03-11 20:34:40.000000000 +0000 *************** *** 1,5 **** /* Process expressions for the GNU compiler for the Java(TM) language. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Process expressions for the GNU compiler for the Java(TM) language. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** static tree build_java_throw_out_of_boun *** 81,98 **** static tree build_java_check_indexed_type PARAMS ((tree, tree)); static tree case_identity PARAMS ((tree, tree)); static unsigned char peek_opcode_at_pc PARAMS ((struct JCF *, int, int)); ! static bool emit_init_test_initialization PARAMS ((struct hash_entry *, ! PTR ptr)); static int get_offset_table_index PARAMS ((tree)); ! static tree operand_type[59]; ! extern struct obstack permanent_obstack; ! static tree methods_ident = NULL_TREE; ! static tree ncode_ident = NULL_TREE; tree dtable_ident = NULL_TREE; ! /* Set to non-zero value in order to emit class initilization code before static field references. */ int always_initialize_class_p; --- 81,97 ---- static tree build_java_check_indexed_type PARAMS ((tree, tree)); static tree case_identity PARAMS ((tree, tree)); static unsigned char peek_opcode_at_pc PARAMS ((struct JCF *, int, int)); ! static int emit_init_test_initialization PARAMS ((void **entry, ! void * ptr)); static int get_offset_table_index PARAMS ((tree)); ! static GTY(()) tree operand_type[59]; ! static GTY(()) tree methods_ident; ! static GTY(()) tree ncode_ident; tree dtable_ident = NULL_TREE; ! /* Set to nonzero value in order to emit class initilization code before static field references. */ int always_initialize_class_p; *************** int always_initialize_class_p; *** 123,132 **** So dup cannot just add an extra element to the quick_stack, but iadd can. */ ! static tree quick_stack = NULL_TREE; /* A free-list of unused permamnet TREE_LIST nodes. */ ! static tree tree_list_free_list = NULL_TREE; /* The stack pointer of the Java virtual machine. This does include the size of the quick_stack. */ --- 122,131 ---- So dup cannot just add an extra element to the quick_stack, but iadd can. */ ! static GTY(()) tree quick_stack; /* A free-list of unused permamnet TREE_LIST nodes. */ ! static GTY((deletable (""))) tree tree_list_free_list; /* The stack pointer of the Java virtual machine. This does include the size of the quick_stack. */ *************** init_expr_processing() *** 144,158 **** operand_type[23] = operand_type[56] = float_type_node; operand_type[24] = operand_type[57] = double_type_node; operand_type[25] = operand_type[58] = ptr_type_node; - ggc_add_tree_root (operand_type, 59); - ggc_add_tree_root (&methods_ident, 1); - ggc_add_tree_root (&ncode_ident, 1); - ggc_add_tree_root (&quick_stack, 1); - ggc_add_tree_root (&tree_list_free_list, 1); } tree ! truthvalue_conversion (expr) tree expr; { /* It is simpler and generates better code to have only TRUTH_*_EXPR --- 143,152 ---- operand_type[23] = operand_type[56] = float_type_node; operand_type[24] = operand_type[57] = double_type_node; operand_type[25] = operand_type[58] = ptr_type_node; } tree ! java_truthvalue_conversion (expr) tree expr; { /* It is simpler and generates better code to have only TRUTH_*_EXPR *************** truthvalue_conversion (expr) *** 182,201 **** case ABS_EXPR: case FLOAT_EXPR: case FFS_EXPR: ! /* These don't change whether an object is non-zero or zero. */ ! return truthvalue_conversion (TREE_OPERAND (expr, 0)); case COND_EXPR: /* Distribute the conversion into the arms of a COND_EXPR. */ return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0), ! truthvalue_conversion (TREE_OPERAND (expr, 1)), ! truthvalue_conversion (TREE_OPERAND (expr, 2)))); case NOP_EXPR: /* If this is widening the argument, we can ignore it. */ if (TYPE_PRECISION (TREE_TYPE (expr)) >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0)))) ! return truthvalue_conversion (TREE_OPERAND (expr, 0)); /* fall through to default */ default: --- 176,195 ---- case ABS_EXPR: case FLOAT_EXPR: case FFS_EXPR: ! /* These don't change whether an object is nonzero or zero. */ ! return java_truthvalue_conversion (TREE_OPERAND (expr, 0)); case COND_EXPR: /* Distribute the conversion into the arms of a COND_EXPR. */ return fold (build (COND_EXPR, boolean_type_node, TREE_OPERAND (expr, 0), ! java_truthvalue_conversion (TREE_OPERAND (expr, 1)), ! java_truthvalue_conversion (TREE_OPERAND (expr, 2)))); case NOP_EXPR: /* If this is widening the argument, we can ignore it. */ if (TYPE_PRECISION (TREE_TYPE (expr)) >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0)))) ! return java_truthvalue_conversion (TREE_OPERAND (expr, 0)); /* fall through to default */ default: *************** truthvalue_conversion (expr) *** 203,224 **** } } - #ifdef JAVA_USE_HANDLES - /* Given a pointer to a handle, get a pointer to an object. */ - - tree - unhand_expr (expr) - tree expr; - { - tree field, handle_type; - expr = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (expr)), expr); - handle_type = TREE_TYPE (expr); - field = TYPE_FIELDS (handle_type); - expr = build (COMPONENT_REF, TREE_TYPE (field), expr, field); - return expr; - } - #endif - /* Save any stack slots that happen to be in the quick_stack into their home virtual register slots. --- 197,202 ---- *************** can_widen_reference_to (source_type, tar *** 409,421 **** return 1; else { - source_type = HANDLE_TO_CLASS_TYPE (source_type); - target_type = HANDLE_TO_CLASS_TYPE (target_type); if (TYPE_ARRAY_P (source_type) || TYPE_ARRAY_P (target_type)) { HOST_WIDE_INT source_length, target_length; if (TYPE_ARRAY_P (source_type) != TYPE_ARRAY_P (target_type)) ! return 0; target_length = java_array_type_length (target_type); if (target_length >= 0) { --- 387,402 ---- return 1; else { if (TYPE_ARRAY_P (source_type) || TYPE_ARRAY_P (target_type)) { HOST_WIDE_INT source_length, target_length; if (TYPE_ARRAY_P (source_type) != TYPE_ARRAY_P (target_type)) ! { ! /* An array implements Cloneable and Serializable. */ ! tree name = DECL_NAME (TYPE_NAME (target_type)); ! return (name == java_lang_cloneable_identifier_node ! || name == java_io_serializable_identifier_node); ! } target_length = java_array_type_length (target_type); if (target_length >= 0) { *************** build_java_array_length_access (node) *** 699,704 **** --- 680,694 ---- tree array_type = TREE_TYPE (type); HOST_WIDE_INT length; + /* JVM spec: If the arrayref is null, the arraylength instruction + throws a NullPointerException. The only way we could get a node + of type ptr_type_node at this point is `aconst_null; arraylength' + or something equivalent. */ + if (type == ptr_type_node) + return build (CALL_EXPR, int_type_node, + build_address_of (soft_nullpointer_node), + NULL_TREE, NULL_TREE); + if (!is_array_type_p (type)) abort (); *************** expand_java_arrayload (lhs_type_node ) *** 1052,1063 **** index_node = save_expr (index_node); array_node = save_expr (array_node); ! lhs_type_node = build_java_check_indexed_type (array_node, lhs_type_node); ! ! load_node = build_java_arrayaccess (array_node, ! lhs_type_node, ! index_node); ! if (INTEGRAL_TYPE_P (lhs_type_node) && TYPE_PRECISION (lhs_type_node) <= 32) load_node = fold (build1 (NOP_EXPR, int_type_node, load_node)); push_value (load_node); --- 1042,1062 ---- index_node = save_expr (index_node); array_node = save_expr (array_node); ! ! if (TREE_TYPE (array_node) == ptr_type_node) ! /* The only way we could get a node of type ptr_type_node at this ! point is `aconst_null; arraylength' or something equivalent, so ! unconditionally throw NullPointerException. */ ! load_node = build (CALL_EXPR, lhs_type_node, ! build_address_of (soft_nullpointer_node), ! NULL_TREE, NULL_TREE); ! else ! { ! lhs_type_node = build_java_check_indexed_type (array_node, lhs_type_node); ! load_node = build_java_arrayaccess (array_node, ! lhs_type_node, ! index_node); ! } if (INTEGRAL_TYPE_P (lhs_type_node) && TYPE_PRECISION (lhs_type_node) <= 32) load_node = fold (build1 (NOP_EXPR, int_type_node, load_node)); push_value (load_node); *************** expand_java_pushc (ival, type) *** 1108,1118 **** else if (type == float_type_node || type == double_type_node) { REAL_VALUE_TYPE x; - #ifdef REAL_ARITHMETIC REAL_VALUE_FROM_INT (x, ival, 0, TYPE_MODE (type)); - #else - x = ival; - #endif value = build_real (type, x); } else --- 1107,1113 ---- *************** build_instanceof (value, type) *** 1260,1268 **** /* Anything except `null' is an instance of Object. Likewise, if the object is known to be an instance of the class, then we only need to check for `null'. */ ! expr = build (COND_EXPR, itype, ! value, ! boolean_true_node, boolean_false_node); } else if (! TYPE_ARRAY_P (type) && ! TYPE_ARRAY_P (valtype) --- 1255,1261 ---- /* Anything except `null' is an instance of Object. Likewise, if the object is known to be an instance of the class, then we only need to check for `null'. */ ! expr = build (NE_EXPR, itype, value, null_pointer_node); } else if (! TYPE_ARRAY_P (type) && ! TYPE_ARRAY_P (valtype) *************** build_java_binop (op, type, arg1, arg2) *** 1399,1405 **** { case URSHIFT_EXPR: { ! tree u_type = unsigned_type (type); arg1 = convert (u_type, arg1); arg1 = build_java_binop (RSHIFT_EXPR, u_type, arg1, arg2); return convert (type, arg1); --- 1392,1398 ---- { case URSHIFT_EXPR: { ! tree u_type = java_unsigned_type (type); arg1 = convert (u_type, arg1); arg1 = build_java_binop (RSHIFT_EXPR, u_type, arg1, arg2); return convert (type, arg1); *************** build_field_ref (self_value, self_class, *** 1580,1591 **** && ! (DECL_P (self_value) && DECL_NAME (self_value) == this_identifier_node)); ! tree base_handle_type = promote_type (base_class); ! if (base_handle_type != TREE_TYPE (self_value)) ! self_value = fold (build1 (NOP_EXPR, base_handle_type, self_value)); ! #ifdef JAVA_USE_HANDLES ! self_value = unhand_expr (self_value); ! #endif self_value = build_java_indirect_ref (TREE_TYPE (TREE_TYPE (self_value)), self_value, check); return fold (build (COMPONENT_REF, TREE_TYPE (field_decl), --- 1573,1581 ---- && ! (DECL_P (self_value) && DECL_NAME (self_value) == this_identifier_node)); ! tree base_type = promote_type (base_class); ! if (base_type != TREE_TYPE (self_value)) ! self_value = fold (build1 (NOP_EXPR, base_type, self_value)); self_value = build_java_indirect_ref (TREE_TYPE (TREE_TYPE (self_value)), self_value, check); return fold (build (COMPONENT_REF, TREE_TYPE (field_decl), *************** expand_compare (condition, value1, value *** 1660,1666 **** { tree target = lookup_label (target_pc); tree cond = fold (build (condition, boolean_type_node, value1, value2)); ! expand_start_cond (truthvalue_conversion (cond), 0); expand_goto (target); expand_end_cond (); } --- 1650,1656 ---- { tree target = lookup_label (target_pc); tree cond = fold (build (condition, boolean_type_node, value1, value2)); ! expand_start_cond (java_truthvalue_conversion (cond), 0); expand_goto (target); expand_end_cond (); } *************** build_class_init (clas, expr) *** 1760,1767 **** tree clas, expr; { tree init; ! struct init_test_hash_entry *ite; ! if (inherits_from_p (current_class, clas)) return expr; if (always_initialize_class_p) --- 1750,1763 ---- tree clas, expr; { tree init; ! ! /* An optimization: if CLAS is a superclass of the class we're ! compiling, we don't need to initialize it. However, if CLAS is ! an interface, it won't necessarily be initialized, even if we ! implement it. */ ! if ((! CLASS_INTERFACE (TYPE_NAME (clas)) ! && inherits_from_p (current_class, clas)) ! || current_class == clas) return expr; if (always_initialize_class_p) *************** build_class_init (clas, expr) *** 1774,1798 **** } else { ! ite = (struct init_test_hash_entry *) ! hash_lookup (&DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), ! (const hash_table_key) clas, ! TRUE, NULL); ! ! if (ite->init_test_decl == 0) { /* Build a declaration and mark it as a flag used to track static class initializations. */ ! ite->init_test_decl = build_decl (VAR_DECL, NULL_TREE, ! boolean_type_node); ! MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (ite->init_test_decl); ! LOCAL_CLASS_INITIALIZATION_FLAG (ite->init_test_decl) = 1; ! DECL_CONTEXT (ite->init_test_decl) = current_function_decl; ! DECL_FUNCTION_INIT_TEST_CLASS (ite->init_test_decl) = clas; /* Tell the check-init code to ignore this decl when not optimizing class initialization. */ if (!STATIC_CLASS_INIT_OPT_P ()) ! DECL_BIT_INDEX(ite->init_test_decl) = -1; } init = build (CALL_EXPR, void_type_node, --- 1770,1793 ---- } else { ! tree *init_test_decl; ! init_test_decl = java_treetreehash_new ! (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), clas); ! ! if (*init_test_decl == NULL) { /* Build a declaration and mark it as a flag used to track static class initializations. */ ! *init_test_decl = build_decl (VAR_DECL, NULL_TREE, ! boolean_type_node); ! MAYBE_CREATE_VAR_LANG_DECL_SPECIFIC (*init_test_decl); ! LOCAL_CLASS_INITIALIZATION_FLAG (*init_test_decl) = 1; ! DECL_CONTEXT (*init_test_decl) = current_function_decl; ! DECL_FUNCTION_INIT_TEST_CLASS (*init_test_decl) = clas; /* Tell the check-init code to ignore this decl when not optimizing class initialization. */ if (!STATIC_CLASS_INIT_OPT_P ()) ! DECL_BIT_INDEX(*init_test_decl) = -1; } init = build (CALL_EXPR, void_type_node, *************** build_class_init (clas, expr) *** 1802,1813 **** TREE_SIDE_EFFECTS (init) = 1; init = build (COND_EXPR, void_type_node, build (EQ_EXPR, boolean_type_node, ! ite->init_test_decl, boolean_false_node), init, integer_zero_node); TREE_SIDE_EFFECTS (init) = 1; init = build (COMPOUND_EXPR, TREE_TYPE (expr), init, build (MODIFY_EXPR, boolean_type_node, ! ite->init_test_decl, boolean_true_node)); TREE_SIDE_EFFECTS (init) = 1; } --- 1797,1808 ---- TREE_SIDE_EFFECTS (init) = 1; init = build (COND_EXPR, void_type_node, build (EQ_EXPR, boolean_type_node, ! *init_test_decl, boolean_false_node), init, integer_zero_node); TREE_SIDE_EFFECTS (init) = 1; init = build (COMPOUND_EXPR, TREE_TYPE (expr), init, build (MODIFY_EXPR, boolean_type_node, ! *init_test_decl, boolean_true_node)); TREE_SIDE_EFFECTS (init) = 1; } *************** build_known_method_ref (method, method_t *** 1853,1859 **** methods_ident = get_identifier ("methods"); ref = build (COMPONENT_REF, method_ptr_type_node, ref, lookup_field (&class_type_node, methods_ident)); ! for (meth = TYPE_METHODS (CLASS_TO_HANDLE_TYPE (self_type)); ; meth = TREE_CHAIN (meth)) { if (method == meth) --- 1848,1854 ---- methods_ident = get_identifier ("methods"); ref = build (COMPONENT_REF, method_ptr_type_node, ref, lookup_field (&class_type_node, methods_ident)); ! for (meth = TYPE_METHODS (self_type); ; meth = TREE_CHAIN (meth)) { if (method == meth) *************** build_invokevirtual (dtable, method) *** 1980,1990 **** return func; } tree build_invokeinterface (dtable, method) tree dtable, method; { - static tree class_ident = NULL_TREE; tree lookup_arg; tree interface; tree idx; --- 1975,1985 ---- return func; } + static GTY(()) tree class_ident; tree build_invokeinterface (dtable, method) tree dtable, method; { tree lookup_arg; tree interface; tree idx; *************** build_invokeinterface (dtable, method) *** 1999,2005 **** if (class_ident == NULL_TREE) { class_ident = get_identifier ("class"); - ggc_add_tree_root (&class_ident, 1); } dtable = build_java_indirect_ref (dtable_type, dtable, flag_check_references); --- 1994,1999 ---- *************** expand_invoke (opcode, method_ref_index, *** 2068,2078 **** layout_class_methods (self_type); if (ID_INIT_P (method_name)) ! method = lookup_java_constructor (CLASS_TO_HANDLE_TYPE (self_type), ! method_signature); else ! method = lookup_java_method (CLASS_TO_HANDLE_TYPE (self_type), ! method_name, method_signature); if (method == NULL_TREE) { error ("class '%s' has no method named '%s' matching signature '%s'", --- 2062,2070 ---- layout_class_methods (self_type); if (ID_INIT_P (method_name)) ! method = lookup_java_constructor (self_type, method_signature); else ! method = lookup_java_method (self_type, method_name, method_signature); if (method == NULL_TREE) { error ("class '%s' has no method named '%s' matching signature '%s'", *************** build_jni_stub (method) *** 2186,2191 **** --- 2178,2185 ---- tree method_args, res_type; tree meth_var; + int args_size = 0; + tree klass = DECL_CONTEXT (method); int from_class = ! CLASS_FROM_SOURCE_P (klass); klass = build_class_ref (klass); *************** build_jni_stub (method) *** 2247,2253 **** special way, we would do that here. */ args = NULL_TREE; for (tem = method_args; tem != NULL_TREE; tem = TREE_CHAIN (tem)) ! args = tree_cons (NULL_TREE, tem, args); args = nreverse (args); arg_types = TYPE_ARG_TYPES (TREE_TYPE (method)); --- 2241,2256 ---- special way, we would do that here. */ args = NULL_TREE; for (tem = method_args; tem != NULL_TREE; tem = TREE_CHAIN (tem)) ! { ! int arg_bits = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (tem))); ! #ifdef PARM_BOUNDARY ! arg_bits = (((arg_bits + PARM_BOUNDARY - 1) / PARM_BOUNDARY) ! * PARM_BOUNDARY); ! #endif ! args_size += (arg_bits / BITS_PER_UNIT); ! ! args = tree_cons (NULL_TREE, tem, args); ! } args = nreverse (args); arg_types = TYPE_ARG_TYPES (TREE_TYPE (method)); *************** build_jni_stub (method) *** 2256,2286 **** available in the argument list. */ if (METHOD_STATIC (method)) { args = tree_cons (NULL_TREE, klass, args); arg_types = tree_cons (NULL_TREE, object_ptr_type_node, arg_types); } /* The JNIEnv structure is the first argument to the JNI function. */ args = tree_cons (NULL_TREE, env_var, args); arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types); /* We call _Jv_LookupJNIMethod to find the actual underlying function pointer. _Jv_LookupJNIMethod will throw the appropriate exception if this function is not found at runtime. */ method_sig = build_java_signature (TREE_TYPE (method)); ! lookup_arg = ! build_tree_list (NULL_TREE, ! build_utf8_ref (unmangle_classname ! (IDENTIFIER_POINTER (method_sig), ! IDENTIFIER_LENGTH (method_sig)))); tem = DECL_NAME (method); lookup_arg = tree_cons (NULL_TREE, klass, tree_cons (NULL_TREE, build_utf8_ref (tem), lookup_arg)); ! jni_func_type ! = build_pointer_type (build_function_type (TREE_TYPE (TREE_TYPE (method)), ! arg_types)); jnifunc = build (COND_EXPR, ptr_type_node, meth_var, meth_var, --- 2259,2296 ---- available in the argument list. */ if (METHOD_STATIC (method)) { + args_size += int_size_in_bytes (TREE_TYPE (klass)); args = tree_cons (NULL_TREE, klass, args); arg_types = tree_cons (NULL_TREE, object_ptr_type_node, arg_types); } /* The JNIEnv structure is the first argument to the JNI function. */ + args_size += int_size_in_bytes (TREE_TYPE (env_var)); args = tree_cons (NULL_TREE, env_var, args); arg_types = tree_cons (NULL_TREE, ptr_type_node, arg_types); /* We call _Jv_LookupJNIMethod to find the actual underlying function pointer. _Jv_LookupJNIMethod will throw the appropriate exception if this function is not found at runtime. */ + tem = build_tree_list (NULL_TREE, build_int_2 (args_size, 0)); method_sig = build_java_signature (TREE_TYPE (method)); ! lookup_arg = tree_cons (NULL_TREE, ! build_utf8_ref (unmangle_classname ! (IDENTIFIER_POINTER (method_sig), ! IDENTIFIER_LENGTH (method_sig))), ! tem); tem = DECL_NAME (method); lookup_arg = tree_cons (NULL_TREE, klass, tree_cons (NULL_TREE, build_utf8_ref (tem), lookup_arg)); + + tem = build_function_type (TREE_TYPE (TREE_TYPE (method)), arg_types); ! #ifdef MODIFY_JNI_METHOD_CALL ! tem = MODIFY_JNI_METHOD_CALL (tem); ! #endif ! ! jni_func_type = build_pointer_type (tem); jnifunc = build (COND_EXPR, ptr_type_node, meth_var, meth_var, *************** get_primitive_array_vtable (tree elt) *** 2485,2495 **** } struct rtx_def * ! java_lang_expand_expr (exp, target, tmode, modifier) register tree exp; rtx target; enum machine_mode tmode; ! enum expand_modifier modifier; { tree current; --- 2495,2505 ---- } struct rtx_def * ! java_expand_expr (exp, target, tmode, modifier) register tree exp; rtx target; enum machine_mode tmode; ! int modifier; /* Actually an enum expand_modifier. */ { tree current; *************** java_lang_expand_expr (exp, target, tmod *** 2570,2575 **** --- 2580,2586 ---- if (BLOCK_EXPR_BODY (exp)) { tree local; + rtx last; tree body = BLOCK_EXPR_BODY (exp); /* Set to 1 or more when we found a static class initialization flag. */ *************** java_lang_expand_expr (exp, target, tmod *** 2592,2599 **** if (! always_initialize_class_p && current_function_decl && found_class_initialization_flag) ! hash_traverse ! (&DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), emit_init_test_initialization, NULL); /* Avoid deep recursion for long block. */ --- 2603,2610 ---- if (! always_initialize_class_p && current_function_decl && found_class_initialization_flag) ! htab_traverse ! (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), emit_init_test_initialization, NULL); /* Avoid deep recursion for long block. */ *************** java_lang_expand_expr (exp, target, tmod *** 2603,2613 **** emit_queue (); body = TREE_OPERAND (body, 1); } ! expand_expr (body, const0_rtx, VOIDmode, 0); emit_queue (); expand_end_bindings (getdecls (), 1, 0); poplevel (1, 1, 0); ! return const0_rtx; } return const0_rtx; --- 2614,2624 ---- emit_queue (); body = TREE_OPERAND (body, 1); } ! last = expand_expr (body, NULL_RTX, VOIDmode, 0); emit_queue (); expand_end_bindings (getdecls (), 1, 0); poplevel (1, 1, 0); ! return last; } return const0_rtx; *************** java_lang_expand_expr (exp, target, tmod *** 2664,2669 **** --- 2675,2685 ---- return expand_expr (build_exception_object_ref (TREE_TYPE (exp)), target, tmode, modifier); + case LABEL_EXPR: + /* Used only by expanded inline functions. */ + expand_label (TREE_OPERAND (exp, 0)); + return const0_rtx; + default: internal_error ("can't expand %s", tree_code_name [TREE_CODE (exp)]); } *************** force_evaluation_order (node) *** 3466,3484 **** /* Called for every element in DECL_FUNCTION_INIT_TEST_TABLE of a method in order to emit initialization code for each test flag. */ ! static bool ! emit_init_test_initialization (entry, key) ! struct hash_entry *entry; ! hash_table_key key ATTRIBUTE_UNUSED; { ! struct init_test_hash_entry *ite = (struct init_test_hash_entry *) entry; ! tree klass = build_class_ref ((tree) entry->key); tree rhs; /* If the DECL_INITIAL of the test flag is set to true, it means that the class is already initialized the time it is in use. */ ! if (DECL_INITIAL (ite->init_test_decl) == boolean_true_node) rhs = boolean_true_node; /* Otherwise, we initialize the class init check variable by looking at the `state' field of the class to see if it is already --- 3482,3500 ---- /* Called for every element in DECL_FUNCTION_INIT_TEST_TABLE of a method in order to emit initialization code for each test flag. */ ! static int ! emit_init_test_initialization (entry, x) ! void * * entry; ! void * x ATTRIBUTE_UNUSED; { ! struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry; ! tree klass = build_class_ref (ite->key); tree rhs; /* If the DECL_INITIAL of the test flag is set to true, it means that the class is already initialized the time it is in use. */ ! if (DECL_INITIAL (ite->value) == boolean_true_node) rhs = boolean_true_node; /* Otherwise, we initialize the class init check variable by looking at the `state' field of the class to see if it is already *************** emit_init_test_initialization (entry, ke *** 3493,3498 **** build_int_2 (JV_STATE_DONE, 0)); expand_expr_stmt (build (MODIFY_EXPR, boolean_type_node, ! ite->init_test_decl, rhs)); return true; } --- 3509,3517 ---- build_int_2 (JV_STATE_DONE, 0)); expand_expr_stmt (build (MODIFY_EXPR, boolean_type_node, ! ite->value, rhs)); return true; } + + #include "gt-java-expr.h" + diff -Nrc3pad gcc-3.2.3/gcc/java/gcj.1 gcc-3.3/gcc/java/gcj.1 *** gcc-3.2.3/gcc/java/gcj.1 2003-04-22 07:07:36.000000000 +0000 --- gcc-3.3/gcc/java/gcj.1 2003-05-14 00:32:09.000000000 +0000 *************** *** 1,8 **** ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Tue Apr 22 07:07:36 2003 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,7 ---- ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 15,26 **** .if t .sp .5v .if n .sp .. - .de Ip \" List item - .br - .ie \\n(.$>=3 .ne \\$3 - .el .ne 3 - .IP "\\$1" \\$2 - .. .de Vb \" Begin verbatim text .ft CW .nf --- 14,19 ---- *************** *** 28,42 **** .. .de Ve \" End verbatim text .ft R - .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 21,34 ---- .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 56,65 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 48,57 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 68,81 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. - .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 60,72 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 135,154 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "GCJ 1" ! .TH GCJ 1 "gcc-3.2.3" "2003-04-22" "GNU" ! .UC .SH "NAME" ! gcj \- Ahead-of-time compiler for the Java language .SH "SYNOPSIS" .IX Header "SYNOPSIS" gcj [\fB\-I\fR\fIdir\fR...] [\fB\-d\fR \fIdir\fR...] ! [\fB\*(--CLASSPATH\fR=\fIpath\fR] [\fB\*(--classpath\fR=\fIpath\fR] ! [\fB\-f\fR\fIoption\fR...] [\fB\*(--encoding\fR=\fIname\fR] ! [\fB\*(--main\fR=\fIclassname\fR] [\fB\-D\fR\fIname\fR[=\fIvalue\fR]...] ! [\fB\-C\fR] [\fB\*(--resource\fR \fIresource-name\fR] [\fB\-d\fR \fIdirectory\fR] [\fB\-W\fR\fIwarn\fR...] \fIsourcefile\fR... .SH "DESCRIPTION" --- 126,144 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "GCJ 1" ! .TH GCJ 1 "2003-05-14" "gcc-3.3" "GNU" .SH "NAME" ! gcj \- Ahead\-of\-time compiler for the Java language .SH "SYNOPSIS" .IX Header "SYNOPSIS" gcj [\fB\-I\fR\fIdir\fR...] [\fB\-d\fR \fIdir\fR...] ! [\fB\-\-CLASSPATH\fR=\fIpath\fR] [\fB\-\-classpath\fR=\fIpath\fR] ! [\fB\-f\fR\fIoption\fR...] [\fB\-\-encoding\fR=\fIname\fR] ! [\fB\-\-main\fR=\fIclassname\fR] [\fB\-D\fR\fIname\fR[=\fIvalue\fR]...] ! [\fB\-C\fR] [\fB\-\-resource\fR \fIresource-name\fR] [\fB\-d\fR \fIdirectory\fR] [\fB\-W\fR\fIwarn\fR...] \fIsourcefile\fR... .SH "DESCRIPTION" *************** options specific to \fBgcj\fR. *** 163,194 **** A \fBgcj\fR command is like a \fBgcc\fR command, in that it consists of a number of options and file names. The following kinds of input file names are supported: ! .Ip "\fIfile\fR\fB.java\fR" 4 .IX Item "file.java" Java source files. ! .Ip "\fIfile\fR\fB.class\fR" 4 .IX Item "file.class" Java bytecode files. ! .Ip "\fIfile\fR\fB.zip\fR" 4 .IX Item "file.zip" .PD 0 ! .Ip "\fIfile\fR\fB.jar\fR" 4 .IX Item "file.jar" .PD An archive containing one or more \f(CW\*(C`.class\*(C'\fR files, all of which are compiled. The archive may be compressed. ! .Ip "\fB@\fR\fIfile\fR" 4 .IX Item "@file" A file containing a whitespace-separated list of input file names. (Currently, these must all be \f(CW\*(C`.java\*(C'\fR source files, but that may change.) Each named file is compiled, just as if it had been on the command line. ! .Ip "\fIlibrary\fR\fB.a\fR" 4 .IX Item "library.a" .PD 0 ! .Ip "\fIlibrary\fR\fB.so\fR" 4 .IX Item "library.so" ! .Ip "\fB\-l\fR\fIlibname\fR" 4 .IX Item "-llibname" .PD Libraries to use when linking. See the \fBgcc\fR manual. --- 153,184 ---- A \fBgcj\fR command is like a \fBgcc\fR command, in that it consists of a number of options and file names. The following kinds of input file names are supported: ! .IP "\fIfile\fR\fB.java\fR" 4 .IX Item "file.java" Java source files. ! .IP "\fIfile\fR\fB.class\fR" 4 .IX Item "file.class" Java bytecode files. ! .IP "\fIfile\fR\fB.zip\fR" 4 .IX Item "file.zip" .PD 0 ! .IP "\fIfile\fR\fB.jar\fR" 4 .IX Item "file.jar" .PD An archive containing one or more \f(CW\*(C`.class\*(C'\fR files, all of which are compiled. The archive may be compressed. ! .IP "\fB@\fR\fIfile\fR" 4 .IX Item "@file" A file containing a whitespace-separated list of input file names. (Currently, these must all be \f(CW\*(C`.java\*(C'\fR source files, but that may change.) Each named file is compiled, just as if it had been on the command line. ! .IP "\fIlibrary\fR\fB.a\fR" 4 .IX Item "library.a" .PD 0 ! .IP "\fIlibrary\fR\fB.so\fR" 4 .IX Item "library.so" ! .IP "\fB\-l\fR\fIlibname\fR" 4 .IX Item "-llibname" .PD Libraries to use when linking. See the \fBgcc\fR manual. *************** standard classes. *** 219,263 **** In the below, a directory or path component can refer either to an actual directory on the filesystem, or to a \fI.zip\fR or \fI.jar\fR file, which \fBgcj\fR will search as if it is a directory. ! .Ip "\fB\-I\fR\fIdir\fR" 4 .IX Item "-Idir" All directories specified by \f(CW\*(C`\-I\*(C'\fR are kept in order and prepended to the class path constructed from all the other options. Unless ! compatibility with tools like \f(CW\*(C`javac\*(C'\fR is imported, we recommend always using \f(CW\*(C`\-I\*(C'\fR instead of the other options for manipulating the class path. ! .Ip "\fB\*(--classpath=\fR\fIpath\fR" 4 ! .IX Item "classpath=path" This sets the class path to \fIpath\fR, a colon-separated list of paths (on Windows-based systems, a semicolon-separate list of paths). This does not override the builtin (``boot'') search path. ! .Ip "\fB\*(--CLASSPATH=\fR\fIpath\fR" 4 ! .IX Item "CLASSPATH=path" Deprecated synonym for \f(CW\*(C`\-\-classpath\*(C'\fR. ! .Ip "\fB\*(--bootclasspath=\fR\fIpath\fR" 4 ! .IX Item "bootclasspath=path" Where to find the standard builtin classes, such as \f(CW\*(C`java.lang.String\*(C'\fR. ! .Ip "\fB\*(--extdirs=\fR\fIpath\fR" 4 ! .IX Item "extdirs=path" For each directory in the \fIpath\fR, place the contents of that directory at the end of the class path. ! .Ip "\fB\s-1CLASSPATH\s0\fR" 4 .IX Item "CLASSPATH" This is an environment variable which holds a list of paths. .PP The final class path is constructed like so: ! .Ip "\(bu" 4 First come all directories specified via \f(CW\*(C`\-I\*(C'\fR. ! .Ip "\(bu" 4 ! If \fB\*(--classpath\fR is specified, its value is appended. Otherwise, if the \f(CW\*(C`CLASSPATH\*(C'\fR environment variable is specified, then its value is appended. ! Otherwise, the current directory (\f(CW\*(C`"."\*(C'\fR) is appended. ! .Ip "\(bu" 4 If \f(CW\*(C`\-\-bootclasspath\*(C'\fR was specified, append its value. Otherwise, append the built-in system directory, \fIlibgcj.jar\fR. ! .Ip "\(bu" 4 ! Finaly, if \f(CW\*(C`\-\-extdirs\*(C'\fR was specified, append the contents of the specified directories at the end of the class path. Otherwise, append the contents of the built-in extdirs at \f(CW\*(C`$(prefix)/share/java/ext\*(C'\fR. .PP --- 209,253 ---- In the below, a directory or path component can refer either to an actual directory on the filesystem, or to a \fI.zip\fR or \fI.jar\fR file, which \fBgcj\fR will search as if it is a directory. ! .IP "\fB\-I\fR\fIdir\fR" 4 .IX Item "-Idir" All directories specified by \f(CW\*(C`\-I\*(C'\fR are kept in order and prepended to the class path constructed from all the other options. Unless ! compatibility with tools like \f(CW\*(C`javac\*(C'\fR is important, we recommend always using \f(CW\*(C`\-I\*(C'\fR instead of the other options for manipulating the class path. ! .IP "\fB\-\-classpath=\fR\fIpath\fR" 4 ! .IX Item "--classpath=path" This sets the class path to \fIpath\fR, a colon-separated list of paths (on Windows-based systems, a semicolon-separate list of paths). This does not override the builtin (``boot'') search path. ! .IP "\fB\-\-CLASSPATH=\fR\fIpath\fR" 4 ! .IX Item "--CLASSPATH=path" Deprecated synonym for \f(CW\*(C`\-\-classpath\*(C'\fR. ! .IP "\fB\-\-bootclasspath=\fR\fIpath\fR" 4 ! .IX Item "--bootclasspath=path" Where to find the standard builtin classes, such as \f(CW\*(C`java.lang.String\*(C'\fR. ! .IP "\fB\-\-extdirs=\fR\fIpath\fR" 4 ! .IX Item "--extdirs=path" For each directory in the \fIpath\fR, place the contents of that directory at the end of the class path. ! .IP "\fB\s-1CLASSPATH\s0\fR" 4 .IX Item "CLASSPATH" This is an environment variable which holds a list of paths. .PP The final class path is constructed like so: ! .IP "\(bu" 4 First come all directories specified via \f(CW\*(C`\-I\*(C'\fR. ! .IP "\(bu" 4 ! If \fB\-\-classpath\fR is specified, its value is appended. Otherwise, if the \f(CW\*(C`CLASSPATH\*(C'\fR environment variable is specified, then its value is appended. ! Otherwise, the current directory (\f(CW"."\fR) is appended. ! .IP "\(bu" 4 If \f(CW\*(C`\-\-bootclasspath\*(C'\fR was specified, append its value. Otherwise, append the built-in system directory, \fIlibgcj.jar\fR. ! .IP "\(bu" 4 ! Finally, if \f(CW\*(C`\-\-extdirs\*(C'\fR was specified, append the contents of the specified directories at the end of the class path. Otherwise, append the contents of the built-in extdirs at \f(CW\*(C`$(prefix)/share/java/ext\*(C'\fR. .PP *************** attribute when loading \f(CW\*(C`java.la *** 268,274 **** if it isn't found, unless it compiles to bytecode (the option \&\f(CW\*(C`\-fforce\-classes\-archive\-check\*(C'\fR can be used to override this behavior in this particular case.) ! .Ip "\fB\-fforce-classes-archive-check\fR" 4 .IX Item "-fforce-classes-archive-check" This forces the compiler to always check for the special zero length attribute \f(CW\*(C`gnu.gcj.gcj\-compiled\*(C'\fR in \f(CW\*(C`java.lang.Object\*(C'\fR and --- 258,264 ---- if it isn't found, unless it compiles to bytecode (the option \&\f(CW\*(C`\-fforce\-classes\-archive\-check\*(C'\fR can be used to override this behavior in this particular case.) ! .IP "\fB\-fforce\-classes\-archive\-check\fR" 4 .IX Item "-fforce-classes-archive-check" This forces the compiler to always check for the special zero length attribute \f(CW\*(C`gnu.gcj.gcj\-compiled\*(C'\fR in \f(CW\*(C`java.lang.Object\*(C'\fR and *************** You can use the \f(CW\*(C`\-\-encoding=\ *** 284,290 **** encoding (of a particular character set) to use for source files. If this is not specified, the default encoding comes from your current locale. If your host system has insufficient locale support, then ! \&\fBgcj\fR assumes the default encoding to be the \fB\s-1UTF-8\s0\fR encoding of Unicode. .PP To implement \f(CW\*(C`\-\-encoding\*(C'\fR, \fBgcj\fR simply uses the host --- 274,280 ---- encoding (of a particular character set) to use for source files. If this is not specified, the default encoding comes from your current locale. If your host system has insufficient locale support, then ! \&\fBgcj\fR assumes the default encoding to be the \fB\s-1UTF\-8\s0\fR encoding of Unicode. .PP To implement \f(CW\*(C`\-\-encoding\*(C'\fR, \fBgcj\fR simply uses the host *************** platform's \f(CW\*(C`iconv\*(C'\fR conve *** 293,299 **** .PP The names allowed for the argument \f(CW\*(C`\-\-encoding\*(C'\fR vary from platform to platform (since they are not standardized anywhere). However, ! \&\fBgcj\fR implements the encoding named \fB\s-1UTF-8\s0\fR internally, so if you choose to use this for your source files you can be assured that it will work on every host. .Sh "Warnings" --- 283,289 ---- .PP The names allowed for the argument \f(CW\*(C`\-\-encoding\*(C'\fR vary from platform to platform (since they are not standardized anywhere). However, ! \&\fBgcj\fR implements the encoding named \fB\s-1UTF\-8\s0\fR internally, so if you choose to use this for your source files you can be assured that it will work on every host. .Sh "Warnings" *************** will work on every host. *** 303,325 **** warning, then \f(CW\*(C`\-Wno\-foo\*(C'\fR will disable it. Here we've chosen to document the form of the warning which will have an effect \*(-- the default being the opposite of what is listed. ! .Ip "\fB\-Wredundant-modifiers\fR" 4 .IX Item "-Wredundant-modifiers" With this flag, \fBgcj\fR will warn about redundant modifiers. For instance, it will warn if an interface method is declared \f(CW\*(C`public\*(C'\fR. ! .Ip "\fB\-Wextraneous-semicolon\fR" 4 .IX Item "-Wextraneous-semicolon" This causes \fBgcj\fR to warn about empty statements. Empty statements have been deprecated. ! .Ip "\fB\-Wno-out-of-date\fR" 4 .IX Item "-Wno-out-of-date" This option will cause \fBgcj\fR not to warn when a source file is newer than its matching class file. By default \fBgcj\fR will warn about this. ! .Ip "\fB\-Wunused\fR" 4 .IX Item "-Wunused" This is the same as \fBgcc\fR's \f(CW\*(C`\-Wunused\*(C'\fR. ! .Ip "\fB\-Wall\fR" 4 .IX Item "-Wall" This is the same as \f(CW\*(C`\-Wredundant\-modifiers \-Wextraneous\-semicolon \&\-Wunused\*(C'\fR. --- 293,315 ---- warning, then \f(CW\*(C`\-Wno\-foo\*(C'\fR will disable it. Here we've chosen to document the form of the warning which will have an effect \*(-- the default being the opposite of what is listed. ! .IP "\fB\-Wredundant\-modifiers\fR" 4 .IX Item "-Wredundant-modifiers" With this flag, \fBgcj\fR will warn about redundant modifiers. For instance, it will warn if an interface method is declared \f(CW\*(C`public\*(C'\fR. ! .IP "\fB\-Wextraneous\-semicolon\fR" 4 .IX Item "-Wextraneous-semicolon" This causes \fBgcj\fR to warn about empty statements. Empty statements have been deprecated. ! .IP "\fB\-Wno\-out\-of\-date\fR" 4 .IX Item "-Wno-out-of-date" This option will cause \fBgcj\fR not to warn when a source file is newer than its matching class file. By default \fBgcj\fR will warn about this. ! .IP "\fB\-Wunused\fR" 4 .IX Item "-Wunused" This is the same as \fBgcc\fR's \f(CW\*(C`\-Wunused\*(C'\fR. ! .IP "\fB\-Wall\fR" 4 .IX Item "-Wall" This is the same as \f(CW\*(C`\-Wredundant\-modifiers \-Wextraneous\-semicolon \&\-Wunused\*(C'\fR. *************** This is the same as \f(CW\*(C`\-Wredunda *** 327,350 **** .IX Subsection "Code Generation" In addition to the many \fBgcc\fR options controlling code generation, \&\fBgcj\fR has several options specific to itself. ! .Ip "\fB\*(--main=\fR\fI\s-1CLASSNAME\s0\fR" 4 ! .IX Item "main=CLASSNAME" This option is used when linking to specify the name of the class whose \&\f(CW\*(C`main\*(C'\fR method should be invoked when the resulting executable is run. [1] ! .Ip "\fB\-D\fR\fIname\fR\fB[=\fR\fIvalue\fR\fB]\fR" 4 .IX Item "-Dname[=value]" This option can only be used with \f(CW\*(C`\-\-main\*(C'\fR. It defines a system property named \fIname\fR with value \fIvalue\fR. If \fIvalue\fR is not specified then it defaults to the empty string. These system properties are initialized at the program's startup and can be retrieved at runtime using the \f(CW\*(C`java.lang.System.getProperty\*(C'\fR method. ! .Ip "\fB\-C\fR" 4 .IX Item "-C" This option is used to tell \fBgcj\fR to generate bytecode (\fI.class\fR files) rather than object code. ! .Ip "\fB\*(--resource\fR \fIresource-name\fR" 4 ! .IX Item "resource resource-name" This option is used to tell \fBgcj\fR to compile the contents of a given file to object code so it may be accessed at runtime with the core protocol handler as \fBcore:/\fR\fIresource-name\fR. Note that --- 317,340 ---- .IX Subsection "Code Generation" In addition to the many \fBgcc\fR options controlling code generation, \&\fBgcj\fR has several options specific to itself. ! .IP "\fB\-\-main=\fR\fI\s-1CLASSNAME\s0\fR" 4 ! .IX Item "--main=CLASSNAME" This option is used when linking to specify the name of the class whose \&\f(CW\*(C`main\*(C'\fR method should be invoked when the resulting executable is run. [1] ! .IP "\fB\-D\fR\fIname\fR\fB[=\fR\fIvalue\fR\fB]\fR" 4 .IX Item "-Dname[=value]" This option can only be used with \f(CW\*(C`\-\-main\*(C'\fR. It defines a system property named \fIname\fR with value \fIvalue\fR. If \fIvalue\fR is not specified then it defaults to the empty string. These system properties are initialized at the program's startup and can be retrieved at runtime using the \f(CW\*(C`java.lang.System.getProperty\*(C'\fR method. ! .IP "\fB\-C\fR" 4 .IX Item "-C" This option is used to tell \fBgcj\fR to generate bytecode (\fI.class\fR files) rather than object code. ! .IP "\fB\-\-resource\fR \fIresource-name\fR" 4 ! .IX Item "--resource resource-name" This option is used to tell \fBgcj\fR to compile the contents of a given file to object code so it may be accessed at runtime with the core protocol handler as \fBcore:/\fR\fIresource-name\fR. Note that *************** protocol handler as \fBcore:/\fR\fIresou *** 352,364 **** instance, it could be used in a call to \f(CW\*(C`ResourceBundle.getBundle\*(C'\fR. The actual file name to be compiled this way must be specified separately. ! .Ip "\fB\-d\fR \fIdirectory\fR" 4 .IX Item "-d directory" When used with \f(CW\*(C`\-C\*(C'\fR, this causes all generated \fI.class\fR files to be put in the appropriate subdirectory of \fIdirectory\fR. By default they will be put in subdirectories of the current working directory. ! .Ip "\fB\-fno-bounds-check\fR" 4 .IX Item "-fno-bounds-check" By default, \fBgcj\fR generates code which checks the bounds of all array indexing operations. With this option, these checks are omitted, which --- 342,354 ---- instance, it could be used in a call to \f(CW\*(C`ResourceBundle.getBundle\*(C'\fR. The actual file name to be compiled this way must be specified separately. ! .IP "\fB\-d\fR \fIdirectory\fR" 4 .IX Item "-d directory" When used with \f(CW\*(C`\-C\*(C'\fR, this causes all generated \fI.class\fR files to be put in the appropriate subdirectory of \fIdirectory\fR. By default they will be put in subdirectories of the current working directory. ! .IP "\fB\-fno\-bounds\-check\fR" 4 .IX Item "-fno-bounds-check" By default, \fBgcj\fR generates code which checks the bounds of all array indexing operations. With this option, these checks are omitted, which *************** can improve performance for code that us *** 366,381 **** can result in unpredictable behavior if the code in question actually does violate array bounds constraints. It is safe to use this option if you are sure that your code will never throw an \f(CW\*(C`ArrayIndexOutOfBoundsException\*(C'\fR. ! .Ip "\fB\-fno-store-check\fR" 4 .IX Item "-fno-store-check" Don't generate array store checks. When storing objects into arrays, a runtime check is normally generated in order to ensure that the object is assignment compatible with the component type of the array (which may not be known ! at compile-time). With this option, these checks are omitted. This can improve performance for code which stores objects into arrays frequently. It is safe to use this option if you are sure your code will never throw an \&\f(CW\*(C`ArrayStoreException\*(C'\fR. ! .Ip "\fB\-fjni\fR" 4 .IX Item "-fjni" With \fBgcj\fR there are two options for writing native methods: \s-1CNI\s0 and \s-1JNI\s0. By default \fBgcj\fR assumes you are using \s-1CNI\s0. If you are --- 356,371 ---- can result in unpredictable behavior if the code in question actually does violate array bounds constraints. It is safe to use this option if you are sure that your code will never throw an \f(CW\*(C`ArrayIndexOutOfBoundsException\*(C'\fR. ! .IP "\fB\-fno\-store\-check\fR" 4 .IX Item "-fno-store-check" Don't generate array store checks. When storing objects into arrays, a runtime check is normally generated in order to ensure that the object is assignment compatible with the component type of the array (which may not be known ! at compile\-time). With this option, these checks are omitted. This can improve performance for code which stores objects into arrays frequently. It is safe to use this option if you are sure your code will never throw an \&\f(CW\*(C`ArrayStoreException\*(C'\fR. ! .IP "\fB\-fjni\fR" 4 .IX Item "-fjni" With \fBgcj\fR there are two options for writing native methods: \s-1CNI\s0 and \s-1JNI\s0. By default \fBgcj\fR assumes you are using \s-1CNI\s0. If you are *************** compiling a class with native methods, a *** 383,391 **** using \s-1JNI\s0, then you must use \f(CW\*(C`\-fjni\*(C'\fR. This option causes \&\fBgcj\fR to generate stubs which will invoke the underlying \s-1JNI\s0 methods. ! .Ip "\fB\-fno-optimize-static-class-initialization\fR" 4 .IX Item "-fno-optimize-static-class-initialization" ! When the optimization level is greather or equal to \f(CW\*(C`\-O2\*(C'\fR, \&\fBgcj\fR will try to optimize the way calls into the runtime are made to initialize static classes upon their first use (this optimization isn't carried out if \f(CW\*(C`\-C\*(C'\fR was specified.) When compiling to native --- 373,385 ---- using \s-1JNI\s0, then you must use \f(CW\*(C`\-fjni\*(C'\fR. This option causes \&\fBgcj\fR to generate stubs which will invoke the underlying \s-1JNI\s0 methods. ! .IP "\fB\-fno\-assert\fR" 4 ! .IX Item "-fno-assert" ! Don't recognize the \f(CW\*(C`assert\*(C'\fR keyword. This is for compatibility ! with older versions of the language specification. ! .IP "\fB\-fno\-optimize\-static\-class\-initialization\fR" 4 .IX Item "-fno-optimize-static-class-initialization" ! When the optimization level is greater or equal to \f(CW\*(C`\-O2\*(C'\fR, \&\fBgcj\fR will try to optimize the way calls into the runtime are made to initialize static classes upon their first use (this optimization isn't carried out if \f(CW\*(C`\-C\*(C'\fR was specified.) When compiling to native *************** package, is configured. \f(CW\*(C`libgc *** 399,421 **** this group into a \fBspec\fR file which is read by \fBgcj\fR. These options are listed here for completeness; if you are using \f(CW\*(C`libgcj\*(C'\fR then you won't want to touch these options. ! .Ip "\fB\-fuse-boehm-gc\fR" 4 .IX Item "-fuse-boehm-gc" This enables the use of the Boehm \s-1GC\s0 bitmap marking code. In particular this causes \fBgcj\fR to put an object marking descriptor into each vtable. ! .Ip "\fB\-fhash-synchronization\fR" 4 .IX Item "-fhash-synchronization" By default, synchronization data (the data used for \f(CW\*(C`synchronize\*(C'\fR, \&\f(CW\*(C`wait\*(C'\fR, and \f(CW\*(C`notify\*(C'\fR) is pointed to by a word in each object. With this option \fBgcj\fR assumes that this information is stored in a hash table and not in the object itself. ! .Ip "\fB\-fuse-divide-subroutine\fR" 4 .IX Item "-fuse-divide-subroutine" On some systems, a library routine is called to perform integer division. This is required to get exception handling correct when dividing by zero. ! .Ip "\fB\-fcheck-references\fR" 4 .IX Item "-fcheck-references" On some systems it's necessary to insert inline checks whenever accessing an object via a reference. On other systems you won't need --- 393,415 ---- this group into a \fBspec\fR file which is read by \fBgcj\fR. These options are listed here for completeness; if you are using \f(CW\*(C`libgcj\*(C'\fR then you won't want to touch these options. ! .IP "\fB\-fuse\-boehm\-gc\fR" 4 .IX Item "-fuse-boehm-gc" This enables the use of the Boehm \s-1GC\s0 bitmap marking code. In particular this causes \fBgcj\fR to put an object marking descriptor into each vtable. ! .IP "\fB\-fhash\-synchronization\fR" 4 .IX Item "-fhash-synchronization" By default, synchronization data (the data used for \f(CW\*(C`synchronize\*(C'\fR, \&\f(CW\*(C`wait\*(C'\fR, and \f(CW\*(C`notify\*(C'\fR) is pointed to by a word in each object. With this option \fBgcj\fR assumes that this information is stored in a hash table and not in the object itself. ! .IP "\fB\-fuse\-divide\-subroutine\fR" 4 .IX Item "-fuse-divide-subroutine" On some systems, a library routine is called to perform integer division. This is required to get exception handling correct when dividing by zero. ! .IP "\fB\-fcheck\-references\fR" 4 .IX Item "-fcheck-references" On some systems it's necessary to insert inline checks whenever accessing an object via a reference. On other systems you won't need *************** this because null pointer accesses are c *** 423,429 **** processor. .SH "FOOTNOTES" .IX Header "FOOTNOTES" ! .Ip "1." 4 The linker by default looks for a global function named \&\f(CW\*(C`main\*(C'\fR. Since Java does not have global functions, and a collection of Java classes may have more than one class with a --- 417,423 ---- processor. .SH "FOOTNOTES" .IX Header "FOOTNOTES" ! .IP "1." 4 The linker by default looks for a global function named \&\f(CW\*(C`main\*(C'\fR. Since Java does not have global functions, and a collection of Java classes may have more than one class with a *************** collection of Java classes may have more *** 431,446 **** \&\f(CW\*(C`main\*(C'\fR methods it should invoke when starting the application. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcjh\fR\|(1), \fIgij\fR\|(1), \fIjv-scan\fR\|(1), \fIjcf-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). --- 425,454 ---- \&\f(CW\*(C`main\*(C'\fR methods it should invoke when starting the application. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcjh\fR\|(1), \fIgij\fR\|(1), \fIjv\-scan\fR\|(1), \fIjcf\-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (c) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). + .PP + (a) The \s-1FSF\s0's Front-Cover Text is: + .PP + .Vb 1 + \& A GNU Manual + .Ve + .PP + (b) The \s-1FSF\s0's Back-Cover Text is: + .PP + .Vb 3 + \& You have freedom to copy and modify this GNU Manual, like GNU + \& software. Copies published by the Free Software Foundation raise + \& funds for GNU development. + .Ve diff -Nrc3pad gcc-3.2.3/gcc/java/gcjh.1 gcc-3.3/gcc/java/gcjh.1 *** gcc-3.2.3/gcc/java/gcjh.1 2003-04-22 07:07:37.000000000 +0000 --- gcc-3.3/gcc/java/gcjh.1 2003-05-14 00:32:09.000000000 +0000 *************** *** 1,8 **** ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Tue Apr 22 07:07:36 2003 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,7 ---- ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 15,26 **** .if t .sp .5v .if n .sp .. - .de Ip \" List item - .br - .ie \\n(.$>=3 .ne \\$3 - .el .ne 3 - .IP "\\$1" \\$2 - .. .de Vb \" Begin verbatim text .ft CW .nf --- 14,19 ---- *************** *** 28,42 **** .. .de Ve \" End verbatim text .ft R - .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 21,34 ---- .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 56,65 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 48,57 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 68,81 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. - .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 60,72 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 135,145 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "GCJH 1" ! .TH GCJH 1 "gcc-3.2.3" "2003-04-22" "GNU" ! .UC .SH "NAME" gcjh \- generate header files from Java class files .SH "SYNOPSIS" --- 126,135 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "GCJH 1" ! .TH GCJH 1 "2003-05-14" "gcc-3.3" "GNU" .SH "NAME" gcjh \- generate header files from Java class files .SH "SYNOPSIS" *************** gcjh \- generate header files from Java *** 147,157 **** gcjh [\fB\-stubs\fR] [\fB\-jni\fR] [\fB\-add\fR \fItext\fR] [\fB\-append\fR \fItext\fR] [\fB\-friend\fR \fItext\fR] [\fB\-preprend\fR \fItext\fR] ! [\fB\*(--classpath\fR=\fIpath\fR] [\fB\*(--CLASSPATH\fR=\fIpath\fR] [\fB\-I\fR\fIdir\fR...] [\fB\-d\fR \fIdir\fR...] [\fB\-o\fR \fIfile\fR] [\fB\-td\fR \fIdir\fR] [\fB\-M\fR] [\fB\-MM\fR] [\fB\-MD\fR] [\fB\-MMD\fR] ! [\fB\*(--version\fR] [\fB\*(--help\fR] [\fB\-v\fR] [\fB\*(--verbose\fR] \fIclassname\fR... .SH "DESCRIPTION" .IX Header "DESCRIPTION" --- 137,147 ---- gcjh [\fB\-stubs\fR] [\fB\-jni\fR] [\fB\-add\fR \fItext\fR] [\fB\-append\fR \fItext\fR] [\fB\-friend\fR \fItext\fR] [\fB\-preprend\fR \fItext\fR] ! [\fB\-\-classpath\fR=\fIpath\fR] [\fB\-\-CLASSPATH\fR=\fIpath\fR] [\fB\-I\fR\fIdir\fR...] [\fB\-d\fR \fIdir\fR...] [\fB\-o\fR \fIfile\fR] [\fB\-td\fR \fIdir\fR] [\fB\-M\fR] [\fB\-MM\fR] [\fB\-MD\fR] [\fB\-MMD\fR] ! [\fB\-\-version\fR] [\fB\-\-help\fR] [\fB\-v\fR] [\fB\-\-verbose\fR] \fIclassname\fR... .SH "DESCRIPTION" .IX Header "DESCRIPTION" *************** implementation files which can be used a *** 161,247 **** required native methods. .SH "OPTIONS" .IX Header "OPTIONS" ! .Ip "\fB\-stubs\fR" 4 .IX Item "-stubs" This causes \f(CW\*(C`gcjh\*(C'\fR to generate stub files instead of header files. By default the stub file will be named after the class, with a suffix of \&\fB.cc\fR. In \s-1JNI\s0 mode, the default output file will have the suffix \&\fB.c\fR. ! .Ip "\fB\-jni\fR" 4 .IX Item "-jni" This tells \f(CW\*(C`gcjh\*(C'\fR to generate a \s-1JNI\s0 header or stub. By default, \&\s-1CNI\s0 headers are generated. ! .Ip "\fB\-add\fR \fItext\fR" 4 .IX Item "-add text" Inserts \fItext\fR into the class body. This is ignored in \s-1JNI\s0 mode. ! .Ip "\fB\-append\fR \fItext\fR" 4 .IX Item "-append text" Inserts \fItext\fR into the header file after the class declaration. This is ignored in \s-1JNI\s0 mode. ! .Ip "\fB\-friend\fR \fItext\fR" 4 .IX Item "-friend text" Inserts \fItext\fR into the class as a \f(CW\*(C`friend\*(C'\fR declaration. This is ignored in \s-1JNI\s0 mode. ! .Ip "\fB\-prepend\fR \fItext\fR" 4 .IX Item "-prepend text" Inserts \fItext\fR into the header file before the class declaration. This is ignored in \s-1JNI\s0 mode. ! .Ip "\fB\*(--classpath=\fR\fIpath\fR" 4 ! .IX Item "classpath=path" .PD 0 ! .Ip "\fB\*(--CLASSPATH=\fR\fIpath\fR" 4 ! .IX Item "CLASSPATH=path" ! .Ip "\fB\-I\fR\fIdirectory\fR" 4 .IX Item "-Idirectory" ! .Ip "\fB\-d\fR \fIdirectory\fR" 4 .IX Item "-d directory" ! .Ip "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" .PD These options are all identical to the corresponding \fBgcj\fR options. ! .Ip "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Sets the output file name. This cannot be used if there is more than one class on the command line. ! .Ip "\fB\-td\fR \fIdirectory\fR" 4 .IX Item "-td directory" Sets the name of the directory to use for temporary files. ! .Ip "\fB\-M\fR" 4 .IX Item "-M" Print all dependencies to stdout; suppress ordinary output. ! .Ip "\fB\-MM\fR" 4 .IX Item "-MM" Print non-system dependencies to stdout; suppress ordinary output. ! .Ip "\fB\-MD\fR" 4 .IX Item "-MD" Print all dependencies to stdout. ! .Ip "\fB\-MMD\fR" 4 .IX Item "-MMD" Print non-system dependencies to stdout. ! .Ip "\fB\*(--help\fR" 4 ! .IX Item "help" Print help about \f(CW\*(C`gcjh\*(C'\fR and exit. No further processing is done. ! .Ip "\fB\*(--version\fR" 4 ! .IX Item "version" Print version information for \f(CW\*(C`gcjh\*(C'\fR and exit. No further processing is done. ! .Ip "\fB\-v, \-\-verbose\fR" 4 .IX Item "-v, --verbose" Print extra information while running. .PP All remaining options are considered to be names of classes. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcj\fR\|(1), \fIgij\fR\|(1), \fIjv-scan\fR\|(1), \fIjcf-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). --- 151,251 ---- required native methods. .SH "OPTIONS" .IX Header "OPTIONS" ! .IP "\fB\-stubs\fR" 4 .IX Item "-stubs" This causes \f(CW\*(C`gcjh\*(C'\fR to generate stub files instead of header files. By default the stub file will be named after the class, with a suffix of \&\fB.cc\fR. In \s-1JNI\s0 mode, the default output file will have the suffix \&\fB.c\fR. ! .IP "\fB\-jni\fR" 4 .IX Item "-jni" This tells \f(CW\*(C`gcjh\*(C'\fR to generate a \s-1JNI\s0 header or stub. By default, \&\s-1CNI\s0 headers are generated. ! .IP "\fB\-add\fR \fItext\fR" 4 .IX Item "-add text" Inserts \fItext\fR into the class body. This is ignored in \s-1JNI\s0 mode. ! .IP "\fB\-append\fR \fItext\fR" 4 .IX Item "-append text" Inserts \fItext\fR into the header file after the class declaration. This is ignored in \s-1JNI\s0 mode. ! .IP "\fB\-friend\fR \fItext\fR" 4 .IX Item "-friend text" Inserts \fItext\fR into the class as a \f(CW\*(C`friend\*(C'\fR declaration. This is ignored in \s-1JNI\s0 mode. ! .IP "\fB\-prepend\fR \fItext\fR" 4 .IX Item "-prepend text" Inserts \fItext\fR into the header file before the class declaration. This is ignored in \s-1JNI\s0 mode. ! .IP "\fB\-\-classpath=\fR\fIpath\fR" 4 ! .IX Item "--classpath=path" .PD 0 ! .IP "\fB\-\-CLASSPATH=\fR\fIpath\fR" 4 ! .IX Item "--CLASSPATH=path" ! .IP "\fB\-I\fR\fIdirectory\fR" 4 .IX Item "-Idirectory" ! .IP "\fB\-d\fR \fIdirectory\fR" 4 .IX Item "-d directory" ! .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" .PD These options are all identical to the corresponding \fBgcj\fR options. ! .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Sets the output file name. This cannot be used if there is more than one class on the command line. ! .IP "\fB\-td\fR \fIdirectory\fR" 4 .IX Item "-td directory" Sets the name of the directory to use for temporary files. ! .IP "\fB\-M\fR" 4 .IX Item "-M" Print all dependencies to stdout; suppress ordinary output. ! .IP "\fB\-MM\fR" 4 .IX Item "-MM" Print non-system dependencies to stdout; suppress ordinary output. ! .IP "\fB\-MD\fR" 4 .IX Item "-MD" Print all dependencies to stdout. ! .IP "\fB\-MMD\fR" 4 .IX Item "-MMD" Print non-system dependencies to stdout. ! .IP "\fB\-\-help\fR" 4 ! .IX Item "--help" Print help about \f(CW\*(C`gcjh\*(C'\fR and exit. No further processing is done. ! .IP "\fB\-\-version\fR" 4 ! .IX Item "--version" Print version information for \f(CW\*(C`gcjh\*(C'\fR and exit. No further processing is done. ! .IP "\fB\-v, \-\-verbose\fR" 4 .IX Item "-v, --verbose" Print extra information while running. .PP All remaining options are considered to be names of classes. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcj\fR\|(1), \fIgij\fR\|(1), \fIjv\-scan\fR\|(1), \fIjcf\-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (c) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). + .PP + (a) The \s-1FSF\s0's Front-Cover Text is: + .PP + .Vb 1 + \& A GNU Manual + .Ve + .PP + (b) The \s-1FSF\s0's Back-Cover Text is: + .PP + .Vb 3 + \& You have freedom to copy and modify this GNU Manual, like GNU + \& software. Copies published by the Free Software Foundation raise + \& funds for GNU development. + .Ve diff -Nrc3pad gcc-3.2.3/gcc/java/gcj.info gcc-3.3/gcc/java/gcj.info *** gcc-3.2.3/gcc/java/gcj.info 2003-04-22 07:07:25.000000000 +0000 --- gcc-3.3/gcc/java/gcj.info 2003-05-14 00:31:48.000000000 +0000 *************** *** 1,5 **** ! This is gcj.info, produced by makeinfo version 4.5 from gcj.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * Gcj: (gcj). Ahead-of-time compiler for the Java language --- 1,24 ---- ! This is gcj.info, produced by makeinfo version 4.2 from gcj.texi. ! ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. ! ! Permission is granted to copy, distribute and/or modify this document ! under the terms of the GNU Free Documentation License, Version 1.2 or ! any later version published by the Free Software Foundation; with the ! Invariant Sections being "GNU General Public License", the Front-Cover ! texts being (a) (see below), and with the Back-Cover Texts being (b) ! (see below). A copy of the license is included in the section entitled ! "GNU Free Documentation License". ! ! (a) The FSF's Front-Cover Text is: + A GNU Manual + + (b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * Gcj: (gcj). Ahead-of-time compiler for the Java language *************** START-INFO-DIR-ENTRY *** 22,31 **** The remote object registry. END-INFO-DIR-ENTRY ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document ! under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being "GNU General Public License", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) --- 41,50 ---- The remote object registry. END-INFO-DIR-ENTRY ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document ! under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being "GNU General Public License", the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) *************** texts being (a) (see below), and with th *** 40,89 **** You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise ! funds for GNU development.  ! Indirect: ! gcj.info-1: 1742 ! gcj.info-2: 49300  Tag Table: ! (Indirect) ! Node: Top1742 ! Node: Copying2826 ! Node: GNU Free Documentation License22029 ! Node: Invoking gcj41913 ! Node: Input and output files42564 ! Node: Input Options43927 ! Node: Encodings47068 ! Node: Warnings48269 ! Node: Code Generation49300 ! Ref: Code Generation-Footnote-152820 ! Node: Configure-time Options53129 ! Node: Compatibility54547 ! Node: Invoking gcjh55839 ! Node: Invoking jv-scan57895 ! Node: Invoking jcf-dump58793 ! Node: Invoking gij59564 ! Node: Invoking jv-convert61446 ! Node: Invoking rmic62516 ! Node: Invoking rmiregistry63891 ! Node: About CNI64302 ! Node: Basic concepts65585 ! Node: Packages68568 ! Node: Primitive types70880 ! Node: Interfaces72528 ! Node: Objects and Classes73437 ! Node: Class Initialization75598 ! Node: Object allocation77832 ! Node: Arrays78807 ! Node: Methods81394 ! Node: Strings84145 ! Node: Mixing with C++85613 ! Node: Exception Handling87496 ! Node: Synchronization89131 ! Node: Invocation91111 ! Node: Reflection95180 ! Node: Resources95632  End Tag Table --- 59,2815 ---- You have freedom to copy and modify this GNU Manual, like GNU software. Copies published by the Free Software Foundation raise ! funds for GNU development. !  ! File: gcj.info, Node: Top, Next: Copying, Up: (dir) ! ! Introduction ! ************ ! ! This manual describes how to use `gcj', the GNU compiler for the ! Java programming language. `gcj' can generate both `.class' files and ! object files, and it can read both Java source code and `.class' files. ! ! * Menu: ! ! * Copying:: The GNU General Public License ! * GNU Free Documentation License:: ! How you can share and copy this manual ! * Invoking gcj:: Compiler options supported by `gcj' ! * Compatibility:: Compatibility between gcj and other tools for Java ! * Invoking gcjh:: Generate header files from class files ! * Invoking jv-scan:: Print information about source files ! * Invoking jcf-dump:: Print information about class files ! * Invoking gij:: Interpreting Java bytecodes ! * Invoking jv-convert:: Converting from one encoding to another ! * Invoking rmic:: Generate stubs for Remote Method Invocation. ! * Invoking rmiregistry:: The remote object registry. ! * About CNI:: Description of the Cygnus Native Interface ! * System properties:: Modifying runtime behavior of the libgcj library ! * Resources:: Where to look for more information  ! File: gcj.info, Node: Copying, Next: GNU Free Documentation License, Prev: Top, Up: Top ! ! GNU GENERAL PUBLIC LICENSE ! ************************** ! ! Version 2, June 1991 ! Copyright (C) 1989, 1991 Free Software Foundation, Inc. ! 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA ! ! Everyone is permitted to copy and distribute verbatim copies ! of this license document, but changing it is not allowed. ! ! Preamble ! ======== ! ! The licenses for most software are designed to take away your ! freedom to share and change it. By contrast, the GNU General Public ! License is intended to guarantee your freedom to share and change free ! software--to make sure the software is free for all its users. This ! General Public License applies to most of the Free Software ! Foundation's software and to any other program whose authors commit to ! using it. (Some other Free Software Foundation software is covered by ! the GNU Library General Public License instead.) You can apply it to ! your programs, too. ! ! When we speak of free software, we are referring to freedom, not ! price. Our General Public Licenses are designed to make sure that you ! have the freedom to distribute copies of free software (and charge for ! this service if you wish), that you receive source code or can get it ! if you want it, that you can change the software or use pieces of it in ! new free programs; and that you know you can do these things. ! ! To protect your rights, we need to make restrictions that forbid ! anyone to deny you these rights or to ask you to surrender the rights. ! These restrictions translate to certain responsibilities for you if you ! distribute copies of the software, or if you modify it. ! ! For example, if you distribute copies of such a program, whether ! gratis or for a fee, you must give the recipients all the rights that ! you have. You must make sure that they, too, receive or can get the ! source code. And you must show them these terms so they know their ! rights. ! ! We protect your rights with two steps: (1) copyright the software, ! and (2) offer you this license which gives you legal permission to copy, ! distribute and/or modify the software. ! ! Also, for each author's protection and ours, we want to make certain ! that everyone understands that there is no warranty for this free ! software. If the software is modified by someone else and passed on, we ! want its recipients to know that what they have is not the original, so ! that any problems introduced by others will not reflect on the original ! authors' reputations. ! ! Finally, any free program is threatened constantly by software ! patents. We wish to avoid the danger that redistributors of a free ! program will individually obtain patent licenses, in effect making the ! program proprietary. To prevent this, we have made it clear that any ! patent must be licensed for everyone's free use or not licensed at all. ! ! The precise terms and conditions for copying, distribution and ! modification follow. ! ! TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ! 0. This License applies to any program or other work which contains a ! notice placed by the copyright holder saying it may be distributed ! under the terms of this General Public License. The "Program", ! below, refers to any such program or work, and a "work based on ! the Program" means either the Program or any derivative work under ! copyright law: that is to say, a work containing the Program or a ! portion of it, either verbatim or with modifications and/or ! translated into another language. (Hereinafter, translation is ! included without limitation in the term "modification".) Each ! licensee is addressed as "you". ! ! Activities other than copying, distribution and modification are ! not covered by this License; they are outside its scope. The act ! of running the Program is not restricted, and the output from the ! Program is covered only if its contents constitute a work based on ! the Program (independent of having been made by running the ! Program). Whether that is true depends on what the Program does. ! ! 1. You may copy and distribute verbatim copies of the Program's ! source code as you receive it, in any medium, provided that you ! conspicuously and appropriately publish on each copy an appropriate ! copyright notice and disclaimer of warranty; keep intact all the ! notices that refer to this License and to the absence of any ! warranty; and give any other recipients of the Program a copy of ! this License along with the Program. ! ! You may charge a fee for the physical act of transferring a copy, ! and you may at your option offer warranty protection in exchange ! for a fee. ! ! 2. You may modify your copy or copies of the Program or any portion ! of it, thus forming a work based on the Program, and copy and ! distribute such modifications or work under the terms of Section 1 ! above, provided that you also meet all of these conditions: ! ! a. You must cause the modified files to carry prominent notices ! stating that you changed the files and the date of any change. ! ! b. You must cause any work that you distribute or publish, that ! in whole or in part contains or is derived from the Program ! or any part thereof, to be licensed as a whole at no charge ! to all third parties under the terms of this License. ! ! c. If the modified program normally reads commands interactively ! when run, you must cause it, when started running for such ! interactive use in the most ordinary way, to print or display ! an announcement including an appropriate copyright notice and ! a notice that there is no warranty (or else, saying that you ! provide a warranty) and that users may redistribute the ! program under these conditions, and telling the user how to ! view a copy of this License. (Exception: if the Program ! itself is interactive but does not normally print such an ! announcement, your work based on the Program is not required ! to print an announcement.) ! ! These requirements apply to the modified work as a whole. If ! identifiable sections of that work are not derived from the ! Program, and can be reasonably considered independent and separate ! works in themselves, then this License, and its terms, do not ! apply to those sections when you distribute them as separate ! works. But when you distribute the same sections as part of a ! whole which is a work based on the Program, the distribution of ! the whole must be on the terms of this License, whose permissions ! for other licensees extend to the entire whole, and thus to each ! and every part regardless of who wrote it. ! ! Thus, it is not the intent of this section to claim rights or ! contest your rights to work written entirely by you; rather, the ! intent is to exercise the right to control the distribution of ! derivative or collective works based on the Program. ! ! In addition, mere aggregation of another work not based on the ! Program with the Program (or with a work based on the Program) on ! a volume of a storage or distribution medium does not bring the ! other work under the scope of this License. ! ! 3. You may copy and distribute the Program (or a work based on it, ! under Section 2) in object code or executable form under the terms ! of Sections 1 and 2 above provided that you also do one of the ! following: ! ! a. Accompany it with the complete corresponding machine-readable ! source code, which must be distributed under the terms of ! Sections 1 and 2 above on a medium customarily used for ! software interchange; or, ! ! b. Accompany it with a written offer, valid for at least three ! years, to give any third party, for a charge no more than your ! cost of physically performing source distribution, a complete ! machine-readable copy of the corresponding source code, to be ! distributed under the terms of Sections 1 and 2 above on a ! medium customarily used for software interchange; or, ! ! c. Accompany it with the information you received as to the offer ! to distribute corresponding source code. (This alternative is ! allowed only for noncommercial distribution and only if you ! received the program in object code or executable form with ! such an offer, in accord with Subsection b above.) ! ! The source code for a work means the preferred form of the work for ! making modifications to it. For an executable work, complete ! source code means all the source code for all modules it contains, ! plus any associated interface definition files, plus the scripts ! used to control compilation and installation of the executable. ! However, as a special exception, the source code distributed need ! not include anything that is normally distributed (in either ! source or binary form) with the major components (compiler, ! kernel, and so on) of the operating system on which the executable ! runs, unless that component itself accompanies the executable. ! ! If distribution of executable or object code is made by offering ! access to copy from a designated place, then offering equivalent ! access to copy the source code from the same place counts as ! distribution of the source code, even though third parties are not ! compelled to copy the source along with the object code. ! ! 4. You may not copy, modify, sublicense, or distribute the Program ! except as expressly provided under this License. Any attempt ! otherwise to copy, modify, sublicense or distribute the Program is ! void, and will automatically terminate your rights under this ! License. However, parties who have received copies, or rights, ! from you under this License will not have their licenses ! terminated so long as such parties remain in full compliance. ! ! 5. You are not required to accept this License, since you have not ! signed it. However, nothing else grants you permission to modify ! or distribute the Program or its derivative works. These actions ! are prohibited by law if you do not accept this License. ! Therefore, by modifying or distributing the Program (or any work ! based on the Program), you indicate your acceptance of this ! License to do so, and all its terms and conditions for copying, ! distributing or modifying the Program or works based on it. ! ! 6. Each time you redistribute the Program (or any work based on the ! Program), the recipient automatically receives a license from the ! original licensor to copy, distribute or modify the Program ! subject to these terms and conditions. You may not impose any ! further restrictions on the recipients' exercise of the rights ! granted herein. You are not responsible for enforcing compliance ! by third parties to this License. ! ! 7. If, as a consequence of a court judgment or allegation of patent ! infringement or for any other reason (not limited to patent ! issues), conditions are imposed on you (whether by court order, ! agreement or otherwise) that contradict the conditions of this ! License, they do not excuse you from the conditions of this ! License. If you cannot distribute so as to satisfy simultaneously ! your obligations under this License and any other pertinent ! obligations, then as a consequence you may not distribute the ! Program at all. For example, if a patent license would not permit ! royalty-free redistribution of the Program by all those who ! receive copies directly or indirectly through you, then the only ! way you could satisfy both it and this License would be to refrain ! entirely from distribution of the Program. ! ! If any portion of this section is held invalid or unenforceable ! under any particular circumstance, the balance of the section is ! intended to apply and the section as a whole is intended to apply ! in other circumstances. ! ! It is not the purpose of this section to induce you to infringe any ! patents or other property right claims or to contest validity of ! any such claims; this section has the sole purpose of protecting ! the integrity of the free software distribution system, which is ! implemented by public license practices. Many people have made ! generous contributions to the wide range of software distributed ! through that system in reliance on consistent application of that ! system; it is up to the author/donor to decide if he or she is ! willing to distribute software through any other system and a ! licensee cannot impose that choice. ! ! This section is intended to make thoroughly clear what is believed ! to be a consequence of the rest of this License. ! ! 8. If the distribution and/or use of the Program is restricted in ! certain countries either by patents or by copyrighted interfaces, ! the original copyright holder who places the Program under this ! License may add an explicit geographical distribution limitation ! excluding those countries, so that distribution is permitted only ! in or among countries not thus excluded. In such case, this ! License incorporates the limitation as if written in the body of ! this License. ! ! 9. The Free Software Foundation may publish revised and/or new ! versions of the General Public License from time to time. Such ! new versions will be similar in spirit to the present version, but ! may differ in detail to address new problems or concerns. ! ! Each version is given a distinguishing version number. If the ! Program specifies a version number of this License which applies ! to it and "any later version", you have the option of following ! the terms and conditions either of that version or of any later ! version published by the Free Software Foundation. If the Program ! does not specify a version number of this License, you may choose ! any version ever published by the Free Software Foundation. ! ! 10. If you wish to incorporate parts of the Program into other free ! programs whose distribution conditions are different, write to the ! author to ask for permission. For software which is copyrighted ! by the Free Software Foundation, write to the Free Software ! Foundation; we sometimes make exceptions for this. Our decision ! will be guided by the two goals of preserving the free status of ! all derivatives of our free software and of promoting the sharing ! and reuse of software generally. ! ! NO WARRANTY ! ! 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO ! WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE ! LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT ! HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT ! WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT ! NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND ! FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE ! QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE ! PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY ! SERVICING, REPAIR OR CORRECTION. ! ! 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN ! WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY ! MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE ! LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, ! INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR ! INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF ! DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU ! OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY ! OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ! ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ! ! END OF TERMS AND CONDITIONS ! ! How to Apply These Terms to Your New Programs ! ============================================= ! ! If you develop a new program, and you want it to be of the greatest ! possible use to the public, the best way to achieve this is to make it ! free software which everyone can redistribute and change under these ! terms. ! ! To do so, attach the following notices to the program. It is safest ! to attach them to the start of each source file to most effectively ! convey the exclusion of warranty; and each file should have at least ! the "copyright" line and a pointer to where the full notice is found. ! ! ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. ! Copyright (C) YEAR NAME OF AUTHOR ! ! 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. ! ! Also add information on how to contact you by electronic and paper ! mail. ! ! If the program is interactive, make it output a short notice like ! this when it starts in an interactive mode: ! ! Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR ! Gnomovision comes with ABSOLUTELY NO WARRANTY; for details ! type `show w'. ! This is free software, and you are welcome to redistribute it ! under certain conditions; type `show c' for details. ! ! The hypothetical commands `show w' and `show c' should show the ! appropriate parts of the General Public License. Of course, the ! commands you use may be called something other than `show w' and `show ! c'; they could even be mouse-clicks or menu items--whatever suits your ! program. ! ! You should also get your employer (if you work as a programmer) or ! your school, if any, to sign a "copyright disclaimer" for the program, ! if necessary. Here is a sample; alter the names: ! ! Yoyodyne, Inc., hereby disclaims all copyright interest in the program ! `Gnomovision' (which makes passes at compilers) written by James Hacker. ! ! SIGNATURE OF TY COON, 1 April 1989 ! Ty Coon, President of Vice ! ! This General Public License does not permit incorporating your ! program into proprietary programs. If your program is a subroutine ! library, you may consider it more useful to permit linking proprietary ! applications with the library. If this is what you want to do, use the ! GNU Library General Public License instead of this License. ! !  ! File: gcj.info, Node: GNU Free Documentation License, Next: Invoking gcj, Prev: Copying, Up: Top ! ! GNU Free Documentation License ! ****************************** ! ! Version 1.2, November 2002 ! Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. ! 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA ! ! Everyone is permitted to copy and distribute verbatim copies ! of this license document, but changing it is not allowed. ! ! 0. PREAMBLE ! ! The purpose of this License is to make a manual, textbook, or other ! functional and useful document "free" in the sense of freedom: to ! assure everyone the effective freedom to copy and redistribute it, ! with or without modifying it, either commercially or ! noncommercially. Secondarily, this License preserves for the ! author and publisher a way to get credit for their work, while not ! being considered responsible for modifications made by others. ! ! This License is a kind of "copyleft", which means that derivative ! works of the document must themselves be free in the same sense. ! It complements the GNU General Public License, which is a copyleft ! license designed for free software. ! ! We have designed this License in order to use it for manuals for ! free software, because free software needs free documentation: a ! free program should come with manuals providing the same freedoms ! that the software does. But this License is not limited to ! software manuals; it can be used for any textual work, regardless ! of subject matter or whether it is published as a printed book. ! We recommend this License principally for works whose purpose is ! instruction or reference. ! ! 1. APPLICABILITY AND DEFINITIONS ! ! This License applies to any manual or other work, in any medium, ! that contains a notice placed by the copyright holder saying it ! can be distributed under the terms of this License. Such a notice ! grants a world-wide, royalty-free license, unlimited in duration, ! to use that work under the conditions stated herein. The ! "Document", below, refers to any such manual or work. Any member ! of the public is a licensee, and is addressed as "you". You ! accept the license if you copy, modify or distribute the work in a ! way requiring permission under copyright law. ! ! A "Modified Version" of the Document means any work containing the ! Document or a portion of it, either copied verbatim, or with ! modifications and/or translated into another language. ! ! A "Secondary Section" is a named appendix or a front-matter section ! of the Document that deals exclusively with the relationship of the ! publishers or authors of the Document to the Document's overall ! subject (or to related matters) and contains nothing that could ! fall directly within that overall subject. (Thus, if the Document ! is in part a textbook of mathematics, a Secondary Section may not ! explain any mathematics.) The relationship could be a matter of ! historical connection with the subject or with related matters, or ! of legal, commercial, philosophical, ethical or political position ! regarding them. ! ! The "Invariant Sections" are certain Secondary Sections whose ! titles are designated, as being those of Invariant Sections, in ! the notice that says that the Document is released under this ! License. If a section does not fit the above definition of ! Secondary then it is not allowed to be designated as Invariant. ! The Document may contain zero Invariant Sections. If the Document ! does not identify any Invariant Sections then there are none. ! ! The "Cover Texts" are certain short passages of text that are ! listed, as Front-Cover Texts or Back-Cover Texts, in the notice ! that says that the Document is released under this License. A ! Front-Cover Text may be at most 5 words, and a Back-Cover Text may ! be at most 25 words. ! ! A "Transparent" copy of the Document means a machine-readable copy, ! represented in a format whose specification is available to the ! general public, that is suitable for revising the document ! straightforwardly with generic text editors or (for images ! composed of pixels) generic paint programs or (for drawings) some ! widely available drawing editor, and that is suitable for input to ! text formatters or for automatic translation to a variety of ! formats suitable for input to text formatters. A copy made in an ! otherwise Transparent file format whose markup, or absence of ! markup, has been arranged to thwart or discourage subsequent ! modification by readers is not Transparent. An image format is ! not Transparent if used for any substantial amount of text. A ! copy that is not "Transparent" is called "Opaque". ! ! Examples of suitable formats for Transparent copies include plain ! ASCII without markup, Texinfo input format, LaTeX input format, ! SGML or XML using a publicly available DTD, and ! standard-conforming simple HTML, PostScript or PDF designed for ! human modification. Examples of transparent image formats include ! PNG, XCF and JPG. Opaque formats include proprietary formats that ! can be read and edited only by proprietary word processors, SGML or ! XML for which the DTD and/or processing tools are not generally ! available, and the machine-generated HTML, PostScript or PDF ! produced by some word processors for output purposes only. ! ! The "Title Page" means, for a printed book, the title page itself, ! plus such following pages as are needed to hold, legibly, the ! material this License requires to appear in the title page. For ! works in formats which do not have any title page as such, "Title ! Page" means the text near the most prominent appearance of the ! work's title, preceding the beginning of the body of the text. ! ! A section "Entitled XYZ" means a named subunit of the Document ! whose title either is precisely XYZ or contains XYZ in parentheses ! following text that translates XYZ in another language. (Here XYZ ! stands for a specific section name mentioned below, such as ! "Acknowledgements", "Dedications", "Endorsements", or "History".) ! To "Preserve the Title" of such a section when you modify the ! Document means that it remains a section "Entitled XYZ" according ! to this definition. ! ! The Document may include Warranty Disclaimers next to the notice ! which states that this License applies to the Document. These ! Warranty Disclaimers are considered to be included by reference in ! this License, but only as regards disclaiming warranties: any other ! implication that these Warranty Disclaimers may have is void and ! has no effect on the meaning of this License. ! ! 2. VERBATIM COPYING ! ! You may copy and distribute the Document in any medium, either ! commercially or noncommercially, provided that this License, the ! copyright notices, and the license notice saying this License ! applies to the Document are reproduced in all copies, and that you ! add no other conditions whatsoever to those of this License. You ! may not use technical measures to obstruct or control the reading ! or further copying of the copies you make or distribute. However, ! you may accept compensation in exchange for copies. If you ! distribute a large enough number of copies you must also follow ! the conditions in section 3. ! ! You may also lend copies, under the same conditions stated above, ! and you may publicly display copies. ! ! 3. COPYING IN QUANTITY ! ! If you publish printed copies (or copies in media that commonly ! have printed covers) of the Document, numbering more than 100, and ! the Document's license notice requires Cover Texts, you must ! enclose the copies in covers that carry, clearly and legibly, all ! these Cover Texts: Front-Cover Texts on the front cover, and ! Back-Cover Texts on the back cover. Both covers must also clearly ! and legibly identify you as the publisher of these copies. The ! front cover must present the full title with all words of the ! title equally prominent and visible. You may add other material ! on the covers in addition. Copying with changes limited to the ! covers, as long as they preserve the title of the Document and ! satisfy these conditions, can be treated as verbatim copying in ! other respects. ! ! If the required texts for either cover are too voluminous to fit ! legibly, you should put the first ones listed (as many as fit ! reasonably) on the actual cover, and continue the rest onto ! adjacent pages. ! ! If you publish or distribute Opaque copies of the Document ! numbering more than 100, you must either include a ! machine-readable Transparent copy along with each Opaque copy, or ! state in or with each Opaque copy a computer-network location from ! which the general network-using public has access to download ! using public-standard network protocols a complete Transparent ! copy of the Document, free of added material. If you use the ! latter option, you must take reasonably prudent steps, when you ! begin distribution of Opaque copies in quantity, to ensure that ! this Transparent copy will remain thus accessible at the stated ! location until at least one year after the last time you ! distribute an Opaque copy (directly or through your agents or ! retailers) of that edition to the public. ! ! It is requested, but not required, that you contact the authors of ! the Document well before redistributing any large number of ! copies, to give them a chance to provide you with an updated ! version of the Document. ! ! 4. MODIFICATIONS ! ! You may copy and distribute a Modified Version of the Document ! under the conditions of sections 2 and 3 above, provided that you ! release the Modified Version under precisely this License, with ! the Modified Version filling the role of the Document, thus ! licensing distribution and modification of the Modified Version to ! whoever possesses a copy of it. In addition, you must do these ! things in the Modified Version: ! ! A. Use in the Title Page (and on the covers, if any) a title ! distinct from that of the Document, and from those of ! previous versions (which should, if there were any, be listed ! in the History section of the Document). You may use the ! same title as a previous version if the original publisher of ! that version gives permission. ! ! B. List on the Title Page, as authors, one or more persons or ! entities responsible for authorship of the modifications in ! the Modified Version, together with at least five of the ! principal authors of the Document (all of its principal ! authors, if it has fewer than five), unless they release you ! from this requirement. ! ! C. State on the Title page the name of the publisher of the ! Modified Version, as the publisher. ! ! D. Preserve all the copyright notices of the Document. ! ! E. Add an appropriate copyright notice for your modifications ! adjacent to the other copyright notices. ! ! F. Include, immediately after the copyright notices, a license ! notice giving the public permission to use the Modified ! Version under the terms of this License, in the form shown in ! the Addendum below. ! ! G. Preserve in that license notice the full lists of Invariant ! Sections and required Cover Texts given in the Document's ! license notice. ! ! H. Include an unaltered copy of this License. ! ! I. Preserve the section Entitled "History", Preserve its Title, ! and add to it an item stating at least the title, year, new ! authors, and publisher of the Modified Version as given on ! the Title Page. If there is no section Entitled "History" in ! the Document, create one stating the title, year, authors, ! and publisher of the Document as given on its Title Page, ! then add an item describing the Modified Version as stated in ! the previous sentence. ! ! J. Preserve the network location, if any, given in the Document ! for public access to a Transparent copy of the Document, and ! likewise the network locations given in the Document for ! previous versions it was based on. These may be placed in ! the "History" section. You may omit a network location for a ! work that was published at least four years before the ! Document itself, or if the original publisher of the version ! it refers to gives permission. ! ! K. For any section Entitled "Acknowledgements" or "Dedications", ! Preserve the Title of the section, and preserve in the ! section all the substance and tone of each of the contributor ! acknowledgements and/or dedications given therein. ! ! L. Preserve all the Invariant Sections of the Document, ! unaltered in their text and in their titles. Section numbers ! or the equivalent are not considered part of the section ! titles. ! ! M. Delete any section Entitled "Endorsements". Such a section ! may not be included in the Modified Version. ! ! N. Do not retitle any existing section to be Entitled ! "Endorsements" or to conflict in title with any Invariant ! Section. ! ! O. Preserve any Warranty Disclaimers. ! ! If the Modified Version includes new front-matter sections or ! appendices that qualify as Secondary Sections and contain no ! material copied from the Document, you may at your option ! designate some or all of these sections as invariant. To do this, ! add their titles to the list of Invariant Sections in the Modified ! Version's license notice. These titles must be distinct from any ! other section titles. ! ! You may add a section Entitled "Endorsements", provided it contains ! nothing but endorsements of your Modified Version by various ! parties--for example, statements of peer review or that the text ! has been approved by an organization as the authoritative ! definition of a standard. ! ! You may add a passage of up to five words as a Front-Cover Text, ! and a passage of up to 25 words as a Back-Cover Text, to the end ! of the list of Cover Texts in the Modified Version. Only one ! passage of Front-Cover Text and one of Back-Cover Text may be ! added by (or through arrangements made by) any one entity. If the ! Document already includes a cover text for the same cover, ! previously added by you or by arrangement made by the same entity ! you are acting on behalf of, you may not add another; but you may ! replace the old one, on explicit permission from the previous ! publisher that added the old one. ! ! The author(s) and publisher(s) of the Document do not by this ! License give permission to use their names for publicity for or to ! assert or imply endorsement of any Modified Version. ! ! 5. COMBINING DOCUMENTS ! ! You may combine the Document with other documents released under ! this License, under the terms defined in section 4 above for ! modified versions, provided that you include in the combination ! all of the Invariant Sections of all of the original documents, ! unmodified, and list them all as Invariant Sections of your ! combined work in its license notice, and that you preserve all ! their Warranty Disclaimers. ! ! The combined work need only contain one copy of this License, and ! multiple identical Invariant Sections may be replaced with a single ! copy. If there are multiple Invariant Sections with the same name ! but different contents, make the title of each such section unique ! by adding at the end of it, in parentheses, the name of the ! original author or publisher of that section if known, or else a ! unique number. Make the same adjustment to the section titles in ! the list of Invariant Sections in the license notice of the ! combined work. ! ! In the combination, you must combine any sections Entitled ! "History" in the various original documents, forming one section ! Entitled "History"; likewise combine any sections Entitled ! "Acknowledgements", and any sections Entitled "Dedications". You ! must delete all sections Entitled "Endorsements." ! ! 6. COLLECTIONS OF DOCUMENTS ! ! You may make a collection consisting of the Document and other ! documents released under this License, and replace the individual ! copies of this License in the various documents with a single copy ! that is included in the collection, provided that you follow the ! rules of this License for verbatim copying of each of the ! documents in all other respects. ! ! You may extract a single document from such a collection, and ! distribute it individually under this License, provided you insert ! a copy of this License into the extracted document, and follow ! this License in all other respects regarding verbatim copying of ! that document. ! ! 7. AGGREGATION WITH INDEPENDENT WORKS ! ! A compilation of the Document or its derivatives with other ! separate and independent documents or works, in or on a volume of ! a storage or distribution medium, is called an "aggregate" if the ! copyright resulting from the compilation is not used to limit the ! legal rights of the compilation's users beyond what the individual ! works permit. When the Document is included an aggregate, this ! License does not apply to the other works in the aggregate which ! are not themselves derivative works of the Document. ! ! If the Cover Text requirement of section 3 is applicable to these ! copies of the Document, then if the Document is less than one half ! of the entire aggregate, the Document's Cover Texts may be placed ! on covers that bracket the Document within the aggregate, or the ! electronic equivalent of covers if the Document is in electronic ! form. Otherwise they must appear on printed covers that bracket ! the whole aggregate. ! ! 8. TRANSLATION ! ! Translation is considered a kind of modification, so you may ! distribute translations of the Document under the terms of section ! 4. Replacing Invariant Sections with translations requires special ! permission from their copyright holders, but you may include ! translations of some or all Invariant Sections in addition to the ! original versions of these Invariant Sections. You may include a ! translation of this License, and all the license notices in the ! Document, and any Warrany Disclaimers, provided that you also ! include the original English version of this License and the ! original versions of those notices and disclaimers. In case of a ! disagreement between the translation and the original version of ! this License or a notice or disclaimer, the original version will ! prevail. ! ! If a section in the Document is Entitled "Acknowledgements", ! "Dedications", or "History", the requirement (section 4) to ! Preserve its Title (section 1) will typically require changing the ! actual title. ! ! 9. TERMINATION ! ! You may not copy, modify, sublicense, or distribute the Document ! except as expressly provided for under this License. Any other ! attempt to copy, modify, sublicense or distribute the Document is ! void, and will automatically terminate your rights under this ! License. However, parties who have received copies, or rights, ! from you under this License will not have their licenses ! terminated so long as such parties remain in full compliance. ! ! 10. FUTURE REVISIONS OF THIS LICENSE ! ! The Free Software Foundation may publish new, revised versions of ! the GNU Free Documentation License from time to time. Such new ! versions will be similar in spirit to the present version, but may ! differ in detail to address new problems or concerns. See ! `http://www.gnu.org/copyleft/'. ! ! Each version of the License is given a distinguishing version ! number. If the Document specifies that a particular numbered ! version of this License "or any later version" applies to it, you ! have the option of following the terms and conditions either of ! that specified version or of any later version that has been ! published (not as a draft) by the Free Software Foundation. If ! the Document does not specify a version number of this License, ! you may choose any version ever published (not as a draft) by the ! Free Software Foundation. ! ! ADDENDUM: How to use this License for your documents ! ==================================================== ! ! To use this License in a document you have written, include a copy of ! the License in the document and put the following copyright and license ! notices just after the title page: ! ! Copyright (C) YEAR YOUR NAME. ! Permission is granted to copy, distribute and/or modify this document ! under the terms of the GNU Free Documentation License, Version 1.2 ! or any later version published by the Free Software Foundation; ! with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. ! A copy of the license is included in the section entitled ``GNU ! Free Documentation License''. ! ! If you have Invariant Sections, Front-Cover Texts and Back-Cover ! Texts, replace the "with...Texts." line with this: ! ! with the Invariant Sections being LIST THEIR TITLES, with ! the Front-Cover Texts being LIST, and with the Back-Cover Texts ! being LIST. ! ! If you have Invariant Sections without Cover Texts, or some other ! combination of the three, merge those two alternatives to suit the ! situation. ! ! If your document contains nontrivial examples of program code, we ! recommend releasing these examples in parallel under your choice of ! free software license, such as the GNU General Public License, to ! permit their use in free software. ! !  ! File: gcj.info, Node: Invoking gcj, Next: Compatibility, Prev: GNU Free Documentation License, Up: Top ! ! Invoking gcj ! ************ ! ! As `gcj' is just another front end to `gcc', it supports many of the ! same options as gcc. *Note Option Summary: (gcc)Option Summary. This ! manual only documents the options specific to `gcj'. ! ! * Menu: ! ! * Input and output files:: ! * Input Options:: How gcj finds files ! * Encodings:: Options controlling source file encoding ! * Warnings:: Options controlling warnings specific to gcj ! * Code Generation:: Options controlling the output of gcj ! * Configure-time Options:: Options you won't use ! !  ! File: gcj.info, Node: Input and output files, Next: Input Options, Up: Invoking gcj ! ! Input and output files ! ====================== ! ! A `gcj' command is like a `gcc' command, in that it consists of a ! number of options and file names. The following kinds of input file ! names are supported: ! ! `FILE.java' ! Java source files. ! ! `FILE.class' ! Java bytecode files. ! ! `FILE.zip' ! `FILE.jar' ! An archive containing one or more `.class' files, all of which are ! compiled. The archive may be compressed. ! ! `@FILE' ! A file containing a whitespace-separated list of input file names. ! (Currently, these must all be `.java' source files, but that may ! change.) Each named file is compiled, just as if it had been on ! the command line. ! ! `LIBRARY.a' ! `LIBRARY.so' ! `-lLIBNAME' ! Libraries to use when linking. See the `gcc' manual. ! ! You can specify more than one input file on the `gcj' command line, ! in which case they will all be compiled. If you specify a `-o FILENAME' ! option, all the input files will be compiled together, producing a ! single output file, named FILENAME. This is allowed even when using ! `-S' or `-c', but not when using `-C' or `--resource'. (This is an ! extension beyond the what plain `gcc' allows.) (If more than one input ! file is specified, all must currently be `.java' files, though we hope ! to fix this.) ! !  ! File: gcj.info, Node: Input Options, Next: Encodings, Prev: Input and output files, Up: Invoking gcj ! ! Input Options ! ============= ! ! `gcj' has options to control where it looks to find files it needs. ! For instance, `gcj' might need to load a class that is referenced by ! the file it has been asked to compile. Like other compilers for the ! Java language, `gcj' has a notion of a "class path". There are several ! options and environment variables which can be used to manipulate the ! class path. When `gcj' looks for a given class, it searches the class ! path looking for matching `.class' or `.java' file. `gcj' comes with a ! built-in class path which points at the installed `libgcj.jar', a file ! which contains all the standard classes. ! ! In the below, a directory or path component can refer either to an ! actual directory on the filesystem, or to a `.zip' or `.jar' file, ! which `gcj' will search as if it is a directory. ! ! `-IDIR' ! All directories specified by `-I' are kept in order and prepended ! to the class path constructed from all the other options. Unless ! compatibility with tools like `javac' is important, we recommend ! always using `-I' instead of the other options for manipulating the ! class path. ! ! `--classpath=PATH' ! This sets the class path to PATH, a colon-separated list of paths ! (on Windows-based systems, a semicolon-separate list of paths). ! This does not override the builtin ("boot") search path. ! ! `--CLASSPATH=PATH' ! Deprecated synonym for `--classpath'. ! ! `--bootclasspath=PATH' ! Where to find the standard builtin classes, such as ! `java.lang.String'. ! ! `--extdirs=PATH' ! For each directory in the PATH, place the contents of that ! directory at the end of the class path. ! ! `CLASSPATH' ! This is an environment variable which holds a list of paths. ! ! The final class path is constructed like so: ! ! * First come all directories specified via `-I'. ! ! * If `--classpath' is specified, its value is appended. Otherwise, ! if the `CLASSPATH' environment variable is specified, then its ! value is appended. Otherwise, the current directory (`"."') is ! appended. ! ! * If `--bootclasspath' was specified, append its value. Otherwise, ! append the built-in system directory, `libgcj.jar'. ! ! * Finally, if `--extdirs' was specified, append the contents of the ! specified directories at the end of the class path. Otherwise, ! append the contents of the built-in extdirs at ! `$(prefix)/share/java/ext'. ! ! The classfile built by `gcj' for the class `java.lang.Object' (and ! placed in `libgcj.jar') contains a special zero length attribute ! `gnu.gcj.gcj-compiled'. The compiler looks for this attribute when ! loading `java.lang.Object' and will report an error if it isn't found, ! unless it compiles to bytecode (the option ! `-fforce-classes-archive-check' can be used to override this behavior ! in this particular case.) ! ! `-fforce-classes-archive-check' ! This forces the compiler to always check for the special zero ! length attribute `gnu.gcj.gcj-compiled' in `java.lang.Object' and ! issue an error if it isn't found. ! !  ! File: gcj.info, Node: Encodings, Next: Warnings, Prev: Input Options, Up: Invoking gcj ! ! Encodings ! ========= ! ! The Java programming language uses Unicode throughout. In an effort ! to integrate well with other locales, `gcj' allows `.java' files to be ! written using almost any encoding. `gcj' knows how to convert these ! encodings into its internal encoding at compile time. ! ! You can use the `--encoding=NAME' option to specify an encoding (of ! a particular character set) to use for source files. If this is not ! specified, the default encoding comes from your current locale. If ! your host system has insufficient locale support, then `gcj' assumes ! the default encoding to be the `UTF-8' encoding of Unicode. ! ! To implement `--encoding', `gcj' simply uses the host platform's ! `iconv' conversion routine. This means that in practice `gcj' is ! limited by the capabilities of the host platform. ! ! The names allowed for the argument `--encoding' vary from platform ! to platform (since they are not standardized anywhere). However, `gcj' ! implements the encoding named `UTF-8' internally, so if you choose to ! use this for your source files you can be assured that it will work on ! every host. ! !  ! File: gcj.info, Node: Warnings, Next: Code Generation, Prev: Encodings, Up: Invoking gcj ! ! Warnings ! ======== ! ! `gcj' implements several warnings. As with other generic `gcc' ! warnings, if an option of the form `-Wfoo' enables a warning, then ! `-Wno-foo' will disable it. Here we've chosen to document the form of ! the warning which will have an effect - the default being the opposite ! of what is listed. ! ! `-Wredundant-modifiers' ! With this flag, `gcj' will warn about redundant modifiers. For ! instance, it will warn if an interface method is declared `public'. ! ! `-Wextraneous-semicolon' ! This causes `gcj' to warn about empty statements. Empty statements ! have been deprecated. ! ! `-Wno-out-of-date' ! This option will cause `gcj' not to warn when a source file is ! newer than its matching class file. By default `gcj' will warn ! about this. ! ! `-Wunused' ! This is the same as `gcc''s `-Wunused'. ! ! `-Wall' ! This is the same as `-Wredundant-modifiers -Wextraneous-semicolon ! -Wunused'. ! !  ! File: gcj.info, Node: Code Generation, Next: Configure-time Options, Prev: Warnings, Up: Invoking gcj ! ! Code Generation ! =============== ! ! In addition to the many `gcc' options controlling code generation, ! `gcj' has several options specific to itself. ! ! `--main=CLASSNAME' ! This option is used when linking to specify the name of the class ! whose `main' method should be invoked when the resulting ! executable is run. (1) ! ! `-DNAME[=VALUE]' ! This option can only be used with `--main'. It defines a system ! property named NAME with value VALUE. If VALUE is not specified ! then it defaults to the empty string. These system properties are ! initialized at the program's startup and can be retrieved at ! runtime using the `java.lang.System.getProperty' method. ! ! `-C' ! This option is used to tell `gcj' to generate bytecode (`.class' ! files) rather than object code. ! ! `--resource RESOURCE-NAME' ! This option is used to tell `gcj' to compile the contents of a ! given file to object code so it may be accessed at runtime with ! the core protocol handler as `core:/RESOURCE-NAME'. Note that ! RESOURCE-NAME is the name of the resource as found at runtime; for ! instance, it could be used in a call to `ResourceBundle.getBundle'. ! The actual file name to be compiled this way must be specified ! separately. ! ! `-d DIRECTORY' ! When used with `-C', this causes all generated `.class' files to ! be put in the appropriate subdirectory of DIRECTORY. By default ! they will be put in subdirectories of the current working ! directory. ! ! `-fno-bounds-check' ! By default, `gcj' generates code which checks the bounds of all ! array indexing operations. With this option, these checks are ! omitted, which can improve performance for code that uses arrays ! extensively. Note that this can result in unpredictable behavior ! if the code in question actually does violate array bounds ! constraints. It is safe to use this option if you are sure that ! your code will never throw an `ArrayIndexOutOfBoundsException'. ! ! `-fno-store-check' ! Don't generate array store checks. When storing objects into ! arrays, a runtime check is normally generated in order to ensure ! that the object is assignment compatible with the component type ! of the array (which may not be known at compile-time). With this ! option, these checks are omitted. This can improve performance ! for code which stores objects into arrays frequently. It is safe ! to use this option if you are sure your code will never throw an ! `ArrayStoreException'. ! ! `-fjni' ! With `gcj' there are two options for writing native methods: CNI ! and JNI. By default `gcj' assumes you are using CNI. If you are ! compiling a class with native methods, and these methods are ! implemented using JNI, then you must use `-fjni'. This option ! causes `gcj' to generate stubs which will invoke the underlying JNI ! methods. ! ! `-fno-assert' ! Don't recognize the `assert' keyword. This is for compatibility ! with older versions of the language specification. ! ! `-fno-optimize-static-class-initialization' ! When the optimization level is greater or equal to `-O2', `gcj' ! will try to optimize the way calls into the runtime are made to ! initialize static classes upon their first use (this optimization ! isn't carried out if `-C' was specified.) When compiling to native ! code, `-fno-optimize-static-class-initialization' will turn this ! optimization off, regardless of the optimization level in use. ! ! ---------- Footnotes ---------- ! ! (1) The linker by default looks for a global function named `main'. ! Since Java does not have global functions, and a collection of Java ! classes may have more than one class with a `main' method, you need to ! let the linker know which of those `main' methods it should invoke when ! starting the application. ! !  ! File: gcj.info, Node: Configure-time Options, Prev: Code Generation, Up: Invoking gcj ! ! Configure-time Options ! ====================== ! ! Some `gcj' code generations options affect the resulting ABI, and so ! can only be meaningfully given when `libgcj', the runtime package, is ! configured. `libgcj' puts the appropriate options from this group into ! a `spec' file which is read by `gcj'. These options are listed here ! for completeness; if you are using `libgcj' then you won't want to ! touch these options. ! ! `-fuse-boehm-gc' ! This enables the use of the Boehm GC bitmap marking code. In ! particular this causes `gcj' to put an object marking descriptor ! into each vtable. ! ! `-fhash-synchronization' ! By default, synchronization data (the data used for `synchronize', ! `wait', and `notify') is pointed to by a word in each object. ! With this option `gcj' assumes that this information is stored in a ! hash table and not in the object itself. ! ! `-fuse-divide-subroutine' ! On some systems, a library routine is called to perform integer ! division. This is required to get exception handling correct when ! dividing by zero. ! ! `-fcheck-references' ! On some systems it's necessary to insert inline checks whenever ! accessing an object via a reference. On other systems you won't ! need this because null pointer accesses are caught automatically ! by the processor. ! !  ! File: gcj.info, Node: Compatibility, Next: Invoking gcjh, Prev: Invoking gcj, Up: Top ! ! Compatibility with the Java Platform ! ************************************ ! ! As we believe it is important that the Java platform not be ! fragmented, `gcj' and `libgcj' try to conform to the relevant Java ! specifications. However, limited manpower and incomplete and unclear ! documentation work against us. So, there are caveats to using `gcj'. ! ! * Menu: ! ! * Limitations:: ! * Extensions:: ! !  ! File: gcj.info, Node: Limitations, Next: Extensions, Up: Compatibility ! ! Standard features not yet supported ! =================================== ! ! This list of compatibility issues is by no means complete. ! ! * `gcj' implements the JDK 1.2 language. It supports inner classes ! and the new 1.4 `assert' keyword. It does not yet support the ! Java 2 `strictfp' keyword (it recognizes the keyword but ignores ! it). ! ! * `libgcj' is largely compatible with the JDK 1.2 libraries. ! However, `libgcj' is missing many packages, most notably ! `java.awt'. There are also individual missing classes and methods. ! We currently do not have a list showing differences between ! `libgcj' and the Java 2 platform. ! ! * Sometimes the `libgcj' implementation of a method or class differs ! from the JDK implementation. This is not always a bug. Still, if ! it affects you, it probably makes sense to report it so that we ! can discuss the appropriate response. ! ! * `gcj' does not currently allow for piecemeal replacement of ! components within `libgcj'. Unfortunately, programmers often want ! to use newer versions of certain packages, such as those provided ! by the Apache Software Foundation's Jakarta project. This has ! forced us to place the `org.w3c.dom' and `org.xml.sax' packages ! into their own libraries, separate from `libgcj'. If you intend to ! use these classes, you must link them explicitly with ! `-l-org-w3c-dom' and `-l-org-xml-sax'. Future versions of `gcj' ! may not have this restriction. ! !  ! File: gcj.info, Node: Extensions, Prev: Limitations, Up: Compatibility ! ! Extra features unique to gcj ! ============================ ! ! The main feature of `gcj' is that it can compile programs written in ! the Java programming language to native code. Most extensions that ! have been added are to facilitate this functionality. ! ! * `gcj' makes it easy and efficient to mix code written in Java and ! C++. *Note About CNI::, for more info on how to use this in your ! programs. ! ! * When you compile your classes into a shared library they can be ! automatically loaded by the `libgcj' system classloader. When ! trying to load a class `gnu.pkg.SomeClass' the system classloader ! will first try to load the shared library ! `lib-gnu-pkg-SomeClass.so', if that fails to load the class then ! it will try to load `lib-gnu-pkg.so' and finally when the class is ! still not loaded it will try to load `lib-gnu.so'. Note that all ! `.'s will be transformed into `-'s and that searching for inner ! classes starts with their outermost outer class. If the class ! cannot be found this way the system classloader tries to use the ! `libgcj' bytecode interpreter to load the class from the standard ! classpath. ! !  ! File: gcj.info, Node: Invoking gcjh, Next: Invoking jv-scan, Prev: Compatibility, Up: Top ! ! Invoking gcjh ! ************* ! ! The `gcjh' program is used to generate header files from class ! files. It can generate both CNI and JNI header files, as well as stub ! implementation files which can be used as a basis for implementing the ! required native methods. ! ! `-stubs' ! This causes `gcjh' to generate stub files instead of header files. ! By default the stub file will be named after the class, with a ! suffix of `.cc'. In JNI mode, the default output file will have ! the suffix `.c'. ! ! `-jni' ! This tells `gcjh' to generate a JNI header or stub. By default, ! CNI headers are generated. ! ! `-add TEXT' ! Inserts TEXT into the class body. This is ignored in JNI mode. ! ! `-append TEXT' ! Inserts TEXT into the header file after the class declaration. ! This is ignored in JNI mode. ! ! `-friend TEXT' ! Inserts TEXT into the class as a `friend' declaration. This is ! ignored in JNI mode. ! ! `-prepend TEXT' ! Inserts TEXT into the header file before the class declaration. ! This is ignored in JNI mode. ! ! `--classpath=PATH' ! `--CLASSPATH=PATH' ! `-IDIRECTORY' ! `-d DIRECTORY' ! `-o FILE' ! These options are all identical to the corresponding `gcj' options. ! ! `-o FILE' ! Sets the output file name. This cannot be used if there is more ! than one class on the command line. ! ! `-td DIRECTORY' ! Sets the name of the directory to use for temporary files. ! ! `-M' ! Print all dependencies to stdout; suppress ordinary output. ! ! `-MM' ! Print non-system dependencies to stdout; suppress ordinary output. ! ! `-MD' ! Print all dependencies to stdout. ! ! `-MMD' ! Print non-system dependencies to stdout. ! ! `--help' ! Print help about `gcjh' and exit. No further processing is done. ! ! `--version' ! Print version information for `gcjh' and exit. No further ! processing is done. ! ! `-v, --verbose' ! Print extra information while running. ! ! All remaining options are considered to be names of classes. ! !  ! File: gcj.info, Node: Invoking jv-scan, Next: Invoking jcf-dump, Prev: Invoking gcjh, Up: Top ! ! Invoking jv-scan ! **************** ! ! The `jv-scan' program can be used to print information about a Java ! source file (`.java' file). ! ! `--no-assert' ! Don't recognize the `assert' keyword, for backwards compatibility ! with older versions of the language specification. ! ! `--complexity' ! This prints a complexity measure, related to cyclomatic ! complexity, for each input file. ! ! `--encoding=NAME' ! This works like the corresponding `gcj' option. ! ! `--print-main' ! This prints the name of the class in this file containing a `main' ! method. ! ! `--list-class' ! This lists the names of all classes defined in the input files. ! ! `--list-filename' ! If `--list-class' is given, this option causes `jv-scan' to also ! print the name of the file in which each class was found. ! ! `-o FILE' ! Print output to the named file. ! ! `--help' ! Print help, then exit. ! ! `--version' ! Print version number, then exit. ! !  ! File: gcj.info, Node: Invoking jcf-dump, Next: Invoking gij, Prev: Invoking jv-scan, Up: Top ! ! Invoking jcf-dump ! ***************** ! ! This is a class file examiner, similar to `javap'. It will print ! information about a number of classes, which are specified by class name ! or file name. ! ! `-c' ! Disassemble method bodies. By default method bodies are not ! printed. ! ! `--javap' ! Generate output in `javap' format. The implementation of this ! feature is very incomplete. ! ! `--classpath=PATH' ! `--CLASSPATH=PATH' ! `-IDIRECTORY' ! `-o FILE' ! These options as the same as the corresponding `gcj' options. ! ! `--help' ! Print help, then exit. ! ! `--version' ! Print version number, then exit. ! ! `-v, --verbose' ! Print extra information while running. ! !  ! File: gcj.info, Node: Invoking gij, Next: Invoking jv-convert, Prev: Invoking jcf-dump, Up: Top ! ! Invoking gij ! ************ ! ! `gij' is a Java bytecode interpreter included with `libgcj'. `gij' ! is not available on every platform; porting it requires a small amount ! of assembly programming which has not been done for all the targets ! supported by `gcj'. ! ! The primary argument to `gij' is the name of a class or, with ! `-jar', a jar file. Options before this argument are interpreted by ! `gij'; remaining options are passed to the interpreted program. ! ! If a class name is specified and this class does not have a `main' ! method with the appropriate signature (a `static void' method with a ! `String[]' as its sole argument), then `gij' will print an error and ! exit. ! ! If a jar file is specified then `gij' will use information in it to ! determine which class' `main' method will be invoked. ! ! `gij' will invoke the `main' method with all the remaining ! command-line options. ! ! Note that `gij' is not limited to interpreting code. Because ! `libgcj' includes a class loader which can dynamically load shared ! objects, it is possible to give `gij' the name of a class which has ! been compiled and put into a shared library on the class path. ! ! `-cp PATH' ! `-classpath PATH' ! Set the initial class path. The class path is used for finding ! class and resource files. If specified, this option overrides the ! `CLASSPATH' environment variable. Note that this option is ! ignored if `-jar' is used. ! ! `-DNAME[=VALUE]' ! This defines a system property named NAME with value VALUE. If ! VALUE is not specified then it defaults to the empty string. ! These system properties are initialized at the program's startup ! and can be retrieved at runtime using the ! `java.lang.System.getProperty' method. ! ! `-ms=NUMBER' ! This sets the initial heap size. ! ! `-mx=NUMBER' ! This sets the maximum heap size. ! ! `-jar' ! This indicates that the name passed to `gij' should be interpreted ! as the name of a jar file, not a class. ! ! `--help' ! Print help, then exit. ! ! `--showversion' ! Print version number and continue. ! ! `--version' ! Print version number, then exit. ! !  ! File: gcj.info, Node: Invoking jv-convert, Next: Invoking rmic, Prev: Invoking gij, Up: Top ! ! Invoking jv-convert ! ******************* ! ! `jv-convert' [`OPTION'] ... [INPUTFILE [OUTPUTFILE]] ! ! `jv-convert' is a utility included with `libgcj' which converts a ! file from one encoding to another. It is similar to the Unix `iconv' ! utility. ! ! The encodings supported by `jv-convert' are platform-dependent. ! Currently there is no way to get a list of all supported encodings. ! ! `--encoding NAME' ! `--from NAME' ! Use NAME as the input encoding. The default is the current ! locale's encoding. ! ! `--to NAME' ! Use NAME as the output encoding. The default is the `JavaSrc' ! encoding; this is ASCII with `\u' escapes for non-ASCII characters. ! ! `-i FILE' ! Read from FILE. The default is to read from standard input. ! ! `-o FILE' ! Write to FILE. The default is to write to standard output. ! ! `--reverse' ! Swap the input and output encodings. ! ! `--help' ! Print a help message, then exit. ! ! `--version' ! Print version information, then exit. ! !  ! File: gcj.info, Node: Invoking rmic, Next: Invoking rmiregistry, Prev: Invoking jv-convert, Up: Top ! ! Invoking rmic ! ************* ! ! `rmic' [`OPTION'] ... CLASS ... ! ! `rmic' is a utility included with `libgcj' which generates stubs for ! remote objects. ! ! Note that this program isn't yet fully compatible with the JDK ! `rmic'. Some options, such as `-classpath', are recognized but ! currently ignored. We have left these options undocumented for now. ! ! Long options can also be given with a GNU-style leading `--'. For ! instance, `--help' is accepted. ! ! `-keep' ! `-keepgenerated' ! By default, `rmic' deletes intermediate files. Either of these ! options causes it not to delete such files. ! ! `-v1.1' ! Cause `rmic' to create stubs and skeletons for the 1.1 protocol ! version. ! ! `-vcompat' ! Cause `rmic' to create stubs and skeletons compatible with both ! the 1.1 and 1.2 protocol versions. This is the default. ! ! `-v1.2' ! Cause `rmic' to create stubs and skeletons for the 1.2 protocol ! version. ! ! `-nocompile' ! Don't compile the generated files. ! ! `-verbose' ! Print information about what `rmic' is doing. ! ! `-d DIRECTORY' ! Put output files in DIRECTORY. By default the files are put in ! the current working directory. ! ! `-help' ! Print a help message, then exit. ! ! `-version' ! Print version information, then exit. ! !  ! File: gcj.info, Node: Invoking rmiregistry, Next: About CNI, Prev: Invoking rmic, Up: Top ! ! Invoking rmiregistry ! ******************** ! ! `rmic' [`OPTION'] ... [PORT] ! ! `rmiregistry' starts a remote object registry on the current host. ! If no port number is specified, then port 1099 is used. ! ! `--help' ! Print a help message, then exit. ! ! `--version' ! Print version information, then exit. ! !  ! File: gcj.info, Node: About CNI, Next: System properties, Prev: Invoking rmiregistry, Up: Top ! ! About CNI ! ********* ! ! This documents CNI, the Cygnus Native Interface, which is is a ! convenient way to write Java native methods using C++. This is a more ! efficient, more convenient, but less portable alternative to the ! standard JNI (Java Native Interface). ! ! * Menu: ! ! * Basic concepts:: Introduction to using CNI. ! * Packages:: How packages are mapped to C++. ! * Primitive types:: Handling Java types in C++. ! * Interfaces:: How Java interfaces map to C++. ! * Objects and Classes:: C++ and Java classes. ! * Class Initialization:: How objects are initialized. ! * Object allocation:: How to create Java objects in C++. ! * Arrays:: Dealing with Java arrays in C++. ! * Methods:: Java methods in C++. ! * Strings:: Information about Java Strings. ! * Mixing with C++:: How CNI can interoperate with C++. ! * Exception Handling:: How exceptions are handled. ! * Synchronization:: Synchronizing between Java and C++. ! * Invocation:: Starting the Java runtime from C++. ! * Reflection:: Using reflection from C++. ! !  ! File: gcj.info, Node: Basic concepts, Next: Packages, Up: About CNI ! ! Basic concepts ! ============== ! ! In terms of languages features, Java is mostly a subset of C++. ! Java has a few important extensions, plus a powerful standard class ! library, but on the whole that does not change the basic similarity. ! Java is a hybrid object-oriented language, with a few native types, in ! addition to class types. It is class-based, where a class may have ! static as well as per-object fields, and static as well as instance ! methods. Non-static methods may be virtual, and may be overloaded. ! Overloading is resolved at compile time by matching the actual argument ! types against the parameter types. Virtual methods are implemented ! using indirect calls through a dispatch table (virtual function table). ! Objects are allocated on the heap, and initialized using a constructor ! method. Classes are organized in a package hierarchy. ! ! All of the listed attributes are also true of C++, though C++ has ! extra features (for example in C++ objects may be allocated not just on ! the heap, but also statically or in a local stack frame). Because ! `gcj' uses the same compiler technology as G++ (the GNU C++ compiler), ! it is possible to make the intersection of the two languages use the ! same ABI (object representation and calling conventions). The key idea ! in CNI is that Java objects are C++ objects, and all Java classes are ! C++ classes (but not the other way around). So the most important task ! in integrating Java and C++ is to remove gratuitous incompatibilities. ! ! You write CNI code as a regular C++ source file. (You do have to use ! a Java/CNI-aware C++ compiler, specifically a recent version of G++.) ! ! A CNI C++ source file must have: ! ! #include ! ! and then must include one header file for each Java class it uses, e.g.: ! ! #include ! #include ! #include ! ! These header files are automatically generated by `gcjh'. ! ! CNI provides some functions and macros to make using Java objects and ! primitive types from C++ easier. In general, these CNI functions and ! macros start with the `Jv' prefix, for example the function ! `JvNewObjectArray'. This convention is used to avoid conflicts with ! other libraries. Internal functions in CNI start with the prefix ! `_Jv_'. You should not call these; if you find a need to, let us know ! and we will try to come up with an alternate solution. (This manual ! lists `_Jv_AllocBytes' as an example; CNI should instead provide a ! `JvAllocBytes' function.) ! ! Limitations ! ----------- ! ! Whilst a Java class is just a C++ class that doesn't mean that you ! are freed from the shackles of Java, a CNI C++ class must adhere to the ! rules of the Java programming language. ! ! For example: it is not possible to declare a method in a CNI class ! that will take a C string (`char*') as an argument, or to declare a ! member variable of some non-Java datatype. ! !  ! File: gcj.info, Node: Packages, Next: Primitive types, Prev: Basic concepts, Up: About CNI ! ! Packages ! ======== ! ! The only global names in Java are class names, and packages. A ! "package" can contain zero or more classes, and also zero or more ! sub-packages. Every class belongs to either an unnamed package or a ! package that has a hierarchical and globally unique name. ! ! A Java package is mapped to a C++ "namespace". The Java class ! `java.lang.String' is in the package `java.lang', which is a ! sub-package of `java'. The C++ equivalent is the class ! `java::lang::String', which is in the namespace `java::lang' which is ! in the namespace `java'. ! ! Here is how you could express this: ! ! (// Declare the class(es), possibly in a header file: ! namespace java { ! namespace lang { ! class Object; ! class String; ! ... ! } ! } ! ! class java::lang::String : public java::lang::Object ! { ! ... ! }; ! ! The `gcjh' tool automatically generates the necessary namespace ! declarations. ! ! Leaving out package names ! ------------------------- ! ! Always using the fully-qualified name of a java class can be ! tiresomely verbose. Using the full qualified name also ties the code ! to a single package making code changes necessary should the class move ! from one package to another. The Java `package' declaration specifies ! that the following class declarations are in the named package, without ! having to explicitly name the full package qualifiers. The `package' ! declaration can be followed by zero or more `import' declarations, which ! allows either a single class or all the classes in a package to be ! named by a simple identifier. C++ provides something similar with the ! `using' declaration and directive. ! ! In Java: ! ! import PACKAGE-NAME.CLASS-NAME; ! ! allows the program text to refer to CLASS-NAME as a shorthand for the ! fully qualified name: `PACKAGE-NAME.CLASS-NAME'. ! ! To achieve the same effect C++, you have to do this: ! ! using PACKAGE-NAME::CLASS-NAME; ! ! Java can also cause imports on demand, like this: ! ! import PACKAGE-NAME.*; ! ! Doing this allows any class from the package PACKAGE-NAME to be ! referred to only by its class-name within the program text. ! ! The same effect can be achieved in C++ like this: ! ! using namespace PACKAGE-NAME; ! !  ! File: gcj.info, Node: Primitive types, Next: Interfaces, Prev: Packages, Up: About CNI ! ! Primitive types ! =============== ! ! Java provides 8 "primitives" types which represent integers, floats, ! characters and booleans (and also the void type). C++ has its own very ! similar concrete types. Such types in C++ however are not always ! implemented in the same way (an int might be 16, 32 or 64 bits for ! example) so CNI provides a special C++ type for each primitive Java ! type: ! ! *Java type* *C/C++ typename* *Description* ! `char' `jchar' 16 bit Unicode character ! `boolean' `jboolean' logical (true or false) values ! `byte' `jbyte' 8-bit signed integer ! `short' `jshort' 16 bit signed integer ! `int' `jint' 32 bit signed integer ! `long' `jlong' 64 bit signed integer ! `float' `jfloat' 32 bit IEEE floating point number ! `double' `jdouble' 64 bit IEEE floating point number ! `void' `void' no value ! ! When referring to a Java type You should always use these C++ ! typenames (e.g.: `jint') to avoid disappointment. ! ! Reference types associated with primitive types ! ----------------------------------------------- ! ! In Java each primitive type has an associated reference type, e.g.: ! `boolean' has an associated `java.lang.Boolean' class. In order to ! make working with such classes easier GCJ provides the macro ! `JvPrimClass': ! ! - macro: JvPrimClass type ! Return a pointer to the `Class' object corresponding to the type ! supplied. ! ! JvPrimClass(void) => java.lang.Void.TYPE ! ! !  ! File: gcj.info, Node: Interfaces, Next: Objects and Classes, Prev: Primitive types, Up: About CNI ! ! Interfaces ! ========== ! ! A Java class can "implement" zero or more "interfaces", in addition ! to inheriting from a single base class. ! ! CNI allows CNI code to implement methods of interfaces. You can ! also call methods through interface references, with some limitations. ! ! CNI doesn't understand interface inheritance at all yet. So, you ! can only call an interface method when the declared type of the field ! being called matches the interface which declares that method. The ! workaround is to cast the interface reference to the right ! superinterface. ! ! For example if you have: ! ! interface A ! { ! void a(); ! } ! ! interface B extends A ! { ! void b(); ! } ! ! and declare a variable of type `B' in C++, you can't call `a()' ! unless you cast it to an `A' first. ! !  ! File: gcj.info, Node: Objects and Classes, Next: Class Initialization, Prev: Interfaces, Up: About CNI ! ! Objects and Classes ! =================== ! ! Classes ! ------- ! ! All Java classes are derived from `java.lang.Object'. C++ does not ! have a unique root class, but we use the C++ class `java::lang::Object' ! as the C++ version of the `java.lang.Object' Java class. All other ! Java classes are mapped into corresponding C++ classes derived from ! `java::lang::Object'. ! ! Interface inheritance (the `implements' keyword) is currently not ! reflected in the C++ mapping. ! ! Object fields ! ------------- ! ! Each object contains an object header, followed by the instance ! fields of the class, in order. The object header consists of a single ! pointer to a dispatch or virtual function table. (There may be extra ! fields _in front of_ the object, for example for memory management, but ! this is invisible to the application, and the reference to the object ! points to the dispatch table pointer.) ! ! The fields are laid out in the same order, alignment, and size as in ! C++. Specifically, 8-bite and 16-bit native types (`byte', `short', ! `char', and `boolean') are _not_ widened to 32 bits. Note that the ! Java VM does extend 8-bit and 16-bit types to 32 bits when on the VM ! stack or temporary registers. ! ! If you include the `gcjh'-generated header for a class, you can ! access fields of Java classes in the _natural_ way. For example, given ! the following Java class: ! ! public class Int ! { ! public int i; ! public Integer (int i) { this.i = i; } ! public static zero = new Integer(0); ! } ! ! you can write: ! ! #include ; ! #include ; ! ! Int* ! mult (Int *p, jint k) ! { ! if (k == 0) ! return Int::zero; // Static member access. ! return new Int(p->i * k); ! } ! ! Access specifiers ! ----------------- ! ! CNI does not strictly enforce the Java access specifiers, because ! Java permissions cannot be directly mapped into C++ permission. ! Private Java fields and methods are mapped to private C++ fields and ! methods, but other fields and methods are mapped to public fields and ! methods. ! !  ! File: gcj.info, Node: Class Initialization, Next: Object allocation, Prev: Objects and Classes, Up: About CNI ! ! Class Initialization ! ==================== ! ! Java requires that each class be automatically initialized at the ! time of the first active use. Initializing a class involves ! initializing the static fields, running code in class initializer ! methods, and initializing base classes. There may also be some ! implementation specific actions, such as allocating `String' objects ! corresponding to string literals in the code. ! ! The GCJ compiler inserts calls to `JvInitClass' at appropriate ! places to ensure that a class is initialized when required. The C++ ! compiler does not insert these calls automatically--it is the ! programmer's responsibility to make sure classes are initialized. ! However, this is fairly painless because of the conventions assumed by ! the Java system. ! ! First, `libgcj' will make sure a class is initialized before an ! instance of that object is created. This is one of the ! responsibilities of the `new' operation. This is taken care of both in ! Java code, and in C++ code. When G++ sees a `new' of a Java class, it ! will call a routine in `libgcj' to allocate the object, and that ! routine will take care of initializing the class. Note however that ! this does not happen for Java arrays; you must allocate those using the ! appropriate CNI function. It follows that you can access an instance ! field, or call an instance (non-static) method and be safe in the ! knowledge that the class and all of its base classes have been ! initialized. ! ! Invoking a static method is also safe. This is because the Java ! compiler adds code to the start of a static method to make sure the ! class is initialized. However, the C++ compiler does not add this ! extra code. Hence, if you write a native static method using CNI, you ! are responsible for calling `JvInitClass' before doing anything else in ! the method (unless you are sure it is safe to leave it out). ! ! Accessing a static field also requires the class of the field to be ! initialized. The Java compiler will generate code to call ! `Jv_InitClass' before getting or setting the field. However, the C++ ! compiler will not generate this extra code, so it is your ! responsibility to make sure the class is initialized before you access ! a static field from C++. ! !  ! File: gcj.info, Node: Object allocation, Next: Arrays, Prev: Class Initialization, Up: About CNI ! ! Object allocation ! ================= ! ! New Java objects are allocated using a "class instance creation ! expression", e.g.: ! ! new TYPE ( ... ) ! ! The same syntax is used in C++. The main difference is that C++ ! objects have to be explicitly deleted; in Java they are automatically ! deleted by the garbage collector. Using CNI, you can allocate a new ! Java object using standard C++ syntax and the C++ compiler will allocate ! memory from the garbage collector. If you have overloaded ! constructors, the compiler will choose the correct one using standard ! C++ overload resolution rules. ! ! For example: ! ! java::util::Hashtable *ht = new java::util::Hashtable(120); ! ! - Function: void* _Jv_AllocBytes (jsize SIZE) ! Allocates SIZE bytes from the heap. The memory is not scanned by ! the garbage collector but it freed if no references to it are ! discovered. ! !  ! File: gcj.info, Node: Arrays, Next: Methods, Prev: Object allocation, Up: About CNI ! ! Arrays ! ====== ! ! While in many ways Java is similar to C and C++, it is quite ! different in its treatment of arrays. C arrays are based on the idea ! of pointer arithmetic, which would be incompatible with Java's security ! requirements. Java arrays are true objects (array types inherit from ! `java.lang.Object'). An array-valued variable is one that contains a ! reference (pointer) to an array object. ! ! Referencing a Java array in C++ code is done using the `JArray' ! template, which as defined as follows: ! ! class __JArray : public java::lang::Object ! { ! public: ! int length; ! }; ! ! template ! class JArray : public __JArray ! { ! T data[0]; ! public: ! T& operator[](jint i) { return data[i]; } ! }; ! ! There are a number of `typedef's which correspond to `typedef's from ! the JNI. Each is the type of an array holding objects of the relevant ! type: ! ! typedef __JArray *jarray; ! typedef JArray *jobjectArray; ! typedef JArray *jbooleanArray; ! typedef JArray *jbyteArray; ! typedef JArray *jcharArray; ! typedef JArray *jshortArray; ! typedef JArray *jintArray; ! typedef JArray *jlongArray; ! typedef JArray *jfloatArray; ! typedef JArray *jdoubleArray; ! ! - Method on template: T* elements (JArray ARRAY) ! This template function can be used to get a pointer to the ! elements of the `array'. For instance, you can fetch a pointer to ! the integers that make up an `int[]' like so: ! ! extern jintArray foo; ! jint *intp = elements (foo); ! ! The name of this function may change in the future. ! ! - Function: jobjectArray JvNewObjectArray (jsize LENGTH, jclass KLASS, ! jobject INIT) ! Here `klass' is the type of elements of the array and `init' is ! the initial value put into every slot in the array. ! ! Creating arrays ! --------------- ! ! For each primitive type there is a function which can be used to ! create a new array of that type. The name of the function is of the ! form: ! ! JvNewTYPEArray ! ! For example: ! ! JvNewBooleanArray ! ! can be used to create an array of Java primitive boolean types. ! ! The following function definition is the template for all such ! functions: ! ! - Function: jbooleanArray JvNewBooleanArray (jint LENGTH) ! Create's an array LENGTH indices long. ! ! - Function: jsize JvGetArrayLength (jarray ARRAY) ! Returns the length of the ARRAY. ! !  ! File: gcj.info, Node: Methods, Next: Strings, Prev: Arrays, Up: About CNI ! ! Methods ! ======= ! ! Java methods are mapped directly into C++ methods. The header files ! generated by `gcjh' include the appropriate method definitions. ! Basically, the generated methods have the same names and ! _corresponding_ types as the Java methods, and are called in the ! natural manner. ! ! Overloading ! ----------- ! ! Both Java and C++ provide method overloading, where multiple methods ! in a class have the same name, and the correct one is chosen (at ! compile time) depending on the argument types. The rules for choosing ! the correct method are (as expected) more complicated in C++ than in ! Java, but given a set of overloaded methods generated by `gcjh' the C++ ! compiler will choose the expected one. ! ! Common assemblers and linkers are not aware of C++ overloading, so ! the standard implementation strategy is to encode the parameter types ! of a method into its assembly-level name. This encoding is called ! "mangling", and the encoded name is the "mangled name". The same ! mechanism is used to implement Java overloading. For C++/Java ! interoperability, it is important that both the Java and C++ compilers ! use the _same_ encoding scheme. ! ! Static methods ! -------------- ! ! Static Java methods are invoked in CNI using the standard C++ ! syntax, using the `::' operator rather than the `.' operator. ! ! For example: ! ! jint i = java::lang::Math::round((jfloat) 2.3); ! ! C++ method definition syntax is used to define a static native method. ! For example: ! ! #include ! java::lang::Integer* ! java::lang::Integer::getInteger(jstring str) ! { ! ... ! } ! ! Object Constructors ! ------------------- ! ! Constructors are called implicitly as part of object allocation ! using the `new' operator. ! ! For example: ! ! java::lang::Integer *x = new java::lang::Integer(234); ! ! Java does not allow a constructor to be a native method. This ! limitation can be coded round however because a constructor can _call_ ! a native method. ! ! Instance methods ! ---------------- ! ! Calling a Java instance method from a C++ CNI method is done using ! the standard C++ syntax, e.g.: ! ! // First create the Java object. ! java::lang::Integer *x = new java::lang::Integer(234); ! // Now call a method. ! jint prim_value = x->intValue(); ! if (x->longValue == 0) ! ... ! ! Defining a Java native instance method is also done the natural way: ! ! #include ! ! jdouble ! java::lang:Integer::doubleValue() ! { ! return (jdouble) value; ! } ! ! Interface methods ! ----------------- ! ! In Java you can call a method using an interface reference. This is ! supported, but not completely. *Note Interfaces::. ! !  ! File: gcj.info, Node: Strings, Next: Mixing with C++, Prev: Methods, Up: About CNI ! ! Strings ! ======= ! ! CNI provides a number of utility functions for working with Java ! Java `String' objects. The names and interfaces are analogous to those ! of JNI. ! ! - Function: jstring JvNewString (const char* CHARS, jsize LEN) ! Returns a Java `String' object with characters from the C string ! CHARS up to the index LEN in that array. ! ! - Function: jstring JvNewStringLatin1 (const char* BYTES, jsize LEN) ! Returns a Java `String' made up of LEN bytes from BYTES. ! ! - Function: jstring JvNewStringLatin1 (const char* BYTES) ! As above but the length of the `String' is `strlen(BYTES)'. ! ! - Function: jstring JvNewStringUTF (const char* BYTES) ! Returns a `String' which is made up of the UTF encoded characters ! present in the C string BYTES. ! ! - Function: jchar* JvGetStringChars (jstring STR) ! Returns a pointer to an array of characters making up the `String' ! STR. ! ! - Function: int JvGetStringUTFLength (jstring STR) ! Returns the number of bytes required to encode the contents of the ! `String' STR in UTF-8. ! ! - Function: jsize JvGetStringUTFRegion (jstring STR, jsize START, ! jsize LEN, char* BUF) ! Puts the UTF-8 encoding of a region of the `String' STR into the ! buffer `buf'. The region to fetch is marked by START and LEN. ! ! Note that BUF is a buffer, not a C string. It is _not_ null ! terminated. ! !  ! File: gcj.info, Node: Mixing with C++, Next: Exception Handling, Prev: Strings, Up: About CNI ! ! Interoperating with C/C++ ! ========================= ! ! Because CNI is designed to represent Java classes and methods it ! cannot be mixed readily with C/C++ types. ! ! One important restriction is that Java classes cannot have non-Java ! type instance or static variables and cannot have methods which take ! non-Java types as arguments or return non-Java types. ! ! None of the following is possible with CNI: ! ! ! class ::MyClass : public java::lang::Object ! { ! char* variable; // char* is not a valid Java type. ! } ! ! ! uint ! ::SomeClass::someMethod (char *arg) ! { ! . ! . ! . ! } // `uint' is not a valid Java type, neither is `char*' ! ! Of course, it is ok to use C/C++ types within the scope of a method: ! ! jint ! ::SomeClass::otherMethod (jstring str) ! { ! char *arg = ... ! . ! . ! . ! } ! ! But this restriction can cause a problem so CNI includes the ! `gnu.gcj.RawData' class. The `RawData' class is a "non-scanned ! reference" type. In other words variables declared of type `RawData' ! can contain any data and are not checked by the compiler in any way. ! ! This means that you can put C/C++ data structures (including classes) ! in your CNI classes, as long as you use the appropriate cast. ! ! Here are some examples: ! ! ! class ::MyClass : public java::lang::Object ! { ! gnu.gcj.RawData string; ! ! MyClass (); ! gnu.gcj.RawData getText (); ! void printText (); ! } ! ! ::MyClass::MyClass () ! { ! char* text = ... ! string = text; ! } ! ! gnu.gcj.RawData ! ::MyClass::getText () ! { ! return string; ! } ! ! void ! ::MyClass::printText () ! { ! printf("%s\n", (char*) string); ! } ! !  ! File: gcj.info, Node: Exception Handling, Next: Synchronization, Prev: Mixing with C++, Up: About CNI ! ! Exception Handling ! ================== ! ! While C++ and Java share a common exception handling framework, ! things are not yet perfectly integrated. The main issue is that the ! run-time type information facilities of the two languages are not ! integrated. ! ! Still, things work fairly well. You can throw a Java exception from ! C++ using the ordinary `throw' construct, and this exception can be ! caught by Java code. Similarly, you can catch an exception thrown from ! Java using the C++ `catch' construct. ! ! Here is an example: ! ! if (i >= count) ! throw new java::lang::IndexOutOfBoundsException(); ! ! Normally, G++ will automatically detect when you are writing C++ ! code that uses Java exceptions, and handle them appropriately. ! However, if C++ code only needs to execute destructors when Java ! exceptions are thrown through it, GCC will guess incorrectly. Sample ! problematic code: ! ! struct S { ~S(); }; ! ! extern void bar(); // Is implemented in Java and may throw exceptions. ! ! void foo() ! { ! S s; ! bar(); ! } ! ! The usual effect of an incorrect guess is a link failure, ! complaining of a missing routine called `__gxx_personality_v0'. ! ! You can inform the compiler that Java exceptions are to be used in a ! translation unit, irrespective of what it might think, by writing ! `#pragma GCC java_exceptions' at the head of the file. This `#pragma' ! must appear before any functions that throw or catch exceptions, or run ! destructors when exceptions are thrown through them. ! !  ! File: gcj.info, Node: Synchronization, Next: Invocation, Prev: Exception Handling, Up: About CNI ! ! Synchronization ! =============== ! ! Each Java object has an implicit monitor. The Java VM uses the ! instruction `monitorenter' to acquire and lock a monitor, and ! `monitorexit' to release it. ! ! The corresponding CNI macros are `JvMonitorEnter' and ! `JvMonitorExit' (JNI has similar methods `MonitorEnter' and ! `MonitorExit'). ! ! The Java source language does not provide direct access to these ! primitives. Instead, there is a `synchronized' statement that does an ! implicit `monitorenter' before entry to the block, and does a ! `monitorexit' on exit from the block. Note that the lock has to be ! released even when the block is abnormally terminated by an exception, ! which means there is an implicit `try finally' surrounding ! synchronization locks. ! ! From C++, it makes sense to use a destructor to release a lock. CNI ! defines the following utility class: ! ! class JvSynchronize() { ! jobject obj; ! JvSynchronize(jobject o) { obj = o; JvMonitorEnter(o); } ! ~JvSynchronize() { JvMonitorExit(obj); } ! }; ! ! So this Java code: ! ! synchronized (OBJ) ! { ! CODE ! } ! ! might become this C++ code: ! ! { ! JvSynchronize dummy (OBJ); ! CODE; ! } ! ! Java also has methods with the `synchronized' attribute. This is ! equivalent to wrapping the entire method body in a `synchronized' ! statement. (Alternatively, an implementation could require the caller ! to do the synchronization. This is not practical for a compiler, ! because each virtual method call would have to test at run-time if ! synchronization is needed.) Since in `gcj' the `synchronized' ! attribute is handled by the method implementation, it is up to the ! programmer of a synchronized native method to handle the synchronization ! (in the C++ implementation of the method). In other words, you need to ! manually add `JvSynchronize' in a `native synchronized' method. ! !  ! File: gcj.info, Node: Invocation, Next: Reflection, Prev: Synchronization, Up: About CNI ! ! Invocation ! ========== ! ! CNI permits C++ applications to make calls into Java classes, in ! addition to allowing Java code to call into C++. Several functions, ! known as the "invocation API", are provided to support this. ! ! - Function: jint JvCreateJavaVM (void* VM_ARGS) ! Initializes the Java runtime. This function performs essential ! initialization of the threads interface, garbage collector, ! exception handling and other key aspects of the runtime. It must ! be called once by an application with a non-Java `main()' ! function, before any other Java or CNI calls are made. It is ! safe, but not recommended, to call `JvCreateJavaVM()' more than ! once provided it is only called from a single thread. The VMARGS ! parameter can be used to specify initialization parameters for the ! Java runtime. It may be `NULL'. This function returns `0' upon ! success, or `-1' if the runtime is already initialized. ! ! _Note:_ In GCJ 3.1, the `vm_args' parameter is ignored. It may be ! used in a future release. ! ! - Function: java::lang::Thread* JvAttachCurrentThread (jstring NAME, ! java::lang::ThreadGroup* GROUP) ! Registers an existing thread with the Java runtime. This must be ! called once from each thread, before that thread makes any other ! Java or CNI calls. It must be called after `JvCreateJavaVM'. NAME ! specifies a name for the thread. It may be `NULL', in which case a ! name will be generated. GROUP is the ThreadGroup in which this ! thread will be a member. If it is `NULL', the thread will be a ! member of the main thread group. The return value is the Java ! `Thread' object that represents the thread. It is safe to call ! `JvAttachCurrentThread()' more than once from the same thread. If ! the thread is already attached, the call is ignored and the current ! thread object is returned. ! ! - Function: jint JvDetachCurrentThread () ! Unregisters a thread from the Java runtime. This should be called ! by threads that were attached using `JvAttachCurrentThread()', ! after they have finished making calls to Java code. This ensures ! that any resources associated with the thread become eligible for ! garbage collection. This function returns `0' upon success, or ! `-1' if the current thread is not attached. ! ! Handling uncaught exceptions ! ---------------------------- ! ! If an exception is thrown from Java code called using the invocation ! API, and no handler for the exception can be found, the runtime will ! abort the application. In order to make the application more robust, it ! is recommended that code which uses the invocation API be wrapped by a ! top-level try/catch block that catches all Java exceptions. ! ! Example ! ------- ! ! The following code demonstrates the use of the invocation API. In ! this example, the C++ application initializes the Java runtime and ! attaches itself. The `java.lang.System' class is initialized in order to ! access its `out' field, and a Java string is printed. Finally, the ! thread is detached from the runtime once it has finished making Java ! calls. Everything is wrapped with a try/catch block to provide a ! default handler for any uncaught exceptions. ! ! The example can be compiled with `c++ test.cc -lgcj'. ! ! // test.cc ! #include ! #include ! #include ! #include ! ! int main(int argc, char *argv) ! { ! using namespace java::lang; ! ! try ! { ! JvCreateJavaVM(NULL); ! JvAttachCurrentThread(NULL, NULL); ! ! String *message = JvNewStringLatin1("Hello from C++"); ! JvInitClass(&System::class$); ! System::out->println(message); ! ! JvDetachCurrentThread(); ! } ! catch (Throwable *t) ! { ! System::err->println(JvNewStringLatin1("Unhandled Java exception:")); ! t->printStackTrace(); ! } ! } ! !  ! File: gcj.info, Node: Reflection, Prev: Invocation, Up: About CNI ! ! Reflection ! ========== ! ! Reflection is possible with CNI code, it functions similarly to how ! it functions with JNI. ! ! The types `jfieldID' and `jmethodID' are as in JNI. ! ! The functions: ! ! * `JvFromReflectedField', ! ! * `JvFromReflectedMethod', ! ! * `JvToReflectedField' ! ! * `JvToFromReflectedMethod' ! ! will be added shortly, as will other functions corresponding to JNI. ! !  ! File: gcj.info, Node: System properties, Next: Resources, Prev: About CNI, Up: Top ! ! System properties ! ***************** ! ! The runtime behavior of the `libgcj' library can be modified by ! setting certain system properties. These properties can be compiled ! into the program using the `-DNAME[=VALUE]' option to `gcj' or by ! setting them explicitly in the program by calling the ! `java.lang.System.setProperty()' method. Some system properties are ! only used for informational purposes (like giving a version number or a ! user name). A program can inspect the current value of a property by ! calling the `java.lang.System.getProperty()' method. ! ! * Menu: ! ! * Standard Properties:: Standard properties supported by `libgcj' ! * GNU Classpath Properties:: Properties found in Classpath based libraries ! * libgcj Runtime Properties:: Properties specific to `libgcj' ! !  ! File: gcj.info, Node: Standard Properties, Next: GNU Classpath Properties, Up: System properties ! ! Standard Properties ! =================== ! ! The following properties are normally found in all implementations ! of the core libraries for the Java language. ! ! `java.version' ! The `libgcj' version number. ! ! `java.vendor' ! Set to `The Free Software Foundation, Inc.' ! ! `java.vendor.url' ! Set to `http://gcc.gnu.org/java/'. ! ! `java.home' ! The directory where `gcj' was installed. Taken from the `--prefix' ! option given to `configure'. ! ! `java.class.version' ! The class format version number supported by the libgcj byte code ! interpreter. (Currently `46.0') ! ! `java.vm.specification.version' ! The Virtual Machine Specification version implemented by `libgcj'. ! (Currently `1.0') ! ! `java.vm.specification.vendor' ! The name of the Virtual Machine specification designer. ! ! `java.vm.specification.name' ! The name of the Virtual Machine specification (Set to `Java ! Virtual Machine Specification'). ! ! `java.vm.version' ! The `gcj' version number. ! ! `java.vm.vendor' ! Set to `The Free Software Foundation, Inc.' ! ! `java.vm.name' ! Set to `GNU libgcj'. ! ! `java.specification.version' ! The Runtime Environment specification version implemented by ! `libgcj'. (Currently set to `1.3') ! ! `java.specification.vendor' ! The Runtime Environment specification designer. ! ! `java.specification.name' ! The name of the Runtime Environment specification (Set to `Java ! Platform API Specification'). ! ! `java.class.path' ! The paths (jar files, zip files and directories) used for finding ! class files. ! ! `java.library.path' ! Directory path used for finding native libraries. ! ! `java.io.tmpdir' ! The directory used to put temporary files in. ! ! `java.compiler' ! Name of the Just In Time compiler to use by the byte code ! interpreter. Currently not used in `libgcj'. ! ! `java.ext.dirs' ! Directories containing jar files with extra libraries. Will be ! used when resolving classes. Currently not used in `libgcj'. ! ! `java.protocol.handler.pkgs' ! A `|' separated list of package names that is used to find classes ! that implement handlers for `java.net.URL'. ! ! `java.rmi.server.codebase' ! A list of URLs that is used by the `java.rmi.server.RMIClassLoader' ! to load classes from. ! ! `jdbc.drivers' ! A list of class names that will be loaded by the ! `java.sql.DriverManager' when it starts up. ! ! `file.separator' ! The separator used in when directories are included in a filename ! (normally `/' or `\' ). ! ! `file.encoding' ! The default character encoding used when converting platform ! native files to Unicode (usually set to `8859_1'). ! ! `path.separator' ! The standard separator used when a string contains multiple paths ! (normally `:' or `;'), the string is usually not a valid character ! to use in normal directory names.) ! ! `line.separator' ! The default line separator used on the platform (normally `\n', ! `\r' or a combination of those two characters). ! ! `policy.provider' ! The class name used for the default policy provider returned by ! `java.security.Policy.getPolicy'. ! ! `user.name' ! The name of the user running the program. Can be the full name, ! the login name or empty if unknown. ! ! `user.home' ! The default directory to put user specific files in. ! ! `user.dir' ! The current working directory from which the program was started. ! ! `user.language' ! The default language as used by the `java.util.Locale' class. ! ! `user.region' ! The default region as used by the `java.util.Local' class. ! ! `user.variant' ! The default variant of the language and region local used. ! ! `user.timezone' ! The default timezone as used by the `java.util.TimeZone' class. ! ! `os.name' ! The operating system/kernel name that the program runs on. ! ! `os.arch' ! The hardware that we are running on. ! ! `os.version' ! The version number of the operating system/kernel. ! ! `awt.appletWarning' ! The string to display when an untrusted applet is displayed. ! Returned by `java.awt.Window.getWarningString()' when the window is ! "insecure". ! ! `awt.toolkit' ! The class name used for initializing the default ! `java.awt.Toolkit'. Defaults to `gnu.awt.gtk.GtkToolkit'. ! ! `http.proxyHost' ! Name of proxy host for http connections. ! ! `http.proxyPort' ! Port number to use when a proxy host is in use. ! !  ! File: gcj.info, Node: GNU Classpath Properties, Next: libgcj Runtime Properties, Prev: Standard Properties, Up: System properties ! ! GNU Classpath Properties ! ======================== ! ! `libgcj' is based on the GNU Classpath (Essential Libraries for ! Java) a GNU project to create free core class libraries for use with ! virtual machines and compilers for the Java language. The following ! properties are common to libraries based on GNU Classpath. ! ! `gcj.dumpobject' ! Enables printing serialization debugging by the ! `java.io.ObjectInput' and `java.io.ObjectOutput' classes when set ! to something else then the empty string. Only used when running a ! debug build of the library. ! ! `gnu.classpath.vm.shortname' ! This is a succint name of the virtual machine. For `libgcj', this ! will always be `libgcj'. ! ! `gnu.classpath.home.url' ! A base URL used for finding system property files (e.g., ! `classpath.security'). By default this is a `file:' URL pointing ! to the `lib' directory under `java.home'. ! !  ! File: gcj.info, Node: libgcj Runtime Properties, Prev: GNU Classpath Properties, Up: System properties ! ! libgcj Runtime Properties ! ========================= ! ! The following properties are specific to the `libgcj' runtime and ! will normally not be found in other core libraries for the java ! language. ! ! `java.fullversion' ! The combination of `java.vm.name' and `java.vm.version'. ! ! `java.vm.info' ! Same as `java.fullversion'. ! ! `impl.prefix' ! Used by the `java.net.DatagramSocket' class when set to something ! else then the empty string. When set all newly created ! `DatagramSocket's will try to load a class ! `java.net.[impl.prefix]DatagramSocketImpl' instead of the normal ! `java.net.PlainDatagramSocketImpl'. ! ! `gnu.gcj.progname' ! The name that was used to invoked the program. ! ! `gnu.gcj.runtime.NameFinder.demangle' ! Whether names in a stack trace should be demangled. Defaults to ! `true'. ! ! `gnu.gcj.runtime.NameFinder.sanitize' ! Whether calls to initialize exceptions and starting the runtime ! system should be removed from the stack trace. Only done when ! names are demangled. Defaults to `true'. ! ! `gnu.gcj.runtime.NameFinder.remove_unknown' ! Whether calls to unknown functions (class and method names are ! unknown) should be removed from the stack trace. Only done when ! the stack is sanitized. Ignored if this means no stack trace ! information would be available anymore. Defaults to `true'. ! ! `gnu.gcj.runtime.NameFinder.remove_interpreter' ! Whether runtime interpreter calls (methods in the ! `_Jv_InterpMethod' class and functions starting with `ffi_') ! should be removed from the stack trace. Only done when the stack ! is sanitized. Defaults to `true'. ! ! `gnu.gcj.runtime.NameFinder.use_addr2line' ! Whether an external process (`addr2line' or `addr2name.awk') ! should be used as fallback to convert the addresses to function ! names when the runtime is unable to do it through `dladdr'. ! !  ! File: gcj.info, Node: Resources, Prev: System properties, Up: Top ! ! Resources ! ********* ! ! While writing `gcj' and `libgcj' we have, of course, relied heavily ! on documentation from Sun Microsystems. In particular we have used The ! Java Language Specification (both first and second editions), the Java ! Class Libraries (volumes one and two), and the Java Virtual Machine ! Specification. In addition we've used the online documentation at ! `http://java.sun.com/'. ! ! The current `gcj' home page is `http://gcc.gnu.org/java/'. ! ! For more information on gcc, see `http://gcc.gnu.org/'. ! ! Some `libgcj' testing is done using the Mauve test suite. This is a ! free software Java class library test suite which is being written ! because the JCK is not free. See `http://sources.redhat.com/mauve/' ! for more information. ! !  Tag Table: ! Node: Top1740 ! Node: Copying3668 ! Node: GNU Free Documentation License22868 ! Node: Invoking gcj45277 ! Node: Input and output files45928 ! Node: Input Options47291 ! Node: Encodings50434 ! Node: Warnings51635 ! Node: Code Generation52666 ! Ref: Code Generation-Footnote-156326 ! Node: Configure-time Options56635 ! Node: Compatibility58053 ! Node: Limitations58533 ! Node: Extensions60110 ! Node: Invoking gcjh61362 ! Node: Invoking jv-scan63418 ! Node: Invoking jcf-dump64458 ! Node: Invoking gij65230 ! Node: Invoking jv-convert67437 ! Node: Invoking rmic68507 ! Node: Invoking rmiregistry69882 ! Node: About CNI70286 ! Node: Basic concepts71577 ! Node: Packages74560 ! Node: Primitive types76875 ! Node: Interfaces78524 ! Node: Objects and Classes79433 ! Node: Class Initialization81594 ! Node: Object allocation83930 ! Node: Arrays84905 ! Node: Methods87492 ! Node: Strings90244 ! Node: Mixing with C++91712 ! Node: Exception Handling93595 ! Node: Synchronization95230 ! Node: Invocation97211 ! Node: Reflection101281 ! Node: System properties101733 ! Node: Standard Properties102607 ! Node: GNU Classpath Properties107064 ! Node: libgcj Runtime Properties108102 ! Node: Resources110103  End Tag Table diff -Nrc3pad gcc-3.2.3/gcc/java/gcj.info-1 gcc-3.3/gcc/java/gcj.info-1 *** gcc-3.2.3/gcc/java/gcj.info-1 2003-04-22 07:07:25.000000000 +0000 --- gcc-3.3/gcc/java/gcj.info-1 1970-01-01 00:00:00.000000000 +0000 *************** *** 1,1012 **** - This is gcj.info, produced by makeinfo version 4.5 from gcj.texi. - - INFO-DIR-SECTION Programming - START-INFO-DIR-ENTRY - * Gcj: (gcj). Ahead-of-time compiler for the Java language - END-INFO-DIR-ENTRY - - INFO-DIR-SECTION Individual utilities - START-INFO-DIR-ENTRY - * gcjh: (gcj)Invoking gcjh. - Generate header files from Java class files - * jv-scan: (gcj)Invoking jv-scan. - Print information about Java source files - * jcf-dump: (gcj)Invoking jcf-dump. - Print information about Java class files - * gij: (gcj)Invoking gij. GNU interpreter for Java bytecode - * jv-convert: (gcj)Invoking jv-convert. - Convert file from one encoding to another - * rmic: (gcj)Invoking rmic. - Generate stubs for Remote Method Invocation. - * rmiregistry: (gcj)Invoking rmiregistry. - The remote object registry. - END-INFO-DIR-ENTRY - - Copyright (C) 2001, 2002 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU General Public License", the Front-Cover - texts being (a) (see below), and with the Back-Cover Texts being (b) - (see below). A copy of the license is included in the section entitled - "GNU Free Documentation License". - - (a) The FSF's Front-Cover Text is: - - A GNU Manual - - (b) The FSF's Back-Cover Text is: - - You have freedom to copy and modify this GNU Manual, like GNU - software. Copies published by the Free Software Foundation raise - funds for GNU development. - -  - File: gcj.info, Node: Top, Next: Copying, Up: (dir) - - Introduction - ************ - - This manual describes how to use `gcj', the GNU compiler for the - Java programming language. `gcj' can generate both `.class' files and - object files, and it can read both Java source code and `.class' files. - - * Menu: - - * Copying:: The GNU General Public License - * GNU Free Documentation License:: - How you can share and copy this manual - * Invoking gcj:: Compiler options supported by `gcj' - * Compatibility:: Compatibility between gcj and other tools for Java - * Invoking gcjh:: Generate header files from class files - * Invoking jv-scan:: Print information about source files - * Invoking jcf-dump:: Print information about class files - * Invoking gij:: Interpreting Java bytecodes - * Invoking jv-convert:: Converting from one encoding to another - * Invoking rmic:: Generate stubs for Remote Method Invocation. - * Invoking rmiregistry:: The remote object registry. - * About CNI:: Description of the Cygnus Native Interface - * Resources:: Where to look for more information - -  - File: gcj.info, Node: Copying, Next: GNU Free Documentation License, Prev: Top, Up: Top - - GNU GENERAL PUBLIC LICENSE - ************************** - - Version 2, June 1991 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - ======== - - The licenses for most software are designed to take away your - freedom to share and change it. By contrast, the GNU General Public - License is intended to guarantee your freedom to share and change free - software--to make sure the software is free for all its users. This - General Public License applies to most of the Free Software - Foundation's software and to any other program whose authors commit to - using it. (Some other Free Software Foundation software is covered by - the GNU Library General Public License instead.) You can apply it to - your programs, too. - - When we speak of free software, we are referring to freedom, not - price. Our General Public Licenses are designed to make sure that you - have the freedom to distribute copies of free software (and charge for - this service if you wish), that you receive source code or can get it - if you want it, that you can change the software or use pieces of it in - new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid - anyone to deny you these rights or to ask you to surrender the rights. - These restrictions translate to certain responsibilities for you if you - distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether - gratis or for a fee, you must give the recipients all the rights that - you have. You must make sure that they, too, receive or can get the - source code. And you must show them these terms so they know their - rights. - - We protect your rights with two steps: (1) copyright the software, - and (2) offer you this license which gives you legal permission to copy, - distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain - that everyone understands that there is no warranty for this free - software. If the software is modified by someone else and passed on, we - want its recipients to know that what they have is not the original, so - that any problems introduced by others will not reflect on the original - authors' reputations. - - Finally, any free program is threatened constantly by software - patents. We wish to avoid the danger that redistributors of a free - program will individually obtain patent licenses, in effect making the - program proprietary. To prevent this, we have made it clear that any - patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and - modification follow. - - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - 0. This License applies to any program or other work which contains a - notice placed by the copyright holder saying it may be distributed - under the terms of this General Public License. The "Program", - below, refers to any such program or work, and a "work based on - the Program" means either the Program or any derivative work under - copyright law: that is to say, a work containing the Program or a - portion of it, either verbatim or with modifications and/or - translated into another language. (Hereinafter, translation is - included without limitation in the term "modification".) Each - licensee is addressed as "you". - - Activities other than copying, distribution and modification are - not covered by this License; they are outside its scope. The act - of running the Program is not restricted, and the output from the - Program is covered only if its contents constitute a work based on - the Program (independent of having been made by running the - Program). Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's - source code as you receive it, in any medium, provided that you - conspicuously and appropriately publish on each copy an appropriate - copyright notice and disclaimer of warranty; keep intact all the - notices that refer to this License and to the absence of any - warranty; and give any other recipients of the Program a copy of - this License along with the Program. - - You may charge a fee for the physical act of transferring a copy, - and you may at your option offer warranty protection in exchange - for a fee. - - 2. You may modify your copy or copies of the Program or any portion - of it, thus forming a work based on the Program, and copy and - distribute such modifications or work under the terms of Section 1 - above, provided that you also meet all of these conditions: - - a. You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b. You must cause any work that you distribute or publish, that - in whole or in part contains or is derived from the Program - or any part thereof, to be licensed as a whole at no charge - to all third parties under the terms of this License. - - c. If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display - an announcement including an appropriate copyright notice and - a notice that there is no warranty (or else, saying that you - provide a warranty) and that users may redistribute the - program under these conditions, and telling the user how to - view a copy of this License. (Exception: if the Program - itself is interactive but does not normally print such an - announcement, your work based on the Program is not required - to print an announcement.) - - These requirements apply to the modified work as a whole. If - identifiable sections of that work are not derived from the - Program, and can be reasonably considered independent and separate - works in themselves, then this License, and its terms, do not - apply to those sections when you distribute them as separate - works. But when you distribute the same sections as part of a - whole which is a work based on the Program, the distribution of - the whole must be on the terms of this License, whose permissions - for other licensees extend to the entire whole, and thus to each - and every part regardless of who wrote it. - - Thus, it is not the intent of this section to claim rights or - contest your rights to work written entirely by you; rather, the - intent is to exercise the right to control the distribution of - derivative or collective works based on the Program. - - In addition, mere aggregation of another work not based on the - Program with the Program (or with a work based on the Program) on - a volume of a storage or distribution medium does not bring the - other work under the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, - under Section 2) in object code or executable form under the terms - of Sections 1 and 2 above provided that you also do one of the - following: - - a. Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Sections 1 and 2 above on a medium customarily used for - software interchange; or, - - b. Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a - medium customarily used for software interchange; or, - - c. Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with - such an offer, in accord with Subsection b above.) - - The source code for a work means the preferred form of the work for - making modifications to it. For an executable work, complete - source code means all the source code for all modules it contains, - plus any associated interface definition files, plus the scripts - used to control compilation and installation of the executable. - However, as a special exception, the source code distributed need - not include anything that is normally distributed (in either - source or binary form) with the major components (compiler, - kernel, and so on) of the operating system on which the executable - runs, unless that component itself accompanies the executable. - - If distribution of executable or object code is made by offering - access to copy from a designated place, then offering equivalent - access to copy the source code from the same place counts as - distribution of the source code, even though third parties are not - compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program - except as expressly provided under this License. Any attempt - otherwise to copy, modify, sublicense or distribute the Program is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 5. You are not required to accept this License, since you have not - signed it. However, nothing else grants you permission to modify - or distribute the Program or its derivative works. These actions - are prohibited by law if you do not accept this License. - Therefore, by modifying or distributing the Program (or any work - based on the Program), you indicate your acceptance of this - License to do so, and all its terms and conditions for copying, - distributing or modifying the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the - Program), the recipient automatically receives a license from the - original licensor to copy, distribute or modify the Program - subject to these terms and conditions. You may not impose any - further restrictions on the recipients' exercise of the rights - granted herein. You are not responsible for enforcing compliance - by third parties to this License. - - 7. If, as a consequence of a court judgment or allegation of patent - infringement or for any other reason (not limited to patent - issues), conditions are imposed on you (whether by court order, - agreement or otherwise) that contradict the conditions of this - License, they do not excuse you from the conditions of this - License. If you cannot distribute so as to satisfy simultaneously - your obligations under this License and any other pertinent - obligations, then as a consequence you may not distribute the - Program at all. For example, if a patent license would not permit - royalty-free redistribution of the Program by all those who - receive copies directly or indirectly through you, then the only - way you could satisfy both it and this License would be to refrain - entirely from distribution of the Program. - - If any portion of this section is held invalid or unenforceable - under any particular circumstance, the balance of the section is - intended to apply and the section as a whole is intended to apply - in other circumstances. - - It is not the purpose of this section to induce you to infringe any - patents or other property right claims or to contest validity of - any such claims; this section has the sole purpose of protecting - the integrity of the free software distribution system, which is - implemented by public license practices. Many people have made - generous contributions to the wide range of software distributed - through that system in reliance on consistent application of that - system; it is up to the author/donor to decide if he or she is - willing to distribute software through any other system and a - licensee cannot impose that choice. - - This section is intended to make thoroughly clear what is believed - to be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in - certain countries either by patents or by copyrighted interfaces, - the original copyright holder who places the Program under this - License may add an explicit geographical distribution limitation - excluding those countries, so that distribution is permitted only - in or among countries not thus excluded. In such case, this - License incorporates the limitation as if written in the body of - this License. - - 9. The Free Software Foundation may publish revised and/or new - versions of the General Public License from time to time. Such - new versions will be similar in spirit to the present version, but - may differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the - Program specifies a version number of this License which applies - to it and "any later version", you have the option of following - the terms and conditions either of that version or of any later - version published by the Free Software Foundation. If the Program - does not specify a version number of this License, you may choose - any version ever published by the Free Software Foundation. - - 10. If you wish to incorporate parts of the Program into other free - programs whose distribution conditions are different, write to the - author to ask for permission. For software which is copyrighted - by the Free Software Foundation, write to the Free Software - Foundation; we sometimes make exceptions for this. Our decision - will be guided by the two goals of preserving the free status of - all derivatives of our free software and of promoting the sharing - and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO - WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE - LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT - HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT - WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT - NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE - QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE - PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY - SERVICING, REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN - WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY - MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE - LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, - INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR - INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF - DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU - OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY - OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - ============================================= - - If you develop a new program, and you want it to be of the greatest - possible use to the public, the best way to achieve this is to make it - free software which everyone can redistribute and change under these - terms. - - To do so, attach the following notices to the program. It is safest - to attach them to the start of each source file to most effectively - convey the exclusion of warranty; and each file should have at least - the "copyright" line and a pointer to where the full notice is found. - - ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. - Copyright (C) YEAR NAME OF AUTHOR - - 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. - - Also add information on how to contact you by electronic and paper - mail. - - If the program is interactive, make it output a short notice like - this when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details - type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - - The hypothetical commands `show w' and `show c' should show the - appropriate parts of the General Public License. Of course, the - commands you use may be called something other than `show w' and `show - c'; they could even be mouse-clicks or menu items--whatever suits your - program. - - You should also get your employer (if you work as a programmer) or - your school, if any, to sign a "copyright disclaimer" for the program, - if necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - SIGNATURE OF TY COON, 1 April 1989 - Ty Coon, President of Vice - - This General Public License does not permit incorporating your - program into proprietary programs. If your program is a subroutine - library, you may consider it more useful to permit linking proprietary - applications with the library. If this is what you want to do, use the - GNU Library General Public License instead of this License. - -  - File: gcj.info, Node: GNU Free Documentation License, Next: Invoking gcj, Prev: Copying, Up: Top - - GNU Free Documentation License - ****************************** - - Version 1.1, March 2000 - Copyright (C) 2000 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - 0. PREAMBLE - - The purpose of this License is to make a manual, textbook, or other - written document "free" in the sense of freedom: to assure everyone - the effective freedom to copy and redistribute it, with or without - modifying it, either commercially or noncommercially. Secondarily, - this License preserves for the author and publisher a way to get - credit for their work, while not being considered responsible for - modifications made by others. - - This License is a kind of "copyleft", which means that derivative - works of the document must themselves be free in the same sense. - It complements the GNU General Public License, which is a copyleft - license designed for free software. - - We have designed this License in order to use it for manuals for - free software, because free software needs free documentation: a - free program should come with manuals providing the same freedoms - that the software does. But this License is not limited to - software manuals; it can be used for any textual work, regardless - of subject matter or whether it is published as a printed book. - We recommend this License principally for works whose purpose is - instruction or reference. - - 1. APPLICABILITY AND DEFINITIONS - - This License applies to any manual or other work that contains a - notice placed by the copyright holder saying it can be distributed - under the terms of this License. The "Document", below, refers to - any such manual or work. Any member of the public is a licensee, - and is addressed as "you". - - A "Modified Version" of the Document means any work containing the - Document or a portion of it, either copied verbatim, or with - modifications and/or translated into another language. - - A "Secondary Section" is a named appendix or a front-matter - section of the Document that deals exclusively with the - relationship of the publishers or authors of the Document to the - Document's overall subject (or to related matters) and contains - nothing that could fall directly within that overall subject. - (For example, if the Document is in part a textbook of - mathematics, a Secondary Section may not explain any mathematics.) - The relationship could be a matter of historical connection with - the subject or with related matters, or of legal, commercial, - philosophical, ethical or political position regarding them. - - The "Invariant Sections" are certain Secondary Sections whose - titles are designated, as being those of Invariant Sections, in - the notice that says that the Document is released under this - License. - - The "Cover Texts" are certain short passages of text that are - listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. - - A "Transparent" copy of the Document means a machine-readable copy, - represented in a format whose specification is available to the - general public, whose contents can be viewed and edited directly - and straightforwardly with generic text editors or (for images - composed of pixels) generic paint programs or (for drawings) some - widely available drawing editor, and that is suitable for input to - text formatters or for automatic translation to a variety of - formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup has been designed - to thwart or discourage subsequent modification by readers is not - Transparent. A copy that is not "Transparent" is called "Opaque". - - Examples of suitable formats for Transparent copies include plain - ASCII without markup, Texinfo input format, LaTeX input format, - SGML or XML using a publicly available DTD, and - standard-conforming simple HTML designed for human modification. - Opaque formats include PostScript, PDF, proprietary formats that - can be read and edited only by proprietary word processors, SGML - or XML for which the DTD and/or processing tools are not generally - available, and the machine-generated HTML produced by some word - processors for output purposes only. - - The "Title Page" means, for a printed book, the title page itself, - plus such following pages as are needed to hold, legibly, the - material this License requires to appear in the title page. For - works in formats which do not have any title page as such, "Title - Page" means the text near the most prominent appearance of the - work's title, preceding the beginning of the body of the text. - - 2. VERBATIM COPYING - - You may copy and distribute the Document in any medium, either - commercially or noncommercially, provided that this License, the - copyright notices, and the license notice saying this License - applies to the Document are reproduced in all copies, and that you - add no other conditions whatsoever to those of this License. You - may not use technical measures to obstruct or control the reading - or further copying of the copies you make or distribute. However, - you may accept compensation in exchange for copies. If you - distribute a large enough number of copies you must also follow - the conditions in section 3. - - You may also lend copies, under the same conditions stated above, - and you may publicly display copies. - - 3. COPYING IN QUANTITY - - If you publish printed copies of the Document numbering more than - 100, and the Document's license notice requires Cover Texts, you - must enclose the copies in covers that carry, clearly and legibly, - all these Cover Texts: Front-Cover Texts on the front cover, and - Back-Cover Texts on the back cover. Both covers must also clearly - and legibly identify you as the publisher of these copies. The - front cover must present the full title with all words of the - title equally prominent and visible. You may add other material - on the covers in addition. Copying with changes limited to the - covers, as long as they preserve the title of the Document and - satisfy these conditions, can be treated as verbatim copying in - other respects. - - If the required texts for either cover are too voluminous to fit - legibly, you should put the first ones listed (as many as fit - reasonably) on the actual cover, and continue the rest onto - adjacent pages. - - If you publish or distribute Opaque copies of the Document - numbering more than 100, you must either include a - machine-readable Transparent copy along with each Opaque copy, or - state in or with each Opaque copy a publicly-accessible - computer-network location containing a complete Transparent copy - of the Document, free of added material, which the general - network-using public has access to download anonymously at no - charge using public-standard network protocols. If you use the - latter option, you must take reasonably prudent steps, when you - begin distribution of Opaque copies in quantity, to ensure that - this Transparent copy will remain thus accessible at the stated - location until at least one year after the last time you - distribute an Opaque copy (directly or through your agents or - retailers) of that edition to the public. - - It is requested, but not required, that you contact the authors of - the Document well before redistributing any large number of - copies, to give them a chance to provide you with an updated - version of the Document. - - 4. MODIFICATIONS - - You may copy and distribute a Modified Version of the Document - under the conditions of sections 2 and 3 above, provided that you - release the Modified Version under precisely this License, with - the Modified Version filling the role of the Document, thus - licensing distribution and modification of the Modified Version to - whoever possesses a copy of it. In addition, you must do these - things in the Modified Version: - - A. Use in the Title Page (and on the covers, if any) a title - distinct from that of the Document, and from those of - previous versions (which should, if there were any, be listed - in the History section of the Document). You may use the - same title as a previous version if the original publisher of - that version gives permission. - - B. List on the Title Page, as authors, one or more persons or - entities responsible for authorship of the modifications in - the Modified Version, together with at least five of the - principal authors of the Document (all of its principal - authors, if it has less than five). - - C. State on the Title page the name of the publisher of the - Modified Version, as the publisher. - - D. Preserve all the copyright notices of the Document. - - E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices. - - F. Include, immediately after the copyright notices, a license - notice giving the public permission to use the Modified - Version under the terms of this License, in the form shown in - the Addendum below. - - G. Preserve in that license notice the full lists of Invariant - Sections and required Cover Texts given in the Document's - license notice. - - H. Include an unaltered copy of this License. - - I. Preserve the section entitled "History", and its title, and - add to it an item stating at least the title, year, new - authors, and publisher of the Modified Version as given on - the Title Page. If there is no section entitled "History" in - the Document, create one stating the title, year, authors, - and publisher of the Document as given on its Title Page, - then add an item describing the Modified Version as stated in - the previous sentence. - - J. Preserve the network location, if any, given in the Document - for public access to a Transparent copy of the Document, and - likewise the network locations given in the Document for - previous versions it was based on. These may be placed in - the "History" section. You may omit a network location for a - work that was published at least four years before the - Document itself, or if the original publisher of the version - it refers to gives permission. - - K. In any section entitled "Acknowledgments" or "Dedications", - preserve the section's title, and preserve in the section all - the substance and tone of each of the contributor - acknowledgments and/or dedications given therein. - - L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section - titles. - - M. Delete any section entitled "Endorsements". Such a section - may not be included in the Modified Version. - - N. Do not retitle any existing section as "Endorsements" or to - conflict in title with any Invariant Section. - - If the Modified Version includes new front-matter sections or - appendices that qualify as Secondary Sections and contain no - material copied from the Document, you may at your option - designate some or all of these sections as invariant. To do this, - add their titles to the list of Invariant Sections in the Modified - Version's license notice. These titles must be distinct from any - other section titles. - - You may add a section entitled "Endorsements", provided it contains - nothing but endorsements of your Modified Version by various - parties--for example, statements of peer review or that the text - has been approved by an organization as the authoritative - definition of a standard. - - You may add a passage of up to five words as a Front-Cover Text, - and a passage of up to 25 words as a Back-Cover Text, to the end - of the list of Cover Texts in the Modified Version. Only one - passage of Front-Cover Text and one of Back-Cover Text may be - added by (or through arrangements made by) any one entity. If the - Document already includes a cover text for the same cover, - previously added by you or by arrangement made by the same entity - you are acting on behalf of, you may not add another; but you may - replace the old one, on explicit permission from the previous - publisher that added the old one. - - The author(s) and publisher(s) of the Document do not by this - License give permission to use their names for publicity for or to - assert or imply endorsement of any Modified Version. - - 5. COMBINING DOCUMENTS - - You may combine the Document with other documents released under - this License, under the terms defined in section 4 above for - modified versions, provided that you include in the combination - all of the Invariant Sections of all of the original documents, - unmodified, and list them all as Invariant Sections of your - combined work in its license notice. - - The combined work need only contain one copy of this License, and - multiple identical Invariant Sections may be replaced with a single - copy. If there are multiple Invariant Sections with the same name - but different contents, make the title of each such section unique - by adding at the end of it, in parentheses, the name of the - original author or publisher of that section if known, or else a - unique number. Make the same adjustment to the section titles in - the list of Invariant Sections in the license notice of the - combined work. - - In the combination, you must combine any sections entitled - "History" in the various original documents, forming one section - entitled "History"; likewise combine any sections entitled - "Acknowledgments", and any sections entitled "Dedications". You - must delete all sections entitled "Endorsements." - - 6. COLLECTIONS OF DOCUMENTS - - You may make a collection consisting of the Document and other - documents released under this License, and replace the individual - copies of this License in the various documents with a single copy - that is included in the collection, provided that you follow the - rules of this License for verbatim copying of each of the - documents in all other respects. - - You may extract a single document from such a collection, and - distribute it individually under this License, provided you insert - a copy of this License into the extracted document, and follow - this License in all other respects regarding verbatim copying of - that document. - - 7. AGGREGATION WITH INDEPENDENT WORKS - - A compilation of the Document or its derivatives with other - separate and independent documents or works, in or on a volume of - a storage or distribution medium, does not as a whole count as a - Modified Version of the Document, provided no compilation - copyright is claimed for the compilation. Such a compilation is - called an "aggregate", and this License does not apply to the - other self-contained works thus compiled with the Document, on - account of their being thus compiled, if they are not themselves - derivative works of the Document. - - If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one - quarter of the entire aggregate, the Document's Cover Texts may be - placed on covers that surround only the Document within the - aggregate. Otherwise they must appear on covers around the whole - aggregate. - - 8. TRANSLATION - - Translation is considered a kind of modification, so you may - distribute translations of the Document under the terms of section - 4. Replacing Invariant Sections with translations requires special - permission from their copyright holders, but you may include - translations of some or all Invariant Sections in addition to the - original versions of these Invariant Sections. You may include a - translation of this License provided that you also include the - original English version of this License. In case of a - disagreement between the translation and the original English - version of this License, the original English version will prevail. - - 9. TERMINATION - - You may not copy, modify, sublicense, or distribute the Document - except as expressly provided for under this License. Any other - attempt to copy, modify, sublicense or distribute the Document is - void, and will automatically terminate your rights under this - License. However, parties who have received copies, or rights, - from you under this License will not have their licenses - terminated so long as such parties remain in full compliance. - - 10. FUTURE REVISIONS OF THIS LICENSE - - The Free Software Foundation may publish new, revised versions of - the GNU Free Documentation License from time to time. Such new - versions will be similar in spirit to the present version, but may - differ in detail to address new problems or concerns. See - `http://www.gnu.org/copyleft/'. - - Each version of the License is given a distinguishing version - number. If the Document specifies that a particular numbered - version of this License "or any later version" applies to it, you - have the option of following the terms and conditions either of - that specified version or of any later version that has been - published (not as a draft) by the Free Software Foundation. If - the Document does not specify a version number of this License, - you may choose any version ever published (not as a draft) by the - Free Software Foundation. - - ADDENDUM: How to use this License for your documents - ==================================================== - - To use this License in a document you have written, include a copy of - the License in the document and put the following copyright and license - notices just after the title page: - - Copyright (C) YEAR YOUR NAME. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 - or any later version published by the Free Software Foundation; - with the Invariant Sections being LIST THEIR TITLES, with the - Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. - A copy of the license is included in the section entitled ``GNU - Free Documentation License''. - - If you have no Invariant Sections, write "with no Invariant Sections" - instead of saying which ones are invariant. If you have no Front-Cover - Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being - LIST"; likewise for Back-Cover Texts. - - If your document contains nontrivial examples of program code, we - recommend releasing these examples in parallel under your choice of - free software license, such as the GNU General Public License, to - permit their use in free software. - -  - File: gcj.info, Node: Invoking gcj, Next: Compatibility, Prev: GNU Free Documentation License, Up: Top - - Invoking gcj - ************ - - As `gcj' is just another front end to `gcc', it supports many of the - same options as gcc. *Note Option Summary: (gcc)Option Summary. This - manual only documents the options specific to `gcj'. - - * Menu: - - * Input and output files:: - * Input Options:: How gcj finds files - * Encodings:: Options controlling source file encoding - * Warnings:: Options controlling warnings specific to gcj - * Code Generation:: Options controlling the output of gcj - * Configure-time Options:: Options you won't use - -  - File: gcj.info, Node: Input and output files, Next: Input Options, Up: Invoking gcj - - Input and output files - ====================== - - A `gcj' command is like a `gcc' command, in that it consists of a - number of options and file names. The following kinds of input file - names are supported: - - `FILE.java' - Java source files. - - `FILE.class' - Java bytecode files. - - `FILE.zip' - `FILE.jar' - An archive containing one or more `.class' files, all of which are - compiled. The archive may be compressed. - - `@FILE' - A file containing a whitespace-separated list of input file names. - (Currently, these must all be `.java' source files, but that may - change.) Each named file is compiled, just as if it had been on - the command line. - - `LIBRARY.a' - `LIBRARY.so' - `-lLIBNAME' - Libraries to use when linking. See the `gcc' manual. - - You can specify more than one input file on the `gcj' command line, - in which case they will all be compiled. If you specify a `-o FILENAME' - option, all the input files will be compiled together, producing a - single output file, named FILENAME. This is allowed even when using - `-S' or `-c', but not when using `-C' or `--resource'. (This is an - extension beyond the what plain `gcc' allows.) (If more than one input - file is specified, all must currently be `.java' files, though we hope - to fix this.) - -  - File: gcj.info, Node: Input Options, Next: Encodings, Prev: Input and output files, Up: Invoking gcj - - Input Options - ============= - - `gcj' has options to control where it looks to find files it needs. - For instance, `gcj' might need to load a class that is referenced by - the file it has been asked to compile. Like other compilers for the - Java language, `gcj' has a notion of a "class path". There are several - options and environment variables which can be used to manipulate the - class path. When `gcj' looks for a given class, it searches the class - path looking for matching `.class' or `.java' file. `gcj' comes with a - built-in class path which points at the installed `libgcj.jar', a file - which contains all the standard classes. - - In the below, a directory or path component can refer either to an - actual directory on the filesystem, or to a `.zip' or `.jar' file, - which `gcj' will search as if it is a directory. - - `-IDIR' - All directories specified by `-I' are kept in order and prepended - to the class path constructed from all the other options. Unless - compatibility with tools like `javac' is imported, we recommend - always using `-I' instead of the other options for manipulating the - class path. - - `--classpath=PATH' - This sets the class path to PATH, a colon-separated list of paths - (on Windows-based systems, a semicolon-separate list of paths). - This does not override the builtin ("boot") search path. - - `--CLASSPATH=PATH' - Deprecated synonym for `--classpath'. - - `--bootclasspath=PATH' - Where to find the standard builtin classes, such as - `java.lang.String'. - - `--extdirs=PATH' - For each directory in the PATH, place the contents of that - directory at the end of the class path. - - `CLASSPATH' - This is an environment variable which holds a list of paths. - - The final class path is constructed like so: - - * First come all directories specified via `-I'. - - * If `--classpath' is specified, its value is appended. Otherwise, - if the `CLASSPATH' environment variable is specified, then its - value is appended. Otherwise, the current directory (`"."') is - appended. - - * If `--bootclasspath' was specified, append its value. Otherwise, - append the built-in system directory, `libgcj.jar'. - - * Finaly, if `--extdirs' was specified, append the contents of the - specified directories at the end of the class path. Otherwise, - append the contents of the built-in extdirs at - `$(prefix)/share/java/ext'. - - The classfile built by `gcj' for the class `java.lang.Object' (and - placed in `libgcj.jar') contains a special zero length attribute - `gnu.gcj.gcj-compiled'. The compiler looks for this attribute when - loading `java.lang.Object' and will report an error if it isn't found, - unless it compiles to bytecode (the option - `-fforce-classes-archive-check' can be used to override this behavior - in this particular case.) - - `-fforce-classes-archive-check' - This forces the compiler to always check for the special zero - length attribute `gnu.gcj.gcj-compiled' in `java.lang.Object' and - issue an error if it isn't found. - -  - File: gcj.info, Node: Encodings, Next: Warnings, Prev: Input Options, Up: Invoking gcj - - Encodings - ========= - - The Java programming language uses Unicode throughout. In an effort - to integrate well with other locales, `gcj' allows `.java' files to be - written using almost any encoding. `gcj' knows how to convert these - encodings into its internal encoding at compile time. - - You can use the `--encoding=NAME' option to specify an encoding (of - a particular character set) to use for source files. If this is not - specified, the default encoding comes from your current locale. If - your host system has insufficient locale support, then `gcj' assumes - the default encoding to be the `UTF-8' encoding of Unicode. - - To implement `--encoding', `gcj' simply uses the host platform's - `iconv' conversion routine. This means that in practice `gcj' is - limited by the capabilities of the host platform. - - The names allowed for the argument `--encoding' vary from platform - to platform (since they are not standardized anywhere). However, `gcj' - implements the encoding named `UTF-8' internally, so if you choose to - use this for your source files you can be assured that it will work on - every host. - -  - File: gcj.info, Node: Warnings, Next: Code Generation, Prev: Encodings, Up: Invoking gcj - - Warnings - ======== - - `gcj' implements several warnings. As with other generic `gcc' - warnings, if an option of the form `-Wfoo' enables a warning, then - `-Wno-foo' will disable it. Here we've chosen to document the form of - the warning which will have an effect - the default being the opposite - of what is listed. - - `-Wredundant-modifiers' - With this flag, `gcj' will warn about redundant modifiers. For - instance, it will warn if an interface method is declared `public'. - - `-Wextraneous-semicolon' - This causes `gcj' to warn about empty statements. Empty statements - have been deprecated. - - `-Wno-out-of-date' - This option will cause `gcj' not to warn when a source file is - newer than its matching class file. By default `gcj' will warn - about this. - - `-Wunused' - This is the same as `gcc''s `-Wunused'. - - `-Wall' - This is the same as `-Wredundant-modifiers -Wextraneous-semicolon - -Wunused'. - --- 0 ---- diff -Nrc3pad gcc-3.2.3/gcc/java/gcj.info-2 gcc-3.3/gcc/java/gcj.info-2 *** gcc-3.2.3/gcc/java/gcj.info-2 2003-04-22 07:07:25.000000000 +0000 --- gcc-3.3/gcc/java/gcj.info-2 1970-01-01 00:00:00.000000000 +0000 *************** *** 1,1416 **** - This is gcj.info, produced by makeinfo version 4.5 from gcj.texi. - - INFO-DIR-SECTION Programming - START-INFO-DIR-ENTRY - * Gcj: (gcj). Ahead-of-time compiler for the Java language - END-INFO-DIR-ENTRY - - INFO-DIR-SECTION Individual utilities - START-INFO-DIR-ENTRY - * gcjh: (gcj)Invoking gcjh. - Generate header files from Java class files - * jv-scan: (gcj)Invoking jv-scan. - Print information about Java source files - * jcf-dump: (gcj)Invoking jcf-dump. - Print information about Java class files - * gij: (gcj)Invoking gij. GNU interpreter for Java bytecode - * jv-convert: (gcj)Invoking jv-convert. - Convert file from one encoding to another - * rmic: (gcj)Invoking rmic. - Generate stubs for Remote Method Invocation. - * rmiregistry: (gcj)Invoking rmiregistry. - The remote object registry. - END-INFO-DIR-ENTRY - - Copyright (C) 2001, 2002 Free Software Foundation, Inc. - - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.1 or - any later version published by the Free Software Foundation; with the - Invariant Sections being "GNU General Public License", the Front-Cover - texts being (a) (see below), and with the Back-Cover Texts being (b) - (see below). A copy of the license is included in the section entitled - "GNU Free Documentation License". - - (a) The FSF's Front-Cover Text is: - - A GNU Manual - - (b) The FSF's Back-Cover Text is: - - You have freedom to copy and modify this GNU Manual, like GNU - software. Copies published by the Free Software Foundation raise - funds for GNU development. - -  - File: gcj.info, Node: Code Generation, Next: Configure-time Options, Prev: Warnings, Up: Invoking gcj - - Code Generation - =============== - - In addition to the many `gcc' options controlling code generation, - `gcj' has several options specific to itself. - - `--main=CLASSNAME' - This option is used when linking to specify the name of the class - whose `main' method should be invoked when the resulting - executable is run. (1) - - `-DNAME[=VALUE]' - This option can only be used with `--main'. It defines a system - property named NAME with value VALUE. If VALUE is not specified - then it defaults to the empty string. These system properties are - initialized at the program's startup and can be retrieved at - runtime using the `java.lang.System.getProperty' method. - - `-C' - This option is used to tell `gcj' to generate bytecode (`.class' - files) rather than object code. - - `--resource RESOURCE-NAME' - This option is used to tell `gcj' to compile the contents of a - given file to object code so it may be accessed at runtime with - the core protocol handler as `core:/RESOURCE-NAME'. Note that - RESOURCE-NAME is the name of the resource as found at runtime; for - instance, it could be used in a call to `ResourceBundle.getBundle'. - The actual file name to be compiled this way must be specified - separately. - - `-d DIRECTORY' - When used with `-C', this causes all generated `.class' files to - be put in the appropriate subdirectory of DIRECTORY. By default - they will be put in subdirectories of the current working - directory. - - `-fno-bounds-check' - By default, `gcj' generates code which checks the bounds of all - array indexing operations. With this option, these checks are - omitted, which can improve performance for code that uses arrays - extensively. Note that this can result in unpredictable behavior - if the code in question actually does violate array bounds - constraints. It is safe to use this option if you are sure that - your code will never throw an `ArrayIndexOutOfBoundsException'. - - `-fno-store-check' - Don't generate array store checks. When storing objects into - arrays, a runtime check is normally generated in order to ensure - that the object is assignment compatible with the component type - of the array (which may not be known at compile-time). With this - option, these checks are omitted. This can improve performance - for code which stores objects into arrays frequently. It is safe - to use this option if you are sure your code will never throw an - `ArrayStoreException'. - - `-fjni' - With `gcj' there are two options for writing native methods: CNI - and JNI. By default `gcj' assumes you are using CNI. If you are - compiling a class with native methods, and these methods are - implemented using JNI, then you must use `-fjni'. This option - causes `gcj' to generate stubs which will invoke the underlying JNI - methods. - - `-fno-optimize-static-class-initialization' - When the optimization level is greather or equal to `-O2', `gcj' - will try to optimize the way calls into the runtime are made to - initialize static classes upon their first use (this optimization - isn't carried out if `-C' was specified.) When compiling to native - code, `-fno-optimize-static-class-initialization' will turn this - optimization off, regardless of the optimization level in use. - - ---------- Footnotes ---------- - - (1) The linker by default looks for a global function named `main'. - Since Java does not have global functions, and a collection of Java - classes may have more than one class with a `main' method, you need to - let the linker know which of those `main' methods it should invoke when - starting the application. - -  - File: gcj.info, Node: Configure-time Options, Prev: Code Generation, Up: Invoking gcj - - Configure-time Options - ====================== - - Some `gcj' code generations options affect the resulting ABI, and so - can only be meaningfully given when `libgcj', the runtime package, is - configured. `libgcj' puts the appropriate options from this group into - a `spec' file which is read by `gcj'. These options are listed here - for completeness; if you are using `libgcj' then you won't want to - touch these options. - - `-fuse-boehm-gc' - This enables the use of the Boehm GC bitmap marking code. In - particular this causes `gcj' to put an object marking descriptor - into each vtable. - - `-fhash-synchronization' - By default, synchronization data (the data used for `synchronize', - `wait', and `notify') is pointed to by a word in each object. - With this option `gcj' assumes that this information is stored in a - hash table and not in the object itself. - - `-fuse-divide-subroutine' - On some systems, a library routine is called to perform integer - division. This is required to get exception handling correct when - dividing by zero. - - `-fcheck-references' - On some systems it's necessary to insert inline checks whenever - accessing an object via a reference. On other systems you won't - need this because null pointer accesses are caught automatically - by the processor. - -  - File: gcj.info, Node: Compatibility, Next: Invoking gcjh, Prev: Invoking gcj, Up: Top - - Compatibility with the Java Platform - ************************************ - - As we believe it is important that the Java platform not be - fragmented, `gcj' and `libgcj' try to conform to the relevant Java - specifications. However, limited manpower and incomplete and unclear - documentation work against us. So, there are caveats to using `gcj'. - - This list of compatibility issues is by no means complete. - - * `gcj' implements the JDK 1.1 language. It supports inner classes, - though these are known to still be buggy. It does not yet support - the Java 2 `strictfp' keyword (it recognizes the keyword but - ignores it). - - * `libgcj' is largely compatible with the JDK 1.2 libraries. - However, `libgcj' is missing many packages, most notably - `java.awt'. There are also individual missing classes and methods. - We currently do not have a list showing differences between - `libgcj' and the Java 2 platform. - - * Sometimes the `libgcj' implementation of a method or class differs - from the JDK implementation. This is not always a bug. Still, if - it affects you, it probably makes sense to report it so that we - can discuss the appropriate response. - -  - File: gcj.info, Node: Invoking gcjh, Next: Invoking jv-scan, Prev: Compatibility, Up: Top - - Invoking gcjh - ************* - - The `gcjh' program is used to generate header files from class - files. It can generate both CNI and JNI header files, as well as stub - implementation files which can be used as a basis for implementing the - required native methods. - - `-stubs' - This causes `gcjh' to generate stub files instead of header files. - By default the stub file will be named after the class, with a - suffix of `.cc'. In JNI mode, the default output file will have - the suffix `.c'. - - `-jni' - This tells `gcjh' to generate a JNI header or stub. By default, - CNI headers are generated. - - `-add TEXT' - Inserts TEXT into the class body. This is ignored in JNI mode. - - `-append TEXT' - Inserts TEXT into the header file after the class declaration. - This is ignored in JNI mode. - - `-friend TEXT' - Inserts TEXT into the class as a `friend' declaration. This is - ignored in JNI mode. - - `-prepend TEXT' - Inserts TEXT into the header file before the class declaration. - This is ignored in JNI mode. - - `--classpath=PATH' - `--CLASSPATH=PATH' - `-IDIRECTORY' - `-d DIRECTORY' - `-o FILE' - These options are all identical to the corresponding `gcj' options. - - `-o FILE' - Sets the output file name. This cannot be used if there is more - than one class on the command line. - - `-td DIRECTORY' - Sets the name of the directory to use for temporary files. - - `-M' - Print all dependencies to stdout; suppress ordinary output. - - `-MM' - Print non-system dependencies to stdout; suppress ordinary output. - - `-MD' - Print all dependencies to stdout. - - `-MMD' - Print non-system dependencies to stdout. - - `--help' - Print help about `gcjh' and exit. No further processing is done. - - `--version' - Print version information for `gcjh' and exit. No further - processing is done. - - `-v, --verbose' - Print extra information while running. - - All remaining options are considered to be names of classes. - -  - File: gcj.info, Node: Invoking jv-scan, Next: Invoking jcf-dump, Prev: Invoking gcjh, Up: Top - - Invoking jv-scan - **************** - - The `jv-scan' program can be used to print information about a Java - source file (`.java' file). - - `--complexity' - This prints a complexity measure, related to cyclomatic - complexity, for each input file. - - `--encoding=NAME' - This works like the corresponding `gcj' option. - - `--print-main' - This prints the name of the class in this file containing a `main' - method. - - `--list-class' - This lists the names of all classes defined in the input files. - - `--list-filename' - If `--list-class' is given, this option causes `jv-scan' to also - print the name of the file in which each class was found. - - `-o FILE' - Print output to the named file. - - `--help' - Print help, then exit. - - `--version' - Print version number, then exit. - -  - File: gcj.info, Node: Invoking jcf-dump, Next: Invoking gij, Prev: Invoking jv-scan, Up: Top - - Invoking jcf-dump - ***************** - - This is a class file examiner, similar to `javap'. It will print - information about a number of classes, which are specifed by class name - or file name. - - `-c' - Disassemble method bodies. By default method bodies are not - printed. - - `--javap' - Generate output in `javap' format. The implementation of this - feature is very incomplete. - - `--classpath=PATH' - `--CLASSPATH=PATH' - `-IDIRECTORY' - `-o FILE' - These options as the same as the corresponding `gcj' options. - - `--help' - Print help, then exit. - - `--version' - Print version number, then exit. - - `-v, --verbose' - Print extra information while running. - -  - File: gcj.info, Node: Invoking gij, Next: Invoking jv-convert, Prev: Invoking jcf-dump, Up: Top - - Invoking gij - ************ - - `gij' is a Java bytecode interpreter included with `libgcj'. `gij' - is not available on every platform; porting it requires a small amount - of assembly programming which has not been done for all the targets - supported by `gcj'. - - The primary argument to `gij' is the name of a class or, with - `-jar', a jar file. Options before this argument are interpreted by - `gij'; remaining options are passed to the interpreted program. - - If a class name is specified and this class does not have a `main' - method with the appropriate signature (a `static void' method with a - `String[]' as its sole argument), then `gij' will print an error and - exit. - - If a jar file is specified then `gij' will use information in it to - determine which class' `main' method will be invoked. - - `gij' will invoke the `main' method with all the remaining - command-line options. - - Note that `gij' is not limited to interpreting code. Because - `libgcj' includes a class loader which can dynamically load shared - objects, it is possible to give `gij' the name of a class which has - been compiled and put into a shared library on the class path. - - `-DNAME[=VALUE]' - This defines a system property named NAME with value VALUE. If - VALUE is not specified then it defaults to the empty string. - These system properties are initialized at the program's startup - and can be retrieved at runtime using the - `java.lang.System.getProperty' method. - - `-ms=NUMBER' - This sets the initial heap size. - - `-mx=NUMBER' - This sets the maximum heap size. - - `-jar' - This indicates that the name passed to `gij' should be interpreted - as the name of a jar file, not a class. - - `--help' - Print help, then exit. - - `--version' - Print version number, then exit. - -  - File: gcj.info, Node: Invoking jv-convert, Next: Invoking rmic, Prev: Invoking gij, Up: Top - - Invoking jv-convert - ******************* - - `jv-convert' [`OPTION'] ... [INPUTFILE [OUTPUTFILE]] - - `jv-convert' is a utility included with `libgcj' which converts a - file from one encoding to another. It is similar to the Unix `iconv' - utility. - - The encodings supported by `jv-convert' are platform-dependent. - Currently there is no way to get a list of all supported encodings. - - `--encoding NAME' - `--from NAME' - Use NAME as the input encoding. The default is the current - locale's encoding. - - `--to NAME' - Use NAME as the output encoding. The default is the `JavaSrc' - encoding; this is ASCII with `\u' escapes for non-ASCII characters. - - `-i FILE' - Read from FILE. The default is to read from standard input. - - `-o FILE' - Write to FILE. The default is to write to standard output. - - `--reverse' - Swap the input and output encodings. - - `--help' - Print a help message, then exit. - - `--version' - Print version information, then exit. - -  - File: gcj.info, Node: Invoking rmic, Next: Invoking rmiregistry, Prev: Invoking jv-convert, Up: Top - - Invoking rmic - ************* - - `rmic' [`OPTION'] ... CLASS ... - - `rmic' is a utility included with `libgcj' which generates stubs for - remote objects. - - Note that this program isn't yet fully compatible with the JDK - `rmic'. Some options, such as `-classpath', are recognized but - currently ignored. We have left these options undocumented for now. - - Long options can also be given with a GNU-style leading `--'. For - instance, `--help' is accepted. - - `-keep' - `-keepgenerated' - By default, `rmic' deletes intermediate files. Either of these - options causes it not to delete such files. - - `-v1.1' - Cause `rmic' to create stubs and skeletons for the 1.1 protocol - version. - - `-vcompat' - Cause `rmic' to create stubs and skeletons compatible with both - the 1.1 and 1.2 protocol versions. This is the default. - - `-v1.2' - Cause `rmic' to create stubs and skeletons for the 1.2 protocol - version. - - `-nocompile' - Don't compile the generated files. - - `-verbose' - Print information about what `rmic' is doing. - - `-d DIRECTORY' - Put output files in DIRECTORY. By default the files are put in - the current working directory. - - `-help' - Print a help message, then exit. - - `-version' - Print version information, then exit. - -  - File: gcj.info, Node: Invoking rmiregistry, Next: About CNI, Prev: Invoking rmic, Up: Top - - Invoking rmiregistry - ******************** - - `rmiregistry' [`OPTION'] ... [PORT] - - `rmiregistry' starts a remote object registry on the current host. - If no port number is specified, then port 1099 is used. - - `--help' - Print a help message, then exit. - - `--version' - Print version information, then exit. - -  - File: gcj.info, Node: About CNI, Next: Resources, Prev: Invoking rmiregistry, Up: Top - - About CNI - ********* - - This documents CNI, the Cygnus Native Interface, which is is a - convenient way to write Java native methods using C++. This is a more - efficient, more convenient, but less portable alternative to the - standard JNI (Java Native Interface). - - * Menu: - - * Basic concepts:: Introduction to using CNI. - * Packages:: How packages are mapped to C++. - * Primitive types:: Handling Java types in C++. - * Interfaces:: How Java interfaces map to C++. - * Objects and Classes:: C++ and Java classes. - * Class Initialization:: How objects are initialized. - * Object allocation:: How to create Java objects in C++. - * Arrays:: Dealing with Java arrays in C++. - * Methods:: Java methods in C++. - * Strings:: Information about Java Strings. - * Mixing with C++:: How CNI can interoperate with C++. - * Exception Handling:: How exceptions are handled. - * Synchronization:: Synchronizing between Java and C++. - * Invocation:: Starting the Java runtime from C++. - * Reflection:: Using reflection from C++. - -  - File: gcj.info, Node: Basic concepts, Next: Packages, Up: About CNI - - Basic concepts - ============== - - In terms of languages features, Java is mostly a subset of C++. - Java has a few important extensions, plus a powerful standard class - library, but on the whole that does not change the basic similarity. - Java is a hybrid object-oriented language, with a few native types, in - addition to class types. It is class-based, where a class may have - static as well as per-object fields, and static as well as instance - methods. Non-static methods may be virtual, and may be overloaded. - Overloading is resolved at compile time by matching the actual argument - types against the parameter types. Virtual methods are implemented - using indirect calls through a dispatch table (virtual function table). - Objects are allocated on the heap, and initialized using a constructor - method. Classes are organized in a package hierarchy. - - All of the listed attributes are also true of C++, though C++ has - extra features (for example in C++ objects may be allocated not just on - the heap, but also statically or in a local stack frame). Because - `gcj' uses the same compiler technology as G++ (the GNU C++ compiler), - it is possible to make the intersection of the two languages use the - same ABI (object representation and calling conventions). The key idea - in CNI is that Java objects are C++ objects, and all Java classes are - C++ classes (but not the other way around). So the most important task - in integrating Java and C++ is to remove gratuitous incompatibilities. - - You write CNI code as a regular C++ source file. (You do have to use - a Java/CNI-aware C++ compiler, specifically a recent version of G++.) - - A CNI C++ source file must have: - - #include - - and then must include one header file for each Java class it uses, e.g.: - - #include - #include - #include - - These header files are automatically generated by `gcjh'. - - CNI provides some functions and macros to make using Java objects and - primitive types from C++ easier. In general, these CNI functions and - macros start with the `Jv' prefix, for example the function - `JvNewObjectArray'. This convention is used to avoid conflicts with - other libraries. Internal functions in CNI start with the prefix - `_Jv_'. You should not call these; if you find a need to, let us know - and we will try to come up with an alternate solution. (This manual - lists `_Jv_AllocBytes' as an example; CNI should instead provide a - `JvAllocBytes' function.) - - Limitations - ----------- - - Whilst a Java class is just a C++ class that doesn't mean that you - are freed from the shackles of Java, a CNI C++ class must adhere to the - rules of the Java programming language. - - For example: it is not possible to declare a method in a CNI class - that will take a C string (`char*') as an argument, or to declare a - member variable of some non-Java datatype. - -  - File: gcj.info, Node: Packages, Next: Primitive types, Prev: Basic concepts, Up: About CNI - - Packages - ======== - - The only global names in Java are class names, and packages. A - "package" can contain zero or more classes, and also zero or more - sub-packages. Every class belongs to either an unnamed package or a - package that has a hierarchical and globally unique name. - - A Java package is mapped to a C++ "namespace". The Java class - `java.lang.String' is in the package `java.lang', which is a - sub-package of `java'. The C++ equivalent is the class - `java::lang::String', which is in the namespace `java::lang' which is - in the namespace `java'. - - Here is how you could express this: - - (// Declare the class(es), possibly in a header file: - namespace java { - namespace lang { - class Object; - class String; - ... - } - } - - class java::lang::String : public java::lang::Object - { - ... - }; - - The `gcjh' tool automatically generates the nessary namespace - declarations. - - Leaving out package names - ------------------------- - - Always using the fully-qualified name of a java class can be - tiresomely verbose. Using the full qualified name also ties the code - to a single package making code changes necessary should the class move - from one package to another. The Java `package' declaration specifies - that the following class declarations are in the named package, without - having to explicitly name the full package qualifiers. The `package' - declaration can be followed by zero or more `import' declarations, which - allows either a single class or all the classes in a package to be - named by a simple identifier. C++ provides something similar with the - `using' declaration and directive. - - In Java: - - import PACKAGE-NAME.CLASS-NAME; - - allows the program text to refer to CLASS-NAME as a shorthand for the - fully qualified name: `PACKAGE-NAME.CLASS-NAME'. - - To achieve the same effect C++, you have to do this: - - using PACKAGE-NAME::CLASS-NAME; - - Java can also cause imports on demand, like this: - - import PACKAGE-NAME.*; - - Doing this allows any class from the package PACKAGE-NAME to be refered - to only by its class-name within the program text. - - The same effect can be achieved in C++ like this: - - using namespace PACKAGE-NAME; - -  - File: gcj.info, Node: Primitive types, Next: Interfaces, Prev: Packages, Up: About CNI - - Primitive types - =============== - - Java provides 8 "primitives" types which represent integers, floats, - characters and booleans (and also the void type). C++ has its own very - similar concrete types. Such types in C++ however are not always - implemented in the same way (an int might be 16, 32 or 64 bits for - example) so CNI provides a special C++ type for each primitive Java - type: - - *Java type* *C/C++ typename* *Description* - `char' `jchar' 16 bit Unicode character - `boolean' `jboolean' logical (true or false) values - `byte' `jbyte' 8-bit signed integer - `short' `jshort' 16 bit signed integer - `int' `jint' 32 bit signed integer - `long' `jlong' 64 bit signed integer - `float' `jfloat' 32 bit IEEE floating point number - `double' `jdouble' 64 bit IEEE floating point number - `void' `void' no value - - When refering to a Java type You should always use these C++ - typenames (e.g.: `jint') to avoid disappointment. - - Reference types associated with primitive types - ----------------------------------------------- - - In Java each primitive type has an associated reference type, e.g.: - `boolean' has an associated `java.lang.Boolean' class. In order to - make working with such classes easier GCJ provides the macro - `JvPrimClass': - - - macro: JvPrimClass type - Return a pointer to the `Class' object corresponding to the type - supplied. - - JvPrimClass(void) => java.lang.Void.TYPE - - -  - File: gcj.info, Node: Interfaces, Next: Objects and Classes, Prev: Primitive types, Up: About CNI - - Interfaces - ========== - - A Java class can "implement" zero or more "interfaces", in addition - to inheriting from a single base class. - - CNI allows CNI code to implement methods of interfaces. You can - also call methods through interface references, with some limitations. - - CNI doesn't understand interface inheritance at all yet. So, you - can only call an interface method when the declared type of the field - being called matches the interface which declares that method. The - workaround is to cast the interface reference to the right - superinterface. - - For example if you have: - - interface A - { - void a(); - } - - interface B extends A - { - void b(); - } - - and declare a variable of type `B' in C++, you can't call `a()' - unless you cast it to an `A' first. - -  - File: gcj.info, Node: Objects and Classes, Next: Class Initialization, Prev: Interfaces, Up: About CNI - - Objects and Classes - =================== - - Classes - ------- - - All Java classes are derived from `java.lang.Object'. C++ does not - have a unique root class, but we use the C++ class `java::lang::Object' - as the C++ version of the `java.lang.Object' Java class. All other - Java classes are mapped into corresponding C++ classes derived from - `java::lang::Object'. - - Interface inheritance (the `implements' keyword) is currently not - reflected in the C++ mapping. - - Object fields - ------------- - - Each object contains an object header, followed by the instance - fields of the class, in order. The object header consists of a single - pointer to a dispatch or virtual function table. (There may be extra - fields _in front of_ the object, for example for memory management, but - this is invisible to the application, and the reference to the object - points to the dispatch table pointer.) - - The fields are laid out in the same order, alignment, and size as in - C++. Specifically, 8-bite and 16-bit native types (`byte', `short', - `char', and `boolean') are _not_ widened to 32 bits. Note that the - Java VM does extend 8-bit and 16-bit types to 32 bits when on the VM - stack or temporary registers. - - If you include the `gcjh'-generated header for a class, you can - access fields of Java classes in the _natural_ way. For example, given - the following Java class: - - public class Int - { - public int i; - public Integer (int i) { this.i = i; } - public static zero = new Integer(0); - } - - you can write: - - #include ; - #include ; - - Int* - mult (Int *p, jint k) - { - if (k == 0) - return Int::zero; // Static member access. - return new Int(p->i * k); - } - - Access specifiers - ----------------- - - CNI does not strictly enforce the Java access specifiers, because - Java permissions cannot be directly mapped into C++ permission. - Private Java fields and methods are mapped to private C++ fields and - methods, but other fields and methods are mapped to public fields and - methods. - -  - File: gcj.info, Node: Class Initialization, Next: Object allocation, Prev: Objects and Classes, Up: About CNI - - Class Initialization - ==================== - - Java requires that each class be automatically initialized at the - time of the first active use. Initializing a class involves - initializing the static fields, running code in class initializer - methods, and initializing base classes. There may also be some - implementation specific actions, such as allocating `String' objects - corresponding to string literals in the code. - - The GCJ compiler inserts calls to `JvInitClass' at appropriate - places to ensure that a class is initialized when required. The C++ - compiler does not insert these calls automatically--it is the - programmer's responsibility to make sure classes are initialized. - However, this is fairly painless because of the conventions assumed by - the Java system. - - First, `libgcj' will make sure a class is initialized before an - instance of that object is created. This is one of the - responsibilities of the `new' operation. This is taken care of both in - Java code, and in C++ code. (When the G++ compiler sees a `new' of a - Java class, it will call a routine in `libgcj' to allocate the object, - and that routine will take care of initializing the class.) It follows - that you can access an instance field, or call an instance (non-static) - method and be safe in the knowledge that the class and all of its base - classes have been initialized. - - Invoking a static method is also safe. This is because the Java - compiler adds code to the start of a static method to make sure the - class is initialized. However, the C++ compiler does not add this - extra code. Hence, if you write a native static method using CNI, you - are responsible for calling `JvInitClass' before doing anything else in - the method (unless you are sure it is safe to leave it out). - - Accessing a static field also requires the class of the field to be - initialized. The Java compiler will generate code to call - `Jv_InitClass' before getting or setting the field. However, the C++ - compiler will not generate this extra code, so it is your - responsibility to make sure the class is initialized before you access - a static field from C++. - -  - File: gcj.info, Node: Object allocation, Next: Arrays, Prev: Class Initialization, Up: About CNI - - Object allocation - ================= - - New Java objects are allocated using a "class instance creation - expression", e.g.: - - new TYPE ( ... ) - - The same syntax is used in C++. The main difference is that C++ - objects have to be explicitly deleted; in Java they are automatically - deleted by the garbage collector. Using CNI, you can allocate a new - Java object using standard C++ syntax and the C++ compiler will allocate - memory from the garbage collector. If you have overloaded - constructors, the compiler will choose the correct one using standard - C++ overload resolution rules. - - For example: - - java::util::Hashtable *ht = new java::util::Hashtable(120); - - - Function: void* _Jv_AllocBytes (jsize SIZE) - Allocates SIZE bytes from the heap. The memory is not scanned by - the garbage collector but it freed if no references to it are - discovered. - -  - File: gcj.info, Node: Arrays, Next: Methods, Prev: Object allocation, Up: About CNI - - Arrays - ====== - - While in many ways Java is similar to C and C++, it is quite - different in its treatment of arrays. C arrays are based on the idea - of pointer arithmetic, which would be incompatible with Java's security - requirements. Java arrays are true objects (array types inherit from - `java.lang.Object'). An array-valued variable is one that contains a - reference (pointer) to an array object. - - Referencing a Java array in C++ code is done using the `JArray' - template, which as defined as follows: - - class __JArray : public java::lang::Object - { - public: - int length; - }; - - template - class JArray : public __JArray - { - T data[0]; - public: - T& operator[](jint i) { return data[i]; } - }; - - There are a number of `typedef's which correspond to `typedef's from - the JNI. Each is the type of an array holding objects of the relevant - type: - - typedef __JArray *jarray; - typedef JArray *jobjectArray; - typedef JArray *jbooleanArray; - typedef JArray *jbyteArray; - typedef JArray *jcharArray; - typedef JArray *jshortArray; - typedef JArray *jintArray; - typedef JArray *jlongArray; - typedef JArray *jfloatArray; - typedef JArray *jdoubleArray; - - - Method on template: T* elements (JArray ARRAY) - This template function can be used to get a pointer to the - elements of the `array'. For instance, you can fetch a pointer to - the integers that make up an `int[]' like so: - - extern jintArray foo; - jint *intp = elements (foo); - - The name of this function may change in the future. - - - Function: jobjectArray JvNewObjectArray (jsize LENGTH, jclass KLASS, - jobject INIT) - Here `klass' is the type of elements of the array and `init' is - the initial value put into every slot in the array. - - Creating arrays - --------------- - - For each primitive type there is a function which can be used to - create a new array of that type. The name of the function is of the - form: - - JvNewTYPEArray - - For example: - - JvNewBooleanArray - - can be used to create an array of Java primitive boolean types. - - The following function definition is the template for all such - functions: - - - Function: jbooleanArray JvNewBooleanArray (jint LENGTH) - Create's an array LENGTH indices long. - - - Function: jsize JvGetArrayLength (jarray ARRAY) - Returns the length of the ARRAY. - -  - File: gcj.info, Node: Methods, Next: Strings, Prev: Arrays, Up: About CNI - - Methods - ======= - - Java methods are mapped directly into C++ methods. The header files - generated by `gcjh' include the appropriate method definitions. - Basically, the generated methods have the same names and - _corresponding_ types as the Java methods, and are called in the - natural manner. - - Overloading - ----------- - - Both Java and C++ provide method overloading, where multiple methods - in a class have the same name, and the correct one is chosen (at - compile time) depending on the argument types. The rules for choosing - the correct method are (as expected) more complicated in C++ than in - Java, but given a set of overloaded methods generated by `gcjh' the C++ - compiler will choose the expected one. - - Common assemblers and linkers are not aware of C++ overloading, so - the standard implementation strategy is to encode the parameter types - of a method into its assembly-level name. This encoding is called - "mangling", and the encoded name is the "mangled name". The same - mechanism is used to implement Java overloading. For C++/Java - interoperability, it is important that both the Java and C++ compilers - use the _same_ encoding scheme. - - Static methods - -------------- - - Static Java methods are invoked in CNI using the standard C++ - syntax, using the `::' operator rather than the `.' operator. - - For example: - - jint i = java::lang::Math::round((jfloat) 2.3); - - C++ method definition syntax is used to define a static native method. - For example: - - #include - java::lang::Integer* - java::lang::Integer::getInteger(jstring str) - { - ... - } - - Object Constructors - ------------------- - - Constructors are called implicitly as part of object allocation - using the `new' operator. - - For example: - - java::lang::Integer *x = new java::lang::Integer(234); - - Java does not allow a constructor to be a native method. This - limitation can be coded round however because a constructor can _call_ - a native method. - - Instance methods - ---------------- - - Calling a Java instance method from a C++ CNI method is done using - the standard C++ syntax, e.g.: - - // First create the Java object. - java::lang::Integer *x = new java::lang::Integer(234); - // Now call a method. - jint prim_value = x->intValue(); - if (x->longValue == 0) - ... - - Defining a Java native instance method is also done the natural way: - - #include - - jdouble - java::lang:Integer::doubleValue() - { - return (jdouble) value; - } - - Interface methods - ----------------- - - In Java you can call a method using an interface reference. This is - supported, but not completly. *Note Interfaces::. - -  - File: gcj.info, Node: Strings, Next: Mixing with C++, Prev: Methods, Up: About CNI - - Strings - ======= - - CNI provides a number of utility functions for working with Java - Java `String' objects. The names and interfaces are analogous to those - of JNI. - - - Function: jstring JvNewString (const char* CHARS, jsize LEN) - Returns a Java `String' object with characters from the C string - CHARS up to the index LEN in that array. - - - Function: jstring JvNewStringLatin1 (const char* BYTES, jsize LEN) - Returns a Java `String' made up of LEN bytes from BYTES. - - - Function: jstring JvNewStringLatin1 (const char* BYTES) - As above but the length of the `String' is `strlen(BYTES)'. - - - Function: jstring JvNewStringUTF (const char* BYTES) - Returns a `String' which is made up of the UTF encoded characters - present in the C string BYTES. - - - Function: jchar* JvGetStringChars (jstring STR) - Returns a pointer to an array of characters making up the `String' - STR. - - - Function: int JvGetStringUTFLength (jstring STR) - Returns the number of bytes required to encode the contents of the - `String' STR in UTF-8. - - - Function: jsize JvGetStringUTFRegion (jstring STR, jsize START, - jsize LEN, char* BUF) - Puts the UTF-8 encoding of a region of the `String' STR into the - buffer `buf'. The region to fetch is marked by START and LEN. - - Note that BUF is a buffer, not a C string. It is _not_ null - terminated. - -  - File: gcj.info, Node: Mixing with C++, Next: Exception Handling, Prev: Strings, Up: About CNI - - Interoperating with C/C++ - ========================= - - Because CNI is designed to represent Java classes and methods it - cannot be mixed readily with C/C++ types. - - One important restriction is that Java classes cannot have non-Java - type instance or static variables and cannot have methods which take - non-Java types as arguments or return non-Java types. - - None of the following is possible with CNI: - - - class ::MyClass : public java::lang::Object - { - char* variable; // char* is not a valid Java type. - } - - - uint - ::SomeClass::someMethod (char *arg) - { - . - . - . - } // `uint' is not a valid Java type, neither is `char*' - - Of course, it is ok to use C/C++ types within the scope of a method: - - jint - ::SomeClass::otherMethod (jstring str) - { - char *arg = ... - . - . - . - } - - But this restriction can cause a problem so CNI includes the - `gnu.gcj.RawData' class. The `RawData' class is a "non-scanned - reference" type. In other words variables declared of type `RawData' - can contain any data and are not checked by the compiler in any way. - - This means that you can put C/C++ data structures (including classes) - in your CNI classes, as long as you use the appropriate cast. - - Here are some examples: - - - class ::MyClass : public java::lang::Object - { - gnu.gcj.RawData string; - - MyClass (); - gnu.gcj.RawData getText (); - void printText (); - } - - ::MyClass::MyClass () - { - char* text = ... - string = text; - } - - gnu.gcj.RawData - ::MyClass::getText () - { - return string; - } - - void - ::MyClass::printText () - { - printf("%s\n", (char*) string); - } - -  - File: gcj.info, Node: Exception Handling, Next: Synchronization, Prev: Mixing with C++, Up: About CNI - - Exception Handling - ================== - - While C++ and Java share a common exception handling framework, - things are not yet perfectly integrated. The main issue is that the - run-time type information facilities of the two languages are not - integrated. - - Still, things work fairly well. You can throw a Java exception from - C++ using the ordinary `throw' construct, and this exception can be - caught by Java code. Similarly, you can catch an exception thrown from - Java using the C++ `catch' construct. - - Here is an example: - - if (i >= count) - throw new java::lang::IndexOutOfBoundsException(); - - Normally, G++ will automatically detect when you are writing C++ - code that uses Java exceptions, and handle them appropriately. - However, if C++ code only needs to execute destructors when Java - exceptions are thrown through it, GCC will guess incorrectly. Sample - problematic code: - - struct S { ~S(); }; - - extern void bar(); // Is implemented in Java and may throw exceptions. - - void foo() - { - S s; - bar(); - } - - The usual effect of an incorrect guess is a link failure, - complaining of a missing routine called `__gxx_personality_v0'. - - You can inform the compiler that Java exceptions are to be used in a - translation unit, irrespective of what it might think, by writing - `#pragma GCC java_exceptions' at the head of the file. This `#pragma' - must appear before any functions that throw or catch exceptions, or run - destructors when exceptions are thrown through them. - -  - File: gcj.info, Node: Synchronization, Next: Invocation, Prev: Exception Handling, Up: About CNI - - Synchronization - =============== - - Each Java object has an implicit monitor. The Java VM uses the - instruction `monitorenter' to acquire and lock a monitor, and - `monitorexit' to release it. - - The corresponding CNI macros are `JvMonitorEnter' and - `JvMonitorExit' (JNI has similar methods `MonitorEnter' and - `MonitorExit'). - - The Java source language does not provide direct access to these - primitives. Instead, there is a `synchronized' statement that does an - implicit `monitorenter' before entry to the block, and does a - `monitorexit' on exit from the block. Note that the lock has to be - released even when the block is abnormally terminated by an exception, - which means there is an implicit `try finally' surrounding - synchronization locks. - - From C++, it makes sense to use a destructor to release a lock. CNI - defines the following utility class: - - class JvSynchronize() { - jobject obj; - JvSynchronize(jobject o) { obj = o; JvMonitorEnter(o); } - ~JvSynchronize() { JvMonitorExit(obj); } - }; - - So this Java code: - - synchronized (OBJ) - { - CODE - } - - might become this C++ code: - - { - JvSynchronize dummy (OBJ); - CODE; - } - - Java also has methods with the `synchronized' attribute. This is - equivalent to wrapping the entire method body in a `synchronized' - statement. (Alternatively, an implementation could require the caller - to do the synchronization. This is not practical for a compiler, - because each virtual method call would have to test at run-time if - synchronization is needed.) Since in `gcj' the `synchronized' - attribute is handled by the method implementation, it is up to the - programmer of a synchronized native method to handle the synchronization - (in the C++ implementation of the method). In otherwords, you need to - manually add `JvSynchronize' in a `native synchornized' method. - -  - File: gcj.info, Node: Invocation, Next: Reflection, Prev: Synchronization, Up: About CNI - - Invocation - ========== - - CNI permits C++ applications to make calls into Java classes, in - addition to allowing Java code to call into C++. Several functions, - known as the "invocation API", are provided to support this. - - - Function: jint JvCreateJavaVM (void* VM_ARGS) - Initializes the Java runtime. This function performs essential - initialization of the threads interface, garbage collector, - exception handling and other key aspects of the runtime. It must - be called once by an application with a non-Java `main()' - function, before any other Java or CNI calls are made. It is - safe, but not recommended, to call `JvCreateJavaVM()' more than - once provided it is only called from a single thread. The VMARGS - parameter can be used to specify initialization parameters for the - Java runtime. It may be `NULL'. This function returns `0' upon - success, or `-1' if the runtime is already initialized. - - _Note:_ In GCJ 3.1, the `vm_args' parameter is ignored. It may be - used in a future release. - - - Function: java::lang::Thread* JvAttachCurrentThread (jstring NAME, - java::lang::ThreadGroup* GROUP) - Registers an existing thread with the Java runtime. This must be - called once from each thread, before that thread makes any other - Java or CNI calls. It must be called after `JvCreateJavaVM'. NAME - specifies a name for the thread. It may be `NULL', in which case a - name will be generated. GROUP is the ThreadGroup in which this - thread will be a member. If it is `NULL', the thread will be a - member of the main thread group. The return value is the Java - `Thread' object that represents the thread. It is safe to call - `JvAttachCurrentThread()' more than once from the same thread. If - the thread is already attached, the call is ignored and the current - thread object is returned. - - - Function: jint JvDetachCurrentThread () - Unregisters a thread from the Java runtime. This should be called - by threads that were attached using `JvAttachCurrentThread()', - after they have finished making calls to Java code. This ensures - that any resources associated with the thread become eligible for - garbage collection. This function returns `0' upon success, or - `-1' if the current thread is not attached. - - Handling uncaught exceptions - ---------------------------- - - If an exception is thrown from Java code called using the invocation - API, and no handler for the exception can be found, the runtime will - abort the application. In order to make the application more robust, it - is recommended that code which uses the invocation API be wrapped by a - top-level try/catch block that catches all Java exceptions. - - Example - ------- - - The following code demonstrates the use of the invocation API. In - this example, the C++ application initializes the Java runtime and - attaches itself. The `java.lang.System' class is initialized in order to - access its `out' field, and a Java string is printed. Finally, the - thread is detached from the runtime once it has finished making Java - calls. Everything is wrapped with a try/catch block to provide a - default handler for any uncaught exceptions. - - The example can be compiled with `c++ test.cc -lgcj'. - - // test.cc - #include - #include - #include - #include - - int main(int argc, char *argv) - { - using namespace java::lang; - - try - { - JvCreateJavaVM(NULL); - JvAttachCurrentThread(NULL, NULL); - - String *message = JvNewStringLatin1("Hello from C++"); - JvInitClass(&System.class$); - System::out->println(message); - - JvDetachCurrentThread(); - } - catch (Throwable *t) - { - System::err->println(JvNewStringLatin1("Unhandled Java exception:")); - t->printStackTrace(); - } - } - -  - File: gcj.info, Node: Reflection, Prev: Invocation, Up: About CNI - - Reflection - ========== - - Reflection is possible with CNI code, it functions similarly to how - it functions with JNI. - - The types `jfieldID' and `jmethodID' are as in JNI. - - The functions: - - * `JvFromReflectedField', - - * `JvFromReflectedMethod', - - * `JvToReflectedField' - - * `JvToFromReflectedMethod' - - will be added shortly, as will other functions corresponding to JNI. - -  - File: gcj.info, Node: Resources, Prev: About CNI, Up: Top - - Resources - ********* - - While writing `gcj' and `libgcj' we have, of course, relied heavily - on documentation from Sun Microsystems. In particular we have used The - Java Language Specification (both first and second editions), the Java - Class Libraries (volumes one and two), and the Java Virtual Machine - Specification. In addition we've used the online documentation at - `http://java.sun.com/'. - - The current `gcj' home page is `http://gcc.gnu.org/java/'. - - For more information on gcc, see `http://gcc.gnu.org/'. - - Some `libgcj' testing is done using the Mauve test suite. This is a - free software Java class library test suite which is being written - because the JCK is not free. See `http://sources.redhat.com/mauve/' - for more information. - - --- 0 ---- diff -Nrc3pad gcc-3.2.3/gcc/java/gcj.texi gcc-3.3/gcc/java/gcj.texi *** gcc-3.2.3/gcc/java/gcj.texi 2003-02-05 05:09:15.000000000 +0000 --- gcc-3.3/gcc/java/gcj.texi 2003-03-30 17:01:58.000000000 +0000 *************** *** 1,7 **** ! @\input texinfo @c -*-texinfo-*- @setfilename gcj.info @settitle Guide to GNU gcj @c Note: When reading this manual you'll find lots of strange @c circumlocutions like ``compiler for the Java language''. @c This is necessary due to Sun's restrictions on the use of --- 1,9 ---- ! \input texinfo @c -*-texinfo-*- @setfilename gcj.info @settitle Guide to GNU gcj + @include gcc-common.texi + @c Note: When reading this manual you'll find lots of strange @c circumlocutions like ``compiler for the Java language''. @c This is necessary due to Sun's restrictions on the use of *************** *** 11,22 **** @set copyrights-gcj 2001, 2002 @c Versions ! @set version-gcc 3.2.3 ! @set which-gcj GCC-@value{version-gcc} ! @macro gcctabopt{body} ! @code{\body\} ! @end macro @ifinfo @format --- 13,52 ---- @set copyrights-gcj 2001, 2002 @c Versions ! @set which-gcj GCC-@value{version-GCC} ! @copying ! @c man begin COPYRIGHT ! Copyright @copyright{} @value{copyrights-gcj} Free Software Foundation, Inc. ! ! Permission is granted to copy, distribute and/or modify this document ! under the terms of the GNU Free Documentation License, Version 1.2 or ! any later version published by the Free Software Foundation; with the ! Invariant Sections being ``GNU General Public License'', the Front-Cover ! texts being (a) (see below), and with the Back-Cover Texts being (b) ! (see below). A copy of the license is included in the ! @c man end ! section entitled ! ``GNU Free Documentation License''. ! @ignore ! @c man begin COPYRIGHT ! man page gfdl(7). ! @c man end ! @end ignore ! ! @c man begin COPYRIGHT ! ! (a) The FSF's Front-Cover Text is: ! ! A GNU Manual ! ! (b) The FSF's Back-Cover Text is: ! ! You have freedom to copy and modify this GNU Manual, like GNU ! software. Copies published by the Free Software Foundation raise ! funds for GNU development. ! @c man end ! @end copying @ifinfo @format *************** *** 43,75 **** @end direntry @end format ! @c man begin COPYRIGHT ! Copyright (C) @value{copyrights-gcj} Free Software Foundation, Inc. ! ! Permission is granted to copy, distribute and/or modify this document ! under the terms of the GNU Free Documentation License, Version 1.1 or ! any later version published by the Free Software Foundation; with the ! Invariant Sections being ``GNU General Public License'', the Front-Cover ! texts being (a) (see below), and with the Back-Cover Texts being (b) ! (see below). A copy of the license is included in the ! @c man end ! section entitled ! ``GNU Free Documentation License''. ! @ignore ! @c man begin COPYRIGHT ! man page gfdl(7). ! @c man end ! @end ignore ! ! (a) The FSF's Front-Cover Text is: ! ! A GNU Manual ! ! (b) The FSF's Back-Cover Text is: ! ! You have freedom to copy and modify this GNU Manual, like GNU ! software. Copies published by the Free Software Foundation raise ! funds for GNU development. @end ifinfo @titlepage --- 73,79 ---- @end direntry @end format ! @insertcopying @end ifinfo @titlepage *************** man page gfdl(7). *** 78,108 **** @page @vskip 0pt plus 1filll - Copyright @copyright{} @value{copyrights-gcj} Free Software Foundation, Inc. - @sp 2 For the @value{which-gcj} Version* @sp 1 Published by the Free Software Foundation @* 59 Temple Place - Suite 330@* Boston, MA 02111-1307, USA@* @sp 1 ! Permission is granted to copy, distribute and/or modify this document ! under the terms of the GNU Free Documentation License, Version 1.1 or ! any later version published by the Free Software Foundation; with the ! Invariant Sections being ``GNU General Public License'', the Front-Cover ! texts being (a) (see below), and with the Back-Cover Texts being (b) ! (see below). A copy of the license is included in the section entitled ! ``GNU Free Documentation License''. ! ! (a) The FSF's Front-Cover Text is: ! ! A GNU Manual ! ! (b) The FSF's Back-Cover Text is: ! ! You have freedom to copy and modify this GNU Manual, like GNU ! software. Copies published by the Free Software Foundation raise ! funds for GNU development. @end titlepage @contents @page --- 82,94 ---- @page @vskip 0pt plus 1filll For the @value{which-gcj} Version* @sp 1 Published by the Free Software Foundation @* 59 Temple Place - Suite 330@* Boston, MA 02111-1307, USA@* @sp 1 ! @insertcopying @end titlepage @contents @page *************** files and object files, and it can read *** 130,135 **** --- 116,122 ---- * Invoking rmic:: Generate stubs for Remote Method Invocation. * Invoking rmiregistry:: The remote object registry. * About CNI:: Description of the Cygnus Native Interface + * System properties:: Modifying runtime behavior of the libgcj library * Resources:: Where to look for more information @end menu *************** file, which @command{gcj} will search as *** 242,248 **** @item -I@var{dir} All directories specified by @code{-I} are kept in order and prepended to the class path constructed from all the other options. Unless ! compatibility with tools like @code{javac} is imported, we recommend always using @code{-I} instead of the other options for manipulating the class path. --- 229,235 ---- @item -I@var{dir} All directories specified by @code{-I} are kept in order and prepended to the class path constructed from all the other options. Unless ! compatibility with tools like @code{javac} is important, we recommend always using @code{-I} instead of the other options for manipulating the class path. *************** If @code{--bootclasspath} was specified, *** 282,288 **** Otherwise, append the built-in system directory, @file{libgcj.jar}. @item ! Finaly, if @code{--extdirs} was specified, append the contents of the specified directories at the end of the class path. Otherwise, append the contents of the built-in extdirs at @code{$(prefix)/share/java/ext}. @end itemize --- 269,275 ---- Otherwise, append the built-in system directory, @file{libgcj.jar}. @item ! Finally, if @code{--extdirs} was specified, append the contents of the specified directories at the end of the class path. Otherwise, append the contents of the built-in extdirs at @code{$(prefix)/share/java/ext}. @end itemize *************** using JNI, then you must use @code{-fjni *** 427,434 **** @command{gcj} to generate stubs which will invoke the underlying JNI methods. @item -fno-optimize-static-class-initialization ! When the optimization level is greather or equal to @code{-O2}, @command{gcj} will try to optimize the way calls into the runtime are made to initialize static classes upon their first use (this optimization isn't carried out if @code{-C} was specified.) When compiling to native --- 414,425 ---- @command{gcj} to generate stubs which will invoke the underlying JNI methods. + @item -fno-assert + Don't recognize the @code{assert} keyword. This is for compatibility + with older versions of the language specification. + @item -fno-optimize-static-class-initialization ! When the optimization level is greater or equal to @code{-O2}, @command{gcj} will try to optimize the way calls into the runtime are made to initialize static classes upon their first use (this optimization isn't carried out if @code{-C} was specified.) When compiling to native *************** specifications. However, limited manpow *** 482,495 **** documentation work against us. So, there are caveats to using @command{gcj}. This list of compatibility issues is by no means complete. @itemize @bullet @item ! @command{gcj} implements the JDK 1.1 language. It supports inner classes, ! though these are known to still be buggy. It does not yet support the ! Java 2 @code{strictfp} keyword (it recognizes the keyword but ignores ! it). @item @code{libgcj} is largely compatible with the JDK 1.2 libraries. --- 473,493 ---- documentation work against us. So, there are caveats to using @command{gcj}. + @menu + * Limitations:: + * Extensions:: + @end menu + + @node Limitations + @section Standard features not yet supported + This list of compatibility issues is by no means complete. @itemize @bullet @item ! @command{gcj} implements the JDK 1.2 language. It supports inner classes ! and the new 1.4 @code{assert} keyword. It does not yet support the Java 2 ! @code{strictfp} keyword (it recognizes the keyword but ignores it). @item @code{libgcj} is largely compatible with the JDK 1.2 libraries. *************** Sometimes the @code{libgcj} implementati *** 503,510 **** --- 501,544 ---- from the JDK implementation. This is not always a bug. Still, if it affects you, it probably makes sense to report it so that we can discuss the appropriate response. + + @item + @command{gcj} does not currently allow for piecemeal replacement of + components within @code{libgcj}. Unfortunately, programmers often want + to use newer versions of certain packages, such as those provided by + the Apache Software Foundation's Jakarta project. This has forced us + to place the @code{org.w3c.dom} and @code{org.xml.sax} packages into + their own libraries, separate from @code{libgcj}. If you intend to + use these classes, you must link them explicitly with + @code{-l-org-w3c-dom} and @code{-l-org-xml-sax}. Future versions of + @command{gcj} may not have this restriction. @end itemize + @node Extensions + @section Extra features unique to gcj + + The main feature of @command{gcj} is that it can compile programs + written in the Java programming language to native code. Most + extensions that have been added are to facilitate this functionality. + + @itemize @bullet + @item + @command{gcj} makes it easy and efficient to mix code written in Java and C++. + @xref{About CNI}, for more info on how to use this in your programs. + + @item + When you compile your classes into a shared library they can be automatically + loaded by the @code{libgcj} system classloader. When trying to load a class + @code{gnu.pkg.SomeClass} the system classloader will first try to load the + shared library @file{lib-gnu-pkg-SomeClass.so}, if that fails to load the + class then it will try to load @file{lib-gnu-pkg.so} and finally when the + class is still not loaded it will try to load @file{lib-gnu.so}. Note that + all @samp{.}s will be transformed into @samp{-}s and that searching + for inner classes starts with their outermost outer class. If the class + cannot be found this way the system classloader tries to use + the @code{libgcj} bytecode interpreter to load the class from the standard + classpath. + @end itemize @node Invoking gcjh @chapter Invoking gcjh *************** source file (@file{.java} file). *** 621,628 **** @ignore @c man begin SYNOPSIS jv-scan ! jv-scan [@option{--complexity}] [@option{--encoding}=@var{name}] ! [@option{--print-main}] [@option{--list-class}] [@option{--list-filename}] [@option{--version}] [@option{--help}] [@option{-o} @var{file}] @var{inputfile}@dots{} @c man end --- 655,663 ---- @ignore @c man begin SYNOPSIS jv-scan ! jv-scan [@option{--no-assert}] [@option{--complexity}] ! [@option{--encoding}=@var{name}] [@option{--print-main}] ! [@option{--list-class}] [@option{--list-filename}] [@option{--version}] [@option{--help}] [@option{-o} @var{file}] @var{inputfile}@dots{} @c man end *************** and the Info entries for @file{gcj} and *** 635,640 **** --- 670,679 ---- @c man begin OPTIONS jv-scan @table @gcctabopt + @item --no-assert + Don't recognize the @code{assert} keyword, for backwards compatibility + with older versions of the language specification. + @item --complexity This prints a complexity measure, related to cyclomatic complexity, for each input file. *************** and the Info entries for @file{gcj} and *** 687,693 **** @c man begin DESCRIPTION jcf-dump This is a class file examiner, similar to @code{javap}. It will print ! information about a number of classes, which are specifed by class name or file name. @c man end --- 726,732 ---- @c man begin DESCRIPTION jcf-dump This is a class file examiner, similar to @code{javap}. It will print ! information about a number of classes, which are specified by class name or file name. @c man end *************** Print extra information while running. *** 730,738 **** gij [@option{OPTION}] @dots{} @var{JARFILE} [@var{ARGS}@dots{}] gij [@option{-jar}] [@option{OPTION}] @dots{} @var{CLASS} [@var{ARGS}@dots{}] [@option{-D}@var{name}[=@var{value}]@dots{}] [@option{-ms=}@var{number}] [@option{-mx=}@var{number}] ! [@option{--version}] [@option{--help}] @c man end @c man begin SEEALSO gij gcc(1), gcj(1), gcjh(1), jv-scan(1), jcf-dump(1), gfdl(7), --- 769,778 ---- gij [@option{OPTION}] @dots{} @var{JARFILE} [@var{ARGS}@dots{}] gij [@option{-jar}] [@option{OPTION}] @dots{} @var{CLASS} [@var{ARGS}@dots{}] + [@option{-cp} @var{path}] [@option{-classpath} @var{path}] [@option{-D}@var{name}[=@var{value}]@dots{}] [@option{-ms=}@var{number}] [@option{-mx=}@var{number}] ! [@option{--showversion}] [@option{--version}] [@option{--help}] @c man end @c man begin SEEALSO gij gcc(1), gcj(1), gcjh(1), jv-scan(1), jcf-dump(1), gfdl(7), *************** been compiled and put into a shared libr *** 772,777 **** --- 812,824 ---- @c man begin OPTIONS gij @table @gcctabopt + @item -cp @var{path} + @itemx -classpath @var{path} + Set the initial class path. The class path is used for finding + class and resource files. If specified, this option overrides the + @code{CLASSPATH} environment variable. Note that this option is + ignored if @code{-jar} is used. + @item -D@var{name}[=@var{value}] This defines a system property named @var{name} with value @var{value}. If @var{value} is not specified then it defaults to the empty string. *************** as the name of a jar file, not a class. *** 792,797 **** --- 839,847 ---- @item --help Print help, then exit. + @item --showversion + Print version number and continue. + @item --version Print version number, then exit. @end table *************** Print version information, then exit. *** 942,948 **** @c man title rmiregistry Remote object registry @c man begin SYNOPSIS rmiregistry ! @command{rmiregistry} [@option{OPTION}] @dots{} [@var{port}] @ignore [@option{--help}] [@option{--version}] --- 992,998 ---- @c man title rmiregistry Remote object registry @c man begin SYNOPSIS rmiregistry ! @command{rmic} [@option{OPTION}] @dots{} [@var{port}] @ignore [@option{--help}] [@option{--version}] *************** class java::lang::String : public java:: *** 1100,1106 **** @}; @end example ! @noindent The @code{gcjh} tool automatically generates the nessary namespace declarations. --- 1150,1156 ---- @}; @end example ! @noindent The @code{gcjh} tool automatically generates the necessary namespace declarations. *************** import @var{package-name}.*; *** 1142,1148 **** @end example @noindent Doing this allows any class from the package @var{package-name} to be ! refered to only by its class-name within the program text. @noindent The same effect can be achieved in C++ like this: --- 1192,1198 ---- @end example @noindent Doing this allows any class from the package @var{package-name} to be ! referred to only by its class-name within the program text. @noindent The same effect can be achieved in C++ like this: *************** so CNI provides a special C++ type for e *** 1174,1180 **** @item @code{void} @tab @code{void} @tab no value @end multitable ! When refering to a Java type You should always use these C++ typenames (e.g.: @code{jint}) to avoid disappointment. --- 1224,1230 ---- @item @code{void} @tab @code{void} @tab no value @end multitable ! When referring to a Java type You should always use these C++ typenames (e.g.: @code{jint}) to avoid disappointment. *************** programmer's responsibility to make sure *** 1316,1331 **** However, this is fairly painless because of the conventions assumed by the Java system. ! First, @code{libgcj} will make sure a class is initialized ! before an instance of that object is created. This is one ! of the responsibilities of the @code{new} operation. This is ! taken care of both in Java code, and in C++ code. (When the G++ ! compiler sees a @code{new} of a Java class, it will call ! a routine in @code{libgcj} to allocate the object, and that ! routine will take care of initializing the class.) It follows that you can ! access an instance field, or call an instance (non-static) ! method and be safe in the knowledge that the class and all ! of its base classes have been initialized. Invoking a static method is also safe. This is because the Java compiler adds code to the start of a static method to make sure --- 1366,1382 ---- However, this is fairly painless because of the conventions assumed by the Java system. ! First, @code{libgcj} will make sure a class is initialized before an ! instance of that object is created. This is one of the ! responsibilities of the @code{new} operation. This is taken care of ! both in Java code, and in C++ code. When G++ sees a @code{new} of a ! Java class, it will call a routine in @code{libgcj} to allocate the ! object, and that routine will take care of initializing the class. ! Note however that this does not happen for Java arrays; you must ! allocate those using the appropriate CNI function. It follows that ! you can access an instance field, or call an instance (non-static) ! method and be safe in the knowledge that the class and all of its base ! classes have been initialized. Invoking a static method is also safe. This is because the Java compiler adds code to the start of a static method to make sure *************** java::lang:Integer::doubleValue() *** 1571,1577 **** @subsection Interface methods In Java you can call a method using an interface reference. This is ! supported, but not completly. @xref{Interfaces}. --- 1622,1628 ---- @subsection Interface methods In Java you can call a method using an interface reference. This is ! supported, but not completely. @xref{Interfaces}. *************** the @code{synchronized} attribute is han *** 1815,1822 **** method implementation, it is up to the programmer of a synchronized native method to handle the synchronization (in the C++ implementation of the method). ! In otherwords, you need to manually add @code{JvSynchronize} ! in a @code{native synchornized} method. @node Invocation @section Invocation --- 1866,1873 ---- method implementation, it is up to the programmer of a synchronized native method to handle the synchronization (in the C++ implementation of the method). ! In other words, you need to manually add @code{JvSynchronize} ! in a @code{native synchronized} method. @node Invocation @section Invocation *************** int main(int argc, char *argv) *** 1901,1907 **** JvAttachCurrentThread(NULL, NULL); String *message = JvNewStringLatin1("Hello from C++"); ! JvInitClass(&System.class$); System::out->println(message); JvDetachCurrentThread(); --- 1952,1958 ---- JvAttachCurrentThread(NULL, NULL); String *message = JvNewStringLatin1("Hello from C++"); ! JvInitClass(&System::class$); System::out->println(message); JvDetachCurrentThread(); *************** are as in JNI@. *** 1936,1941 **** --- 1987,2240 ---- @noindent will be added shortly, as will other functions corresponding to JNI@. + @node System properties + @chapter System properties + + The runtime behavior of the @code{libgcj} library can be modified by setting + certain system properties. These properties can be compiled into the program + using the @code{-D@var{name}[=@var{value}]} option to @command{gcj} or by + setting them explicitly in the program by calling the + @code{java.lang.System.setProperty()} method. Some system properties are only + used for informational purposes (like giving a version number or a user name). + A program can inspect the current value of a property by calling the + @code{java.lang.System.getProperty()} method. + + @menu + * Standard Properties:: Standard properties supported by @code{libgcj} + * GNU Classpath Properties:: Properties found in Classpath based libraries + * libgcj Runtime Properties:: Properties specific to @code{libgcj} + @end menu + + @node Standard Properties + @section Standard Properties + + The following properties are normally found in all implementations of the core + libraries for the Java language. + + @table @gcctabopt + + @item java.version + The @code{libgcj} version number. + + @item java.vendor + Set to @samp{The Free Software Foundation, Inc.} + + @item java.vendor.url + Set to @uref{http://gcc.gnu.org/java/}. + + @item java.home + The directory where @code{gcj} was installed. Taken from the @code{--prefix} + option given to @command{configure}. + + @item java.class.version + The class format version number supported by the libgcj byte code interpreter. + (Currently @samp{46.0}) + + @item java.vm.specification.version + The Virtual Machine Specification version implemented by @code{libgcj}. + (Currently @samp{1.0}) + + @item java.vm.specification.vendor + The name of the Virtual Machine specification designer. + + @item java.vm.specification.name + The name of the Virtual Machine specification + (Set to @samp{Java Virtual Machine Specification}). + + @item java.vm.version + The @command{gcj} version number. + + @item java.vm.vendor + Set to @samp{The Free Software Foundation, Inc.} + + @item java.vm.name + Set to @samp{GNU libgcj}. + + @item java.specification.version + The Runtime Environment specification version implemented by @code{libgcj}. + (Currently set to @samp{1.3}) + + @item java.specification.vendor + The Runtime Environment specification designer. + + @item java.specification.name + The name of the Runtime Environment specification + (Set to @samp{Java Platform API Specification}). + + @item java.class.path + The paths (jar files, zip files and directories) used for finding class files. + + @item java.library.path + Directory path used for finding native libraries. + + @item java.io.tmpdir + The directory used to put temporary files in. + + @item java.compiler + Name of the Just In Time compiler to use by the byte code interpreter. + Currently not used in @code{libgcj}. + + @item java.ext.dirs + Directories containing jar files with extra libraries. Will be used when + resolving classes. Currently not used in @code{libgcj}. + + @item java.protocol.handler.pkgs + A @samp{|} separated list of package names that is used to find classes that + implement handlers for @code{java.net.URL}. + + @item java.rmi.server.codebase + A list of URLs that is used by the @code{java.rmi.server.RMIClassLoader} + to load classes from. + + @item jdbc.drivers + A list of class names that will be loaded by the @code{java.sql.DriverManager} + when it starts up. + + @item file.separator + The separator used in when directories are included in a filename + (normally @samp{/} or @samp{\} ). + + @item file.encoding + The default character encoding used when converting platform native files to + Unicode (usually set to @samp{8859_1}). + + @item path.separator + The standard separator used when a string contains multiple paths + (normally @samp{:} or @samp{;}), the string is usually not a valid character + to use in normal directory names.) + + @item line.separator + The default line separator used on the platform (normally @samp{\n}, @samp{\r} + or a combination of those two characters). + + @item policy.provider + The class name used for the default policy provider returned by + @code{java.security.Policy.getPolicy}. + + @item user.name + The name of the user running the program. Can be the full name, the login name + or empty if unknown. + + @item user.home + The default directory to put user specific files in. + + @item user.dir + The current working directory from which the program was started. + + @item user.language + The default language as used by the @code{java.util.Locale} class. + + @item user.region + The default region as used by the @code{java.util.Local} class. + + @item user.variant + The default variant of the language and region local used. + + @item user.timezone + The default timezone as used by the @code{java.util.TimeZone} class. + + @item os.name + The operating system/kernel name that the program runs on. + + @item os.arch + The hardware that we are running on. + + @item os.version + The version number of the operating system/kernel. + + @item awt.appletWarning + The string to display when an untrusted applet is displayed. + Returned by @code{java.awt.Window.getWarningString()} when the window is + ``insecure''. + + @item awt.toolkit + The class name used for initializing the default @code{java.awt.Toolkit}. + Defaults to @code{gnu.awt.gtk.GtkToolkit}. + + @item http.proxyHost + Name of proxy host for http connections. + + @item http.proxyPort + Port number to use when a proxy host is in use. + + @end table + + @node GNU Classpath Properties + @section GNU Classpath Properties + + @code{libgcj} is based on the GNU Classpath (Essential Libraries for Java) a + GNU project to create free core class libraries for use with virtual machines + and compilers for the Java language. The following properties are common to + libraries based on GNU Classpath. + + @table @gcctabopt + + @item gcj.dumpobject + Enables printing serialization debugging by the @code{java.io.ObjectInput} and + @code{java.io.ObjectOutput} classes when set to something else then the empty + string. Only used when running a debug build of the library. + + @item gnu.classpath.vm.shortname + This is a succint name of the virtual machine. For @code{libgcj}, + this will always be @samp{libgcj}. + + @item gnu.classpath.home.url + A base URL used for finding system property files (e.g., + @file{classpath.security}). By default this is a @samp{file:} URL + pointing to the @file{lib} directory under @samp{java.home}. + + @end table + + @node libgcj Runtime Properties + @section libgcj Runtime Properties + + The following properties are specific to the @code{libgcj} runtime and will + normally not be found in other core libraries for the java language. + + @table @gcctabopt + + @item java.fullversion + The combination of @code{java.vm.name} and @code{java.vm.version}. + + @item java.vm.info + Same as @code{java.fullversion}. + + @item impl.prefix + Used by the @code{java.net.DatagramSocket} class when set to something else + then the empty string. When set all newly created @code{DatagramSocket}s will + try to load a class @code{java.net.[impl.prefix]DatagramSocketImpl} instead of + the normal @code{java.net.PlainDatagramSocketImpl}. + + @item gnu.gcj.progname + The name that was used to invoked the program. + + @item gnu.gcj.runtime.NameFinder.demangle + Whether names in a stack trace should be demangled. Defaults to @code{true}. + + @item gnu.gcj.runtime.NameFinder.sanitize + Whether calls to initialize exceptions and starting the runtime system + should be removed from the stack trace. Only done when names are + demangled. Defaults to @code{true}. + + @item gnu.gcj.runtime.NameFinder.remove_unknown + Whether calls to unknown functions (class and method names are unknown) + should be removed from the stack trace. Only done when the stack is + sanitized. Ignored if this means no stack trace information would be + available anymore. Defaults to @code{true}. + + @item gnu.gcj.runtime.NameFinder.remove_interpreter + Whether runtime interpreter calls (methods in the @code{_Jv_InterpMethod} class + and functions starting with @samp{ffi_}) should be removed from the stack + trace. Only done when the stack is sanitized. Defaults to @code{true}. + + + @item gnu.gcj.runtime.NameFinder.use_addr2line + Whether an external process (@command{addr2line} or @command{addr2name.awk}) + should be used as fallback to convert the addresses to function names when + the runtime is unable to do it through @code{dladdr}. + + @end table + @node Resources @chapter Resources diff -Nrc3pad gcc-3.2.3/gcc/java/gij.1 gcc-3.3/gcc/java/gij.1 *** gcc-3.2.3/gcc/java/gij.1 2003-04-22 07:07:38.000000000 +0000 --- gcc-3.3/gcc/java/gij.1 2003-05-14 00:32:11.000000000 +0000 *************** *** 1,8 **** ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Tue Apr 22 07:07:38 2003 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,7 ---- ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 15,26 **** .if t .sp .5v .if n .sp .. - .de Ip \" List item - .br - .ie \\n(.$>=3 .ne \\$3 - .el .ne 3 - .IP "\\$1" \\$2 - .. .de Vb \" Begin verbatim text .ft CW .nf --- 14,19 ---- *************** *** 28,42 **** .. .de Ve \" End verbatim text .ft R - .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 21,34 ---- .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 56,65 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 48,57 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 68,81 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. - .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 60,72 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 135,155 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "GIJ 1" ! .TH GIJ 1 "gcc-3.2.3" "2003-04-22" "GNU" ! .UC .SH "NAME" ! gij \- \s-1GNU\s0 interpreter for Java bytecode .SH "SYNOPSIS" .IX Header "SYNOPSIS" gij [\fB\s-1OPTION\s0\fR] ... \fI\s-1JARFILE\s0\fR [\fI\s-1ARGS\s0\fR...] .PP gij [\fB\-jar\fR] [\fB\s-1OPTION\s0\fR] ... \fI\s-1CLASS\s0\fR [\fI\s-1ARGS\s0\fR...] [\fB\-D\fR\fIname\fR[=\fIvalue\fR]...] [\fB\-ms=\fR\fInumber\fR] [\fB\-mx=\fR\fInumber\fR] ! [\fB\*(--version\fR] [\fB\*(--help\fR] .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\f(CW\*(C`gij\*(C'\fR is a Java bytecode interpreter included with \f(CW\*(C`libgcj\*(C'\fR. --- 126,146 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "GIJ 1" ! .TH GIJ 1 "2003-05-14" "gcc-3.3" "GNU" .SH "NAME" ! gij \- GNU interpreter for Java bytecode .SH "SYNOPSIS" .IX Header "SYNOPSIS" gij [\fB\s-1OPTION\s0\fR] ... \fI\s-1JARFILE\s0\fR [\fI\s-1ARGS\s0\fR...] .PP gij [\fB\-jar\fR] [\fB\s-1OPTION\s0\fR] ... \fI\s-1CLASS\s0\fR [\fI\s-1ARGS\s0\fR...] + [\fB\-cp\fR \fIpath\fR] [\fB\-classpath\fR \fIpath\fR] [\fB\-D\fR\fIname\fR[=\fIvalue\fR]...] [\fB\-ms=\fR\fInumber\fR] [\fB\-mx=\fR\fInumber\fR] ! [\fB\-\-showversion\fR] [\fB\-\-version\fR] [\fB\-\-help\fR] .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\f(CW\*(C`gij\*(C'\fR is a Java bytecode interpreter included with \f(CW\*(C`libgcj\*(C'\fR. *************** objects, it is possible to give \f(CW\*( *** 178,218 **** been compiled and put into a shared library on the class path. .SH "OPTIONS" .IX Header "OPTIONS" ! .Ip "\fB\-D\fR\fIname\fR\fB[=\fR\fIvalue\fR\fB]\fR" 4 .IX Item "-Dname[=value]" This defines a system property named \fIname\fR with value \fIvalue\fR. If \fIvalue\fR is not specified then it defaults to the empty string. These system properties are initialized at the program's startup and can be retrieved at runtime using the \f(CW\*(C`java.lang.System.getProperty\*(C'\fR method. ! .Ip "\fB\-ms=\fR\fInumber\fR" 4 .IX Item "-ms=number" This sets the initial heap size. ! .Ip "\fB\-mx=\fR\fInumber\fR" 4 .IX Item "-mx=number" This sets the maximum heap size. ! .Ip "\fB\-jar\fR" 4 .IX Item "-jar" This indicates that the name passed to \f(CW\*(C`gij\*(C'\fR should be interpreted as the name of a jar file, not a class. ! .Ip "\fB\*(--help\fR" 4 ! .IX Item "help" Print help, then exit. ! .Ip "\fB\*(--version\fR" 4 ! .IX Item "version" Print version number, then exit. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcj\fR\|(1), \fIgcjh\fR\|(1), \fIjv-scan\fR\|(1), \fIjcf-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). --- 169,236 ---- been compiled and put into a shared library on the class path. .SH "OPTIONS" .IX Header "OPTIONS" ! .IP "\fB\-cp\fR \fIpath\fR" 4 ! .IX Item "-cp path" ! .PD 0 ! .IP "\fB\-classpath\fR \fIpath\fR" 4 ! .IX Item "-classpath path" ! .PD ! Set the initial class path. The class path is used for finding ! class and resource files. If specified, this option overrides the ! \&\f(CW\*(C`CLASSPATH\*(C'\fR environment variable. Note that this option is ! ignored if \f(CW\*(C`\-jar\*(C'\fR is used. ! .IP "\fB\-D\fR\fIname\fR\fB[=\fR\fIvalue\fR\fB]\fR" 4 .IX Item "-Dname[=value]" This defines a system property named \fIname\fR with value \fIvalue\fR. If \fIvalue\fR is not specified then it defaults to the empty string. These system properties are initialized at the program's startup and can be retrieved at runtime using the \f(CW\*(C`java.lang.System.getProperty\*(C'\fR method. ! .IP "\fB\-ms=\fR\fInumber\fR" 4 .IX Item "-ms=number" This sets the initial heap size. ! .IP "\fB\-mx=\fR\fInumber\fR" 4 .IX Item "-mx=number" This sets the maximum heap size. ! .IP "\fB\-jar\fR" 4 .IX Item "-jar" This indicates that the name passed to \f(CW\*(C`gij\*(C'\fR should be interpreted as the name of a jar file, not a class. ! .IP "\fB\-\-help\fR" 4 ! .IX Item "--help" Print help, then exit. ! .IP "\fB\-\-showversion\fR" 4 ! .IX Item "--showversion" ! Print version number and continue. ! .IP "\fB\-\-version\fR" 4 ! .IX Item "--version" Print version number, then exit. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcj\fR\|(1), \fIgcjh\fR\|(1), \fIjv\-scan\fR\|(1), \fIjcf\-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (c) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). + .PP + (a) The \s-1FSF\s0's Front-Cover Text is: + .PP + .Vb 1 + \& A GNU Manual + .Ve + .PP + (b) The \s-1FSF\s0's Back-Cover Text is: + .PP + .Vb 3 + \& You have freedom to copy and modify this GNU Manual, like GNU + \& software. Copies published by the Free Software Foundation raise + \& funds for GNU development. + .Ve diff -Nrc3pad gcc-3.2.3/gcc/java/gjavah.c gcc-3.3/gcc/java/gjavah.c *** gcc-3.2.3/gcc/java/gjavah.c 2002-04-10 13:08:59.000000000 +0000 --- gcc-3.3/gcc/java/gjavah.c 2003-03-28 22:18:48.000000000 +0000 *************** *** 1,7 **** /* Program to write C++-suitable header files from a Java(TM) .class file. This is similar to SUN's javah. ! Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002 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 --- 1,7 ---- /* Program to write C++-suitable header files from a Java(TM) .class file. This is similar to SUN's javah. ! Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003 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 is independ *** 33,38 **** --- 33,39 ---- #include "javaop.h" #include "java-tree.h" #include "java-opcodes.h" + #include "hashtab.h" #include *************** static int found_error = 0; *** 47,53 **** /* Nonzero if we're generating JNI output. */ static int flag_jni = 0; ! /* When non zero, warn when source file is newer than matching class file. */ int flag_newer = 1; --- 48,54 ---- /* Nonzero if we're generating JNI output. */ static int flag_jni = 0; ! /* When nonzero, warn when source file is newer than matching class file. */ int flag_newer = 1; *************** static void print_full_cxx_name PARAMS ( *** 130,137 **** static void decompile_method PARAMS ((FILE*, JCF*, int)); static void add_class_decl PARAMS ((FILE*, JCF*, JCF_u2)); ! static int java_float_finite PARAMS ((jfloat)); ! static int java_double_finite PARAMS ((jdouble)); static void print_name PARAMS ((FILE *, JCF *, int)); static void print_base_classname PARAMS ((FILE *, JCF *, int)); static int utf8_cmp PARAMS ((const unsigned char *, int, const char *)); --- 131,139 ---- static void decompile_method PARAMS ((FILE*, JCF*, int)); static void add_class_decl PARAMS ((FILE*, JCF*, JCF_u2)); ! static void jni_print_float PARAMS ((FILE *, jfloat)); ! static void jni_print_double PARAMS ((FILE *, jdouble)); ! static void print_name PARAMS ((FILE *, JCF *, int)); static void print_base_classname PARAMS ((FILE *, JCF *, int)); static int utf8_cmp PARAMS ((const unsigned char *, int, const char *)); *************** static char *get_field_name PARAMS ((JCF *** 142,147 **** --- 144,151 ---- static void print_field_name PARAMS ((FILE *, JCF *, int, JCF_u2)); static const unsigned char *super_class_name PARAMS ((JCF *, int *)); static void print_include PARAMS ((FILE *, const unsigned char *, int)); + static int gcjh_streq PARAMS ((const void *p1, const void *p2)); + static int throwable_p PARAMS ((const unsigned char *signature)); static const unsigned char *decode_signature_piece PARAMS ((FILE *, const unsigned char *, const unsigned char *, int *)); static void print_class_decls PARAMS ((FILE *, JCF *, int)); *************** static int method_printed = 0; *** 190,195 **** --- 194,202 ---- static int method_synthetic = 0; static int method_signature = 0; + /* Set to 1 while the very first data member of a class is being handled. */ + static int is_first_data_member = 0; + #define HANDLE_METHOD(ACCESS_FLAGS, NAME, SIGNATURE, ATTRIBUTE_COUNT) \ { \ method_synthetic = 0; \ *************** static int decompiled = 0; *** 237,274 **** #include "jcf-reader.c" ! /* Some useful constants. */ ! #define F_NAN_MASK 0x7f800000 ! #if (1 == HOST_FLOAT_WORDS_BIG_ENDIAN) && ! defined (HOST_WORDS_BIG_ENDIAN) ! #define D_NAN_MASK 0x000000007ff00000LL ! #else ! #define D_NAN_MASK 0x7ff0000000000000LL ! #endif ! ! /* Return 1 if F is not Inf or NaN. */ ! static int ! java_float_finite (f) ! jfloat f; { ! union Word u; ! u.f = f; ! ! /* We happen to know that F_NAN_MASK will match all NaN values, and ! also positive and negative infinity. That's why we only need one ! test here. See The Java Language Specification, section 20.9. */ ! return (u.i & F_NAN_MASK) != F_NAN_MASK; } ! /* Return 1 if D is not Inf or NaN. */ ! static int ! java_double_finite (d) ! jdouble d; { ! union DWord u; ! u.d = d; ! ! /* Now check for all NaNs. */ ! return (u.l & D_NAN_MASK) != D_NAN_MASK; } /* Print a character, appropriately mangled for JNI. */ --- 244,297 ---- #include "jcf-reader.c" ! /* Print a single-precision float, suitable for parsing by g++. */ ! static void ! jni_print_float (FILE *stream, jfloat f) { ! /* It'd be nice to use __builtin_nan/__builtin_inf here but they don't ! work in data initializers. FIXME. */ ! if (JFLOAT_FINITE (f)) ! { ! fputs (" = ", stream); ! if (f.negative) ! putc ('-', stream); ! if (f.exponent) ! fprintf (stream, "0x1.%.6xp%+df", ! ((unsigned int)f.mantissa) << 1, ! f.exponent - JFLOAT_EXP_BIAS); ! else ! /* Exponent of 0x01 is -125; exponent of 0x00 is *also* -125, ! because the implicit leading 1 bit is no longer present. */ ! fprintf (stream, "0x0.%.6xp%+df", ! ((unsigned int)f.mantissa) << 1, ! f.exponent + 1 - JFLOAT_EXP_BIAS); ! } ! fputs (";\n", stream); } ! /* Print a double-precision float, suitable for parsing by g++. */ ! static void ! jni_print_double (FILE *stream, jdouble f) { ! /* It'd be nice to use __builtin_nan/__builtin_inf here but they don't ! work in data initializers. FIXME. */ ! if (JDOUBLE_FINITE (f)) ! { ! fputs (" = ", stream); ! if (f.negative) ! putc ('-', stream); ! if (f.exponent) ! fprintf (stream, "0x1.%.5x%.8xp%+d", ! f.mantissa0, f.mantissa1, ! f.exponent - JDOUBLE_EXP_BIAS); ! else ! /* Exponent of 0x001 is -1022; exponent of 0x000 is *also* -1022, ! because the implicit leading 1 bit is no longer present. */ ! fprintf (stream, "0x0.%.5x%.8xp%+d", ! f.mantissa0, f.mantissa1, ! f.exponent + 1 - JDOUBLE_EXP_BIAS); ! } ! fputs (";\n", stream); } /* Print a character, appropriately mangled for JNI. */ *************** DEFUN(print_field_info, (stream, jcf, na *** 750,759 **** jfloat fnum = JPOOL_FLOAT (jcf, current_field_value); fputs ("const jfloat ", out); print_field_name (out, jcf, name_index, 0); ! if (! java_float_finite (fnum)) ! fputs (";\n", out); ! else ! fprintf (out, " = %.10g;\n", fnum); } break; case CONSTANT_Double: --- 773,779 ---- jfloat fnum = JPOOL_FLOAT (jcf, current_field_value); fputs ("const jfloat ", out); print_field_name (out, jcf, name_index, 0); ! jni_print_float (out, fnum); } break; case CONSTANT_Double: *************** DEFUN(print_field_info, (stream, jcf, na *** 761,770 **** jdouble dnum = JPOOL_DOUBLE (jcf, current_field_value); fputs ("const jdouble ", out); print_field_name (out, jcf, name_index, 0); ! if (! java_double_finite (dnum)) ! fputs (";\n", out); ! else ! fprintf (out, " = %.17g;\n", dnum); } break; default: --- 781,787 ---- jdouble dnum = JPOOL_DOUBLE (jcf, current_field_value); fputs ("const jdouble ", out); print_field_name (out, jcf, name_index, 0); ! jni_print_double (out, dnum); } break; default: *************** DEFUN(print_method_info, (stream, jcf, n *** 831,843 **** { struct method_name *nn; ! nn = (struct method_name *) xmalloc (sizeof (struct method_name)); ! nn->name = (char *) xmalloc (length); memcpy (nn->name, str, length); nn->length = length; nn->next = method_name_list; nn->sig_length = JPOOL_UTF_LENGTH (jcf, sig_index); ! nn->signature = (char *) xmalloc (nn->sig_length); memcpy (nn->signature, JPOOL_UTF_DATA (jcf, sig_index), nn->sig_length); method_name_list = nn; --- 848,860 ---- { struct method_name *nn; ! nn = xmalloc (sizeof (struct method_name)); ! nn->name = xmalloc (length); memcpy (nn->name, str, length); nn->length = length; nn->next = method_name_list; nn->sig_length = JPOOL_UTF_LENGTH (jcf, sig_index); ! nn->signature = xmalloc (nn->sig_length); memcpy (nn->signature, JPOOL_UTF_DATA (jcf, sig_index), nn->sig_length); method_name_list = nn; *************** decompile_method (out, jcf, code_len) *** 1091,1096 **** --- 1108,1224 ---- } } + /* Like strcmp, but invert the return result for the hash table. This + should probably be in hashtab.c to complement the existing string + hash function. */ + static int + gcjh_streq (p1, p2) + const void *p1, *p2; + { + return ! strcmp ((char *) p1, (char *) p2); + } + + /* Return 1 if the initial part of CLNAME names a subclass of throwable, + or 0 if not. CLNAME may be extracted from a signature, and can be + terminated with either `;' or NULL. */ + static int + throwable_p (clname) + const unsigned char *clname; + { + int length; + unsigned char *current; + int i; + int result = 0; + + /* We keep two hash tables of class names. In one we list all the + classes which are subclasses of Throwable. In the other we will + all other classes. We keep two tables to make the code a bit + simpler; we don't have to have a structure mapping class name to + a `throwable?' bit. */ + static htab_t throw_hash; + static htab_t non_throw_hash; + static int init_done = 0; + + if (! init_done) + { + PTR *slot; + const unsigned char *str; + + /* Self-initializing. The cost of this really doesn't matter. + We also don't care about freeing these, either. */ + throw_hash = htab_create (10, htab_hash_string, gcjh_streq, + (htab_del) free); + non_throw_hash = htab_create (10, htab_hash_string, gcjh_streq, + (htab_del) free); + + /* Make sure the root classes show up in the tables. */ + str = xstrdup ("java.lang.Throwable"); + slot = htab_find_slot (throw_hash, str, INSERT); + *slot = (PTR) str; + + str = xstrdup ("java.lang.Object"); + slot = htab_find_slot (non_throw_hash, str, INSERT); + *slot = (PTR) str; + + init_done = 1; + } + + for (length = 0; clname[length] != ';' && clname[length] != '\0'; ++length) + ; + current = ALLOC (length + 1); + for (i = 0; i < length; ++i) + current[i] = clname[i] == '/' ? '.' : clname[i]; + current[length] = '\0'; + + /* We don't compute the hash slot here because the table might be + modified by the recursion. In that case the slot could be + invalidated. */ + if (htab_find (throw_hash, current)) + result = 1; + else if (htab_find (non_throw_hash, current)) + result = 0; + else + { + JCF jcf; + PTR *slot; + unsigned char *super, *tmp; + int super_length = -1; + const char *classfile_name = find_class (current, strlen (current), + &jcf, 0); + + if (! classfile_name) + { + fprintf (stderr, "couldn't find class %s\n", current); + found_error = 1; + return 0; + } + if (jcf_parse_preamble (&jcf) != 0 + || jcf_parse_constant_pool (&jcf) != 0 + || verify_constant_pool (&jcf) > 0) + { + fprintf (stderr, "parse error while reading %s\n", classfile_name); + found_error = 1; + return 0; + } + jcf_parse_class (&jcf); + + tmp = (unsigned char *) super_class_name (&jcf, &super_length); + super = ALLOC (super_length + 1); + memcpy (super, tmp, super_length); + super[super_length] = '\0'; + + result = throwable_p (super); + slot = htab_find_slot (result ? throw_hash : non_throw_hash, + current, INSERT); + *slot = current; + current = NULL; + + JCF_FINISH (&jcf); + } + + return result; + } + /* Print one piece of a signature. Returns pointer to next parseable character on success, NULL on error. */ static const unsigned char * *************** decode_signature_piece (stream, signatur *** 1175,1181 **** /* If the previous iterations left us with something to print, print it. For JNI, we always print `jobjectArray' in the nested cases. */ ! if (flag_jni && ctype == NULL) { ctype = "jobjectArray"; *need_space = 1; --- 1303,1309 ---- /* If the previous iterations left us with something to print, print it. For JNI, we always print `jobjectArray' in the nested cases. */ ! if (flag_jni && (ctype == NULL || array_depth > 0)) { ctype = "jobjectArray"; *need_space = 1; *************** decode_signature_piece (stream, signatur *** 1204,1227 **** case 'L': if (flag_jni) { ! /* We know about certain types and special-case their ! names. ! FIXME: something like java.lang.Exception should be ! printed as `jthrowable', because it is a subclass. This ! means that gcjh must read the entire hierarchy and ! comprehend it. */ if (! strncmp (signature, "Ljava/lang/String;", sizeof ("Ljava/lang/String;") -1)) ctype = "jstring"; else if (! strncmp (signature, "Ljava/lang/Class;", sizeof ("Ljava/lang/Class;") - 1)) ctype = "jclass"; ! else if (! strncmp (signature, "Ljava/lang/Throwable;", ! sizeof ("Ljava/lang/Throwable;") - 1)) ctype = "jthrowable"; - else if (! strncmp (signature, "Ljava/lang/ref/WeakReference;", - sizeof ("Ljava/lang/ref/WeakReference;") - 1)) - ctype = "jweak"; else ctype = "jobject"; --- 1332,1347 ---- case 'L': if (flag_jni) { ! /* We know about certain types and special-case their names. */ if (! strncmp (signature, "Ljava/lang/String;", sizeof ("Ljava/lang/String;") -1)) ctype = "jstring"; else if (! strncmp (signature, "Ljava/lang/Class;", sizeof ("Ljava/lang/Class;") - 1)) ctype = "jclass"; ! /* Skip leading 'L' for throwable_p call. */ ! else if (throwable_p (signature + 1)) ctype = "jthrowable"; else ctype = "jobject"; *************** DEFUN(print_c_decl, (stream, jcf, name_i *** 1314,1319 **** --- 1434,1450 ---- } } + /* Force the alignment of the first data member. This is + because the "new" C++ ABI changed the alignemnt of non-POD + classes. gcj, however, still uses the "old" alignment. */ + if (is_first_data_member && ! (flags & ACC_STATIC) && ! is_method) + { + is_first_data_member = 0; + print_cxx_classname (out, " __attribute__((aligned(__alignof__( ", + jcf, jcf->super_class); + fputs (" )))) ", stream); + } + /* Now print the name of the thing. */ if (need_space) fputs (" ", stream); *************** DEFUN(print_stub_or_jni, (stream, jcf, n *** 1459,1465 **** return; if (flag_jni && ! stubs) ! fputs ("extern ", stream); /* If printing a method, skip to the return signature and print that first. However, there is no return value if this is a --- 1590,1596 ---- return; if (flag_jni && ! stubs) ! fputs ("extern JNIEXPORT ", stream); /* If printing a method, skip to the return signature and print that first. However, there is no return value if this is a *************** DEFUN(print_stub_or_jni, (stream, jcf, n *** 1491,1496 **** --- 1622,1630 ---- /* When printing a JNI header we need to respect the space. In other cases we're just going to insert a newline anyway. */ fputs (need_space && ! stubs ? " " : "\n", stream); + + if (flag_jni && ! stubs) + fputs ("JNICALL ", stream); /* Now print the name of the thing. */ print_name_for_stub_or_jni (stream, jcf, name_index, *************** print_include (out, utf8, len) *** 1624,1630 **** return; } ! incl = (struct include *) xmalloc (sizeof (struct include)); incl->name = xmalloc (len + 1); strncpy (incl->name, utf8, len); incl->name[len] = '\0'; --- 1758,1764 ---- return; } ! incl = xmalloc (sizeof (struct include)); incl->name = xmalloc (len + 1); strncpy (incl->name, utf8, len); incl->name[len] = '\0'; *************** add_namelet (name, name_limit, parent) *** 1711,1717 **** if (n == NULL) { ! n = (struct namelet *) xmalloc (sizeof (struct namelet)); n->name = xmalloc (p - name + 1); strncpy (n->name, name, p - name); n->name[p - name] = '\0'; --- 1845,1851 ---- if (n == NULL) { ! n = xmalloc (sizeof (struct namelet)); n->name = xmalloc (p - name + 1); strncpy (n->name, name, p - name); n->name[p - name] = '\0'; *************** DEFUN(process_file, (jcf, out), *** 2041,2046 **** --- 2175,2182 ---- } /* Now go back for second pass over methods and fields. */ + is_first_data_member = 1; + JCF_SEEK (jcf, method_start); method_pass = 1; jcf_parse_methods (jcf); *************** help () *** 2183,2189 **** /* We omit -MG until it is implemented. */ printf ("\n"); printf ("For bug reporting instructions, please see:\n"); ! printf ("%s.\n", GCCBUGURL); exit (0); } --- 2319,2325 ---- /* We omit -MG until it is implemented. */ printf ("\n"); printf ("For bug reporting instructions, please see:\n"); ! printf ("%s.\n", bug_report_url); exit (0); } *************** DEFUN(main, (argc, argv), *** 2267,2291 **** case OPT_PREPEND: if (prepend_count == 0) ! prepend_specs = (char**) ALLOC (argc * sizeof (char*)); prepend_specs[prepend_count++] = optarg; break; case OPT_FRIEND: if (friend_count == 0) ! friend_specs = (char**) ALLOC (argc * sizeof (char*)); friend_specs[friend_count++] = optarg; break; case OPT_ADD: if (add_count == 0) ! add_specs = (char**) ALLOC (argc * sizeof (char*)); add_specs[add_count++] = optarg; break; case OPT_APPEND: if (append_count == 0) ! append_specs = (char**) ALLOC (argc * sizeof (char*)); append_specs[append_count++] = optarg; break; --- 2403,2427 ---- case OPT_PREPEND: if (prepend_count == 0) ! prepend_specs = ALLOC (argc * sizeof (char*)); prepend_specs[prepend_count++] = optarg; break; case OPT_FRIEND: if (friend_count == 0) ! friend_specs = ALLOC (argc * sizeof (char*)); friend_specs[friend_count++] = optarg; break; case OPT_ADD: if (add_count == 0) ! add_specs = ALLOC (argc * sizeof (char*)); add_specs[add_count++] = optarg; break; case OPT_APPEND: if (append_count == 0) ! append_specs = ALLOC (argc * sizeof (char*)); append_specs[append_count++] = optarg; break; *************** DEFUN(main, (argc, argv), *** 2372,2378 **** { int dir_len = strlen (output_directory); int i, classname_length = strlen (classname); ! current_output_file = (char*) ALLOC (dir_len + classname_length + 5); strcpy (current_output_file, output_directory); if (dir_len > 0 && output_directory[dir_len-1] != '/') current_output_file[dir_len++] = '/'; --- 2508,2514 ---- { int dir_len = strlen (output_directory); int i, classname_length = strlen (classname); ! current_output_file = ALLOC (dir_len + classname_length + 5); strcpy (current_output_file, output_directory); if (dir_len > 0 && output_directory[dir_len-1] != '/') current_output_file[dir_len++] = '/'; diff -Nrc3pad gcc-3.2.3/gcc/java/javaop.h gcc-3.3/gcc/java/javaop.h *** gcc-3.2.3/gcc/java/javaop.h 2001-05-26 01:31:47.000000000 +0000 --- gcc-3.3/gcc/java/javaop.h 2003-03-28 22:18:48.000000000 +0000 *************** typedef int32 jint; *** 57,77 **** typedef int64 jlong; typedef void* jref; ! /* A 32-bit IEEE single-precision float. */ ! #ifndef jfloat ! #define jfloat float ! #endif ! ! /* A 32-bit IEEE double-precision float. */ ! #ifndef jdouble ! #define jdouble double ! #endif ! union Word { ! jint i; ! jfloat f; ! void *p; ! }; /* A jword is an unsigned integral type big enough for a 32-bit jint or jfloat *or* a pointer. It is the type appropriate for stack --- 57,82 ---- typedef int64 jlong; typedef void* jref; ! /* A 32-bit big-endian IEEE single-precision float. */ ! typedef struct _jfloat { ! unsigned int negative : 1; ! unsigned int exponent : 8; ! unsigned int mantissa : 23; ! } jfloat; ! #define JFLOAT_FINITE(f) ((f).exponent != 0xFF) ! #define JFLOAT_QNAN_MASK 0x400000 ! #define JFLOAT_EXP_BIAS 0x7f ! /* A 32-bit big-endian IEEE double-precision float. */ ! typedef struct _jdouble { ! unsigned int negative : 1; ! unsigned int exponent : 11; ! unsigned int mantissa0: 20; ! unsigned int mantissa1: 32; ! } jdouble; ! #define JDOUBLE_FINITE(f) ((f).exponent != 0x7FF) ! #define JDOUBLE_QNAN_MASK 0x80000 /* apply to mantissa0 */ ! #define JDOUBLE_EXP_BIAS 0x3ff /* A jword is an unsigned integral type big enough for a 32-bit jint or jfloat *or* a pointer. It is the type appropriate for stack *************** union Word { *** 104,112 **** static inline jfloat WORD_TO_FLOAT(jword w) ! { union Word wu; ! wu.i = w; ! return wu.f; } /* Sign extend w. If the host on which this cross-compiler runs uses --- 109,122 ---- static inline jfloat WORD_TO_FLOAT(jword w) ! { ! jfloat f; ! ! f.negative = (w & 0x80000000) >> 31; ! f.exponent = (w & 0x7f800000) >> 23; ! f.mantissa = (w & 0x007fffff); ! ! return f; } /* Sign extend w. If the host on which this cross-compiler runs uses *************** WORDS_TO_LONG(jword hi, jword lo) *** 128,148 **** return ((jlong) hi << 32) | ((jlong)lo & (((jlong)1 << 32) -1)); } - union DWord { - jdouble d; - jlong l; - jword w[2]; - }; - static inline jdouble WORDS_TO_DOUBLE(jword hi, jword lo) ! { union DWord wu; ! #if (1 == HOST_FLOAT_WORDS_BIG_ENDIAN) ! wu.l = WORDS_TO_LONG(lo, hi); ! #else ! wu.l = WORDS_TO_LONG(hi, lo); ! #endif ! return wu.d; } /* If PREFIX_CHAR is the first character of the Utf8 encoding of a character, --- 138,154 ---- return ((jlong) hi << 32) | ((jlong)lo & (((jlong)1 << 32) -1)); } static inline jdouble WORDS_TO_DOUBLE(jword hi, jword lo) ! { ! jdouble d; ! ! d.negative = (hi & 0x80000000) >> 31; ! d.exponent = (hi & 0x7ff00000) >> 20; ! d.mantissa0 = (hi & 0x000fffff); ! d.mantissa1 = lo; ! ! return d; } /* If PREFIX_CHAR is the first character of the Utf8 encoding of a character, diff -Nrc3pad gcc-3.2.3/gcc/java/java-tree.h gcc-3.3/gcc/java/java-tree.h *** gcc-3.2.3/gcc/java/java-tree.h 2002-06-04 16:45:52.000000000 +0000 --- gcc-3.3/gcc/java/java-tree.h 2002-11-18 18:13:35.000000000 +0000 *************** The Free Software Foundation is independ *** 26,32 **** /* Hacked by Per Bothner February 1996. */ ! #include "hash.h" /* Java language-specific tree codes. */ #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM, --- 26,32 ---- /* Hacked by Per Bothner February 1996. */ ! #include "hashtab.h" /* Java language-specific tree codes. */ #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM, *************** struct JCF; *** 43,48 **** --- 43,49 ---- 0: IS_A_SINGLE_IMPORT_CLASSFILE_NAME_P (in IDENTIFIER_NODE) RESOLVE_EXPRESSION_NAME_P (in EXPR_WITH_FILE_LOCATION) FOR_LOOP_P (in LOOP_EXPR) + SUPPRESS_UNREACHABLE_ERROR (for other _EXPR nodes) ANONYMOUS_CLASS_P (in RECORD_TYPE) ARG_FINAL_P (in TREE_LIST) 1: CLASS_HAS_SUPER_FLAG (in TREE_VEC). *************** struct JCF; *** 91,96 **** --- 92,98 ---- CLASS_PUBLIC (in TYPE_DECL). 2: METHOD_STATIC (in FUNCTION_DECL). (But note that FIELD_STATIC uses TREE_STATIC!) + FIELD_SYNTHETIC (in FIELD_DECL) CLASS_COMPLETE_P (in TYPE_DECL) 3: METHOD_FINAL (in FUNCTION_DECL) FIELD_FINAL (in FIELD_DECL) *************** extern int flag_emit_class_files; *** 158,177 **** extern int flag_filelist_file; ! /* When non zero, assume all native functions are implemented with JNI, not CNI. */ extern int flag_jni; ! /* When non zero, report the now deprecated empty statements. */ extern int flag_extraneous_semicolon; ! /* When non zero, always check for a non gcj generated classes archive. */ extern int flag_force_classes_archive_check; ! /* When non zero, we emit xref strings. Values of the flag for xref backends are defined in xref.h. */ extern int flag_emit_xref; --- 160,183 ---- extern int flag_filelist_file; ! /* When nonzero, permit the use of the assert keyword. */ ! ! extern int flag_assert; ! ! /* When nonzero, assume all native functions are implemented with JNI, not CNI. */ extern int flag_jni; ! /* When nonzero, report the now deprecated empty statements. */ extern int flag_extraneous_semicolon; ! /* When nonzero, always check for a non gcj generated classes archive. */ extern int flag_force_classes_archive_check; ! /* When nonzero, we emit xref strings. Values of the flag for xref backends are defined in xref.h. */ extern int flag_emit_xref; *************** extern int flag_redundant; *** 188,215 **** extern int flag_not_overriding; extern int flag_static_local_jdk1_1; ! /* When non zero, warn when source file is newer than matching class file. */ extern int flag_newer; ! /* When non zero, call a library routine to do integer divisions. */ extern int flag_use_divide_subroutine; ! /* When non zero, generate code for the Boehm GC. */ extern int flag_use_boehm_gc; ! /* When non zero, assume the runtime uses a hash table to map an object to its synchronization structure. */ extern int flag_hash_synchronization; ! /* When non zero, generate checks for references to NULL. */ extern int flag_check_references; /* Used through STATIC_CLASS_INIT_OPT_P to check whether static initialization optimization should be performed. */ extern int flag_optimize_sci; ! /* When non zero, use offset tables for virtual method calls in order to improve binary compatibility. */ extern int flag_indirect_dispatch; --- 194,221 ---- extern int flag_not_overriding; extern int flag_static_local_jdk1_1; ! /* When nonzero, warn when source file is newer than matching class file. */ extern int flag_newer; ! /* When nonzero, call a library routine to do integer divisions. */ extern int flag_use_divide_subroutine; ! /* When nonzero, generate code for the Boehm GC. */ extern int flag_use_boehm_gc; ! /* When nonzero, assume the runtime uses a hash table to map an object to its synchronization structure. */ extern int flag_hash_synchronization; ! /* When nonzero, generate checks for references to NULL. */ extern int flag_check_references; /* Used through STATIC_CLASS_INIT_OPT_P to check whether static initialization optimization should be performed. */ extern int flag_optimize_sci; ! /* When nonzero, use offset tables for virtual method calls in order to improve binary compatibility. */ extern int flag_indirect_dispatch; *************** typedef struct CPool constant_pool; *** 252,257 **** --- 258,266 ---- #define COMPONENT_REF_SIGNATURE(CPOOL, IDX) \ NAME_AND_TYPE_SIGNATURE (CPOOL, COMPONENT_REF_NAME_AND_TYPE(CPOOL, IDX)) + extern GTY(()) tree java_lang_cloneable_identifier_node; + extern GTY(()) tree java_io_serializable_identifier_node; + enum java_tree_index { JTI_PROMOTED_BYTE_TYPE_NODE, *************** enum java_tree_index *** 269,274 **** --- 278,286 ---- JTI_UNSIGNED_INT_TYPE_NODE, JTI_UNSIGNED_LONG_TYPE_NODE, + JTI_DECIMAL_INT_MAX_NODE, + JTI_DECIMAL_LONG_MAX_NODE, + JTI_BOOLEAN_TYPE_NODE, JTI_OBJECT_TYPE_NODE, *************** enum java_tree_index *** 403,409 **** JTI_MAX }; ! extern tree java_global_trees[JTI_MAX]; /* "Promoted types" that are used for primitive types smaller than int. We could use int_type_node, but then we would lose --- 415,421 ---- JTI_MAX }; ! extern GTY(()) tree java_global_trees[JTI_MAX]; /* "Promoted types" that are used for primitive types smaller than int. We could use int_type_node, but then we would lose *************** extern tree java_global_trees[JTI_MAX]; *** 435,440 **** --- 447,457 ---- #define unsigned_long_type_node \ java_global_trees[JTI_UNSIGNED_LONG_TYPE_NODE] + #define decimal_int_max \ + java_global_trees[JTI_DECIMAL_INT_MAX_NODE] + #define decimal_long_max \ + java_global_trees[JTI_DECIMAL_LONG_MAX_NODE] + #define boolean_type_node \ java_global_trees[JTI_BOOLEAN_TYPE_NODE] *************** extern struct CPool *outgoing_cpool; *** 678,693 **** extern const char *cyclic_inheritance_report; ! struct lang_identifier { struct tree_identifier ignore; ! tree global_value, local_value; /* If non-NULL: An ADDR_REF to a VAR_DECL that contains * the Utf8Const representation of the identifier. */ tree utf8_ref; }; /* Macros for access to language-specific slots in an identifier. */ /* Unless specified, each of these slots contains a DECL node or null. */ --- 695,722 ---- extern const char *cyclic_inheritance_report; ! struct lang_identifier GTY(()) { struct tree_identifier ignore; ! tree global_value; ! tree local_value; /* If non-NULL: An ADDR_REF to a VAR_DECL that contains * the Utf8Const representation of the identifier. */ tree utf8_ref; }; + /* The resulting tree type. */ + union lang_tree_node + GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"), + chain_next ("(union lang_tree_node *)TREE_CHAIN (&%h.generic)"))) + { + union tree_node GTY ((tag ("0"), + desc ("tree_node_structure (&%h)"))) + generic; + struct lang_identifier GTY ((tag ("1"))) identifier; + }; + /* Macros for access to language-specific slots in an identifier. */ /* Unless specified, each of these slots contains a DECL node or null. */ *************** struct lang_identifier *** 727,767 **** /* For a FUNCTION_DECL, if we are compiling a .class file, then this is the position in the .class file of the method code. Specifically, this is the code itself, not the code attribute. */ ! #define DECL_CODE_OFFSET(DECL) (DECL_LANG_SPECIFIC(DECL)->code_offset) /* Similarly, the length of the bytecode. */ ! #define DECL_CODE_LENGTH(DECL) (DECL_LANG_SPECIFIC(DECL)->code_length) /* Similarly, the position of the LineNumberTable attribute. */ #define DECL_LINENUMBERS_OFFSET(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->linenumbers_offset) /* Similarly, the position of the LocalVariableTable attribute (following the standard attribute header). */ #define DECL_LOCALVARIABLES_OFFSET(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->localvariables_offset) ! #define DECL_MAX_LOCALS(DECL) (DECL_LANG_SPECIFIC(DECL)->max_locals) ! #define DECL_MAX_STACK(DECL) (DECL_LANG_SPECIFIC(DECL)->max_stack) /* Number of local variable slots needed for the arguments of this function. */ ! #define DECL_ARG_SLOT_COUNT(DECL) (DECL_LANG_SPECIFIC(DECL)->arg_slot_count) /* Information on declaration location */ ! #define DECL_FUNCTION_WFL(DECL) (DECL_LANG_SPECIFIC(DECL)->wfl) /* List of checked thrown exceptions, as specified with the `throws' keyword */ ! #define DECL_FUNCTION_THROWS(DECL) (DECL_LANG_SPECIFIC(DECL)->throws_list) /* List of other constructors of the same class that this constructor calls */ #define DECL_CONSTRUCTOR_CALLS(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->called_constructor) /* When the function is an access function, the DECL it was trying to access */ #define DECL_FUNCTION_ACCESS_DECL(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->called_constructor) /* The identifier of the access method used to invoke this method from an inner class. */ #define DECL_FUNCTION_INNER_ACCESS(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->inner_access) /* Pointer to the function's current's COMPOUND_EXPR tree (while completing its body) or the function's block */ ! #define DECL_FUNCTION_BODY(DECL) (DECL_LANG_SPECIFIC(DECL)->function_decl_body) /* How specific the function is (for method selection - Java source code front-end */ #define DECL_SPECIFIC_COUNT(DECL) DECL_ARG_SLOT_COUNT(DECL) --- 756,798 ---- /* For a FUNCTION_DECL, if we are compiling a .class file, then this is the position in the .class file of the method code. Specifically, this is the code itself, not the code attribute. */ ! #define DECL_CODE_OFFSET(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.code_offset) /* Similarly, the length of the bytecode. */ ! #define DECL_CODE_LENGTH(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.code_length) /* Similarly, the position of the LineNumberTable attribute. */ #define DECL_LINENUMBERS_OFFSET(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.linenumbers_offset) /* Similarly, the position of the LocalVariableTable attribute (following the standard attribute header). */ #define DECL_LOCALVARIABLES_OFFSET(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.localvariables_offset) ! #define DECL_MAX_LOCALS(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.max_locals) ! #define DECL_MAX_STACK(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.max_stack) /* Number of local variable slots needed for the arguments of this function. */ ! #define DECL_ARG_SLOT_COUNT(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.arg_slot_count) /* Information on declaration location */ ! #define DECL_FUNCTION_WFL(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.wfl) /* List of checked thrown exceptions, as specified with the `throws' keyword */ ! #define DECL_FUNCTION_THROWS(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.throws_list) /* List of other constructors of the same class that this constructor calls */ #define DECL_CONSTRUCTOR_CALLS(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.called_constructor) /* When the function is an access function, the DECL it was trying to access */ #define DECL_FUNCTION_ACCESS_DECL(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.called_constructor) /* The identifier of the access method used to invoke this method from an inner class. */ #define DECL_FUNCTION_INNER_ACCESS(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.inner_access) /* Pointer to the function's current's COMPOUND_EXPR tree (while completing its body) or the function's block */ ! #define DECL_FUNCTION_BODY(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.function_decl_body) /* How specific the function is (for method selection - Java source code front-end */ #define DECL_SPECIFIC_COUNT(DECL) DECL_ARG_SLOT_COUNT(DECL) *************** struct lang_identifier *** 770,800 **** boolean decls. The variables are intended to be TRUE when the class has been initialized in this function, and FALSE otherwise. */ #define DECL_FUNCTION_INIT_TEST_TABLE(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->init_test_table) /* If LOCAL_CLASS_INITIALIZATION_FLAG_P(decl), give class it initializes. */ #define DECL_FUNCTION_INIT_TEST_CLASS(DECL) \ ! (((struct lang_decl_var*)DECL_LANG_SPECIFIC(DECL))->slot_chain) /* For each static function decl, itc contains a hash table whose entries are keyed on class named that are definitively initialized in DECL. */ #define DECL_FUNCTION_INITIALIZED_CLASS_TABLE(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->ict) /* A list of all the static method calls in the method DECL (if optimizing). Actually each TREE_VALUE points to a COMPONT_EXPR that wraps the invoation so we can later patch it. */ #define DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->smic) /* The Number of Artificial Parameters (NAP) DECL contains. this$ is excluded, because sometimes created as a parameter before the function decl exists. */ ! #define DECL_FUNCTION_NAP(DECL) (DECL_LANG_SPECIFIC(DECL)->nap) /* True if DECL is a synthetic ctor. */ #define DECL_FUNCTION_SYNTHETIC_CTOR(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->synthetic_ctor) ! #define DECL_FIXED_CONSTRUCTOR_P(DECL) (DECL_LANG_SPECIFIC(DECL)->fixed_ctor) /* A constructor that calls this. */ ! #define DECL_INIT_CALLS_THIS(DECL) (DECL_LANG_SPECIFIC(DECL)->init_calls_this) /* True when DECL aliases an outer context local variable. */ #define FIELD_LOCAL_ALIAS(DECL) DECL_LANG_FLAG_6 (DECL) --- 801,836 ---- boolean decls. The variables are intended to be TRUE when the class has been initialized in this function, and FALSE otherwise. */ #define DECL_FUNCTION_INIT_TEST_TABLE(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.init_test_table) /* If LOCAL_CLASS_INITIALIZATION_FLAG_P(decl), give class it initializes. */ #define DECL_FUNCTION_INIT_TEST_CLASS(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.v.slot_chain) /* For each static function decl, itc contains a hash table whose entries are keyed on class named that are definitively initialized in DECL. */ #define DECL_FUNCTION_INITIALIZED_CLASS_TABLE(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.ict) /* A list of all the static method calls in the method DECL (if optimizing). Actually each TREE_VALUE points to a COMPONT_EXPR that wraps the invoation so we can later patch it. */ #define DECL_FUNCTION_STATIC_METHOD_INVOCATION_COMPOUND(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.smic) /* The Number of Artificial Parameters (NAP) DECL contains. this$ is excluded, because sometimes created as a parameter before the function decl exists. */ ! #define DECL_FUNCTION_NAP(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.nap) /* True if DECL is a synthetic ctor. */ #define DECL_FUNCTION_SYNTHETIC_CTOR(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.synthetic_ctor) ! #define DECL_FIXED_CONSTRUCTOR_P(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.fixed_ctor) /* A constructor that calls this. */ ! #define DECL_INIT_CALLS_THIS(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.f.init_calls_this) ! ! /* True when DECL (a field) is Synthetic. */ ! #define FIELD_SYNTHETIC(DECL) DECL_LANG_FLAG_2 (DECL) /* True when DECL aliases an outer context local variable. */ #define FIELD_LOCAL_ALIAS(DECL) DECL_LANG_FLAG_6 (DECL) *************** struct lang_identifier *** 857,887 **** /* The slot number for this local variable. */ #define DECL_LOCAL_SLOT_NUMBER(NODE) \ ! (((struct lang_decl_var*)DECL_LANG_SPECIFIC(NODE))->slot_number) /* The start (bytecode) pc for the valid range of this local variable. */ #define DECL_LOCAL_START_PC(NODE) \ ! (((struct lang_decl_var*)DECL_LANG_SPECIFIC(NODE))->start_pc) /* The end (bytecode) pc for the valid range of this local variable. */ #define DECL_LOCAL_END_PC(NODE) \ ! (((struct lang_decl_var*)DECL_LANG_SPECIFIC(NODE))->end_pc) /* For a VAR_DECLor PARM_DECL, used to chain decls with the same slot_number in decl_map. */ #define DECL_LOCAL_SLOT_CHAIN(NODE) \ ! (((struct lang_decl_var*)DECL_LANG_SPECIFIC(NODE))->slot_chain) /* For a FIELD_DECL, holds the name of the access method. Used to read/write the content of the field from an inner class. */ #define FIELD_INNER_ACCESS(DECL) \ ! (((struct lang_decl_var*)DECL_LANG_SPECIFIC(DECL))->am) /* Safely tests whether FIELD_INNER_ACCESS exists or not. */ #define FIELD_INNER_ACCESS_P(DECL) \ DECL_LANG_SPECIFIC (DECL) && FIELD_INNER_ACCESS (DECL) /* True if a final variable was initialized upon its declaration, or (if a field) in an initializer. Set after definite assignment. */ #define DECL_FIELD_FINAL_IUD(NODE) \ ! (((struct lang_decl_var*)DECL_LANG_SPECIFIC(NODE))->final_iud) /* The original WFL of a final variable. */ #define DECL_FIELD_FINAL_WFL(NODE) \ ! (((struct lang_decl_var*)DECL_LANG_SPECIFIC(NODE))->wfl) /* True if NODE is a local variable final. */ #define LOCAL_FINAL_P(NODE) (DECL_LANG_SPECIFIC (NODE) && DECL_FINAL (NODE)) /* True if NODE is a final field. */ --- 893,929 ---- /* The slot number for this local variable. */ #define DECL_LOCAL_SLOT_NUMBER(NODE) \ ! (DECL_LANG_SPECIFIC(NODE)->u.v.slot_number) /* The start (bytecode) pc for the valid range of this local variable. */ #define DECL_LOCAL_START_PC(NODE) \ ! (DECL_LANG_SPECIFIC(NODE)->u.v.start_pc) /* The end (bytecode) pc for the valid range of this local variable. */ #define DECL_LOCAL_END_PC(NODE) \ ! (DECL_LANG_SPECIFIC(NODE)->u.v.end_pc) /* For a VAR_DECLor PARM_DECL, used to chain decls with the same slot_number in decl_map. */ #define DECL_LOCAL_SLOT_CHAIN(NODE) \ ! (DECL_LANG_SPECIFIC(NODE)->u.v.slot_chain) /* For a FIELD_DECL, holds the name of the access method. Used to read/write the content of the field from an inner class. */ #define FIELD_INNER_ACCESS(DECL) \ ! (DECL_LANG_SPECIFIC(DECL)->u.v.am) /* Safely tests whether FIELD_INNER_ACCESS exists or not. */ #define FIELD_INNER_ACCESS_P(DECL) \ DECL_LANG_SPECIFIC (DECL) && FIELD_INNER_ACCESS (DECL) /* True if a final variable was initialized upon its declaration, or (if a field) in an initializer. Set after definite assignment. */ #define DECL_FIELD_FINAL_IUD(NODE) \ ! (DECL_LANG_SPECIFIC(NODE)->u.v.final_iud) /* The original WFL of a final variable. */ #define DECL_FIELD_FINAL_WFL(NODE) \ ! (DECL_LANG_SPECIFIC(NODE)->u.v.wfl) ! /* In a FUNCTION_DECL for which DECL_BUILT_IN does not hold, this is ! the approximate number of statements in this function. There is ! no need for this number to be exact; it is only used in various ! heuristics regarding optimization. */ ! #define DECL_NUM_STMTS(NODE) \ ! (FUNCTION_DECL_CHECK (NODE)->decl.u1.i) /* True if NODE is a local variable final. */ #define LOCAL_FINAL_P(NODE) (DECL_LANG_SPECIFIC (NODE) && DECL_FINAL (NODE)) /* True if NODE is a final field. */ *************** struct lang_identifier *** 892,898 **** /* True if NODE is a class initialization flag. This macro accesses the flag to read or set it. */ #define LOCAL_CLASS_INITIALIZATION_FLAG(NODE) \ ! (((struct lang_decl_var*)DECL_LANG_SPECIFIC(NODE))->cif) /* True if NODE is a class initialization flag. */ #define LOCAL_CLASS_INITIALIZATION_FLAG_P(NODE) \ (DECL_LANG_SPECIFIC (NODE) && LOCAL_CLASS_INITIALIZATION_FLAG(NODE)) --- 934,940 ---- /* True if NODE is a class initialization flag. This macro accesses the flag to read or set it. */ #define LOCAL_CLASS_INITIALIZATION_FLAG(NODE) \ ! (DECL_LANG_SPECIFIC(NODE)->u.v.cif) /* True if NODE is a class initialization flag. */ #define LOCAL_CLASS_INITIALIZATION_FLAG_P(NODE) \ (DECL_LANG_SPECIFIC (NODE) && LOCAL_CLASS_INITIALIZATION_FLAG(NODE)) *************** struct lang_identifier *** 902,908 **** { \ DECL_LANG_SPECIFIC ((T)) \ = ((struct lang_decl *) \ ! ggc_alloc_cleared (sizeof (struct lang_decl_var))); \ } /* A ConstantExpression, after folding and name resolution. */ --- 944,951 ---- { \ DECL_LANG_SPECIFIC ((T)) \ = ((struct lang_decl *) \ ! ggc_alloc_cleared (sizeof (struct lang_decl))); \ ! DECL_LANG_SPECIFIC (T)->desc = LANG_DECL_VAR; \ } /* A ConstantExpression, after folding and name resolution. */ *************** struct lang_identifier *** 919,925 **** #define DECL_BIT_INDEX(DECL) (DECL_CHECK (DECL)->decl.pointer_alias_set) /* DECL_LANG_SPECIFIC for FUNCTION_DECLs. */ ! struct lang_decl { /* tree chain; not yet used. */ long code_offset; --- 962,968 ---- #define DECL_BIT_INDEX(DECL) (DECL_CHECK (DECL)->decl.pointer_alias_set) /* DECL_LANG_SPECIFIC for FUNCTION_DECLs. */ ! struct lang_decl_func GTY(()) { /* tree chain; not yet used. */ long code_offset; *************** struct lang_decl *** 927,941 **** long linenumbers_offset; long localvariables_offset; int arg_slots; ! int max_locals, max_stack, arg_slot_count; tree wfl; /* Information on the original location */ tree throws_list; /* Exception specified by `throws' */ tree function_decl_body; /* Hold all function's statements */ tree called_constructor; /* When decl is a constructor, the list of other constructor it calls */ ! struct hash_table init_test_table; ! /* Class initialization test variables */ ! struct hash_table ict; /* Initialized (static) Class Table */ tree smic; /* Static method invocation compound */ tree inner_access; /* The identifier of the access method used for invocation from inner classes */ --- 970,990 ---- long linenumbers_offset; long localvariables_offset; int arg_slots; ! int max_locals; ! int max_stack; ! int arg_slot_count; tree wfl; /* Information on the original location */ tree throws_list; /* Exception specified by `throws' */ tree function_decl_body; /* Hold all function's statements */ tree called_constructor; /* When decl is a constructor, the list of other constructor it calls */ ! ! /* Class initialization test variables */ ! htab_t GTY ((param_is (struct treetreehash_entry))) init_test_table; ! ! /* Initialized (static) Class Table */ ! htab_t GTY ((param_is (union tree_node))) ict; ! tree smic; /* Static method invocation compound */ tree inner_access; /* The identifier of the access method used for invocation from inner classes */ *************** struct lang_decl *** 948,963 **** unsigned int strictfp : 1; }; ! /* init_test_table hash table entry structure. */ ! struct init_test_hash_entry { ! struct hash_entry root; ! tree init_test_decl; }; /* DECL_LANG_SPECIFIC for VAR_DECL, PARM_DECL and sometimes FIELD_DECL (access methods on outer class fields) and final fields. */ ! struct lang_decl_var { int slot_number; int start_pc; --- 997,1015 ---- unsigned int strictfp : 1; }; ! struct treetreehash_entry GTY(()) { ! tree key; ! tree value; }; + extern tree java_treetreehash_find PARAMS ((htab_t, tree)); + extern tree * java_treetreehash_new PARAMS ((htab_t, tree)); + extern htab_t java_treetreehash_create PARAMS ((size_t size, int ggc)); + /* DECL_LANG_SPECIFIC for VAR_DECL, PARM_DECL and sometimes FIELD_DECL (access methods on outer class fields) and final fields. */ ! struct lang_decl_var GTY(()) { int slot_number; int start_pc; *************** struct lang_decl_var *** 969,974 **** --- 1021,1042 ---- unsigned int cif : 1; /* True: decl is a class initialization flag */ }; + /* This is what 'lang_decl' really points to. */ + + enum lang_decl_desc { + LANG_DECL_FUNC, + LANG_DECL_VAR + }; + + struct lang_decl GTY(()) + { + enum lang_decl_desc desc; + union lang_decl_u { + struct lang_decl_func GTY ((tag ("LANG_DECL_FUNC"))) f; + struct lang_decl_var GTY ((tag ("LANG_DECL_VAR"))) v; + } GTY ((desc ("%0.desc"))) u; + }; + /* Macro to access fields in `struct lang_type'. */ #define TYPE_SIGNATURE(T) (TYPE_LANG_SPECIFIC(T)->signature) *************** struct lang_decl_var *** 995,1006 **** #define TYPE_PRIVATE_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->pic) #define TYPE_PROTECTED_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->poic) #define TYPE_STRICTFP(T) (TYPE_LANG_SPECIFIC(T)->strictfp) ! struct lang_type { tree signature; ! struct JCF *jcf; ! struct CPool *cpool; tree cpool_data_ref; /* Cached */ tree finit_stmt_list; /* List of statements finit$ will use */ tree clinit_stmt_list; /* List of statements will use */ --- 1063,1075 ---- #define TYPE_PRIVATE_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->pic) #define TYPE_PROTECTED_INNER_CLASS(T) (TYPE_LANG_SPECIFIC(T)->poic) #define TYPE_STRICTFP(T) (TYPE_LANG_SPECIFIC(T)->strictfp) + #define TYPE_USES_ASSERTIONS(T) (TYPE_LANG_SPECIFIC(T)->assertions) ! struct lang_type GTY(()) { tree signature; ! struct JCF * GTY ((skip (""))) jcf; ! struct CPool * GTY ((skip (""))) cpool; tree cpool_data_ref; /* Cached */ tree finit_stmt_list; /* List of statements finit$ will use */ tree clinit_stmt_list; /* List of statements will use */ *************** struct lang_type *** 1015,1042 **** unsigned pic:1; /* Private Inner Class. */ unsigned poic:1; /* Protected Inner Class. */ unsigned strictfp:1; /* `strictfp' class. */ }; - #ifdef JAVA_USE_HANDLES - /* TYPE_BINFO_HANDLE points from a handle-class to its corresponding - non-handle-class, and vice verse. */ - - #define BINFO_HANDLE(NODE) TREE_VEC_ELT ((NODE), 6) - - /* Given a RECORD_TYPE for a handle type, return the corresponding class. */ - #define HANDLE_TO_CLASS_TYPE(HTYPE) BINFO_HANDLE (TYPE_BINFO (HTYPE)) - - /* Given a RECORD_TYPE for a class, return the corresponding handle type. */ - #define CLASS_TO_HANDLE_TYPE(TYPE) BINFO_HANDLE (TYPE_BINFO (TYPE)) - #else - #define HANDLE_TO_CLASS_TYPE(HTYPE) (HTYPE) - #define CLASS_TO_HANDLE_TYPE(TYPE) (TYPE) - #endif - #define JCF_u4 unsigned long #define JCF_u2 unsigned short ! extern void java_set_yydebug PARAMS ((int)); extern void add_assume_compiled PARAMS ((const char *, int)); extern tree lookup_class PARAMS ((tree)); extern tree lookup_java_constructor PARAMS ((tree, tree)); --- 1084,1103 ---- unsigned pic:1; /* Private Inner Class. */ unsigned poic:1; /* Protected Inner Class. */ unsigned strictfp:1; /* `strictfp' class. */ + unsigned assertions:1; /* Any method uses `assert'. */ }; #define JCF_u4 unsigned long #define JCF_u2 unsigned short ! extern void java_parse_file PARAMS ((int)); ! extern bool java_mark_addressable PARAMS ((tree)); ! extern tree java_type_for_mode PARAMS ((enum machine_mode, int)); ! extern tree java_type_for_size PARAMS ((unsigned int, int)); ! extern tree java_unsigned_type PARAMS ((tree)); ! extern tree java_signed_type PARAMS ((tree)); ! extern tree java_signed_or_unsigned_type PARAMS ((int, tree)); ! extern tree java_truthvalue_conversion PARAMS ((tree)); extern void add_assume_compiled PARAMS ((const char *, int)); extern tree lookup_class PARAMS ((tree)); extern tree lookup_java_constructor PARAMS ((tree, tree)); *************** extern tree ident_subst PARAMS ((const c *** 1071,1077 **** --- 1132,1147 ---- const char*, int, int, const char*)); extern tree identifier_subst PARAMS ((const tree, const char *, int, int, const char *)); + extern int global_bindings_p PARAMS ((void)); + extern int kept_level_p PARAMS ((void)); + extern tree getdecls PARAMS ((void)); + extern void pushlevel PARAMS ((int)); + extern tree poplevel PARAMS ((int,int, int)); + extern void insert_block PARAMS ((tree)); + extern void set_block PARAMS ((tree)); + extern tree pushdecl PARAMS ((tree)); extern void java_init_decl_processing PARAMS ((void)); + extern void java_dup_lang_specific_decl PARAMS ((tree)); extern tree build_java_signature PARAMS ((tree)); extern tree build_java_argument_signature PARAMS ((tree)); extern void set_java_signature PARAMS ((tree, tree)); *************** extern void jcf_print_utf8 PARAMS ((FILE *** 1203,1226 **** extern void jcf_print_char PARAMS ((FILE *, int)); extern void jcf_print_utf8_replace PARAMS ((FILE *, const unsigned char *, int, int, int)); - # if JCF_USE_STDIO - extern const char* open_class PARAMS ((const char *, struct JCF *, - FILE *, const char *)); - # else extern const char* open_class PARAMS ((const char *, struct JCF *, int, const char *)); - # endif /* JCF_USE_STDIO */ #endif extern void java_debug_context PARAMS ((void)); extern void safe_layout_class PARAMS ((tree)); extern tree get_boehm_type_descriptor PARAMS ((tree)); extern bool class_has_finalize_method PARAMS ((tree)); - extern unsigned long java_hash_hash_tree_node PARAMS ((hash_table_key)); - extern bool java_hash_compare_tree_node PARAMS ((hash_table_key, - hash_table_key)); - extern bool attach_initialized_static_class PARAMS ((struct hash_entry *, - PTR)); extern void java_check_methods PARAMS ((tree)); extern void init_jcf_parse PARAMS((void)); extern void init_src_parse PARAMS((void)); --- 1273,1286 ---- *************** extern void append_gpp_mangled_name PARA *** 1236,1247 **** extern void add_predefined_file PARAMS ((tree)); extern int predefined_filename_p PARAMS ((tree)); ! /* We use ARGS_SIZE_RTX to indicate that gcc/expr.h has been included ! to declare `enum expand_modifier'. */ ! #if defined (TREE_CODE) && defined(RTX_CODE) && defined (HAVE_MACHINE_MODES) && defined (ARGS_SIZE_RTX) ! struct rtx_def * java_lang_expand_expr PARAMS ((tree, rtx, enum machine_mode, ! enum expand_modifier)); ! #endif /* TREE_CODE && RTX_CODE && HAVE_MACHINE_MODES && ARGS_SIZE_RTX */ #define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL) --- 1296,1310 ---- extern void add_predefined_file PARAMS ((tree)); extern int predefined_filename_p PARAMS ((tree)); ! extern void java_optimize_inline PARAMS ((tree)); ! extern tree decl_constant_value PARAMS ((tree)); ! ! #if defined(RTX_CODE) && defined (HAVE_MACHINE_MODES) ! struct rtx_def * java_expand_expr PARAMS ((tree, rtx, enum machine_mode, ! int)); ! #endif ! extern void java_inlining_merge_static_initializers PARAMS ((tree, void *)); ! extern void java_inlining_map_static_initializers PARAMS ((tree, void *)); #define DECL_FINAL(DECL) DECL_LANG_FLAG_3 (DECL) *************** struct rtx_def * java_lang_expand_expr P *** 1253,1262 **** #define METHOD_STATIC(DECL) DECL_LANG_FLAG_2 (DECL) #define METHOD_FINAL(DECL) DECL_FINAL (DECL) #define METHOD_SYNCHRONIZED(DECL) DECL_LANG_FLAG_4 (DECL) ! #define METHOD_NATIVE(DECL) (DECL_LANG_SPECIFIC(DECL)->native) #define METHOD_ABSTRACT(DECL) DECL_LANG_FLAG_5 (DECL) #define METHOD_TRANSIENT(DECL) DECL_LANG_FLAG_6 (DECL) ! #define METHOD_STRICTFP(DECL) (DECL_LANG_SPECIFIC (DECL)->strictfp) #define JAVA_FILE_P(NODE) TREE_LANG_FLAG_2 (NODE) #define CLASS_FILE_P(NODE) TREE_LANG_FLAG_3 (NODE) --- 1316,1325 ---- #define METHOD_STATIC(DECL) DECL_LANG_FLAG_2 (DECL) #define METHOD_FINAL(DECL) DECL_FINAL (DECL) #define METHOD_SYNCHRONIZED(DECL) DECL_LANG_FLAG_4 (DECL) ! #define METHOD_NATIVE(DECL) (DECL_LANG_SPECIFIC(DECL)->u.f.native) #define METHOD_ABSTRACT(DECL) DECL_LANG_FLAG_5 (DECL) #define METHOD_TRANSIENT(DECL) DECL_LANG_FLAG_6 (DECL) ! #define METHOD_STRICTFP(DECL) (DECL_LANG_SPECIFIC (DECL)->u.f.strictfp) #define JAVA_FILE_P(NODE) TREE_LANG_FLAG_2 (NODE) #define CLASS_FILE_P(NODE) TREE_LANG_FLAG_3 (NODE) *************** struct rtx_def * java_lang_expand_expr P *** 1300,1305 **** --- 1363,1369 ---- #define CLASS_PRIVATE(DECL) (TYPE_PRIVATE_INNER_CLASS (TREE_TYPE (DECL))) #define CLASS_PROTECTED(DECL) (TYPE_PROTECTED_INNER_CLASS (TREE_TYPE (DECL))) #define CLASS_STRICTFP(DECL) (TYPE_STRICTFP (TREE_TYPE (DECL))) + #define CLASS_USES_ASSERTIONS(DECL) (TYPE_USES_ASSERTIONS (TREE_TYPE (DECL))) /* @deprecated marker flag on methods, fields and classes */ *************** extern tree *type_map; *** 1483,1488 **** --- 1547,1558 ---- declared with the final modifier */ #define ARG_FINAL_P(NODE) TREE_LANG_FLAG_0 (NODE) + /* True if NODE (some kind of EXPR, but not a WFL) should not give an + error if it is found to be unreachable. This can only be applied + to those EXPRs which can be used as the update expression of a + `for' loop. In particular it can't be set on a LOOP_EXPR. */ + #define SUPPRESS_UNREACHABLE_ERROR(NODE) TREE_LANG_FLAG_0 (NODE) + /* True if EXPR (a WFL in that case) resolves into a package name */ #define RESOLVE_PACKAGE_NAME_P(WFL) TREE_LANG_FLAG_3 (WFL) *************** extern tree *type_map; *** 1646,1652 **** TREE_SIDE_EFFECTS (WHERE) = 1; \ } ! /* Non zero if TYPE is an unchecked exception */ #define IS_UNCHECKED_EXCEPTION_P(TYPE) \ (inherits_from_p ((TYPE), runtime_exception_type_node) \ || inherits_from_p ((TYPE), error_exception_type_node)) --- 1716,1722 ---- TREE_SIDE_EFFECTS (WHERE) = 1; \ } ! /* Nonzero if TYPE is an unchecked exception */ #define IS_UNCHECKED_EXCEPTION_P(TYPE) \ (inherits_from_p ((TYPE), runtime_exception_type_node) \ || inherits_from_p ((TYPE), error_exception_type_node)) *************** enum *** 1681,1689 **** JV_STATE_LINKED = 9, /* Strings interned. */ JV_STATE_IN_PROGRESS = 10, /* running. */ ! JV_STATE_DONE = 12, - JV_STATE_ERROR = 14 /* must be last. */ }; #undef DEBUG_JAVA_BINDING_LEVELS --- 1751,1760 ---- JV_STATE_LINKED = 9, /* Strings interned. */ JV_STATE_IN_PROGRESS = 10, /* running. */ ! JV_STATE_ERROR = 12, ! ! JV_STATE_DONE = 14 /* Must be last. */ }; #undef DEBUG_JAVA_BINDING_LEVELS diff -Nrc3pad gcc-3.2.3/gcc/java/jcf-dump.1 gcc-3.3/gcc/java/jcf-dump.1 *** gcc-3.2.3/gcc/java/jcf-dump.1 2003-04-22 07:07:37.000000000 +0000 --- gcc-3.3/gcc/java/jcf-dump.1 2003-05-14 00:32:10.000000000 +0000 *************** *** 1,8 **** ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Tue Apr 22 07:07:37 2003 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,7 ---- ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 15,26 **** .if t .sp .5v .if n .sp .. - .de Ip \" List item - .br - .ie \\n(.$>=3 .ne \\$3 - .el .ne 3 - .IP "\\$1" \\$2 - .. .de Vb \" Begin verbatim text .ft CW .nf --- 14,19 ---- *************** *** 28,42 **** .. .de Ve \" End verbatim text .ft R - .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 21,34 ---- .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 56,65 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 48,57 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 68,81 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. - .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 60,72 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 135,200 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "JCF-DUMP 1" ! .TH JCF-DUMP 1 "gcc-3.2.3" "2003-04-22" "GNU" ! .UC .SH "NAME" ! jcf-dump \- print information about Java class files .SH "SYNOPSIS" .IX Header "SYNOPSIS" ! jcf-dump [\fB\-c\fR] [\fB\*(--javap\fR] ! [\fB\*(--classpath\fR=\fIpath\fR] [\fB\*(--CLASSPATH\fR=\fIpath\fR] [\fB\-I\fR\fIdir\fR...] [\fB\-o\fR \fIfile\fR] ! [\fB\*(--version\fR] [\fB\*(--help\fR] [\fB\-v\fR] [\fB\*(--verbose\fR] \fIclassname\fR... .SH "DESCRIPTION" .IX Header "DESCRIPTION" This is a class file examiner, similar to \f(CW\*(C`javap\*(C'\fR. It will print ! information about a number of classes, which are specifed by class name or file name. .SH "OPTIONS" .IX Header "OPTIONS" ! .Ip "\fB\-c\fR" 4 .IX Item "-c" Disassemble method bodies. By default method bodies are not printed. ! .Ip "\fB\*(--javap\fR" 4 ! .IX Item "javap" Generate output in \f(CW\*(C`javap\*(C'\fR format. The implementation of this feature is very incomplete. ! .Ip "\fB\*(--classpath=\fR\fIpath\fR" 4 ! .IX Item "classpath=path" .PD 0 ! .Ip "\fB\*(--CLASSPATH=\fR\fIpath\fR" 4 ! .IX Item "CLASSPATH=path" ! .Ip "\fB\-I\fR\fIdirectory\fR" 4 .IX Item "-Idirectory" ! .Ip "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" .PD These options as the same as the corresponding \fBgcj\fR options. ! .Ip "\fB\*(--help\fR" 4 ! .IX Item "help" Print help, then exit. ! .Ip "\fB\*(--version\fR" 4 ! .IX Item "version" Print version number, then exit. ! .Ip "\fB\-v, \-\-verbose\fR" 4 .IX Item "-v, --verbose" Print extra information while running. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcj\fR\|(1), \fIgcjh\fR\|(1), \fIgij\fR\|(1), \fIjcf-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). --- 126,204 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "JCF-DUMP 1" ! .TH JCF-DUMP 1 "2003-05-14" "gcc-3.3" "GNU" .SH "NAME" ! jcf\-dump \- print information about Java class files .SH "SYNOPSIS" .IX Header "SYNOPSIS" ! jcf-dump [\fB\-c\fR] [\fB\-\-javap\fR] ! [\fB\-\-classpath\fR=\fIpath\fR] [\fB\-\-CLASSPATH\fR=\fIpath\fR] [\fB\-I\fR\fIdir\fR...] [\fB\-o\fR \fIfile\fR] ! [\fB\-\-version\fR] [\fB\-\-help\fR] [\fB\-v\fR] [\fB\-\-verbose\fR] \fIclassname\fR... .SH "DESCRIPTION" .IX Header "DESCRIPTION" This is a class file examiner, similar to \f(CW\*(C`javap\*(C'\fR. It will print ! information about a number of classes, which are specified by class name or file name. .SH "OPTIONS" .IX Header "OPTIONS" ! .IP "\fB\-c\fR" 4 .IX Item "-c" Disassemble method bodies. By default method bodies are not printed. ! .IP "\fB\-\-javap\fR" 4 ! .IX Item "--javap" Generate output in \f(CW\*(C`javap\*(C'\fR format. The implementation of this feature is very incomplete. ! .IP "\fB\-\-classpath=\fR\fIpath\fR" 4 ! .IX Item "--classpath=path" .PD 0 ! .IP "\fB\-\-CLASSPATH=\fR\fIpath\fR" 4 ! .IX Item "--CLASSPATH=path" ! .IP "\fB\-I\fR\fIdirectory\fR" 4 .IX Item "-Idirectory" ! .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" .PD These options as the same as the corresponding \fBgcj\fR options. ! .IP "\fB\-\-help\fR" 4 ! .IX Item "--help" Print help, then exit. ! .IP "\fB\-\-version\fR" 4 ! .IX Item "--version" Print version number, then exit. ! .IP "\fB\-v, \-\-verbose\fR" 4 .IX Item "-v, --verbose" Print extra information while running. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcj\fR\|(1), \fIgcjh\fR\|(1), \fIgij\fR\|(1), \fIjcf\-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (c) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). + .PP + (a) The \s-1FSF\s0's Front-Cover Text is: + .PP + .Vb 1 + \& A GNU Manual + .Ve + .PP + (b) The \s-1FSF\s0's Back-Cover Text is: + .PP + .Vb 3 + \& You have freedom to copy and modify this GNU Manual, like GNU + \& software. Copies published by the Free Software Foundation raise + \& funds for GNU development. + .Ve diff -Nrc3pad gcc-3.2.3/gcc/java/jcf-dump.c gcc-3.3/gcc/java/jcf-dump.c *** gcc-3.2.3/gcc/java/jcf-dump.c 2002-04-10 13:09:00.000000000 +0000 --- gcc-3.3/gcc/java/jcf-dump.c 2003-03-28 22:18:48.000000000 +0000 *************** The Free Software Foundation is independ *** 56,61 **** --- 56,62 ---- #include "version.h" #include + #include /* Outout file. */ FILE *out; *************** int flag_print_fields = 1; *** 71,77 **** int flag_print_methods = 1; int flag_print_attributes = 1; ! /* When non zero, warn when source file is newer than matching class file. */ int flag_newer = 1; --- 72,78 ---- int flag_print_methods = 1; int flag_print_attributes = 1; ! /* When nonzero, warn when source file is newer than matching class file. */ int flag_newer = 1; *************** DEFUN(print_constant, (out, jcf, index, *** 505,519 **** case CONSTANT_Float: { jfloat fnum = JPOOL_FLOAT (jcf, index); ! fprintf (out, "%s%.10g", verbosity > 0 ? "Float " : "", (double) fnum); if (verbosity > 1) ! fprintf (out, ", bits = 0x%08lx", (long) (* (int32 *) &fnum)); break; } case CONSTANT_Double: { jdouble dnum = JPOOL_DOUBLE (jcf, index); ! fprintf (out, "%s%.20g", verbosity > 0 ? "Double " : "", dnum); if (verbosity > 1) { int32 hi, lo; --- 506,590 ---- case CONSTANT_Float: { jfloat fnum = JPOOL_FLOAT (jcf, index); ! ! if (verbosity > 0) ! fputs ("Float ", out); ! ! if (fnum.negative) ! putc ('-', out); ! ! if (JFLOAT_FINITE (fnum)) ! { ! int dummy; ! int exponent = fnum.exponent - JFLOAT_EXP_BIAS; ! double f; ! uint32 mantissa = fnum.mantissa; ! if (fnum.exponent == 0) ! /* Denormal. */ ! exponent++; ! else ! /* Normal; add the implicit bit. */ ! mantissa |= ((uint32)1 << 23); ! ! f = frexp (mantissa, &dummy); ! f = ldexp (f, exponent + 1); ! fprintf (out, "%.10g", f); ! } ! else ! { ! if (fnum.mantissa == 0) ! fputs ("Inf", out); ! else if (fnum.mantissa & JFLOAT_QNAN_MASK) ! fprintf (out, "QNaN(%u)", (fnum.mantissa & ~JFLOAT_QNAN_MASK)); ! else ! fprintf (out, "SNaN(%u)", (fnum.mantissa & ~JFLOAT_QNAN_MASK)); ! } ! if (verbosity > 1) ! fprintf (out, ", bits = 0x%08lx", JPOOL_UINT (jcf, index)); ! break; } case CONSTANT_Double: { jdouble dnum = JPOOL_DOUBLE (jcf, index); ! ! if (verbosity > 0) ! fputs ("Double ", out); ! ! if (dnum.negative) ! putc ('-', out); ! ! if (JDOUBLE_FINITE (dnum)) ! { ! int dummy; ! int exponent = dnum.exponent - JDOUBLE_EXP_BIAS; ! double d; ! uint64 mantissa = ((((uint64) dnum.mantissa0) << 32) ! + dnum.mantissa1); ! if (dnum.exponent == 0) ! /* Denormal. */ ! exponent++; ! else ! /* Normal; add the implicit bit. */ ! mantissa |= ((uint64)1 << 52); ! ! d = frexp (mantissa, &dummy); ! d = ldexp (d, exponent + 1); ! fprintf (out, "%.20g", d); ! } ! else ! { ! uint64 mantissa = dnum.mantissa0 & ~JDOUBLE_QNAN_MASK; ! mantissa = (mantissa << 32) + dnum.mantissa1; ! ! if (dnum.mantissa0 == 0 && dnum.mantissa1 == 0) ! fputs ("Inf", out); ! else if (dnum.mantissa0 & JDOUBLE_QNAN_MASK) ! fprintf (out, "QNaN(%llu)", (unsigned long long)mantissa); ! else ! fprintf (out, "SNaN(%llu)", (unsigned long long)mantissa); ! } if (verbosity > 1) { int32 hi, lo; *************** help () *** 821,827 **** printf (" -v, --verbose Print extra information while running\n"); printf ("\n"); printf ("For bug reporting instructions, please see:\n"); ! printf ("%s.\n", GCCBUGURL); exit (0); } --- 892,898 ---- printf (" -v, --verbose Print extra information while running\n"); printf ("\n"); printf ("For bug reporting instructions, please see:\n"); ! printf ("%s.\n", bug_report_url); exit (0); } *************** DEFUN(main, (argc, argv), *** 939,949 **** if (optind >= argc) { fprintf (out, "Reading .class from .\n"); - #if JCF_USE_STDIO - open_class ("", jcf, stdin, NULL); - #else open_class ("", jcf, 0, NULL); - #endif process_class (jcf); } else --- 1010,1016 ---- diff -Nrc3pad gcc-3.2.3/gcc/java/jcf.h gcc-3.3/gcc/java/jcf.h *** gcc-3.2.3/gcc/java/jcf.h 2002-06-04 16:45:55.000000000 +0000 --- gcc-3.3/gcc/java/jcf.h 2003-04-10 14:54:08.000000000 +0000 *************** *** 1,6 **** /* Utility macros to read Java(TM) .class files and byte codes. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 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 --- 1,7 ---- /* Utility macros to read Java(TM) .class files and byte codes. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 ! 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 is independ *** 71,76 **** --- 72,104 ---- #define JCF_USE_SCANDIR 0 #endif + /* On case-insensitive file systems, file name components must be + compared using "strcasecmp", if available, instead of "strcmp". + Assumes "config.h" has already been included. */ + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) && defined (HAVE_STRCASECMP) + #define COMPARE_FILENAMES(X, Y) strcasecmp ((X), (Y)) + #else + #define COMPARE_FILENAMES(X, Y) strcmp ((X), (Y)) + #endif + + /* On case-insensitive file systems, we need to ensure that a request + to open a .java or .class file is honored only if the file to be + opened is of the exact case we are asking for. In other words, we + want to override the inherent case insensitivity of the underlying + file system. On other platforms, this macro becomes the vanilla + open() call. + + If you want to add another host, add your define to the list below + (i.e. defined(WIN32) || defined(YOUR_HOST)) and add an host-specific + .c file to Make-lang.in similar to win32-host.c */ + #if defined(WIN32) + extern int + jcf_open_exact_case (const char* filename, int oflag); + #define JCF_OPEN_EXACT_CASE(X, Y) jcf_open_exact_case (X, Y) + #else + #define JCF_OPEN_EXACT_CASE open + #endif /* WIN32 */ + struct JCF; typedef int (*jcf_filbuf_t) PARAMS ((struct JCF*, int needed)); diff -Nrc3pad gcc-3.2.3/gcc/java/jcf-io.c gcc-3.3/gcc/java/jcf-io.c *** gcc-3.2.3/gcc/java/jcf-io.c 2002-06-04 16:45:54.000000000 +0000 --- gcc-3.3/gcc/java/jcf-io.c 2003-04-20 22:44:04.000000000 +0000 *************** DEFUN(read_zip_member, (jcf, zipd, zipf) *** 231,260 **** return 0; } - #if JCF_USE_STDIO - const char * - DEFUN(open_class, (filename, jcf, stream, dep_name), - const char *filename AND JCF *jcf AND FILE* stream - AND const char *dep_name) - { - if (jcf) - { - if (dep_name != NULL) - jcf_dependency_add_file (dep_name, 0); - JCF_ZERO (jcf); - jcf->buffer = NULL; - jcf->buffer_end = NULL; - jcf->read_ptr = NULL; - jcf->read_end = NULL; - jcf->read_state = stream; - jcf->filename = filename; - jcf->filbuf = jcf_filbuf_from_stdio; - } - else - fclose (stream); - return filename; - } - #else const char * DEFUN(open_class, (filename, jcf, fd, dep_name), const char *filename AND JCF *jcf AND int fd AND const char *dep_name) --- 231,236 ---- *************** DEFUN(open_class, (filename, jcf, fd, de *** 289,312 **** close (fd); return filename; } - #endif const char * DEFUN(find_classfile, (filename, jcf, dep_name), char *filename AND JCF *jcf AND const char *dep_name) { - #if JCF_USE_STDIO - FILE *stream = fopen (filename, "rb"); - if (stream == NULL) - return NULL; - return open_class (arg, jcf, stream, dep_name); - #else int fd = open (filename, O_RDONLY | O_BINARY); if (fd < 0) return NULL; return open_class (filename, jcf, fd, dep_name); - #endif } #if JCF_USE_SCANDIR --- 265,280 ---- *************** DEFUN(caching_stat, (filename, buf), *** 375,380 **** --- 343,349 ---- { #if JCF_USE_SCANDIR char *sep; + char origsep = 0; char *base; memoized_dirlist_entry *dent; void **slot; *************** DEFUN(caching_stat, (filename, buf), *** 388,402 **** /* Get the name of the directory. */ sep = strrchr (filename, DIR_SEPARATOR); if (sep) { *sep = '\0'; base = sep + 1; } else base = filename; ! /* Obtain the entry for this directory form the hash table. */ slot = htab_find_slot (memoized_dirlists, filename, INSERT); if (!*slot) { --- 357,376 ---- /* Get the name of the directory. */ sep = strrchr (filename, DIR_SEPARATOR); + #ifdef DIR_SEPARATOR_2 + if (! sep) + sep = strrchr (filename, DIR_SEPARATOR_2); + #endif if (sep) { + origsep = *sep; *sep = '\0'; base = sep + 1; } else base = filename; ! /* Obtain the entry for this directory from the hash table. */ slot = htab_find_slot (memoized_dirlists, filename, INSERT); if (!*slot) { *************** DEFUN(caching_stat, (filename, buf), *** 407,426 **** /* Unfortunately, scandir is not fully standardized. In particular, the type of the function pointer passed as the third argument sometimes takes a "const struct dirent *" ! parameter, and sometimes just a "struct dirent *". We rely ! on the ability to interchange these two types of function ! pointers. */ dent->num_files = scandir (filename, &dent->files, ! java_or_class_file, alphasort); *slot = dent; } else dent = *((memoized_dirlist_entry **) slot); ! /* Put the spearator back. */ if (sep) ! *sep = DIR_SEPARATOR; /* If the file is not in the list, there is no need to stat it; it does not exist. */ --- 381,399 ---- /* Unfortunately, scandir is not fully standardized. In particular, the type of the function pointer passed as the third argument sometimes takes a "const struct dirent *" ! parameter, and sometimes just a "struct dirent *". We cast ! to (void *) so that either way it is quietly accepted. */ dent->num_files = scandir (filename, &dent->files, ! (void *) java_or_class_file, alphasort); *slot = dent; } else dent = *((memoized_dirlist_entry **) slot); ! /* Put the separator back. */ if (sep) ! *sep = origsep; /* If the file is not in the list, there is no need to stat it; it does not exist. */ *************** DEFUN(find_class, (classname, classname_ *** 461,471 **** const char *classname AND int classname_length AND JCF *jcf AND int source_ok) { - #if JCF_USE_STDIO - FILE *stream; - #else int fd; - #endif int i, k, java = -1, class = -1; struct stat java_buf, class_buf; char *dep_file; --- 434,440 ---- *************** DEFUN(find_class, (classname, classname_ *** 491,500 **** /* Allocate and zero out the buffer, since we don't explicitly put a null pointer when we're copying it below. */ buflen = jcf_path_max_len () + classname_length + 10; ! buffer = (char *) ALLOC (buflen); memset (buffer, 0, buflen); ! java_buffer = (char *) alloca (buflen); jcf->java_source = 0; --- 460,469 ---- /* Allocate and zero out the buffer, since we don't explicitly put a null pointer when we're copying it below. */ buflen = jcf_path_max_len () + classname_length + 10; ! buffer = ALLOC (buflen); memset (buffer, 0, buflen); ! java_buffer = alloca (buflen); jcf->java_source = 0; *************** DEFUN(find_class, (classname, classname_ *** 554,560 **** strcpy (java_buffer, path_name); l = strlen (java_buffer); for (m = 0; m < classname_length; ++m) ! java_buffer[m + l] = (classname[m] == '.' ? '/' : classname[m]); strcpy (java_buffer + m + l, ".java"); java = caching_stat (java_buffer, &java_buf); if (java == 0) --- 523,530 ---- strcpy (java_buffer, path_name); l = strlen (java_buffer); for (m = 0; m < classname_length; ++m) ! java_buffer[m + l] = (classname[m] == '.' ! ? DIR_SEPARATOR : classname[m]); strcpy (java_buffer + m + l, ".java"); java = caching_stat (java_buffer, &java_buf); if (java == 0) *************** DEFUN(find_class, (classname, classname_ *** 578,611 **** dep_file = java_buffer; else dep_file = buffer; - #if JCF_USE_STDIO - if (!class) - { - SOURCE_FRONTEND_DEBUG (("Trying %s", buffer)); - stream = fopen (buffer, "rb"); - if (stream) - goto found; - } - /* Give .java a try, if necessary */ - if (!java) - { - strcpy (buffer, java_buffer); - SOURCE_FRONTEND_DEBUG (("Trying %s", buffer)); - stream = fopen (buffer, "r"); - if (stream) - { - jcf->java_source = 1; - goto found; - } - } - #else if (!class) { SOURCE_FRONTEND_DEBUG ((stderr, "[Class selected: %s]\n", classname+classname_length- (classname_length <= 30 ? classname_length : 30))); ! fd = open (buffer, O_RDONLY | O_BINARY); if (fd >= 0) goto found; } --- 548,560 ---- dep_file = java_buffer; else dep_file = buffer; if (!class) { SOURCE_FRONTEND_DEBUG ((stderr, "[Class selected: %s]\n", classname+classname_length- (classname_length <= 30 ? classname_length : 30))); ! fd = JCF_OPEN_EXACT_CASE (buffer, O_RDONLY | O_BINARY); if (fd >= 0) goto found; } *************** DEFUN(find_class, (classname, classname_ *** 617,630 **** classname+classname_length- (classname_length <= 30 ? classname_length : 30))); ! fd = open (buffer, O_RDONLY); if (fd >= 0) { jcf->java_source = 1; goto found; } } - #endif free (buffer); --- 566,578 ---- classname+classname_length- (classname_length <= 30 ? classname_length : 30))); ! fd = JCF_OPEN_EXACT_CASE (buffer, O_RDONLY); if (fd >= 0) { jcf->java_source = 1; goto found; } } free (buffer); *************** DEFUN(find_class, (classname, classname_ *** 635,646 **** return NULL; found: - #if JCF_USE_STDIO - if (jcf->java_source) - return NULL; /* FIXME */ - else - return open_class (buffer, jcf, stream, dep_file); - #else if (jcf->java_source) { JCF_ZERO (jcf); /* JCF_FINISH relies on this */ --- 583,588 ---- *************** DEFUN(find_class, (classname, classname_ *** 652,658 **** buffer = (char *) open_class (buffer, jcf, fd, dep_file); jcf->classname = xstrdup (classname); return buffer; - #endif } void --- 594,599 ---- diff -Nrc3pad gcc-3.2.3/gcc/java/jcf-parse.c gcc-3.3/gcc/java/jcf-parse.c *** gcc-3.2.3/gcc/java/jcf-parse.c 2002-04-22 20:36:47.000000000 +0000 --- gcc-3.3/gcc/java/jcf-parse.c 2003-02-03 14:06:32.000000000 +0000 *************** *** 1,5 **** /* Parser for Java(TM) .class files. ! Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Parser for Java(TM) .class files. ! Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU CC. *************** The Free Software Foundation is independ *** 28,33 **** --- 28,34 ---- #include "config.h" #include "system.h" #include "tree.h" + #include "real.h" #include "obstack.h" #include "flags.h" #include "java-except.h" *************** The Free Software Foundation is independ *** 43,49 **** #include #endif ! #ifdef HAVE_NL_LANGINFO #include #endif --- 44,50 ---- #include #endif ! #ifdef HAVE_LANGINFO_CODESET #include #endif *************** The Free Software Foundation is independ *** 65,79 **** #include "jcf.h" - extern struct obstack *saveable_obstack; extern struct obstack temporary_obstack; - extern struct obstack permanent_obstack; ! /* Set to non-zero value in order to emit class initilization code before static field references. */ extern int always_initialize_class_p; ! static tree parse_roots[3] = { NULL_TREE, NULL_TREE, NULL_TREE }; /* The FIELD_DECL for the current field. */ #define current_field parse_roots[0] --- 66,78 ---- #include "jcf.h" extern struct obstack temporary_obstack; ! /* Set to nonzero value in order to emit class initilization code before static field references. */ extern int always_initialize_class_p; ! static GTY(()) tree parse_roots[3]; /* The FIELD_DECL for the current field. */ #define current_field parse_roots[0] *************** set_source_filename (jcf, index) *** 192,200 **** DECL_LINENUMBERS_OFFSET (current_method) = 0) #define HANDLE_END_METHODS() \ ! { tree handle_type = CLASS_TO_HANDLE_TYPE (current_class); \ ! if (handle_type != current_class) layout_type (handle_type); \ ! current_method = NULL_TREE; } #define HANDLE_CODE_ATTRIBUTE(MAX_STACK, MAX_LOCALS, CODE_LENGTH) \ { DECL_MAX_STACK (current_method) = (MAX_STACK); \ --- 191,197 ---- DECL_LINENUMBERS_OFFSET (current_method) = 0) #define HANDLE_END_METHODS() \ ! { current_method = NULL_TREE; } #define HANDLE_CODE_ATTRIBUTE(MAX_STACK, MAX_LOCALS, CODE_LENGTH) \ { DECL_MAX_STACK (current_method) = (MAX_STACK); \ *************** set_source_filename (jcf, index) *** 247,254 **** #include "jcf-reader.c" - static int yydebug; - tree parse_signature (jcf, sig_index) JCF *jcf; --- 244,249 ---- *************** parse_signature (jcf, sig_index) *** 262,274 **** JPOOL_UTF_LENGTH (jcf, sig_index)); } - void - java_set_yydebug (value) - int value; - { - yydebug = value; - } - tree get_constant (jcf, index) JCF *jcf; --- 257,262 ---- *************** get_constant (jcf, index) *** 302,363 **** force_fit_type (value, 0); break; } ! #if TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT case CONSTANT_Float: { jint num = JPOOL_INT(jcf, index); REAL_VALUE_TYPE d; ! #ifdef REAL_ARITHMETIC ! d = REAL_VALUE_FROM_TARGET_SINGLE (num); ! #else ! union { float f; jint i; } u; ! u.i = num; ! d = u.f; ! #endif value = build_real (float_type_node, d); break; } case CONSTANT_Double: { ! HOST_WIDE_INT num[2]; REAL_VALUE_TYPE d; - HOST_WIDE_INT lo, hi; - num[0] = JPOOL_UINT (jcf, index); - lshift_double (num[0], 0, 32, 64, &lo, &hi, 0); - num[0] = JPOOL_UINT (jcf, index+1); - add_double (lo, hi, num[0], 0, &lo, &hi); ! /* Since ereal_from_double expects an array of HOST_WIDE_INT ! in the target's format, we swap the elements for big endian ! targets, unless HOST_WIDE_INT is sufficiently large to ! contain a target double, in which case the 2nd element ! is ignored. ! FIXME: Is this always right for cross targets? */ ! if (FLOAT_WORDS_BIG_ENDIAN && sizeof(num[0]) < 8) ! { ! num[0] = hi; ! num[1] = lo; ! } else ! { ! num[0] = lo; ! num[1] = hi; ! } ! #ifdef REAL_ARITHMETIC ! d = REAL_VALUE_FROM_TARGET_DOUBLE (num); ! #else ! { ! union { double d; jint i[2]; } u; ! u.i[0] = (jint) num[0]; ! u.i[1] = (jint) num[1]; ! d = u.d; ! } ! #endif value = build_real (double_type_node, d); break; } ! #endif /* TARGET_FLOAT_FORMAT == IEEE_FLOAT_FORMAT */ case CONSTANT_String: { tree name = get_name_constant (jcf, JPOOL_USHORT1 (jcf, index)); --- 290,325 ---- force_fit_type (value, 0); break; } ! case CONSTANT_Float: { jint num = JPOOL_INT(jcf, index); + long buf = num; REAL_VALUE_TYPE d; ! ! real_from_target_fmt (&d, &buf, &ieee_single_format); value = build_real (float_type_node, d); break; } + case CONSTANT_Double: { ! long buf[2], lo, hi; REAL_VALUE_TYPE d; ! hi = JPOOL_UINT (jcf, index); ! lo = JPOOL_UINT (jcf, index+1); ! if (FLOAT_WORDS_BIG_ENDIAN) ! buf[0] = hi, buf[1] = lo; else ! buf[0] = lo, buf[1] = hi; ! ! real_from_target_fmt (&d, buf, &ieee_double_format); value = build_real (double_type_node, d); break; } ! case CONSTANT_String: { tree name = get_name_constant (jcf, JPOOL_USHORT1 (jcf, index)); *************** get_name_constant (jcf, index) *** 408,414 **** return name; } ! /* Handle reading innerclass attributes. If a non zero entry (denoting a non anonymous entry) is found, We augment the inner class list of the outer context with the newly resolved innerclass. */ --- 370,376 ---- return name; } ! /* Handle reading innerclass attributes. If a nonzero entry (denoting a non anonymous entry) is found, We augment the inner class list of the outer context with the newly resolved innerclass. */ *************** read_class (name) *** 586,591 **** --- 548,557 ---- read_zip_member(current_jcf, current_jcf->zipd, current_jcf->zipd->zipf); jcf_parse (current_jcf); + /* Parsing might change the class, in which case we have to + put it back where we found it. */ + if (current_class != class && icv != NULL_TREE) + TREE_TYPE (icv) = current_class; class = current_class; java_pop_parser_context (0); java_parser_context_restore_global (); *************** load_class (class_or_name, verbose) *** 635,643 **** break; /* We failed loading name. Now consider that we might be looking ! for a inner class. */ if ((separator = strrchr (IDENTIFIER_POINTER (name), '$')) ! || (separator = strrchr (IDENTIFIER_POINTER (name), '.'))) { int c = *separator; *separator = '\0'; --- 601,609 ---- break; /* We failed loading name. Now consider that we might be looking ! for a inner class. */ if ((separator = strrchr (IDENTIFIER_POINTER (name), '$')) ! || (separator = strrchr (IDENTIFIER_POINTER (name), '.'))) { int c = *separator; *separator = '\0'; *************** void *** 746,752 **** init_outgoing_cpool () { current_constant_pool_data_ref = NULL_TREE; ! outgoing_cpool = (struct CPool *)xmalloc (sizeof (struct CPool)); memset (outgoing_cpool, 0, sizeof (struct CPool)); } --- 712,718 ---- init_outgoing_cpool () { current_constant_pool_data_ref = NULL_TREE; ! outgoing_cpool = xmalloc (sizeof (struct CPool)); memset (outgoing_cpool, 0, sizeof (struct CPool)); } *************** parse_class_file () *** 768,779 **** compiling from class files. */ always_initialize_class_p = 1; ! for (field = TYPE_FIELDS (CLASS_TO_HANDLE_TYPE (current_class)); field != NULL_TREE; field = TREE_CHAIN (field)) if (FIELD_STATIC (field)) DECL_EXTERNAL (field) = 0; ! for (method = TYPE_METHODS (CLASS_TO_HANDLE_TYPE (current_class)); method != NULL_TREE; method = TREE_CHAIN (method)) { JCF *jcf = current_jcf; --- 734,745 ---- compiling from class files. */ always_initialize_class_p = 1; ! for (field = TYPE_FIELDS (current_class); field != NULL_TREE; field = TREE_CHAIN (field)) if (FIELD_STATIC (field)) DECL_EXTERNAL (field) = 0; ! for (method = TYPE_METHODS (current_class); method != NULL_TREE; method = TREE_CHAIN (method)) { JCF *jcf = current_jcf; *************** parse_source_file_1 (file, finput) *** 876,882 **** /* There's no point in trying to find the current encoding unless we are going to do something intelligent with it -- hence the test for iconv. */ ! #if defined (HAVE_LOCALE_H) && defined (HAVE_ICONV) && defined (HAVE_NL_LANGINFO) setlocale (LC_CTYPE, ""); if (current_encoding == NULL) current_encoding = nl_langinfo (CODESET); --- 842,848 ---- /* There's no point in trying to find the current encoding unless we are going to do something intelligent with it -- hence the test for iconv. */ ! #if defined (HAVE_LOCALE_H) && defined (HAVE_ICONV) && defined (HAVE_LANGINFO_CODESET) setlocale (LC_CTYPE, ""); if (current_encoding == NULL) current_encoding = nl_langinfo (CODESET); *************** predefined_filename_p (node) *** 934,941 **** return 0; } ! int ! yyparse () { int filename_count = 0; char *list, *next; --- 900,908 ---- return 0; } ! void ! java_parse_file (set_yydebug) ! int set_yydebug ATTRIBUTE_UNUSED; { int filename_count = 0; char *list, *next; *************** yyparse () *** 1072,1078 **** resource_filename = IDENTIFIER_POINTER (TREE_VALUE (current_file_list)); compile_resource_file (resource_name, resource_filename); ! return 0; } current_jcf = main_jcf; --- 1039,1045 ---- resource_filename = IDENTIFIER_POINTER (TREE_VALUE (current_file_list)); compile_resource_file (resource_name, resource_filename); ! return; } current_jcf = main_jcf; *************** yyparse () *** 1096,1102 **** fatal_io_error ("can't open %s", IDENTIFIER_POINTER (name)); #ifdef IO_BUFFER_SIZE ! setvbuf (finput, (char *) xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE); #endif input_filename = IDENTIFIER_POINTER (name); --- 1063,1069 ---- fatal_io_error ("can't open %s", IDENTIFIER_POINTER (name)); #ifdef IO_BUFFER_SIZE ! setvbuf (finput, xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE); #endif input_filename = IDENTIFIER_POINTER (name); *************** yyparse () *** 1153,1159 **** parse_source_file_2 (); } ! for (ctxp = ctxp_for_generation; ctxp; ctxp = ctxp->next) { input_filename = ctxp->filename; parse_source_file_3 (); --- 1120,1126 ---- parse_source_file_2 (); } ! for (ctxp = ctxp_for_generation; ctxp; ctxp = ctxp->next) { input_filename = ctxp->filename; parse_source_file_3 (); *************** yyparse () *** 1181,1187 **** if (flag_indirect_dispatch) emit_offset_symbol_table (); } - return 0; } /* Process all class entries found in the zip file. */ --- 1148,1153 ---- *************** void *** 1293,1301 **** init_jcf_parse () { /* Register roots with the garbage collector. */ - ggc_add_tree_root (parse_roots, sizeof (parse_roots) / sizeof(tree)); - ggc_add_root (¤t_jcf, 1, sizeof (JCF), (void (*)(void *))ggc_mark_jcf); init_src_parse (); } --- 1259,1267 ---- init_jcf_parse () { /* Register roots with the garbage collector. */ ggc_add_root (¤t_jcf, 1, sizeof (JCF), (void (*)(void *))ggc_mark_jcf); init_src_parse (); } + + #include "gt-java-jcf-parse.h" diff -Nrc3pad gcc-3.2.3/gcc/java/jcf-path.c gcc-3.3/gcc/java/jcf-path.c *** gcc-3.2.3/gcc/java/jcf-path.c 2002-06-08 16:33:46.000000000 +0000 --- gcc-3.3/gcc/java/jcf-path.c 2003-03-07 04:39:46.000000000 +0000 *************** *** 1,6 **** /* Handle CLASSPATH, -classpath, and path searching. ! Copyright (C) 1998, 1999, 2000, 2001, 2002 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 --- 1,7 ---- /* Handle CLASSPATH, -classpath, and path searching. ! Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 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 is independ *** 30,41 **** #include "jcf.h" - /* Some boilerplate that really belongs in a header. */ - - #ifndef GET_ENV_PATH_LIST - #define GET_ENV_PATH_LIST(VAR,NAME) do { (VAR) = getenv (NAME); } while (0) - #endif - /* By default, colon separates directories in a path. */ #ifndef PATH_SEPARATOR #define PATH_SEPARATOR ':' --- 31,36 ---- *************** add_entry (entp, filename, is_system) *** 149,177 **** int len; struct entry *n; ! n = (struct entry *) ALLOC (sizeof (struct entry)); n->flags = is_system ? FLAG_SYSTEM : 0; n->next = NULL; len = strlen (filename); ! if (len > 4 && (strcmp (filename + len - 4, ".zip") == 0 ! || strcmp (filename + len - 4, ".jar") == 0)) { n->flags |= FLAG_ZIP; /* If the user uses -classpath then he'll have to include libgcj.jar in the value. We check for this in a simplistic way. Symlinks will fool this test. This is only used for -MM and -MMD, so it probably isn't terribly important. */ ! if (! strcmp (filename, LIBGCJ_ZIP_FILE)) n->flags |= FLAG_SYSTEM; } /* Note that we add a trailing separator to `.zip' names as well. This is a little hack that lets the searching code in jcf-io.c work more easily. Eww. */ ! if (filename[len - 1] != '/' && filename[len - 1] != DIR_SEPARATOR) { ! char *f2 = (char *) alloca (len + 2); strcpy (f2, filename); f2[len] = DIR_SEPARATOR; f2[len + 1] = '\0'; --- 144,173 ---- int len; struct entry *n; ! n = ALLOC (sizeof (struct entry)); n->flags = is_system ? FLAG_SYSTEM : 0; n->next = NULL; len = strlen (filename); ! ! if (len > 4 && (COMPARE_FILENAMES (filename + len - 4, ".zip") == 0 ! || COMPARE_FILENAMES (filename + len - 4, ".jar") == 0)) { n->flags |= FLAG_ZIP; /* If the user uses -classpath then he'll have to include libgcj.jar in the value. We check for this in a simplistic way. Symlinks will fool this test. This is only used for -MM and -MMD, so it probably isn't terribly important. */ ! if (! COMPARE_FILENAMES (filename, LIBGCJ_ZIP_FILE)) n->flags |= FLAG_SYSTEM; } /* Note that we add a trailing separator to `.zip' names as well. This is a little hack that lets the searching code in jcf-io.c work more easily. Eww. */ ! if (! IS_DIR_SEPARATOR (filename[len - 1])) { ! char *f2 = alloca (len + 2); strcpy (f2, filename); f2[len] = DIR_SEPARATOR; f2[len + 1] = '\0'; *************** add_path (entp, cp, is_system) *** 197,203 **** if (cp) { ! char *buf = (char *) alloca (strlen (cp) + 3); startp = endp = cp; while (1) { --- 193,199 ---- if (cp) { ! char *buf = alloca (strlen (cp) + 3); startp = endp = cp; while (1) { *************** jcf_path_init () *** 244,250 **** sep[0] = DIR_SEPARATOR; sep[1] = '\0'; ! GET_ENV_PATH_LIST (cp, "GCC_EXEC_PREFIX"); if (cp) { try = alloca (strlen (cp) + 50); --- 240,246 ---- sep[0] = DIR_SEPARATOR; sep[1] = '\0'; ! GET_ENVIRONMENT (cp, "GCC_EXEC_PREFIX"); if (cp) { try = alloca (strlen (cp) + 50); *************** jcf_path_init () *** 305,311 **** /* Desperation: use the installed one. */ char *extdirs; add_entry (&sys_dirs, LIBGCJ_ZIP_FILE, 1); ! extdirs = (char *) alloca (strlen (LIBGCJ_ZIP_FILE) + 1); strcpy (extdirs, LIBGCJ_ZIP_FILE); strcpy (&extdirs[strlen (LIBGCJ_ZIP_FILE) - strlen ("libgcj-" DEFAULT_TARGET_VERSION ".jar")], --- 301,307 ---- /* Desperation: use the installed one. */ char *extdirs; add_entry (&sys_dirs, LIBGCJ_ZIP_FILE, 1); ! extdirs = alloca (strlen (LIBGCJ_ZIP_FILE) + 1); strcpy (extdirs, LIBGCJ_ZIP_FILE); strcpy (&extdirs[strlen (LIBGCJ_ZIP_FILE) - strlen ("libgcj-" DEFAULT_TARGET_VERSION ".jar")], *************** jcf_path_init () *** 315,321 **** jcf_path_extdirs_arg (extdirs); } ! GET_ENV_PATH_LIST (cp, "CLASSPATH"); add_path (&classpath_env, cp, 0); } --- 311,317 ---- jcf_path_extdirs_arg (extdirs); } ! GET_ENVIRONMENT (cp, "CLASSPATH"); add_path (&classpath_env, cp, 0); } *************** jcf_path_extdirs_arg (cp) *** 352,358 **** if (cp) { ! char *buf = (char *) alloca (strlen (cp) + 3); startp = endp = cp; while (1) { --- 348,354 ---- if (cp) { ! char *buf = alloca (strlen (cp) + 3); startp = endp = cp; while (1) { *************** jcf_path_extdirs_arg (cp) *** 381,391 **** if (direntp->d_name[0] != '.') { ! char *name = ! (char *) alloca (dirname_length ! + strlen (direntp->d_name) + 2); strcpy (name, buf); ! if (name[dirname_length-1] != DIR_SEPARATOR) { name[dirname_length] = DIR_SEPARATOR; name[dirname_length+1] = 0; --- 377,386 ---- if (direntp->d_name[0] != '.') { ! char *name = alloca (dirname_length ! + strlen (direntp->d_name) + 2); strcpy (name, buf); ! if (! IS_DIR_SEPARATOR (name[dirname_length-1])) { name[dirname_length] = DIR_SEPARATOR; name[dirname_length+1] = 0; diff -Nrc3pad gcc-3.2.3/gcc/java/jcf-reader.c gcc-3.3/gcc/java/jcf-reader.c *** gcc-3.2.3/gcc/java/jcf-reader.c 2001-03-23 19:42:25.000000000 +0000 --- gcc-3.3/gcc/java/jcf-reader.c 2002-11-25 14:22:06.000000000 +0000 *************** skip_attribute (jcf, number_of_attribute *** 96,104 **** { while (number_of_attribute--) { JCF_FILL (jcf, 6); (void) JCF_readu2 (jcf); ! JCF_SKIP (jcf, JCF_readu4 (jcf)); } } #endif --- 96,106 ---- { while (number_of_attribute--) { + JCF_u4 N; JCF_FILL (jcf, 6); (void) JCF_readu2 (jcf); ! N = JCF_readu4 (jcf); ! JCF_SKIP (jcf, N); } } #endif diff -Nrc3pad gcc-3.2.3/gcc/java/jcf-write.c gcc-3.3/gcc/java/jcf-write.c *** gcc-3.2.3/gcc/java/jcf-write.c 2002-06-04 16:45:54.000000000 +0000 --- gcc-3.3/gcc/java/jcf-write.c 2003-04-10 14:54:08.000000000 +0000 *************** struct jcf_partial *** 276,281 **** --- 276,284 ---- /* Information about the current switch statement. */ struct jcf_switch_state *sw_state; + + /* The count of jsr instructions that have been emmitted. */ + long num_jsrs; }; static void generate_bytecode_insns PARAMS ((tree, int, struct jcf_partial *)); *************** static void define_jcf_label PARAMS ((st *** 292,298 **** static struct jcf_block * get_jcf_label_here PARAMS ((struct jcf_partial *)); static void put_linenumber PARAMS ((int, struct jcf_partial *)); static void localvar_alloc PARAMS ((tree, struct jcf_partial *)); ! static void localvar_free PARAMS ((tree, struct jcf_partial *)); static int get_access_flags PARAMS ((tree)); static void write_chunks PARAMS ((FILE *, struct chunk *)); static int adjust_typed_op PARAMS ((tree, int)); --- 295,301 ---- static struct jcf_block * get_jcf_label_here PARAMS ((struct jcf_partial *)); static void put_linenumber PARAMS ((int, struct jcf_partial *)); static void localvar_alloc PARAMS ((tree, struct jcf_partial *)); ! static void maybe_free_localvar PARAMS ((tree, struct jcf_partial *, int)); static int get_access_flags PARAMS ((tree)); static void write_chunks PARAMS ((FILE *, struct chunk *)); static int adjust_typed_op PARAMS ((tree, int)); *************** localvar_alloc (decl, state) *** 626,634 **** } static void ! localvar_free (decl, state) tree decl; struct jcf_partial *state; { struct jcf_block *end_label = get_jcf_label_here (state); int index = DECL_LOCAL_INDEX (decl); --- 629,638 ---- } static void ! maybe_free_localvar (decl, state, really) tree decl; struct jcf_partial *state; + int really; { struct jcf_block *end_label = get_jcf_label_here (state); int index = DECL_LOCAL_INDEX (decl); *************** localvar_free (decl, state) *** 640,645 **** --- 644,651 ---- if (info->decl != decl) abort (); + if (! really) + return; ptr[0] = NULL; if (wide) { *************** get_access_flags (decl) *** 683,688 **** --- 689,698 ---- flags |= ACC_INTERFACE; if (CLASS_STATIC (decl)) flags |= ACC_STATIC; + if (CLASS_PRIVATE (decl)) + flags |= ACC_PRIVATE; + if (CLASS_PROTECTED (decl)) + flags |= ACC_PROTECTED; if (ANONYMOUS_CLASS_P (TREE_TYPE (decl)) || LOCAL_CLASS_P (TREE_TYPE (decl))) flags |= ACC_PRIVATE; *************** find_constant_index (value, state) *** 822,842 **** else if (TREE_CODE (value) == REAL_CST) { long words[2]; if (TYPE_PRECISION (TREE_TYPE (value)) == 32) ! { ! words[0] = etarsingle (TREE_REAL_CST (value)) & 0xFFFFFFFF; ! return find_constant1 (&state->cpool, CONSTANT_Float, ! (jword)words[0]); ! } else ! { ! etardouble (TREE_REAL_CST (value), words); ! return find_constant2 (&state->cpool, CONSTANT_Double, ! (jword)(words[1-FLOAT_WORDS_BIG_ENDIAN] & ! 0xFFFFFFFF), ! (jword)(words[FLOAT_WORDS_BIG_ENDIAN] & ! 0xFFFFFFFF)); ! } } else if (TREE_CODE (value) == STRING_CST) return find_string_constant (&state->cpool, value); --- 832,849 ---- else if (TREE_CODE (value) == REAL_CST) { long words[2]; + + real_to_target (words, &TREE_REAL_CST (value), + TYPE_MODE (TREE_TYPE (value))); + words[0] &= 0xffffffff; + words[1] &= 0xffffffff; + if (TYPE_PRECISION (TREE_TYPE (value)) == 32) ! return find_constant1 (&state->cpool, CONSTANT_Float, (jword)words[0]); else ! return find_constant2 (&state->cpool, CONSTANT_Double, ! (jword)words[1-FLOAT_WORDS_BIG_ENDIAN], ! (jword)words[FLOAT_WORDS_BIG_ENDIAN]); } else if (TREE_CODE (value) == STRING_CST) return find_string_constant (&state->cpool, value); *************** emit_jsr (target, state) *** 1143,1148 **** --- 1150,1156 ---- OP1 (OPCODE_jsr); /* Value is 1 byte from reloc back to start of instruction. */ emit_reloc (RELOCATION_VALUE_1, OPCODE_jsr_w, target, state); + state->num_jsrs++; } /* Generate code to evaluate EXP. If the result is true, *************** generate_bytecode_return (exp, state) *** 1430,1436 **** emit_store (state->return_value_decl, state); call_cleanups (NULL, state); emit_load (state->return_value_decl, state); ! /* If we call localvar_free (state->return_value_decl, state), then we risk the save decl erroneously re-used in the finalizer. Instead, we keep the state->return_value_decl allocated through the rest of the method. This is not --- 1438,1444 ---- emit_store (state->return_value_decl, state); call_cleanups (NULL, state); emit_load (state->return_value_decl, state); ! /* If we call maybe_free_localvar (state->return_value_decl, state, 1), then we risk the save decl erroneously re-used in the finalizer. Instead, we keep the state->return_value_decl allocated through the rest of the method. This is not *************** generate_bytecode_insns (exp, target, st *** 1470,1475 **** --- 1478,1484 ---- { tree local; tree body = BLOCK_EXPR_BODY (exp); + long jsrs = state->num_jsrs; for (local = BLOCK_EXPR_DECLS (exp); local; ) { tree next = TREE_CHAIN (local); *************** generate_bytecode_insns (exp, target, st *** 1483,1492 **** body = TREE_OPERAND (body, 1); } generate_bytecode_insns (body, target, state); for (local = BLOCK_EXPR_DECLS (exp); local; ) { tree next = TREE_CHAIN (local); ! localvar_free (local, state); local = next; } } --- 1492,1502 ---- body = TREE_OPERAND (body, 1); } generate_bytecode_insns (body, target, state); + for (local = BLOCK_EXPR_DECLS (exp); local; ) { tree next = TREE_CHAIN (local); ! maybe_free_localvar (local, state, state->num_jsrs <= jsrs); local = next; } } *************** generate_bytecode_insns (exp, target, st *** 1743,1748 **** --- 1753,1759 ---- else { HOST_WIDE_INT i; + unsigned HOST_WIDE_INT delta; /* Copy the chain of relocs into a sorted array. */ struct jcf_relocation **relocs = (struct jcf_relocation **) xmalloc (sw_state.num_cases * sizeof (struct jcf_relocation *)); *************** generate_bytecode_insns (exp, target, st *** 1775,1782 **** handled by the parser. */ } ! if (2 * sw_state.num_cases ! >= sw_state.max_case - sw_state.min_case) { /* Use tableswitch. */ int index = 0; RESERVE (13 + 4 * (sw_state.max_case - sw_state.min_case + 1)); --- 1786,1796 ---- handled by the parser. */ } ! /* We could have DELTA < 0 if sw_state.min_case is ! something like Integer.MIN_VALUE. That is why delta is ! unsigned. */ ! delta = sw_state.max_case - sw_state.min_case; ! if (2 * (unsigned) sw_state.num_cases >= delta) { /* Use tableswitch. */ int index = 0; RESERVE (13 + 4 * (sw_state.max_case - sw_state.min_case + 1)); *************** generate_bytecode_insns (exp, target, st *** 2436,2443 **** if (CAN_COMPLETE_NORMALLY (finally)) { maybe_wide (OPCODE_ret, DECL_LOCAL_INDEX (return_link), state); ! localvar_free (exception_decl, state); ! localvar_free (return_link, state); define_jcf_label (finished_label, state); } } --- 2450,2457 ---- if (CAN_COMPLETE_NORMALLY (finally)) { maybe_wide (OPCODE_ret, DECL_LOCAL_INDEX (return_link), state); ! maybe_free_localvar (exception_decl, state, 1); ! maybe_free_localvar (return_link, state, 1); define_jcf_label (finished_label, state); } } *************** perform_relocations (state) *** 2677,2682 **** --- 2691,2727 ---- shrink += 3; } + /* Optimize GOTO L; ... L: GOTO X by changing the first goto to + jump directly to X. We're careful here to avoid an infinite + loop if the `goto's themselves form one. We do this + optimization because we can generate a goto-to-goto for some + try/finally blocks. */ + while (reloc != NULL + && reloc->kind == OPCODE_goto_w + && reloc->label != block + && reloc->label->v.chunk->data != NULL + && reloc->label->v.chunk->data[0] == OPCODE_goto) + { + /* Find the reloc for the first instruction of the + destination block. */ + struct jcf_relocation *first_reloc; + for (first_reloc = reloc->label->u.relocations; + first_reloc; + first_reloc = first_reloc->next) + { + if (first_reloc->offset == 1 + && first_reloc->kind == OPCODE_goto_w) + { + reloc->label = first_reloc->label; + break; + } + } + + /* If we didn't do anything, exit the loop. */ + if (first_reloc == NULL) + break; + } + for (reloc = block->u.relocations; reloc != NULL; reloc = reloc->next) { if (reloc->kind == SWITCH_ALIGN_RELOC) *************** release_jcf_state (state) *** 2853,2858 **** --- 2898,2904 ---- in the .class file representation. The list can be written to a .class file using write_chunks. Allocate chunks from obstack WORK. */ + static GTY(()) tree SourceFile_node; static struct chunk * generate_classfile (clas, state) tree clas; *************** generate_classfile (clas, state) *** 2866,2872 **** int fields_count = 0; char *methods_count_ptr; int methods_count = 0; - static tree SourceFile_node = NULL_TREE; tree part; int total_supers = clas == object_type_node ? 0 --- 2912,2917 ---- *************** generate_classfile (clas, state) *** 2931,2937 **** if (have_value) attr_count++; ! if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part)) attr_count++; PUT2 (attr_count); /* attributes_count */ --- 2976,2982 ---- if (have_value) attr_count++; ! if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part) || FIELD_SYNTHETIC (part)) attr_count++; PUT2 (attr_count); /* attributes_count */ *************** generate_classfile (clas, state) *** 2949,2956 **** PUT4 (2); /* attribute_length */ i = find_constant_index (init, state); PUT2 (i); } ! /* Emit the "Synthetic" attribute for val$ and this$ fields. */ ! if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part)) ptr = append_synthetic_attribute (state); fields_count++; } --- 2994,3003 ---- PUT4 (2); /* attribute_length */ i = find_constant_index (init, state); PUT2 (i); } ! /* Emit the "Synthetic" attribute for val$ and this$ ! fields and other fields which need it. */ ! if (FIELD_THISN (part) || FIELD_LOCAL_ALIAS (part) ! || FIELD_SYNTHETIC (part)) ptr = append_synthetic_attribute (state); fields_count++; } *************** generate_classfile (clas, state) *** 3009,3014 **** --- 3056,3062 ---- get_jcf_label_here (state); /* Force a first block. */ for (t = DECL_ARGUMENTS (part); t != NULL_TREE; t = TREE_CHAIN (t)) localvar_alloc (t, state); + state->num_jsrs = 0; generate_bytecode_insns (body, IGNORE_TARGET, state); if (CAN_COMPLETE_NORMALLY (body)) { *************** generate_classfile (clas, state) *** 3018,3026 **** OP1 (OPCODE_return); } for (t = DECL_ARGUMENTS (part); t != NULL_TREE; t = TREE_CHAIN (t)) ! localvar_free (t, state); if (state->return_value_decl != NULL_TREE) ! localvar_free (state->return_value_decl, state); finish_jcf_block (state); perform_relocations (state); --- 3066,3074 ---- OP1 (OPCODE_return); } for (t = DECL_ARGUMENTS (part); t != NULL_TREE; t = TREE_CHAIN (t)) ! maybe_free_localvar (t, state, 1); if (state->return_value_decl != NULL_TREE) ! maybe_free_localvar (state->return_value_decl, state, 1); finish_jcf_block (state); perform_relocations (state); *************** generate_classfile (clas, state) *** 3154,3160 **** if (SourceFile_node == NULL_TREE) { SourceFile_node = get_identifier ("SourceFile"); - ggc_add_tree_root (&SourceFile_node, 1); } i = find_utf8_constant (&state->cpool, SourceFile_node); --- 3202,3207 ---- *************** generate_classfile (clas, state) *** 3174,3191 **** return state->first; } static unsigned char * append_synthetic_attribute (state) struct jcf_partial *state; { - static tree Synthetic_node = NULL_TREE; unsigned char *ptr = append_chunk (NULL, 6, state); int i; if (Synthetic_node == NULL_TREE) { Synthetic_node = get_identifier ("Synthetic"); - ggc_add_tree_root (&Synthetic_node, 1); } i = find_utf8_constant (&state->cpool, Synthetic_node); PUT2 (i); /* Attribute string index */ --- 3221,3237 ---- return state->first; } + static GTY(()) tree Synthetic_node; static unsigned char * append_synthetic_attribute (state) struct jcf_partial *state; { unsigned char *ptr = append_chunk (NULL, 6, state); int i; if (Synthetic_node == NULL_TREE) { Synthetic_node = get_identifier ("Synthetic"); } i = find_utf8_constant (&state->cpool, Synthetic_node); PUT2 (i); /* Attribute string index */ *************** append_gcj_attribute (state, class) *** 3212,3223 **** PUT4 (0); /* Attribute length */ } static void append_innerclasses_attribute (state, class) struct jcf_partial *state; tree class; { - static tree InnerClasses_node = NULL_TREE; tree orig_decl = TYPE_NAME (class); tree current, decl; int length = 0, i; --- 3258,3269 ---- PUT4 (0); /* Attribute length */ } + static tree InnerClasses_node; static void append_innerclasses_attribute (state, class) struct jcf_partial *state; tree class; { tree orig_decl = TYPE_NAME (class); tree current, decl; int length = 0, i; *************** append_innerclasses_attribute (state, cl *** 3231,3237 **** if (InnerClasses_node == NULL_TREE) { InnerClasses_node = get_identifier ("InnerClasses"); - ggc_add_tree_root (&InnerClasses_node, 1); } i = find_utf8_constant (&state->cpool, InnerClasses_node); PUT2 (i); --- 3277,3282 ---- *************** make_class_file_name (clas) *** 3302,3307 **** --- 3347,3353 ---- const char *dname, *cname, *slash; char *r; struct stat sb; + char sep; cname = IDENTIFIER_POINTER (identifier_subst (DECL_NAME (TYPE_NAME (clas)), "", '.', DIR_SEPARATOR, *************** make_class_file_name (clas) *** 3313,3336 **** char *t; dname = DECL_SOURCE_FILE (TYPE_NAME (clas)); slash = strrchr (dname, DIR_SEPARATOR); if (! slash) ! { ! dname = "."; ! slash = dname + 1; ! } t = strrchr (cname, DIR_SEPARATOR); if (t) cname = t + 1; } else { dname = jcf_write_base_directory; slash = dname + strlen (dname); } r = xmalloc (slash - dname + strlen (cname) + 2); strncpy (r, dname, slash - dname); ! r[slash - dname] = DIR_SEPARATOR; strcpy (&r[slash - dname + 1], cname); /* We try to make new directories when we need them. We only do --- 3359,3403 ---- char *t; dname = DECL_SOURCE_FILE (TYPE_NAME (clas)); slash = strrchr (dname, DIR_SEPARATOR); + #ifdef DIR_SEPARATOR_2 if (! slash) ! slash = strrchr (dname, DIR_SEPARATOR_2); ! #endif ! if (! slash) ! { ! dname = "."; ! slash = dname + 1; ! sep = DIR_SEPARATOR; ! } ! else ! sep = *slash; ! t = strrchr (cname, DIR_SEPARATOR); if (t) cname = t + 1; } else { + char *s; + dname = jcf_write_base_directory; + + s = strrchr (dname, DIR_SEPARATOR); + #ifdef DIR_SEPARATOR_2 + if (! s) + s = strrchr (dname, DIR_SEPARATOR_2); + #endif + if (s) + sep = *s; + else + sep = DIR_SEPARATOR; + slash = dname + strlen (dname); } r = xmalloc (slash - dname + strlen (cname) + 2); strncpy (r, dname, slash - dname); ! r[slash - dname] = sep; strcpy (&r[slash - dname + 1], cname); /* We try to make new directories when we need them. We only do *************** make_class_file_name (clas) *** 3342,3348 **** dname = r + (slash - dname) + 1; while (1) { ! char *s = strchr (dname, DIR_SEPARATOR); if (s == NULL) break; *s = '\0'; --- 3409,3415 ---- dname = r + (slash - dname) + 1; while (1) { ! char *s = strchr (dname, sep); if (s == NULL) break; *s = '\0'; *************** make_class_file_name (clas) *** 3351,3359 **** && mkdir (r, 0755) == -1) fatal_io_error ("can't create directory %s", r); ! *s = DIR_SEPARATOR; /* Skip consecutive separators. */ ! for (dname = s + 1; *dname && *dname == DIR_SEPARATOR; ++dname) ; } --- 3418,3426 ---- && mkdir (r, 0755) == -1) fatal_io_error ("can't create directory %s", r); ! *s = sep; /* Skip consecutive separators. */ ! for (dname = s + 1; *dname && *dname == sep; ++dname) ; } *************** write_classfile (clas) *** 3391,3396 **** --- 3458,3472 ---- write_chunks (stream, chunks); if (fclose (stream)) fatal_io_error ("error closing %s", temporary_file_name); + + /* If a file named by the string pointed to by `new' exists + prior to the call to the `rename' function, the bahaviour + is implementation-defined. ISO 9899-1990 7.9.4.2. + + For example, on Win32 with MSVCRT, it is an error. */ + + unlink (class_file_name); + if (rename (temporary_file_name, class_file_name) == -1) { remove (temporary_file_name); *************** write_classfile (clas) *** 3406,3408 **** --- 3482,3486 ---- string concatenation synchronized statement */ + + #include "gt-java-jcf-write.h" diff -Nrc3pad gcc-3.2.3/gcc/java/jv-convert.1 gcc-3.3/gcc/java/jv-convert.1 *** gcc-3.2.3/gcc/java/jv-convert.1 2003-04-22 07:07:38.000000000 +0000 --- gcc-3.3/gcc/java/jv-convert.1 2003-05-14 00:32:12.000000000 +0000 *************** *** 1,8 **** ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Tue Apr 22 07:07:38 2003 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,7 ---- ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 15,26 **** .if t .sp .5v .if n .sp .. - .de Ip \" List item - .br - .ie \\n(.$>=3 .ne \\$3 - .el .ne 3 - .IP "\\$1" \\$2 - .. .de Vb \" Begin verbatim text .ft CW .nf --- 14,19 ---- *************** *** 28,42 **** .. .de Ve \" End verbatim text .ft R - .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 21,34 ---- .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 56,65 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 48,57 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 68,81 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. - .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 60,72 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 135,147 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "JV-CONVERT 1" ! .TH JV-CONVERT 1 "gcc-3.2.3" "2003-04-22" "GNU" ! .UC .SH "NAME" ! jv-convert \- Convert file from one encoding to another .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBjv-convert\fR [\fB\s-1OPTION\s0\fR] ... [\fI\s-1INPUTFILE\s0\fR [\fI\s-1OUTPUTFILE\s0\fR]] --- 126,137 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "JV-CONVERT 1" ! .TH JV-CONVERT 1 "2003-05-14" "gcc-3.3" "GNU" .SH "NAME" ! jv\-convert \- Convert file from one encoding to another .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBjv-convert\fR [\fB\s-1OPTION\s0\fR] ... [\fI\s-1INPUTFILE\s0\fR [\fI\s-1OUTPUTFILE\s0\fR]] *************** jv-convert \- Convert file from one enco *** 151,198 **** converts a file from one encoding to another. It is similar to the Unix \&\fBiconv\fR utility. .PP ! The encodings supported by \fBjv-convert\fR are platform-dependent. Currently there is no way to get a list of all supported encodings. .SH "OPTIONS" .IX Header "OPTIONS" ! .Ip "\fB\*(--encoding\fR \fIname\fR" 4 ! .IX Item "encoding name" .PD 0 ! .Ip "\fB\*(--from\fR \fIname\fR" 4 ! .IX Item "from name" .PD Use \fIname\fR as the input encoding. The default is the current locale's encoding. ! .Ip "\fB\*(--to\fR \fIname\fR" 4 ! .IX Item "to name" Use \fIname\fR as the output encoding. The default is the \&\f(CW\*(C`JavaSrc\*(C'\fR encoding; this is \s-1ASCII\s0 with \fB\eu\fR escapes for non-ASCII characters. ! .Ip "\fB\-i\fR \fIfile\fR" 4 .IX Item "-i file" Read from \fIfile\fR. The default is to read from standard input. ! .Ip "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Write to \fIfile\fR. The default is to write to standard output. ! .Ip "\fB\*(--reverse\fR" 4 ! .IX Item "reverse" Swap the input and output encodings. ! .Ip "\fB\*(--help\fR" 4 ! .IX Item "help" Print a help message, then exit. ! .Ip "\fB\*(--version\fR" 4 ! .IX Item "version" Print version information, then exit. .SH "SEE ALSO" .IX Header "SEE ALSO" .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). --- 141,202 ---- converts a file from one encoding to another. It is similar to the Unix \&\fBiconv\fR utility. .PP ! The encodings supported by \fBjv-convert\fR are platform\-dependent. Currently there is no way to get a list of all supported encodings. .SH "OPTIONS" .IX Header "OPTIONS" ! .IP "\fB\-\-encoding\fR \fIname\fR" 4 ! .IX Item "--encoding name" .PD 0 ! .IP "\fB\-\-from\fR \fIname\fR" 4 ! .IX Item "--from name" .PD Use \fIname\fR as the input encoding. The default is the current locale's encoding. ! .IP "\fB\-\-to\fR \fIname\fR" 4 ! .IX Item "--to name" Use \fIname\fR as the output encoding. The default is the \&\f(CW\*(C`JavaSrc\*(C'\fR encoding; this is \s-1ASCII\s0 with \fB\eu\fR escapes for non-ASCII characters. ! .IP "\fB\-i\fR \fIfile\fR" 4 .IX Item "-i file" Read from \fIfile\fR. The default is to read from standard input. ! .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Write to \fIfile\fR. The default is to write to standard output. ! .IP "\fB\-\-reverse\fR" 4 ! .IX Item "--reverse" Swap the input and output encodings. ! .IP "\fB\-\-help\fR" 4 ! .IX Item "--help" Print a help message, then exit. ! .IP "\fB\-\-version\fR" 4 ! .IX Item "--version" Print version information, then exit. .SH "SEE ALSO" .IX Header "SEE ALSO" .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (c) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). + .PP + (a) The \s-1FSF\s0's Front-Cover Text is: + .PP + .Vb 1 + \& A GNU Manual + .Ve + .PP + (b) The \s-1FSF\s0's Back-Cover Text is: + .PP + .Vb 3 + \& You have freedom to copy and modify this GNU Manual, like GNU + \& software. Copies published by the Free Software Foundation raise + \& funds for GNU development. + .Ve diff -Nrc3pad gcc-3.2.3/gcc/java/jv-scan.1 gcc-3.3/gcc/java/jv-scan.1 *** gcc-3.2.3/gcc/java/jv-scan.1 2003-04-22 07:07:37.000000000 +0000 --- gcc-3.3/gcc/java/jv-scan.1 2003-05-14 00:32:10.000000000 +0000 *************** *** 1,8 **** ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Tue Apr 22 07:07:37 2003 .\" .\" Standard preamble: ! .\" ====================================================================== .de Sh \" Subsection heading .br .if t .Sp --- 1,7 ---- ! .\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13 .\" .\" Standard preamble: ! .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp *************** *** 15,26 **** .if t .sp .5v .if n .sp .. - .de Ip \" List item - .br - .ie \\n(.$>=3 .ne \\$3 - .el .ne 3 - .IP "\\$1" \\$2 - .. .de Vb \" Begin verbatim text .ft CW .nf --- 14,19 ---- *************** *** 28,42 **** .. .de Ve \" End verbatim text .ft R - .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ --- 21,34 ---- .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to ! .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' ! .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ *************** *** 56,65 **** . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" --- 48,57 ---- . ds R" '' 'br\} .\" ! .\" If the F register is turned on, we'll generate index entries on stderr for ! .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index ! .\" entries marked with X<> in POD. Of course, you'll have to process the ! .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" *************** *** 68,81 **** . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. - .bd B 3 . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 --- 60,72 ---- . rr F .\} .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it makes ! .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 *************** *** 135,152 **** . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ====================================================================== .\" .IX Title "JV-SCAN 1" ! .TH JV-SCAN 1 "gcc-3.2.3" "2003-04-22" "GNU" ! .UC .SH "NAME" ! jv-scan \- print information about Java source file .SH "SYNOPSIS" .IX Header "SYNOPSIS" ! jv-scan [\fB\*(--complexity\fR] [\fB\*(--encoding\fR=\fIname\fR] ! [\fB\*(--print-main\fR] [\fB\*(--list-class\fR] [\fB\*(--list-filename\fR] ! [\fB\*(--version\fR] [\fB\*(--help\fR] [\fB\-o\fR \fIfile\fR] \fIinputfile\fR... .SH "DESCRIPTION" .IX Header "DESCRIPTION" --- 126,143 ---- . ds Ae AE .\} .rm #[ #] #H #V #F C ! .\" ======================================================================== .\" .IX Title "JV-SCAN 1" ! .TH JV-SCAN 1 "2003-05-14" "gcc-3.3" "GNU" .SH "NAME" ! jv\-scan \- print information about Java source file .SH "SYNOPSIS" .IX Header "SYNOPSIS" ! jv-scan [\fB\-\-no\-assert\fR] [\fB\-\-complexity\fR] ! [\fB\-\-encoding\fR=\fIname\fR] [\fB\-\-print\-main\fR] ! [\fB\-\-list\-class\fR] [\fB\-\-list\-filename\fR] ! [\fB\-\-version\fR] [\fB\-\-help\fR] [\fB\-o\fR \fIfile\fR] \fIinputfile\fR... .SH "DESCRIPTION" .IX Header "DESCRIPTION" *************** The \f(CW\*(C`jv\-scan\*(C'\fR program c *** 154,198 **** source file (\fI.java\fR file). .SH "OPTIONS" .IX Header "OPTIONS" ! .Ip "\fB\*(--complexity\fR" 4 ! .IX Item "complexity" This prints a complexity measure, related to cyclomatic complexity, for each input file. ! .Ip "\fB\*(--encoding=\fR\fIname\fR" 4 ! .IX Item "encoding=name" This works like the corresponding \fBgcj\fR option. ! .Ip "\fB\*(--print-main\fR" 4 ! .IX Item "print-main" This prints the name of the class in this file containing a \f(CW\*(C`main\*(C'\fR method. ! .Ip "\fB\*(--list-class\fR" 4 ! .IX Item "list-class" This lists the names of all classes defined in the input files. ! .Ip "\fB\*(--list-filename\fR" 4 ! .IX Item "list-filename" If \f(CW\*(C`\-\-list\-class\*(C'\fR is given, this option causes \f(CW\*(C`jv\-scan\*(C'\fR to also print the name of the file in which each class was found. ! .Ip "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Print output to the named file. ! .Ip "\fB\*(--help\fR" 4 ! .IX Item "help" Print help, then exit. ! .Ip "\fB\*(--version\fR" 4 ! .IX Item "version" Print version number, then exit. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcj\fR\|(1), \fIgcjh\fR\|(1), \fIgij\fR\|(1), \fIjcf-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (C) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). --- 145,207 ---- source file (\fI.java\fR file). .SH "OPTIONS" .IX Header "OPTIONS" ! .IP "\fB\-\-no\-assert\fR" 4 ! .IX Item "--no-assert" ! Don't recognize the \f(CW\*(C`assert\*(C'\fR keyword, for backwards compatibility ! with older versions of the language specification. ! .IP "\fB\-\-complexity\fR" 4 ! .IX Item "--complexity" This prints a complexity measure, related to cyclomatic complexity, for each input file. ! .IP "\fB\-\-encoding=\fR\fIname\fR" 4 ! .IX Item "--encoding=name" This works like the corresponding \fBgcj\fR option. ! .IP "\fB\-\-print\-main\fR" 4 ! .IX Item "--print-main" This prints the name of the class in this file containing a \f(CW\*(C`main\*(C'\fR method. ! .IP "\fB\-\-list\-class\fR" 4 ! .IX Item "--list-class" This lists the names of all classes defined in the input files. ! .IP "\fB\-\-list\-filename\fR" 4 ! .IX Item "--list-filename" If \f(CW\*(C`\-\-list\-class\*(C'\fR is given, this option causes \f(CW\*(C`jv\-scan\*(C'\fR to also print the name of the file in which each class was found. ! .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" Print output to the named file. ! .IP "\fB\-\-help\fR" 4 ! .IX Item "--help" Print help, then exit. ! .IP "\fB\-\-version\fR" 4 ! .IX Item "--version" Print version number, then exit. .SH "SEE ALSO" .IX Header "SEE ALSO" ! \&\fIgcc\fR\|(1), \fIgcj\fR\|(1), \fIgcjh\fR\|(1), \fIgij\fR\|(1), \fIjcf\-dump\fR\|(1), \fIgfdl\fR\|(7), and the Info entries for \fIgcj\fR and \fIgcc\fR. .SH "COPYRIGHT" .IX Header "COPYRIGHT" ! Copyright (c) 2001, 2002 Free Software Foundation, Inc. .PP Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the Invariant Sections being ``\s-1GNU\s0 General Public License'', the Front-Cover texts being (a) (see below), and with the Back-Cover Texts being (b) (see below). A copy of the license is included in the man page \fIgfdl\fR\|(7). + .PP + (a) The \s-1FSF\s0's Front-Cover Text is: + .PP + .Vb 1 + \& A GNU Manual + .Ve + .PP + (b) The \s-1FSF\s0's Back-Cover Text is: + .PP + .Vb 3 + \& You have freedom to copy and modify this GNU Manual, like GNU + \& software. Copies published by the Free Software Foundation raise + \& funds for GNU development. + .Ve diff -Nrc3pad gcc-3.2.3/gcc/java/jv-scan.c gcc-3.3/gcc/java/jv-scan.c *** gcc-3.2.3/gcc/java/jv-scan.c 2002-02-01 21:07:31.000000000 +0000 --- gcc-3.3/gcc/java/jv-scan.c 2003-02-03 14:06:32.000000000 +0000 *************** Boston, MA 02111-1307, USA. */ *** 30,36 **** #include #endif ! #ifdef HAVE_NL_LANGINFO #include #endif --- 30,36 ---- #include #endif ! #ifdef HAVE_LANGINFO_CODESET #include #endif *************** int flag_find_main = 0; *** 64,69 **** --- 64,70 ---- int flag_dump_class = 0; int flag_list_filename = 0; int flag_complexity = 0; + int flag_assert = 1; int pedantic = 0; *************** static const struct option options[] = *** 85,90 **** --- 86,93 ---- { "list-class", no_argument, &flag_dump_class, 1 }, { "encoding", required_argument, NULL, OPT_ENCODING }, { "complexity", no_argument, &flag_complexity, 1 }, + { "no-assert", no_argument, &flag_assert, 0 }, + { "assert", no_argument, &flag_assert, 1 }, { NULL, no_argument, NULL, 0 } }; *************** help () *** 100,105 **** --- 103,109 ---- { printf ("Usage: jv-scan [OPTION]... FILE...\n\n"); printf ("Print useful information read from Java source files.\n\n"); + printf (" --no-assert Don't recognize the assert keyword\n"); printf (" --complexity Print cyclomatic complexity of input file\n"); printf (" --encoding NAME Specify encoding of input file\n"); printf (" --print-main Print name of class containing `main'\n"); *************** help () *** 111,117 **** printf (" --version Print version number, then exit\n"); printf ("\n"); printf ("For bug reporting instructions, please see:\n"); ! printf ("%s.\n", GCCBUGURL); exit (0); } --- 115,121 ---- printf (" --version Print version number, then exit\n"); printf ("\n"); printf ("For bug reporting instructions, please see:\n"); ! printf ("%s.\n", bug_report_url); exit (0); } *************** DEFUN (main, (argc, argv), *** 199,205 **** /* There's no point in trying to find the current encoding unless we are going to do something intelligent with it -- hence the test for iconv. */ ! #if defined (HAVE_LOCALE_H) && defined (HAVE_ICONV) && defined (HAVE_NL_LANGINFO) setlocale (LC_CTYPE, ""); if (encoding == NULL) encoding = nl_langinfo (CODESET); --- 203,209 ---- /* There's no point in trying to find the current encoding unless we are going to do something intelligent with it -- hence the test for iconv. */ ! #if defined (HAVE_LOCALE_H) && defined (HAVE_ICONV) && defined (HAVE_LANGINFO_CODESET) setlocale (LC_CTYPE, ""); if (encoding == NULL) encoding = nl_langinfo (CODESET); diff -Nrc3pad gcc-3.2.3/gcc/java/jvspec.c gcc-3.3/gcc/java/jvspec.c *** gcc-3.2.3/gcc/java/jvspec.c 2002-04-23 22:55:00.000000000 +0000 --- gcc-3.3/gcc/java/jvspec.c 2002-11-19 04:37:50.000000000 +0000 *************** static const char jvgenmain_spec[] = *** 62,68 **** %{v:-version} %{pg:-p} %{p}\ %{= MIN_WORD_LENGTH) --- 105,173 ---- { static const struct java_keyword wordlist[] = { ! {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"else", ELSE_TK}, {"true", TRUE_TK}, {"case", CASE_TK}, + {"assert", ASSERT_TK}, + {"default", DEFAULT_TK}, {"", 0}, ! {"abstract", ABSTRACT_TK}, {"continue", CONTINUE_TK}, {"extends", EXTENDS_TK}, {"const", CONST_TK}, {"static", STATIC_TK}, {"this", THIS_TK}, ! {"long", LONG_TK}, {"class", CLASS_TK}, ! {"", 0}, {"synchronized", SYNCHRONIZED_TK}, ! {"do", DO_TK}, ! {"null", NULL_TK}, ! {"final", FINAL_TK}, ! {"float", FLOAT_TK}, {"super", SUPER_TK}, {"short", SHORT_TK}, {"", 0}, + {"false", FALSE_TK}, + {"transient", TRANSIENT_TK}, + {"catch", CATCH_TK}, {"int", INT_TK}, ! {"throws", THROWS_TK}, ! {"switch", SWITCH_TK}, {"for", FOR_TK}, + {"char", CHAR_TK}, {"", 0}, {"interface", INTERFACE_TK}, ! {"byte", BYTE_TK}, ! {"try", TRY_TK}, ! {"double", DOUBLE_TK}, ! {"while", WHILE_TK}, ! {"return", RETURN_TK}, {"implements", IMPLEMENTS_TK}, {"void", VOID_TK}, ! {"public", PUBLIC_TK}, {"if", IF_TK}, + {"protected", PROTECTED_TK}, + {"volatile", VOLATILE_TK}, + {"goto", GOTO_TK}, + {"", 0}, + {"native", NATIVE_TK}, {"break", BREAK_TK}, {"", 0}, + {"import", IMPORT_TK}, {"new", NEW_TK}, {"instanceof", INSTANCEOF_TK}, + {"package", PACKAGE_TK}, + {"boolean", BOOLEAN_TK}, {"", 0}, + {"finally", FINALLY_TK}, {"throw", THROW_TK}, + {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, ! {"strictfp", STRICT_TK}, ! {"", 0}, {"", 0}, {"", 0}, {"", 0}, {"", 0}, ! {"private", PRIVATE_TK} }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) diff -Nrc3pad gcc-3.2.3/gcc/java/lang.c gcc-3.3/gcc/java/lang.c *** gcc-3.2.3/gcc/java/lang.c 2002-10-06 23:02:12.000000000 +0000 --- gcc-3.3/gcc/java/lang.c 2003-01-05 15:03:25.000000000 +0000 *************** *** 1,5 **** /* Java(TM) language-specific utility routines. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Java(TM) language-specific utility routines. ! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** The Free Software Foundation is independ *** 40,45 **** --- 40,48 ---- #include "xref.h" #include "ggc.h" #include "diagnostic.h" + #include "tree-inline.h" + #include "splay-tree.h" + #include "tree-dump.h" struct string_option { *************** struct string_option *** 51,66 **** static const char *java_init PARAMS ((const char *)); static void java_finish PARAMS ((void)); static void java_init_options PARAMS ((void)); ! static void java_post_options PARAMS ((void)); static int java_decode_option PARAMS ((int, char **)); static void put_decl_string PARAMS ((const char *, int)); static void put_decl_node PARAMS ((tree)); ! static void java_dummy_print PARAMS ((diagnostic_context *, const char *)); ! static void lang_print_error PARAMS ((diagnostic_context *, const char *)); static int process_option_with_no PARAMS ((const char *, const struct string_option *, int)); #ifndef TARGET_OBJECT_SUFFIX # define TARGET_OBJECT_SUFFIX ".o" --- 54,82 ---- static const char *java_init PARAMS ((const char *)); static void java_finish PARAMS ((void)); static void java_init_options PARAMS ((void)); ! static bool java_post_options PARAMS ((void)); static int java_decode_option PARAMS ((int, char **)); static void put_decl_string PARAMS ((const char *, int)); static void put_decl_node PARAMS ((tree)); ! static void java_print_error_function PARAMS ((diagnostic_context *, ! const char *)); static int process_option_with_no PARAMS ((const char *, const struct string_option *, int)); + static tree java_tree_inlining_walk_subtrees PARAMS ((tree *, + int *, + walk_tree_fn, + void *, + void *)); + static int java_unsafe_for_reeval PARAMS ((tree)); + static int merge_init_test_initialization PARAMS ((void * *, + void *)); + static int inline_init_test_initialization PARAMS ((void * *, + void *)); + static bool java_can_use_bit_fields_p PARAMS ((void)); + static int java_dump_tree PARAMS ((void *, tree)); + static void dump_compound_expr PARAMS ((dump_info_p, tree)); #ifndef TARGET_OBJECT_SUFFIX # define TARGET_OBJECT_SUFFIX ".o" *************** static int process_option_with_no PARAMS *** 72,78 **** #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, ! static const char java_tree_code_type[] = { 'x', #include "java-tree.def" }; --- 88,95 ---- #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE, ! const char tree_code_type[] = { ! #include "tree.def" 'x', #include "java-tree.def" }; *************** static const char java_tree_code_type[] *** 84,90 **** #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH, ! static const int java_tree_code_length[] = { 0, #include "java-tree.def" }; --- 101,108 ---- #define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH, ! const unsigned char tree_code_length[] = { ! #include "tree.def" 0, #include "java-tree.def" }; *************** static const int java_tree_code_length[] *** 94,105 **** Used for printing out the tree and error messages. */ #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME, ! static const char *const java_tree_code_name[] = { "@@dummy", #include "java-tree.def" }; #undef DEFTREECODE int compiling_from_source; char * resource_name; --- 112,128 ---- Used for printing out the tree and error messages. */ #define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME, ! const char *const tree_code_name[] = { ! #include "tree.def" "@@dummy", #include "java-tree.def" }; #undef DEFTREECODE + /* Used to avoid printing error messages with bogus function + prototypes. Starts out false. */ + static bool inhibit_error_function_printing; + int compiling_from_source; char * resource_name; *************** int flag_emit_class_files = 0; *** 110,171 **** int flag_filelist_file = 0; ! /* When non zero, we emit xref strings. Values of the flag for xref backends are defined in xref_flag_table, xref.c. */ int flag_emit_xref = 0; ! /* When non zero, -Wall was turned on. */ int flag_wall = 0; ! /* When non zero, check for redundant modifier uses. */ int flag_redundant = 0; ! /* When non zero, call a library routine to do integer divisions. */ int flag_use_divide_subroutine = 1; ! /* When non zero, generate code for the Boehm GC. */ int flag_use_boehm_gc = 0; ! /* When non zero, assume the runtime uses a hash table to map an object to its synchronization structure. */ int flag_hash_synchronization; ! /* When non zero, assume all native functions are implemented with JNI, not CNI. */ int flag_jni = 0; ! /* When non zero, warn when source file is newer than matching class file. */ int flag_newer = 1; ! /* When non zero, generate checks for references to NULL. */ int flag_check_references = 0; /* The encoding of the source file. */ const char *current_encoding = NULL; ! /* When non zero, report the now deprecated empty statements. */ int flag_extraneous_semicolon; ! /* When non zero, always check for a non gcj generated classes archive. */ int flag_force_classes_archive_check; /* When zero, don't optimize static class initialization. This flag shouldn't be tested alone, use STATIC_CLASS_INITIALIZATION_OPTIMIZATION_P instead. */ int flag_optimize_sci = 1; ! /* When non zero, use offset tables for virtual method calls in order to improve binary compatibility. */ int flag_indirect_dispatch = 0; /* When zero, don't generate runtime array store checks. */ int flag_store_check = 1; ! /* When non zero, print extra version information. */ static int version_flag = 0; ! /* Set non-zero if the user specified -finline-functions on the command line. */ int flag_really_inline = 0; --- 133,197 ---- int flag_filelist_file = 0; ! /* When nonzero, we emit xref strings. Values of the flag for xref backends are defined in xref_flag_table, xref.c. */ int flag_emit_xref = 0; ! /* When nonzero, -Wall was turned on. */ int flag_wall = 0; ! /* When nonzero, check for redundant modifier uses. */ int flag_redundant = 0; ! /* When nonzero, call a library routine to do integer divisions. */ int flag_use_divide_subroutine = 1; ! /* When nonzero, generate code for the Boehm GC. */ int flag_use_boehm_gc = 0; ! /* When nonzero, assume the runtime uses a hash table to map an object to its synchronization structure. */ int flag_hash_synchronization; ! /* When nonzero, permit the use of the assert keyword. */ ! int flag_assert = 1; ! ! /* When nonzero, assume all native functions are implemented with JNI, not CNI. */ int flag_jni = 0; ! /* When nonzero, warn when source file is newer than matching class file. */ int flag_newer = 1; ! /* When nonzero, generate checks for references to NULL. */ int flag_check_references = 0; /* The encoding of the source file. */ const char *current_encoding = NULL; ! /* When nonzero, report the now deprecated empty statements. */ int flag_extraneous_semicolon; ! /* When nonzero, always check for a non gcj generated classes archive. */ int flag_force_classes_archive_check; /* When zero, don't optimize static class initialization. This flag shouldn't be tested alone, use STATIC_CLASS_INITIALIZATION_OPTIMIZATION_P instead. */ int flag_optimize_sci = 1; ! /* When nonzero, use offset tables for virtual method calls in order to improve binary compatibility. */ int flag_indirect_dispatch = 0; /* When zero, don't generate runtime array store checks. */ int flag_store_check = 1; ! /* When nonzero, print extra version information. */ static int version_flag = 0; ! /* Set nonzero if the user specified -finline-functions on the command line. */ int flag_really_inline = 0; *************** lang_f_options[] = *** 189,195 **** {"force-classes-archive-check", &flag_force_classes_archive_check, 1}, {"optimize-static-class-initialization", &flag_optimize_sci, 1 }, {"indirect-dispatch", &flag_indirect_dispatch, 1}, ! {"store-check", &flag_store_check, 1} }; static const struct string_option --- 215,222 ---- {"force-classes-archive-check", &flag_force_classes_archive_check, 1}, {"optimize-static-class-initialization", &flag_optimize_sci, 1 }, {"indirect-dispatch", &flag_indirect_dispatch, 1}, ! {"store-check", &flag_store_check, 1}, ! {"assert", &flag_assert, 1} }; static const struct string_option *************** static int dependency_tracking = 0; *** 212,217 **** --- 239,249 ---- #define DEPEND_TARGET_SET 4 #define DEPEND_FILE_ALREADY_SET 8 + struct language_function GTY(()) + { + int unused; + }; + #undef LANG_HOOKS_NAME #define LANG_HOOKS_NAME "GNU Java" #undef LANG_HOOKS_INIT *************** static int dependency_tracking = 0; *** 224,231 **** #define LANG_HOOKS_DECODE_OPTION java_decode_option #undef LANG_HOOKS_POST_OPTIONS #define LANG_HOOKS_POST_OPTIONS java_post_options ! #undef LANG_HOOKS_SET_YYDEBUG ! #define LANG_HOOKS_SET_YYDEBUG java_set_yydebug /* Each front end provides its own. */ const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; --- 256,296 ---- #define LANG_HOOKS_DECODE_OPTION java_decode_option #undef LANG_HOOKS_POST_OPTIONS #define LANG_HOOKS_POST_OPTIONS java_post_options ! #undef LANG_HOOKS_PARSE_FILE ! #define LANG_HOOKS_PARSE_FILE java_parse_file ! #undef LANG_HOOKS_UNSAFE_FOR_REEVAL ! #define LANG_HOOKS_UNSAFE_FOR_REEVAL java_unsafe_for_reeval ! #undef LANG_HOOKS_MARK_ADDRESSABLE ! #define LANG_HOOKS_MARK_ADDRESSABLE java_mark_addressable ! #undef LANG_HOOKS_EXPAND_EXPR ! #define LANG_HOOKS_EXPAND_EXPR java_expand_expr ! #undef LANG_HOOKS_TRUTHVALUE_CONVERSION ! #define LANG_HOOKS_TRUTHVALUE_CONVERSION java_truthvalue_conversion ! #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL ! #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL java_dup_lang_specific_decl ! #undef LANG_HOOKS_DECL_PRINTABLE_NAME ! #define LANG_HOOKS_DECL_PRINTABLE_NAME lang_printable_name ! #undef LANG_HOOKS_PRINT_ERROR_FUNCTION ! #define LANG_HOOKS_PRINT_ERROR_FUNCTION java_print_error_function ! #undef LANG_HOOKS_CAN_USE_BIT_FIELDS_P ! #define LANG_HOOKS_CAN_USE_BIT_FIELDS_P java_can_use_bit_fields_p ! ! #undef LANG_HOOKS_TYPE_FOR_MODE ! #define LANG_HOOKS_TYPE_FOR_MODE java_type_for_mode ! #undef LANG_HOOKS_TYPE_FOR_SIZE ! #define LANG_HOOKS_TYPE_FOR_SIZE java_type_for_size ! #undef LANG_HOOKS_SIGNED_TYPE ! #define LANG_HOOKS_SIGNED_TYPE java_signed_type ! #undef LANG_HOOKS_UNSIGNED_TYPE ! #define LANG_HOOKS_UNSIGNED_TYPE java_unsigned_type ! #undef LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE ! #define LANG_HOOKS_SIGNED_OR_UNSIGNED_TYPE java_signed_or_unsigned_type ! ! #undef LANG_HOOKS_TREE_INLINING_WALK_SUBTREES ! #define LANG_HOOKS_TREE_INLINING_WALK_SUBTREES java_tree_inlining_walk_subtrees ! ! #undef LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN ! #define LANG_HOOKS_TREE_DUMP_DUMP_TREE_FN java_dump_tree /* Each front end provides its own. */ const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER; *************** process_option_with_no (p, table, table_ *** 260,266 **** /* * process java-specific compiler command-line options ! * return 0, but do not complain if the option is not recognised. */ static int java_decode_option (argc, argv) --- 325,331 ---- /* * process java-specific compiler command-line options ! * return 0, but do not complain if the option is not recognized. */ static int java_decode_option (argc, argv) *************** java_init (filename) *** 458,463 **** --- 523,531 ---- flag_minimal_debug = 0; #endif + if (flag_inline_functions) + flag_inline_trees = 1; + /* Force minimum function alignment if g++ uses the least significant bit of function pointers to store the virtual bit. This is required to keep vtables compatible. */ *************** java_init (filename) *** 492,499 **** error ("couldn't determine target name for dependency tracking"); else { ! char *buf = (char *) xmalloc (dot - filename + ! 3 + sizeof (TARGET_OBJECT_SUFFIX)); strncpy (buf, filename, dot - filename); /* If emitting class files, we might have multiple --- 560,567 ---- error ("couldn't determine target name for dependency tracking"); else { ! char *buf = xmalloc (dot - filename + ! 3 + sizeof (TARGET_OBJECT_SUFFIX)); strncpy (buf, filename, dot - filename); /* If emitting class files, we might have multiple *************** java_init (filename) *** 529,551 **** jcf_path_init (); jcf_path_seal (version_flag); - decl_printable_name = lang_printable_name; - print_error_function = lang_print_error; - lang_expand_expr = java_lang_expand_expr; - - /* Append to Gcc tree node definition arrays */ - - memcpy (tree_code_type + (int) LAST_AND_UNUSED_TREE_CODE, - java_tree_code_type, - (int)LAST_JAVA_TREE_CODE - (int)LAST_AND_UNUSED_TREE_CODE); - memcpy (tree_code_length + (int) LAST_AND_UNUSED_TREE_CODE, - java_tree_code_length, - (LAST_JAVA_TREE_CODE - - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (int)); - memcpy (tree_code_name + (int) LAST_AND_UNUSED_TREE_CODE, - java_tree_code_name, - (LAST_JAVA_TREE_CODE - - (int)LAST_AND_UNUSED_TREE_CODE) * sizeof (char *)); java_init_decl_processing (); using_eh_for_cleanups (); --- 597,602 ---- *************** put_decl_string (str, len) *** 583,594 **** if (decl_buf == NULL) { decl_buflen = len + 100; ! decl_buf = (char *) xmalloc (decl_buflen); } else { decl_buflen *= 2; ! decl_buf = (char *) xrealloc (decl_buf, decl_buflen); } } strcpy (decl_buf + decl_bufpos, str); --- 634,645 ---- if (decl_buf == NULL) { decl_buflen = len + 100; ! decl_buf = xmalloc (decl_buflen); } else { decl_buflen *= 2; ! decl_buf = xrealloc (decl_buf, decl_buflen); } } strcpy (decl_buf + decl_bufpos, str); *************** put_decl_node (node) *** 671,677 **** /* Return a user-friendly name for DECL. The resulting string is only valid until the next call. The value of the hook decl_printable_name is this function, ! which is also called directly by lang_print_error. */ const char * lang_printable_name (decl, v) --- 722,728 ---- /* Return a user-friendly name for DECL. The resulting string is only valid until the next call. The value of the hook decl_printable_name is this function, ! which is also called directly by java_print_error_function. */ const char * lang_printable_name (decl, v) *************** lang_printable_name_wls (decl, v) *** 700,724 **** } /* Print on stderr the current class and method context. This function ! is the value of the hook print_error_function, called from toplev.c. */ static void ! lang_print_error (context, file) diagnostic_context *context __attribute__((__unused__)); const char *file; { ! static tree last_error_function_context = NULL_TREE; ! static tree last_error_function = NULL; ! static int initialized_p; ! ! /* Register LAST_ERROR_FUNCTION_CONTEXT and LAST_ERROR_FUNCTION with ! the garbage collector. */ ! if (!initialized_p) ! { ! ggc_add_tree_root (&last_error_function_context, 1); ! ggc_add_tree_root (&last_error_function, 1); ! initialized_p = 1; ! } if (current_function_decl != NULL && DECL_CONTEXT (current_function_decl) != last_error_function_context) --- 751,768 ---- } /* Print on stderr the current class and method context. This function ! is the value of the hook print_error_function. */ + static GTY(()) tree last_error_function_context; + static GTY(()) tree last_error_function; static void ! java_print_error_function (context, file) diagnostic_context *context __attribute__((__unused__)); const char *file; { ! /* Don't print error messages with bogus function prototypes. */ ! if (inhibit_error_function_printing) ! return; if (current_function_decl != NULL && DECL_CONTEXT (current_function_decl) != last_error_function_context) *************** lang_print_error (context, file) *** 751,781 **** } - /* This doesn't do anything on purpose. It's used to satisfy the - print_error_function hook we don't print error messages with bogus - function prototypes. */ - - static void - java_dummy_print (c, s) - diagnostic_context *c __attribute__ ((__unused__)); - const char *s __attribute__ ((__unused__)); - { - } - /* Called to install the PRINT_ERROR_FUNCTION hook differently according to LEVEL. LEVEL is 1 during early parsing, when function ! prototypes aren't fully resolved. print_error_function is set so it ! doesn't print incomplete function prototypes. When LEVEL is 2, ! function prototypes are fully resolved and can be printed when reporting errors. */ void lang_init_source (level) int level; { ! if (level == 1) ! print_error_function = java_dummy_print; ! else ! print_error_function = lang_print_error; } static void --- 795,811 ---- } /* Called to install the PRINT_ERROR_FUNCTION hook differently according to LEVEL. LEVEL is 1 during early parsing, when function ! prototypes aren't fully resolved. java_print_error_function is set ! so it doesn't print incomplete function prototypes. When LEVEL is ! 2, function prototypes are fully resolved and can be printed when reporting errors. */ void lang_init_source (level) int level; { ! inhibit_error_function_printing = (level == 1); } static void *************** java_init_options () *** 784,799 **** flag_bounds_check = 1; flag_exceptions = 1; flag_non_call_exceptions = 1; } /* Post-switch processing. */ ! static void java_post_options () { ! /* Turn off RTL inliner unless -finline-functions was really specified. */ ! if (flag_really_inline == 0) { ! flag_no_inline = 1; ! flag_inline_functions = 0; } } --- 814,1159 ---- flag_bounds_check = 1; flag_exceptions = 1; flag_non_call_exceptions = 1; + + /* In Java floating point operations never trap. */ + flag_trapping_math = 0; + } + + static bool + java_can_use_bit_fields_p () + { + /* The bit-field optimizations cause problems when generating class + files. */ + return flag_emit_class_files ? false : true; } /* Post-switch processing. */ ! static bool java_post_options () { ! /* Use tree inlining if possible. Function instrumentation is only ! done in the RTL level, so we disable tree inlining. */ ! if (! flag_instrument_function_entry_exit) { ! if (!flag_no_inline) ! flag_no_inline = 1; ! if (flag_inline_functions) ! { ! flag_inline_trees = 2; ! flag_inline_functions = 0; ! } ! } ! ! /* Initialize the compiler back end. */ ! return false; ! } ! ! /* Return either DECL or its known constant value (if it has one). */ ! ! tree ! decl_constant_value (decl) ! tree decl; ! { ! if (/* Don't change a variable array bound or initial value to a constant ! in a place where a variable is invalid. */ ! current_function_decl != 0 ! && ! TREE_THIS_VOLATILE (decl) ! && TREE_READONLY (decl) ! && DECL_INITIAL (decl) != 0 ! && TREE_CODE (DECL_INITIAL (decl)) != ERROR_MARK ! /* This is invalid if initial value is not constant. ! If it has either a function call, a memory reference, ! or a variable, then re-evaluating it could give different results. */ ! && TREE_CONSTANT (DECL_INITIAL (decl)) ! /* Check for cases where this is sub-optimal, even though valid. */ ! && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR) ! return DECL_INITIAL (decl); ! return decl; ! } ! ! /* Walk the language specific tree nodes during inlining. */ ! ! static tree ! java_tree_inlining_walk_subtrees (tp,subtrees,func,data,htab) ! tree *tp ATTRIBUTE_UNUSED; ! int *subtrees ATTRIBUTE_UNUSED; ! walk_tree_fn func ATTRIBUTE_UNUSED; ! void *data ATTRIBUTE_UNUSED; ! void *htab ATTRIBUTE_UNUSED; ! { ! enum tree_code code; ! tree result; ! ! #define WALK_SUBTREE(NODE) \ ! do \ ! { \ ! result = walk_tree (&(NODE), func, data, htab); \ ! if (result) \ ! return result; \ ! } \ ! while (0) ! ! tree t = *tp; ! if (!t) ! return NULL_TREE; ! ! code = TREE_CODE (t); ! switch (code) ! { ! case BLOCK: ! if (BLOCK_EXPR_BODY (t)) ! { ! tree *prev = &BLOCK_EXPR_BODY (*tp); ! while (*prev) ! { ! WALK_SUBTREE (*prev); ! prev = &TREE_CHAIN (*prev); ! } ! } ! return NULL_TREE; ! break; ! ! default: ! return NULL_TREE; ! } ! } ! ! /* Called from unsafe_for_reeval. */ ! static int ! java_unsafe_for_reeval (t) ! tree t; ! { ! switch (TREE_CODE (t)) ! { ! case BLOCK: ! /* Our expander tries to expand the variables twice. Boom. */ ! if (BLOCK_EXPR_DECLS (t) != NULL) ! return 2; ! return unsafe_for_reeval (BLOCK_EXPR_BODY (t)); ! ! default: ! break; ! } ! ! return -1; ! } ! ! /* Every call to a static constructor has an associated boolean ! variable which is in the outermost scope of the calling method. ! This variable is used to avoid multiple calls to the static ! constructor for each class. ! ! It looks somthing like this: ! ! foo () ! { ! boolean dummy = OtherClass.is_initialized; ! ! ... ! ! if (! dummy) ! OtherClass.initialize(); ! ! ... use OtherClass.data ... ! } ! ! Each of these boolean variables has an entry in the ! DECL_FUNCTION_INIT_TEST_TABLE of a method. When inlining a method ! we must merge the DECL_FUNCTION_INIT_TEST_TABLE from the function ! being linlined and create the boolean variables in the outermost ! scope of the method being inlined into. */ ! ! /* Create a mapping from a boolean variable in a method being inlined ! to one in the scope of the method being inlined into. */ ! ! static int ! merge_init_test_initialization (entry, x) ! void * * entry; ! void * x; ! { ! struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry; ! splay_tree decl_map = (splay_tree)x; ! splay_tree_node n; ! tree *init_test_decl; ! ! /* See if we have remapped this declaration. If we haven't there's ! a bug in the inliner. */ ! n = splay_tree_lookup (decl_map, (splay_tree_key) ite->value); ! if (! n) ! abort (); ! ! /* Create a new entry for the class and its remapped boolean ! variable. If we already have a mapping for this class we've ! already initialized it, so don't overwrite the value. */ ! init_test_decl = java_treetreehash_new ! (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), ite->key); ! if (!*init_test_decl) ! *init_test_decl = (tree)n->value; ! ! return true; ! } ! ! /* Merge the DECL_FUNCTION_INIT_TEST_TABLE from the function we're ! inlining. */ ! ! void ! java_inlining_merge_static_initializers (fn, decl_map) ! tree fn; ! void *decl_map; ! { ! htab_traverse ! (DECL_FUNCTION_INIT_TEST_TABLE (fn), ! merge_init_test_initialization, decl_map); ! } ! ! /* Lookup a DECL_FUNCTION_INIT_TEST_TABLE entry in the method we're ! inlining into. If we already have a corresponding entry in that ! class we don't need to create another one, so we create a mapping ! from the variable in the inlined class to the corresponding ! pre-existing one. */ ! ! static int ! inline_init_test_initialization (entry, x) ! void * * entry; ! void * x; ! { ! struct treetreehash_entry *ite = (struct treetreehash_entry *) *entry; ! splay_tree decl_map = (splay_tree)x; ! ! tree h = java_treetreehash_find ! (DECL_FUNCTION_INIT_TEST_TABLE (current_function_decl), ite->key); ! if (! h) ! return true; ! ! splay_tree_insert (decl_map, ! (splay_tree_key) ite->value, ! (splay_tree_value) h); ! ! return true; ! } ! ! /* Look up the boolean variables in the DECL_FUNCTION_INIT_TEST_TABLE ! of a method being inlined. For each hone, if we already have a ! variable associated with the same class in the method being inlined ! into, create a new mapping for it. */ ! ! void ! java_inlining_map_static_initializers (fn, decl_map) ! tree fn; ! void *decl_map; ! { ! htab_traverse ! (DECL_FUNCTION_INIT_TEST_TABLE (fn), ! inline_init_test_initialization, decl_map); ! } ! ! /* Avoid voluminous output for deep recursion of compound exprs. */ ! ! static void ! dump_compound_expr (di, t) ! dump_info_p di; ! tree t; ! { ! int i; ! ! for (i=0; i<2; i++) ! { ! switch (TREE_CODE (TREE_OPERAND (t, i))) ! { ! case COMPOUND_EXPR: ! dump_compound_expr (di, TREE_OPERAND (t, i)); ! break; ! ! case EXPR_WITH_FILE_LOCATION: ! { ! tree wfl_node = EXPR_WFL_NODE (TREE_OPERAND (t, i)); ! dump_child ("expr", wfl_node); ! break; ! } ! ! default: ! dump_child ("expr", TREE_OPERAND (t, i)); ! } ! } ! } ! ! static int ! java_dump_tree (dump_info, t) ! void *dump_info; ! tree t; ! { ! enum tree_code code; ! dump_info_p di = (dump_info_p) dump_info; ! ! /* Figure out what kind of node this is. */ ! code = TREE_CODE (t); ! ! switch (code) ! { ! case FUNCTION_DECL: ! dump_child ("args", DECL_ARGUMENTS (t)); ! if (DECL_EXTERNAL (t)) ! dump_string (di, "undefined"); ! if (TREE_PUBLIC (t)) ! dump_string (di, "extern"); ! else ! dump_string (di, "static"); ! if (DECL_LANG_SPECIFIC (t)) ! dump_child ("body", DECL_FUNCTION_BODY (t)); ! if (DECL_LANG_SPECIFIC (t) && !dump_flag (di, TDF_SLIM, t)) ! dump_child ("inline body", DECL_SAVED_TREE (t)); ! return 1; ! ! case RETURN_EXPR: ! dump_child ("expr", TREE_OPERAND (t, 0)); ! return 1; ! ! case GOTO_EXPR: ! dump_child ("goto", TREE_OPERAND (t, 0)); ! return 1; ! ! case LABEL_EXPR: ! dump_child ("label", TREE_OPERAND (t, 0)); ! return 1; ! ! case LABELED_BLOCK_EXPR: ! dump_child ("label", TREE_OPERAND (t, 0)); ! dump_child ("block", TREE_OPERAND (t, 1)); ! return 1; ! ! case EXIT_BLOCK_EXPR: ! dump_child ("block", TREE_OPERAND (t, 0)); ! dump_child ("val", TREE_OPERAND (t, 1)); ! return 1; ! ! case BLOCK: ! if (BLOCK_EXPR_BODY (t)) ! { ! tree local = BLOCK_VARS (t); ! while (local) ! { ! tree next = TREE_CHAIN (local); ! dump_child ("var", local); ! local = next; ! } ! ! { ! tree block = BLOCK_EXPR_BODY (t); ! dump_child ("body", block); ! block = TREE_CHAIN (block); ! } ! } ! return 1; ! ! case COMPOUND_EXPR: ! if (!dump_flag (di, TDF_SLIM, t)) ! return 0; ! dump_compound_expr (di, t); ! return 1; ! ! default: ! break; } + return 0; } + #include "gt-java-lang.h" diff -Nrc3pad gcc-3.2.3/gcc/java/lex.c gcc-3.3/gcc/java/lex.c *** gcc-3.2.3/gcc/java/lex.c 2002-03-29 19:31:09.000000000 +0000 --- gcc-3.3/gcc/java/lex.c 2003-01-28 18:48:16.000000000 +0000 *************** java_init_lex (finput, encoding) *** 91,100 **** if (!java_lang_id) java_lang_id = get_identifier ("java.lang"); - if (!java_lang_cloneable) - java_lang_cloneable = get_identifier ("java.lang.Cloneable"); - if (!java_io_serializable) - java_io_serializable = get_identifier ("java.io.Serializable"); if (!inst_id) inst_id = get_identifier ("inst$"); if (!wpv_id) --- 91,96 ---- *************** java_init_lex (finput, encoding) *** 128,135 **** CPC_INITIALIZER_LIST (ctxp) = CPC_STATIC_INITIALIZER_LIST (ctxp) = CPC_INSTANCE_INITIALIZER_LIST (ctxp) = NULL_TREE; ! memset ((PTR) ctxp->modifier_ctx, 0, 11*sizeof (ctxp->modifier_ctx[0])); ! memset ((PTR) current_jcf, 0, sizeof (JCF)); ctxp->current_parsed_class = NULL; ctxp->package = NULL_TREE; #endif --- 124,131 ---- CPC_INITIALIZER_LIST (ctxp) = CPC_STATIC_INITIALIZER_LIST (ctxp) = CPC_INSTANCE_INITIALIZER_LIST (ctxp) = NULL_TREE; ! memset (ctxp->modifier_ctx, 0, sizeof (ctxp->modifier_ctx)); ! memset (current_jcf, 0, sizeof (JCF)); ctxp->current_parsed_class = NULL; ctxp->package = NULL_TREE; #endif *************** java_allocate_new_line () *** 196,207 **** if (!ctxp->c_line) { ! ctxp->c_line = (struct java_line *)xmalloc (sizeof (struct java_line)); ctxp->c_line->max = JAVA_LINE_MAX; ! ctxp->c_line->line = (unicode_t *)xmalloc ! (sizeof (unicode_t)*ctxp->c_line->max); ctxp->c_line->unicode_escape_p = ! (char *)xmalloc (sizeof (char)*ctxp->c_line->max); ctxp->c_line->white_space_only = 0; } --- 192,202 ---- if (!ctxp->c_line) { ! ctxp->c_line = xmalloc (sizeof (struct java_line)); ctxp->c_line->max = JAVA_LINE_MAX; ! ctxp->c_line->line = xmalloc (sizeof (unicode_t)*ctxp->c_line->max); ctxp->c_line->unicode_escape_p = ! xmalloc (sizeof (char)*ctxp->c_line->max); ctxp->c_line->white_space_only = 0; } *************** java_new_lexer (finput, encoding) *** 226,232 **** FILE *finput; const char *encoding; { ! java_lexer *lex = (java_lexer *) xmalloc (sizeof (java_lexer)); int enc_error = 0; lex->finput = finput; --- 221,227 ---- FILE *finput; const char *encoding; { ! java_lexer *lex = xmalloc (sizeof (java_lexer)); int enc_error = 0; lex->finput = finput; *************** java_read_char (lex) *** 494,501 **** + (c2 & 0x3f)); /* Check for valid 3-byte characters. Don't allow surrogate, \ufffe or \uffff. */ ! if (r >= 0x800 && r <= 0xffff ! && ! (r >= 0xd800 && r <= 0xdfff) && r != 0xfffe && r != 0xffff) return r; } --- 489,496 ---- + (c2 & 0x3f)); /* Check for valid 3-byte characters. Don't allow surrogate, \ufffe or \uffff. */ ! if (IN_RANGE (r, 0x800, 0xffff) ! && ! IN_RANGE (r, 0xd800, 0xdfff) && r != 0xfffe && r != 0xffff) return r; } *************** java_store_unicode (l, c, unicode_escape *** 522,530 **** if (l->size == l->max) { l->max += JAVA_LINE_MAX; ! l->line = (unicode_t *) xrealloc (l->line, sizeof (unicode_t)*l->max); ! l->unicode_escape_p = (char *) xrealloc (l->unicode_escape_p, ! sizeof (char)*l->max); } l->line [l->size] = c; l->unicode_escape_p [l->size++] = unicode_escape_p; --- 517,525 ---- if (l->size == l->max) { l->max += JAVA_LINE_MAX; ! l->line = xrealloc (l->line, sizeof (unicode_t)*l->max); ! l->unicode_escape_p = xrealloc (l->unicode_escape_p, ! sizeof (char)*l->max); } l->line [l->size] = c; l->unicode_escape_p [l->size++] = unicode_escape_p; *************** java_read_unicode (lex, unicode_escape_p *** 560,582 **** while ((c = java_read_char (lex)) == 'u') ; ! /* Unget the most recent character as it is not a `u'. */ ! if (c == UEOF) ! return UEOF; ! lex->unget_value = c; ! ! /* Next should be 4 hex digits, otherwise it's an error. ! The hex value is converted into the unicode, pushed into ! the Unicode stream. */ ! for (shift = 12; shift >= 0; shift -= 4) { ! if ((c = java_read_char (lex)) == UEOF) ! return UEOF; if (hex_p (c)) unicode |= (unicode_t)(hex_value (c) << shift); else ! java_lex_error ("Non hex digit in Unicode escape sequence", 0); } lex->bs_count = 0; *unicode_escape_p = 1; return unicode; --- 555,585 ---- while ((c = java_read_char (lex)) == 'u') ; ! shift = 12; ! do { ! if (c == UEOF) ! { ! java_lex_error ("prematurely terminated \\u sequence", 0); ! return UEOF; ! } ! if (hex_p (c)) unicode |= (unicode_t)(hex_value (c) << shift); else ! { ! java_lex_error ("non-hex digit in \\u sequence", 0); ! break; ! } ! ! c = java_read_char (lex); ! shift -= 4; } + while (shift >= 0); + + if (c != UEOF) + lex->unget_value = c; + lex->bs_count = 0; *unicode_escape_p = 1; return unicode; *************** java_read_unicode_collapsing_terminators *** 599,605 **** return a single line terminator. */ int dummy; c = java_read_unicode (lex, &dummy); ! if (c != '\n') lex->unget_value = c; /* In either case we must return a newline. */ c = '\n'; --- 602,608 ---- return a single line terminator. */ int dummy; c = java_read_unicode (lex, &dummy); ! if (c != '\n' && c != UEOF) lex->unget_value = c; /* In either case we must return a newline. */ c = '\n'; *************** java_parse_escape_sequence () *** 833,874 **** } } - /* Isolate the code which may raise an arithmetic exception in its - own function. */ - #ifndef JC1_LITE ! struct jpa_args ! { ! YYSTYPE *java_lval; ! char *literal_token; ! int fflag; ! int number_beginning; ! }; ! #ifdef REAL_ARITHMETIC ! #define IS_ZERO(X) (ereal_cmp (X, dconst0) == 0) ! #else ! #define IS_ZERO(X) ((X) == 0) ! #endif ! static void java_perform_atof PARAMS ((PTR)); static void ! java_perform_atof (av) ! PTR av; { - struct jpa_args *a = (struct jpa_args *)av; - YYSTYPE *java_lval = a->java_lval; - int number_beginning = a->number_beginning; REAL_VALUE_TYPE value; ! tree type = (a->fflag ? FLOAT_TYPE_NODE : DOUBLE_TYPE_NODE); SET_REAL_VALUE_ATOF (value, ! REAL_VALUE_ATOF (a->literal_token, TYPE_MODE (type))); if (REAL_VALUE_ISINF (value) || REAL_VALUE_ISNAN (value)) { ! JAVA_FLOAT_RANGE_ERROR ((a->fflag ? "float" : "double")); value = DCONST0; } else if (IS_ZERO (value)) --- 836,868 ---- } } #ifndef JC1_LITE ! #define IS_ZERO(X) REAL_VALUES_EQUAL (X, dconst0) ! /* Subroutine of java_lex: converts floating-point literals to tree ! nodes. LITERAL_TOKEN is the input literal, JAVA_LVAL is where to ! store the result. FFLAG indicates whether the literal was tagged ! with an 'f', indicating it is of type 'float'; NUMBER_BEGINNING ! is the line number on which to report any error. */ ! static void java_perform_atof PARAMS ((YYSTYPE *, char *, int, int)); static void ! java_perform_atof (java_lval, literal_token, fflag, number_beginning) ! YYSTYPE *java_lval; ! char *literal_token; ! int fflag; ! int number_beginning; { REAL_VALUE_TYPE value; ! tree type = (fflag ? FLOAT_TYPE_NODE : DOUBLE_TYPE_NODE); SET_REAL_VALUE_ATOF (value, ! REAL_VALUE_ATOF (literal_token, TYPE_MODE (type))); if (REAL_VALUE_ISINF (value) || REAL_VALUE_ISNAN (value)) { ! JAVA_FLOAT_RANGE_ERROR (fflag ? "float" : "double"); value = DCONST0; } else if (IS_ZERO (value)) *************** java_perform_atof (av) *** 876,882 **** /* We check to see if the value is really 0 or if we've found an underflow. We do this in the most primitive imaginable way. */ int really_zero = 1; ! char *p = a->literal_token; if (*p == '-') ++p; while (*p && *p != 'e' && *p != 'E') --- 870,876 ---- /* We check to see if the value is really 0 or if we've found an underflow. We do this in the most primitive imaginable way. */ int really_zero = 1; ! char *p = literal_token; if (*p == '-') ++p; while (*p && *p != 'e' && *p != 'E') *************** java_lex (java_lval) *** 1032,1040 **** } else if (JAVA_ASCII_DIGIT (c)) radix = 8; ! else if (c == '.') { ! /* Push the '.' back and prepare for a FP parsing... */ java_unget_unicode (); c = '0'; } --- 1026,1035 ---- } else if (JAVA_ASCII_DIGIT (c)) radix = 8; ! else if (c == '.' || c == 'e' || c =='E') { ! /* Push the '.', 'e', or 'E' back and prepare for a FP ! parsing... */ java_unget_unicode (); c = '0'; } *************** java_lex (java_lval) *** 1170,1178 **** } else { - #ifndef JC1_LITE - struct jpa_args a; - #endif if (stage != 4) /* Don't push back fF/dD. */ java_unget_unicode (); --- 1165,1170 ---- *************** java_lex (java_lval) *** 1185,1201 **** JAVA_LEX_LIT (literal_token, radix); #ifndef JC1_LITE ! a.literal_token = literal_token; ! a.fflag = fflag; ! a.java_lval = java_lval; ! a.number_beginning = number_beginning; ! if (do_float_handler (java_perform_atof, (PTR) &a)) ! return FP_LIT_TK; ! ! JAVA_FLOAT_RANGE_ERROR ((fflag ? "float" : "double")); ! #else ! return FP_LIT_TK; #endif } } } /* JAVA_ASCII_FPCHAR (c) */ --- 1177,1186 ---- JAVA_LEX_LIT (literal_token, radix); #ifndef JC1_LITE ! java_perform_atof (java_lval, literal_token, ! fflag, number_beginning); #endif + return FP_LIT_TK; } } } /* JAVA_ASCII_FPCHAR (c) */ *************** java_lex (java_lval) *** 1236,1269 **** } /* End borrowed section. */ /* Range checking. */ ! if (long_suffix) { ! /* 9223372036854775808L is valid if operand of a '-'. Otherwise ! 9223372036854775807L is the biggest `long' literal that can be ! expressed using a 10 radix. For other radices, everything that ! fits withing 64 bits is OK. */ ! int hb = (high >> 31); ! if (overflow || (hb && low && radix == 10) ! || (hb && high & 0x7fffffff && radix == 10)) JAVA_INTEGRAL_RANGE_ERROR ("Numeric overflow for `long' literal"); ! } ! else ! { ! /* 2147483648 is valid if operand of a '-'. Otherwise, ! 2147483647 is the biggest `int' literal that can be ! expressed using a 10 radix. For other radices, everything ! that fits within 32 bits is OK. As all literals are ! signed, we sign extend here. */ ! int hb = (low >> 31) & 0x1; ! if (overflow || high || (hb && low & 0x7fffffff && radix == 10)) JAVA_INTEGRAL_RANGE_ERROR ("Numeric overflow for `int' literal"); - high = -hb; } ! #ifndef JC1_LITE ! value = build_int_2 (low, high); JAVA_RADIX10_FLAG (value) = radix == 10; - SET_LVAL_NODE_TYPE (value, long_suffix ? long_type_node : int_type_node); #else SET_LVAL_NODE_TYPE (build_int_2 (low, high), long_suffix ? long_type_node : int_type_node); --- 1221,1255 ---- } /* End borrowed section. */ + #ifndef JC1_LITE /* Range checking. */ ! value = build_int_2 (low, high); ! /* Temporarily set type to unsigned. */ ! SET_LVAL_NODE_TYPE (value, (long_suffix ! ? unsigned_long_type_node ! : unsigned_int_type_node)); ! ! /* For base 10 numbers, only values up to the highest value ! (plus one) can be written. For instance, only ints up to ! 2147483648 can be written. The special case of the largest ! negative value is handled elsewhere. For other bases, any ! number can be represented. */ ! if (overflow || (radix == 10 ! && tree_int_cst_lt (long_suffix ! ? decimal_long_max ! : decimal_int_max, ! value))) { ! if (long_suffix) JAVA_INTEGRAL_RANGE_ERROR ("Numeric overflow for `long' literal"); ! else JAVA_INTEGRAL_RANGE_ERROR ("Numeric overflow for `int' literal"); } ! ! /* Sign extend the value. */ ! SET_LVAL_NODE_TYPE (value, (long_suffix ? long_type_node : int_type_node)); ! force_fit_type (value, 0); JAVA_RADIX10_FLAG (value) = radix == 10; #else SET_LVAL_NODE_TYPE (build_int_2 (low, high), long_suffix ? long_type_node : int_type_node); *************** java_lex (java_lval) *** 1558,1564 **** /* Keyword, boolean literal or null literal. */ for (first_unicode = c, all_ascii = 1, ascii_index = 0; ! JAVA_PART_CHAR_P (c); c = java_get_unicode ()) { java_unicode_2_utf8 (c); if (all_ascii && c >= 128) --- 1544,1550 ---- /* Keyword, boolean literal or null literal. */ for (first_unicode = c, all_ascii = 1, ascii_index = 0; ! c != UEOF && JAVA_PART_CHAR_P (c); c = java_get_unicode ()) { java_unicode_2_utf8 (c); if (all_ascii && c >= 128) *************** java_lex (java_lval) *** 1568,1574 **** obstack_1grow (&temporary_obstack, '\0'); string = obstack_finish (&temporary_obstack); ! java_unget_unicode (); /* If we have something all ascii, we consider a keyword, a boolean literal, a null literal or an all ASCII identifier. Otherwise, --- 1554,1561 ---- obstack_1grow (&temporary_obstack, '\0'); string = obstack_finish (&temporary_obstack); ! if (c != UEOF) ! java_unget_unicode (); /* If we have something all ascii, we consider a keyword, a boolean literal, a null literal or an all ASCII identifier. Otherwise, *************** java_lex (java_lval) *** 1622,1627 **** --- 1609,1623 ---- SET_LVAL_NODE (null_pointer_node); return NULL_TK; + case ASSERT_TK: + if (flag_assert) + { + BUILD_OPERATOR (kw->token); + return kw->token; + } + else + break; + /* Some keyword we want to retain information on the location they where found. */ case CASE_TK: *************** static void *** 1670,1693 **** error_if_numeric_overflow (value) tree value; { ! if (TREE_CODE (value) == INTEGER_CST && JAVA_RADIX10_FLAG (value)) { - unsigned HOST_WIDE_INT lo, hi; - - lo = TREE_INT_CST_LOW (value); - hi = TREE_INT_CST_HIGH (value); if (TREE_TYPE (value) == long_type_node) ! { ! int hb = (hi >> 31); ! if (hb && !(hi & 0x7fffffff)) ! java_lex_error ("Numeric overflow for `long' literal", 0); ! } else ! { ! int hb = (lo >> 31) & 0x1; ! if (hb && !(lo & 0x7fffffff)) ! java_lex_error ("Numeric overflow for `int' literal", 0); ! } } } #endif /* JC1_LITE */ --- 1666,1679 ---- error_if_numeric_overflow (value) tree value; { ! if (TREE_CODE (value) == INTEGER_CST ! && JAVA_RADIX10_FLAG (value) ! && tree_int_cst_sgn (value) < 0) { if (TREE_TYPE (value) == long_type_node) ! java_lex_error ("Numeric overflow for `long' literal", 0); else ! java_lex_error ("Numeric overflow for `int' literal", 0); } } #endif /* JC1_LITE */ diff -Nrc3pad gcc-3.2.3/gcc/java/lex.h gcc-3.3/gcc/java/lex.h *** gcc-3.2.3/gcc/java/lex.h 2001-10-21 21:32:11.000000000 +0000 --- gcc-3.3/gcc/java/lex.h 2002-11-06 00:01:01.000000000 +0000 *************** *** 1,5 **** /* Language lexer definitions for the GNU compiler for the Java(TM) language. ! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GNU CC. --- 1,5 ---- /* Language lexer definitions for the GNU compiler for the Java(TM) language. ! Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by Alexandre Petit-Bianco (apbianco@cygnus.com) This file is part of GNU CC. *************** extern void java_destroy_lexer PARAMS (( *** 185,191 **** #define SET_LVAL_NODE_TYPE(NODE, TYPE) #define BUILD_ID_WFL(EXP) (EXP) #define JAVA_FLOAT_RANGE_ERROR(S) {} ! #define JAVA_INTEGRAL_RANGE_ERROR(S) {} #else --- 185,191 ---- #define SET_LVAL_NODE_TYPE(NODE, TYPE) #define BUILD_ID_WFL(EXP) (EXP) #define JAVA_FLOAT_RANGE_ERROR(S) {} ! #define JAVA_INTEGRAL_RANGE_ERROR(S) do { } while (0) #else *************** extern void java_destroy_lexer PARAMS (( *** 237,248 **** ctxp->c_line->current = i; \ } #define JAVA_INTEGRAL_RANGE_ERROR(m) \ ! { \ int i = ctxp->c_line->current; \ ctxp->c_line->current = number_beginning; \ java_lex_error (m, 0); \ ctxp->c_line->current = i; \ ! } #endif /* Definitions for jc1 compilation only */ --- 237,248 ---- ctxp->c_line->current = i; \ } #define JAVA_INTEGRAL_RANGE_ERROR(m) \ ! do { \ int i = ctxp->c_line->current; \ ctxp->c_line->current = number_beginning; \ java_lex_error (m, 0); \ ctxp->c_line->current = i; \ ! } while (0) #endif /* Definitions for jc1 compilation only */ diff -Nrc3pad gcc-3.2.3/gcc/java/Make-lang.in gcc-3.3/gcc/java/Make-lang.in *** gcc-3.2.3/gcc/java/Make-lang.in 2003-01-28 21:52:53.000000000 +0000 --- gcc-3.3/gcc/java/Make-lang.in 2003-04-10 14:54:08.000000000 +0000 *************** *** 43,48 **** --- 43,49 ---- # Actual names to use when installing a native compiler. JAVA_INSTALL_NAME = `echo gcj|sed '$(program_transform_name)'` + JAVA_TARGET_INSTALL_NAME = $(target_alias)-`echo gcj|sed '$(program_transform_name)'` # Actual names to use when installing a cross-compiler. JAVA_CROSS_NAME = `echo gcj|sed '$(program_transform_cross_name)'` *************** $(srcdir)/java/keyword.h: $(srcdir)/java *** 97,117 **** exit 1; } ; \ mv -f k$$$$.h keyword.h) # Executables built by this Makefile: JAVA_OBJS = java/parse.o java/class.o java/decl.o java/expr.o \ java/constants.o java/lang.o java/typeck.o java/except.o java/verify.o \ ! java/zextract.o java/jcf-io.o java/jcf-parse.o java/mangle.o \ ! java/mangle_name.o java/builtins.o \ java/jcf-write.o java/buffer.o java/check-init.o java/jcf-depend.o \ ! java/jcf-path.o java/xref.o java/boehm.o mkdeps.o ! GCJH_OBJS = java/gjavah.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \ ! java/zextract.o version.o mkdeps.o errors.o JVSCAN_OBJS = java/parse-scan.o java/jv-scan.o version.o ! JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \ ! java/zextract.o errors.o version.o mkdeps.o JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o --- 98,123 ---- exit 1; } ; \ mv -f k$$$$.h keyword.h) + gt-java-class.h gt-java-constants.h gt-java-decl.h : s-gtype ; @true + gt-java-expr.h gt-java-jcf-parse.h gt-java-jcf-write.h : s-gtype ; @true + gt-java-lang.h gt-java-mangle.h gt-java-parse.h : s-gtype ; @true + gt-java-builtins.h gtype-java.h : s-gtype ; @true + # Executables built by this Makefile: JAVA_OBJS = java/parse.o java/class.o java/decl.o java/expr.o \ java/constants.o java/lang.o java/typeck.o java/except.o java/verify.o \ ! java/zextract.o java/jcf-io.o java/win32-host.o java/jcf-parse.o \ ! java/mangle.o java/mangle_name.o java/builtins.o \ java/jcf-write.o java/buffer.o java/check-init.o java/jcf-depend.o \ ! java/jcf-path.o java/xref.o java/boehm.o java/java-tree-inline.o mkdeps.o ! GCJH_OBJS = java/gjavah.o java/jcf-io.o java/win32-host.o java/jcf-depend.o \ ! java/jcf-path.o java/zextract.o version.o mkdeps.o errors.o JVSCAN_OBJS = java/parse-scan.o java/jv-scan.o version.o ! JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/win32-host.o java/jcf-depend.o \ ! java/jcf-path.o java/zextract.o errors.o version.o mkdeps.o JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o *************** jv-scan$(exeext): $(JVSCAN_OBJS) $(LIBDE *** 133,139 **** jcf-dump$(exeext): $(JCFDUMP_OBJS) $(LIBDEPS) rm -f $@ ! $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(JCFDUMP_OBJS) $(ZLIB) $(LIBS) jvgenmain$(exeext): $(JVGENMAIN_OBJS) $(LIBDEPS) rm -f $@ --- 139,146 ---- jcf-dump$(exeext): $(JCFDUMP_OBJS) $(LIBDEPS) rm -f $@ ! $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(JCFDUMP_OBJS) \ ! $(ZLIB) $(LDEXP_LIB) $(LIBS) jvgenmain$(exeext): $(JVGENMAIN_OBJS) $(LIBDEPS) rm -f $@ *************** java.install-common: installdirs *** 171,176 **** --- 178,186 ---- rm -f $(DESTDIR)$(bindir)/$(JAVA_INSTALL_NAME)$(exeext); \ $(INSTALL_PROGRAM) $(GCJ)$(exeext) $(DESTDIR)$(bindir)/$(JAVA_INSTALL_NAME)$(exeext); \ chmod a+x $(DESTDIR)$(bindir)/$(JAVA_INSTALL_NAME)$(exeext); \ + rm -f $(DESTDIR)$(bindir)/$(JAVA_TARGET_INSTALL_NAME)$(exeext); \ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $(JAVA_INSTALL_NAME)$(exeext) $(JAVA_TARGET_INSTALL_NAME)$(exeext) ); \ fi ; \ fi ; \ for tool in $(JAVA_TARGET_INDEPENDENT_BIN_TOOLS); do \ *************** java.install-info: installdirs *** 219,224 **** --- 229,235 ---- java.mostlyclean: -rm -f java/*$(objext) $(DEMANGLER_PROG) + -rm -f java/*$(coverageexts) -rm -f jc1$(exeext) $(GCJ)$(exeext) jvgenmain$(exeext) gcjh$(exeext) jv-scan$(exeext) jcf-dump$(exeext) s-java java.clean: java.distclean: *************** java.stage4: stage4-start *** 248,258 **** # # .o:.h dependencies. ! JAVA_TREE_H = $(TREE_H) java/java-tree.h java/java-tree.def JAVA_LEX_C = java/lex.c java/keyword.h java/chartables.h java/parse.o: java/parse.c java/jcf-reader.c $(CONFIG_H) $(SYSTEM_H) \ ! function.h $(JAVA_TREE_H) $(JAVA_LEX_C) java/parse.h java/lex.h $(GGC_H) java/jcf-dump.o: $(CONFIG_H) $(SYSTEM_H) $(JAVA_TREE_H) java/jcf-dump.c \ java/jcf-reader.c java/jcf.h java/javaop.h java/javaop.def version.h java/gjavah.o: $(CONFIG_H) $(SYSTEM_H) $(JAVA_TREE_H) java/gjavah.c \ --- 259,270 ---- # # .o:.h dependencies. ! JAVA_TREE_H = $(TREE_H) $(HASHTAB_H) java/java-tree.h java/java-tree.def JAVA_LEX_C = java/lex.c java/keyword.h java/chartables.h java/parse.o: java/parse.c java/jcf-reader.c $(CONFIG_H) $(SYSTEM_H) \ ! function.h $(JAVA_TREE_H) $(JAVA_LEX_C) java/parse.h java/lex.h $(GGC_H) \ ! debug.h gt-java-parse.h gtype-java.h java/jcf-dump.o: $(CONFIG_H) $(SYSTEM_H) $(JAVA_TREE_H) java/jcf-dump.c \ java/jcf-reader.c java/jcf.h java/javaop.h java/javaop.def version.h java/gjavah.o: $(CONFIG_H) $(SYSTEM_H) $(JAVA_TREE_H) java/gjavah.c \ *************** java/boehm.o: java/boehm.c $(CONFIG_H) $ *** 261,303 **** java/parse.h toplev.h java/buffer.o: java/buffer.c $(CONFIG_H) java/buffer.h $(SYSTEM_H) toplev.h java/builtins.o: java/builtins.c $(CONFIG_H) $(SYSTEM_H) $(JAVA_TREE_H) \ ! $(GGC_H) flags.h java/check-init.o: java/check-init.c $(CONFIG_H) \ $(JAVA_TREE_H) $(SYSTEM_H) toplev.h java/class.o: java/class.c $(CONFIG_H) $(JAVA_TREE_H) $(RTL_H) java/jcf.h \ ! java/parse.h toplev.h $(SYSTEM_H) output.h $(GGC_H) $(TARGET_H) function.h java/constants.o: java/constants.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ ! toplev.h $(SYSTEM_H) $(GGC_H) java/decl.o: java/decl.c $(CONFIG_H) $(JAVA_TREE_H) $(RTL_H) java/jcf.h \ toplev.h flags.h $(SYSTEM_H) function.h expr.h libfuncs.h except.h \ ! java/java-except.h $(GGC_H) java/except.o: java/except.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h real.h \ $(RTL_H) java/javaop.h java/java-opcodes.h except.h java/java-except.h \ toplev.h $(SYSTEM_H) function.h java/expr.o: java/expr.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h real.h \ $(RTL_H) $(EXPR_H) java/javaop.h java/java-opcodes.h except.h \ java/java-except.h java/java-except.h java/parse.h toplev.h \ ! $(SYSTEM_H) $(GGC_H) java/jcf-depend.o: java/jcf-depend.c $(CONFIG_H) $(SYSTEM_H) java/jcf.h java/jcf-parse.o: java/jcf-parse.c $(CONFIG_H) $(JAVA_TREE_H) flags.h \ input.h java/java-except.h $(SYSTEM_H) toplev.h java/parse.h $(GGC_H) \ ! debug.h java/jcf-write.o: java/jcf-write.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ $(RTL_H) java/java-opcodes.h java/parse.h java/buffer.h $(SYSTEM_H) \ ! toplev.h $(GGC_H) java/jv-scan.o: java/jv-scan.c $(CONFIG_H) $(SYSTEM_H) version.h java/jvgenmain.o: java/jvgenmain.c $(CONFIG_H) $(JAVA_TREE_H) $(SYSTEM_H) java/lang.o: java/lang.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h input.h \ toplev.h $(SYSTEM_H) $(RTL_H) $(EXPR_H) diagnostic.h langhooks.h \ ! langhooks-def.h java/mangle.o: java/mangle.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) $(SYSTEM_H) \ ! toplev.h $(GGC_H) java/mangle_name.o: java/mangle_name.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) \ $(SYSTEM_H) toplev.h $(GGC_H) java/parse-scan.o: $(CONFIG_H) $(SYSTEM_H) toplev.h $(JAVA_LEX_C) java/parse.h \ java/lex.h java/typeck.o: java/typeck.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ ! java/convert.h toplev.h $(SYSTEM_H) $(GGC_H) java/verify.o: java/verify.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ java/javaop.h java/java-opcodes.h java/java-except.h toplev.h $(SYSTEM_H) java/xref.o: java/xref.c java/xref.h $(CONFIG_H) $(JAVA_TREE_H) toplev.h \ --- 273,324 ---- java/parse.h toplev.h java/buffer.o: java/buffer.c $(CONFIG_H) java/buffer.h $(SYSTEM_H) toplev.h java/builtins.o: java/builtins.c $(CONFIG_H) $(SYSTEM_H) $(JAVA_TREE_H) \ ! $(GGC_H) flags.h builtin-types.def langhooks.h gt-java-builtins.h java/check-init.o: java/check-init.c $(CONFIG_H) \ $(JAVA_TREE_H) $(SYSTEM_H) toplev.h java/class.o: java/class.c $(CONFIG_H) $(JAVA_TREE_H) $(RTL_H) java/jcf.h \ ! java/parse.h toplev.h $(SYSTEM_H) output.h $(GGC_H) $(TARGET_H) function.h \ ! gt-java-class.h java/constants.o: java/constants.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ ! toplev.h $(SYSTEM_H) $(GGC_H) gt-java-constants.h java/decl.o: java/decl.c $(CONFIG_H) $(JAVA_TREE_H) $(RTL_H) java/jcf.h \ toplev.h flags.h $(SYSTEM_H) function.h expr.h libfuncs.h except.h \ ! java/java-except.h $(GGC_H) real.h gt-java-decl.h java/except.o: java/except.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h real.h \ $(RTL_H) java/javaop.h java/java-opcodes.h except.h java/java-except.h \ toplev.h $(SYSTEM_H) function.h java/expr.o: java/expr.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h real.h \ $(RTL_H) $(EXPR_H) java/javaop.h java/java-opcodes.h except.h \ java/java-except.h java/java-except.h java/parse.h toplev.h \ ! $(SYSTEM_H) $(GGC_H) gt-java-expr.h ! java/java-tree-inline.o: tree-inline.c $(CONFIG_H) $(SYSTEM_H) \ ! $(TREE_H) $(RTL_H) expr.h flags.h params.h input.h insn-config.h \ ! $(INTEGRATE_H) $(VARRAY_H) $(HASHTAB_H) $(SPLAY_TREE_H) toplev.h \ ! langhooks.h $(C_COMMON_H) $(srcdir)/tree-inline.h ! $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! -DINLINER_FOR_JAVA=1 \ ! $(srcdir)/tree-inline.c -o $@ java/jcf-depend.o: java/jcf-depend.c $(CONFIG_H) $(SYSTEM_H) java/jcf.h java/jcf-parse.o: java/jcf-parse.c $(CONFIG_H) $(JAVA_TREE_H) flags.h \ input.h java/java-except.h $(SYSTEM_H) toplev.h java/parse.h $(GGC_H) \ ! debug.h real.h gt-java-jcf-parse.h ! java/win32-host.o: java/win32-host.c $(CONFIG_H) $(SYSTEM_H) java/jcf.h java/jcf-write.o: java/jcf-write.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ $(RTL_H) java/java-opcodes.h java/parse.h java/buffer.h $(SYSTEM_H) \ ! toplev.h $(GGC_H) gt-java-jcf-write.h java/jv-scan.o: java/jv-scan.c $(CONFIG_H) $(SYSTEM_H) version.h java/jvgenmain.o: java/jvgenmain.c $(CONFIG_H) $(JAVA_TREE_H) $(SYSTEM_H) java/lang.o: java/lang.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h input.h \ toplev.h $(SYSTEM_H) $(RTL_H) $(EXPR_H) diagnostic.h langhooks.h \ ! $(LANGHOOKS_DEF_H) gt-java-lang.h java/mangle.o: java/mangle.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) $(SYSTEM_H) \ ! toplev.h $(GGC_H) gt-java-mangle.h java/mangle_name.o: java/mangle_name.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) \ $(SYSTEM_H) toplev.h $(GGC_H) java/parse-scan.o: $(CONFIG_H) $(SYSTEM_H) toplev.h $(JAVA_LEX_C) java/parse.h \ java/lex.h java/typeck.o: java/typeck.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ ! java/convert.h toplev.h $(SYSTEM_H) $(GGC_H) real.h java/verify.o: java/verify.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \ java/javaop.h java/java-opcodes.h java/java-except.h toplev.h $(SYSTEM_H) java/xref.o: java/xref.c java/xref.h $(CONFIG_H) $(JAVA_TREE_H) toplev.h \ *************** java/jcf-io.o: java/jcf-io.c $(CONFIG_H) *** 312,389 **** # jcf-path.o needs a -D. java/jcf-path.o: java/jcf-path.c $(CONFIG_H) $(SYSTEM_H) java/jcf.h $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! -DLIBGCJ_ZIP_FILE='"$(prefix)/share/java/libgcj-$(version).jar"' \ -DDEFAULT_TARGET_VERSION=\"$(version)\" \ $(srcdir)/java/jcf-path.c $(OUTPUT_OPTION) # Documentation $(srcdir)/java/gcj.info: $(srcdir)/java/gcj.texi \ ! $(srcdir)/doc/include/fdl.texi $(srcdir)/doc/include/gpl.texi if test "x$(BUILD_INFO)" = xinfo; then \ rm -f $(srcdir)/java/gcc.info*; \ cd $(srcdir)/java && $(MAKEINFO) -I../doc/include -o gcj.info gcj.texi; \ else true; fi java/gcj.dvi: $(srcdir)/java/gcj.texi $(srcdir)/doc/include/fdl.texi \ ! $(srcdir)/doc/include/gpl.texi ! s=`cd $(srcdir); pwd`; export s; \ cd java && $(TEXI2DVI) -I $$s/doc/include $$s/java/gcj.texi $(srcdir)/java/gcj.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D gcj < $(srcdir)/java/gcj.texi > java/gcj.pod ! ($(POD2MAN) --section=1 java/gcj.pod > java/gcj.1.T$$$$ && \ mv -f java/gcj.1.T$$$$ $(srcdir)/java/gcj.1) || \ (rm -f java/gcj.1.T$$$$ && exit 1) ! rm -f java/gcj.pod $(srcdir)/java/gcjh.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D gcjh < $(srcdir)/java/gcj.texi > java/gcjh.pod ! ($(POD2MAN) --section=1 java/gcjh.pod > java/gcjh.1.T$$$$ && \ mv -f java/gcjh.1.T$$$$ $(srcdir)/java/gcjh.1) || \ (rm -f java/gcjh.1.T$$$$ && exit 1) ! rm -f java/gcjh.pod $(srcdir)/java/jv-scan.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D jv-scan < $(srcdir)/java/gcj.texi > java/jv-scan.pod ! ($(POD2MAN) --section=1 java/jv-scan.pod > java/jv-scan.1.T$$$$ && \ mv -f java/jv-scan.1.T$$$$ $(srcdir)/java/jv-scan.1) || \ (rm -f java/jv-scan.1.T$$$$ && exit 1) ! rm -f java/jv-scan.pod $(srcdir)/java/jcf-dump.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D jcf-dump < $(srcdir)/java/gcj.texi > java/jcf-dump.pod ! ($(POD2MAN) --section=1 java/jcf-dump.pod > java/jcf-dump.1.T$$$$ && \ mv -f java/jcf-dump.1.T$$$$ $(srcdir)/java/jcf-dump.1) || \ (rm -f java/jcf-dump.1.T$$$$ && exit 1) ! rm -f java/jcf-dump.pod $(srcdir)/java/gij.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D gij < $(srcdir)/java/gcj.texi > java/gij.pod ! ($(POD2MAN) --section=1 java/gij.pod > java/gij.1.T$$$$ && \ mv -f java/gij.1.T$$$$ $(srcdir)/java/gij.1) || \ (rm -f java/gij.1.T$$$$ && exit 1) ! rm -f java/gij.pod $(srcdir)/java/jv-convert.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D jv-convert < $(srcdir)/java/gcj.texi > java/jv-convert.pod ! ($(POD2MAN) --section=1 java/jv-convert.pod > java/jv-convert.1.T$$$$ && \ mv -f java/jv-convert.1.T$$$$ $(srcdir)/java/jv-convert.1) || \ (rm -f java/jv-convert.1.T$$$$ && exit 1) ! rm -f java/jv-convert.pod $(srcdir)/java/rmic.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D rmic < $(srcdir)/java/gcj.texi > java/rmic.pod ! ($(POD2MAN) --section=1 java/rmic.pod > java/rmic.1.T$$$$ && \ mv -f java/rmic.1.T$$$$ $(srcdir)/java/rmic.1) || \ (rm -f java/rmic.1.T$$$$ && exit 1) ! rm -f java/rmic.pod $(srcdir)/java/rmiregistry.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D rmiregistry < $(srcdir)/java/gcj.texi > java/rmiregistry.pod ! ($(POD2MAN) --section=1 java/rmiregistry.pod > java/rmiregistry.1.T$$$$ && \ mv -f java/rmiregistry.1.T$$$$ $(srcdir)/java/rmiregistry.1) || \ (rm -f java/rmiregistry.1.T$$$$ && exit 1) ! rm -f java/rmiregistry.pod # Install the man pages. java.install-man: installdirs $(GENERATED_JAVA_MANPAGES) --- 333,411 ---- # jcf-path.o needs a -D. java/jcf-path.o: java/jcf-path.c $(CONFIG_H) $(SYSTEM_H) java/jcf.h $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! -DLIBGCJ_ZIP_FILE='"$(datadir)/java/libgcj-$(version).jar"' \ -DDEFAULT_TARGET_VERSION=\"$(version)\" \ $(srcdir)/java/jcf-path.c $(OUTPUT_OPTION) # Documentation $(srcdir)/java/gcj.info: $(srcdir)/java/gcj.texi \ ! $(srcdir)/doc/include/fdl.texi $(srcdir)/doc/include/gpl.texi \ ! $(srcdir)/doc/include/gcc-common.texi if test "x$(BUILD_INFO)" = xinfo; then \ rm -f $(srcdir)/java/gcc.info*; \ cd $(srcdir)/java && $(MAKEINFO) -I../doc/include -o gcj.info gcj.texi; \ else true; fi java/gcj.dvi: $(srcdir)/java/gcj.texi $(srcdir)/doc/include/fdl.texi \ ! $(srcdir)/doc/include/gpl.texi $(srcdir)/doc/include/gcc-common.texi ! s=`cd $(srcdir); ${PWD}`; export s; \ cd java && $(TEXI2DVI) -I $$s/doc/include $$s/java/gcj.texi $(srcdir)/java/gcj.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D gcj < $(srcdir)/java/gcj.texi > java/gcj.pod ! -($(POD2MAN) --section=1 java/gcj.pod > java/gcj.1.T$$$$ && \ mv -f java/gcj.1.T$$$$ $(srcdir)/java/gcj.1) || \ (rm -f java/gcj.1.T$$$$ && exit 1) ! -rm -f java/gcj.pod $(srcdir)/java/gcjh.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D gcjh < $(srcdir)/java/gcj.texi > java/gcjh.pod ! -($(POD2MAN) --section=1 java/gcjh.pod > java/gcjh.1.T$$$$ && \ mv -f java/gcjh.1.T$$$$ $(srcdir)/java/gcjh.1) || \ (rm -f java/gcjh.1.T$$$$ && exit 1) ! -rm -f java/gcjh.pod $(srcdir)/java/jv-scan.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D jv-scan < $(srcdir)/java/gcj.texi > java/jv-scan.pod ! -($(POD2MAN) --section=1 java/jv-scan.pod > java/jv-scan.1.T$$$$ && \ mv -f java/jv-scan.1.T$$$$ $(srcdir)/java/jv-scan.1) || \ (rm -f java/jv-scan.1.T$$$$ && exit 1) ! -rm -f java/jv-scan.pod $(srcdir)/java/jcf-dump.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D jcf-dump < $(srcdir)/java/gcj.texi > java/jcf-dump.pod ! -($(POD2MAN) --section=1 java/jcf-dump.pod > java/jcf-dump.1.T$$$$ && \ mv -f java/jcf-dump.1.T$$$$ $(srcdir)/java/jcf-dump.1) || \ (rm -f java/jcf-dump.1.T$$$$ && exit 1) ! -rm -f java/jcf-dump.pod $(srcdir)/java/gij.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D gij < $(srcdir)/java/gcj.texi > java/gij.pod ! -($(POD2MAN) --section=1 java/gij.pod > java/gij.1.T$$$$ && \ mv -f java/gij.1.T$$$$ $(srcdir)/java/gij.1) || \ (rm -f java/gij.1.T$$$$ && exit 1) ! -rm -f java/gij.pod $(srcdir)/java/jv-convert.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D jv-convert < $(srcdir)/java/gcj.texi > java/jv-convert.pod ! -($(POD2MAN) --section=1 java/jv-convert.pod > java/jv-convert.1.T$$$$ && \ mv -f java/jv-convert.1.T$$$$ $(srcdir)/java/jv-convert.1) || \ (rm -f java/jv-convert.1.T$$$$ && exit 1) ! -rm -f java/jv-convert.pod $(srcdir)/java/rmic.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D rmic < $(srcdir)/java/gcj.texi > java/rmic.pod ! -($(POD2MAN) --section=1 java/rmic.pod > java/rmic.1.T$$$$ && \ mv -f java/rmic.1.T$$$$ $(srcdir)/java/rmic.1) || \ (rm -f java/rmic.1.T$$$$ && exit 1) ! -rm -f java/rmic.pod $(srcdir)/java/rmiregistry.1: $(srcdir)/java/gcj.texi -$(TEXI2POD) -D rmiregistry < $(srcdir)/java/gcj.texi > java/rmiregistry.pod ! -($(POD2MAN) --section=1 java/rmiregistry.pod > java/rmiregistry.1.T$$$$ && \ mv -f java/rmiregistry.1.T$$$$ $(srcdir)/java/rmiregistry.1) || \ (rm -f java/rmiregistry.1.T$$$$ && exit 1) ! -rm -f java/rmiregistry.pod # Install the man pages. java.install-man: installdirs $(GENERATED_JAVA_MANPAGES) diff -Nrc3pad gcc-3.2.3/gcc/java/mangle.c gcc-3.3/gcc/java/mangle.c *** gcc-3.2.3/gcc/java/mangle.c 2001-12-20 22:48:51.000000000 +0000 --- gcc-3.3/gcc/java/mangle.c 2002-09-21 02:19:44.000000000 +0000 *************** mangle_method_decl (mdecl) *** 170,176 **** } /* This mangles a member name, like a function name or a field ! name. Handle cases were `name' is a C++ keyword. Return a non zero value if unicode encoding was required. */ static void --- 170,176 ---- } /* This mangles a member name, like a function name or a field ! name. Handle cases were `name' is a C++ keyword. Return a nonzero value if unicode encoding was required. */ static void *************** mangle_type (type) *** 245,251 **** COMPRESSION_NEXT is the index to the location of the next insertion of an element. */ ! static tree compression_table; static int compression_next; /* Find a POINTER_TYPE in the compression table. Use a special --- 245,251 ---- COMPRESSION_NEXT is the index to the location of the next insertion of an element. */ ! static GTY(()) tree compression_table; static int compression_next; /* Find a POINTER_TYPE in the compression table. Use a special *************** find_compression_record_match (type, nex *** 340,346 **** return match; } ! /* Mangle a record type. If a non zero value is returned, it means that a 'N' was emitted (so that a matching 'E' can be emitted if necessary.) FOR_POINTER indicates that this element is for a pointer symbol, meaning it was preceded by a 'P'. */ --- 340,346 ---- return match; } ! /* Mangle a record type. If a nonzero value is returned, it means that a 'N' was emitted (so that a matching 'E' can be emitted if necessary.) FOR_POINTER indicates that this element is for a pointer symbol, meaning it was preceded by a 'P'. */ *************** mangle_pointer_type (type) *** 431,442 **** the template indicator where already used an compress appropriately. It handles pointers. */ static void mangle_array_type (p_type) tree p_type; { - /* atms: array template mangled string. */ - static tree atms = NULL_TREE; tree type, elt_type; int match; --- 431,442 ---- the template indicator where already used an compress appropriately. It handles pointers. */ + /* atms: array template mangled string. */ + static GTY(()) tree atms; static void mangle_array_type (p_type) tree p_type; { tree type, elt_type; int match; *************** mangle_array_type (p_type) *** 450,456 **** if (!atms) { atms = get_identifier ("6JArray"); - ggc_add_tree_root (&atms, 1); } /* Maybe we have what we're looking in the compression table. */ --- 450,455 ---- *************** compression_table_add (type) *** 602,610 **** for (i = 0; i < compression_next; i++) TREE_VEC_ELT (new, i) = TREE_VEC_ELT (compression_table, i); - ggc_del_root (&compression_table); compression_table = new; - ggc_add_tree_root (&compression_table, 1); } TREE_VEC_ELT (compression_table, compression_next++) = type; } --- 601,607 ---- *************** init_mangling (obstack) *** 624,632 **** /* Mangled name are to be suffixed */ obstack_grow (mangle_obstack, "_Z", 2); - - /* Register the compression table with the GC */ - ggc_add_tree_root (&compression_table, 1); } /* Mangling finalization routine. The mangled name is returned as a --- 621,626 ---- *************** finish_mangling () *** 641,647 **** /* Mangling already finished. */ abort (); - ggc_del_root (&compression_table); compression_table = NULL_TREE; compression_next = 0; obstack_1grow (mangle_obstack, '\0'); --- 635,640 ---- *************** finish_mangling () *** 652,654 **** --- 645,649 ---- #endif return result; } + + #include "gt-java-mangle.h" diff -Nrc3pad gcc-3.2.3/gcc/java/mangle_name.c gcc-3.3/gcc/java/mangle_name.c *** gcc-3.2.3/gcc/java/mangle_name.c 2001-12-20 22:48:51.000000000 +0000 --- gcc-3.3/gcc/java/mangle_name.c 2002-08-05 18:46:37.000000000 +0000 *************** The Free Software Foundation is independ *** 32,38 **** #include "java-tree.h" #include "obstack.h" #include "toplev.h" - #include "obstack.h" static void append_unicode_mangled_name PARAMS ((const char *, int)); #ifndef HAVE_AS_UTF8 --- 32,37 ---- diff -Nrc3pad gcc-3.2.3/gcc/java/parse.c gcc-3.3/gcc/java/parse.c *** gcc-3.2.3/gcc/java/parse.c 2003-04-22 08:16:52.000000000 +0000 --- gcc-3.3/gcc/java/parse.c 2003-05-14 00:59:30.000000000 +0000 *************** *** 1,297 **** ! /* A Bison parser, made by GNU Bison 1.875. */ ! ! /* Skeleton parser for Yacc-like parsing with Bison, ! Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 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, 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. */ ! ! /* As a special exception, when this file is copied by Bison into a ! Bison output file, you may use that output file without restriction. ! This special exception was added by the Free Software Foundation ! in version 1.24 of Bison. */ ! ! /* Written by Richard Stallman by simplifying the original so called ! ``semantic'' parser. */ ! ! /* All symbols defined below should begin with yy or YY, to avoid ! infringing on user name space. This should be done even for local ! variables, as they might otherwise be expanded by user macros. ! There are some unavoidable exceptions within include files to ! define necessary library symbols; they are noted "INFRINGES ON ! USER NAME SPACE" below. */ ! ! /* Identify Bison output. */ ! #define YYBISON 1 ! ! /* Skeleton name. */ ! #define YYSKELETON_NAME "yacc.c" ! ! /* Pure parsers. */ ! #define YYPURE 1 ! /* Using locations. */ ! #define YYLSP_NEEDED 0 - /* If NAME_PREFIX is specified substitute the variables and functions - names. */ #define yyparse java_parse ! #define yylex java_lex #define yyerror java_error ! #define yylval java_lval ! #define yychar java_char #define yydebug java_debug #define yynerrs java_nerrs ! ! /* Tokens. */ ! #ifndef YYTOKENTYPE ! # define YYTOKENTYPE ! /* Put the tokens into the symbol table, so that GDB and other debuggers ! know about them. */ ! enum yytokentype { ! PLUS_TK = 258, ! MINUS_TK = 259, ! MULT_TK = 260, ! DIV_TK = 261, ! REM_TK = 262, ! LS_TK = 263, ! SRS_TK = 264, ! ZRS_TK = 265, ! AND_TK = 266, ! XOR_TK = 267, ! OR_TK = 268, ! BOOL_AND_TK = 269, ! BOOL_OR_TK = 270, ! EQ_TK = 271, ! NEQ_TK = 272, ! GT_TK = 273, ! GTE_TK = 274, ! LT_TK = 275, ! LTE_TK = 276, ! PLUS_ASSIGN_TK = 277, ! MINUS_ASSIGN_TK = 278, ! MULT_ASSIGN_TK = 279, ! DIV_ASSIGN_TK = 280, ! REM_ASSIGN_TK = 281, ! LS_ASSIGN_TK = 282, ! SRS_ASSIGN_TK = 283, ! ZRS_ASSIGN_TK = 284, ! AND_ASSIGN_TK = 285, ! XOR_ASSIGN_TK = 286, ! OR_ASSIGN_TK = 287, ! PUBLIC_TK = 288, ! PRIVATE_TK = 289, ! PROTECTED_TK = 290, ! STATIC_TK = 291, ! FINAL_TK = 292, ! SYNCHRONIZED_TK = 293, ! VOLATILE_TK = 294, ! TRANSIENT_TK = 295, ! NATIVE_TK = 296, ! PAD_TK = 297, ! ABSTRACT_TK = 298, ! STRICT_TK = 299, ! MODIFIER_TK = 300, ! DECR_TK = 301, ! INCR_TK = 302, ! DEFAULT_TK = 303, ! IF_TK = 304, ! THROW_TK = 305, ! BOOLEAN_TK = 306, ! DO_TK = 307, ! IMPLEMENTS_TK = 308, ! THROWS_TK = 309, ! BREAK_TK = 310, ! IMPORT_TK = 311, ! ELSE_TK = 312, ! INSTANCEOF_TK = 313, ! RETURN_TK = 314, ! VOID_TK = 315, ! CATCH_TK = 316, ! INTERFACE_TK = 317, ! CASE_TK = 318, ! EXTENDS_TK = 319, ! FINALLY_TK = 320, ! SUPER_TK = 321, ! WHILE_TK = 322, ! CLASS_TK = 323, ! SWITCH_TK = 324, ! CONST_TK = 325, ! TRY_TK = 326, ! FOR_TK = 327, ! NEW_TK = 328, ! CONTINUE_TK = 329, ! GOTO_TK = 330, ! PACKAGE_TK = 331, ! THIS_TK = 332, ! BYTE_TK = 333, ! SHORT_TK = 334, ! INT_TK = 335, ! LONG_TK = 336, ! CHAR_TK = 337, ! INTEGRAL_TK = 338, ! FLOAT_TK = 339, ! DOUBLE_TK = 340, ! FP_TK = 341, ! ID_TK = 342, ! REL_QM_TK = 343, ! REL_CL_TK = 344, ! NOT_TK = 345, ! NEG_TK = 346, ! ASSIGN_ANY_TK = 347, ! ASSIGN_TK = 348, ! OP_TK = 349, ! CP_TK = 350, ! OCB_TK = 351, ! CCB_TK = 352, ! OSB_TK = 353, ! CSB_TK = 354, ! SC_TK = 355, ! C_TK = 356, ! DOT_TK = 357, ! STRING_LIT_TK = 358, ! CHAR_LIT_TK = 359, ! INT_LIT_TK = 360, ! FP_LIT_TK = 361, ! TRUE_TK = 362, ! FALSE_TK = 363, ! BOOL_LIT_TK = 364, ! NULL_TK = 365 ! }; ! #endif ! #define PLUS_TK 258 ! #define MINUS_TK 259 ! #define MULT_TK 260 ! #define DIV_TK 261 ! #define REM_TK 262 ! #define LS_TK 263 ! #define SRS_TK 264 ! #define ZRS_TK 265 ! #define AND_TK 266 ! #define XOR_TK 267 ! #define OR_TK 268 ! #define BOOL_AND_TK 269 ! #define BOOL_OR_TK 270 ! #define EQ_TK 271 ! #define NEQ_TK 272 ! #define GT_TK 273 ! #define GTE_TK 274 ! #define LT_TK 275 ! #define LTE_TK 276 ! #define PLUS_ASSIGN_TK 277 ! #define MINUS_ASSIGN_TK 278 ! #define MULT_ASSIGN_TK 279 ! #define DIV_ASSIGN_TK 280 ! #define REM_ASSIGN_TK 281 ! #define LS_ASSIGN_TK 282 ! #define SRS_ASSIGN_TK 283 ! #define ZRS_ASSIGN_TK 284 ! #define AND_ASSIGN_TK 285 ! #define XOR_ASSIGN_TK 286 ! #define OR_ASSIGN_TK 287 ! #define PUBLIC_TK 288 ! #define PRIVATE_TK 289 ! #define PROTECTED_TK 290 ! #define STATIC_TK 291 ! #define FINAL_TK 292 ! #define SYNCHRONIZED_TK 293 ! #define VOLATILE_TK 294 ! #define TRANSIENT_TK 295 ! #define NATIVE_TK 296 ! #define PAD_TK 297 ! #define ABSTRACT_TK 298 ! #define STRICT_TK 299 ! #define MODIFIER_TK 300 ! #define DECR_TK 301 ! #define INCR_TK 302 ! #define DEFAULT_TK 303 ! #define IF_TK 304 ! #define THROW_TK 305 ! #define BOOLEAN_TK 306 ! #define DO_TK 307 ! #define IMPLEMENTS_TK 308 ! #define THROWS_TK 309 ! #define BREAK_TK 310 ! #define IMPORT_TK 311 ! #define ELSE_TK 312 ! #define INSTANCEOF_TK 313 ! #define RETURN_TK 314 ! #define VOID_TK 315 ! #define CATCH_TK 316 ! #define INTERFACE_TK 317 ! #define CASE_TK 318 ! #define EXTENDS_TK 319 ! #define FINALLY_TK 320 ! #define SUPER_TK 321 ! #define WHILE_TK 322 ! #define CLASS_TK 323 ! #define SWITCH_TK 324 ! #define CONST_TK 325 ! #define TRY_TK 326 ! #define FOR_TK 327 ! #define NEW_TK 328 ! #define CONTINUE_TK 329 ! #define GOTO_TK 330 ! #define PACKAGE_TK 331 ! #define THIS_TK 332 ! #define BYTE_TK 333 ! #define SHORT_TK 334 ! #define INT_TK 335 ! #define LONG_TK 336 ! #define CHAR_TK 337 ! #define INTEGRAL_TK 338 ! #define FLOAT_TK 339 ! #define DOUBLE_TK 340 ! #define FP_TK 341 ! #define ID_TK 342 ! #define REL_QM_TK 343 ! #define REL_CL_TK 344 ! #define NOT_TK 345 ! #define NEG_TK 346 ! #define ASSIGN_ANY_TK 347 ! #define ASSIGN_TK 348 ! #define OP_TK 349 ! #define CP_TK 350 ! #define OCB_TK 351 ! #define CCB_TK 352 ! #define OSB_TK 353 ! #define CSB_TK 354 ! #define SC_TK 355 ! #define C_TK 356 ! #define DOT_TK 357 ! #define STRING_LIT_TK 358 ! #define CHAR_LIT_TK 359 ! #define INT_LIT_TK 360 ! #define FP_LIT_TK 361 ! #define TRUE_TK 362 ! #define FALSE_TK 363 ! #define BOOL_LIT_TK 364 ! #define NULL_TK 365 ! ! ! ! ! /* Copy the first part of user declarations. */ ! #line 48 "/u/molotova/0/galaad/gdosreis/gcc-3.2.3/gcc-3.2.3/gcc/java/parse.y" #include "config.h" #include "system.h" #include #include "tree.h" #include "rtl.h" #include "obstack.h" #include "toplev.h" #include "flags.h" --- 1,133 ---- ! /* A Bison parser, made from /home/mitchell/gcc-3.3/gcc-3.3/gcc/java/parse.y ! by GNU bison 1.35. */ ! #define YYBISON 1 /* Identify Bison output. */ #define yyparse java_parse ! #define yylex java_lex #define yyerror java_error ! #define yylval java_lval ! #define yychar java_char #define yydebug java_debug #define yynerrs java_nerrs + # define PLUS_TK 257 + # define MINUS_TK 258 + # define MULT_TK 259 + # define DIV_TK 260 + # define REM_TK 261 + # define LS_TK 262 + # define SRS_TK 263 + # define ZRS_TK 264 + # define AND_TK 265 + # define XOR_TK 266 + # define OR_TK 267 + # define BOOL_AND_TK 268 + # define BOOL_OR_TK 269 + # define EQ_TK 270 + # define NEQ_TK 271 + # define GT_TK 272 + # define GTE_TK 273 + # define LT_TK 274 + # define LTE_TK 275 + # define PLUS_ASSIGN_TK 276 + # define MINUS_ASSIGN_TK 277 + # define MULT_ASSIGN_TK 278 + # define DIV_ASSIGN_TK 279 + # define REM_ASSIGN_TK 280 + # define LS_ASSIGN_TK 281 + # define SRS_ASSIGN_TK 282 + # define ZRS_ASSIGN_TK 283 + # define AND_ASSIGN_TK 284 + # define XOR_ASSIGN_TK 285 + # define OR_ASSIGN_TK 286 + # define PUBLIC_TK 287 + # define PRIVATE_TK 288 + # define PROTECTED_TK 289 + # define STATIC_TK 290 + # define FINAL_TK 291 + # define SYNCHRONIZED_TK 292 + # define VOLATILE_TK 293 + # define TRANSIENT_TK 294 + # define NATIVE_TK 295 + # define PAD_TK 296 + # define ABSTRACT_TK 297 + # define STRICT_TK 298 + # define MODIFIER_TK 299 + # define DECR_TK 300 + # define INCR_TK 301 + # define DEFAULT_TK 302 + # define IF_TK 303 + # define THROW_TK 304 + # define BOOLEAN_TK 305 + # define DO_TK 306 + # define IMPLEMENTS_TK 307 + # define THROWS_TK 308 + # define BREAK_TK 309 + # define IMPORT_TK 310 + # define ELSE_TK 311 + # define INSTANCEOF_TK 312 + # define RETURN_TK 313 + # define VOID_TK 314 + # define CATCH_TK 315 + # define INTERFACE_TK 316 + # define CASE_TK 317 + # define EXTENDS_TK 318 + # define FINALLY_TK 319 + # define SUPER_TK 320 + # define WHILE_TK 321 + # define CLASS_TK 322 + # define SWITCH_TK 323 + # define CONST_TK 324 + # define TRY_TK 325 + # define FOR_TK 326 + # define NEW_TK 327 + # define CONTINUE_TK 328 + # define GOTO_TK 329 + # define PACKAGE_TK 330 + # define THIS_TK 331 + # define ASSERT_TK 332 + # define BYTE_TK 333 + # define SHORT_TK 334 + # define INT_TK 335 + # define LONG_TK 336 + # define CHAR_TK 337 + # define INTEGRAL_TK 338 + # define FLOAT_TK 339 + # define DOUBLE_TK 340 + # define FP_TK 341 + # define ID_TK 342 + # define REL_QM_TK 343 + # define REL_CL_TK 344 + # define NOT_TK 345 + # define NEG_TK 346 + # define ASSIGN_ANY_TK 347 + # define ASSIGN_TK 348 + # define OP_TK 349 + # define CP_TK 350 + # define OCB_TK 351 + # define CCB_TK 352 + # define OSB_TK 353 + # define CSB_TK 354 + # define SC_TK 355 + # define C_TK 356 + # define DOT_TK 357 + # define STRING_LIT_TK 358 + # define CHAR_LIT_TK 359 + # define INT_LIT_TK 360 + # define FP_LIT_TK 361 + # define TRUE_TK 362 + # define FALSE_TK 363 + # define BOOL_LIT_TK 364 + # define NULL_TK 365 ! #line 48 "/home/mitchell/gcc-3.3/gcc-3.3/gcc/java/parse.y" #include "config.h" #include "system.h" #include #include "tree.h" #include "rtl.h" + #include "real.h" #include "obstack.h" #include "toplev.h" #include "flags.h" *************** *** 306,315 **** #include "function.h" #include "except.h" #include "ggc.h" ! ! #ifndef DIR_SEPARATOR ! #define DIR_SEPARATOR '/' ! #endif /* Local function prototypes */ static char *java_accstring_lookup PARAMS ((int)); --- 142,149 ---- #include "function.h" #include "except.h" #include "ggc.h" ! #include "debug.h" ! #include "tree-inline.h" /* Local function prototypes */ static char *java_accstring_lookup PARAMS ((int)); *************** static void check_abstract_method_header *** 356,362 **** static tree lookup_java_interface_method2 PARAMS ((tree, tree)); static tree resolve_expression_name PARAMS ((tree, tree *)); static tree maybe_create_class_interface_decl PARAMS ((tree, tree, tree, tree)); ! static int check_class_interface_creation PARAMS ((int, int, tree, tree, tree, tree)); static tree patch_method_invocation PARAMS ((tree, tree, tree, int, int *, tree *)); --- 190,196 ---- static tree lookup_java_interface_method2 PARAMS ((tree, tree)); static tree resolve_expression_name PARAMS ((tree, tree *)); static tree maybe_create_class_interface_decl PARAMS ((tree, tree, tree, tree)); ! static int check_class_interface_creation PARAMS ((int, int, tree, tree, tree, tree)); static tree patch_method_invocation PARAMS ((tree, tree, tree, int, int *, tree *)); *************** static tree resolve_and_layout PARAMS (( *** 366,374 **** static tree qualify_and_find PARAMS ((tree, tree, tree)); static tree resolve_no_layout PARAMS ((tree, tree)); static int invocation_mode PARAMS ((tree, int)); ! static tree find_applicable_accessible_methods_list PARAMS ((int, tree, tree, tree)); ! static void search_applicable_methods_list PARAMS ((int, tree, tree, tree, tree *, tree *)); static tree find_most_specific_methods_list PARAMS ((tree)); static int argument_types_convertible PARAMS ((tree, tree)); --- 200,208 ---- static tree qualify_and_find PARAMS ((tree, tree, tree)); static tree resolve_no_layout PARAMS ((tree, tree)); static int invocation_mode PARAMS ((tree, int)); ! static tree find_applicable_accessible_methods_list PARAMS ((int, tree, tree, tree)); ! static void search_applicable_methods_list PARAMS ((int, tree, tree, tree, tree *, tree *)); static tree find_most_specific_methods_list PARAMS ((tree)); static int argument_types_convertible PARAMS ((tree, tree)); *************** static tree patch_array_ref PARAMS ((tre *** 420,426 **** static tree make_qualified_name PARAMS ((tree, tree, int)); static tree merge_qualified_name PARAMS ((tree, tree)); static tree make_qualified_primary PARAMS ((tree, tree, int)); ! static int resolve_qualified_expression_name PARAMS ((tree, tree *, tree *, tree *)); static void qualify_ambiguous_name PARAMS ((tree)); static tree resolve_field_access PARAMS ((tree, tree *, tree *)); --- 254,260 ---- static tree make_qualified_name PARAMS ((tree, tree, int)); static tree merge_qualified_name PARAMS ((tree, tree)); static tree make_qualified_primary PARAMS ((tree, tree, int)); ! static int resolve_qualified_expression_name PARAMS ((tree, tree *, tree *, tree *)); static void qualify_ambiguous_name PARAMS ((tree)); static tree resolve_field_access PARAMS ((tree, tree *, tree *)); *************** static tree build_return PARAMS ((int, t *** 433,439 **** static tree patch_return PARAMS ((tree)); static tree maybe_access_field PARAMS ((tree, tree, tree)); static int complete_function_arguments PARAMS ((tree)); ! static int check_for_static_method_reference PARAMS ((tree, tree, tree, tree, tree)); static int not_accessible_p PARAMS ((tree, tree, tree, int)); static void check_deprecation PARAMS ((tree, tree)); --- 267,273 ---- static tree patch_return PARAMS ((tree)); static tree maybe_access_field PARAMS ((tree, tree, tree)); static int complete_function_arguments PARAMS ((tree)); ! static int check_for_static_method_reference PARAMS ((tree, tree, tree, tree, tree)); static int not_accessible_p PARAMS ((tree, tree, tree, int)); static void check_deprecation PARAMS ((tree, tree)); *************** static tree build_string_concatenation P *** 459,464 **** --- 293,299 ---- static tree patch_string_cst PARAMS ((tree)); static tree patch_string PARAMS ((tree)); static tree encapsulate_with_try_catch PARAMS ((int, tree, tree, tree)); + static tree build_assertion PARAMS ((int, tree, tree)); static tree build_try_statement PARAMS ((int, tree, tree)); static tree build_try_finally_statement PARAMS ((int, tree, tree)); static tree patch_try_statement PARAMS ((tree)); *************** static int pop_current_osb PARAMS ((stru *** 535,545 **** /* JDK 1.1 work. FIXME */ static tree maybe_make_nested_class_name PARAMS ((tree)); ! static void make_nested_class_name PARAMS ((tree)); static void set_nested_class_simple_name_value PARAMS ((tree, int)); static void link_nested_class_to_enclosing PARAMS ((void)); ! static tree resolve_inner_class PARAMS ((struct hash_table *, tree, tree *, ! tree *, tree)); static tree find_as_inner_class PARAMS ((tree, tree, tree)); static tree find_as_inner_class_do PARAMS ((tree, tree)); static int check_inner_class_redefinition PARAMS ((tree, tree)); --- 370,379 ---- /* JDK 1.1 work. FIXME */ static tree maybe_make_nested_class_name PARAMS ((tree)); ! static int make_nested_class_name PARAMS ((tree)); static void set_nested_class_simple_name_value PARAMS ((tree, int)); static void link_nested_class_to_enclosing PARAMS ((void)); ! static tree resolve_inner_class PARAMS ((htab_t, tree, tree *, tree *, tree)); static tree find_as_inner_class PARAMS ((tree, tree, tree)); static tree find_as_inner_class_do PARAMS ((tree, tree)); static int check_inner_class_redefinition PARAMS ((tree, tree)); *************** static tree maybe_build_thisn_access_met *** 551,557 **** static tree build_outer_field_access PARAMS ((tree, tree)); static tree build_outer_field_access_methods PARAMS ((tree)); ! static tree build_outer_field_access_expr PARAMS ((int, tree, tree, tree, tree)); static tree build_outer_method_access_method PARAMS ((tree)); static tree build_new_access_id PARAMS ((void)); --- 385,391 ---- static tree build_outer_field_access PARAMS ((tree, tree)); static tree build_outer_field_access_methods PARAMS ((tree)); ! static tree build_outer_field_access_expr PARAMS ((int, tree, tree, tree, tree)); static tree build_outer_method_access_method PARAMS ((tree)); static tree build_new_access_id PARAMS ((void)); *************** static tree build_outer_field_access_met *** 559,565 **** tree, tree)); static int outer_field_access_p PARAMS ((tree, tree)); ! static int outer_field_expanded_access_p PARAMS ((tree, tree *, tree *, tree *)); static tree outer_field_access_fix PARAMS ((tree, tree, tree)); static tree build_incomplete_class_ref PARAMS ((int, tree)); --- 393,399 ---- tree, tree)); static int outer_field_access_p PARAMS ((tree, tree)); ! static int outer_field_expanded_access_p PARAMS ((tree, tree *, tree *, tree *)); static tree outer_field_access_fix PARAMS ((tree, tree, tree)); static tree build_incomplete_class_ref PARAMS ((int, tree)); *************** static void create_new_parser_context PA *** 574,592 **** static void mark_parser_ctxt PARAMS ((void *)); static tree maybe_build_class_init_for_field PARAMS ((tree, tree)); ! static bool attach_init_test_initialization_flags PARAMS ((struct hash_entry *, ! PTR)); ! static bool emit_test_initialization PARAMS ((struct hash_entry *, PTR)); /* Number of error found so far. */ ! int java_error_count; /* Number of warning found so far. */ int java_warning_count; /* Tell when not to fold, when doing xrefs */ int do_not_fold; /* Cyclic inheritance report, as it can be set by layout_class */ const char *cyclic_inheritance_report; ! /* The current parser context */ struct parser_ctxt *ctxp; --- 408,427 ---- static void mark_parser_ctxt PARAMS ((void *)); static tree maybe_build_class_init_for_field PARAMS ((tree, tree)); ! static int attach_init_test_initialization_flags PARAMS ((PTR *, PTR)); ! static int emit_test_initialization PARAMS ((PTR *, PTR)); ! ! static char *string_convert_int_cst PARAMS ((tree)); /* Number of error found so far. */ ! int java_error_count; /* Number of warning found so far. */ int java_warning_count; /* Tell when not to fold, when doing xrefs */ int do_not_fold; /* Cyclic inheritance report, as it can be set by layout_class */ const char *cyclic_inheritance_report; ! /* The current parser context */ struct parser_ctxt *ctxp; *************** struct parser_ctxt *ctxp_for_generation *** 598,607 **** covers both integral/floating point division. The code is changed once the type of both operator is worked out. */ ! static const enum tree_code binop_lookup[19] = ! { PLUS_EXPR, MINUS_EXPR, MULT_EXPR, RDIV_EXPR, TRUNC_MOD_EXPR, ! LSHIFT_EXPR, RSHIFT_EXPR, URSHIFT_EXPR, BIT_AND_EXPR, BIT_XOR_EXPR, BIT_IOR_EXPR, TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, EQ_EXPR, NE_EXPR, GT_EXPR, GE_EXPR, LT_EXPR, LE_EXPR, --- 433,442 ---- covers both integral/floating point division. The code is changed once the type of both operator is worked out. */ ! static const enum tree_code binop_lookup[19] = ! { PLUS_EXPR, MINUS_EXPR, MULT_EXPR, RDIV_EXPR, TRUNC_MOD_EXPR, ! LSHIFT_EXPR, RSHIFT_EXPR, URSHIFT_EXPR, BIT_AND_EXPR, BIT_XOR_EXPR, BIT_IOR_EXPR, TRUTH_ANDIF_EXPR, TRUTH_ORIF_EXPR, EQ_EXPR, NE_EXPR, GT_EXPR, GE_EXPR, LT_EXPR, LE_EXPR, *************** static const enum tree_code binop_lookup *** 614,667 **** #define BINOP_COMPOUND_CANDIDATES 11 /* The "$L" identifier we use to create labels. */ ! static tree label_id = NULL_TREE; /* The "StringBuffer" identifier used for the String `+' operator. */ ! static tree wfl_string_buffer = NULL_TREE; /* The "append" identifier used for String `+' operator. */ ! static tree wfl_append = NULL_TREE; /* The "toString" identifier used for String `+' operator. */ ! static tree wfl_to_string = NULL_TREE; /* The "java.lang" import qualified name. */ ! static tree java_lang_id = NULL_TREE; /* The generated `inst$' identifier used for generated enclosing instance/field access functions. */ ! static tree inst_id = NULL_TREE; ! ! /* The "java.lang.Cloneable" qualified name. */ ! static tree java_lang_cloneable = NULL_TREE; ! ! /* The "java.io.Serializable" qualified name. */ ! static tree java_io_serializable = NULL_TREE; /* Context and flag for static blocks */ ! static tree current_static_block = NULL_TREE; /* The generated `write_parm_value$' identifier. */ ! static tree wpv_id; /* The list of all packages we've seen so far */ ! static tree package_list = NULL_TREE; ! /* Hold THIS for the scope of the current method decl. */ ! static tree current_this; /* Hold a list of catch clauses list. The first element of this list is the list of the catch clauses of the currently analysed try block. */ ! static tree currently_caught_type_list; /* This holds a linked list of all the case labels for the current switch statement. It is only used when checking to see if there are duplicate labels. FIXME: probably this should just be attached to the switch itself; then it could be referenced via `ctxp->current_loop'. */ ! static tree case_label_list; ! static tree src_parse_roots[1]; /* All classes seen from source code */ #define gclass_list src_parse_roots[0] --- 449,500 ---- #define BINOP_COMPOUND_CANDIDATES 11 /* The "$L" identifier we use to create labels. */ ! static GTY(()) tree label_id; /* The "StringBuffer" identifier used for the String `+' operator. */ ! static GTY(()) tree wfl_string_buffer; /* The "append" identifier used for String `+' operator. */ ! static GTY(()) tree wfl_append; /* The "toString" identifier used for String `+' operator. */ ! static GTY(()) tree wfl_to_string; /* The "java.lang" import qualified name. */ ! static GTY(()) tree java_lang_id; /* The generated `inst$' identifier used for generated enclosing instance/field access functions. */ ! static GTY(()) tree inst_id; /* Context and flag for static blocks */ ! static GTY(()) tree current_static_block; /* The generated `write_parm_value$' identifier. */ ! static GTY(()) tree wpv_id; /* The list of all packages we've seen so far */ ! static GTY(()) tree package_list; ! /* Hold THIS for the scope of the current method decl. */ ! static GTY(()) tree current_this; /* Hold a list of catch clauses list. The first element of this list is the list of the catch clauses of the currently analysed try block. */ ! static GTY(()) tree currently_caught_type_list; /* This holds a linked list of all the case labels for the current switch statement. It is only used when checking to see if there are duplicate labels. FIXME: probably this should just be attached to the switch itself; then it could be referenced via `ctxp->current_loop'. */ ! static GTY(()) tree case_label_list; ! /* Anonymous class counter. Will be reset to 1 every time a non ! anonymous class gets created. */ ! static int anonymous_class_counter = 1; ! ! static GTY(()) tree src_parse_roots[1]; /* All classes seen from source code */ #define gclass_list src_parse_roots[0] *************** static tree src_parse_roots[1]; *** 674,681 **** #define check_modifiers(__message, __value, __mask) do { \ if ((__value) & ~(__mask)) \ { \ ! int i, remainder = (__value) & ~(__mask); \ ! for (i = 0; i <= 10; i++) \ if ((1 << i) & remainder) \ parse_error_context (ctxp->modifier_ctx [i], (__message), \ java_accstring_lookup (1 << i)); \ --- 507,514 ---- #define check_modifiers(__message, __value, __mask) do { \ if ((__value) & ~(__mask)) \ { \ ! size_t i, remainder = (__value) & ~(__mask); \ ! for (i = 0; i < ARRAY_SIZE (ctxp->modifier_ctx); i++) \ if ((1 << i) & remainder) \ parse_error_context (ctxp->modifier_ctx [i], (__message), \ java_accstring_lookup (1 << i)); \ *************** static tree src_parse_roots[1]; *** 683,705 **** } while (0) ! ! /* Enabling traces. */ ! #ifndef YYDEBUG ! # define YYDEBUG 1 ! #endif ! ! /* Enabling verbose error messages. */ ! #ifdef YYERROR_VERBOSE ! # undef YYERROR_VERBOSE ! # define YYERROR_VERBOSE 1 ! #else ! # define YYERROR_VERBOSE 0 ! #endif ! ! #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) ! #line 446 "/u/molotova/0/galaad/gdosreis/gcc-3.2.3/gcc-3.2.3/gcc/java/parse.y" ! typedef union YYSTYPE { tree node; int sub_token; struct { --- 516,524 ---- } while (0) ! #line 444 "/home/mitchell/gcc-3.3/gcc-3.3/gcc/java/parse.y" ! #ifndef YYSTYPE ! typedef union { tree node; int sub_token; struct { *************** typedef union YYSTYPE { *** 707,848 **** int location; } operator; int value; ! } YYSTYPE; ! /* Line 191 of yacc.c. */ ! #line 712 "p2378.c" ! # define yystype YYSTYPE /* obsolescent; will be withdrawn */ ! # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif ! ! ! ! /* Copy the second part of user declarations. */ ! #line 456 "/u/molotova/0/galaad/gdosreis/gcc-3.2.3/gcc-3.2.3/gcc/java/parse.y" #include "lex.c" ! ! ! /* Line 214 of yacc.c. */ ! #line 727 "p2378.c" ! ! #if ! defined (yyoverflow) || YYERROR_VERBOSE ! ! /* The parser invokes alloca or malloc; define the necessary symbols. */ ! ! # if YYSTACK_USE_ALLOCA ! # define YYSTACK_ALLOC alloca ! # else ! # ifndef YYSTACK_USE_ALLOCA ! # if defined (alloca) || defined (_ALLOCA_H) ! # define YYSTACK_ALLOC alloca ! # else ! # ifdef __GNUC__ ! # define YYSTACK_ALLOC __builtin_alloca ! # endif ! # endif ! # endif ! # endif ! ! # ifdef YYSTACK_ALLOC ! /* Pacify GCC's `empty if-body' warning. */ ! # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) ! # else ! # if defined (__STDC__) || defined (__cplusplus) ! # include /* INFRINGES ON USER NAME SPACE */ ! # define YYSIZE_T size_t ! # endif ! # define YYSTACK_ALLOC malloc ! # define YYSTACK_FREE free ! # endif ! #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ ! ! ! #if (! defined (yyoverflow) \ ! && (! defined (__cplusplus) \ ! || (YYSTYPE_IS_TRIVIAL))) ! ! /* A type that is properly aligned for any stack member. */ ! union yyalloc ! { ! short yyss; ! YYSTYPE yyvs; ! }; ! ! /* The size of the maximum gap between one aligned stack and the next. */ ! # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) ! ! /* The size of an array large to enough to hold all stacks, each with ! N elements. */ ! # define YYSTACK_BYTES(N) \ ! ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ ! + YYSTACK_GAP_MAXIMUM) ! ! /* Copy COUNT objects from FROM to TO. The source and destination do ! not overlap. */ ! # ifndef YYCOPY ! # if 1 < __GNUC__ ! # define YYCOPY(To, From, Count) \ ! __builtin_memcpy (To, From, (Count) * sizeof (*(From))) ! # else ! # define YYCOPY(To, From, Count) \ ! do \ ! { \ ! register YYSIZE_T yyi; \ ! for (yyi = 0; yyi < (Count); yyi++) \ ! (To)[yyi] = (From)[yyi]; \ ! } \ ! while (0) ! # endif ! # endif ! ! /* Relocate STACK from its old location to the new one. The ! local variables YYSIZE and YYSTACKSIZE give the old and new number of ! elements in the stack, and YYPTR gives the new location of the ! stack. Advance YYPTR to a properly aligned location for the next ! stack. */ ! # define YYSTACK_RELOCATE(Stack) \ ! do \ ! { \ ! YYSIZE_T yynewbytes; \ ! YYCOPY (&yyptr->Stack, Stack, yysize); \ ! Stack = &yyptr->Stack; \ ! yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ ! yyptr += yynewbytes / sizeof (*yyptr); \ ! } \ ! while (0) ! ! #endif ! ! #if defined (__STDC__) || defined (__cplusplus) ! typedef signed char yysigned_char; ! #else ! typedef short yysigned_char; #endif - /* YYFINAL -- State number of the termination state. */ - #define YYFINAL 3 - /* YYLAST -- Last index in YYTABLE. */ - #define YYLAST 5469 - /* YYNTOKENS -- Number of terminals. */ - #define YYNTOKENS 111 - /* YYNNTS -- Number of nonterminals. */ - #define YYNNTS 164 - /* YYNRULES -- Number of rules. */ - #define YYNRULES 506 - /* YYNRULES -- Number of states. */ - #define YYNSTATES 778 ! /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ ! #define YYUNDEFTOK 2 ! #define YYMAXUTOK 365 ! #define YYTRANSLATE(YYX) \ ! ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) ! /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ ! static const unsigned char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, --- 526,553 ---- int location; } operator; int value; ! } yystype; ! # define YYSTYPE yystype # define YYSTYPE_IS_TRIVIAL 1 #endif ! #line 454 "/home/mitchell/gcc-3.3/gcc-3.3/gcc/java/parse.y" #include "lex.c" ! #ifndef YYDEBUG ! # define YYDEBUG 1 #endif ! #define YYFINAL 787 ! #define YYFLAG -32768 ! #define YYNTBASE 112 ! /* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */ ! #define YYTRANSLATE(x) ((unsigned)(x) <= 365 ? yytranslate[x] : 276) ! /* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */ ! static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, *************** static const unsigned char yytranslate[] *** 869,1187 **** 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, ! 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ! 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, ! 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, ! 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, ! 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, ! 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, ! 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, ! 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, ! 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, ! 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, ! 105, 106, 107, 108, 109, 110 }; #if YYDEBUG ! /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in ! YYRHS. */ ! static const unsigned short yyprhs[] = { ! 0, 0, 3, 4, 7, 9, 11, 13, 15, 17, ! 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, ! 39, 42, 45, 47, 49, 51, 55, 57, 58, 60, ! 62, 64, 67, 70, 73, 77, 79, 82, 84, 87, ! 91, 94, 98, 100, 102, 106, 109, 113, 119, 124, ! 130, 132, 134, 136, 138, 140, 143, 144, 152, 153, ! 160, 164, 167, 171, 176, 177, 180, 184, 187, 188, ! 191, 194, 196, 200, 204, 207, 211, 213, 216, 218, ! 220, 222, 224, 226, 228, 230, 232, 234, 238, 243, ! 245, 249, 253, 255, 259, 263, 268, 270, 274, 277, ! 281, 285, 287, 289, 290, 294, 297, 301, 305, 310, ! 315, 318, 322, 325, 329, 332, 336, 341, 345, 349, ! 353, 355, 359, 363, 366, 370, 373, 377, 379, 380, ! 383, 386, 388, 392, 396, 398, 400, 403, 405, 406, ! 410, 413, 417, 421, 426, 429, 433, 437, 442, 444, ! 449, 455, 463, 470, 472, 474, 475, 480, 481, 487, ! 488, 494, 495, 502, 506, 511, 514, 518, 521, 525, ! 528, 532, 534, 537, 539, 541, 543, 545, 547, 550, ! 553, 556, 560, 564, 569, 571, 575, 579, 582, 586, ! 588, 590, 592, 595, 597, 599, 601, 604, 607, 611, ! 613, 615, 617, 619, 621, 623, 625, 627, 629, 631, ! 633, 635, 637, 639, 641, 643, 645, 647, 649, 651, ! 653, 655, 657, 660, 663, 666, 669, 672, 675, 678, ! 681, 685, 690, 695, 701, 706, 712, 719, 727, 734, ! 736, 738, 740, 742, 744, 746, 748, 754, 757, 761, ! 766, 774, 782, 783, 787, 792, 795, 799, 805, 808, ! 812, 816, 821, 823, 826, 829, 831, 834, 838, 841, ! 844, 848, 851, 856, 859, 862, 866, 871, 874, 876, ! 884, 892, 899, 903, 909, 914, 922, 929, 932, 935, ! 939, 942, 943, 945, 947, 950, 951, 953, 955, 959, ! 963, 966, 970, 973, 977, 980, 984, 987, 991, 994, ! 998, 1001, 1005, 1009, 1012, 1016, 1022, 1028, 1031, 1036, ! 1040, 1042, 1046, 1050, 1055, 1058, 1060, 1063, 1066, 1071, ! 1074, 1078, 1083, 1086, 1089, 1091, 1093, 1095, 1097, 1101, ! 1103, 1105, 1107, 1109, 1111, 1115, 1119, 1123, 1127, 1131, ! 1135, 1139, 1143, 1147, 1153, 1158, 1160, 1165, 1171, 1177, ! 1184, 1188, 1192, 1197, 1203, 1206, 1210, 1211, 1219, 1220, ! 1227, 1231, 1235, 1237, 1241, 1245, 1249, 1253, 1258, 1263, ! 1268, 1273, 1277, 1281, 1283, 1286, 1290, 1294, 1297, 1300, ! 1304, 1308, 1312, 1316, 1319, 1323, 1328, 1334, 1341, 1347, ! 1354, 1359, 1364, 1369, 1374, 1378, 1383, 1387, 1392, 1394, ! 1396, 1398, 1400, 1403, 1406, 1408, 1410, 1413, 1415, 1418, ! 1420, 1423, 1426, 1429, 1432, 1435, 1438, 1440, 1443, 1446, ! 1448, 1451, 1454, 1460, 1465, 1470, 1476, 1481, 1484, 1490, ! 1495, 1501, 1503, 1507, 1511, 1515, 1519, 1523, 1527, 1529, ! 1533, 1537, 1541, 1545, 1547, 1551, 1555, 1559, 1563, 1567, ! 1571, 1573, 1577, 1581, 1585, 1589, 1593, 1597, 1601, 1605, ! 1609, 1613, 1615, 1619, 1623, 1627, 1631, 1633, 1637, 1641, ! 1643, 1647, 1651, 1653, 1657, 1661, 1663, 1667, 1671, 1673, ! 1677, 1681, 1683, 1689, 1694, 1698, 1704, 1706, 1708, 1712, ! 1716, 1718, 1720, 1722, 1724, 1726, 1728 }; - - /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const short yyrhs[] = { ! 112, 0, -1, -1, 113, 126, -1, 105, -1, 106, ! -1, 109, -1, 104, -1, 103, -1, 110, -1, 116, ! -1, 117, -1, 83, -1, 86, -1, 51, -1, 118, ! -1, 121, -1, 122, -1, 118, -1, 118, -1, 116, ! 245, -1, 122, 245, -1, 123, -1, 124, -1, 125, ! -1, 122, 102, 125, -1, 87, -1, -1, 129, -1, ! 127, -1, 128, -1, 129, 127, -1, 129, 128, -1, ! 127, 128, -1, 129, 127, 128, -1, 130, -1, 127, ! 130, -1, 133, -1, 128, 133, -1, 76, 122, 100, ! -1, 76, 1, -1, 76, 122, 1, -1, 131, -1, ! 132, -1, 56, 122, 100, -1, 56, 1, -1, 56, ! 122, 1, -1, 56, 122, 102, 5, 100, -1, 56, ! 122, 102, 1, -1, 56, 122, 102, 5, 1, -1, ! 135, -1, 170, -1, 193, -1, 1, -1, 45, -1, ! 134, 45, -1, -1, 134, 68, 125, 138, 139, 136, ! 141, -1, -1, 68, 125, 138, 139, 137, 141, -1, ! 134, 68, 1, -1, 68, 1, -1, 68, 125, 1, ! -1, 134, 68, 125, 1, -1, -1, 64, 119, -1, ! 64, 119, 1, -1, 64, 1, -1, -1, 53, 140, ! -1, 53, 1, -1, 120, -1, 140, 101, 120, -1, ! 140, 101, 1, -1, 96, 97, -1, 96, 142, 97, ! -1, 143, -1, 142, 143, -1, 144, -1, 160, -1, ! 162, -1, 183, -1, 145, -1, 150, -1, 135, -1, ! 170, -1, 193, -1, 115, 146, 100, -1, 134, 115, ! 146, 100, -1, 147, -1, 146, 101, 147, -1, 146, ! 101, 1, -1, 148, -1, 148, 93, 149, -1, 148, ! 93, 1, -1, 148, 93, 149, 1, -1, 125, -1, ! 148, 98, 99, -1, 125, 1, -1, 148, 98, 1, ! -1, 148, 99, 1, -1, 273, -1, 181, -1, -1, ! 152, 151, 159, -1, 152, 1, -1, 115, 153, 157, ! -1, 60, 153, 157, -1, 134, 115, 153, 157, -1, ! 134, 60, 153, 157, -1, 115, 1, -1, 134, 115, ! 1, -1, 60, 1, -1, 134, 60, 1, -1, 134, ! 1, -1, 125, 94, 95, -1, 125, 94, 154, 95, ! -1, 153, 98, 99, -1, 125, 94, 1, -1, 153, ! 98, 1, -1, 155, -1, 154, 101, 155, -1, 154, ! 101, 1, -1, 115, 148, -1, 156, 115, 148, -1, ! 115, 1, -1, 156, 115, 1, -1, 134, -1, -1, ! 54, 158, -1, 54, 1, -1, 119, -1, 158, 101, ! 119, -1, 158, 101, 1, -1, 183, -1, 100, -1, ! 161, 183, -1, 134, -1, -1, 164, 163, 166, -1, ! 165, 157, -1, 134, 165, 157, -1, 123, 94, 95, ! -1, 123, 94, 154, 95, -1, 184, 167, -1, 184, ! 168, 167, -1, 184, 186, 167, -1, 184, 168, 186, ! 167, -1, 185, -1, 169, 94, 95, 100, -1, 169, ! 94, 241, 95, 100, -1, 122, 102, 66, 94, 241, ! 95, 100, -1, 122, 102, 66, 94, 95, 100, -1, ! 77, -1, 66, -1, -1, 62, 125, 171, 176, -1, ! -1, 134, 62, 125, 172, 176, -1, -1, 62, 125, ! 175, 173, 176, -1, -1, 134, 62, 125, 175, 174, ! 176, -1, 62, 125, 1, -1, 134, 62, 125, 1, ! -1, 64, 120, -1, 175, 101, 120, -1, 64, 1, ! -1, 175, 101, 1, -1, 96, 97, -1, 96, 177, ! 97, -1, 178, -1, 177, 178, -1, 179, -1, 180, ! -1, 135, -1, 170, -1, 145, -1, 152, 100, -1, ! 152, 1, -1, 96, 97, -1, 96, 101, 97, -1, ! 96, 182, 97, -1, 96, 182, 101, 97, -1, 149, ! -1, 182, 101, 149, -1, 182, 101, 1, -1, 96, ! 97, -1, 184, 186, 185, -1, 96, -1, 97, -1, ! 187, -1, 186, 187, -1, 188, -1, 190, -1, 135, ! -1, 189, 100, -1, 115, 146, -1, 156, 115, 146, ! -1, 192, -1, 195, -1, 199, -1, 200, -1, 211, ! -1, 215, -1, 192, -1, 196, -1, 201, -1, 212, ! -1, 216, -1, 183, -1, 193, -1, 197, -1, 202, ! -1, 214, -1, 222, -1, 223, -1, 224, -1, 226, ! -1, 225, -1, 228, -1, 100, -1, 125, 89, -1, ! 194, 190, -1, 125, 1, -1, 194, 191, -1, 198, ! 100, -1, 1, 100, -1, 1, 96, -1, 1, 97, ! -1, 169, 94, 1, -1, 169, 94, 95, 1, -1, ! 169, 94, 241, 1, -1, 169, 94, 241, 95, 1, ! -1, 122, 102, 66, 1, -1, 122, 102, 66, 94, ! 1, -1, 122, 102, 66, 94, 241, 1, -1, 122, ! 102, 66, 94, 241, 95, 1, -1, 122, 102, 66, ! 94, 95, 1, -1, 270, -1, 254, -1, 255, -1, ! 250, -1, 251, -1, 247, -1, 236, -1, 49, 94, ! 273, 95, 190, -1, 49, 1, -1, 49, 94, 1, ! -1, 49, 94, 273, 1, -1, 49, 94, 273, 95, ! 191, 57, 190, -1, 49, 94, 273, 95, 191, 57, ! 191, -1, -1, 204, 203, 205, -1, 69, 94, 273, ! 95, -1, 69, 1, -1, 69, 94, 1, -1, 69, ! 94, 273, 95, 1, -1, 96, 97, -1, 96, 208, ! 97, -1, 96, 206, 97, -1, 96, 206, 208, 97, ! -1, 207, -1, 206, 207, -1, 208, 186, -1, 209, ! -1, 208, 209, -1, 63, 274, 89, -1, 48, 89, ! -1, 63, 1, -1, 63, 274, 1, -1, 48, 1, ! -1, 67, 94, 273, 95, -1, 210, 190, -1, 67, ! 1, -1, 67, 94, 1, -1, 67, 94, 273, 1, ! -1, 210, 191, -1, 52, -1, 213, 190, 67, 94, ! 273, 95, 100, -1, 218, 100, 273, 100, 220, 95, ! 190, -1, 218, 100, 100, 220, 95, 190, -1, 218, ! 100, 1, -1, 218, 100, 273, 100, 1, -1, 218, ! 100, 100, 1, -1, 218, 100, 273, 100, 220, 95, ! 191, -1, 218, 100, 100, 220, 95, 191, -1, 72, ! 94, -1, 72, 1, -1, 72, 94, 1, -1, 217, ! 219, -1, -1, 221, -1, 189, -1, 221, 1, -1, ! -1, 221, -1, 198, -1, 221, 101, 198, -1, 221, ! 101, 1, -1, 55, 100, -1, 55, 125, 100, -1, ! 55, 1, -1, 55, 125, 1, -1, 74, 100, -1, ! 74, 125, 100, -1, 74, 1, -1, 74, 125, 1, ! -1, 59, 100, -1, 59, 273, 100, -1, 59, 1, ! -1, 59, 273, 1, -1, 50, 273, 100, -1, 50, ! 1, -1, 50, 273, 1, -1, 227, 94, 273, 95, ! 183, -1, 227, 94, 273, 95, 1, -1, 227, 1, ! -1, 227, 94, 1, 95, -1, 227, 94, 1, -1, ! 134, -1, 71, 183, 229, -1, 71, 183, 232, -1, ! 71, 183, 229, 232, -1, 71, 1, -1, 230, -1, ! 229, 230, -1, 231, 183, -1, 61, 94, 155, 95, ! -1, 61, 1, -1, 61, 94, 1, -1, 61, 94, ! 1, 95, -1, 65, 183, -1, 65, 1, -1, 234, ! -1, 242, -1, 114, -1, 77, -1, 94, 273, 95, ! -1, 236, -1, 246, -1, 247, -1, 248, -1, 235, ! -1, 122, 102, 77, -1, 94, 273, 1, -1, 122, ! 102, 1, -1, 116, 102, 1, -1, 60, 102, 1, ! -1, 122, 102, 68, -1, 121, 102, 68, -1, 116, ! 102, 68, -1, 60, 102, 68, -1, 73, 119, 94, ! 241, 95, -1, 73, 119, 94, 95, -1, 237, -1, ! 240, 125, 94, 95, -1, 240, 125, 94, 95, 141, ! -1, 240, 125, 94, 241, 95, -1, 240, 125, 94, ! 241, 95, 141, -1, 73, 1, 100, -1, 73, 119, ! 1, -1, 73, 119, 94, 1, -1, 73, 119, 94, ! 241, 1, -1, 240, 1, -1, 240, 125, 1, -1, ! -1, 73, 119, 94, 241, 95, 238, 141, -1, -1, ! 73, 119, 94, 95, 239, 141, -1, 122, 102, 73, ! -1, 233, 102, 73, -1, 273, -1, 241, 101, 273, ! -1, 241, 101, 1, -1, 73, 116, 243, -1, 73, ! 118, 243, -1, 73, 116, 243, 245, -1, 73, 118, ! 243, 245, -1, 73, 118, 245, 181, -1, 73, 116, ! 245, 181, -1, 73, 1, 99, -1, 73, 1, 98, ! -1, 244, -1, 243, 244, -1, 98, 273, 99, -1, ! 98, 273, 1, -1, 98, 1, -1, 98, 99, -1, ! 245, 98, 99, -1, 245, 98, 1, -1, 233, 102, ! 125, -1, 66, 102, 125, -1, 66, 1, -1, 122, ! 94, 95, -1, 122, 94, 241, 95, -1, 233, 102, ! 125, 94, 95, -1, 233, 102, 125, 94, 241, 95, ! -1, 66, 102, 125, 94, 95, -1, 66, 102, 125, ! 94, 241, 95, -1, 66, 102, 1, 95, -1, 66, ! 102, 1, 102, -1, 122, 98, 273, 99, -1, 234, ! 98, 273, 99, -1, 122, 98, 1, -1, 122, 98, ! 273, 1, -1, 234, 98, 1, -1, 234, 98, 273, ! 1, -1, 233, -1, 122, -1, 250, -1, 251, -1, ! 249, 47, -1, 249, 46, -1, 254, -1, 255, -1, ! 3, 253, -1, 256, -1, 3, 1, -1, 252, -1, ! 4, 252, -1, 4, 1, -1, 47, 253, -1, 47, ! 1, -1, 46, 253, -1, 46, 1, -1, 249, -1, ! 90, 253, -1, 91, 253, -1, 257, -1, 90, 1, ! -1, 91, 1, -1, 94, 116, 245, 95, 253, -1, ! 94, 116, 95, 253, -1, 94, 273, 95, 256, -1, ! 94, 122, 245, 95, 256, -1, 94, 116, 98, 1, ! -1, 94, 1, -1, 94, 116, 245, 95, 1, -1, ! 94, 116, 95, 1, -1, 94, 122, 245, 95, 1, ! -1, 253, -1, 258, 5, 253, -1, 258, 6, 253, ! -1, 258, 7, 253, -1, 258, 5, 1, -1, 258, ! 6, 1, -1, 258, 7, 1, -1, 258, -1, 259, ! 3, 258, -1, 259, 4, 258, -1, 259, 3, 1, ! -1, 259, 4, 1, -1, 259, -1, 260, 8, 259, ! -1, 260, 9, 259, -1, 260, 10, 259, -1, 260, ! 8, 1, -1, 260, 9, 1, -1, 260, 10, 1, ! -1, 260, -1, 261, 20, 260, -1, 261, 18, 260, ! -1, 261, 21, 260, -1, 261, 19, 260, -1, 261, ! 58, 117, -1, 261, 20, 1, -1, 261, 18, 1, ! -1, 261, 21, 1, -1, 261, 19, 1, -1, 261, ! 58, 1, -1, 261, -1, 262, 16, 261, -1, 262, ! 17, 261, -1, 262, 16, 1, -1, 262, 17, 1, ! -1, 262, -1, 263, 11, 262, -1, 263, 11, 1, ! -1, 263, -1, 264, 12, 263, -1, 264, 12, 1, ! -1, 264, -1, 265, 13, 264, -1, 265, 13, 1, ! -1, 265, -1, 266, 14, 265, -1, 266, 14, 1, ! -1, 266, -1, 267, 15, 266, -1, 267, 15, 1, ! -1, 267, -1, 267, 88, 273, 89, 268, -1, 267, ! 88, 89, 1, -1, 267, 88, 1, -1, 267, 88, ! 273, 89, 1, -1, 268, -1, 270, -1, 271, 272, ! 269, -1, 271, 272, 1, -1, 122, -1, 246, -1, ! 248, -1, 92, -1, 93, -1, 269, -1, 273, -1 }; ! /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ ! static const unsigned short yyrline[] = { ! 0, 606, 606, 606, 636, 637, 638, 639, 640, 641, ! 646, 647, 651, 652, 653, 657, 658, 662, 666, 670, ! 674, 682, 694, 695, 699, 703, 708, 713, 714, 715, ! 716, 717, 718, 719, 720, 724, 728, 735, 736, 740, ! 745, 747, 752, 753, 757, 783, 785, 790, 808, 810, ! 815, 817, 819, 820, 831, 835, 852, 851, 856, 855, ! 859, 861, 863, 868, 873, 874, 876, 878, 883, 884, ! 886, 894, 899, 904, 909, 917, 928, 929, 933, 934, ! 935, 936, 947, 948, 949, 951, 953, 958, 960, 972, ! 973, 975, 980, 982, 989, 995, 1004, 1005, 1007, 1009, ! 1019, 1024, 1025, 1031, 1030, 1041, 1046, 1048, 1050, 1052, ! 1054, 1059, 1061, 1063, 1065, 1073, 1078, 1080, 1089, 1091, ! 1096, 1100, 1105, 1110, 1114, 1119, 1124, 1132, 1142, 1143, ! 1145, 1150, 1152, 1154, 1159, 1160, 1165, 1174, 1191, 1190, ! 1200, 1202, 1207, 1212, 1220, 1225, 1227, 1229, 1234, 1239, ! 1245, 1253, 1255, 1260, 1266, 1278, 1277, 1282, 1281, 1286, ! 1285, 1290, 1289, 1293, 1295, 1300, 1305, 1310, 1312, 1317, ! 1319, 1324, 1325, 1329, 1330, 1331, 1333, 1338, 1342, 1347, ! 1353, 1355, 1357, 1359, 1364, 1369, 1373, 1379, 1387, 1392, ! 1397, 1411, 1412, 1416, 1417, 1419, 1427, 1431, 1433, 1438, ! 1439, 1440, 1441, 1442, 1443, 1448, 1449, 1450, 1451, 1452, ! 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, ! 1467, 1471, 1489, 1500, 1502, 1507, 1514, 1523, 1528, 1533, ! 1538, 1540, 1545, 1547, 1552, 1554, 1556, 1558, 1560, 1565, ! 1566, 1567, 1568, 1569, 1570, 1571, 1575, 1580, 1582, 1584, ! 1589, 1594, 1600, 1599, 1615, 1620, 1622, 1624, 1632, 1634, ! 1636, 1638, 1643, 1644, 1648, 1652, 1653, 1657, 1663, 1669, ! 1671, 1673, 1678, 1686, 1688, 1690, 1692, 1697, 1702, 1711, ! 1716, 1722, 1729, 1731, 1733, 1738, 1740, 1750, 1756, 1758, ! 1763, 1776, 1777, 1783, 1789, 1794, 1795, 1800, 1802, 1804, ! 1809, 1811, 1813, 1815, 1820, 1822, 1824, 1826, 1831, 1833, ! 1835, 1837, 1842, 1847, 1849, 1854, 1860, 1862, 1864, 1866, ! 1871, 1883, 1885, 1887, 1892, 1897, 1898, 1906, 1915, 1931, ! 1933, 1938, 1943, 1945, 1951, 1952, 1956, 1957, 1959, 1961, ! 1962, 1963, 1964, 1965, 1969, 1974, 1976, 1978, 1980, 1985, ! 1987, 1989, 1991, 1999, 2001, 2003, 2007, 2013, 2014, 2020, ! 2021, 2023, 2025, 2027, 2029, 2031, 2042, 2041, 2075, 2074, ! 2092, 2094, 2099, 2104, 2109, 2114, 2116, 2118, 2120, 2124, ! 2135, 2144, 2146, 2151, 2153, 2158, 2168, 2170, 2179, 2205, ! 2207, 2212, 2216, 2222, 2227, 2229, 2231, 2242, 2253, 2258, ! 2267, 2269, 2274, 2276, 2278, 2283, 2288, 2293, 2301, 2302, ! 2303, 2304, 2308, 2313, 2318, 2319, 2320, 2322, 2323, 2328, ! 2333, 2335, 2340, 2342, 2347, 2349, 2354, 2355, 2357, 2359, ! 2360, 2362, 2367, 2375, 2377, 2379, 2393, 2395, 2400, 2402, ! 2404, 2409, 2410, 2415, 2420, 2425, 2427, 2429, 2434, 2435, ! 2440, 2445, 2447, 2452, 2453, 2458, 2463, 2468, 2470, 2472, ! 2477, 2478, 2483, 2488, 2493, 2498, 2500, 2502, 2504, 2506, ! 2508, 2513, 2514, 2519, 2524, 2526, 2531, 2532, 2537, 2542, ! 2543, 2548, 2553, 2554, 2559, 2564, 2565, 2570, 2575, 2576, ! 2581, 2586, 2587, 2592, 2598, 2600, 2605, 2606, 2610, 2612, ! 2620, 2621, 2622, 2626, 2627, 2631, 2635 }; #endif ! #if YYDEBUG || YYERROR_VERBOSE ! /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. ! First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { ! "$end", "error", "$undefined", "PLUS_TK", "MINUS_TK", "MULT_TK", "DIV_TK", "REM_TK", "LS_TK", "SRS_TK", "ZRS_TK", "AND_TK", "XOR_TK", "OR_TK", "BOOL_AND_TK", "BOOL_OR_TK", "EQ_TK", "NEQ_TK", "GT_TK", "GTE_TK", "LT_TK", "LTE_TK", "PLUS_ASSIGN_TK", "MINUS_ASSIGN_TK", --- 574,896 ---- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, ! 2, 2, 2, 2, 2, 2, 1, 3, 4, 5, ! 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ! 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, ! 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, ! 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, ! 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, ! 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, ! 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, ! 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, ! 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, ! 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, ! 106, 107, 108, 109, 110, 111 }; #if YYDEBUG ! static const short yyprhs[] = { ! 0, 0, 1, 4, 6, 8, 10, 12, 14, 16, ! 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, ! 39, 42, 44, 46, 48, 52, 54, 55, 57, 59, ! 61, 64, 67, 70, 74, 76, 79, 81, 84, 88, ! 91, 95, 97, 99, 103, 106, 110, 116, 121, 127, ! 129, 131, 133, 135, 137, 140, 141, 149, 150, 157, ! 161, 164, 168, 173, 174, 177, 181, 184, 185, 188, ! 191, 193, 197, 201, 204, 208, 210, 213, 215, 217, ! 219, 221, 223, 225, 227, 229, 231, 235, 240, 242, ! 246, 250, 252, 256, 260, 265, 267, 271, 274, 278, ! 282, 284, 286, 287, 291, 294, 298, 302, 307, 312, ! 315, 319, 322, 326, 329, 333, 338, 342, 346, 350, ! 352, 356, 360, 363, 367, 370, 374, 376, 377, 380, ! 383, 385, 389, 393, 395, 397, 400, 402, 403, 407, ! 410, 414, 418, 423, 426, 430, 434, 439, 441, 446, ! 452, 460, 467, 469, 471, 472, 477, 478, 484, 485, ! 491, 492, 499, 503, 508, 511, 515, 518, 522, 525, ! 529, 531, 534, 536, 538, 540, 542, 544, 547, 550, ! 553, 557, 561, 566, 568, 572, 576, 579, 583, 585, ! 587, 589, 592, 594, 596, 598, 601, 604, 608, 610, ! 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, ! 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, ! 652, 654, 656, 659, 662, 665, 668, 671, 674, 677, ! 680, 684, 689, 694, 700, 705, 711, 718, 726, 733, ! 735, 737, 739, 741, 743, 745, 747, 753, 756, 760, ! 765, 773, 781, 782, 786, 791, 794, 798, 804, 807, ! 811, 815, 820, 822, 825, 828, 830, 833, 837, 840, ! 843, 847, 850, 855, 858, 861, 865, 870, 873, 875, ! 883, 891, 898, 902, 908, 913, 921, 928, 931, 934, ! 938, 941, 942, 944, 946, 949, 950, 952, 954, 958, ! 962, 965, 969, 972, 976, 979, 983, 986, 990, 993, ! 997, 1000, 1004, 1008, 1011, 1015, 1021, 1025, 1028, 1032, ! 1038, 1044, 1047, 1052, 1056, 1058, 1062, 1066, 1071, 1074, ! 1076, 1079, 1082, 1087, 1090, 1094, 1099, 1102, 1105, 1107, ! 1109, 1111, 1113, 1117, 1119, 1121, 1123, 1125, 1127, 1131, ! 1135, 1139, 1143, 1147, 1151, 1155, 1159, 1163, 1169, 1174, ! 1176, 1181, 1187, 1193, 1200, 1204, 1208, 1213, 1219, 1222, ! 1226, 1227, 1235, 1236, 1243, 1247, 1251, 1253, 1257, 1261, ! 1265, 1269, 1274, 1279, 1284, 1289, 1293, 1297, 1299, 1302, ! 1306, 1310, 1313, 1316, 1320, 1324, 1328, 1332, 1335, 1339, ! 1344, 1350, 1357, 1363, 1370, 1375, 1380, 1385, 1390, 1394, ! 1399, 1403, 1408, 1410, 1412, 1414, 1416, 1419, 1422, 1424, ! 1426, 1429, 1431, 1434, 1436, 1439, 1442, 1445, 1448, 1451, ! 1454, 1456, 1459, 1462, 1464, 1467, 1470, 1476, 1481, 1486, ! 1492, 1497, 1500, 1506, 1511, 1517, 1519, 1523, 1527, 1531, ! 1535, 1539, 1543, 1545, 1549, 1553, 1557, 1561, 1563, 1567, ! 1571, 1575, 1579, 1583, 1587, 1589, 1593, 1597, 1601, 1605, ! 1609, 1613, 1617, 1621, 1625, 1629, 1631, 1635, 1639, 1643, ! 1647, 1649, 1653, 1657, 1659, 1663, 1667, 1669, 1673, 1677, ! 1679, 1683, 1687, 1689, 1693, 1697, 1699, 1705, 1710, 1714, ! 1720, 1722, 1724, 1728, 1732, 1734, 1736, 1738, 1740, 1742, ! 1744 }; static const short yyrhs[] = { ! -1, 113, 126, 0, 106, 0, 107, 0, 110, 0, ! 105, 0, 104, 0, 111, 0, 116, 0, 117, 0, ! 84, 0, 87, 0, 51, 0, 118, 0, 121, 0, ! 122, 0, 118, 0, 118, 0, 116, 246, 0, 122, ! 246, 0, 123, 0, 124, 0, 125, 0, 122, 103, ! 125, 0, 88, 0, 0, 129, 0, 127, 0, 128, ! 0, 129, 127, 0, 129, 128, 0, 127, 128, 0, ! 129, 127, 128, 0, 130, 0, 127, 130, 0, 133, ! 0, 128, 133, 0, 76, 122, 101, 0, 76, 1, ! 0, 76, 122, 1, 0, 131, 0, 132, 0, 56, ! 122, 101, 0, 56, 1, 0, 56, 122, 1, 0, ! 56, 122, 103, 5, 101, 0, 56, 122, 103, 1, ! 0, 56, 122, 103, 5, 1, 0, 135, 0, 170, ! 0, 193, 0, 1, 0, 45, 0, 134, 45, 0, ! 0, 134, 68, 125, 138, 139, 136, 141, 0, 0, ! 68, 125, 138, 139, 137, 141, 0, 134, 68, 1, ! 0, 68, 1, 0, 68, 125, 1, 0, 134, 68, ! 125, 1, 0, 0, 64, 119, 0, 64, 119, 1, ! 0, 64, 1, 0, 0, 53, 140, 0, 53, 1, ! 0, 120, 0, 140, 102, 120, 0, 140, 102, 1, ! 0, 97, 98, 0, 97, 142, 98, 0, 143, 0, ! 142, 143, 0, 144, 0, 160, 0, 162, 0, 183, ! 0, 145, 0, 150, 0, 135, 0, 170, 0, 193, ! 0, 115, 146, 101, 0, 134, 115, 146, 101, 0, ! 147, 0, 146, 102, 147, 0, 146, 102, 1, 0, ! 148, 0, 148, 94, 149, 0, 148, 94, 1, 0, ! 148, 94, 149, 1, 0, 125, 0, 148, 99, 100, ! 0, 125, 1, 0, 148, 99, 1, 0, 148, 100, ! 1, 0, 274, 0, 181, 0, 0, 152, 151, 159, ! 0, 152, 1, 0, 115, 153, 157, 0, 60, 153, ! 157, 0, 134, 115, 153, 157, 0, 134, 60, 153, ! 157, 0, 115, 1, 0, 134, 115, 1, 0, 60, ! 1, 0, 134, 60, 1, 0, 134, 1, 0, 125, ! 95, 96, 0, 125, 95, 154, 96, 0, 153, 99, ! 100, 0, 125, 95, 1, 0, 153, 99, 1, 0, ! 155, 0, 154, 102, 155, 0, 154, 102, 1, 0, ! 115, 148, 0, 156, 115, 148, 0, 115, 1, 0, ! 156, 115, 1, 0, 134, 0, 0, 54, 158, 0, ! 54, 1, 0, 119, 0, 158, 102, 119, 0, 158, ! 102, 1, 0, 183, 0, 101, 0, 161, 183, 0, ! 134, 0, 0, 164, 163, 166, 0, 165, 157, 0, ! 134, 165, 157, 0, 123, 95, 96, 0, 123, 95, ! 154, 96, 0, 184, 167, 0, 184, 168, 167, 0, ! 184, 186, 167, 0, 184, 168, 186, 167, 0, 185, ! 0, 169, 95, 96, 101, 0, 169, 95, 242, 96, ! 101, 0, 122, 103, 66, 95, 242, 96, 101, 0, ! 122, 103, 66, 95, 96, 101, 0, 77, 0, 66, ! 0, 0, 62, 125, 171, 176, 0, 0, 134, 62, ! 125, 172, 176, 0, 0, 62, 125, 175, 173, 176, ! 0, 0, 134, 62, 125, 175, 174, 176, 0, 62, ! 125, 1, 0, 134, 62, 125, 1, 0, 64, 120, ! 0, 175, 102, 120, 0, 64, 1, 0, 175, 102, ! 1, 0, 97, 98, 0, 97, 177, 98, 0, 178, ! 0, 177, 178, 0, 179, 0, 180, 0, 135, 0, ! 170, 0, 145, 0, 152, 101, 0, 152, 1, 0, ! 97, 98, 0, 97, 102, 98, 0, 97, 182, 98, ! 0, 97, 182, 102, 98, 0, 149, 0, 182, 102, ! 149, 0, 182, 102, 1, 0, 97, 98, 0, 184, ! 186, 185, 0, 97, 0, 98, 0, 187, 0, 186, ! 187, 0, 188, 0, 190, 0, 135, 0, 189, 101, ! 0, 115, 146, 0, 156, 115, 146, 0, 192, 0, ! 195, 0, 199, 0, 200, 0, 211, 0, 215, 0, ! 192, 0, 196, 0, 201, 0, 212, 0, 216, 0, ! 183, 0, 193, 0, 197, 0, 202, 0, 214, 0, ! 222, 0, 223, 0, 224, 0, 227, 0, 225, 0, ! 229, 0, 226, 0, 101, 0, 125, 90, 0, 194, ! 190, 0, 125, 1, 0, 194, 191, 0, 198, 101, ! 0, 1, 101, 0, 1, 97, 0, 1, 98, 0, ! 169, 95, 1, 0, 169, 95, 96, 1, 0, 169, ! 95, 242, 1, 0, 169, 95, 242, 96, 1, 0, ! 122, 103, 66, 1, 0, 122, 103, 66, 95, 1, ! 0, 122, 103, 66, 95, 242, 1, 0, 122, 103, ! 66, 95, 242, 96, 1, 0, 122, 103, 66, 95, ! 96, 1, 0, 271, 0, 255, 0, 256, 0, 251, ! 0, 252, 0, 248, 0, 237, 0, 49, 95, 274, ! 96, 190, 0, 49, 1, 0, 49, 95, 1, 0, ! 49, 95, 274, 1, 0, 49, 95, 274, 96, 191, ! 57, 190, 0, 49, 95, 274, 96, 191, 57, 191, ! 0, 0, 204, 203, 205, 0, 69, 95, 274, 96, ! 0, 69, 1, 0, 69, 95, 1, 0, 69, 95, ! 274, 96, 1, 0, 97, 98, 0, 97, 208, 98, ! 0, 97, 206, 98, 0, 97, 206, 208, 98, 0, ! 207, 0, 206, 207, 0, 208, 186, 0, 209, 0, ! 208, 209, 0, 63, 275, 90, 0, 48, 90, 0, ! 63, 1, 0, 63, 275, 1, 0, 48, 1, 0, ! 67, 95, 274, 96, 0, 210, 190, 0, 67, 1, ! 0, 67, 95, 1, 0, 67, 95, 274, 1, 0, ! 210, 191, 0, 52, 0, 213, 190, 67, 95, 274, ! 96, 101, 0, 218, 101, 274, 101, 220, 96, 190, ! 0, 218, 101, 101, 220, 96, 190, 0, 218, 101, ! 1, 0, 218, 101, 274, 101, 1, 0, 218, 101, ! 101, 1, 0, 218, 101, 274, 101, 220, 96, 191, ! 0, 218, 101, 101, 220, 96, 191, 0, 72, 95, ! 0, 72, 1, 0, 72, 95, 1, 0, 217, 219, ! 0, 0, 221, 0, 189, 0, 221, 1, 0, 0, ! 221, 0, 198, 0, 221, 102, 198, 0, 221, 102, ! 1, 0, 55, 101, 0, 55, 125, 101, 0, 55, ! 1, 0, 55, 125, 1, 0, 74, 101, 0, 74, ! 125, 101, 0, 74, 1, 0, 74, 125, 1, 0, ! 59, 101, 0, 59, 274, 101, 0, 59, 1, 0, ! 59, 274, 1, 0, 50, 274, 101, 0, 50, 1, ! 0, 50, 274, 1, 0, 78, 274, 90, 274, 101, ! 0, 78, 274, 101, 0, 78, 1, 0, 78, 274, ! 1, 0, 228, 95, 274, 96, 183, 0, 228, 95, ! 274, 96, 1, 0, 228, 1, 0, 228, 95, 1, ! 96, 0, 228, 95, 1, 0, 134, 0, 71, 183, ! 230, 0, 71, 183, 233, 0, 71, 183, 230, 233, ! 0, 71, 1, 0, 231, 0, 230, 231, 0, 232, ! 183, 0, 61, 95, 155, 96, 0, 61, 1, 0, ! 61, 95, 1, 0, 61, 95, 1, 96, 0, 65, ! 183, 0, 65, 1, 0, 235, 0, 243, 0, 114, ! 0, 77, 0, 95, 274, 96, 0, 237, 0, 247, ! 0, 248, 0, 249, 0, 236, 0, 122, 103, 77, ! 0, 95, 274, 1, 0, 122, 103, 1, 0, 116, ! 103, 1, 0, 60, 103, 1, 0, 122, 103, 68, ! 0, 121, 103, 68, 0, 116, 103, 68, 0, 60, ! 103, 68, 0, 73, 119, 95, 242, 96, 0, 73, ! 119, 95, 96, 0, 238, 0, 241, 125, 95, 96, ! 0, 241, 125, 95, 96, 141, 0, 241, 125, 95, ! 242, 96, 0, 241, 125, 95, 242, 96, 141, 0, ! 73, 1, 101, 0, 73, 119, 1, 0, 73, 119, ! 95, 1, 0, 73, 119, 95, 242, 1, 0, 241, ! 1, 0, 241, 125, 1, 0, 0, 73, 119, 95, ! 242, 96, 239, 141, 0, 0, 73, 119, 95, 96, ! 240, 141, 0, 122, 103, 73, 0, 234, 103, 73, ! 0, 274, 0, 242, 102, 274, 0, 242, 102, 1, ! 0, 73, 116, 244, 0, 73, 118, 244, 0, 73, ! 116, 244, 246, 0, 73, 118, 244, 246, 0, 73, ! 118, 246, 181, 0, 73, 116, 246, 181, 0, 73, ! 1, 100, 0, 73, 1, 99, 0, 245, 0, 244, ! 245, 0, 99, 274, 100, 0, 99, 274, 1, 0, ! 99, 1, 0, 99, 100, 0, 246, 99, 100, 0, ! 246, 99, 1, 0, 234, 103, 125, 0, 66, 103, ! 125, 0, 66, 1, 0, 122, 95, 96, 0, 122, ! 95, 242, 96, 0, 234, 103, 125, 95, 96, 0, ! 234, 103, 125, 95, 242, 96, 0, 66, 103, 125, ! 95, 96, 0, 66, 103, 125, 95, 242, 96, 0, ! 66, 103, 1, 96, 0, 66, 103, 1, 103, 0, ! 122, 99, 274, 100, 0, 235, 99, 274, 100, 0, ! 122, 99, 1, 0, 122, 99, 274, 1, 0, 235, ! 99, 1, 0, 235, 99, 274, 1, 0, 234, 0, ! 122, 0, 251, 0, 252, 0, 250, 47, 0, 250, ! 46, 0, 255, 0, 256, 0, 3, 254, 0, 257, ! 0, 3, 1, 0, 253, 0, 4, 253, 0, 4, ! 1, 0, 47, 254, 0, 47, 1, 0, 46, 254, ! 0, 46, 1, 0, 250, 0, 91, 254, 0, 92, ! 254, 0, 258, 0, 91, 1, 0, 92, 1, 0, ! 95, 116, 246, 96, 254, 0, 95, 116, 96, 254, ! 0, 95, 274, 96, 257, 0, 95, 122, 246, 96, ! 257, 0, 95, 116, 99, 1, 0, 95, 1, 0, ! 95, 116, 246, 96, 1, 0, 95, 116, 96, 1, ! 0, 95, 122, 246, 96, 1, 0, 254, 0, 259, ! 5, 254, 0, 259, 6, 254, 0, 259, 7, 254, ! 0, 259, 5, 1, 0, 259, 6, 1, 0, 259, ! 7, 1, 0, 259, 0, 260, 3, 259, 0, 260, ! 4, 259, 0, 260, 3, 1, 0, 260, 4, 1, ! 0, 260, 0, 261, 8, 260, 0, 261, 9, 260, ! 0, 261, 10, 260, 0, 261, 8, 1, 0, 261, ! 9, 1, 0, 261, 10, 1, 0, 261, 0, 262, ! 20, 261, 0, 262, 18, 261, 0, 262, 21, 261, ! 0, 262, 19, 261, 0, 262, 58, 117, 0, 262, ! 20, 1, 0, 262, 18, 1, 0, 262, 21, 1, ! 0, 262, 19, 1, 0, 262, 58, 1, 0, 262, ! 0, 263, 16, 262, 0, 263, 17, 262, 0, 263, ! 16, 1, 0, 263, 17, 1, 0, 263, 0, 264, ! 11, 263, 0, 264, 11, 1, 0, 264, 0, 265, ! 12, 264, 0, 265, 12, 1, 0, 265, 0, 266, ! 13, 265, 0, 266, 13, 1, 0, 266, 0, 267, ! 14, 266, 0, 267, 14, 1, 0, 267, 0, 268, ! 15, 267, 0, 268, 15, 1, 0, 268, 0, 268, ! 89, 274, 90, 269, 0, 268, 89, 90, 1, 0, ! 268, 89, 1, 0, 268, 89, 274, 90, 1, 0, ! 269, 0, 271, 0, 272, 273, 270, 0, 272, 273, ! 1, 0, 122, 0, 247, 0, 249, 0, 93, 0, ! 94, 0, 270, 0, 274, 0 }; ! #endif ! ! #if YYDEBUG ! /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ ! static const short yyrline[] = { ! 0, 605, 605, 621, 623, 624, 625, 626, 627, 631, ! 633, 636, 638, 639, 642, 644, 647, 651, 655, 659, ! 668, 679, 681, 684, 688, 693, 698, 700, 701, 702, ! 703, 704, 705, 706, 709, 714, 720, 722, 725, 731, ! 733, 737, 739, 742, 769, 771, 775, 794, 796, 800, ! 803, 805, 806, 816, 821, 836, 836, 841, 841, 845, ! 847, 849, 854, 858, 860, 862, 864, 868, 870, 872, ! 879, 885, 890, 894, 903, 913, 915, 918, 920, 921, ! 922, 932, 934, 935, 937, 939, 943, 946, 956, 959, ! 961, 965, 968, 975, 981, 989, 991, 993, 995, 1000, ! 1004, 1006, 1010, 1010, 1022, 1026, 1029, 1031, 1033, 1035, ! 1040, 1045, 1050, 1055, 1062, 1068, 1070, 1079, 1081, 1085, ! 1090, 1095, 1099, 1104, 1109, 1114, 1121, 1131, 1133, 1135, ! 1139, 1142, 1144, 1148, 1150, 1154, 1163, 1179, 1179, 1189, ! 1192, 1196, 1202, 1206, 1215, 1217, 1219, 1223, 1228, 1235, ! 1243, 1245, 1249, 1256, 1266, 1266, 1271, 1271, 1275, 1275, ! 1279, 1279, 1283, 1285, 1289, 1295, 1300, 1302, 1306, 1309, ! 1313, 1315, 1318, 1320, 1321, 1323, 1327, 1331, 1337, 1342, ! 1345, 1347, 1349, 1353, 1359, 1363, 1368, 1377, 1381, 1386, ! 1400, 1402, 1405, 1407, 1409, 1416, 1420, 1423, 1427, 1429, ! 1430, 1431, 1432, 1433, 1437, 1439, 1440, 1441, 1442, 1446, ! 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, ! 1458, 1461, 1479, 1490, 1493, 1497, 1504, 1514, 1519, 1524, ! 1529, 1531, 1536, 1538, 1543, 1545, 1547, 1549, 1551, 1555, ! 1557, 1558, 1559, 1560, 1561, 1562, 1565, 1571, 1573, 1575, ! 1579, 1584, 1589, 1589, 1605, 1611, 1613, 1615, 1622, 1625, ! 1627, 1629, 1633, 1635, 1638, 1642, 1644, 1647, 1654, 1660, ! 1662, 1664, 1668, 1676, 1679, 1681, 1683, 1687, 1692, 1701, ! 1706, 1713, 1720, 1722, 1724, 1728, 1731, 1740, 1747, 1749, ! 1753, 1766, 1768, 1774, 1780, 1784, 1786, 1790, 1793, 1795, ! 1799, 1802, 1804, 1806, 1810, 1813, 1815, 1817, 1821, 1824, ! 1826, 1828, 1832, 1838, 1840, 1844, 1849, 1853, 1855, 1859, ! 1866, 1868, 1870, 1872, 1876, 1888, 1891, 1893, 1898, 1902, ! 1904, 1911, 1920, 1937, 1939, 1944, 1948, 1951, 1956, 1958, ! 1961, 1963, 1965, 1967, 1968, 1969, 1970, 1971, 1975, 1980, ! 1982, 1984, 1986, 1990, 1993, 1995, 1997, 2004, 2007, 2009, ! 2013, 2019, 2020, 2026, 2027, 2029, 2031, 2033, 2035, 2037, ! 2046, 2046, 2080, 2080, 2097, 2100, 2104, 2110, 2115, 2119, ! 2122, 2124, 2126, 2130, 2141, 2150, 2152, 2156, 2159, 2163, ! 2174, 2176, 2184, 2211, 2213, 2217, 2222, 2228, 2232, 2235, ! 2237, 2248, 2259, 2264, 2273, 2275, 2279, 2282, 2284, 2289, ! 2294, 2299, 2306, 2308, 2309, 2310, 2313, 2318, 2323, 2325, ! 2326, 2328, 2329, 2333, 2339, 2341, 2345, 2348, 2352, 2355, ! 2359, 2361, 2363, 2365, 2366, 2368, 2372, 2381, 2383, 2385, ! 2399, 2401, 2406, 2408, 2410, 2414, 2416, 2421, 2426, 2431, ! 2433, 2435, 2439, 2441, 2446, 2451, 2453, 2457, 2459, 2464, ! 2469, 2474, 2476, 2478, 2482, 2484, 2489, 2494, 2499, 2504, ! 2506, 2508, 2510, 2512, 2514, 2518, 2520, 2525, 2530, 2532, ! 2536, 2538, 2543, 2547, 2549, 2554, 2558, 2560, 2565, 2569, ! 2571, 2576, 2580, 2582, 2587, 2591, 2593, 2598, 2604, 2606, ! 2610, 2612, 2615, 2618, 2625, 2627, 2628, 2631, 2633, 2636, ! 2640 }; #endif ! ! #if (YYDEBUG) || defined YYERROR_VERBOSE ! ! /* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */ static const char *const yytname[] = { ! "$", "error", "$undefined.", "PLUS_TK", "MINUS_TK", "MULT_TK", "DIV_TK", "REM_TK", "LS_TK", "SRS_TK", "ZRS_TK", "AND_TK", "XOR_TK", "OR_TK", "BOOL_AND_TK", "BOOL_OR_TK", "EQ_TK", "NEQ_TK", "GT_TK", "GTE_TK", "LT_TK", "LTE_TK", "PLUS_ASSIGN_TK", "MINUS_ASSIGN_TK", *************** static const char *const yytname[] = *** 1195,1207 **** "ELSE_TK", "INSTANCEOF_TK", "RETURN_TK", "VOID_TK", "CATCH_TK", "INTERFACE_TK", "CASE_TK", "EXTENDS_TK", "FINALLY_TK", "SUPER_TK", "WHILE_TK", "CLASS_TK", "SWITCH_TK", "CONST_TK", "TRY_TK", "FOR_TK", ! "NEW_TK", "CONTINUE_TK", "GOTO_TK", "PACKAGE_TK", "THIS_TK", "BYTE_TK", ! "SHORT_TK", "INT_TK", "LONG_TK", "CHAR_TK", "INTEGRAL_TK", "FLOAT_TK", ! "DOUBLE_TK", "FP_TK", "ID_TK", "REL_QM_TK", "REL_CL_TK", "NOT_TK", ! "NEG_TK", "ASSIGN_ANY_TK", "ASSIGN_TK", "OP_TK", "CP_TK", "OCB_TK", ! "CCB_TK", "OSB_TK", "CSB_TK", "SC_TK", "C_TK", "DOT_TK", ! "STRING_LIT_TK", "CHAR_LIT_TK", "INT_LIT_TK", "FP_LIT_TK", "TRUE_TK", ! "FALSE_TK", "BOOL_LIT_TK", "NULL_TK", "$accept", "goal", "@1", "literal", "type", "primitive_type", "reference_type", "class_or_interface_type", "class_type", "interface_type", "array_type", "name", "simple_name", "qualified_name", "identifier", --- 904,916 ---- "ELSE_TK", "INSTANCEOF_TK", "RETURN_TK", "VOID_TK", "CATCH_TK", "INTERFACE_TK", "CASE_TK", "EXTENDS_TK", "FINALLY_TK", "SUPER_TK", "WHILE_TK", "CLASS_TK", "SWITCH_TK", "CONST_TK", "TRY_TK", "FOR_TK", ! "NEW_TK", "CONTINUE_TK", "GOTO_TK", "PACKAGE_TK", "THIS_TK", ! "ASSERT_TK", "BYTE_TK", "SHORT_TK", "INT_TK", "LONG_TK", "CHAR_TK", ! "INTEGRAL_TK", "FLOAT_TK", "DOUBLE_TK", "FP_TK", "ID_TK", "REL_QM_TK", ! "REL_CL_TK", "NOT_TK", "NEG_TK", "ASSIGN_ANY_TK", "ASSIGN_TK", "OP_TK", ! "CP_TK", "OCB_TK", "CCB_TK", "OSB_TK", "CSB_TK", "SC_TK", "C_TK", ! "DOT_TK", "STRING_LIT_TK", "CHAR_LIT_TK", "INT_LIT_TK", "FP_LIT_TK", ! "TRUE_TK", "FALSE_TK", "BOOL_LIT_TK", "NULL_TK", "goal", "@1", "literal", "type", "primitive_type", "reference_type", "class_or_interface_type", "class_type", "interface_type", "array_type", "name", "simple_name", "qualified_name", "identifier", *************** static const char *const yytname[] = *** 1238,1246 **** "for_statement_nsi", "for_header", "for_begin", "for_init", "for_update", "statement_expression_list", "break_statement", "continue_statement", "return_statement", "throw_statement", ! "synchronized_statement", "synchronized", "try_statement", "catches", ! "catch_clause", "catch_clause_parameter", "finally", "primary", ! "primary_no_new_array", "type_literals", "class_instance_creation_expression", "anonymous_class_creation", "@11", "@12", "something_dot_new", "argument_list", "array_creation_expression", "dim_exprs", "dim_expr", "dims", --- 947,955 ---- "for_statement_nsi", "for_header", "for_begin", "for_init", "for_update", "statement_expression_list", "break_statement", "continue_statement", "return_statement", "throw_statement", ! "assert_statement", "synchronized_statement", "synchronized", ! "try_statement", "catches", "catch_clause", "catch_clause_parameter", ! "finally", "primary", "primary_no_new_array", "type_literals", "class_instance_creation_expression", "anonymous_class_creation", "@11", "@12", "something_dot_new", "argument_list", "array_creation_expression", "dim_exprs", "dim_expr", "dims", *************** static const char *const yytname[] = *** 1259,1308 **** }; #endif ! # ifdef YYPRINT ! /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to ! token YYLEX-NUM. */ ! static const unsigned short yytoknum[] = ! { ! 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, ! 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, ! 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, ! 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, ! 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, ! 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, ! 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, ! 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, ! 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, ! 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, ! 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, ! 365 ! }; ! # endif ! ! /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ ! static const unsigned short yyr1[] = { ! 0, 111, 113, 112, 114, 114, 114, 114, 114, 114, ! 115, 115, 116, 116, 116, 117, 117, 118, 119, 120, ! 121, 121, 122, 122, 123, 124, 125, 126, 126, 126, ! 126, 126, 126, 126, 126, 127, 127, 128, 128, 129, ! 129, 129, 130, 130, 131, 131, 131, 132, 132, 132, ! 133, 133, 133, 133, 134, 134, 136, 135, 137, 135, ! 135, 135, 135, 135, 138, 138, 138, 138, 139, 139, ! 139, 140, 140, 140, 141, 141, 142, 142, 143, 143, ! 143, 143, 144, 144, 144, 144, 144, 145, 145, 146, ! 146, 146, 147, 147, 147, 147, 148, 148, 148, 148, ! 148, 149, 149, 151, 150, 150, 152, 152, 152, 152, ! 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, ! 154, 154, 154, 155, 155, 155, 155, 156, 157, 157, ! 157, 158, 158, 158, 159, 159, 160, 161, 163, 162, ! 164, 164, 165, 165, 166, 166, 166, 166, 167, 168, ! 168, 168, 168, 169, 169, 171, 170, 172, 170, 173, ! 170, 174, 170, 170, 170, 175, 175, 175, 175, 176, ! 176, 177, 177, 178, 178, 178, 178, 179, 180, 180, ! 181, 181, 181, 181, 182, 182, 182, 183, 183, 184, ! 185, 186, 186, 187, 187, 187, 188, 189, 189, 190, ! 190, 190, 190, 190, 190, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 193, 194, 195, 195, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 198, --- 968,997 ---- }; #endif ! /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ ! static const short yyr1[] = { ! 0, 113, 112, 114, 114, 114, 114, 114, 114, 115, ! 115, 116, 116, 116, 117, 117, 118, 119, 120, 121, ! 121, 122, 122, 123, 124, 125, 126, 126, 126, 126, ! 126, 126, 126, 126, 127, 127, 128, 128, 129, 129, ! 129, 130, 130, 131, 131, 131, 132, 132, 132, 133, ! 133, 133, 133, 134, 134, 136, 135, 137, 135, 135, ! 135, 135, 135, 138, 138, 138, 138, 139, 139, 139, ! 140, 140, 140, 141, 141, 142, 142, 143, 143, 143, ! 143, 144, 144, 144, 144, 144, 145, 145, 146, 146, ! 146, 147, 147, 147, 147, 148, 148, 148, 148, 148, ! 149, 149, 151, 150, 150, 152, 152, 152, 152, 152, ! 152, 152, 152, 152, 153, 153, 153, 153, 153, 154, ! 154, 154, 155, 155, 155, 155, 156, 157, 157, 157, ! 158, 158, 158, 159, 159, 160, 161, 163, 162, 164, ! 164, 165, 165, 166, 166, 166, 166, 167, 168, 168, ! 168, 168, 169, 169, 171, 170, 172, 170, 173, 170, ! 174, 170, 170, 170, 175, 175, 175, 175, 176, 176, ! 177, 177, 178, 178, 178, 178, 179, 180, 180, 181, ! 181, 181, 181, 182, 182, 182, 183, 183, 184, 185, ! 186, 186, 187, 187, 187, 188, 189, 189, 190, 190, ! 190, 190, 190, 190, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 193, 194, 195, 195, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 198, *************** static const unsigned short yyr1[] = *** 1313,1363 **** 215, 215, 215, 215, 215, 216, 216, 217, 217, 217, 218, 219, 219, 219, 219, 220, 220, 221, 221, 221, 222, 222, 222, 222, 223, 223, 223, 223, 224, 224, ! 224, 224, 225, 225, 225, 226, 226, 226, 226, 226, ! 227, 228, 228, 228, 228, 229, 229, 230, 231, 231, ! 231, 231, 232, 232, 233, 233, 234, 234, 234, 234, ! 234, 234, 234, 234, 234, 234, 234, 234, 234, 235, ! 235, 235, 235, 236, 236, 236, 236, 236, 236, 236, ! 236, 236, 236, 236, 236, 236, 238, 237, 239, 237, ! 240, 240, 241, 241, 241, 242, 242, 242, 242, 242, ! 242, 242, 242, 243, 243, 244, 244, 244, 245, 245, ! 245, 246, 246, 246, 247, 247, 247, 247, 247, 247, ! 247, 247, 248, 248, 248, 248, 248, 248, 249, 249, ! 249, 249, 250, 251, 252, 252, 252, 252, 252, 253, ! 253, 253, 254, 254, 255, 255, 256, 256, 256, 256, ! 256, 256, 257, 257, 257, 257, 257, 257, 257, 257, ! 257, 258, 258, 258, 258, 258, 258, 258, 259, 259, ! 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, ! 261, 261, 261, 261, 261, 261, 261, 261, 261, 261, ! 261, 262, 262, 262, 262, 262, 263, 263, 263, 264, ! 264, 264, 265, 265, 265, 266, 266, 266, 267, 267, ! 267, 268, 268, 268, 268, 268, 269, 269, 270, 270, ! 271, 271, 271, 272, 272, 273, 274 }; ! /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ ! static const unsigned char yyr2[] = { ! 0, 2, 0, 2, 1, 1, 1, 1, 1, 1, ! 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ! 2, 2, 1, 1, 1, 3, 1, 0, 1, 1, ! 1, 2, 2, 2, 3, 1, 2, 1, 2, 3, ! 2, 3, 1, 1, 3, 2, 3, 5, 4, 5, ! 1, 1, 1, 1, 1, 2, 0, 7, 0, 6, ! 3, 2, 3, 4, 0, 2, 3, 2, 0, 2, ! 2, 1, 3, 3, 2, 3, 1, 2, 1, 1, ! 1, 1, 1, 1, 1, 1, 1, 3, 4, 1, ! 3, 3, 1, 3, 3, 4, 1, 3, 2, 3, ! 3, 1, 1, 0, 3, 2, 3, 3, 4, 4, ! 2, 3, 2, 3, 2, 3, 4, 3, 3, 3, ! 1, 3, 3, 2, 3, 2, 3, 1, 0, 2, ! 2, 1, 3, 3, 1, 1, 2, 1, 0, 3, ! 2, 3, 3, 4, 2, 3, 3, 4, 1, 4, ! 5, 7, 6, 1, 1, 0, 4, 0, 5, 0, ! 5, 0, 6, 3, 4, 2, 3, 2, 3, 2, ! 3, 1, 2, 1, 1, 1, 1, 1, 2, 2, ! 2, 3, 3, 4, 1, 3, 3, 2, 3, 1, ! 1, 1, 2, 1, 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, --- 1002,1053 ---- 215, 215, 215, 215, 215, 216, 216, 217, 217, 217, 218, 219, 219, 219, 219, 220, 220, 221, 221, 221, 222, 222, 222, 222, 223, 223, 223, 223, 224, 224, ! 224, 224, 225, 225, 225, 226, 226, 226, 226, 227, ! 227, 227, 227, 227, 228, 229, 229, 229, 229, 230, ! 230, 231, 232, 232, 232, 232, 233, 233, 234, 234, ! 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, ! 235, 235, 235, 236, 236, 236, 236, 237, 237, 237, ! 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, ! 239, 238, 240, 238, 241, 241, 242, 242, 242, 243, ! 243, 243, 243, 243, 243, 243, 243, 244, 244, 245, ! 245, 245, 246, 246, 246, 247, 247, 247, 248, 248, ! 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, ! 249, 249, 250, 250, 250, 250, 251, 252, 253, 253, ! 253, 253, 253, 254, 254, 254, 255, 255, 256, 256, ! 257, 257, 257, 257, 257, 257, 258, 258, 258, 258, ! 258, 258, 258, 258, 258, 259, 259, 259, 259, 259, ! 259, 259, 260, 260, 260, 260, 260, 261, 261, 261, ! 261, 261, 261, 261, 262, 262, 262, 262, 262, 262, ! 262, 262, 262, 262, 262, 263, 263, 263, 263, 263, ! 264, 264, 264, 265, 265, 265, 266, 266, 266, 267, ! 267, 267, 268, 268, 268, 269, 269, 269, 269, 269, ! 270, 270, 271, 271, 272, 272, 272, 273, 273, 274, ! 275 }; ! /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ ! static const short yyr2[] = { ! 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, ! 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, ! 2, 1, 1, 1, 3, 1, 0, 1, 1, 1, ! 2, 2, 2, 3, 1, 2, 1, 2, 3, 2, ! 3, 1, 1, 3, 2, 3, 5, 4, 5, 1, ! 1, 1, 1, 1, 2, 0, 7, 0, 6, 3, ! 2, 3, 4, 0, 2, 3, 2, 0, 2, 2, ! 1, 3, 3, 2, 3, 1, 2, 1, 1, 1, ! 1, 1, 1, 1, 1, 1, 3, 4, 1, 3, ! 3, 1, 3, 3, 4, 1, 3, 2, 3, 3, ! 1, 1, 0, 3, 2, 3, 3, 4, 4, 2, ! 3, 2, 3, 2, 3, 4, 3, 3, 3, 1, ! 3, 3, 2, 3, 2, 3, 1, 0, 2, 2, ! 1, 3, 3, 1, 1, 2, 1, 0, 3, 2, ! 3, 3, 4, 2, 3, 3, 4, 1, 4, 5, ! 7, 6, 1, 1, 0, 4, 0, 5, 0, 5, ! 0, 6, 3, 4, 2, 3, 2, 3, 2, 3, ! 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, ! 3, 3, 4, 1, 3, 3, 2, 3, 1, 1, ! 1, 2, 1, 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, *************** static const unsigned char yyr2[] = *** 1369,2801 **** 7, 6, 3, 5, 4, 7, 6, 2, 2, 3, 2, 0, 1, 1, 2, 0, 1, 1, 3, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, ! 2, 3, 3, 2, 3, 5, 5, 2, 4, 3, ! 1, 3, 3, 4, 2, 1, 2, 2, 4, 2, ! 3, 4, 2, 2, 1, 1, 1, 1, 3, 1, ! 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, ! 3, 3, 3, 5, 4, 1, 4, 5, 5, 6, ! 3, 3, 4, 5, 2, 3, 0, 7, 0, 6, ! 3, 3, 1, 3, 3, 3, 3, 4, 4, 4, ! 4, 3, 3, 1, 2, 3, 3, 2, 2, 3, ! 3, 3, 3, 2, 3, 4, 5, 6, 5, 6, ! 4, 4, 4, 4, 3, 4, 3, 4, 1, 1, ! 1, 1, 2, 2, 1, 1, 2, 1, 2, 1, ! 2, 2, 2, 2, 2, 2, 1, 2, 2, 1, ! 2, 2, 5, 4, 4, 5, 4, 2, 5, 4, ! 5, 1, 3, 3, 3, 3, 3, 3, 1, 3, ! 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, ! 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, ! 3, 1, 3, 3, 3, 3, 1, 3, 3, 1, ! 3, 3, 1, 3, 3, 1, 3, 3, 1, 3, ! 3, 1, 5, 4, 3, 5, 1, 1, 3, 3, ! 1, 1, 1, 1, 1, 1, 1 }; ! /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state ! STATE-NUM when YYTABLE doesn't specify something else to do. Zero ! means the default is an error. */ ! static const unsigned short yydefact[] = { ! 2, 0, 0, 1, 53, 54, 0, 0, 0, 0, ! 221, 3, 0, 0, 0, 35, 42, 43, 37, 0, ! 50, 51, 52, 45, 26, 0, 22, 23, 24, 0, ! 61, 0, 40, 0, 0, 36, 38, 0, 0, 55, ! 0, 0, 46, 44, 0, 163, 0, 0, 159, 62, ! 0, 68, 41, 39, 0, 0, 0, 60, 0, 48, ! 0, 25, 167, 19, 165, 17, 0, 156, 0, 0, ! 67, 18, 0, 0, 58, 164, 0, 161, 63, 68, ! 49, 47, 14, 0, 12, 13, 169, 0, 10, 11, ! 15, 16, 17, 0, 175, 177, 0, 176, 0, 171, ! 173, 174, 168, 166, 160, 66, 70, 71, 69, 0, ! 158, 0, 56, 112, 0, 128, 110, 0, 0, 89, ! 92, 128, 0, 20, 21, 114, 0, 0, 179, 178, ! 170, 172, 0, 0, 59, 162, 0, 0, 0, 0, ! 107, 98, 87, 0, 0, 0, 0, 106, 388, 0, ! 113, 128, 111, 0, 128, 73, 72, 189, 74, 22, ! 0, 84, 0, 76, 78, 82, 83, 0, 79, 0, ! 80, 138, 128, 85, 81, 0, 86, 57, 118, 115, ! 0, 127, 0, 120, 0, 130, 131, 129, 119, 117, ! 91, 0, 90, 94, 0, 0, 0, 0, 0, 0, ! 0, 337, 0, 0, 0, 0, 8, 7, 4, 5, ! 6, 9, 336, 0, 0, 409, 0, 102, 408, 334, ! 343, 339, 355, 0, 335, 340, 341, 342, 426, 410, ! 411, 419, 441, 414, 415, 417, 429, 448, 453, 460, ! 471, 476, 479, 482, 485, 488, 491, 496, 505, 497, ! 0, 101, 99, 97, 100, 390, 389, 109, 88, 108, ! 187, 0, 128, 75, 77, 105, 0, 136, 0, 140, ! 0, 0, 0, 278, 0, 0, 0, 0, 0, 0, ! 0, 0, 337, 0, 0, 10, 16, 409, 0, 127, ! 195, 0, 0, 210, 0, 191, 193, 0, 194, 199, ! 211, 0, 200, 212, 0, 201, 202, 213, 252, 0, ! 203, 0, 214, 204, 291, 0, 215, 216, 217, 219, ! 218, 0, 220, 245, 244, 0, 242, 243, 240, 241, ! 239, 125, 123, 116, 0, 0, 0, 418, 409, 340, ! 342, 416, 421, 420, 425, 424, 423, 422, 0, 393, ! 0, 0, 0, 18, 0, 430, 427, 431, 428, 437, ! 0, 409, 0, 180, 0, 184, 0, 0, 0, 0, ! 0, 0, 95, 0, 0, 364, 0, 413, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 503, 504, 0, 142, 0, 141, 135, 104, 134, 189, ! 139, 0, 228, 229, 227, 247, 0, 313, 0, 302, ! 300, 0, 310, 308, 0, 274, 0, 255, 0, 324, ! 0, 288, 0, 306, 304, 0, 0, 197, 0, 224, ! 222, 0, 0, 190, 188, 192, 196, 409, 320, 223, ! 226, 0, 273, 0, 409, 293, 297, 290, 0, 0, ! 317, 0, 122, 121, 126, 124, 133, 132, 348, 352, ! 0, 392, 382, 381, 360, 0, 375, 383, 0, 376, ! 0, 361, 0, 0, 0, 20, 21, 345, 338, 181, ! 182, 0, 347, 351, 350, 394, 0, 372, 404, 0, ! 346, 349, 370, 344, 371, 391, 406, 0, 365, 0, ! 445, 442, 446, 443, 447, 444, 451, 449, 452, 450, ! 457, 454, 458, 455, 459, 456, 467, 462, 469, 464, ! 466, 461, 468, 463, 470, 0, 465, 474, 472, 475, ! 473, 478, 477, 481, 480, 484, 483, 487, 486, 490, ! 489, 494, 0, 0, 499, 498, 143, 409, 144, 0, ! 0, 148, 0, 248, 0, 314, 312, 303, 301, 311, ! 309, 275, 0, 256, 0, 0, 0, 321, 325, 0, ! 322, 289, 307, 305, 338, 0, 198, 230, 0, 0, ! 0, 253, 0, 294, 0, 282, 0, 0, 319, 0, ! 400, 401, 0, 387, 0, 384, 377, 380, 378, 379, ! 362, 354, 0, 439, 433, 436, 0, 0, 434, 186, ! 183, 185, 395, 0, 405, 402, 0, 407, 403, 356, ! 0, 493, 0, 0, 145, 0, 0, 146, 249, 0, ! 276, 272, 0, 329, 0, 333, 332, 326, 323, 327, ! 234, 0, 231, 232, 0, 0, 0, 258, 0, 262, ! 0, 265, 0, 299, 298, 284, 0, 296, 0, 318, ! 0, 398, 0, 386, 385, 0, 363, 353, 438, 432, ! 440, 435, 374, 373, 396, 0, 357, 358, 495, 492, ! 0, 147, 0, 0, 0, 246, 0, 199, 0, 206, ! 207, 0, 208, 209, 0, 257, 330, 0, 235, 0, ! 0, 233, 271, 268, 269, 506, 0, 260, 263, 0, ! 259, 0, 266, 0, 0, 283, 0, 316, 315, 399, ! 369, 0, 397, 359, 0, 149, 0, 0, 0, 225, ! 277, 0, 331, 328, 238, 236, 0, 270, 267, 261, ! 0, 281, 0, 367, 0, 0, 150, 0, 250, 0, ! 0, 237, 279, 280, 152, 0, 0, 0, 0, 151, ! 0, 0, 0, 0, 286, 0, 251, 285 }; - /* YYDEFGOTO[NTERM-NUM]. */ static const short yydefgoto[] = { ! -1, 1, 2, 212, 284, 213, 89, 90, 72, 64, ! 214, 215, 26, 27, 28, 11, 12, 13, 14, 15, ! 16, 17, 18, 448, 290, 136, 109, 51, 74, 108, ! 134, 162, 163, 164, 95, 118, 119, 120, 216, 166, ! 266, 96, 115, 182, 183, 291, 140, 187, 407, 168, ! 169, 170, 268, 171, 172, 410, 558, 559, 292, 21, ! 47, 76, 69, 111, 48, 67, 98, 99, 100, 101, ! 217, 366, 293, 175, 561, 721, 295, 296, 297, 298, ! 696, 299, 300, 301, 302, 699, 303, 304, 305, 306, ! 700, 307, 451, 308, 591, 658, 659, 660, 661, 309, ! 310, 702, 311, 312, 313, 703, 314, 315, 457, 666, ! 667, 316, 317, 318, 319, 320, 321, 322, 577, 578, ! 579, 580, 218, 219, 220, 221, 222, 731, 675, 223, ! 496, 224, 476, 477, 124, 225, 226, 227, 228, 229, ! 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, ! 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, ! 250, 402, 497, 716 }; - /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ - #define YYPACT_NINF -650 static const short yypact[] = { ! -650, 33, 200, -650, -650, -650, 353, -42, 478, 491, ! -650, -650, 224, 349, 407, -650, -650, -650, -650, 601, ! -650, -650, -650, -650, -650, 15, -650, -650, -650, 358, ! -650, 214, -650, 21, 459, -650, -650, 444, 513, -650, ! -42, 502, -650, -650, 460, -650, 531, -27, 170, -650, ! 540, 283, -650, -650, -42, 590, 424, -650, 420, -650, ! 36, -650, -650, -650, -650, 300, 901, -650, 541, -27, ! -650, -650, 414, 549, -650, -650, -27, 170, -650, 283, ! -650, -650, -650, 585, -650, -650, -650, 586, 322, -650, ! -650, -650, 400, 1120, -650, -650, 71, -650, 1586, -650, ! -650, -650, -650, -650, -650, -650, -650, -650, 370, 330, ! -650, -27, -650, -650, 382, -28, -650, 137, -11, -650, ! 425, -28, 426, 438, 438, -650, 620, 633, -650, -650, ! -650, -650, 655, 1277, -650, -650, 330, 616, 684, 60, ! -650, -650, -650, 687, 1530, 87, 575, -650, -650, 93, ! -650, -28, -650, 243, -28, -650, -650, 495, -650, 510, ! 821, -650, 1355, -650, -650, -650, -650, 50, -650, 545, ! -650, -650, 632, -650, -650, 1976, -650, -650, -650, -650, ! 693, 612, 473, -650, 776, -650, -650, 609, -650, -650, ! -650, 84, -650, -650, 2784, 1188, 2845, 2896, 651, 35, ! 556, -650, 2957, 3008, 3069, 4998, -650, -650, -650, -650, ! -650, -650, -650, 573, 668, 921, 67, -650, 717, 624, ! -650, -650, -650, 697, -650, 756, -650, 867, 755, -650, ! -650, -650, -650, -650, -650, -650, -650, 942, 964, 970, ! 797, 966, 767, 801, 811, 812, 10, -650, -650, -650, ! 919, -650, -650, -650, -650, -650, -650, -650, -650, -650, ! -650, 959, 632, -650, -650, -650, 654, -650, 740, -650, ! 819, 180, 3120, -650, 121, 2173, 26, 226, 303, 316, ! 341, 141, 762, 5283, -42, 573, 668, 883, 636, 537, ! -650, 776, 783, -650, 1907, -650, -650, 761, -650, -650, ! -650, 2045, -650, -650, 780, -650, -650, -650, -650, 2045, ! -650, 2045, -650, -650, 5334, 791, -650, -650, -650, -650, ! -650, 445, -650, 372, 832, 755, 985, 991, -650, -650, ! -650, -650, 960, -650, 676, 700, 711, -650, 646, -650, ! -650, -650, -650, -650, -650, -650, -650, -650, 13, -650, ! 718, 949, 798, 798, 452, -650, -650, -650, -650, -650, ! 709, 921, 53, -650, 816, -650, 823, 23, 830, 5059, ! 2224, 587, -650, -8, 3181, -650, 485, -650, -650, 3232, ! 3293, 3344, 3405, 3456, 3517, 3568, 3629, 3680, 3741, 3792, ! 3853, 690, 3904, 3965, 4016, 4077, 4128, 4189, 4240, 2285, ! -650, -650, 4301, -650, 592, -650, -650, -650, -650, -650, ! -650, 1907, -650, -650, -650, -650, 4352, -650, 172, -650, ! -650, 211, -650, -650, 219, -650, 4413, -650, 4464, -650, ! 860, -650, 1469, -650, -650, 225, 212, 822, 658, -650, ! -650, -42, 2336, -650, -650, -650, -650, 958, 612, -650, ! -650, 831, -650, 866, 990, -650, -650, -650, 117, 2397, ! -650, 4525, -650, -650, -650, 960, -650, -650, -650, -650, ! 204, 842, -650, -650, -650, 2448, 798, -650, 660, 798, ! 660, -650, 2509, 4576, 107, 203, 439, -650, 5359, -650, ! -650, 748, -650, -650, -650, -650, 775, -650, -650, 222, ! -650, -650, -650, -650, -650, 844, -650, 249, -650, 5110, ! -650, -650, -650, -650, -650, -650, -650, 942, -650, 942, ! -650, 964, -650, 964, -650, 964, -650, 970, -650, 970, ! -650, 970, -650, 970, -650, 322, -650, -650, 797, -650, ! 797, -650, 966, -650, 767, -650, 801, -650, 811, -650, ! 812, -650, 944, 854, -650, -650, -650, 1008, -650, 1907, ! 857, -650, 1907, -650, 276, -650, -650, -650, -650, -650, ! -650, -650, 333, -650, 861, 500, 328, 860, -650, 545, ! -650, -650, -650, -650, -650, 504, 822, -650, 961, 138, ! -20, -650, 870, -650, 4973, -650, 4861, 871, 879, 895, ! -650, -650, 5171, -650, 265, -650, 438, -650, 438, -650, ! -650, 896, 151, -650, -650, -650, 4637, 1021, -650, -650, ! -650, -650, -650, 4688, -650, -650, 5222, -650, -650, 330, ! 789, -650, 4749, 713, -650, 1907, 2560, -650, -650, 2112, ! -650, -650, 346, -650, 746, -650, -650, -650, -650, -650, ! -650, 2621, -650, -650, 998, 58, 4800, -650, 603, -650, ! 1684, -650, 5283, -650, -650, -650, 922, 934, 4912, -650, ! 352, -650, 805, -650, -650, 330, -650, 924, -650, -650, ! -650, -650, -650, -650, -650, 808, -650, 330, -650, -650, ! 508, -650, 241, 156, 514, -650, 987, 996, 2112, -650, ! -650, 2112, -650, -650, 965, -650, 972, 974, -650, 1073, ! 159, -650, -650, -650, -650, -650, 433, -650, -650, 1759, ! -650, 1833, -650, 980, 2045, -650, 984, -650, -650, -650, ! -650, 330, -650, -650, 2672, -650, 258, 4352, 2045, -650, ! -650, 2733, -650, -650, -650, -650, 1084, -650, -650, -650, ! 986, -650, 2045, -650, 263, 186, -650, 356, -650, 4861, ! 997, -650, -650, -650, -650, 269, 2112, 1004, 4912, -650, ! 1046, 2112, 1010, 2112, -650, 2112, -650, -650 }; - /* YYPGOTO[NTERM-NUM]. */ static const short yypgoto[] = { ! -650, -650, -650, -650, -59, -51, 726, 3, -120, 493, ! 306, -6, 470, -650, 122, -650, 1106, 752, -650, 325, ! -650, -650, 837, 18, 517, -650, -650, 1064, 1044, -650, ! -135, -650, 967, -650, -104, -123, 989, -171, -197, -650, ! -650, -67, 760, 874, -328, -127, -58, -650, -650, -650, ! -650, -650, -650, -650, 968, -650, 174, -650, 725, 329, ! -650, -650, -650, -650, 1081, -12, -650, 1040, -650, -650, ! 332, -650, -121, 872, 845, -158, -289, -650, 827, -288, ! 139, -601, 610, -440, -650, -650, -650, -312, -650, -650, ! -650, -650, -650, -650, -650, -650, 486, 487, -614, -405, ! -650, -650, -650, -650, -650, -650, -650, -202, -650, -649, ! 829, -650, -650, -650, -650, -650, -650, -650, -650, 569, ! -650, 571, -650, -650, -650, 234, -650, -650, -650, -650, ! -407, -650, 796, 229, -38, 1110, 305, 1315, 395, 474, ! 617, 955, -90, 628, 707, -477, -650, 679, 705, 607, ! 648, 757, 758, 759, 763, 754, -650, 524, 765, 891, ! -650, -650, -61, -650 }; ! /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If ! positive, shift that token. If negative, reduce the rule which ! number is the opposite. If zero, do what YYDEFACT says. ! If YYTABLE_NINF, syntax error. */ ! #define YYTABLE_NINF -503 static const short yytable[] = { ! 25, 177, 456, 33, 153, 445, 463, 87, 365, 332, ! 184, 618, 174, 449, 468, 88, 42, 294, 186, 726, ! 19, 452, 52, 453, 492, 398, 138, 349, 655, 165, ! 19, 19, 19, 3, 127, 589, 349, 80, 697, 87, ! 65, 174, 88, 656, 65, 24, 722, 88, 267, 63, ! 123, 265, 19, 71, 487, 19, 19, 104, 165, 712, ! 92, 188, 65, 147, 110, 504, 167, 65, 372, 66, ! 139, 63, 128, 19, 87, 612, 63, 657, 180, 24, ! 354, 469, 88, 251, 93, 141, 88, 92, 252, 142, ! 143, 493, 92, 257, 255, 167, 259, 697, 399, 135, ! 697, 127, 630, 87, 341, 722, 345, 347, 615, 88, ! 767, 88, 356, 358, 269, 43, 93, 44, 593, 772, ! -154, 53, 419, 54, 285, 335, 65, 92, 350, 29, ! 31, 92, 65, 88, 184, 63, 81, 350, 141, 653, ! 681, 71, 433, 362, 251, 408, -103, 713, 488, 352, ! -103, 160, 676, 360, 92, 181, 92, 653, 430, 189, ! 745, 437, 56, 58, 465, 697, 61, -93, -93, 287, ! 697, 129, 697, 565, 697, 123, 61, -96, 92, -96, ! 160, 415, -96, -96, -96, -96, 253, 745, 338, 338, ! 338, 338, 256, 289, 65, 672, 338, 338, 361, 698, ! -27, 4, 180, 353, 405, 114, 148, 184, 24, 117, ! 88, 418, 567, 487, 424, 49, 467, -292, 594, 685, ! 569, 420, 436, 624, -29, 4, 582, 425, 24, 693, ! -96, 137, 441, 654, 701, -96, -96, -96, -96, 623, ! 88, 434, 652, 285, 710, 5, 677, 123, 114, 117, ! 627, 736, 623, 562, 746, 92, 6, 623, 698, 711, ! 623, 698, 7, 285, 744, 191, 673, -64, 8, 5, ! 761, 68, 566, 445, 416, 180, 9, 638, 50, 181, ! 6, 765, 664, 88, 456, 92, 7, 623, 287, 511, ! 513, 515, 8, 701, 621, 447, 701, 288, 616, 600, ! 10, 149, 191, 447, 427, 447, 601, 584, 454, 499, ! -64, 568, 289, 507, 478, 480, 707, 429, 586, 570, ! 426, 625, 485, 486, 10, 583, 698, 755, 92, 645, ! 65, 698, 181, 698, 640, 698, 73, 35, 553, 71, ! 535, 735, 431, 258, 143, 376, 445, 705, 628, -30, ! 4, 695, 181, 727, 23, 564, 456, 638, 756, 45, ! 285, 701, 35, 764, 674, 572, 701, 574, 701, 769, ! 701, 639, 91, 338, 338, 338, 338, 338, 338, 338, ! 338, 338, 338, 338, 338, 92, 338, 338, 338, 338, ! 338, 338, 338, 614, 5, 97, 421, 428, 597, 91, ! 599, 635, 54, 435, 91, 557, 191, -28, 4, 323, ! 449, 7, 157, 452, 604, 105, 288, 8, -339, -339, ! 122, 78, 46, 288, 157, 75, 133, 97, 641, 289, ! 251, 288, 445, 288, 747, 432, 751, 704, 606, 91, ! 24, 608, -254, 91, -31, 4, 460, 456, 157, 10, ! 758, 766, 5, 481, -155, 646, 456, 191, 649, -33, ! 4, 59, 173, 6, 763, 60, 91, -65, 91, 7, ! -339, 132, 471, -64, -339, 8, 137, 338, 695, 30, ! 324, 286, 338, 751, 50, 758, 508, 763, 46, 5, ! 91, 173, 32, 61, 686, 505, 704, 123, 122, 704, ! 6, 643, 54, 57, 5, 650, 7, 10, 285, 650, ! -65, 285, 8, -32, 4, 415, -64, 184, 144, 20, ! -157, 7, 748, 145, 146, 148, 679, 8, 323, 20, ! 20, 20, 62, 288, 617, 323, 149, 149, -320, 461, ! 730, 70, 102, 323, 10, 323, 482, 24, 323, 728, ! 106, 20, 733, 287, 20, 20, 287, 351, 5, 10, ! 61, 103, 683, 191, 704, 24, 107, 91, 333, 704, ! 325, 704, 20, 704, 334, 7, 254, 289, 24, 509, ! 289, 8, 39, 94, 285, 180, 113, 116, 500, 24, ! -34, 4, 260, 88, 644, 715, 753, 91, 651, 324, ! 286, 723, 734, 159, 261, 41, 324, 82, 737, 285, ! 338, 338, 22, 10, 324, 94, 324, 178, 24, 324, ! 286, 150, 22, 22, 22, 156, 338, 24, 24, 287, ! 159, -320, 159, 447, 152, 5, 24, 439, 92, 84, ! 91, 157, 85, 24, 22, 323, 39, 22, 22, 326, ! 161, 655, 7, 289, 287, 501, 155, 39, 8, 500, ! 502, 5, 181, 40, 503, 22, 656, 82, 285, 41, ! 285, 122, 24, 24, 24, 367, 757, 462, 289, 161, ! 760, 288, -24, -24, 288, 185, 138, 556, 190, 325, ! 10, 534, 447, 334, 331, 447, 325, 91, 375, 84, ! 717, 464, 85, 24, 325, 605, 325, 24, 605, 325, ! 336, 179, 466, 287, 500, 287, 324, 286, 447, 470, ! 24, 5, 374, -24, 585, 440, 501, 82, -24, -24, ! -24, 502, 447, 634, -24, 503, 637, 289, -24, 289, ! 369, 82, 24, 176, 370, 24, 447, 706, 371, 619, ! 157, 194, 195, 348, 406, 61, 205, 288, 149, 84, ! 447, 288, 85, 24, 34, 447, 38, 447, 326, 447, ! 368, 24, 176, 84, 24, 326, 85, 24, 394, 690, ! 24, 501, 288, 326, 24, 326, 502, 24, 326, 55, ! 503, 5, 327, 323, 196, 197, 323, 82, 24, 82, ! 24, 377, 378, 328, 483, 24, 325, 484, 198, 691, ! 607, 367, 609, 395, 199, 387, 388, 389, 390, 373, ! 288, 200, 125, 288, 396, 201, 397, 82, 323, 84, ! 323, 84, 85, 24, 85, 24, 409, 739, 202, 203, ! 740, 288, 204, 288, 205, 620, 288, 121, -501, -501, ! 36, 206, 207, 208, 209, 391, -153, 210, 211, 84, ! 288, 446, 85, 24, 324, 286, 39, 324, 286, 323, ! 622, 36, 82, 323, 288, 36, 623, 442, -341, -341, ! 450, 126, 329, 40, 687, 326, 151, 154, 288, 41, ! 623, 459, 36, 288, 323, 288, 475, 288, 494, 324, ! 729, 324, 323, 732, 84, 770, 623, 85, 24, 623, ! 774, 327, 776, 489, 777, 412, 413, -137, 327, 414, ! 490, 575, 328, 143, 491, 576, 327, 590, 327, 328, ! -341, 327, 323, 592, -341, 323, 602, 328, 626, 328, ! 324, 286, 328, 632, 324, 631, 5, 379, 380, 381, ! 91, 636, 82, 323, 325, 323, 642, 325, 323, -502, ! -502, 83, 652, 7, 662, 324, 286, 382, 383, 8, ! -17, 668, 323, 324, 669, -500, -500, 369, 384, 385, ! 386, 370, 392, 393, 84, 438, 323, 85, 24, 325, ! 670, 325, -368, 323, 527, 529, 531, 533, 86, 711, ! 323, 329, 323, 324, 5, 323, 324, 323, 329, 323, ! 82, 400, 401, -500, -500, 369, 329, 724, 329, 370, ! -366, 329, 680, 371, 324, 286, 324, 286, 327, 324, ! 325, -410, -410, 326, 325, 594, 326, -411, -411, 328, ! 538, 540, 84, 324, 738, 85, 24, 472, 473, 474, ! -500, -500, 369, -205, 403, 325, 370, 324, 145, 146, ! 438, 517, 519, 325, 324, 741, 330, 742, 326, 743, ! 326, 324, 82, 324, 744, 750, 324, -17, 324, 752, ! 324, 198, -500, -500, 369, 761, 762, 199, 370, 521, ! 523, 525, 371, 325, 200, -17, 325, 768, 201, 771, ! -500, -500, 369, 773, 84, 775, 370, 85, 24, 326, ! 633, 202, 203, 326, 325, 204, 325, 536, 329, 325, ! 37, 125, 79, 112, 206, 207, 208, 209, 262, 264, ! 210, 211, 192, 325, 326, 404, 560, 77, 131, 444, ! 411, 455, 326, 458, 718, 719, 647, 325, 648, 479, ! 343, 542, 550, 544, 325, 546, 689, 0, 0, 0, ! 548, 325, 0, 325, 0, 39, 325, 555, 325, 0, ! 325, 82, 326, 0, 0, 326, 327, 0, 0, 327, ! 126, 0, 40, 0, 0, 330, 0, 328, 41, 342, ! 328, 194, 330, 326, 0, 326, 0, 0, 326, 0, ! 330, 0, 330, 84, 0, 330, 85, 24, 0, 0, ! 0, 327, 326, 327, 0, 0, 0, 0, 0, 0, ! 0, 0, 328, 0, 328, 0, 326, 0, 0, 0, ! 0, 0, 0, 326, 196, 197, 0, 0, 0, 82, ! 326, 0, 326, 0, 0, 326, 0, 326, 198, 326, ! 0, 0, 327, 0, 199, 0, 327, 0, 0, 0, ! 0, 200, 0, 328, 0, 201, 329, 328, 0, 329, ! 0, 84, 0, 0, 85, 24, 0, 327, 202, 203, ! 0, 0, 204, 0, 0, 327, 0, 0, 328, 0, ! 0, 206, 207, 208, 209, 0, 328, 210, 211, 0, ! 0, 329, 330, 329, 339, 339, 339, 339, 0, 0, ! 0, 0, 339, 339, 0, 327, 0, 0, 327, 0, ! 0, 0, 5, 0, 0, 0, 328, 0, 82, 328, ! 0, 0, 0, 0, 0, 0, 327, 83, 327, 7, ! 0, 327, 329, 0, 0, 8, 329, 328, 0, 328, ! 0, 0, 328, 0, 0, 327, 0, 0, 0, 0, ! 84, 0, 0, 85, 24, 0, 328, 329, 0, 327, ! 0, 0, 0, 157, 158, 329, 327, 10, 0, 0, ! 328, 0, 0, 327, 0, 327, 0, 328, 327, 0, ! 327, 0, 327, 0, 328, 0, 328, 0, 0, 328, ! 5, 328, 0, 328, 0, 329, 82, 0, 329, 0, ! 0, 0, 0, 0, 0, 83, 0, 7, 0, 0, ! 0, 0, 0, 8, 0, 0, 329, 0, 329, 0, ! 0, 329, 0, 0, 0, 0, 0, 0, 84, 0, ! 0, 85, 24, 0, 0, 329, 0, 0, 0, 0, ! 330, 157, 263, 330, 0, 10, 0, 0, 0, 329, ! 0, 0, 0, 0, 0, 0, 329, 0, 0, 0, ! 581, 0, 0, 329, 0, 329, 0, 0, 329, 0, ! 329, 0, 329, 0, 0, 330, 0, 330, 0, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, ! 339, 0, 339, 339, 339, 339, 339, 339, 339, 340, ! 340, 340, 340, 0, -287, -287, -287, 340, 340, 0, ! -287, 0, 0, 0, 0, 0, 330, 0, 0, -287, ! 330, 193, 0, 194, 195, -287, 0, 0, 0, 0, ! 0, 0, -287, 0, 0, 0, -287, 0, 0, 0, ! 0, 330, -287, 0, 0, -287, -287, 0, 0, 330, ! 0, 0, 0, -287, 0, 0, 0, 0, 0, -287, ! 0, 0, -287, -287, -287, -287, 196, 197, -287, -287, ! 0, 82, 0, 0, 0, 0, 0, 0, 0, 330, ! 198, 0, 330, 339, 0, 0, 199, 0, 339, 0, ! 0, 0, 0, 200, 0, 0, 0, 201, 0, 0, ! 330, 0, 330, 84, 0, 330, 85, 24, 0, 0, ! 202, 203, 0, 0, 204, 0, 205, 0, 0, 330, ! 0, 5, 0, 206, 207, 208, 209, 82, 0, 210, ! 211, 0, 0, 330, 0, 0, 83, 0, 7, 0, ! 330, 0, 0, 0, 8, 0, 0, 330, 0, 330, ! 0, 0, 330, 0, 330, 0, 330, 0, 0, 84, ! 0, 0, 85, 24, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 130, 0, 270, 0, 0, 0, 0, ! 0, 0, 0, 0, 340, 340, 340, 340, 340, 340, ! 340, 340, 340, 340, 340, 340, 0, 340, 340, 340, ! 340, 340, 340, 340, 0, 0, 0, 0, 0, 0, ! 0, 0, 0, 0, 0, 0, 339, 339, 0, 5, ! 196, 197, 655, 271, 272, 82, 273, 0, 0, 274, ! 0, 0, 339, 275, 198, 0, 0, 656, 0, 0, ! 276, 277, 8, 278, 0, 279, 280, 200, 281, 0, ! 270, 282, 0, 0, 0, 0, 0, 84, 0, 0, ! 85, 24, 0, 0, 0, 0, 0, 0, 283, 0, ! 157, 720, 0, 0, 10, 0, 0, 206, 207, 208, ! 209, 0, 0, 210, 211, 0, 0, 0, 340, 0, ! 0, 0, 0, 340, 5, 196, 197, 655, 271, 272, ! 82, 273, 0, 0, 274, 0, 0, 0, 275, 198, ! 0, 0, 656, 0, 0, 276, 277, 8, 278, 0, ! 279, 280, 200, 281, 270, 0, 282, 0, 0, 0, ! 0, 0, 84, 0, 0, 85, 24, 0, 0, 0, ! 0, 0, 0, 283, 0, 157, 749, 0, 0, 10, ! 0, 0, 206, 207, 208, 209, 0, 0, 210, 211, ! 0, 0, 0, 0, 0, 0, 0, 0, 5, 196, ! 197, -264, 271, 272, 82, 273, 0, 0, 274, 0, ! 0, 0, 275, 198, 0, 0, -264, 0, 0, 276, ! 277, 8, 278, 0, 279, 280, 200, 281, 270, 0, ! 282, 0, 0, 0, 0, 0, 84, 0, 0, 85, ! 24, 0, 0, 0, 0, 0, 0, 283, 0, 157, ! -264, 340, 340, 10, 0, 0, 206, 207, 208, 209, ! 0, 0, 210, 211, 0, 0, 0, 340, 0, 0, ! 0, 0, 5, 196, 197, 0, 271, 272, 82, 273, ! 0, 0, 274, 0, 0, 0, 275, 198, 0, 0, ! 0, 0, 0, 276, 277, 8, 278, 270, 279, 280, ! 200, 281, 0, 0, 282, 0, 0, 0, 0, 0, ! 84, 0, 0, 85, 24, 0, 0, 0, 0, 0, ! 0, 283, 0, 157, 443, 0, 0, 10, 0, 0, ! 206, 207, 208, 209, 0, 0, 210, 211, 0, 0, ! 0, 5, 196, 197, 0, 271, 272, 82, 273, 0, ! 0, 274, 0, 0, 0, 275, 198, 0, 0, 0, ! 0, 0, 276, 277, 8, 278, 270, 279, 280, 200, ! 281, 0, 0, 282, 0, 0, 0, 0, 0, 84, ! 0, 0, 85, 24, 0, 0, 0, 0, 0, 0, ! 283, 0, 157, 0, 0, 0, 10, 0, 0, 206, ! 207, 208, 209, 0, 0, 210, 211, 0, 0, 0, ! 5, 196, 197, 0, 271, 272, 82, 273, 0, 0, ! 274, 0, 0, 0, 275, 198, 0, 0, 0, 0, ! 0, 276, 277, 270, 278, 0, 279, 280, 200, 281, ! 0, 0, 282, 0, 0, 0, 0, 0, 84, 0, ! 0, 85, 24, 0, 0, 0, 0, 0, 0, 283, ! 0, 157, 0, 0, 0, 10, 0, 0, 206, 207, ! 208, 209, 0, 0, 210, 211, 0, 5, 196, 197, ! 0, 694, 272, 82, 273, 0, 0, 274, 0, 0, ! 0, 275, 198, 0, 422, 0, 194, 195, 276, 277, ! 0, 278, 0, 279, 280, 200, 281, 0, 0, 282, ! 0, 0, 0, 0, 0, 84, 0, 0, 85, 24, ! 0, 0, 0, 0, 0, 0, 283, 0, 157, 0, ! 0, 0, 10, 0, 0, 206, 207, 208, 209, 196, ! 197, 210, 211, 0, 82, 498, 0, 194, 195, 0, ! 0, 0, 0, 198, 0, 0, 0, 0, 0, 199, ! 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, ! 201, 0, 0, 0, 0, 0, 84, 0, 0, 85, ! 24, 0, 0, 202, 203, 0, 0, 204, 0, 0, ! 196, 197, 0, 423, 0, 82, 206, 207, 208, 209, ! 0, 0, 210, 211, 198, 0, 551, 0, 194, 195, ! 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, ! 0, 201, 0, 0, 0, 0, 0, 84, 0, 0, ! 85, 24, 0, 0, 202, 203, 0, 0, 204, 0, ! 0, 0, 0, 148, 0, 0, 0, 206, 207, 208, ! 209, 196, 197, 210, 211, 0, 82, 587, 0, 194, ! 195, 0, 0, 0, 0, 198, 0, 0, 0, 0, ! 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, ! 0, 0, 201, 0, 0, 0, 0, 0, 84, 0, ! 0, 85, 24, 0, 552, 202, 203, 0, 0, 204, ! 0, 0, 196, 197, 0, 0, 0, 82, 206, 207, ! 208, 209, 0, 0, 210, 211, 198, 0, 595, 0, ! 194, 195, 199, 0, 0, 0, 0, 0, 0, 200, ! 0, 0, 0, 201, 0, 0, 0, 0, 0, 84, ! 0, 0, 85, 24, 0, 0, 202, 203, 0, 0, ! 204, 588, 0, 0, 0, 0, 0, 0, 0, 206, ! 207, 208, 209, 196, 197, 210, 211, 0, 82, 603, ! 0, 194, 195, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, ! 200, 0, 0, 0, 201, 0, 0, 0, 0, 0, ! 84, 0, 0, 85, 24, 0, 0, 202, 203, 0, ! 0, 204, 0, 0, 196, 197, 0, 596, 0, 82, ! 206, 207, 208, 209, 0, 0, 210, 211, 198, 0, ! 610, 0, 194, 195, 199, 0, 0, 0, 0, 0, ! 0, 200, 0, 0, 0, 201, 0, 0, 0, 0, ! 0, 84, 0, 0, 85, 24, 0, 0, 202, 203, ! 0, 0, 204, 0, 0, 0, 0, 148, 0, 0, ! 0, 206, 207, 208, 209, 196, 197, 210, 211, 0, ! 82, 587, 0, 194, 195, 0, 0, 0, 0, 198, ! 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, ! 0, 0, 200, 0, 0, 0, 201, 0, 0, 0, ! 0, 0, 84, 0, 0, 85, 24, 0, 0, 202, ! 203, 0, 0, 204, 611, 0, 196, 197, 0, 0, ! 0, 82, 206, 207, 208, 209, 0, 0, 210, 211, ! 198, 0, 708, 0, 194, 195, 199, 0, 0, 0, ! 0, 0, 0, 200, 0, 0, 0, 201, 0, 0, ! 0, 0, 0, 84, 0, 0, 85, 24, 0, 0, ! 202, 203, 0, 0, 204, 692, 0, 0, 0, 0, ! 0, 0, 0, 206, 207, 208, 209, 196, 197, 210, ! 211, 0, 82, 708, 0, 194, 195, 0, 0, 0, ! 0, 198, 0, 0, 0, 0, 0, 199, 0, 0, ! 0, 0, 0, 0, 200, 0, 0, 0, 201, 0, ! 0, 0, 0, 0, 84, 0, 0, 85, 24, 0, ! 0, 202, 203, 0, 0, 204, 709, 0, 196, 197, ! 0, 0, 0, 82, 206, 207, 208, 209, 0, 0, ! 210, 211, 198, 0, 595, 0, 194, 195, 199, 0, ! 0, 0, 0, 0, 0, 200, 0, 0, 0, 201, ! 0, 0, 0, 0, 0, 84, 0, 0, 85, 24, ! 0, 0, 202, 203, 0, 0, 204, 754, 0, 0, ! 0, 0, 0, 0, 0, 206, 207, 208, 209, 196, ! 197, 210, 211, 0, 82, 337, 0, 194, 195, 0, ! 0, 0, 0, 198, 0, 0, 0, 0, 0, 199, ! 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, ! 201, 0, 0, 0, 0, 0, 84, 0, 0, 85, ! 24, 0, 0, 202, 203, 0, 0, 204, 0, 0, ! 196, 197, 0, 759, 0, 82, 206, 207, 208, 209, ! 0, 0, 210, 211, 198, 0, 344, 0, 194, 195, ! 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, ! 0, 201, 0, 0, 0, 0, 0, 84, 0, 0, ! 85, 24, 0, 0, 202, 203, 0, 0, 204, 0, ! 0, 0, 0, 0, 0, 0, 0, 206, 207, 208, ! 209, 196, 197, 210, 211, 0, 82, 346, 0, 194, ! 195, 0, 0, 0, 0, 198, 0, 0, 0, 0, ! 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, ! 0, 0, 201, 0, 0, 0, 0, 0, 84, 0, ! 0, 85, 24, 0, 0, 202, 203, 0, 0, 204, ! 0, 0, 196, 197, 0, 0, 0, 82, 206, 207, ! 208, 209, 0, 0, 210, 211, 198, 0, 355, 0, ! 194, 195, 199, 0, 0, 0, 0, 0, 0, 200, ! 0, 0, 0, 201, 0, 0, 0, 0, 0, 84, ! 0, 0, 85, 24, 0, 0, 202, 203, 0, 0, ! 204, 0, 0, 0, 0, 0, 0, 0, 0, 206, ! 207, 208, 209, 196, 197, 210, 211, 0, 82, 357, ! 0, 194, 195, 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, ! 200, 0, 0, 0, 201, 0, 0, 0, 0, 0, ! 84, 0, 0, 85, 24, 0, 0, 202, 203, 0, ! 0, 204, 0, 0, 196, 197, 0, 0, 0, 82, ! 206, 207, 208, 209, 0, 0, 210, 211, 198, 0, ! 359, 0, 194, 195, 199, 0, 0, 0, 0, 0, ! 0, 200, 0, 0, 0, 201, 0, 0, 0, 0, ! 0, 84, 0, 0, 85, 24, 0, 0, 202, 203, ! 0, 0, 204, 0, 0, 0, 0, 0, 0, 0, ! 0, 206, 207, 208, 209, 196, 197, 210, 211, 0, ! 82, 417, 0, 194, 195, 0, 0, 0, 0, 198, ! 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, ! 0, 0, 200, 0, 0, 0, 201, 0, 0, 0, ! 0, 0, 84, 0, 0, 85, 24, 0, 0, 202, ! 203, 0, 0, 204, 0, 0, 196, 197, 0, 0, ! 0, 82, 206, 207, 208, 209, 0, 0, 210, 211, ! 198, 0, 506, 0, 194, 195, 199, 0, 0, 0, ! 0, 0, 0, 200, 0, 0, 0, 201, 0, 0, ! 0, 0, 0, 84, 0, 0, 85, 24, 0, 0, ! 202, 203, 0, 0, 204, 0, 0, 0, 0, 0, ! 0, 0, 0, 206, 207, 208, 209, 196, 197, 210, ! 211, 0, 82, 510, 0, 194, 195, 0, 0, 0, ! 0, 198, 0, 0, 0, 0, 0, 199, 0, 0, ! 0, 0, 0, 0, 200, 0, 0, 0, 201, 0, ! 0, 0, 0, 0, 84, 0, 0, 85, 24, 0, ! 0, 202, 203, 0, 0, 204, 0, 0, 196, 197, ! 0, 0, 0, 82, 206, 207, 208, 209, 0, 0, ! 210, 211, 198, 0, 512, 0, 194, 195, 199, 0, ! 0, 0, 0, 0, 0, 200, 0, 0, 0, 201, ! 0, 0, 0, 0, 0, 84, 0, 0, 85, 24, ! 0, 0, 202, 203, 0, 0, 204, 0, 0, 0, ! 0, 0, 0, 0, 0, 206, 207, 208, 209, 196, ! 197, 210, 211, 0, 82, 514, 0, 194, 195, 0, ! 0, 0, 0, 198, 0, 0, 0, 0, 0, 199, ! 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, ! 201, 0, 0, 0, 0, 0, 84, 0, 0, 85, ! 24, 0, 0, 202, 203, 0, 0, 204, 0, 0, ! 196, 197, 0, 0, 0, 82, 206, 207, 208, 209, ! 0, 0, 210, 211, 198, 0, 516, 0, 194, 195, ! 199, 0, 0, 0, 0, 0, 0, 200, 0, 0, ! 0, 201, 0, 0, 0, 0, 0, 84, 0, 0, ! 85, 24, 0, 0, 202, 203, 0, 0, 204, 0, ! 0, 0, 0, 0, 0, 0, 0, 206, 207, 208, ! 209, 196, 197, 210, 211, 0, 82, 518, 0, 194, ! 195, 0, 0, 0, 0, 198, 0, 0, 0, 0, ! 0, 199, 0, 0, 0, 0, 0, 0, 200, 0, ! 0, 0, 201, 0, 0, 0, 0, 0, 84, 0, ! 0, 85, 24, 0, 0, 202, 203, 0, 0, 204, ! 0, 0, 196, 197, 0, 0, 0, 82, 206, 207, ! 208, 209, 0, 0, 210, 211, 198, 0, 520, 0, ! 194, 195, 199, 0, 0, 0, 0, 0, 0, 200, ! 0, 0, 0, 201, 0, 0, 0, 0, 0, 84, ! 0,