This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Remove Java support


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=9c37b5aed98e5996a9777a366bfcc371c0e1a92d

commit 9c37b5aed98e5996a9777a366bfcc371c0e1a92d
Author: Tom Tromey <tom@tromey.com>
Date:   Wed Oct 5 08:44:34 2016 -0600

    Remove Java support
    
    This patch removes the Java support from gdb.  gcj has not seen much
    development or use for years now, and was recently removed from GCC.
    This patch changes gdb to follow; in the unlikely event that there are
    still users using gcj, they can continue to use an older gdb to debug.
    Or, they can debug in C++ mode.
    
    Built and regtested on x86-64 Fedora 24.
    
    2016-10-06  Tom Tromey  <tom@tromey.com>
    
    	* MAINTAINERS: Remove Java test maintainer.
    	* varobj.h (java_varobj_ops): Don't declare.
    	* valprint.h (struct value_print_options)
    	<pascal_static_field_print>: Update comment.
    	* utils.c (producer_is_gcc): Remove java reference.
    	* symtab.h (struct general_symbol_info): Remove java references.
    	(SYMBOL_SEARCH_NAME): Likewise.
    	* objfiles.c (allocate_objfile): Update comment.
    	* linespec.c (find_linespec_symbols): Remove java references.
    	* gnu-v3-abi.c (gnuv3_rtti_type, gnuv3_baseclass_offset): Remove
    	java references.
    	* gdbtypes.h (struct cplus_struct_type) <is_java>: Remove.
    	(TYPE_CPLUS_REALLY_JAVA): Remove.
    	* c-varobj.c (enum vsections): Update comment.
    	* symtab.c (symbol_set_language, symbol_set_names)
    	(symbol_natural_name, symbol_demangled_name)
    	(demangle_for_lookup, symbol_matches_domain)
    	(default_make_symbol_completion_list_break_on_1): Remove java
    	references.
    	(JAVA_PREFIX, JAVA_PREFIX_LEN): Remove.
    	* psymtab.c (match_partial_symbol, psymtab_search_name)
    	(lookup_partial_symbol): Remove java references.
    	* dwarf2read.c (find_slot_in_mapped_hash): Remove java references.
    	(add_partial_symbol, dwarf2_compute_name, dwarf2_physname)
    	(dwarf2_add_member_fn, is_vtable_name, read_structure_type)
    	(process_structure_scope, read_subroutine_type)
    	(read_subrange_type, load_partial_dies)
    	(new_symbol_full, determine_prefix, typename_concat)
    	(dwarf2_name): Remove java references.
    	(set_cu_language): Treat Java as C++.
    	* c-typeprint.c (c_type_print_args): Remove java reference.
    	* defs.h (enum language) <language_java>: Remove.
    	* Makefile.in (SFILES, HFILES_NO_SRCDIR, COMMON_OBS, YYFILES)
    	(YYOBJ, local-maintainer-clean): Don't mention java files.
    	* jv-exp.y, jv-lang.c, jv-lang.h, jv-typeprint.c, jv-valprint.c,
    	jv-varobj.c: Remove.
    
    2016-10-06  Tom Tromey  <tom@tromey.com>
    
    	* guile.texi (Types In Guile): Remove Java mentions.
    	* python.texi (Types In Python): Remove Java mentions.
    	* gdb.texinfo (Address Locations, Supported Languages)
    	(Index Section Format): Remove Java mentions.
    
    2016-10-06  Tom Tromey  <tom@tromey.com>
    
    	* gdb.compile/compile.exp: Change java tests to rust.
    	* gdb.base/setshow.exp: Change java tests to rust.
    	* gdb.base/default.exp: Remove java from language list.
    	* README (Examples): Update language example.
    	* gdb.python/py-lookup-type.exp (test_lookup_type): Remove java
    	test.
    	* lib/gdb.exp (skip_java_tests): Remove.
    	* lib/java.exp: Remove.
    	* gdb.java: Remove.

Diff:
---
 gdb/ChangeLog                               |   39 +
 gdb/MAINTAINERS                             |    1 -
 gdb/Makefile.in                             |    7 +-
 gdb/NEWS                                    |    2 +
 gdb/c-typeprint.c                           |   11 +-
 gdb/c-varobj.c                              |    2 +-
 gdb/defs.h                                  |    7 +-
 gdb/doc/ChangeLog                           |    7 +
 gdb/doc/gdb.texinfo                         |    8 +-
 gdb/doc/guile.texi                          |    4 +-
 gdb/doc/python.texi                         |    4 +-
 gdb/dwarf2read.c                            |  122 +--
 gdb/gdbtypes.h                              |    5 -
 gdb/gnu-v3-abi.c                            |    9 +-
 gdb/jv-exp.y                                | 1434 ---------------------------
 gdb/jv-lang.c                               | 1272 ------------------------
 gdb/jv-lang.h                               |   79 --
 gdb/jv-typeprint.c                          |  355 -------
 gdb/jv-valprint.c                           |  532 ----------
 gdb/jv-varobj.c                             |  107 --
 gdb/language.c                              |    1 -
 gdb/linespec.c                              |    6 -
 gdb/objfiles.c                              |    9 -
 gdb/psymtab.c                               |    9 -
 gdb/symtab.c                                |   94 +-
 gdb/symtab.h                                |    4 +-
 gdb/testsuite/ChangeLog                     |   12 +
 gdb/testsuite/README                        |    2 +-
 gdb/testsuite/gdb.base/default.exp          |    2 +-
 gdb/testsuite/gdb.base/setshow.exp          |    8 +-
 gdb/testsuite/gdb.compile/compile.exp       |    4 +-
 gdb/testsuite/gdb.java/jmain.exp            |   87 --
 gdb/testsuite/gdb.java/jmain.java           |    7 -
 gdb/testsuite/gdb.java/jmisc.exp            |  104 --
 gdb/testsuite/gdb.java/jmisc.java           |    7 -
 gdb/testsuite/gdb.java/jnpe.exp             |   55 -
 gdb/testsuite/gdb.java/jnpe.java            |   39 -
 gdb/testsuite/gdb.java/jprint.exp           |   77 --
 gdb/testsuite/gdb.java/jprint.java          |   68 --
 gdb/testsuite/gdb.java/jv-exp.exp           |   41 -
 gdb/testsuite/gdb.java/jv-print.exp         |  153 ---
 gdb/testsuite/gdb.python/py-lookup-type.exp |    2 -
 gdb/testsuite/lib/gdb.exp                   |    6 -
 gdb/testsuite/lib/java.exp                  |  123 ---
 gdb/utils.c                                 |    2 +-
 gdb/valprint.h                              |    4 +-
 gdb/varobj.h                                |    1 -
 47 files changed, 126 insertions(+), 4808 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1590c1b..981ccf4 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,42 @@
+2016-10-06  Tom Tromey  <tom@tromey.com>
+
+	* MAINTAINERS: Remove Java test maintainer.
+	* varobj.h (java_varobj_ops): Don't declare.
+	* valprint.h (struct value_print_options)
+	<pascal_static_field_print>: Update comment.
+	* utils.c (producer_is_gcc): Remove java reference.
+	* symtab.h (struct general_symbol_info): Remove java references.
+	(SYMBOL_SEARCH_NAME): Likewise.
+	* objfiles.c (allocate_objfile): Update comment.
+	* linespec.c (find_linespec_symbols): Remove java references.
+	* gnu-v3-abi.c (gnuv3_rtti_type, gnuv3_baseclass_offset): Remove
+	java references.
+	* gdbtypes.h (struct cplus_struct_type) <is_java>: Remove.
+	(TYPE_CPLUS_REALLY_JAVA): Remove.
+	* c-varobj.c (enum vsections): Update comment.
+	* symtab.c (symbol_set_language, symbol_set_names)
+	(symbol_natural_name, symbol_demangled_name)
+	(demangle_for_lookup, symbol_matches_domain)
+	(default_make_symbol_completion_list_break_on_1): Remove java
+	references.
+	(JAVA_PREFIX, JAVA_PREFIX_LEN): Remove.
+	* psymtab.c (match_partial_symbol, psymtab_search_name)
+	(lookup_partial_symbol): Remove java references.
+	* dwarf2read.c (find_slot_in_mapped_hash): Remove java references.
+	(add_partial_symbol, dwarf2_compute_name, dwarf2_physname)
+	(dwarf2_add_member_fn, is_vtable_name, read_structure_type)
+	(process_structure_scope, read_subroutine_type)
+	(read_subrange_type, load_partial_dies)
+	(new_symbol_full, determine_prefix, typename_concat)
+	(dwarf2_name): Remove java references.
+	(set_cu_language): Treat Java as C++.
+	* c-typeprint.c (c_type_print_args): Remove java reference.
+	* defs.h (enum language) <language_java>: Remove.
+	* Makefile.in (SFILES, HFILES_NO_SRCDIR, COMMON_OBS, YYFILES)
+	(YYOBJ, local-maintainer-clean): Don't mention java files.
+	* jv-exp.y, jv-lang.c, jv-lang.h, jv-typeprint.c, jv-valprint.c,
+	jv-varobj.c: Remove.
+
 2016-10-06  Maciej W. Rozycki  <macro@imgtec.com>
 
 	* mips-tdep.c (mips_pseudo_register_type): Make FCRs always
diff --git a/gdb/MAINTAINERS b/gdb/MAINTAINERS
index 67d1168..802f77d 100644
--- a/gdb/MAINTAINERS
+++ b/gdb/MAINTAINERS
@@ -450,7 +450,6 @@ tui			Stephane Carrez		Stephane.Carrez@gmail.com
 ia64			Kevin Buettner		kevinb@redhat.com
 AIX			Kevin Buettner		kevinb@redhat.com
 GNU/Linux PPC native	Kevin Buettner		kevinb@redhat.com
-gdb.java tests		Anthony Green		green@redhat.com
 FreeBSD native & host	David O'Brien		obrien@freebsd.org
 event loop		Elena Zannoni		elena.zannoni@oracle.com
 generic symtabs		Elena Zannoni		elena.zannoni@oracle.com
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index d0a968a..2c88434 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -852,7 +852,6 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c ada-tasks.c \
 	infcmd.c inflow.c infrun.c \
 	inline-frame.c \
 	interps.c \
-	jv-exp.y jv-lang.c jv-valprint.c jv-typeprint.c jv-varobj.c \
 	language.c linespec.c location.c minidebug.c \
 	m2-exp.y m2-lang.c m2-typeprint.c m2-valprint.c \
 	macrotab.c macroexp.c macrocmd.c macroscope.c main.c maint.c \
@@ -945,7 +944,7 @@ interps.h auxv.h gdbcmd.h tramp-frame.h mipsnbsd-tdep.h	\
 amd64-linux-tdep.h linespec.h location.h i387-tdep.h mn10300-tdep.h \
 sparc64-tdep.h ppcobsd-tdep.h \
 coff-pe-read.h parser-defs.h gdb_ptrace.h mips-linux-tdep.h \
-m68k-tdep.h spu-tdep.h jv-lang.h environ.h amd64-tdep.h \
+m68k-tdep.h spu-tdep.h environ.h amd64-tdep.h \
 doublest.h regset.h hppa-tdep.h ppc-linux-tdep.h ppc64-tdep.h \
 rs6000-tdep.h rs6000-aix-tdep.h \
 common/gdb_locale.h arch-utils.h trad-frame.h gnu-nat.h \
@@ -1059,7 +1058,6 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
 	ui-out.o cli-out.o \
 	varobj.o vec.o \
 	go-lang.o go-valprint.o go-typeprint.o \
-	jv-lang.o jv-valprint.o jv-typeprint.o jv-varobj.o \
 	m2-lang.o opencl-lang.o p-lang.o p-typeprint.o p-valprint.o \
 	selftest.o sentinel-frame.o \
 	complaints.o typeprint.o \
@@ -1107,12 +1105,10 @@ YYFILES = c-exp.c \
 	cp-name-parser.c \
 	ada-lex.c \
 	ada-exp.c \
-	jv-exp.c \
 	d-exp.c f-exp.c go-exp.c m2-exp.c p-exp.c rust-exp.c
 YYOBJ = c-exp.o \
 	cp-name-parser.o \
 	ada-exp.o \
-	jv-exp.o \
 	d-exp.o f-exp.o go-exp.o m2-exp.o p-exp.o rust-exp.o
 
 # Things which need to be built when making a distribution.
@@ -1484,7 +1480,6 @@ local-maintainer-clean:
 	rm -f c-exp.c \
 		cp-name-parser.c \
 		ada-lex.c ada-exp.c \
-		jv-exp.tab \
 		d-exp.c f-exp.c go-exp.c m2-exp.c p-exp.c rust-exp.c
 	rm -f TAGS $(INFOFILES)
 	rm -f $(YYFILES)
diff --git a/gdb/NEWS b/gdb/NEWS
index 741813f..4a61438 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -15,6 +15,8 @@
   running on MS-Windows use to assign names to threads in the
   debugger.
 
+* Support for Java programs compiled with gcj has been removed.
+
 * New targets
 
 Synopsys ARC			arc*-*-elf32
diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index 2564ebc..8b15b6f 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -30,7 +30,6 @@
 #include "c-lang.h"
 #include "typeprint.h"
 #include "cp-abi.h"
-#include "jv-lang.h"
 #include "cp-support.h"
 
 static void c_type_print_varspec_prefix (struct type *,
@@ -465,7 +464,7 @@ c_type_print_modifier (struct type *type, struct ui_file *stream,
    parameter types get removed their possible const and volatile qualifiers to
    match demangled linkage name parameters part of such function type.
    LANGUAGE is the language in which TYPE was defined.  This is a necessary
-   evil since this code is used by the C, C++, and Java backends.  */
+   evil since this code is used by the C and C++.  */
 
 void
 c_type_print_args (struct type *type, struct ui_file *stream,
@@ -504,10 +503,7 @@ c_type_print_args (struct type *type, struct ui_file *stream,
 	  param_type = make_cv_type (0, 0, param_type, NULL);
 	}
 
-      if (language == language_java)
-	java_print_type (param_type, "", stream, -1, 0, flags);
-      else
-	c_print_type (param_type, "", stream, -1, 0, flags);
+      c_print_type (param_type, "", stream, -1, 0, flags);
       printed_any = 1;
     }
 
@@ -524,8 +520,7 @@ c_type_print_args (struct type *type, struct ui_file *stream,
 	}
     }
   else if (!printed_any
-	   && ((TYPE_PROTOTYPED (type) && language != language_java)
-	       || language == language_cplus))
+	   && (TYPE_PROTOTYPED (type) || language == language_cplus))
     fprintf_filtered (stream, "void");
 
   fprintf_filtered (stream, ")");
