cache: remove script interpreter
It is unfinished and probably not something I want to complete soon
This commit is contained in:
@@ -1,98 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
|
||||||
|
|
||||||
public class Frame
|
|
||||||
{
|
|
||||||
private final Interpreter interpreter;
|
|
||||||
private final ScriptDefinition script;
|
|
||||||
private final Stack intStack;
|
|
||||||
private final Stack stringStack;
|
|
||||||
private final Variables intVariables;
|
|
||||||
private final Variables stringVariables;
|
|
||||||
|
|
||||||
private boolean running = true;
|
|
||||||
int pc;
|
|
||||||
|
|
||||||
public Frame(Interpreter interpreter, ScriptDefinition script)
|
|
||||||
{
|
|
||||||
this.interpreter = interpreter;
|
|
||||||
this.script = script;
|
|
||||||
this.intStack = new Stack();
|
|
||||||
this.stringStack = new Stack();
|
|
||||||
this.intVariables = new Variables(script.getLocalIntCount());
|
|
||||||
this.stringVariables = new Variables(script.getLocalStringCount());
|
|
||||||
}
|
|
||||||
|
|
||||||
public Frame(Interpreter interpreter, Frame other)
|
|
||||||
{
|
|
||||||
this.interpreter = interpreter;
|
|
||||||
this.script = other.script;
|
|
||||||
this.intStack = new Stack(other.intStack);
|
|
||||||
this.stringStack = new Stack(other.stringStack);
|
|
||||||
this.intVariables = new Variables(other.intVariables);
|
|
||||||
this.stringVariables = new Variables(other.stringVariables);
|
|
||||||
this.pc = other.pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Stack getIntStack()
|
|
||||||
{
|
|
||||||
return intStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Stack getStringStack()
|
|
||||||
{
|
|
||||||
return stringStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ScriptDefinition getScript()
|
|
||||||
{
|
|
||||||
return script;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Frame dup()
|
|
||||||
{
|
|
||||||
Frame frame = new Frame(interpreter, this);
|
|
||||||
interpreter.addFrame(this);
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isRunning()
|
|
||||||
{
|
|
||||||
return running;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void stop()
|
|
||||||
{
|
|
||||||
running = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void jump(int offset)
|
|
||||||
{
|
|
||||||
pc += offset + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.Instruction;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class GenericInstructionHandler extends InstructionHandler
|
|
||||||
{
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(GenericInstructionHandler.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Instruction i = ctx.getScriptInstruction().getInstruction();
|
|
||||||
Stack istack = frame.getIntStack();
|
|
||||||
Stack sstack = frame.getStringStack();
|
|
||||||
|
|
||||||
int ipops = i.getIntStackPops();
|
|
||||||
for (int j = 0; j < ipops; ++j)
|
|
||||||
{
|
|
||||||
StackContext value = istack.pop();
|
|
||||||
ctx.popsInt(value);
|
|
||||||
value.poppedBy(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spops = i.getStringStackPops();
|
|
||||||
for (int j = 0; j < spops; ++j)
|
|
||||||
{
|
|
||||||
StackContext value = sstack.pop();
|
|
||||||
ctx.popsString(value);
|
|
||||||
value.poppedBy(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ipushes = i.getIntStackPushes();
|
|
||||||
for (int j = 0; j < ipushes; ++j)
|
|
||||||
{
|
|
||||||
StackContext sctx = new StackContext(ctx, null);
|
|
||||||
istack.push(sctx);
|
|
||||||
ctx.pushesInt(sctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
int spushes = i.getStringStackPushes();
|
|
||||||
for (int j = 0; j < spushes; ++j)
|
|
||||||
{
|
|
||||||
StackContext sctx = new StackContext(ctx, null);
|
|
||||||
sstack.push(sctx);
|
|
||||||
ctx.pushesString(sctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ipushes > 0 || spushes > 0)
|
|
||||||
{
|
|
||||||
logger.debug("Executed instruction {} with {}/{} pushes!", i, ipushes, spushes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,101 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class InstructionContext
|
|
||||||
{
|
|
||||||
private final ScriptInstruction scriptInstruction;
|
|
||||||
|
|
||||||
private final List<StackContext> ipops = new ArrayList<>();
|
|
||||||
private final List<StackContext> spops = new ArrayList<>();
|
|
||||||
private final List<StackContext> ipushes = new ArrayList<>();
|
|
||||||
private final List<StackContext> spushes = new ArrayList<>();
|
|
||||||
|
|
||||||
public InstructionContext(ScriptInstruction scriptInstruction)
|
|
||||||
{
|
|
||||||
this.scriptInstruction = scriptInstruction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ScriptInstruction getScriptInstruction()
|
|
||||||
{
|
|
||||||
return scriptInstruction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void popsInt(StackContext... ctx)
|
|
||||||
{
|
|
||||||
for (StackContext s : ctx)
|
|
||||||
{
|
|
||||||
ipops.add(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void popsString(StackContext... ctx)
|
|
||||||
{
|
|
||||||
for (StackContext s : ctx)
|
|
||||||
{
|
|
||||||
spops.add(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void pushesInt(StackContext... ctx)
|
|
||||||
{
|
|
||||||
for (StackContext s : ctx)
|
|
||||||
{
|
|
||||||
ipushes.add(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void pushesString(StackContext... ctx)
|
|
||||||
{
|
|
||||||
for (StackContext s : ctx)
|
|
||||||
{
|
|
||||||
spushes.add(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StackContext> getIpops()
|
|
||||||
{
|
|
||||||
return ipops;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StackContext> getSpops()
|
|
||||||
{
|
|
||||||
return spops;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StackContext> getIpushes()
|
|
||||||
{
|
|
||||||
return ipushes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<StackContext> getSpushes()
|
|
||||||
{
|
|
||||||
return spushes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
public abstract class InstructionHandler
|
|
||||||
{
|
|
||||||
public abstract void execute(Frame frame, InstructionContext ctx);
|
|
||||||
}
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import net.runelite.cache.script.Opcodes;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpEQ;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpGE;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpGT;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpLE;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpLT;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.If_ICmpNE;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.Invoke;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.Jump;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.LoadInt;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.Return;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.StringAppend;
|
|
||||||
import net.runelite.cache.script.interpreter.instructions.Switch;
|
|
||||||
|
|
||||||
public class InstructionHandlers
|
|
||||||
{
|
|
||||||
private static final Map<Integer, InstructionHandler> handlers = new HashMap<>();
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
init();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void init()
|
|
||||||
{
|
|
||||||
add(Opcodes.LOAD_INT, new LoadInt());
|
|
||||||
add(Opcodes.JUMP, new Jump());
|
|
||||||
add(Opcodes.IF_ICMPNE, new If_ICmpNE());
|
|
||||||
add(Opcodes.IF_ICMPEQ, new If_ICmpEQ());
|
|
||||||
add(Opcodes.IF_ICMPLT, new If_ICmpLT());
|
|
||||||
add(Opcodes.IF_ICMPGT, new If_ICmpGT());
|
|
||||||
add(Opcodes.IF_ICMPLE, new If_ICmpLE());
|
|
||||||
add(Opcodes.IF_ICMPGE, new If_ICmpGE());
|
|
||||||
add(Opcodes.INVOKE, new Invoke());
|
|
||||||
add(Opcodes.RETURN, new Return());
|
|
||||||
add(Opcodes.SWITCH, new Switch());
|
|
||||||
add(Opcodes.STRING_APPEND, new StringAppend());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void add(int opcode, InstructionHandler handler)
|
|
||||||
{
|
|
||||||
assert handlers.containsKey(opcode) == false;
|
|
||||||
handlers.put(opcode, handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static InstructionHandler find(int opcode)
|
|
||||||
{
|
|
||||||
return handlers.get(opcode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.ArrayDeque;
|
|
||||||
import java.util.Queue;
|
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
|
||||||
import net.runelite.cache.script.Instruction;
|
|
||||||
import net.runelite.cache.script.Instructions;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class Interpreter
|
|
||||||
{
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(Interpreter.class);
|
|
||||||
|
|
||||||
private final Queue<Frame> frames = new ArrayDeque<>();
|
|
||||||
private final GenericInstructionHandler genericInstructionHandler = new GenericInstructionHandler();
|
|
||||||
|
|
||||||
public void run(ScriptDefinition script)
|
|
||||||
{
|
|
||||||
Instructions.init();
|
|
||||||
|
|
||||||
Frame frame = new Frame(this, script);
|
|
||||||
frames.add(frame);
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
while (!frames.isEmpty())
|
|
||||||
{
|
|
||||||
frame = frames.remove();
|
|
||||||
run(frame);
|
|
||||||
++count;
|
|
||||||
}
|
|
||||||
|
|
||||||
logger.info("Processed {} frames", count);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void run(Frame frame)
|
|
||||||
{
|
|
||||||
ScriptDefinition script = frame.getScript();
|
|
||||||
|
|
||||||
int[] instructions = script.getInstructions();
|
|
||||||
int[] iops = script.getIntOperands();
|
|
||||||
String[] sops = script.getStringOperands();
|
|
||||||
|
|
||||||
while (frame.isRunning())
|
|
||||||
{
|
|
||||||
if (frame.pc >= instructions.length)
|
|
||||||
{
|
|
||||||
throw new RuntimeException("PC went past end of instructions - maybe missing return");
|
|
||||||
}
|
|
||||||
|
|
||||||
int opcode = instructions[frame.pc];
|
|
||||||
int iop = iops[frame.pc];
|
|
||||||
String sop = sops[frame.pc];
|
|
||||||
|
|
||||||
Instruction i = Instructions.find(opcode);
|
|
||||||
if (i == null)
|
|
||||||
{
|
|
||||||
throw new RuntimeException("Unknown instruction " + opcode + " in script at pc " + frame.pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
ScriptInstruction scriptInstruction = new ScriptInstruction(frame.pc, i, iop, sop);
|
|
||||||
InstructionContext ctx = new InstructionContext(scriptInstruction);
|
|
||||||
|
|
||||||
InstructionHandler handler = InstructionHandlers.find(opcode);
|
|
||||||
if (handler == null)
|
|
||||||
{
|
|
||||||
handler = genericInstructionHandler;
|
|
||||||
}
|
|
||||||
|
|
||||||
int old = frame.pc;
|
|
||||||
|
|
||||||
handler.execute(frame, ctx);
|
|
||||||
|
|
||||||
if (old == frame.pc)
|
|
||||||
{
|
|
||||||
// not a jump
|
|
||||||
++frame.pc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addFrame(Frame frame)
|
|
||||||
{
|
|
||||||
frames.add(frame);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.Instruction;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* an instruction in a script
|
|
||||||
*
|
|
||||||
* @author Adam
|
|
||||||
*/
|
|
||||||
public class ScriptInstruction
|
|
||||||
{
|
|
||||||
private final int pc;
|
|
||||||
private final Instruction instruction;
|
|
||||||
private final int iop;
|
|
||||||
private final String sop;
|
|
||||||
|
|
||||||
public ScriptInstruction(int pc, Instruction instruction, int iop, String sop)
|
|
||||||
{
|
|
||||||
this.pc = pc;
|
|
||||||
this.instruction = instruction;
|
|
||||||
this.iop = iop;
|
|
||||||
this.sop = sop;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPc()
|
|
||||||
{
|
|
||||||
return pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Instruction getInstruction()
|
|
||||||
{
|
|
||||||
return instruction;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getIop()
|
|
||||||
{
|
|
||||||
return iop;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSop()
|
|
||||||
{
|
|
||||||
return sop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class Stack
|
|
||||||
{
|
|
||||||
private final List<StackContext> stack = new ArrayList<>();
|
|
||||||
|
|
||||||
public Stack()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public Stack(Stack other)
|
|
||||||
{
|
|
||||||
stack.addAll(other.stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void push(StackContext ctx)
|
|
||||||
{
|
|
||||||
stack.add(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
public StackContext pop()
|
|
||||||
{
|
|
||||||
if (stack.isEmpty())
|
|
||||||
{
|
|
||||||
throw new RuntimeException("stack underflow");
|
|
||||||
}
|
|
||||||
|
|
||||||
return stack.remove(stack.size() - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class StackContext
|
|
||||||
{
|
|
||||||
private final InstructionContext pushed;
|
|
||||||
private final List<InstructionContext> popped = new ArrayList<>();
|
|
||||||
private final Object value;
|
|
||||||
|
|
||||||
public StackContext(InstructionContext pushed, Object value)
|
|
||||||
{
|
|
||||||
assert value == null || value instanceof String || value instanceof Integer;
|
|
||||||
this.pushed = pushed;
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void poppedBy(InstructionContext ctx)
|
|
||||||
{
|
|
||||||
popped.add(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
public InstructionContext getPushed()
|
|
||||||
{
|
|
||||||
return pushed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<InstructionContext> getPopped()
|
|
||||||
{
|
|
||||||
return popped;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getValue()
|
|
||||||
{
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
public class VariableContext
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class Variables
|
|
||||||
{
|
|
||||||
private final VariableContext[] variables;
|
|
||||||
|
|
||||||
public Variables(int count)
|
|
||||||
{
|
|
||||||
variables = new VariableContext[count];
|
|
||||||
}
|
|
||||||
|
|
||||||
public Variables(Variables other)
|
|
||||||
{
|
|
||||||
variables = Arrays.copyOf(other.variables, other.variables.length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.Stack;
|
|
||||||
import net.runelite.cache.script.interpreter.StackContext;
|
|
||||||
|
|
||||||
public abstract class If extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public final void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Stack intStack = frame.getIntStack();
|
|
||||||
int iop = ctx.getScriptInstruction().getIop();
|
|
||||||
|
|
||||||
StackContext sctx1 = intStack.pop();
|
|
||||||
StackContext sctx2 = intStack.pop();
|
|
||||||
|
|
||||||
ctx.popsInt(sctx1, sctx2);
|
|
||||||
sctx1.poppedBy(ctx);
|
|
||||||
sctx2.poppedBy(ctx);
|
|
||||||
|
|
||||||
Frame dup = frame.dup();
|
|
||||||
dup.jump(iop);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
public class If_ICmpEQ extends If
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
public class If_ICmpGE extends If
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
public class If_ICmpGT extends If
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
public class If_ICmpLE extends If
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
public class If_ICmpLT extends If
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
public class If_ICmpNE extends If
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.ScriptInstruction;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
public class Invoke extends InstructionHandler
|
|
||||||
{
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(Invoke.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
ScriptInstruction scriptInstruction = ctx.getScriptInstruction();
|
|
||||||
|
|
||||||
int scriptToInvoke = scriptInstruction.getIop();
|
|
||||||
|
|
||||||
// copy new script's intStackCount/stringStackCount to the new LVT, and pop from caller's stack
|
|
||||||
|
|
||||||
logger.warn("Invoke not implemented yet");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
|
|
||||||
public class Jump extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
int iop = ctx.getScriptInstruction().getIop();
|
|
||||||
frame.jump(iop);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.Stack;
|
|
||||||
import net.runelite.cache.script.interpreter.StackContext;
|
|
||||||
|
|
||||||
public class LoadInt extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Stack intStack = frame.getIntStack();
|
|
||||||
int iop = ctx.getScriptInstruction().getIop();
|
|
||||||
|
|
||||||
StackContext sctx = new StackContext(ctx, iop);
|
|
||||||
ctx.pushesInt(sctx);
|
|
||||||
|
|
||||||
intStack.push(sctx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
|
|
||||||
public class Return extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
frame.stop();
|
|
||||||
|
|
||||||
// restore lvt from calling script. return value is on the stack.
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.ScriptInstruction;
|
|
||||||
import net.runelite.cache.script.interpreter.Stack;
|
|
||||||
import net.runelite.cache.script.interpreter.StackContext;
|
|
||||||
|
|
||||||
public class StringAppend extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Stack stringStack = frame.getStringStack();
|
|
||||||
ScriptInstruction scriptInstruction = ctx.getScriptInstruction();
|
|
||||||
int number = scriptInstruction.getIop();
|
|
||||||
|
|
||||||
for (int i = 0; i < number; ++i)
|
|
||||||
{
|
|
||||||
StackContext sctx = stringStack.pop();
|
|
||||||
ctx.popsString(sctx);
|
|
||||||
sctx.poppedBy(ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
// push appended string
|
|
||||||
StackContext sctx = new StackContext(ctx, null);
|
|
||||||
stringStack.push(sctx);
|
|
||||||
ctx.pushesString(sctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter.instructions;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
|
||||||
import net.runelite.cache.script.interpreter.Frame;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionContext;
|
|
||||||
import net.runelite.cache.script.interpreter.InstructionHandler;
|
|
||||||
import net.runelite.cache.script.interpreter.ScriptInstruction;
|
|
||||||
import net.runelite.cache.script.interpreter.Stack;
|
|
||||||
import net.runelite.cache.script.interpreter.StackContext;
|
|
||||||
|
|
||||||
public class Switch extends InstructionHandler
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void execute(Frame frame, InstructionContext ctx)
|
|
||||||
{
|
|
||||||
Stack intStack = frame.getIntStack();
|
|
||||||
ScriptInstruction scriptInstruction = ctx.getScriptInstruction();
|
|
||||||
ScriptDefinition script = frame.getScript();
|
|
||||||
int switchTableIndex = scriptInstruction.getIop();
|
|
||||||
|
|
||||||
// value -> pc
|
|
||||||
Map<Integer, Integer> switchTable = script.getSwitches()[switchTableIndex];
|
|
||||||
|
|
||||||
// pop value off stack
|
|
||||||
StackContext sctx = intStack.pop();
|
|
||||||
ctx.popsInt(sctx);
|
|
||||||
sctx.poppedBy(ctx);
|
|
||||||
|
|
||||||
// jump to targets
|
|
||||||
for (int target : switchTable.values())
|
|
||||||
{
|
|
||||||
Frame dup = frame.dup();
|
|
||||||
dup.jump(target);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2017, Adam <Adam@sigterm.info>
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
||||||
* list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
|
||||||
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
package net.runelite.cache.script.interpreter;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import net.runelite.cache.definitions.ScriptDefinition;
|
|
||||||
import net.runelite.cache.script.assembler.Assembler;
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
public class InterpreterTest
|
|
||||||
{
|
|
||||||
@Test
|
|
||||||
public void testRun() throws IOException
|
|
||||||
{
|
|
||||||
InputStream in = InterpreterTest.class.getResourceAsStream("397.rs2asm");
|
|
||||||
Assert.assertNotNull(in);
|
|
||||||
|
|
||||||
Assembler assembler = new Assembler();
|
|
||||||
ScriptDefinition script = assembler.assemble(in);
|
|
||||||
|
|
||||||
Interpreter interpreter = new Interpreter();
|
|
||||||
interpreter.run(script);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
.int_stack_count 3
|
|
||||||
.string_stack_count 0
|
|
||||||
.int_var_count 3
|
|
||||||
.string_var_count 0
|
|
||||||
iload 0
|
|
||||||
load_int 1
|
|
||||||
if_icmpne LABEL4
|
|
||||||
jump LABEL5
|
|
||||||
LABEL4:
|
|
||||||
return
|
|
||||||
LABEL5:
|
|
||||||
load_int 2871
|
|
||||||
load_int 1
|
|
||||||
load_int 0
|
|
||||||
3200
|
|
||||||
iload 1
|
|
||||||
load_int 1
|
|
||||||
if_icmpeq LABEL13
|
|
||||||
jump LABEL20
|
|
||||||
LABEL13:
|
|
||||||
get_varbit 3985
|
|
||||||
iload 2
|
|
||||||
iadd
|
|
||||||
load_int 4
|
|
||||||
modulo
|
|
||||||
set_varbit 3985
|
|
||||||
jump LABEL41
|
|
||||||
LABEL20:
|
|
||||||
iload 1
|
|
||||||
load_int 2
|
|
||||||
if_icmpeq LABEL24
|
|
||||||
jump LABEL31
|
|
||||||
LABEL24:
|
|
||||||
get_varbit 3986
|
|
||||||
iload 2
|
|
||||||
iadd
|
|
||||||
load_int 4
|
|
||||||
modulo
|
|
||||||
set_varbit 3986
|
|
||||||
jump LABEL41
|
|
||||||
LABEL31:
|
|
||||||
iload 1
|
|
||||||
load_int 3
|
|
||||||
if_icmpeq LABEL35
|
|
||||||
jump LABEL41
|
|
||||||
LABEL35:
|
|
||||||
get_varbit 3987
|
|
||||||
iload 2
|
|
||||||
iadd
|
|
||||||
load_int 4
|
|
||||||
modulo
|
|
||||||
set_varbit 3987
|
|
||||||
LABEL41:
|
|
||||||
return
|
|
||||||
Reference in New Issue
Block a user