last ditch efford to separate names and type descriptors
authorbrian <brian@brianweb.net>
Sun, 3 Jul 2005 19:27:51 +0000 (19:27 +0000)
committerbrian <brian@brianweb.net>
Sun, 3 Jul 2005 19:27:51 +0000 (19:27 +0000)
darcs-hash:20050703192751-24bed-c8bfe91cbaaaba8a6ed0a9bf022aa9e60e661c20.gz

src/org/ibex/classgen/ConstantPool.java
src/org/ibex/classgen/MethodGen.java
src/org/ibex/classgen/Type.java
src/org/ibex/classgen/opt/Arena.java

index 5868f62..967d317 100644 (file)
@@ -123,7 +123,7 @@ class ConstantPool implements CGConst {
             if(member.name == null) throw new Error("should never happen");
             switch(tag) {
                 case CONSTANT_FIELDREF:
-                    return klass.getTypeClass().field(member.name.s, Type.fromDescriptor(member.type.s));
+                    return klass.getTypeClass().field(member.name.s, member.type.s);
                 case CONSTANT_METHODREF:
                 case CONSTANT_INTERFACEMETHODREF:
                     Type.Class.Method m = klass.getTypeClass().method(member.name.s,member.type.s);
index bc80d75..94f0fad 100644 (file)
@@ -39,7 +39,7 @@ public class MethodGen extends Type.Class.Method.Body {
         this(in.readShort(), cp.getUtf8KeyByIndex(in.readShort()), c, in, cp); }
 
     private MethodGen(short flags, String name, Type.Class c, DataInput in, ConstantPool cp) throws IOException {
-        this(flags, name, c.method(name+cp.getUtf8KeyByIndex(in.readShort())), c, in, cp); }
+        this(flags, name, c.method(name,cp.getUtf8KeyByIndex(in.readShort())), c, in, cp); }
     private MethodGen(short flags, String name, Type.Class.Method m,
                       Type.Class c, DataInput in, ConstantPool cp) throws IOException {
         m.super(flags, new ClassFile.AttrGen(in,cp));
index 58622ec..491e3bb 100644 (file)
@@ -141,15 +141,14 @@ public abstract class Type implements CGConst {
         }
 
         public Field field(String name, Type type) { return new Field(name, type); }
+        public Field field(String name, String descriptor) { return field(name,Type.fromDescriptor(descriptor)); }
 
         public Method method(String name, Type returnType, Type[] argTypes) { return new Method(name, returnType, argTypes); }
-        public Method method(String leftCrap, String rightCrap) { return method(leftCrap+rightCrap); }
 
         /** see JVM Spec section 2.10.2 */
-        public Method method(String signature) {
+        public Method method(String name, String descriptor) {
             // FEATURE: This parser is ugly but it works (and shouldn't be a problem) might want to clean it up though
-            String name = signature.substring(0, signature.indexOf('('));
-            String s = signature.substring(signature.indexOf('('));
+            String s = descriptor;
             if(!s.startsWith("(")) throw new IllegalArgumentException("invalid method type descriptor");
             int p = s.indexOf(')');
             if(p == -1) throw new IllegalArgumentException("invalid method type descriptor");
index 566c9fb..34ca1b5 100644 (file)
@@ -18,7 +18,7 @@ public class Arena implements CGConst {
     // Initializers //////////////////////////////////////////////////////////////////////////////
 
     public static Type.Class        System_class     = Type.Class.instance("java.lang.System");
-    public static Type.Class.Method System_arraycopy = System_class.method("arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V");
+    public static Type.Class.Method System_arraycopy = System_class.method("arraycopy","(Ljava/lang/Object;ILjava/lang/Object;II)V");
     public static Type.Class        Gladiator_class  = Type.Class.instance("org.ibex.classgen.opt.Arena$Gladiator");
 
     boolean          implementsGladiator(Type t)          { return t instanceof Type.Class && implementsGladiator((Type.Class)t);}