diff options
author | Alexandre Petit-Bianco <apbianco@cygnus.com> | 2001-01-15 08:01:22 +0000 |
---|---|---|
committer | Alexandre Petit-Bianco <apbianco@gcc.gnu.org> | 2001-01-15 00:01:22 -0800 |
commit | dc08e603899b1ac1ea91a9ee641853b20521d61e (patch) | |
tree | 978174af2eae55529af123d6d167212203a572ad /gcc/java/jvgenmain.c | |
parent | b9333bff58209a5669342bfcbb974cf92081f1e1 (diff) | |
download | gcc-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.c | 52 |
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); +} |