fixed HIDEOUS bug in ConstantPool -- was circumventing Type-instance caching (evil...
[org.ibex.classgen.git] / src / org / ibex / classgen / ConstantPool.java
index dbd958c..5868f62 100644 (file)
@@ -86,7 +86,7 @@ class ConstantPool implements CGConst {
         ClassEnt(String s) { this(); this.utf8 = (Utf8Ent) addUtf8(s); }
         void dump(DataOutput o) throws IOException { super.dump(o); o.writeShort(utf8.n); }
         Type.Class getTypeClass() { return  (Type.Class) key(); }
-        Object _key() { return new Type.Class(utf8.s); }
+        Object _key() { return Type.Class.instance(utf8.s); }
         void unref() { utf8.unref(); super.unref(); }
         String debugToString() { return "[Class: " + utf8.s + "]"; }
     }
@@ -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, member.type.s);
+                    return klass.getTypeClass().field(member.name.s, Type.fromDescriptor(member.type.s));
                 case CONSTANT_METHODREF:
                 case CONSTANT_INTERFACEMETHODREF:
                     Type.Class.Method m = klass.getTypeClass().method(member.name.s,member.type.s);
@@ -236,7 +236,7 @@ class ConstantPool implements CGConst {
                     : m instanceof Type.Class.Method ? CONSTANT_METHODREF
                     : 0;
             if (tag == 0) throw new Error("should never happen");
-            ent = new MemberEnt(tag, m.getDeclaringClass(), m.name, m.getDescriptor());
+            ent = new MemberEnt(tag, m.getDeclaringClass(), m.name, m.getTypeDescriptor());
         } 
         else {
             throw new IllegalArgumentException("Unknown type passed to add");