From 11cdbef43dc7391d2e1a7d38a38994934a504d34 Mon Sep 17 00:00:00 2001 From: brian Date: Sun, 3 Jul 2005 19:27:51 +0000 Subject: [PATCH] last ditch efford to separate names and type descriptors darcs-hash:20050703192751-24bed-c8bfe91cbaaaba8a6ed0a9bf022aa9e60e661c20.gz --- src/org/ibex/classgen/ConstantPool.java | 2 +- src/org/ibex/classgen/MethodGen.java | 2 +- src/org/ibex/classgen/Type.java | 7 +++---- src/org/ibex/classgen/opt/Arena.java | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/org/ibex/classgen/ConstantPool.java b/src/org/ibex/classgen/ConstantPool.java index 5868f62..967d317 100644 --- a/src/org/ibex/classgen/ConstantPool.java +++ b/src/org/ibex/classgen/ConstantPool.java @@ -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); diff --git a/src/org/ibex/classgen/MethodGen.java b/src/org/ibex/classgen/MethodGen.java index bc80d75..94f0fad 100644 --- a/src/org/ibex/classgen/MethodGen.java +++ b/src/org/ibex/classgen/MethodGen.java @@ -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)); diff --git a/src/org/ibex/classgen/Type.java b/src/org/ibex/classgen/Type.java index 58622ec..491e3bb 100644 --- a/src/org/ibex/classgen/Type.java +++ b/src/org/ibex/classgen/Type.java @@ -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"); diff --git a/src/org/ibex/classgen/opt/Arena.java b/src/org/ibex/classgen/opt/Arena.java index 566c9fb..34ca1b5 100644 --- a/src/org/ibex/classgen/opt/Arena.java +++ b/src/org/ibex/classgen/opt/Arena.java @@ -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);} -- 1.7.10.4