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);
}
}