X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fibex%2Fclassgen%2FType.java;h=cf9e4a7b29823eb7172cb2d4d46c7af048f21091;hb=5186b123d341165e00082608ad38500f076f90f8;hp=3d77ba3e08013625bff12759a544aadd801181cf;hpb=58b777d0f15df1ffd1bfa16135030118ba7c26e3;p=org.ibex.classgen.git diff --git a/src/org/ibex/classgen/Type.java b/src/org/ibex/classgen/Type.java index 3d77ba3..cf9e4a7 100644 --- a/src/org/ibex/classgen/Type.java +++ b/src/org/ibex/classgen/Type.java @@ -57,6 +57,7 @@ public abstract class Type implements CGConst { public static Type unify(Type t1, Type t2) { if(t1 == Type.NULL) return t2; if(t2 == Type.NULL) return t1; + if((t1 == Type.INT && t2 == Type.BOOLEAN) || (t2 == Type.INT & t1 == Type.BOOLEAN)) return Type.BOOLEAN; if(t1 == t2) return t1; // FIXME: This needs to do a lot more (subclasses, etc) // it probably should be in Context.java @@ -142,7 +143,6 @@ public abstract class Type implements CGConst { public Type.Class.Body getBody(Context cx) { return cx.resolve(this.getName()); } public abstract class Body extends HasAttributes { public abstract Type.Class.Method.Body[] methods(); - public abstract Type.Class.Field.Body addField(Type.Class.Field field, int flags); public abstract Type.Class.Field.Body[] fields(); public Body(int flags, ClassFile.AttrGen attrs) { super(flags, attrs); @@ -189,6 +189,8 @@ public abstract class Type implements CGConst { public String getName() { return name; } public abstract String getTypeDescriptor(); public abstract String toString(); + public abstract int hashCode(); + public abstract boolean equals(Object o); } public class Field extends Member { @@ -204,6 +206,15 @@ public abstract class Type implements CGConst { if ((flags & ~VALID_FIELD_FLAGS) != 0) throw new IllegalArgumentException("invalid flags"); } } + public int hashCode() { + return type.hashCode() ^ name.hashCode() ^ getDeclaringClass().hashCode(); + } + public boolean equals(Object o_) { + if(o_ == this) return true; + if(!(o_ instanceof Field)) return false; + Field o = (Field) o_; + return o.getDeclaringClass() == getDeclaringClass() && o.type == type && o.name.equals(name); + } } public class Method extends Member { @@ -227,7 +238,7 @@ public abstract class Type implements CGConst { if (name.equals("")) sb.append(Class.this.getShortName()); else - sb.append(returnType.toString()).append(".").append(name); + sb.append(returnType.toString()).append(" ").append(name); sb.append("("); for(int i=0; i