diff options
author | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-19 00:24:09 +0000 |
---|---|---|
committer | tromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-19 00:24:09 +0000 |
commit | ef45a2696c58923d63a7854ea5bc0840ede96047 (patch) | |
tree | e08786d000d7c3bc2119fb775da6d96fbbe84475 /libjava/classpath | |
parent | ef09cb43eedbb66a9e9062144a4af825e581ab1a (diff) | |
download | ppe42-gcc-ef45a2696c58923d63a7854ea5bc0840ede96047.tar.gz ppe42-gcc-ef45a2696c58923d63a7854ea5bc0840ede96047.zip |
libjava
* Regenerated headers with new gjavah.
libjava/classpath
* tools/gnu/classpath/tools/javah/MethodHelper.java (print):
Changed arguments. Directly print method name.
* tools/gnu/classpath/tools/javah/ClassWrapper.java
(methodNameMap): New field.
(makeVtable): Initialize it.
(printMethods): Compute name for bridge targets.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123965 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/classpath')
-rw-r--r-- | libjava/classpath/ChangeLog | 9 | ||||
-rw-r--r-- | libjava/classpath/lib/gnu/java/awt/peer/gtk/ComponentGraphics.class | bin | 12284 -> 12162 bytes | |||
-rw-r--r-- | libjava/classpath/lib/gnu/java/rmi/server/TripleKey.class | bin | 1315 -> 1315 bytes | |||
-rw-r--r-- | libjava/classpath/lib/gnu/java/rmi/server/UnicastConnectionManager.class | bin | 7405 -> 7404 bytes | |||
-rw-r--r-- | libjava/classpath/tools/classes/gnu/classpath/tools/javah/ClassWrapper.class | bin | 7779 -> 8524 bytes | |||
-rw-r--r-- | libjava/classpath/tools/classes/gnu/classpath/tools/javah/MethodHelper.class | bin | 3041 -> 2902 bytes | |||
-rw-r--r-- | libjava/classpath/tools/gnu/classpath/tools/javah/ClassWrapper.java | 39 | ||||
-rw-r--r-- | libjava/classpath/tools/gnu/classpath/tools/javah/MethodHelper.java | 14 |
8 files changed, 46 insertions, 16 deletions
diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog index fac684a421c..987ac9eff84 100644 --- a/libjava/classpath/ChangeLog +++ b/libjava/classpath/ChangeLog @@ -1,3 +1,12 @@ +2007-04-18 Tom Tromey <tromey@redhat.com> + + * tools/gnu/classpath/tools/javah/MethodHelper.java (print): + Changed arguments. Directly print method name. + * tools/gnu/classpath/tools/javah/ClassWrapper.java + (methodNameMap): New field. + (makeVtable): Initialize it. + (printMethods): Compute name for bridge targets. + 2007-04-17 Andrew Haley <aph@redhat.com> * gnu/java/rmi/server/UnicastConnectionManager.java diff --git a/libjava/classpath/lib/gnu/java/awt/peer/gtk/ComponentGraphics.class b/libjava/classpath/lib/gnu/java/awt/peer/gtk/ComponentGraphics.class Binary files differindex 655eba16fc1..0e671874914 100644 --- a/libjava/classpath/lib/gnu/java/awt/peer/gtk/ComponentGraphics.class +++ b/libjava/classpath/lib/gnu/java/awt/peer/gtk/ComponentGraphics.class diff --git a/libjava/classpath/lib/gnu/java/rmi/server/TripleKey.class b/libjava/classpath/lib/gnu/java/rmi/server/TripleKey.class Binary files differindex faa602b8bb2..661d491ff49 100644 --- a/libjava/classpath/lib/gnu/java/rmi/server/TripleKey.class +++ b/libjava/classpath/lib/gnu/java/rmi/server/TripleKey.class diff --git a/libjava/classpath/lib/gnu/java/rmi/server/UnicastConnectionManager.class b/libjava/classpath/lib/gnu/java/rmi/server/UnicastConnectionManager.class Binary files differindex e5d55790973..917dfc9b564 100644 --- a/libjava/classpath/lib/gnu/java/rmi/server/UnicastConnectionManager.class +++ b/libjava/classpath/lib/gnu/java/rmi/server/UnicastConnectionManager.class diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/ClassWrapper.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/ClassWrapper.class Binary files differindex e759d12638c..da5ddebe53b 100644 --- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/ClassWrapper.class +++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/ClassWrapper.class diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/MethodHelper.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/MethodHelper.class Binary files differindex 45651970054..2bd32023281 100644 --- a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/MethodHelper.class +++ b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/MethodHelper.class diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/ClassWrapper.java b/libjava/classpath/tools/gnu/classpath/tools/javah/ClassWrapper.java index e238065c2c0..2172628a671 100644 --- a/libjava/classpath/tools/gnu/classpath/tools/javah/ClassWrapper.java +++ b/libjava/classpath/tools/gnu/classpath/tools/javah/ClassWrapper.java @@ -1,5 +1,5 @@ /* ClassWrapper.java - wrap ASM class objects - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -43,6 +43,7 @@ import java.io.IOException; import java.io.PrintStream; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -68,6 +69,11 @@ public class ClassWrapper // A set of all the method names in this class. HashSet methodNames = new HashSet(); + // This maps a method name + descriptor, e.g. "method()V", to the + // name chosen for the method. This is used when computing the + // names of bridge method targets. + HashMap methodNameMap = new HashMap(); + public ClassWrapper(Main classpath) { this.classpath = classpath; @@ -187,18 +193,24 @@ public class ClassWrapper superClass.makeVtable(); vtable = new ArrayList(superClass.vtable); bridgeTargets = new HashSet(superClass.bridgeTargets); + methodNameMap = new HashMap(superClass.methodNameMap); } else { // Object. vtable = new ArrayList(); bridgeTargets = new HashSet(); + methodNameMap = new HashMap(); } addLocalMethods(); addInterfaces(this); - // Make a set of all the targets of bridge methods. - // We rename bridge methods to avoid problems with C++. + // Make a set of all the targets of bridge methods. We rename + // bridge target methods to avoid problems with C++. You might + // think we could rename the bridge methods themselves, but bridge + // methods by definition override a method from the superclass -- + // and we have to consider the superclass' header as an + // unchangeable entity. Iterator i = methods.iterator(); while (i.hasNext()) { @@ -232,8 +244,25 @@ public class ClassWrapper while (i.hasNext()) { MethodNode m = (MethodNode) i.next(); - boolean isTarget = bridgeTargets.contains(m.name + m.desc); - MethodHelper.print(out, m, this, isTarget); + String nameToUse; + String sum = m.name + m.desc; + if (bridgeTargets.contains(sum)) + { + if (methodNameMap.containsKey(sum)) + nameToUse = (String) methodNameMap.get(sum); + else + { + // Bridge target that is new in this class. + String cname = this.name; + int index = cname.lastIndexOf('/'); + cname = cname.substring(index + 1); + nameToUse = cname + "$" + m.name; + } + } + else + nameToUse = Keywords.getCxxName(m.name); + methodNameMap.put(sum, nameToUse); + MethodHelper.print(out, m, this, nameToUse); } } diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/MethodHelper.java b/libjava/classpath/tools/gnu/classpath/tools/javah/MethodHelper.java index 6657f115ac4..4359523ba05 100644 --- a/libjava/classpath/tools/gnu/classpath/tools/javah/MethodHelper.java +++ b/libjava/classpath/tools/gnu/classpath/tools/javah/MethodHelper.java @@ -1,5 +1,5 @@ /* MethodHelper.java - helper class for manipulating methods - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -76,7 +76,7 @@ public class MethodHelper } public static void print(CniPrintStream out, MethodNode meth, - ClassWrapper declarer, boolean isBridgeTarget) + ClassWrapper declarer, String realMethodName) { if ("<clinit>".equals(meth.name)) return; @@ -97,15 +97,7 @@ public class MethodHelper { out.print(Type.getReturnType(meth.desc)); out.print(" "); - if (isBridgeTarget) - { - out.print("target$"); - out.print(meth.name); - } - else - { - out.print(Keywords.getCxxName(meth.name)); - } + out.print(realMethodName); } else { |