public static ScriptInstruction Read(Script script, BinaryReader reader)
{
long offset = reader.BaseStream.Position;
ScriptOperand opcodeToken = new ScriptOperand(reader, ScriptArgument.Opcode);
if (!opcodeToken.IsOpcode)
{
return(new Invalid(script, offset, opcodeToken));
}
ScriptOpcode opcode = opcodeToken.GetOpcode();
switch (opcode)
{
case ScriptOpcode.Call: return(new Call(script, offset, reader));
case ScriptOpcode.Switch: return(new Switch(script, offset, reader));
case ScriptOpcode.If: return(new If(script, offset, reader));
default: return(new ScriptInstruction(script, offset, reader, opcode));
}
}