diff --git a/gdb/c-varobj.c b/gdb/c-varobj.c
index 48e16f9..b2b239f 100644
--- a/gdb/c-varobj.c
+++ b/gdb/c-varobj.c
@@ -556,7 +556,7 @@ const struct lang_varobj_ops c_varobj_ops =
    c_is_path_expr_parent  /* is_path_expr_parent */
 };
 
-/* A little convenience enum for dealing with C++/Java.  */
+/* A little convenience enum for dealing with C++.  */
 enum vsections
 {
   v_public = 0, v_private, v_protected
diff --git a/gdb/defs.h b/gdb/defs.h
index 6c0215c..5322648 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -196,9 +196,9 @@ extern void quit_serial_event_clear (void);
    Note that there's ambiguity between the mangling schemes of some of
    these languages, so some symbols could be successfully demangled by
    several languages.  For that reason, the constants here are sorted
-   in the order we'll attempt demangling them.  For example: Java and
-   Rust use C++ mangling, so must come after C++; Ada must come last
-   (see ada_sniff_from_mangled_name).  */
+   in the order we'll attempt demangling them.  For example: Rust uses
+   C++ mangling, so must come after C++; Ada must come last (see
+   ada_sniff_from_mangled_name).  */
 
 enum language
   {
@@ -207,7 +207,6 @@ enum language
     language_c,			/* C */
     language_objc,		/* Objective-C */
     language_cplus,		/* C++ */
-    language_java,		/* Java */
     language_d,			/* D */
     language_go,		/* Go */
     language_fortran,		/* Fortran */
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog
index c7f6248..c777e91 100644
--- a/gdb/doc/ChangeLog
+++ b/gdb/doc/ChangeLog
@@ -1,3 +1,10 @@
+2016-10-06  Tom Tromey  <tom@tromey.com>
+
+	* guile.texi (Types In Guile): Remove Java mentions.
+	* python.texi (Types In Python): Remove Java mentions.
+	* gdb.texinfo (Address Locations, Supported Languages)
+	(Index Section Format): Remove Java mentions.
+
 2016-08-15  Doug Evans  <dje@google.com>
 
 	* gdb.texinfo (Target Description Format): Update docs on "end"
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index cfa00ce..56cd59a 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -7941,7 +7941,7 @@ Any expression valid in the current working language.
 
 @item @var{funcaddr}
 An address of a function or procedure derived from its name.  In C,
-C@t{++}, Java, Objective-C, Fortran, minimal, and assembly, this is
+C@t{++}, Objective-C, Fortran, minimal, and assembly, this is
 simply the function's name @var{function} (and actually a special case
 of a valid expression).  In Pascal and Modula-2, this is
 @code{&@var{function}}.  In Ada, this is @code{@var{function}'Address}
@@ -14440,7 +14440,7 @@ being set automatically by @value{GDBN}.
 @node Supported Languages
 @section Supported Languages
 
-@value{GDBN} supports C, C@t{++}, D, Go, Objective-C, Fortran, Java,
+@value{GDBN} supports C, C@t{++}, D, Go, Objective-C, Fortran,
 OpenCL C, Pascal, Rust, assembly, Modula-2, and Ada.
 @c This is false ...
 Some @value{GDBN} features may be used in expressions regardless of the
@@ -41653,7 +41653,7 @@ switch (die->tag)
     break;
   case DW_TAG_enumerator:
     kind = VARIABLE;
-    is_static = (language != CPLUS && language != JAVA);
+    is_static = language != CPLUS;
     break;
   case DW_TAG_subprogram:
     kind = FUNCTION;
@@ -41677,7 +41677,7 @@ switch (die->tag)
   case DW_TAG_union_type:
   case DW_TAG_enumeration_type:
     kind = TYPE;
-    is_static = (language != CPLUS && language != JAVA);
+    is_static = language != CPLUS;
     break;
   default:
     assert (0);
diff --git a/gdb/doc/guile.texi b/gdb/doc/guile.texi
index 840defc..0030f3f 100644
--- a/gdb/doc/guile.texi
+++ b/gdb/doc/guile.texi
@@ -1258,7 +1258,7 @@ A string of bits.  It is deprecated.
 An unknown or erroneous type.
 
 @item TYPE_CODE_METHOD
-A method type, as found in C@t{++} or Java.
+A method type, as found in C@t{++}.
 
 @item TYPE_CODE_METHODPTR
 A pointer-to-member-function.
@@ -1322,7 +1322,7 @@ Return the enum value represented by @code{<gdb:field>} @var{field}.
 @deffn {Scheme Procedure} field-bitpos field
 Return the bit position of @code{<gdb:field>} @var{field}.
 This attribute is not available for @code{static} fields (as in
-C@t{++} or Java).
+C@t{++}).
 @end deffn
 
 @deffn {Scheme Procedure} field-bitsize field
diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi
index a17e37d..d6507e5 100644
--- a/gdb/doc/python.texi
+++ b/gdb/doc/python.texi
@@ -949,7 +949,7 @@ Each field is a @code{gdb.Field} object, with some pre-defined attributes:
 @table @code
 @item bitpos
 This attribute is not available for @code{enum} or @code{static}
-(as in C@t{++} or Java) fields.  The value is the position, counting
+(as in C@t{++}) fields.  The value is the position, counting
 in bits, from the start of the containing type.
 
 @item enumval
@@ -1147,7 +1147,7 @@ An unknown or erroneous type.
 
 @vindex TYPE_CODE_METHOD
 @item gdb.TYPE_CODE_METHOD
-A method type, as found in C@t{++} or Java.
+A method type, as found in C@t{++}.
 
 @vindex TYPE_CODE_METHODPTR
 @item gdb.TYPE_CODE_METHODPTR
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index d0f6e71..c070cd7 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -53,7 +53,6 @@
 #include "block.h"
 #include "addrmap.h"
 #include "typeprint.h"
-#include "jv-lang.h"
 #include "psympriv.h"
 #include <sys/stat.h>
 #include "completer.h"
@@ -3007,7 +3006,6 @@ find_slot_in_mapped_hash (struct mapped_index *index, const char *name,
   int (*cmp) (const char *, const char *);
 
   if (current_language->la_language == language_cplus
-      || current_language->la_language == language_java
       || current_language->la_language == language_fortran
       || current_language->la_language == language_d)
     {
@@ -6757,8 +6755,7 @@ scan_partial_symbols (struct partial_die_info *first_die, CORE_ADDR *lowpc,
 /* Functions used to compute the fully scoped name of a partial DIE.
 
    Normally, this is simple.  For C++, the parent DIE's fully scoped
-   name is concatenated with "::" and the partial DIE's name.  For
-   Java, the same thing occurs except that "." is used instead of "::".
+   name is concatenated with "::" and the partial DIE's name.
    Enumerators are an exception; they use the scope of their parent
    enumeration type, i.e. the name of the enumeration type is not
    prepended to the enumerator.
@@ -7048,8 +7045,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
       add_psymbol_to_list (actual_name, strlen (actual_name),
 			   built_actual_name != NULL,
 			   STRUCT_DOMAIN, LOC_TYPEDEF,
-			   (cu->language == language_cplus
-			    || cu->language == language_java)
+			   cu->language == language_cplus
 			   ? &objfile->global_psymbols
 			   : &objfile->static_psymbols,
 			   0, cu->language, objfile);
@@ -7059,8 +7055,7 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
       add_psymbol_to_list (actual_name, strlen (actual_name),
 			   built_actual_name != NULL,
 			   VAR_DOMAIN, LOC_CONST,
-			   (cu->language == language_cplus
-			    || cu->language == language_java)
+			   cu->language == language_cplus
 			   ? &objfile->global_psymbols
 			   : &objfile->static_psymbols,
 			   0, cu->language, objfile);
@@ -8435,9 +8430,8 @@ do_ui_file_peek_last (void *object, const char *buffer, long length)
 
 /* Compute the fully qualified name of DIE in CU.  If PHYSNAME is nonzero,
    compute the physname for the object, which include a method's:
-   - formal parameters (C++/Java),
+   - formal parameters (C++),
    - receiver type (Go),
-   - return type (Java).
 
    The term "physname" is a bit confusing.
    For C++, for example, it is the demangled name.
@@ -8484,7 +8478,7 @@ dwarf2_compute_name (const char *name,
 
   /* These are the only languages we know how to qualify names in.  */
   if (name != NULL
-      && (cu->language == language_cplus || cu->language == language_java
+      && (cu->language == language_cplus
 	  || cu->language == language_fortran || cu->language == language_d
 	  || cu->language == language_rust))
     {
@@ -8635,27 +8629,18 @@ dwarf2_compute_name (const char *name,
 		}
 	    }
 
-	  /* For Java and C++ methods, append formal parameter type
+	  /* For C++ methods, append formal parameter type
 	     information, if PHYSNAME.  */
 
 	  if (physname && die->tag == DW_TAG_subprogram
-	      && (cu->language == language_cplus
-		  || cu->language == language_java))
+	      && cu->language == language_cplus)
 	    {
 	      struct type *type = read_type_die (die, cu);
 
 	      c_type_print_args (type, buf, 1, cu->language,
 				 &type_print_raw_options);
 
-	      if (cu->language == language_java)
-		{
-		  /* For java, we must append the return type to method
-		     names.  */
-		  if (die->tag == DW_TAG_subprogram)
-		    java_print_type (TYPE_TARGET_TYPE (type), "", buf,
-				     0, 0, &type_print_raw_options);
-		}
-	      else if (cu->language == language_cplus)
+	      if (cu->language == language_cplus)
 		{
 		  /* Assume that an artificial first parameter is
 		     "this", but do not crash if it is not.  RealView
@@ -8703,7 +8688,7 @@ dwarf2_compute_name (const char *name,
    not have a name.  NAME may either be from a previous call to
    dwarf2_name or NULL.
 
-   The output string will be canonicalized (if C++/Java).  */
+   The output string will be canonicalized (if C++).  */
 
 static const char *
 dwarf2_full_name (const char *name, struct die_info *die, struct dwarf2_cu *cu)
@@ -8716,7 +8701,7 @@ dwarf2_full_name (const char *name, struct die_info *die, struct dwarf2_cu *cu)
    allocated on the objfile_objstack or NULL if the DIE does not have a
    name.
 
-   The output string will be canonicalized (if C++/Java).  */
+   The output string will be canonicalized (if C++).  */
 
 static const char *
 dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu)
@@ -8768,10 +8753,7 @@ dwarf2_physname (const char *name, struct die_info *die, struct dwarf2_cu *cu)
       else
 	{
 	  demangled = gdb_demangle (mangled,
-				    (DMGL_PARAMS | DMGL_ANSI
-				     | (cu->language == language_java
-					? DMGL_JAVA | DMGL_RET_POSTFIX
-					: DMGL_RET_DROP)));
+				    (DMGL_PARAMS | DMGL_ANSI | DMGL_RET_DROP));
 	}
       if (demangled)
 	{
@@ -12901,7 +12883,7 @@ dwarf2_add_member_fn (struct field_info *fip, struct die_info *die,
   fnp = &new_fnfield->fnfield;
 
   /* Delay processing of the physname until later.  */
-  if (cu->language == language_cplus || cu->language == language_java)
+  if (cu->language == language_cplus)
     {
       add_to_method_list (type, i, flp->length - 1, fieldname,
 			  die, cu);
@@ -13087,11 +13069,8 @@ is_vtable_name (const char *name, struct dwarf2_cu *cu)
   static const char vptr[] = "_vptr";
   static const char vtable[] = "vtable";
 
-  /* Look for the C++ and Java forms of the vtable.  */
-  if ((cu->language == language_java
-       && startswith (name, vtable))
-       || (startswith (name, vptr)
-       && is_cplus_marker (name[sizeof (vptr) - 1])))
+  /* Look for the C++ form of the vtable.  */
+  if (startswith (name, vptr) && is_cplus_marker (name[sizeof (vptr) - 1]))
     return 1;
 
   return 0;
@@ -13194,7 +13173,6 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
   if (name != NULL)
     {
       if (cu->language == language_cplus
-	  || cu->language == language_java
 	  || cu->language == language_d
 	  || cu->language == language_rust)
 	{
@@ -13468,9 +13446,6 @@ process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
 	}
 
       do_cleanups (back_to);
-
-      if (HAVE_CPLUS_STRUCT (type))
-	TYPE_CPLUS_REALLY_JAVA (type) = cu->language == language_java;
     }
 
   quirk_gcc_member_function_pointer (type, objfile);
@@ -14675,19 +14650,7 @@ read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
 	      if (attr)
 		TYPE_FIELD_ARTIFICIAL (ftype, iparams) = DW_UNSND (attr);
 	      else
-		{
-		  TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
-
-		  /* GCC/43521: In java, the formal parameter
-		     "this" is sometimes not marked with DW_AT_artificial.  */
-		  if (cu->language == language_java)
-		    {
-		      const char *name = dwarf2_name (child_die, cu);
-
-		      if (name && !strcmp (name, "this"))
-			TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 1;
-		    }
-		}
+		TYPE_FIELD_ARTIFICIAL (ftype, iparams) = 0;
 	      arg_type = die_type (child_die, cu);
 
 	      /* RealView does not mark THIS as const, which the testsuite
@@ -15023,7 +14986,6 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
       low_default_is_valid = 1;
       break;
     case language_d:
-    case language_java:
     case language_objc:
     case language_rust:
       low.data.const_val = 0;
@@ -15741,8 +15703,7 @@ load_partial_dies (const struct die_reader_specs *reader,
 	  else if (building_psymtab)
 	    add_psymbol_to_list (part_die->name, strlen (part_die->name), 0,
 				 VAR_DOMAIN, LOC_CONST,
-				 (cu->language == language_cplus
-				  || cu->language == language_java)
+				 cu->language == language_cplus
 				 ? &objfile->global_psymbols
 				 : &objfile->static_psymbols,
 				 0, cu->language, objfile);
@@ -17077,6 +17038,7 @@ set_cu_language (unsigned int lang, struct dwarf2_cu *cu)
     case DW_LANG_UPC:
       cu->language = language_c;
       break;
+    case DW_LANG_Java:
     case DW_LANG_C_plus_plus:
     case DW_LANG_C_plus_plus_11:
     case DW_LANG_C_plus_plus_14:
@@ -17098,9 +17060,6 @@ set_cu_language (unsigned int lang, struct dwarf2_cu *cu)
     case DW_LANG_Mips_Assembler:
       cu->language = language_asm;
       break;
-    case DW_LANG_Java:
-      cu->language = language_java;
-      break;
     case DW_LANG_Ada83:
     case DW_LANG_Ada95:
       cu->language = language_ada;
@@ -18659,7 +18618,7 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
 	  SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
 
 	  {
-	    /* NOTE: carlton/2003-11-10: C++ and Java class symbols shouldn't
+	    /* NOTE: carlton/2003-11-10: C++ class symbols shouldn't
 	       really ever be static objects: otherwise, if you try
 	       to, say, break of a class's method and you're in a file
 	       which doesn't mention that class, it won't work unless
@@ -18670,16 +18629,12 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
 	    if (!suppress_add)
 	      {
 		list_to_add = (cu->list_in_scope == &file_symbols
-			       && (cu->language == language_cplus
-				   || cu->language == language_java)
+			       && cu->language == language_cplus
 			       ? &global_symbols : cu->list_in_scope);
 
 		/* The semantics of C++ state that "struct foo {
-		   ... }" also defines a typedef for "foo".  A Java
-		   class declaration also defines a typedef for the
-		   class.  */
+		   ... }" also defines a typedef for "foo".  */
 		if (cu->language == language_cplus
-		    || cu->language == language_java
 		    || cu->language == language_ada
 		    || cu->language == language_d
 		    || cu->language == language_rust)
@@ -18715,8 +18670,7 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
 	       DW_TAG_class_type, etc. block.  */
 
 	    list_to_add = (cu->list_in_scope == &file_symbols
-			   && (cu->language == language_cplus
-			       || cu->language == language_java)
+			   && cu->language == language_cplus
 			   ? &global_symbols : cu->list_in_scope);
 	  }
 	  break;
@@ -19354,7 +19308,7 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu)
   struct type *parent_type;
   char *retval;
 
-  if (cu->language != language_cplus && cu->language != language_java
+  if (cu->language != language_cplus
       && cu->language != language_fortran && cu->language != language_d
       && cu->language != language_rust)
     return "";
@@ -19510,8 +19464,6 @@ typename_concat (struct obstack *obs, const char *prefix, const char *suffix,
   if (suffix == NULL || suffix[0] == '\0'
       || prefix == NULL || prefix[0] == '\0')
     sep = "";
-  else if (cu->language == language_java)
-    sep = ".";
   else if (cu->language == language_d)
     {
       /* For D, the 'main' function could be defined in any module, but it
@@ -19623,36 +19575,6 @@ dwarf2_name (struct die_info *die, struct dwarf2_cu *cu)
 	return DW_STRING (attr);
       return CP_ANONYMOUS_NAMESPACE_STR;
 
-    case DW_TAG_subprogram:
-      /* Java constructors will all be named "<init>", so return
-	 the class name when we see this special case.  */
-      if (cu->language == language_java
-	  && DW_STRING (attr) != NULL
-	  && strcmp (DW_STRING (attr), "<init>") == 0)
-	{
-	  struct dwarf2_cu *spec_cu = cu;
-	  struct die_info *spec_die;
-
-	  /* GCJ will output '<init>' for Java constructor names.
-	     For this special case, return the name of the parent class.  */
-
-	  /* GCJ may output subprogram DIEs with AT_specification set.
-	     If so, use the name of the specified DIE.  */
-	  spec_die = die_specification (die, &spec_cu);
-	  if (spec_die != NULL)
-	    return dwarf2_name (spec_die, spec_cu);
-
-	  do
-	    {
-	      die = die->parent;
-	      if (die->tag == DW_TAG_class_type)
-		return dwarf2_name (die, cu);
-	    }
-	  while (die->tag != DW_TAG_compile_unit
-		 && die->tag != DW_TAG_partial_unit);
-	}
-      break;
-
     case DW_TAG_class_type:
     case DW_TAG_interface_type:
     case DW_TAG_structure_type:
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index 812e73b..4ca0bd8 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -926,10 +926,6 @@ struct cplus_struct_type
 
     int is_dynamic : 2;
 
-    /* * Non-zero if this type came from a Java CU.  */
-
-    unsigned int is_java : 1;
-
     /* * The base class which defined the virtual function table pointer.  */
 
     struct type *vptr_basetype;
@@ -1309,7 +1305,6 @@ extern void set_type_vptr_basetype (struct type *, struct type *);
 #define BASETYPE_VIA_PUBLIC(thistype, index) \
   ((!TYPE_FIELD_PRIVATE(thistype, index)) && (!TYPE_FIELD_PROTECTED(thistype, index)))
 #define TYPE_CPLUS_DYNAMIC(thistype) TYPE_CPLUS_SPECIFIC (thistype)->is_dynamic
-#define TYPE_CPLUS_REALLY_JAVA(thistype) TYPE_CPLUS_SPECIFIC (thistype)->is_java
 
 #define BASETYPE_VIA_VIRTUAL(thistype, index) \
   (TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \
diff --git a/gdb/gnu-v3-abi.c b/gdb/gnu-v3-abi.c
index 5bf36a2..0e037e6 100644
--- a/gdb/gnu-v3-abi.c
+++ b/gdb/gnu-v3-abi.c
@@ -302,10 +302,6 @@ gnuv3_rtti_type (struct value *value,
   if (TYPE_CODE (values_type) != TYPE_CODE_STRUCT)
     return NULL;
 
-  /* Java doesn't have RTTI following the C++ ABI.  */
-  if (TYPE_CPLUS_REALLY_JAVA (values_type))
-    return NULL;
-
   /* Determine architecture.  */
   gdbarch = get_type_arch (values_type);
 
@@ -457,9 +453,8 @@ gnuv3_baseclass_offset (struct type *type, int index,
   ptr_type = builtin_type (gdbarch)->builtin_data_ptr;
 
   /* If it isn't a virtual base, this is easy.  The offset is in the
-     type definition.  Likewise for Java, which doesn't really have
-     virtual inheritance in the C++ sense.  */
-  if (!BASETYPE_VIA_VIRTUAL (type, index) || TYPE_CPLUS_REALLY_JAVA (type))
+     type definition.  */
+  if (!BASETYPE_VIA_VIRTUAL (type, index))
     return TYPE_BASECLASS_BITPOS (type, index) / 8;
 
   /* To access a virtual base, we need to use the vbase offset stored in
diff --git a/gdb/jv-exp.y b/gdb/jv-exp.y
deleted file mode 100644
index 79b8127..0000000
--- a/gdb/jv-exp.y
+++ /dev/null
@@ -1,1434 +0,0 @@
-/* YACC parser for Java expressions, for GDB.
-   Copyright (C) 1997-2016 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-/* Parse a Java expression from text in a string,
-   and return the result as a  struct expression  pointer.
-   That structure contains arithmetic operations in reverse polish,
-   with constants represented by operations that are followed by special data.
-   See expression.h for the details of the format.
-   What is important here is that it can be built up sequentially
-   during the process of parsing; the lower levels of the tree always
-   come first in the result.  Well, almost always; see ArrayAccess.
-
-   Note that malloc's and realloc's in this file are transformed to
-   xmalloc and xrealloc respectively by the same sed command in the
-   makefile that remaps any other malloc/realloc inserted by the parser
-   generator.  Doing this with #defines and trying to control the interaction
-   with include files (<malloc.h> and <stdlib.h> for example) just became
-   too messy, particularly when such includes can be inserted at random
-   times by the parser generator.  */
-  
-%{
-
-#include "defs.h"
-#include <ctype.h>
-#include "expression.h"
-#include "value.h"
-#include "parser-defs.h"
-#include "language.h"
-#include "jv-lang.h"
-#include "bfd.h" /* Required by objfiles.h.  */
-#include "symfile.h" /* Required by objfiles.h.  */
-#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
-#include "block.h"
-#include "completer.h"
-
-#define parse_type(ps) builtin_type (parse_gdbarch (ps))
-#define parse_java_type(ps) builtin_java_type (parse_gdbarch (ps))
-
-/* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
-   etc).  */
-#define GDB_YY_REMAP_PREFIX java_
-#include "yy-remap.h"
-
-/* The state of the parser, used internally when we are parsing the
-   expression.  */
-
-static struct parser_state *pstate = NULL;
-
-int yyparse (void);
-
-static int yylex (void);
-
-void yyerror (char *);
-
-static struct type *java_type_from_name (struct stoken);
-static void push_expression_name (struct parser_state *, struct stoken);
-static void push_fieldnames (struct parser_state *, struct stoken);
-
-static struct expression *copy_exp (struct expression *, int);
-static void insert_exp (struct parser_state *, int, struct expression *);
-
-%}
-
-/* Although the yacc "value" of an expression is not used,
-   since the result is stored in the structure being created,
-   other node types do have values.  */
-
-%union
-  {
-    LONGEST lval;
-    struct {
-      LONGEST val;
-      struct type *type;
-    } typed_val_int;
-    struct {
-      DOUBLEST dval;
-      struct type *type;
-    } typed_val_float;
-    struct symbol *sym;
-    struct type *tval;
-    struct stoken sval;
-    struct ttype tsym;
-    struct symtoken ssym;
-    struct block *bval;
-    enum exp_opcode opcode;
-    struct internalvar *ivar;
-    int *ivec;
-  }
-
-%{
-/* YYSTYPE gets defined by %union */
-static int parse_number (struct parser_state *, const char *, int,
-			 int, YYSTYPE *);
-%}
-
-%type <lval> rcurly Dims Dims_opt
-%type <tval> ClassOrInterfaceType ClassType /* ReferenceType Type ArrayType */
-%type <tval> IntegralType FloatingPointType NumericType PrimitiveType ArrayType PrimitiveOrArrayType
-
-%token <typed_val_int> INTEGER_LITERAL
-%token <typed_val_float> FLOATING_POINT_LITERAL
-
-%token <sval> IDENTIFIER
-%token <sval> STRING_LITERAL
-%token <lval> BOOLEAN_LITERAL
-%token <tsym> TYPENAME
-%type <sval> Name SimpleName QualifiedName ForcedName
-
-/* A NAME_OR_INT is a symbol which is not known in the symbol table,
-   but which would parse as a valid number in the current input radix.
-   E.g. "c" when input_radix==16.  Depending on the parse, it will be
-   turned into a name or into a number.  */
-
-%token <sval> NAME_OR_INT 
-
-%token ERROR
-
-/* Special type cases, put in to allow the parser to distinguish different
-   legal basetypes.  */
-%token LONG SHORT BYTE INT CHAR BOOLEAN DOUBLE FLOAT
-
-%token VARIABLE
-
-%token <opcode> ASSIGN_MODIFY
-
-%token SUPER NEW
-
-%left ','
-%right '=' ASSIGN_MODIFY
-%right '?'
-%left OROR
-%left ANDAND
-%left '|'
-%left '^'
-%left '&'
-%left EQUAL NOTEQUAL
-%left '<' '>' LEQ GEQ
-%left LSH RSH
-%left '+' '-'
-%left '*' '/' '%'
-%right INCREMENT DECREMENT
-%right '.' '[' '('
-
-
-%%
-
-start   :	exp1
-	|	type_exp
-	;
-
-type_exp:	PrimitiveOrArrayType
-		{
-		  write_exp_elt_opcode (pstate, OP_TYPE);
-		  write_exp_elt_type (pstate, $1);
-		  write_exp_elt_opcode (pstate, OP_TYPE);
-		}
-	;
-
-PrimitiveOrArrayType:
-		PrimitiveType
-	|	ArrayType
-	;
-
-StringLiteral:
-	STRING_LITERAL
-		{
-		  write_exp_elt_opcode (pstate, OP_STRING);
-		  write_exp_string (pstate, $1);
-		  write_exp_elt_opcode (pstate, OP_STRING);
-		}
-;
-
-Literal:
-	INTEGER_LITERAL
-		{ write_exp_elt_opcode (pstate, OP_LONG);
-		  write_exp_elt_type (pstate, $1.type);
-		  write_exp_elt_longcst (pstate, (LONGEST)($1.val));
-		  write_exp_elt_opcode (pstate, OP_LONG); }
-|	NAME_OR_INT
-		{ YYSTYPE val;
-		  parse_number (pstate, $1.ptr, $1.length, 0, &val);
-		  write_exp_elt_opcode (pstate, OP_LONG);
-		  write_exp_elt_type (pstate, val.typed_val_int.type);
-		  write_exp_elt_longcst (pstate,
-					 (LONGEST) val.typed_val_int.val);
-		  write_exp_elt_opcode (pstate, OP_LONG);
-		}
-|	FLOATING_POINT_LITERAL
-		{ write_exp_elt_opcode (pstate, OP_DOUBLE);
-		  write_exp_elt_type (pstate, $1.type);
-		  write_exp_elt_dblcst (pstate, $1.dval);
-		  write_exp_elt_opcode (pstate, OP_DOUBLE); }
-|	BOOLEAN_LITERAL
-		{ write_exp_elt_opcode (pstate, OP_LONG);
-		  write_exp_elt_type (pstate,
-				  parse_java_type (pstate)->builtin_boolean);
-		  write_exp_elt_longcst (pstate, (LONGEST)$1);
-		  write_exp_elt_opcode (pstate, OP_LONG); }
-|	StringLiteral
-	;
-
-/* UNUSED:
-Type:
-	PrimitiveType
-|	ReferenceType
-;
-*/
-
-PrimitiveType:
-	NumericType
-|	BOOLEAN
-		{ $$ = parse_java_type (pstate)->builtin_boolean; }
-;
-
-NumericType:
-	IntegralType
-|	FloatingPointType
-;
-
-IntegralType:
-	BYTE
-		{ $$ = parse_java_type (pstate)->builtin_byte; }
-|	SHORT
-		{ $$ = parse_java_type (pstate)->builtin_short; }
-|	INT
-		{ $$ = parse_java_type (pstate)->builtin_int; }
-|	LONG
-		{ $$ = parse_java_type (pstate)->builtin_long; }
-|	CHAR
-		{ $$ = parse_java_type (pstate)->builtin_char; }
-;
-
-FloatingPointType:
-	FLOAT
-		{ $$ = parse_java_type (pstate)->builtin_float; }
-|	DOUBLE
-		{ $$ = parse_java_type (pstate)->builtin_double; }
-;
-
-/* UNUSED:
-ReferenceType:
-	ClassOrInterfaceType
-|	ArrayType
-;
-*/
-
-ClassOrInterfaceType:
-	Name
-		{ $$ = java_type_from_name ($1); }
-;
-
-ClassType:
-	ClassOrInterfaceType
-;
-
-ArrayType:
-	PrimitiveType Dims
-		{ $$ = java_array_type ($1, $2); }
-|	Name Dims
-		{ $$ = java_array_type (java_type_from_name ($1), $2); }
-;
-
-Name:
-	IDENTIFIER
-|	QualifiedName
-;
-
-ForcedName:
-	SimpleName
-|	QualifiedName
-;
-
-SimpleName:
-	IDENTIFIER
-|	NAME_OR_INT
-;
-
-QualifiedName:
-	Name '.' SimpleName
-		{ $$.length = $1.length + $3.length + 1;
-		  if ($1.ptr + $1.length + 1 == $3.ptr
-		      && $1.ptr[$1.length] == '.')
-		    $$.ptr = $1.ptr;  /* Optimization.  */
-		  else
-		    {
-		      char *buf;
-
-		      buf = (char *) malloc ($$.length + 1);
-		      make_cleanup (free, buf);
-		      sprintf (buf, "%.*s.%.*s",
-			       $1.length, $1.ptr, $3.length, $3.ptr);
-		      $$.ptr = buf;
-		} }
-;
-
-/*
-type_exp:	type
-			{ write_exp_elt_opcode(OP_TYPE);
-			  write_exp_elt_type($1);
-			  write_exp_elt_opcode(OP_TYPE);}
-	;
-	*/
-
-/* Expressions, including the comma operator.  */
-exp1	:	Expression
-	|	exp1 ',' Expression
-			{ write_exp_elt_opcode (pstate, BINOP_COMMA); }
-	;
-
-Primary:
-	PrimaryNoNewArray
-|	ArrayCreationExpression
-;
-
-PrimaryNoNewArray:
-	Literal
-|	'(' Expression ')'
-|	ClassInstanceCreationExpression
-|	FieldAccess
-|	MethodInvocation
-|	ArrayAccess
-|	lcurly ArgumentList rcurly
-		{ write_exp_elt_opcode (pstate, OP_ARRAY);
-		  write_exp_elt_longcst (pstate, (LONGEST) 0);
-		  write_exp_elt_longcst (pstate, (LONGEST) $3);
-		  write_exp_elt_opcode (pstate, OP_ARRAY); }
-;
-
-lcurly:
-	'{'
-		{ start_arglist (); }
-;
-
-rcurly:
-	'}'
-		{ $$ = end_arglist () - 1; }
-;
-
-ClassInstanceCreationExpression:
-	NEW ClassType '(' ArgumentList_opt ')'
-		{ internal_error (__FILE__, __LINE__,
-				  _("FIXME - ClassInstanceCreationExpression")); }
-;
-
-ArgumentList:
-	Expression
-		{ arglist_len = 1; }
-|	ArgumentList ',' Expression
-		{ arglist_len++; }
-;
-
-ArgumentList_opt:
-	/* EMPTY */
-		{ arglist_len = 0; }
-| ArgumentList
-;
-
-ArrayCreationExpression:
-	NEW PrimitiveType DimExprs Dims_opt
-		{ internal_error (__FILE__, __LINE__,
-				  _("FIXME - ArrayCreationExpression")); }
-|	NEW ClassOrInterfaceType DimExprs Dims_opt
-		{ internal_error (__FILE__, __LINE__,
-				  _("FIXME - ArrayCreationExpression")); }
-;
-
-DimExprs:
-	DimExpr
-|	DimExprs DimExpr
-;
-
-DimExpr:
-	'[' Expression ']'
-;
-
-Dims:
-	'[' ']'
-		{ $$ = 1; }
-|	Dims '[' ']'
-	{ $$ = $1 + 1; }
-;
-
-Dims_opt:
-	Dims
-|	/* EMPTY */
-		{ $$ = 0; }
-;
-
-FieldAccess:
-	Primary '.' SimpleName
-		{ push_fieldnames (pstate, $3); }
-|	VARIABLE '.' SimpleName
-		{ push_fieldnames (pstate, $3); }
-/*|	SUPER '.' SimpleName { FIXME } */
-;
-
-FuncStart:
-	Name '('
-                { push_expression_name (pstate, $1); }
-;
-
-MethodInvocation:
-	FuncStart
-                { start_arglist(); }
-	ArgumentList_opt ')'
-                { write_exp_elt_opcode (pstate, OP_FUNCALL);
-		  write_exp_elt_longcst (pstate, (LONGEST) end_arglist ());
-		  write_exp_elt_opcode (pstate, OP_FUNCALL); }
-|	Primary '.' SimpleName '(' ArgumentList_opt ')'
-		{ error (_("Form of method invocation not implemented")); }
-|	SUPER '.' SimpleName '(' ArgumentList_opt ')'
-		{ error (_("Form of method invocation not implemented")); }
-;
-
-ArrayAccess:
-	Name '[' Expression ']'
-                {
-                  /* Emit code for the Name now, then exchange it in the
-		     expout array with the Expression's code.  We could
-		     introduce a OP_SWAP code or a reversed version of
-		     BINOP_SUBSCRIPT, but that makes the rest of GDB pay
-		     for our parsing kludges.  */
-		  struct expression *name_expr;
-
-		  push_expression_name (pstate, $1);
-		  name_expr = copy_exp (pstate->expout, pstate->expout_ptr);
-		  pstate->expout_ptr -= name_expr->nelts;
-		  insert_exp (pstate,
-			      pstate->expout_ptr
-			      - length_of_subexp (pstate->expout,
-						  pstate->expout_ptr),
-			      name_expr);
-		  free (name_expr);
-		  write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT);
-		}
-|	VARIABLE '[' Expression ']'
-		{ write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
-|	PrimaryNoNewArray '[' Expression ']'
-		{ write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
-;
-
-PostfixExpression:
-	Primary
-|	Name
-		{ push_expression_name (pstate, $1); }
-|	VARIABLE
-		/* Already written by write_dollar_variable.  */
-|	PostIncrementExpression
-|	PostDecrementExpression
-;
-
-PostIncrementExpression:
-	PostfixExpression INCREMENT
-		{ write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
-;
-
-PostDecrementExpression:
-	PostfixExpression DECREMENT
-		{ write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
-;
-
-UnaryExpression:
-	PreIncrementExpression
-|	PreDecrementExpression
-|	'+' UnaryExpression
-|	'-' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_NEG); }
-|	'*' UnaryExpression 
-		{ write_exp_elt_opcode (pstate,
-					UNOP_IND); } /*FIXME not in Java  */
-|	UnaryExpressionNotPlusMinus
-;
-
-PreIncrementExpression:
-	INCREMENT UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
-;
-
-PreDecrementExpression:
-	DECREMENT UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
-;
-
-UnaryExpressionNotPlusMinus:
-	PostfixExpression
-|	'~' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
-|	'!' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
-|	CastExpression
-	;
-
-CastExpression:
-	'(' PrimitiveType Dims_opt ')' UnaryExpression
-		{ write_exp_elt_opcode (pstate, UNOP_CAST);
-		  write_exp_elt_type (pstate, java_array_type ($2, $3));
-		  write_exp_elt_opcode (pstate, UNOP_CAST); }
-|	'(' Expression ')' UnaryExpressionNotPlusMinus
-		{
-		  int last_exp_size = length_of_subexp (pstate->expout,
-							pstate->expout_ptr);
-		  struct type *type;
-		  int i;
-		  int base = pstate->expout_ptr - last_exp_size - 3;
-
-		  if (base < 0
-		      || pstate->expout->elts[base+2].opcode != OP_TYPE)
-		    error (_("Invalid cast expression"));
-		  type = pstate->expout->elts[base+1].type;
-		  /* Remove the 'Expression' and slide the
-		     UnaryExpressionNotPlusMinus down to replace it.  */
-		  for (i = 0;  i < last_exp_size;  i++)
-		    pstate->expout->elts[base + i]
-		      = pstate->expout->elts[base + i + 3];
-		  pstate->expout_ptr -= 3;
-		  if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
-		    type = lookup_pointer_type (type);
-		  write_exp_elt_opcode (pstate, UNOP_CAST);
-		  write_exp_elt_type (pstate, type);
-		  write_exp_elt_opcode (pstate, UNOP_CAST);
-		}
-|	'(' Name Dims ')' UnaryExpressionNotPlusMinus
-		{ write_exp_elt_opcode (pstate, UNOP_CAST);
-		  write_exp_elt_type (pstate,
-				      java_array_type (java_type_from_name
-						       ($2), $3));
-		  write_exp_elt_opcode (pstate, UNOP_CAST); }
-;
-
-
-MultiplicativeExpression:
-	UnaryExpression
-|	MultiplicativeExpression '*' UnaryExpression
-		{ write_exp_elt_opcode (pstate, BINOP_MUL); }
-|	MultiplicativeExpression '/' UnaryExpression
-		{ write_exp_elt_opcode (pstate, BINOP_DIV); }
-|	MultiplicativeExpression '%' UnaryExpression
-		{ write_exp_elt_opcode (pstate, BINOP_REM); }
-;
-
-AdditiveExpression:
-	MultiplicativeExpression
-|	AdditiveExpression '+' MultiplicativeExpression
-		{ write_exp_elt_opcode (pstate, BINOP_ADD); }
-|	AdditiveExpression '-' MultiplicativeExpression
-		{ write_exp_elt_opcode (pstate, BINOP_SUB); }
-;
-
-ShiftExpression:
-	AdditiveExpression
-|	ShiftExpression LSH AdditiveExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LSH); }
-|	ShiftExpression RSH AdditiveExpression
-		{ write_exp_elt_opcode (pstate, BINOP_RSH); }
-/* |	ShiftExpression >>> AdditiveExpression { FIXME } */
-;
-
-RelationalExpression:
-	ShiftExpression
-|	RelationalExpression '<' ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LESS); }
-|	RelationalExpression '>' ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_GTR); }
-|	RelationalExpression LEQ ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LEQ); }
-|	RelationalExpression GEQ ShiftExpression
-		{ write_exp_elt_opcode (pstate, BINOP_GEQ); }
-/* | RelationalExpresion INSTANCEOF ReferenceType { FIXME } */
-;
-
-EqualityExpression:
-	RelationalExpression
-|	EqualityExpression EQUAL RelationalExpression
-		{ write_exp_elt_opcode (pstate, BINOP_EQUAL); }
-|	EqualityExpression NOTEQUAL RelationalExpression
-		{ write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
-;
-
-AndExpression:
-	EqualityExpression
-|	AndExpression '&' EqualityExpression
-		{ write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
-;
-
-ExclusiveOrExpression:
-	AndExpression
-|	ExclusiveOrExpression '^' AndExpression
-		{ write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
-;
-InclusiveOrExpression:
-	ExclusiveOrExpression
-|	InclusiveOrExpression '|' ExclusiveOrExpression
-		{ write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
-;
-
-ConditionalAndExpression:
-	InclusiveOrExpression
-|	ConditionalAndExpression ANDAND InclusiveOrExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
-;
-
-ConditionalOrExpression:
-	ConditionalAndExpression
-|	ConditionalOrExpression OROR ConditionalAndExpression
-		{ write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
-;
-
-ConditionalExpression:
-	ConditionalOrExpression
-|	ConditionalOrExpression '?' Expression ':' ConditionalExpression
-		{ write_exp_elt_opcode (pstate, TERNOP_COND); }
-;
-
-AssignmentExpression:
-	ConditionalExpression
-|	Assignment
-;
-			  
-Assignment:
-	LeftHandSide '=' ConditionalExpression
-		{ write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
-|	LeftHandSide ASSIGN_MODIFY ConditionalExpression
-		{ write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
-		  write_exp_elt_opcode (pstate, $2);
-		  write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); }
-;
-
-LeftHandSide:
-	ForcedName
-		{ push_expression_name (pstate, $1); }
-|	VARIABLE
-		/* Already written by write_dollar_variable.  */
-|	FieldAccess
-|	ArrayAccess
-;
-
-
-Expression:
-	AssignmentExpression
-;
-
-%%
-/* Take care of parsing a number (anything that starts with a digit).
-   Set yylval and return the token type; update lexptr.
-   LEN is the number of characters in it.  */
-
-/*** Needs some error checking for the float case ***/
-
-static int
-parse_number (struct parser_state *par_state,
-	      const char *p, int len, int parsed_float, YYSTYPE *putithere)
-{
-  ULONGEST n = 0;
-  ULONGEST limit, limit_div_base;
-
-  int c;
-  int base = input_radix;
-
-  struct type *type;
-
-  if (parsed_float)
-    {
-      const char *suffix;
-      int suffix_len;
-
-      if (! parse_float (p, len, &putithere->typed_val_float.dval, &suffix))
-	return ERROR;
-
-      suffix_len = p + len - suffix;
-
-      if (suffix_len == 0)
-	putithere->typed_val_float.type
-	  = parse_type (par_state)->builtin_double;
-      else if (suffix_len == 1)
-	{
-	  /* See if it has `f' or `d' suffix (float or double).  */
-	  if (tolower (*suffix) == 'f')
-	    putithere->typed_val_float.type =
-	      parse_type (par_state)->builtin_float;
-	  else if (tolower (*suffix) == 'd')
-	    putithere->typed_val_float.type =
-	      parse_type (par_state)->builtin_double;
-	  else
-	    return ERROR;
-	}
-      else
-	return ERROR;
-
-      return FLOATING_POINT_LITERAL;
-    }
-
-  /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
-  if (p[0] == '0')
-    switch (p[1])
-      {
-      case 'x':
-      case 'X':
-	if (len >= 3)
-	  {
-	    p += 2;
-	    base = 16;
-	    len -= 2;
-	  }
-	break;
-
-      case 't':
-      case 'T':
-      case 'd':
-      case 'D':
-	if (len >= 3)
-	  {
-	    p += 2;
-	    base = 10;
-	    len -= 2;
-	  }
-	break;
-
-      default:
-	base = 8;
-	break;
-      }
-
-  c = p[len-1];
-  /* A paranoid calculation of (1<<64)-1.  */
-  limit = (ULONGEST)0xffffffff;
-  limit = ((limit << 16) << 16) | limit;
-  if (c == 'l' || c == 'L')
-    {
-      type = parse_java_type (par_state)->builtin_long;
-      len--;
-    }
-  else
-    {
-      type = parse_java_type (par_state)->builtin_int;
-    }
-  limit_div_base = limit / (ULONGEST) base;
-
-  while (--len >= 0)
-    {
-      c = *p++;
-      if (c >= '0' && c <= '9')
-	c -= '0';
-      else if (c >= 'A' && c <= 'Z')
-	c -= 'A' - 10;
-      else if (c >= 'a' && c <= 'z')
-	c -= 'a' - 10;
-      else
-	return ERROR;	/* Char not a digit */
-      if (c >= base)
-	return ERROR;
-      if (n > limit_div_base
-	  || (n *= base) > limit - c)
-	error (_("Numeric constant too large"));
-      n += c;
-	}
-
-  /* If the type is bigger than a 32-bit signed integer can be, implicitly
-     promote to long.  Java does not do this, so mark it as
-     parse_type (par_state)->builtin_uint64 rather than
-     parse_java_type (par_state)->builtin_long.
-     0x80000000 will become -0x80000000 instead of 0x80000000L, because we
-     don't know the sign at this point.  */
-  if (type == parse_java_type (par_state)->builtin_int
-      && n > (ULONGEST)0x80000000)
-    type = parse_type (par_state)->builtin_uint64;
-
-  putithere->typed_val_int.val = n;
-  putithere->typed_val_int.type = type;
-
-  return INTEGER_LITERAL;
-}
-
-struct token
-{
-  char *oper;
-  int token;
-  enum exp_opcode opcode;
-};
-
-static const struct token tokentab3[] =
-  {
-    {">>=", ASSIGN_MODIFY, BINOP_RSH},
-    {"<<=", ASSIGN_MODIFY, BINOP_LSH}
-  };
-
-static const struct token tokentab2[] =
-  {
-    {"+=", ASSIGN_MODIFY, BINOP_ADD},
-    {"-=", ASSIGN_MODIFY, BINOP_SUB},
-    {"*=", ASSIGN_MODIFY, BINOP_MUL},
-    {"/=", ASSIGN_MODIFY, BINOP_DIV},
-    {"%=", ASSIGN_MODIFY, BINOP_REM},
-    {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
-    {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
-    {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
-    {"++", INCREMENT, BINOP_END},
-    {"--", DECREMENT, BINOP_END},
-    {"&&", ANDAND, BINOP_END},
-    {"||", OROR, BINOP_END},
-    {"<<", LSH, BINOP_END},
-    {">>", RSH, BINOP_END},
-    {"==", EQUAL, BINOP_END},
-    {"!=", NOTEQUAL, BINOP_END},
-    {"<=", LEQ, BINOP_END},
-    {">=", GEQ, BINOP_END}
-  };
-
-/* Read one token, getting characters through lexptr.  */
-
-static int
-yylex (void)
-{
-  int c;
-  int namelen;
-  unsigned int i;
-  const char *tokstart;
-  const char *tokptr;
-  int tempbufindex;
-  static char *tempbuf;
-  static int tempbufsize;
-  
- retry:
-
-  prev_lexptr = lexptr;
-
-  tokstart = lexptr;
-  /* See if it is a special token of length 3.  */
-  for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
-    if (strncmp (tokstart, tokentab3[i].oper, 3) == 0)
-      {
-	lexptr += 3;
-	yylval.opcode = tokentab3[i].opcode;
-	return tokentab3[i].token;
-      }
-
-  /* See if it is a special token of length 2.  */
-  for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
-    if (strncmp (tokstart, tokentab2[i].oper, 2) == 0)
-      {
-	lexptr += 2;
-	yylval.opcode = tokentab2[i].opcode;
-	return tokentab2[i].token;
-      }
-
-  switch (c = *tokstart)
-    {
-    case 0:
-      return 0;
-
-    case ' ':
-    case '\t':
-    case '\n':
-      lexptr++;
-      goto retry;
-
-    case '\'':
-      /* We either have a character constant ('0' or '\177' for example)
-	 or we have a quoted symbol reference ('foo(int,int)' in C++
-	 for example).  */
-      lexptr++;
-      c = *lexptr++;
-      if (c == '\\')
-	c = parse_escape (parse_gdbarch (pstate), &lexptr);
-      else if (c == '\'')
-	error (_("Empty character constant"));
-
-      yylval.typed_val_int.val = c;
-      yylval.typed_val_int.type = parse_java_type (pstate)->builtin_char;
-
-      c = *lexptr++;
-      if (c != '\'')
-	{
-	  namelen = skip_quoted (tokstart) - tokstart;
-	  if (namelen > 2)
-	    {
-	      lexptr = tokstart + namelen;
-	      if (lexptr[-1] != '\'')
-		error (_("Unmatched single quote"));
-	      namelen -= 2;
-	      tokstart++;
-	      goto tryname;
-	    }
-	  error (_("Invalid character constant"));
-	}
-      return INTEGER_LITERAL;
-
-    case '(':
-      paren_depth++;
-      lexptr++;
-      return c;
-
-    case ')':
-      if (paren_depth == 0)
-	return 0;
-      paren_depth--;
-      lexptr++;
-      return c;
-
-    case ',':
-      if (comma_terminates && paren_depth == 0)
-	return 0;
-      lexptr++;
-      return c;
-
-    case '.':
-      /* Might be a floating point number.  */
-      if (lexptr[1] < '0' || lexptr[1] > '9')
-	goto symbol;		/* Nope, must be a symbol.  */
-      /* FALL THRU into number case.  */
-
-    case '0':
-    case '1':
-    case '2':
-    case '3':
-    case '4':
-    case '5':
-    case '6':
-    case '7':
-    case '8':
-    case '9':
-      {
-	/* It's a number.  */
-	int got_dot = 0, got_e = 0, toktype;
-	const char *p = tokstart;
-	int hex = input_radix > 10;
-
-	if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
-	  {
-	    p += 2;
-	    hex = 1;
-	  }
-	else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
-	  {
-	    p += 2;
-	    hex = 0;
-	  }
-
-	for (;; ++p)
-	  {
-	    /* This test includes !hex because 'e' is a valid hex digit
-	       and thus does not indicate a floating point number when
-	       the radix is hex.  */
-	    if (!hex && !got_e && (*p == 'e' || *p == 'E'))
-	      got_dot = got_e = 1;
-	    /* This test does not include !hex, because a '.' always indicates
-	       a decimal floating point number regardless of the radix.  */
-	    else if (!got_dot && *p == '.')
-	      got_dot = 1;
-	    else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
-		     && (*p == '-' || *p == '+'))
-	      /* This is the sign of the exponent, not the end of the
-		 number.  */
-	      continue;
-	    /* We will take any letters or digits.  parse_number will
-	       complain if past the radix, or if L or U are not final.  */
-	    else if ((*p < '0' || *p > '9')
-		     && ((*p < 'a' || *p > 'z')
-				  && (*p < 'A' || *p > 'Z')))
-	      break;
-	  }
-	toktype = parse_number (pstate, tokstart, p - tokstart,
-				got_dot|got_e, &yylval);
-        if (toktype == ERROR)
-	  {
-	    char *err_copy = (char *) alloca (p - tokstart + 1);
-
-	    memcpy (err_copy, tokstart, p - tokstart);
-	    err_copy[p - tokstart] = 0;
-	    error (_("Invalid number \"%s\""), err_copy);
-	  }
-	lexptr = p;
-	return toktype;
-      }
-
-    case '+':
-    case '-':
-    case '*':
-    case '/':
-    case '%':
-    case '|':
-    case '&':
-    case '^':
-    case '~':
-    case '!':
-    case '<':
-    case '>':
-    case '[':
-    case ']':
-    case '?':
-    case ':':
-    case '=':
-    case '{':
-    case '}':
-    symbol:
-      lexptr++;
-      return c;
-
-    case '"':
-
-      /* Build the gdb internal form of the input string in tempbuf,
-	 translating any standard C escape forms seen.  Note that the
-	 buffer is null byte terminated *only* for the convenience of
-	 debugging gdb itself and printing the buffer contents when
-	 the buffer contains no embedded nulls.  Gdb does not depend
-	 upon the buffer being null byte terminated, it uses the length
-	 string instead.  This allows gdb to handle C strings (as well
-	 as strings in other languages) with embedded null bytes */
-
-      tokptr = ++tokstart;
-      tempbufindex = 0;
-
-      do {
-	/* Grow the static temp buffer if necessary, including allocating
-	   the first one on demand.  */
-	if (tempbufindex + 1 >= tempbufsize)
-	  {
-	    tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
-	  }
-	switch (*tokptr)
-	  {
-	  case '\0':
-	  case '"':
-	    /* Do nothing, loop will terminate.  */
-	    break;
-	  case '\\':
-	    tokptr++;
-	    c = parse_escape (parse_gdbarch (pstate), &tokptr);
-	    if (c == -1)
-	      {
-		continue;
-	      }
-	    tempbuf[tempbufindex++] = c;
-	    break;
-	  default:
-	    tempbuf[tempbufindex++] = *tokptr++;
-	    break;
-	  }
-      } while ((*tokptr != '"') && (*tokptr != '\0'));
-      if (*tokptr++ != '"')
-	{
-	  error (_("Unterminated string in expression"));
-	}
-      tempbuf[tempbufindex] = '\0';	/* See note above */
-      yylval.sval.ptr = tempbuf;
-      yylval.sval.length = tempbufindex;
-      lexptr = tokptr;
-      return (STRING_LITERAL);
-    }
-
-  if (!(c == '_' || c == '$'
-	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
-    /* We must have come across a bad character (e.g. ';').  */
-    error (_("Invalid character '%c' in expression"), c);
-
-  /* It's a name.  See how long it is.  */
-  namelen = 0;
-  for (c = tokstart[namelen];
-       (c == '_'
-	|| c == '$'
-	|| (c >= '0' && c <= '9')
-	|| (c >= 'a' && c <= 'z')
-	|| (c >= 'A' && c <= 'Z')
-	|| c == '<');
-       )
-    {
-      if (c == '<')
-	{
-	  int i = namelen;
-	  while (tokstart[++i] && tokstart[i] != '>');
-	  if (tokstart[i] == '>')
-	    namelen = i;
-	}
-       c = tokstart[++namelen];
-     }
-
-  /* The token "if" terminates the expression and is NOT 
-     removed from the input stream.  */
-  if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
-    {
-      return 0;
-    }
-
-  lexptr += namelen;
-
-  tryname:
-
-  /* Catch specific keywords.  Should be done with a data structure.  */
-  switch (namelen)
-    {
-    case 7:
-      if (strncmp (tokstart, "boolean", 7) == 0)
-	return BOOLEAN;
-      break;
-    case 6:
-      if (strncmp (tokstart, "double", 6) == 0)      
-	return DOUBLE;
-      break;
-    case 5:
-      if (strncmp (tokstart, "short", 5) == 0)
-	return SHORT;
-      if (strncmp (tokstart, "false", 5) == 0)
-	{
-	  yylval.lval = 0;
-	  return BOOLEAN_LITERAL;
-	}
-      if (strncmp (tokstart, "super", 5) == 0)
-	return SUPER;
-      if (strncmp (tokstart, "float", 5) == 0)
-	return FLOAT;
-      break;
-    case 4:
-      if (strncmp (tokstart, "long", 4) == 0)
-	return LONG;
-      if (strncmp (tokstart, "byte", 4) == 0)
-	return BYTE;
-      if (strncmp (tokstart, "char", 4) == 0)
-	return CHAR;
-      if (strncmp (tokstart, "true", 4) == 0)
-	{
-	  yylval.lval = 1;
-	  return BOOLEAN_LITERAL;
-	}
-      break;
-    case 3:
-      if (strncmp (tokstart, "int", 3) == 0)
-	return INT;
-      if (strncmp (tokstart, "new", 3) == 0)
-	return NEW;
-      break;
-    default:
-      break;
-    }
-
-  yylval.sval.ptr = tokstart;
-  yylval.sval.length = namelen;
-
-  if (*tokstart == '$')
-    {
-      write_dollar_variable (pstate, yylval.sval);
-      return VARIABLE;
-    }
-
-  /* Input names that aren't symbols but ARE valid hex numbers,
-     when the input radix permits them, can be names or numbers
-     depending on the parse.  Note we support radixes > 16 here.  */
-  if (((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
-       (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
-    {
-      YYSTYPE newlval;	/* Its value is ignored.  */
-      int hextype = parse_number (pstate, tokstart, namelen, 0, &newlval);
-      if (hextype == INTEGER_LITERAL)
-	return NAME_OR_INT;
-    }
-  return IDENTIFIER;
-}
-
-int
-java_parse (struct parser_state *par_state)
-{
-  int result;
-  struct cleanup *c = make_cleanup_clear_parser_state (&pstate);
-
-  /* Setting up the parser state.  */
-  gdb_assert (par_state != NULL);
-  pstate = par_state;
-
-  result = yyparse ();
-  do_cleanups (c);
-
-  return result;
-}
-
-void
-yyerror (char *msg)
-{
-  if (prev_lexptr)
-    lexptr = prev_lexptr;
-
-  if (msg)
-    error (_("%s: near `%s'"), msg, lexptr);
-  else
-    error (_("error in expression, near `%s'"), lexptr);
-}
-
-static struct type *
-java_type_from_name (struct stoken name)
-{
-  char *tmp = copy_name (name);
-  struct type *typ = java_lookup_class (tmp);
-  if (typ == NULL || TYPE_CODE (typ) != TYPE_CODE_STRUCT)
-    error (_("No class named `%s'"), tmp);
-  return typ;
-}
-
-/* If NAME is a valid variable name in this scope, push it and return 1.
-   Otherwise, return 0.  */
-
-static int
-push_variable (struct parser_state *par_state, struct stoken name)
-{
-  char *tmp = copy_name (name);
-  struct field_of_this_result is_a_field_of_this;
-  struct block_symbol sym;
-
-  sym = lookup_symbol (tmp, expression_context_block, VAR_DOMAIN,
-		       &is_a_field_of_this);
-  if (sym.symbol && SYMBOL_CLASS (sym.symbol) != LOC_TYPEDEF)
-    {
-      if (symbol_read_needs_frame (sym.symbol))
-	{
-	  if (innermost_block == 0 ||
-	      contained_in (sym.block, innermost_block))
-	    innermost_block = sym.block;
-	}
-
-      write_exp_elt_opcode (par_state, OP_VAR_VALUE);
-      write_exp_elt_block (par_state, sym.block);
-      write_exp_elt_sym (par_state, sym.symbol);
-      write_exp_elt_opcode (par_state, OP_VAR_VALUE);
-      return 1;
-    }
-  if (is_a_field_of_this.type != NULL)
-    {
-      /* it hangs off of `this'.  Must not inadvertently convert from a
-	 method call to data ref.  */
-      if (innermost_block == 0 || 
-	  contained_in (sym.block, innermost_block))
-	innermost_block = sym.block;
-      write_exp_elt_opcode (par_state, OP_THIS);
-      write_exp_elt_opcode (par_state, OP_THIS);
-      write_exp_elt_opcode (par_state, STRUCTOP_PTR);
-      write_exp_string (par_state, name);
-      write_exp_elt_opcode (par_state, STRUCTOP_PTR);
-      return 1;
-    }
-  return 0;
-}
-
-/* Assuming a reference expression has been pushed, emit the
-   STRUCTOP_PTR ops to access the field named NAME.  If NAME is a
-   qualified name (has '.'), generate a field access for each part.  */
-
-static void
-push_fieldnames (struct parser_state *par_state, struct stoken name)
-{
-  int i;
-  struct stoken token;
-  token.ptr = name.ptr;
-  for (i = 0;  ;  i++)
-    {
-      if (i == name.length || name.ptr[i] == '.')
-	{
-	  /* token.ptr is start of current field name.  */
-	  token.length = &name.ptr[i] - token.ptr;
-	  write_exp_elt_opcode (par_state, STRUCTOP_PTR);
-	  write_exp_string (par_state, token);
-	  write_exp_elt_opcode (par_state, STRUCTOP_PTR);
-	  token.ptr += token.length + 1;
-	}
-      if (i >= name.length)
-	break;
-    }
-}
-
-/* Helper routine for push_expression_name.
-   Handle a qualified name, where DOT_INDEX is the index of the first '.' */
-
-static void
-push_qualified_expression_name (struct parser_state *par_state,
-				struct stoken name, int dot_index)
-{
-  struct stoken token;
-  char *tmp;
-  struct type *typ;
-
-  token.ptr = name.ptr;
-  token.length = dot_index;
-
-  if (push_variable (par_state, token))
-    {
-      token.ptr = name.ptr + dot_index + 1;
-      token.length = name.length - dot_index - 1;
-      push_fieldnames (par_state, token);
-      return;
-    }
-
-  token.ptr = name.ptr;
-  for (;;)
-    {
-      token.length = dot_index;
-      tmp = copy_name (token);
-      typ = java_lookup_class (tmp);
-      if (typ != NULL)
-	{
-	  if (dot_index == name.length)
-	    {
-	      write_exp_elt_opcode (par_state, OP_TYPE);
-	      write_exp_elt_type (par_state, typ);
-	      write_exp_elt_opcode (par_state, OP_TYPE);
-	      return;
-	    }
-	  dot_index++;  /* Skip '.' */
-	  name.ptr += dot_index;
-	  name.length -= dot_index;
-	  dot_index = 0;
-	  while (dot_index < name.length && name.ptr[dot_index] != '.') 
-	    dot_index++;
-	  token.ptr = name.ptr;
-	  token.length = dot_index;
-	  write_exp_elt_opcode (par_state, OP_SCOPE);
-	  write_exp_elt_type (par_state, typ);
-	  write_exp_string (par_state, token);
-	  write_exp_elt_opcode (par_state, OP_SCOPE); 
-	  if (dot_index < name.length)
-	    {
-	      dot_index++;
-	      name.ptr += dot_index;
-	      name.length -= dot_index;
-	      push_fieldnames (par_state, name);
-	    }
-	  return;
-	}
-      else if (dot_index >= name.length)
-	break;
-      dot_index++;  /* Skip '.' */
-      while (dot_index < name.length && name.ptr[dot_index] != '.')
-	dot_index++;
-    }
-  error (_("unknown type `%.*s'"), name.length, name.ptr);
-}
-
-/* Handle Name in an expression (or LHS).
-   Handle VAR, TYPE, TYPE.FIELD1....FIELDN and VAR.FIELD1....FIELDN.  */
-
-static void
-push_expression_name (struct parser_state *par_state, struct stoken name)
-{
-  char *tmp;
-  struct type *typ;
-  int i;
-
-  for (i = 0;  i < name.length;  i++)
-    {
-      if (name.ptr[i] == '.')
-	{
-	  /* It's a Qualified Expression Name.  */
-	  push_qualified_expression_name (par_state, name, i);
-	  return;
-	}
-    }
-
-  /* It's a Simple Expression Name.  */
-  
-  if (push_variable (par_state, name))
-    return;
-  tmp = copy_name (name);
-  typ = java_lookup_class (tmp);
-  if (typ != NULL)
-    {
-      write_exp_elt_opcode (par_state, OP_TYPE);
-      write_exp_elt_type (par_state, typ);
-      write_exp_elt_opcode (par_state, OP_TYPE);
-    }
-  else
-    {
-      struct bound_minimal_symbol msymbol;
-
-      msymbol = lookup_bound_minimal_symbol (tmp);
-      if (msymbol.minsym != NULL)
-	write_exp_msymbol (par_state, msymbol);
-      else if (!have_full_symbols () && !have_partial_symbols ())
-	error (_("No symbol table is loaded.  Use the \"file\" command"));
-      else
-	error (_("No symbol \"%s\" in current context."), tmp);
-    }
-
-}
-
-
-/* The following two routines, copy_exp and insert_exp, aren't specific to
-   Java, so they could go in parse.c, but their only purpose is to support
-   the parsing kludges we use in this file, so maybe it's best to isolate
-   them here.  */
-
-/* Copy the expression whose last element is at index ENDPOS - 1 in EXPR
-   into a freshly malloc'ed struct expression.  Its language_defn is set
-   to null.  */
-static struct expression *
-copy_exp (struct expression *expr, int endpos)
-{
-  int len = length_of_subexp (expr, endpos);
-  struct expression *newobj
-    = (struct expression *) malloc (sizeof (*newobj) + EXP_ELEM_TO_BYTES (len));
-
-  newobj->nelts = len;
-  memcpy (newobj->elts, expr->elts + endpos - len, EXP_ELEM_TO_BYTES (len));
-  newobj->language_defn = 0;
-
-  return newobj;
-}
-
-/* Insert the expression NEW into the current expression (expout) at POS.  */
-static void
-insert_exp (struct parser_state *par_state, int pos, struct expression *newobj)
-{
-  int newlen = newobj->nelts;
-  int i;
-
-  /* Grow expout if necessary.  In this function's only use at present,
-     this should never be necessary.  */
-  increase_expout_size (par_state, newlen);
-
-  for (i = par_state->expout_ptr - 1; i >= pos; i--)
-    par_state->expout->elts[i + newlen] = par_state->expout->elts[i];
-  
-  memcpy (par_state->expout->elts + pos, newobj->elts,
-	  EXP_ELEM_TO_BYTES (newlen));
-  par_state->expout_ptr += newlen;
-}
diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c
deleted file mode 100644
index 6bf72b9..0000000
--- a/gdb/jv-lang.c
+++ /dev/null
@@ -1,1272 +0,0 @@
-/* Java language support routines for GDB, the GNU debugger.
-
-   Copyright (C) 1997-2016 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include "defs.h"
-#include "symtab.h"
-#include "gdbtypes.h"
-#include "expression.h"
-#include "parser-defs.h"
-#include "language.h"
-#include "symfile.h"
-#include "objfiles.h"
-#include "value.h"
-#include "c-lang.h"
-#include "jv-lang.h"
-#include "varobj.h"
-#include "gdbcore.h"
-#include "block.h"
-#include "demangle.h"
-#include "dictionary.h"
-#include <ctype.h>
-#include "charset.h"
-#include "valprint.h"
-#include "cp-support.h"
-
-/* Local functions */
-
-extern void _initialize_java_language (void);
-
-static int java_demangled_signature_length (const char *);
-static void java_demangled_signature_copy (char *, const char *);
-
-static struct compunit_symtab *get_java_class_symtab (struct gdbarch *gdbarch);
-static char *get_java_utf8_name (struct obstack *obstack, struct value *name);
-static int java_class_is_primitive (struct value *clas);
-static struct value *java_value_string (char *ptr, int len);
-
-static void java_emit_char (int c, struct type *type,
-			    struct ui_file * stream, int quoter);
-
-static char *java_class_name_from_physname (const char *physname);
-
-static const struct objfile_data *jv_dynamics_objfile_data_key;
-
-/* The dynamic objfile is kept per-program-space.  This key lets us
-   associate the objfile with the program space.  */
-
-static const struct program_space_data *jv_dynamics_progspace_key;
-
-static struct type *java_link_class_type (struct gdbarch *,
-					  struct type *, struct value *);
-
-/* An instance of this structure is used to store some data that must
-   be freed.  */
-
-struct jv_per_objfile_data
-{
-  /* The expandable dictionary we use.  */
-  struct dictionary *dict;
-};
-
-/* A function called when the dynamics_objfile is freed.  We use this
-   to clean up some internal state.  */
-static void
-jv_per_objfile_free (struct objfile *objfile, void *data)
-{
-  struct jv_per_objfile_data *jv_data = (struct jv_per_objfile_data *) data;
-  struct objfile *dynamics_objfile;
-
-  dynamics_objfile
-    = (struct objfile *) program_space_data (current_program_space,
-					     jv_dynamics_progspace_key);
-  gdb_assert (objfile == dynamics_objfile);
-
-  if (jv_data->dict)
-    dict_free (jv_data->dict);
-  xfree (jv_data);
-
-  set_program_space_data (current_program_space,
-			  jv_dynamics_progspace_key,
-			  NULL);
-}
-
-/* FIXME: carlton/2003-02-04: This is the main or only caller of
-   allocate_objfile with first argument NULL; as a result, this code
-   breaks every so often.  Somebody should write a test case that
-   exercises GDB in various ways (e.g. something involving loading a
-   dynamic library) after this code has been called.  */
-
-static struct objfile *
-get_dynamics_objfile (struct gdbarch *gdbarch)
-{
-  struct objfile *dynamics_objfile;
-
-  dynamics_objfile
-    = (struct objfile *) program_space_data (current_program_space,
-					     jv_dynamics_progspace_key);
-
-  if (dynamics_objfile == NULL)
-    {
-      struct jv_per_objfile_data *data;
-
-      /* Mark it as shared so that it is cleared when the inferior is
-	 re-run.  */
-      dynamics_objfile = allocate_objfile (NULL, NULL,
-					   OBJF_SHARED | OBJF_NOT_FILENAME);
-      dynamics_objfile->per_bfd->gdbarch = gdbarch;
-
-      data = XCNEW (struct jv_per_objfile_data);
-      set_objfile_data (dynamics_objfile, jv_dynamics_objfile_data_key, data);
-
-      set_program_space_data (current_program_space,
-			      jv_dynamics_progspace_key,
-			      dynamics_objfile);
-    }
-  return dynamics_objfile;
-}
-
-static struct compunit_symtab *
-get_java_class_symtab (struct gdbarch *gdbarch)
-{
-  struct objfile *objfile = get_dynamics_objfile (gdbarch);
-  struct compunit_symtab *class_symtab = objfile->compunit_symtabs;
-
-  if (class_symtab == NULL)
-    {
-      struct blockvector *bv;
-      struct block *bl;
-      struct jv_per_objfile_data *jv_data;
-
-      class_symtab = allocate_compunit_symtab (objfile, "<java-classes>");
-      add_compunit_symtab_to_objfile (class_symtab);
-      allocate_symtab (class_symtab, "<java-classes>");
-
-      COMPUNIT_FILETABS (class_symtab)->language = language_java;
-      bv = (struct blockvector *)
-	obstack_alloc (&objfile->objfile_obstack,
-		       sizeof (struct blockvector) + sizeof (struct block *));
-      BLOCKVECTOR_NBLOCKS (bv) = 1;
-      COMPUNIT_BLOCKVECTOR (class_symtab) = bv;
-
-      /* Allocate dummy STATIC_BLOCK.  */
-      bl = allocate_block (&objfile->objfile_obstack);
-      BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
-					    NULL);
-      BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = bl;
-
-      /* Allocate GLOBAL_BLOCK.  */
-      bl = allocate_global_block (&objfile->objfile_obstack);
-      BLOCK_DICT (bl) = dict_create_hashed_expandable ();
-      set_block_compunit_symtab (bl, class_symtab);
-      BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl;
-
-      /* Arrange to free the dict.  */
-      jv_data = ((struct jv_per_objfile_data *)
-		 objfile_data (objfile, jv_dynamics_objfile_data_key));
-      jv_data->dict = BLOCK_DICT (bl);
-    }
-  return class_symtab;
-}
-
-static void
-add_class_symtab_symbol (struct symbol *sym)
-{
-  struct compunit_symtab *cust = get_java_class_symtab (symbol_arch (sym));
-  const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
-
-  dict_add_symbol (BLOCK_DICT (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)), sym);
-}
-
-static struct symbol *
-add_class_symbol (struct type *type, CORE_ADDR addr)
-{
-  struct symbol *sym;
-  struct objfile *objfile = get_dynamics_objfile (get_type_arch (type));
-
-  sym = allocate_symbol (objfile);
-  SYMBOL_SET_LANGUAGE (sym, language_java, &objfile->objfile_obstack);
-  SYMBOL_SET_LINKAGE_NAME (sym, TYPE_TAG_NAME (type));
-  SYMBOL_ACLASS_INDEX (sym) = LOC_TYPEDEF;
-  /*  SYMBOL_VALUE (sym) = valu; */
-  SYMBOL_TYPE (sym) = type;
-  SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
-  SYMBOL_VALUE_ADDRESS (sym) = addr;
-  return sym;
-}
-
-struct type *
-java_lookup_class (char *name)
-{
-  struct symbol *sym;
-
-  sym = lookup_symbol (name, expression_context_block, STRUCT_DOMAIN,
-		       NULL).symbol;
-  if (sym != NULL)
-    return SYMBOL_TYPE (sym);
-  /* FIXME - should search inferior's symbol table.  */
-  return NULL;
-}
-
-/* Return a nul-terminated string (allocated on OBSTACK) for
-   a name given by NAME (which has type Utf8Const*).  */
-
-char *
-get_java_utf8_name (struct obstack *obstack, struct value *name)
-{
-  char *chrs;
-  struct value *temp = name;
-  int name_length;
-  CORE_ADDR data_addr;
-
-  temp = value_struct_elt (&temp, NULL, "length", NULL, "structure");
-  name_length = (int) value_as_long (temp);
-  data_addr = value_address (temp) + TYPE_LENGTH (value_type (temp));
-  chrs = (char *) obstack_alloc (obstack, name_length + 1);
-  chrs[name_length] = '\0';
-  read_memory (data_addr, (gdb_byte *) chrs, name_length);
-  return chrs;
-}
-
-struct value *
-java_class_from_object (struct value *obj_val)
-{
-  /* This is all rather inefficient, since the offsets of vtable and
-     class are fixed.  FIXME */
-  struct value *vtable_val;
-
-  if (TYPE_CODE (value_type (obj_val)) == TYPE_CODE_PTR
-      && TYPE_LENGTH (TYPE_TARGET_TYPE (value_type (obj_val))) == 0)
-    obj_val = value_at (get_java_object_type (),
-			value_as_address (obj_val));
-
-  vtable_val = value_struct_elt (&obj_val, NULL, "vtable", NULL, "structure");
-  return value_struct_elt (&vtable_val, NULL, "class", NULL, "structure");
-}
-
-/* Check if CLASS_IS_PRIMITIVE(value of clas): */
-static int
-java_class_is_primitive (struct value *clas)
-{
-  struct value *vtable = value_struct_elt (&clas, NULL, "vtable",
-					   NULL, "struct");
-  CORE_ADDR i = value_as_address (vtable);
-
-  return (int) (i & 0x7fffffff) == (int) 0x7fffffff;
-}
-
-/* Read a GCJ Class object, and generated a gdb (TYPE_CODE_STRUCT) type.  */
-
-struct type *
-type_from_class (struct gdbarch *gdbarch, struct value *clas)
-{
-  struct type *type;
-  char *name;
-  struct value *temp;
-  struct objfile *objfile;
-  struct value *utf8_name;
-  char *nptr;
-  CORE_ADDR addr;
-
-  type = check_typedef (value_type (clas));
-  if (TYPE_CODE (type) == TYPE_CODE_PTR)
-    {
-      if (value_logical_not (clas))
-	return NULL;
-      clas = value_ind (clas);
-    }
-  addr = value_address (clas);
-
-  objfile = get_dynamics_objfile (gdbarch);
-  if (java_class_is_primitive (clas))
-    {
-      struct value *sig;
-
-      temp = clas;
-      sig = value_struct_elt (&temp, NULL, "method_count", NULL, "structure");
-      return java_primitive_type (gdbarch, value_as_long (sig));
-    }
-
-  /* Get Class name.  */
-  /* If clasloader non-null, prepend loader address.  FIXME */
-  temp = clas;
-  utf8_name = value_struct_elt (&temp, NULL, "name", NULL, "structure");
-  name = get_java_utf8_name (&objfile->objfile_obstack, utf8_name);
-  for (nptr = name; *nptr != 0; nptr++)
-    {
-      if (*nptr == '/')
-	*nptr = '.';
-    }
-
-  type = java_lookup_class (name);
-  if (type != NULL)
-    return type;
-
-  type = alloc_type (objfile);
-  TYPE_CODE (type) = TYPE_CODE_STRUCT;
-  INIT_CPLUS_SPECIFIC (type);
-
-  if (name[0] == '[')
-    {
-      char *signature = name;
-      int namelen = java_demangled_signature_length (signature);
-
-      if (namelen > strlen (name))
-	name = (char *) obstack_alloc (&objfile->objfile_obstack, namelen + 1);
-      java_demangled_signature_copy (name, signature);
-      name[namelen] = '\0';
-      temp = clas;
-      /* Set array element type.  */
-      temp = value_struct_elt (&temp, NULL, "methods", NULL, "structure");
-      deprecated_set_value_type (temp,
-				 lookup_pointer_type (value_type (clas)));
-      TYPE_TARGET_TYPE (type) = type_from_class (gdbarch, temp);
-    }
-
-  ALLOCATE_CPLUS_STRUCT_TYPE (type);
-  TYPE_TAG_NAME (type) = name;
-
-  add_class_symtab_symbol (add_class_symbol (type, addr));
-  return java_link_class_type (gdbarch, type, clas);
-}
-
-/* Fill in class TYPE with data from the CLAS value.  */
-
-static struct type *
-java_link_class_type (struct gdbarch *gdbarch,
-		      struct type *type, struct value *clas)
-{
-  struct value *temp;
-  const char *unqualified_name;
-  const char *name = TYPE_TAG_NAME (type);
-  int ninterfaces, nfields, nmethods;
-  int type_is_object = 0;
-  struct fn_field *fn_fields;
-  struct fn_fieldlist *fn_fieldlists;
-  struct value *fields;
-  struct value *methods;
-  struct value *method = NULL;
-  struct value *field = NULL;
-  int i, j;
-  struct objfile *objfile = get_dynamics_objfile (gdbarch);
-  struct type *tsuper;
-
-  gdb_assert (name != NULL);
-  unqualified_name = strrchr (name, '.');
-  if (unqualified_name == NULL)
-    unqualified_name = name;
-
-  temp = clas;
-  temp = value_struct_elt (&temp, NULL, "superclass", NULL, "structure");
-  if (strcmp (name, "java.lang.Object") == 0)
-    {
-      tsuper = get_java_object_type ();
-      if (tsuper && TYPE_CODE (tsuper) == TYPE_CODE_PTR)
-	tsuper = TYPE_TARGET_TYPE (tsuper);
-      type_is_object = 1;
-    }
-  else
-    tsuper = type_from_class (gdbarch, temp);
-
-#if 1
-  ninterfaces = 0;
-#else
-  temp = clas;
-  ninterfaces = value_as_long (value_struct_elt (&temp, NULL, "interface_len",
-						 NULL, "structure"));
-#endif
-  TYPE_N_BASECLASSES (type) = (tsuper == NULL ? 0 : 1) + ninterfaces;
-  temp = clas;
-  nfields = value_as_long (value_struct_elt (&temp, NULL, "field_count",
-					     NULL, "structure"));
-  nfields += TYPE_N_BASECLASSES (type);
-  nfields++;			/* Add one for dummy "class" field.  */
-  TYPE_NFIELDS (type) = nfields;
-  TYPE_FIELDS (type) = (struct field *)
-    TYPE_ALLOC (type, sizeof (struct field) * nfields);
-
-  memset (TYPE_FIELDS (type), 0, sizeof (struct field) * nfields);
-
-  TYPE_FIELD_PRIVATE_BITS (type) =
-    (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
-  B_CLRALL (TYPE_FIELD_PRIVATE_BITS (type), nfields);
-
-  TYPE_FIELD_PROTECTED_BITS (type) =
-    (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
-  B_CLRALL (TYPE_FIELD_PROTECTED_BITS (type), nfields);
-
-  TYPE_FIELD_IGNORE_BITS (type) =
-    (B_TYPE *) TYPE_ALLOC (type, B_BYTES (nfields));
-  B_CLRALL (TYPE_FIELD_IGNORE_BITS (type), nfields);
-
-  TYPE_FIELD_VIRTUAL_BITS (type) = (B_TYPE *)
-    TYPE_ALLOC (type, B_BYTES (TYPE_N_BASECLASSES (type)));
-  B_CLRALL (TYPE_FIELD_VIRTUAL_BITS (type), TYPE_N_BASECLASSES (type));
-
-  if (tsuper != NULL)
-    {
-      TYPE_BASECLASS (type, 0) = tsuper;
-      if (type_is_object)
-	SET_TYPE_FIELD_PRIVATE (type, 0);
-    }
-
-  i = strlen (name);
-  if (i > 2 && name[i - 1] == ']' && tsuper != NULL)
-    {
-      /* FIXME */
-      TYPE_LENGTH (type) = TYPE_LENGTH (tsuper) + 4;   /* size with "length" */
-    }
-  else
-    {
-      temp = clas;
-      temp = value_struct_elt (&temp, NULL, "size_in_bytes",
-			       NULL, "structure");
-      TYPE_LENGTH (type) = value_as_long (temp);
-    }
-
-  fields = NULL;
-  nfields--;			/* First set up dummy "class" field.  */
-  SET_FIELD_PHYSADDR (TYPE_FIELD (type, nfields), value_address (clas));
-  TYPE_FIELD_NAME (type, nfields) = "class";
-  TYPE_FIELD_TYPE (type, nfields) = value_type (clas);
-  SET_TYPE_FIELD_PRIVATE (type, nfields);
-
-  for (i = TYPE_N_BASECLASSES (type); i < nfields; i++)
-    {
-      int accflags;
-      int boffset;
-
-      if (fields == NULL)
-	{
-	  temp = clas;
-	  fields = value_struct_elt (&temp, NULL, "fields", NULL, "structure");
-	  field = value_ind (fields);
-	}
-      else
-	{			/* Re-use field value for next field.  */
-	  CORE_ADDR addr
-	    = value_address (field) + TYPE_LENGTH (value_type (field));
-
-	  set_value_address (field, addr);
-	  set_value_lazy (field, 1);
-	}
-      temp = field;
-      temp = value_struct_elt (&temp, NULL, "name", NULL, "structure");
-      TYPE_FIELD_NAME (type, i) =
-	get_java_utf8_name (&objfile->objfile_obstack, temp);
-      temp = field;
-      accflags = value_as_long (value_struct_elt (&temp, NULL, "accflags",
-						  NULL, "structure"));
-      temp = field;
-      temp = value_struct_elt (&temp, NULL, "info", NULL, "structure");
-      boffset = value_as_long (value_struct_elt (&temp, NULL, "boffset",
-						 NULL, "structure"));
-      if (accflags & 0x0001)	/* public access */
-	{
-	  /* ??? */
-	}
-      if (accflags & 0x0002)	/* private access */
-	{
-	  SET_TYPE_FIELD_PRIVATE (type, i);
-	}
-      if (accflags & 0x0004)	/* protected access */
-	{
-	  SET_TYPE_FIELD_PROTECTED (type, i);
-	}
-      if (accflags & 0x0008)	/* ACC_STATIC */
-	SET_FIELD_PHYSADDR (TYPE_FIELD (type, i), boffset);
-      else
-	SET_FIELD_BITPOS (TYPE_FIELD (type, i), 8 * boffset);
-      if (accflags & 0x8000)	/* FIELD_UNRESOLVED_FLAG */
-	{
-	  TYPE_FIELD_TYPE (type, i) = get_java_object_type ();	/* FIXME */
-	}
-      else
-	{
-	  struct type *ftype;
-
-	  temp = field;
-	  temp = value_struct_elt (&temp, NULL, "type", NULL, "structure");
-	  ftype = type_from_class (gdbarch, temp);
-	  if (TYPE_CODE (ftype) == TYPE_CODE_STRUCT)
-	    ftype = lookup_pointer_type (ftype);
-	  TYPE_FIELD_TYPE (type, i) = ftype;
-	}
-    }
-
-  temp = clas;
-  nmethods = value_as_long (value_struct_elt (&temp, NULL, "method_count",
-					      NULL, "structure"));
-  j = nmethods * sizeof (struct fn_field);
-  fn_fields = (struct fn_field *)
-    obstack_alloc (&objfile->objfile_obstack, j);
-  memset (fn_fields, 0, j);
-  fn_fieldlists = (struct fn_fieldlist *)
-    alloca (nmethods * sizeof (struct fn_fieldlist));
-
-  methods = NULL;
-  for (i = 0; i < nmethods; i++)
-    {
-      const char *mname;
-      int k;
-
-      if (methods == NULL)
-	{
-	  temp = clas;
-	  methods = value_struct_elt (&temp, NULL, "methods",
-				      NULL, "structure");
-	  method = value_ind (methods);
-	}
-      else
-	{			/* Re-use method value for next method.  */
-	  CORE_ADDR addr
-	    = value_address (method) + TYPE_LENGTH (value_type (method));
-
-	  set_value_address (method, addr);
-	  set_value_lazy (method, 1);
-	}
-
-      /* Get method name.  */
-      temp = method;
-      temp = value_struct_elt (&temp, NULL, "name", NULL, "structure");
-      mname = get_java_utf8_name (&objfile->objfile_obstack, temp);
-      if (strcmp (mname, "<init>") == 0)
-	mname = unqualified_name;
-
-      /* Check for an existing method with the same name.
-       * This makes building the fn_fieldslists an O(nmethods**2)
-       * operation.  That could be using hashing, but I doubt it
-       * is worth it.  Note that we do maintain the order of methods
-       * in the inferior's Method table (as long as that is grouped
-       * by method name), which I think is desirable.  --PB */
-      for (k = 0, j = TYPE_NFN_FIELDS (type);;)
-	{
-	  if (--j < 0)
-	    {			/* No match - new method name.  */
-	      j = TYPE_NFN_FIELDS (type)++;
-	      fn_fieldlists[j].name = mname;
-	      fn_fieldlists[j].length = 1;
-	      fn_fieldlists[j].fn_fields = &fn_fields[i];
-	      k = i;
-	      break;
-	    }
-	  if (strcmp (mname, fn_fieldlists[j].name) == 0)
-	    {		/* Found an existing method with the same name.  */
-	      int l;
-
-	      if (mname != unqualified_name)
-		obstack_free (&objfile->objfile_obstack, mname);
-	      mname = fn_fieldlists[j].name;
-	      fn_fieldlists[j].length++;
-	      k = i - k;	/* Index of new slot.  */
-	      /* Shift intervening fn_fields (between k and i) down.  */
-	      for (l = i; l > k; l--)
-		fn_fields[l] = fn_fields[l - 1];
-	      for (l = TYPE_NFN_FIELDS (type); --l > j;)
-		fn_fieldlists[l].fn_fields++;
-	      break;
-	    }
-	  k += fn_fieldlists[j].length;
-	}
-      fn_fields[k].physname = "";
-      fn_fields[k].is_stub = 1;
-      /* FIXME */
-      fn_fields[k].type = lookup_function_type
-			   (builtin_java_type (gdbarch)->builtin_void);
-      TYPE_CODE (fn_fields[k].type) = TYPE_CODE_METHOD;
-    }
-
-  j = TYPE_NFN_FIELDS (type) * sizeof (struct fn_fieldlist);
-  TYPE_FN_FIELDLISTS (type) = (struct fn_fieldlist *)
-    obstack_alloc (&objfile->objfile_obstack, j);
-  memcpy (TYPE_FN_FIELDLISTS (type), fn_fieldlists, j);
-
-  return type;
-}
-
-struct type *
-get_java_object_type (void)
-{
-  struct symbol *sym;
-
-  sym = lookup_symbol ("java.lang.Object", NULL, STRUCT_DOMAIN, NULL).symbol;
-  if (sym == NULL)
-    error (_("cannot find java.lang.Object"));
-  return SYMBOL_TYPE (sym);
-}
-
-int
-get_java_object_header_size (struct gdbarch *gdbarch)
-{
-  struct type *objtype = get_java_object_type ();
-
-  if (objtype == NULL)
-    return (2 * gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT);
-  else
-    return TYPE_LENGTH (objtype);
-}
-
-int
-is_object_type (struct type *type)
-{
-  type = check_typedef (type);
-  if (TYPE_CODE (type) == TYPE_CODE_PTR)
-    {
-      struct type *ttype = check_typedef (TYPE_TARGET_TYPE (type));
-      const char *name;
-      if (TYPE_CODE (ttype) != TYPE_CODE_STRUCT)
-	return 0;
-      while (TYPE_N_BASECLASSES (ttype) > 0)
-	ttype = TYPE_BASECLASS (ttype, 0);
-      name = TYPE_TAG_NAME (ttype);
-      if (name != NULL && strcmp (name, "java.lang.Object") == 0)
-	return 1;
-      name
-	= TYPE_NFIELDS (ttype) > 0 ? TYPE_FIELD_NAME (ttype, 0) : (char *) 0;
-      if (name != NULL && strcmp (name, "vtable") == 0)
-	return 1;
-    }
-  return 0;
-}
-
-struct type *
-java_primitive_type (struct gdbarch *gdbarch, int signature)
-{
-  const struct builtin_java_type *builtin = builtin_java_type (gdbarch);
-
-  switch (signature)
-    {
-    case 'B':
-      return builtin->builtin_byte;
-    case 'S':
-      return builtin->builtin_short;
-    case 'I':
-      return builtin->builtin_int;
-    case 'J':
-      return builtin->builtin_long;
-    case 'Z':
-      return builtin->builtin_boolean;
-    case 'C':
-      return builtin->builtin_char;
-    case 'F':
-      return builtin->builtin_float;
-    case 'D':
-      return builtin->builtin_double;
-    case 'V':
-      return builtin->builtin_void;
-    }
-  error (_("unknown signature '%c' for primitive type"), (char) signature);
-}
-
-/* If name[0 .. namelen-1] is the name of a primitive Java type,
-   return that type.  Otherwise, return NULL.  */
-
-struct type *
-java_primitive_type_from_name (struct gdbarch *gdbarch,
-			       const char *name, int namelen)
-{
-  const struct builtin_java_type *builtin = builtin_java_type (gdbarch);
-
-  switch (name[0])
-    {
-    case 'b':
-      if (namelen == 4 && memcmp (name, "byte", 4) == 0)
-	return builtin->builtin_byte;
-      if (namelen == 7 && memcmp (name, "boolean", 7) == 0)
-	return builtin->builtin_boolean;
-      break;
-    case 'c':
-      if (namelen == 4 && memcmp (name, "char", 4) == 0)
-	return builtin->builtin_char;
-      break;
-    case 'd':
-      if (namelen == 6 && memcmp (name, "double", 6) == 0)
-	return builtin->builtin_double;
-      break;
-    case 'f':
-      if (namelen == 5 && memcmp (name, "float", 5) == 0)
-	return builtin->builtin_float;
-      break;
-    case 'i':
-      if (namelen == 3 && memcmp (name, "int", 3) == 0)
-	return builtin->builtin_int;
-      break;
-    case 'l':
-      if (namelen == 4 && memcmp (name, "long", 4) == 0)
-	return builtin->builtin_long;
-      break;
-    case 's':
-      if (namelen == 5 && memcmp (name, "short", 5) == 0)
-	return builtin->builtin_short;
-      break;
-    case 'v':
-      if (namelen == 4 && memcmp (name, "void", 4) == 0)
-	return builtin->builtin_void;
-      break;
-    }
-  return NULL;
-}
-
-static char *
-java_primitive_type_name (int signature)
-{
-  switch (signature)
-    {
-    case 'B':
-      return "byte";
-    case 'S':
-      return "short";
-    case 'I':
-      return "int";
-    case 'J':
-      return "long";
-    case 'Z':
-      return "boolean";
-    case 'C':
-      return "char";
-    case 'F':
-      return "float";
-    case 'D':
-      return "double";
-    case 'V':
-      return "void";
-    }
-  error (_("unknown signature '%c' for primitive type"), (char) signature);
-}
-
-/* Return the length (in bytes) of demangled name of the Java type
-   signature string SIGNATURE.  */
-
-static int
-java_demangled_signature_length (const char *signature)
-{
-  int array = 0;
-
-  for (; *signature == '['; signature++)
-    array += 2;			/* Two chars for "[]".  */
-  switch (signature[0])
-    {
-    case 'L':
-      /* Subtract 2 for 'L' and ';'.  */
-      return strlen (signature) - 2 + array;
-    default:
-      return strlen (java_primitive_type_name (signature[0])) + array;
-    }
-}
-
-/* Demangle the Java type signature SIGNATURE, leaving the result in
-   RESULT.  */
-
-static void
-java_demangled_signature_copy (char *result, const char *signature)
-{
-  int array = 0;
-  char *ptr;
-  int i;
-
-  while (*signature == '[')
-    {
-      array++;
-      signature++;
-    }
-  switch (signature[0])
-    {
-    case 'L':
-      /* Subtract 2 for 'L' and ';', but add 1 for final nul.  */
-      signature++;
-      ptr = result;
-      for (; *signature != ';' && *signature != '\0'; signature++)
-	{
-	  if (*signature == '/')
-	    *ptr++ = '.';
-	  else
-	    *ptr++ = *signature;
-	}
-      break;
-    default:
-      ptr = java_primitive_type_name (signature[0]);
-      i = strlen (ptr);
-      strcpy (result, ptr);
-      ptr = result + i;
-      break;
-    }
-  while (--array >= 0)
-    {
-      *ptr++ = '[';
-      *ptr++ = ']';
-    }
-}
-
-/* Return the demangled name of the Java type signature string SIGNATURE,
-   as a freshly allocated copy.  */
-
-char *
-java_demangle_type_signature (const char *signature)
-{
-  int length = java_demangled_signature_length (signature);
-  char *result = (char *) xmalloc (length + 1);
-
-  java_demangled_signature_copy (result, signature);
-  result[length] = '\0';
-  return result;
-}
-
-/* Return the type of TYPE followed by DIMS pairs of [ ].
-   If DIMS == 0, TYPE is returned.  */
-
-struct type *
-java_array_type (struct type *type, int dims)
-{
-  while (dims-- > 0)
-    {
-      /* FIXME  This is bogus!  Java arrays are not gdb arrays!  */
-      type = lookup_array_range_type (type, 0, 0);
-    }
-
-  return type;
-}
-
-/* Create a Java string in the inferior from a (Utf8) literal.  */
-
-static struct value *
-java_value_string (char *ptr, int len)
-{
-  error (_("not implemented - java_value_string"));	/* FIXME */
-}
-
-/* Return the encoding that should be used for the character type
-   TYPE.  */
-
-static const char *
-java_get_encoding (struct type *type)
-{
-  struct gdbarch *arch = get_type_arch (type);
-  const char *encoding;
-
-  if (type == builtin_java_type (arch)->builtin_char)
-    {
-      if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
-	encoding = "UTF-16BE";
-      else
-	encoding = "UTF-16LE";
-    }
-  else
-    encoding = target_charset (arch);
-
-  return encoding;
-}
-
-/* Print the character C on STREAM as part of the contents of a literal
-   string whose delimiter is QUOTER.  Note that that format for printing
-   characters and strings is language specific.  */
-
-static void
-java_emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
-{
-  const char *encoding = java_get_encoding (type);
-
-  generic_emit_char (c, type, stream, quoter, encoding);
-}
-
-/* Implementation of la_printchar method.  */
-
-static void
-java_printchar (int c, struct type *type, struct ui_file *stream)
-{
-  fputs_filtered ("'", stream);
-  LA_EMIT_CHAR (c, type, stream, '\'');
-  fputs_filtered ("'", stream);
-}
-
-/* Implementation of la_printstr method.  */
-
-static void
-java_printstr (struct ui_file *stream, struct type *type,
-	       const gdb_byte *string,
-	       unsigned int length, const char *encoding, int force_ellipses,
-	       const struct value_print_options *options)
-{
-  const char *type_encoding = java_get_encoding (type);
-
-  if (!encoding || !*encoding)
-    encoding = type_encoding;
-
-  generic_printstr (stream, type, string, length, encoding,
-		    force_ellipses, '"', 0, options);
-}
-
-static struct value *
-evaluate_subexp_java (struct type *expect_type, struct expression *exp,
-		      int *pos, enum noside noside)
-{
-  int pc = *pos;
-  int i;
-  const char *name;
-  enum exp_opcode op = exp->elts[*pos].opcode;
-  struct value *arg1;
-  struct value *arg2;
-  struct type *type;
-
-  switch (op)
-    {
-    case UNOP_IND:
-      if (noside == EVAL_SKIP)
-	goto standard;
-      (*pos)++;
-      arg1 = evaluate_subexp_java (NULL_TYPE, exp, pos, EVAL_NORMAL);
-      if (is_object_type (value_type (arg1)))
-	{
-	  struct type *type;
-
-	  type = type_from_class (exp->gdbarch, java_class_from_object (arg1));
-	  arg1 = value_cast (lookup_pointer_type (type), arg1);
-	}
-      return value_ind (arg1);
-
-    case BINOP_SUBSCRIPT:
-      (*pos)++;
-      arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
-      arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
-      if (noside == EVAL_SKIP)
-	goto nosideret;
-      /* If the user attempts to subscript something that is not an
-         array or pointer type (like a plain int variable for example),
-         then report this as an error.  */
-
-      arg1 = coerce_ref (arg1);
-      type = check_typedef (value_type (arg1));
-      if (TYPE_CODE (type) == TYPE_CODE_PTR)
-	type = check_typedef (TYPE_TARGET_TYPE (type));
-      name = TYPE_NAME (type);
-      if (name == NULL)
-	name = TYPE_TAG_NAME (type);
-      i = name == NULL ? 0 : strlen (name);
-      if (TYPE_CODE (type) == TYPE_CODE_STRUCT
-	  && i > 2 && name[i - 1] == ']')
-	{
-	  enum bfd_endian byte_order = gdbarch_byte_order (exp->gdbarch);
-	  CORE_ADDR address;
-	  long length, index;
-	  struct type *el_type;
-	  gdb_byte buf4[4];
-
-	  struct value *clas = java_class_from_object (arg1);
-	  struct value *temp = clas;
-	  /* Get CLASS_ELEMENT_TYPE of the array type.  */
-	  temp = value_struct_elt (&temp, NULL, "methods",
-				   NULL, "structure");
-	  deprecated_set_value_type (temp, value_type (clas));
-	  el_type = type_from_class (exp->gdbarch, temp);
-	  if (TYPE_CODE (el_type) == TYPE_CODE_STRUCT)
-	    el_type = lookup_pointer_type (el_type);
-
-	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	    return value_zero (el_type, VALUE_LVAL (arg1));
-	  address = value_as_address (arg1);
-	  address += get_java_object_header_size (exp->gdbarch);
-	  read_memory (address, buf4, 4);
-	  length = (long) extract_signed_integer (buf4, 4, byte_order);
-	  index = (long) value_as_long (arg2);
-	  if (index >= length || index < 0)
-	    error (_("array index (%ld) out of bounds (length: %ld)"),
-		   index, length);
-	  address = (address + 4) + index * TYPE_LENGTH (el_type);
-	  return value_at (el_type, address);
-	}
-      else if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
-	{
-	  if (noside == EVAL_AVOID_SIDE_EFFECTS)
-	    return value_zero (TYPE_TARGET_TYPE (type), VALUE_LVAL (arg1));
-	  else
-	    return value_subscript (arg1, value_as_long (arg2));
-	}
-      if (name)
-	error (_("cannot subscript something of type `%s'"), name);
-      else
-	error (_("cannot subscript requested type"));
-
-    case OP_STRING:
-      (*pos)++;
-      i = longest_to_int (exp->elts[pc + 1].longconst);
-      (*pos) += 3 + BYTES_TO_EXP_ELEM (i + 1);
-      if (noside == EVAL_SKIP)
-	goto nosideret;
-      return java_value_string (&exp->elts[pc + 2].string, i);
-
-    case STRUCTOP_PTR:
-      arg1 = evaluate_subexp_standard (expect_type, exp, pos, noside);
-      /* Convert object field (such as TYPE.class) to reference.  */
-      if (TYPE_CODE (value_type (arg1)) == TYPE_CODE_STRUCT)
-	arg1 = value_addr (arg1);
-      return arg1;
-    default:
-      break;
-    }
-standard:
-  return evaluate_subexp_standard (expect_type, exp, pos, noside);
-nosideret:
-  return value_from_longest (builtin_type (exp->gdbarch)->builtin_int, 1);
-}
-
-static char *java_demangle (const char *mangled, int options)
-{
-  return gdb_demangle (mangled, options | DMGL_JAVA);
-}
-
-/* la_sniff_from_mangled_name for Java.  */
-
-static int
-java_sniff_from_mangled_name (const char *mangled, char **demangled)
-{
-  *demangled = java_demangle (mangled, DMGL_PARAMS | DMGL_ANSI);
-  return *demangled != NULL;
-}
-
-/* Find the member function name of the demangled name NAME.  NAME
-   must be a method name including arguments, in order to correctly
-   locate the last component.
-
-   This function return a pointer to the first dot before the
-   member function name, or NULL if the name was not of the
-   expected form.  */
-
-static const char *
-java_find_last_component (const char *name)
-{
-  const char *p;
-
-  /* Find argument list.  */
-  p = strchr (name, '(');
-
-  if (p == NULL)
-    return NULL;
-
-  /* Back up and find first dot prior to argument list.  */
-  while (p > name && *p != '.')
-    p--;
-
-  if (p == name)
-    return NULL;
-
-  return p;
-}
-
-/* Return the name of the class containing method PHYSNAME.  */
-
-static char *
-java_class_name_from_physname (const char *physname) 
-{
-  char *ret = NULL;
-  const char *end;
-  char *demangled_name = java_demangle (physname, DMGL_PARAMS | DMGL_ANSI);
-
-  if (demangled_name == NULL)
-    return NULL;
-
-  end = java_find_last_component (demangled_name);
-  if (end != NULL)
-    {
-      ret = (char *) xmalloc (end - demangled_name + 1);
-      memcpy (ret, demangled_name, end - demangled_name);
-      ret[end - demangled_name] = '\0';
-    }
-
-  xfree (demangled_name);
-  return ret;
-}
-
-/* Table mapping opcodes into strings for printing operators
-   and precedences of the operators.  */
-
-const struct op_print java_op_print_tab[] =
-{
-  {",", BINOP_COMMA, PREC_COMMA, 0},
-  {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
-  {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
-  {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
-  {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
-  {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
-  {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
-  {"==", BINOP_EQUAL, PREC_EQUAL, 0},
-  {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
-  {"<=", BINOP_LEQ, PREC_ORDER, 0},
-  {">=", BINOP_GEQ, PREC_ORDER, 0},
-  {">", BINOP_GTR, PREC_ORDER, 0},
-  {"<", BINOP_LESS, PREC_ORDER, 0},
-  {">>", BINOP_RSH, PREC_SHIFT, 0},
-  {"<<", BINOP_LSH, PREC_SHIFT, 0},
-  {"+", BINOP_ADD, PREC_ADD, 0},
-  {"-", BINOP_SUB, PREC_ADD, 0},
-  {"*", BINOP_MUL, PREC_MUL, 0},
-  {"/", BINOP_DIV, PREC_MUL, 0},
-  {"%", BINOP_REM, PREC_MUL, 0},
-  {"-", UNOP_NEG, PREC_PREFIX, 0},
-  {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
-  {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
-  {"*", UNOP_IND, PREC_PREFIX, 0},
-  {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
-  {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
-  {NULL, OP_NULL, PREC_PREFIX, 0}
-};
-
-enum java_primitive_types
-{
-  java_primitive_type_int,
-  java_primitive_type_short,
-  java_primitive_type_long,
-  java_primitive_type_byte,
-  java_primitive_type_boolean,
-  java_primitive_ty[...]

[diff truncated at 100000 bytes]


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