aboutsummaryrefslogtreecommitdiff
path: root/gcc/java/jvgenmain.c
diff options
context:
space:
mode:
authorAlexandre Petit-Bianco <apbianco@cygnus.com>2001-01-15 08:01:22 +0000
committerAlexandre Petit-Bianco <apbianco@gcc.gnu.org>2001-01-15 00:01:22 -0800
commitdc08e603899b1ac1ea91a9ee641853b20521d61e (patch)
tree978174af2eae55529af123d6d167212203a572ad /gcc/java/jvgenmain.c
parentb9333bff58209a5669342bfcbb974cf92081f1e1 (diff)
downloadgcc-dc08e603899b1ac1ea91a9ee641853b20521d61e.zip
gcc-dc08e603899b1ac1ea91a9ee641853b20521d61e.tar.gz
gcc-dc08e603899b1ac1ea91a9ee641853b20521d61e.tar.bz2
All files with updated copyright when applicable.
2001-01-07 Alexandre Petit-Bianco <apbianco@cygnus.com> All files with updated copyright when applicable. * Make-lang.in (JVGENMAIN_OBS): Removed java/mangle.o. * class.c (mangle_class_field): Function removed. (append_gpp_mangled_type, mangle_static_field, mangle_field): Likewise. (utf8_cmp, cxx_keyword_p): Moved to lex.c. (build_class_ref): Call `java_mangle_class_field' instead of `mangle_class_field.' (build_dtable_decl): Rewritten to call `java_mangle_vtable.' (layout_class): Call `java_mangle_decl' instead of `mangle_static_field.' (cxx_keywords): Initialized static array moved to `lex.c.' (layout_class_method): Changed leading comment. Simplified to call `java_mangle_decl.' Local `ptr' moved in for loop body. * decl.c (lang_mark_tree): Mark field `package_list.' * java-tree.h (TYPE_PACKAGE_LIST): New macro. (struct lang_type): New field `package_list.' (unicode_mangling_length): Prototype removed. (append_gpp_mangled_name, append_gpp_mangled_classtype, emit_unicode_mangled_name): Likewise. (cxx_keyword_p): New prototype. (java_mangle_decl, java_mangle_class_field, java_mangle_class_field_from_string, java_mangle_vtable): Likewise. * jcf-parse.c (jcf_parse_source): Constify `file' argument to `build_expr_wfl.' * jvgenmain.c (main_method_prefix): Global variable removed. (main_method_suffix): Likewise. (do_mangle_classname): New function. (main): Call it. Format changed to accomodate new mangling scheme. * lex.c: (utf8_cmp): Conditionally prototyped. (cxx_keywords): Moved from class.c, conditionally defined. (utf8_cmp, cxx_keyword_p): Likewise. * mangle.c (obstack.h, ggc.h): Included. (mangle_field_decl): New function. (mangle_method_decl, mangle_type, mangle_pointer_type, mangle_array_type, mangle_record_type, find_compression_pointer_match, find_compression_array_match, find_compression_record_match, find_compression_array_template_match, set_type_package_list, entry_match_pointer_p, emit_compression_string, init_mangling, finish_mangling, compression_table_add, mangle_member_name): Likewise. (mangle_obstack): New global. (MANGLE_RAW_STRING): New macro. (unicode_mangling_length): Turned static. (append_unicode_mangled_name): Renamed from `emit_unicode_mangled_name.' Turned static. `mangle_obstack' replaces `obstack', removed from the parameter list. (append_gpp_mangled_name): Turned static. `mangle_obstack' replaces parameter `obstack', removed from the parameter list. Call `append_unicode_mangled_name' instead of `emit_unicode_mangled_name. (append_gpp_mangled_classtype): Removed. (compression_table, compression_next): New static variables. * parse.y (temporary_obstack): Extern declaration removed. (This is the new C++ ABI compatibility patch: http://gcc.gnu.org/ml/gcc-patches/2001-01/msg01225.html) From-SVN: r39031
Diffstat (limited to 'gcc/java/jvgenmain.c')
-rw-r--r--gcc/java/jvgenmain.c52
1 files changed, 39 insertions, 13 deletions
diff --git a/gcc/java/jvgenmain.c b/gcc/java/jvgenmain.c
index 4856395..2eaa02f 100644
--- a/gcc/java/jvgenmain.c
+++ b/gcc/java/jvgenmain.c
@@ -1,5 +1,5 @@
/* Program to generate "main" a Java(TM) class containing a main method.
- Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -32,8 +32,8 @@ The Free Software Foundation is independent of Sun Microsystems, Inc. */
#include "tree.h"
#include "java-tree.h"
-const char main_method_prefix[] = "main__";
-const char main_method_suffix[] = "Pt6JArray1ZPQ34java4lang6String";
+static char * do_mangle_classname PARAMS ((const char *string));
+
const char class_mangling_suffix[] = "class$";
struct obstack name_obstack;
@@ -116,9 +116,7 @@ main (int argc, const char **argv)
classname = argv[i];
gcc_obstack_init (&name_obstack);
- append_gpp_mangled_classtype (&name_obstack, classname);
- obstack_1grow (&name_obstack, '\0');
- mangled_classname = obstack_finish (&name_obstack);
+ mangled_classname = do_mangle_classname (classname);
if (i < argc - 1 && strcmp (argv[i + 1], "-") != 0)
{
@@ -155,13 +153,8 @@ main (int argc, const char **argv)
}
fprintf (stream, " 0\n};\n\n");
-#ifndef NO_DOLLAR_IN_LABEL
- fprintf (stream, "extern int class __attribute__ ((alias (\"_%s$%s\")));\n",
- mangled_classname, class_mangling_suffix);
-#else
- fprintf (stream, "extern int class __attribute__ ((alias (\"_%s.%s\")));\n",
- mangled_classname, class_mangling_suffix);
-#endif
+ fprintf (stream, "extern int class __attribute__ ((alias (\"%s\")));\n",
+ mangled_classname);
fprintf (stream, "int main (int argc, const char **argv)\n");
fprintf (stream, "{\n");
fprintf (stream, " _Jv_Compiler_Properties = props;\n");
@@ -175,3 +168,36 @@ main (int argc, const char **argv)
}
return 0;
}
+
+
+static char *
+do_mangle_classname (string)
+ const char *string;
+{
+ char *ptr;
+ int count = 0;
+
+#define MANGLE_NAME() \
+ { \
+ char buffer [128]; \
+ sprintf (buffer, "%d", count); \
+ obstack_grow (&name_obstack, buffer, strlen (buffer)); \
+ obstack_grow (&name_obstack, & ptr [-count], count); \
+ count = 0; \
+ }
+
+ obstack_grow (&name_obstack, "_ZN", 3);
+
+ for (ptr = (char *)string; *ptr; ptr++ )
+ {
+ if (ptr[0] == '.')
+ {
+ MANGLE_NAME ();
+ }
+ else
+ count++;
+ }
+ MANGLE_NAME ();
+ obstack_grow0 (&name_obstack, "6class$E", 8);
+ return obstack_finish (&name_obstack);
+}