Remove method context which is unnecessary now theres no more graph analysis
This commit is contained in:
@@ -2,6 +2,7 @@ package net.runelite.asm.execution;
|
|||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import net.runelite.asm.Field;
|
import net.runelite.asm.Field;
|
||||||
import net.runelite.asm.Method;
|
import net.runelite.asm.Method;
|
||||||
@@ -16,6 +17,7 @@ import net.runelite.asm.attributes.code.instruction.types.ReturnInstruction;
|
|||||||
import net.runelite.asm.attributes.code.instruction.types.SetFieldInstruction;
|
import net.runelite.asm.attributes.code.instruction.types.SetFieldInstruction;
|
||||||
import net.runelite.asm.attributes.code.instructions.AThrow;
|
import net.runelite.asm.attributes.code.instructions.AThrow;
|
||||||
import net.runelite.asm.attributes.code.instructions.InvokeStatic;
|
import net.runelite.asm.attributes.code.instructions.InvokeStatic;
|
||||||
|
import org.apache.commons.collections4.map.MultiValueMap;
|
||||||
|
|
||||||
public class Frame
|
public class Frame
|
||||||
{
|
{
|
||||||
@@ -26,7 +28,7 @@ public class Frame
|
|||||||
private Stack stack;
|
private Stack stack;
|
||||||
private Variables variables;
|
private Variables variables;
|
||||||
private List<InstructionContext> instructions = new ArrayList<>(); // instructions executed in this frame
|
private List<InstructionContext> instructions = new ArrayList<>(); // instructions executed in this frame
|
||||||
private MethodContext ctx;
|
private MultiValueMap<InstructionContext, Instruction> visited = new MultiValueMap<>();
|
||||||
protected Method nonStatic; // next non static method up the stack
|
protected Method nonStatic; // next non static method up the stack
|
||||||
public Frame other; // in the other execution for mapping
|
public Frame other; // in the other execution for mapping
|
||||||
public Frame returnTo; // is this the same as caller?
|
public Frame returnTo; // is this the same as caller?
|
||||||
@@ -41,10 +43,6 @@ public class Frame
|
|||||||
|
|
||||||
stack = new Stack(code.getMaxStack());
|
stack = new Stack(code.getMaxStack());
|
||||||
variables = new Variables(code.getMaxLocals());
|
variables = new Variables(code.getMaxLocals());
|
||||||
// don't cache method contexts per execution
|
|
||||||
// need to allow the same method to execute multiple times
|
|
||||||
// when called from multiple places to allow graph building //XXX there no longer is a graph
|
|
||||||
ctx = new MethodContext(execution);
|
|
||||||
nonStatic = method;
|
nonStatic = method;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,7 +56,6 @@ public class Frame
|
|||||||
stack = new Stack(code.getMaxStack());
|
stack = new Stack(code.getMaxStack());
|
||||||
variables = new Variables(code.getMaxLocals());
|
variables = new Variables(code.getMaxLocals());
|
||||||
|
|
||||||
ctx = new MethodContext(execution);
|
|
||||||
nonStatic = method;
|
nonStatic = method;
|
||||||
|
|
||||||
cur = i;
|
cur = i;
|
||||||
@@ -142,7 +139,6 @@ public class Frame
|
|||||||
this.cur = other.cur;
|
this.cur = other.cur;
|
||||||
this.stack = new Stack(other.stack);
|
this.stack = new Stack(other.stack);
|
||||||
this.variables = new Variables(other.variables);
|
this.variables = new Variables(other.variables);
|
||||||
this.ctx = other.ctx;
|
|
||||||
this.nonStatic = other.nonStatic;
|
this.nonStatic = other.nonStatic;
|
||||||
if (other.returnTo != null)
|
if (other.returnTo != null)
|
||||||
{
|
{
|
||||||
@@ -193,11 +189,6 @@ public class Frame
|
|||||||
{
|
{
|
||||||
return variables;
|
return variables;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MethodContext getMethodCtx()
|
|
||||||
{
|
|
||||||
return ctx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addInstructionContext(InstructionContext i)
|
public void addInstructionContext(InstructionContext i)
|
||||||
{
|
{
|
||||||
@@ -324,7 +315,7 @@ public class Frame
|
|||||||
assert to.getInstructions() == method.getCode().getInstructions();
|
assert to.getInstructions() == method.getCode().getInstructions();
|
||||||
assert method.getCode().getInstructions().getInstructions().contains(to);
|
assert method.getCode().getInstructions().getInstructions().contains(to);
|
||||||
|
|
||||||
if (ctx.hasJumped(from, to))
|
if (hasJumped(from, to))
|
||||||
{
|
{
|
||||||
executing = false;
|
executing = false;
|
||||||
return;
|
return;
|
||||||
@@ -332,4 +323,14 @@ public class Frame
|
|||||||
|
|
||||||
cur = to;
|
cur = to;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean hasJumped(InstructionContext from, Instruction to)
|
||||||
|
{
|
||||||
|
Collection<Instruction> i = visited.getCollection(from);
|
||||||
|
if (i != null && i.contains(to))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
visited.put(from, to);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,28 +0,0 @@
|
|||||||
package net.runelite.asm.execution;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import net.runelite.asm.attributes.code.Instruction;
|
|
||||||
import org.apache.commons.collections4.map.MultiValueMap;
|
|
||||||
|
|
||||||
public class MethodContext
|
|
||||||
{
|
|
||||||
private Execution execution;
|
|
||||||
private MultiValueMap<InstructionContext, Instruction> visited = new MultiValueMap<>();
|
|
||||||
|
|
||||||
public MethodContext(Execution execution)
|
|
||||||
{
|
|
||||||
this.execution = execution;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean hasJumped(InstructionContext from, Instruction to)
|
|
||||||
{
|
|
||||||
Collection<Instruction> i = visited.getCollection(from);
|
|
||||||
if (i != null && i.contains(to))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
visited.put(from, to);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user