Fix arguments types in array-put instruction

This commit is contained in:
Skylot
2013-04-28 19:09:09 +04:00
parent 2e40ca17dc
commit 533883b5aa
@@ -40,16 +40,11 @@ public class PostTypeResolver {
return change; return change;
} }
case AGET: { case AGET:
boolean change = false; return fixArrayTypes(insn.getArg(0), insn.getResult());
RegisterArg elem = insn.getResult();
InsnArg array = insn.getArg(0); case APUT:
if (!elem.getType().isTypeKnown() && elem.merge(array.getType().getArrayElement())) return fixArrayTypes(insn.getArg(0), insn.getArg(2));
change = true;
if (!array.getType().isTypeKnown() && array.merge(ArgType.array(elem.getType())))
change = true;
return change;
}
case IF: { case IF: {
boolean change = false; boolean change = false;
@@ -69,4 +64,13 @@ public class PostTypeResolver {
return false; return false;
} }
private static boolean fixArrayTypes(InsnArg array, InsnArg elem) {
boolean change = false;
if (!elem.getType().isTypeKnown() && elem.merge(array.getType().getArrayElement()))
change = true;
if (!array.getType().isTypeKnown() && array.merge(ArgType.array(elem.getType())))
change = true;
return change;
}
} }