use of net.runelite.asm.attributes.code.instruction.types.GetFieldInstruction in project runelite by runelite.
the class InvokeInterface method map.
@Override
public void map(ParallelExecutorMapping mapping, InstructionContext ctx, InstructionContext other) {
InvokeInterface otherIv = (InvokeInterface) other.getInstruction();
List<net.runelite.asm.Method> myMethods = this.getMethods(), otherMethods = otherIv.getMethods();
assert myMethods.size() == otherMethods.size();
for (int i = 0; i < myMethods.size(); ++i) {
net.runelite.asm.Method m1 = myMethods.get(i), otherMethod = null;
ClassFile c1 = m1.getClassFile();
if (myMethods.size() == 1) {
otherMethod = otherMethods.get(0);
} else {
for (int j = 0; j < myMethods.size(); ++j) {
net.runelite.asm.Method m2 = otherMethods.get(j);
ClassFile c2 = m2.getClassFile();
if (MappingExecutorUtil.isMaybeEqual(c1, c2)) {
if (otherMethod != null) {
otherMethod = null;
break;
}
otherMethod = m2;
}
}
}
if (otherMethod != null) {
mapping.map(this, m1, otherMethod);
}
}
for (int i = 0; i < ctx.getPops().size(); ++i) {
StackContext s1 = ctx.getPops().get(i), s2 = other.getPops().get(i);
InstructionContext base1 = MappingExecutorUtil.resolve(s1.getPushed(), s1);
InstructionContext base2 = MappingExecutorUtil.resolve(s2.getPushed(), s2);
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction) {
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(), gf2 = (GetFieldInstruction) base2.getInstruction();
Field f1 = gf1.getMyField(), f2 = gf2.getMyField();
if (f1 != null && f2 != null) {
mapping.map(this, f1, f2);
}
}
}
/* map field that was invoked on */
StackContext object1 = ctx.getPops().get(method.getType().size()), object2 = other.getPops().get(otherIv.method.getType().size());
InstructionContext base1 = MappingExecutorUtil.resolve(object1.getPushed(), object1);
InstructionContext base2 = MappingExecutorUtil.resolve(object2.getPushed(), object2);
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction) {
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(), gf2 = (GetFieldInstruction) base2.getInstruction();
Field f1 = gf1.getMyField(), f2 = gf2.getMyField();
if (f1 != null && f2 != null) {
mapping.map(this, f1, f2);
}
}
}
use of net.runelite.asm.attributes.code.instruction.types.GetFieldInstruction in project runelite by runelite.
the class InvokeSpecial method map.
@Override
public void map(ParallelExecutorMapping mapping, InstructionContext ctx, InstructionContext other) {
InvokeSpecial otherIv = (InvokeSpecial) other.getInstruction();
List<net.runelite.asm.Method> myMethods = this.getMethods(), otherMethods = otherIv.getMethods();
assert myMethods.size() == otherMethods.size();
for (int i = 0; i < myMethods.size(); ++i) {
mapping.map(this, myMethods.get(i), otherMethods.get(i));
}
for (int i = 0; i < ctx.getPops().size(); ++i) {
StackContext s1 = ctx.getPops().get(i), s2 = other.getPops().get(i);
InstructionContext base1 = MappingExecutorUtil.resolve(s1.getPushed(), s1);
InstructionContext base2 = MappingExecutorUtil.resolve(s2.getPushed(), s2);
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction) {
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(), gf2 = (GetFieldInstruction) base2.getInstruction();
Field f1 = gf1.getMyField(), f2 = gf2.getMyField();
if (f1 != null && f2 != null) {
mapping.map(this, f1, f2);
}
}
}
/* map field that was invoked on */
StackContext object1 = ctx.getPops().get(method.getType().size()), object2 = other.getPops().get(otherIv.method.getType().size());
InstructionContext base1 = MappingExecutorUtil.resolve(object1.getPushed(), object1);
InstructionContext base2 = MappingExecutorUtil.resolve(object2.getPushed(), object2);
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction) {
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(), gf2 = (GetFieldInstruction) base2.getInstruction();
Field f1 = gf1.getMyField(), f2 = gf2.getMyField();
if (f1 != null && f2 != null) {
mapping.map(this, f1, f2);
}
}
}
Aggregations