Class.method(sig)
authorbrian <brian@brianweb.net>
Sat, 2 Jul 2005 22:48:19 +0000 (22:48 +0000)
committerbrian <brian@brianweb.net>
Sat, 2 Jul 2005 22:48:19 +0000 (22:48 +0000)
darcs-hash:20050702224819-24bed-7ad3aaf47e340cfd7e1868e60d94f9e6e1284d0f.gz

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

index eb2a565..17ea634 100644 (file)
@@ -126,7 +126,7 @@ class ConstantPool implements CGConst {
                     return klass.getTypeClass().field(member.name.s, Type.instance(member.type.s));
                 case CONSTANT_METHODREF:
                 case CONSTANT_INTERFACEMETHODREF:
                     return klass.getTypeClass().field(member.name.s, Type.instance(member.type.s));
                 case CONSTANT_METHODREF:
                 case CONSTANT_INTERFACEMETHODREF:
-                    Type.Class.Method m = klass.getTypeClass().method(member.name.s + member.type.s);
+                    Type.Class.Method m = klass.getTypeClass().method(member.name.s,member.type.s);
                     return tag == CONSTANT_INTERFACEMETHODREF ? (Object) new InterfaceMethodKey(m) : (Object) m;
                 default:
                     throw new Error("should never happen");
                     return tag == CONSTANT_INTERFACEMETHODREF ? (Object) new InterfaceMethodKey(m) : (Object) m;
                 default:
                     throw new Error("should never happen");
index 854b76a..90edacd 100644 (file)
@@ -53,7 +53,7 @@ public class MethodGen extends Type.Class.Method.Body implements CGConst {
         m.super();
         this.flags = flags;
         if ((flags & ~VALID_METHOD_FLAGS) != 0) throw new ClassFile.ClassReadExn("invalid flags");
         m.super();
         this.flags = flags;
         if ((flags & ~VALID_METHOD_FLAGS) != 0) throw new ClassFile.ClassReadExn("invalid flags");
-        this.method = m;
+        this.method = c.method(name,typeDescriptor);
         this.attrs = new ClassFile.AttrGen(in,cp);
         
         if ((flags & (NATIVE|ABSTRACT))==0)  {
         this.attrs = new ClassFile.AttrGen(in,cp);
         
         if ((flags & (NATIVE|ABSTRACT))==0)  {
index 067e611..2faa590 100644 (file)
@@ -105,11 +105,10 @@ public class Type implements CGConst {
 
         public Field  field(String name, Type type) { return new Field(name, type); }
         public Method method(String name, Type returnType, Type[] argTypes) { return new Method(name, returnType, argTypes); }
 
         public Field  field(String name, Type type) { return new Field(name, type); }
         public Method method(String name, Type returnType, Type[] argTypes) { return new Method(name, returnType, argTypes); }
-        public Method method(String signature) {
+        public Method method(String name, String typeDescriptor) {
             // FEATURE: This parser is ugly but it works (and shouldn't be a problem) might want to clean it up though
             // FEATURE: This parser is ugly but it works (and shouldn't be a problem) might want to clean it up though
-            String s = signature;
-            String name = s.startsWith("(") ? "" : s.substring(0, s.indexOf('('));
-            s = s.substring(s.indexOf('('));
+            String s = typeDescriptor;
+            if(!s.startsWith("(")) throw new IllegalArgumentException("invalid method type descriptor");
             int p = s.indexOf(')');
             if(p == -1) throw new IllegalArgumentException("invalid method type descriptor");
             String argsDesc = s.substring(1,p);
             int p = s.indexOf(')');
             if(p == -1) throw new IllegalArgumentException("invalid method type descriptor");
             String argsDesc = s.substring(1,p);