core: fix ArgType.equals

This commit is contained in:
Skylot
2013-09-21 22:23:50 +04:00
parent 1358a05a74
commit 89c7b9a848
3 changed files with 38 additions and 10 deletions
@@ -173,7 +173,12 @@ public class RegionGen extends InsnGen {
if (sb.length() != 0) {
sb.append(mode);
}
sb.append('(').append(makeCondition(arg)).append(')');
String s = makeCondition(arg);
if (arg.isCompare()) {
sb.append(s);
} else {
sb.append('(').append(s).append(')');
}
}
return sb.toString();
default:
@@ -209,7 +214,7 @@ public class RegionGen extends InsnGen {
return false;
}
InsnNode insn = ((InsnWrapArg) arg).getWrapInsn();
if(insn.getType() == InsnType.ARITH) {
if (insn.getType() == InsnType.ARITH) {
ArithNode arith = ((ArithNode) insn);
switch (arith.getOp()) {
case ADD:
@@ -46,10 +46,6 @@ public abstract class ArgType {
private static ClspGraph clsp;
public static ClspGraph getClsp() {
return clsp;
}
public static void setClsp(ClspGraph clsp) {
ArgType.clsp = clsp;
}
@@ -107,6 +103,11 @@ public abstract class ArgType {
return true;
}
@Override
boolean internalEquals(Object obj) {
return type == ((PrimitiveArg) obj).type;
}
@Override
public String toString() {
return type.toString();
@@ -118,7 +119,7 @@ public abstract class ArgType {
public ObjectArg(String obj) {
this.object = Utils.cleanObjectName(obj);
this.hash = obj.hashCode();
this.hash = object.hashCode();
}
@Override
@@ -136,6 +137,11 @@ public abstract class ArgType {
return PrimitiveType.OBJECT;
}
@Override
boolean internalEquals(Object obj) {
return object.equals(((ObjectArg) obj).object);
}
@Override
public String toString() {
return object;
@@ -167,6 +173,12 @@ public abstract class ArgType {
return generics;
}
@Override
boolean internalEquals(Object obj) {
return super.internalEquals(obj)
&& Arrays.equals(generics, ((GenericObjectArg) obj).generics);
}
@Override
public String toString() {
return super.toString() + "<" + Utils.arrayToString(generics) + ">";
@@ -206,6 +218,11 @@ public abstract class ArgType {
return arrayElement.getArrayRootElement();
}
@Override
boolean internalEquals(Object obj) {
return arrayElement.equals(((ArrayArg) obj).arrayElement);
}
@Override
public String toString() {
return arrayElement.toString() + "[]";
@@ -247,6 +264,11 @@ public abstract class ArgType {
return primitive(f);
}
@Override
boolean internalEquals(Object obj) {
return Arrays.equals(possibleTypes, ((UnknownArg) obj).possibleTypes);
}
@Override
public String toString() {
if (possibleTypes.length == PrimitiveType.values().length)
@@ -591,13 +613,14 @@ public abstract class ArgType {
return hash;
}
abstract boolean internalEquals(Object obj);
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (hash != obj.hashCode()) return false;
if (getClass() != obj.getClass()) return false;
// TODO: don't use toString
return toString().equals(obj.toString());
return internalEquals(obj);
}
}
@@ -107,7 +107,7 @@ public final class IfCondition {
case AND:
return "&& " + args;
case OR:
return "||" + args;
return "|| " + args;
}
return "??";
}