//! Operand schemas generated from Hermes BytecodeList.def source.
//! Source: facebook/hermes at verified version-specific commits.
//! Regenerate: bash tools/gen_opcodes.sh
#![allow(missing_docs, reason = "internal")]

use super::decode::OpType;

// v40: 158 opcodes (commit 01deee713)
pub const V40_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutGetterSetter",
        &[OpType::R, OpType::U4, OpType::R, OpType::R],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("Debugger", &[]),
    ("DebuggerCheckBreak", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V40_STRING_IDS: &[(u8, u8)] = &[
    (46, 0),
    (47, 3),
    (48, 3),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 2),
    (57, 2),
    (58, 2),
    (61, 2),
    (62, 2),
    (66, 1),
    (93, 1),
    (94, 1),
    (108, 2),
];
const V40_FUNC_IDS: &[(u8, u8)] = &[];

// v41: 162 opcodes (commit cbb5ee0c0)
pub const V41_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutGetterSetter",
        &[OpType::R, OpType::U4, OpType::R, OpType::R],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("Debugger", &[]),
    ("DebuggerCheckBreak", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V41_STRING_IDS: &[(u8, u8)] = &[
    (46, 0),
    (47, 3),
    (48, 3),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 2),
    (57, 2),
    (58, 2),
    (61, 2),
    (62, 2),
    (66, 1),
    (97, 1),
    (98, 1),
    (112, 2),
];
const V41_FUNC_IDS: &[(u8, u8)] = &[];

// v44: 163 opcodes (commit ea9d1bba9)
pub const V44_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutGetterSetter",
        &[OpType::R, OpType::U4, OpType::R, OpType::R],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("Debugger", &[]),
    ("DebuggerCheckBreak", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V44_STRING_IDS: &[(u8, u8)] = &[
    (47, 0),
    (48, 3),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 2),
    (58, 2),
    (59, 2),
    (62, 2),
    (63, 2),
    (67, 1),
    (98, 1),
    (99, 1),
    (113, 2),
];
const V44_FUNC_IDS: &[(u8, u8)] = &[];

// v45: 166 opcodes (commit c334f7467)
pub const V45_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("Debugger", &[]),
    ("DebuggerCheckBreak", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V45_STRING_IDS: &[(u8, u8)] = &[
    (47, 0),
    (48, 3),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 2),
    (58, 2),
    (59, 2),
    (60, 2),
    (61, 2),
    (65, 2),
    (66, 2),
    (101, 1),
    (102, 1),
    (116, 2),
];
const V45_FUNC_IDS: &[(u8, u8)] = &[];

// v46: 167 opcodes (commit 640e37f3d)
pub const V46_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("Debugger", &[]),
    ("DebuggerCheckBreak", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V46_STRING_IDS: &[(u8, u8)] = &[
    (48, 0),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 2),
    (59, 2),
    (60, 2),
    (61, 2),
    (62, 2),
    (66, 2),
    (67, 2),
    (102, 1),
    (103, 1),
    (117, 2),
];
const V46_FUNC_IDS: &[(u8, u8)] = &[];

// v52: 176 opcodes (commit fcf1a6b28)
pub const V52_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("Debugger", &[]),
    ("DebuggerCheckBreak", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V52_STRING_IDS: &[(u8, u8)] = &[
    (48, 0),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 2),
    (59, 2),
    (60, 2),
    (61, 2),
    (62, 2),
    (66, 2),
    (67, 2),
    (104, 1),
    (105, 1),
    (119, 2),
];
const V52_FUNC_IDS: &[(u8, u8)] = &[];

// v59: 177 opcodes (commit v0.1.0)
pub const V59_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfUndefinedInst", &[OpType::R]),
    ("Debugger", &[]),
    ("DebuggerCheckBreak", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V59_STRING_IDS: &[(u8, u8)] = &[
    (48, 0),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 2),
    (59, 2),
    (60, 2),
    (61, 2),
    (62, 2),
    (66, 2),
    (67, 2),
    (105, 1),
    (106, 1),
    (120, 2),
];
const V59_FUNC_IDS: &[(u8, u8)] = &[];

// v61: 177 opcodes (commit 2ea89f022)
pub const V61_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfUndefinedInst", &[OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V61_STRING_IDS: &[(u8, u8)] = &[
    (48, 0),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 2),
    (59, 2),
    (60, 2),
    (61, 2),
    (62, 2),
    (66, 2),
    (67, 2),
    (105, 1),
    (106, 1),
    (120, 2),
];
const V61_FUNC_IDS: &[(u8, u8)] = &[];

// v73: 180 opcodes (commit ecded4d4a)
pub const V73_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfUndefinedInst", &[OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V73_STRING_IDS: &[(u8, u8)] = &[
    (48, 0),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 2),
    (59, 2),
    (60, 2),
    (61, 2),
    (62, 2),
    (66, 2),
    (67, 2),
    (105, 1),
    (106, 1),
    (120, 2),
];
const V73_FUNC_IDS: &[(u8, u8)] = &[];

// v80: 181 opcodes (commit e70045d84)
pub const V80_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfUndefinedInst", &[OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V80_STRING_IDS: &[(u8, u8)] = &[
    (48, 0),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 2),
    (59, 2),
    (60, 2),
    (61, 2),
    (62, 2),
    (66, 2),
    (67, 2),
    (106, 1),
    (107, 1),
    (121, 2),
];
const V80_FUNC_IDS: &[(u8, u8)] = &[];

// v81: 185 opcodes (commit 7828e35c2)
pub const V81_SCHEMAS: &[(&str, &[OpType])] = &[
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("Unreachable", &[]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateAsyncClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateAsyncClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V81_STRING_IDS: &[(u8, u8)] = &[
    (48, 0),
    (49, 3),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 2),
    (59, 2),
    (60, 2),
    (61, 2),
    (62, 2),
    (66, 2),
    (67, 2),
    (109, 1),
    (110, 1),
    (125, 2),
];
const V81_FUNC_IDS: &[(u8, u8)] = &[];

// v83: 185 opcodes (commit 322ab5f90)
pub const V83_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateAsyncClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateAsyncClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V83_STRING_IDS: &[(u8, u8)] = &[
    (49, 0),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 3),
    (59, 2),
    (60, 2),
    (61, 2),
    (62, 2),
    (63, 2),
    (67, 2),
    (68, 2),
    (109, 1),
    (110, 1),
    (125, 2),
];
const V83_FUNC_IDS: &[(u8, u8)] = &[];

// v84: 199 opcodes (commit v0.9.0)
pub const V84_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateAsyncClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateAsyncClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("Add32", &[OpType::R, OpType::R, OpType::R]),
    ("Sub32", &[OpType::R, OpType::R, OpType::R]),
    ("Mul32", &[OpType::R, OpType::R, OpType::R]),
    ("Divi32", &[OpType::R, OpType::R, OpType::R]),
    ("Divu32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu32", &[OpType::R, OpType::R, OpType::R]),
    ("Store8", &[OpType::R, OpType::R, OpType::R]),
    ("Store16", &[OpType::R, OpType::R, OpType::R]),
    ("Store32", &[OpType::R, OpType::R, OpType::R]),
];
const V84_STRING_IDS: &[(u8, u8)] = &[
    (49, 0),
    (50, 3),
    (51, 3),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 3),
    (59, 2),
    (60, 2),
    (61, 2),
    (62, 2),
    (63, 2),
    (67, 2),
    (68, 2),
    (109, 1),
    (110, 1),
    (125, 2),
];
const V84_FUNC_IDS: &[(u8, u8)] = &[];

// v85: 201 opcodes (commit b74eb2d5b)
pub const V85_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("Inc", &[OpType::R, OpType::R]),
    ("Dec", &[OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateAsyncClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateAsyncClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("Add32", &[OpType::R, OpType::R, OpType::R]),
    ("Sub32", &[OpType::R, OpType::R, OpType::R]),
    ("Mul32", &[OpType::R, OpType::R, OpType::R]),
    ("Divi32", &[OpType::R, OpType::R, OpType::R]),
    ("Divu32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu32", &[OpType::R, OpType::R, OpType::R]),
    ("Store8", &[OpType::R, OpType::R, OpType::R]),
    ("Store16", &[OpType::R, OpType::R, OpType::R]),
    ("Store32", &[OpType::R, OpType::R, OpType::R]),
];
const V85_STRING_IDS: &[(u8, u8)] = &[
    (51, 0),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 3),
    (59, 3),
    (60, 3),
    (61, 2),
    (62, 2),
    (63, 2),
    (64, 2),
    (65, 2),
    (69, 2),
    (70, 2),
    (111, 1),
    (112, 1),
    (127, 2),
];
const V85_FUNC_IDS: &[(u8, u8)] = &[];

// v87: 204 opcodes (commit 41752c658)
pub const V87_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("Inc", &[OpType::R, OpType::R]),
    ("Dec", &[OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateAsyncClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateAsyncClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstBigInt", &[OpType::R, OpType::U2]),
    ("LoadConstBigIntLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToNumeric", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("Add32", &[OpType::R, OpType::R, OpType::R]),
    ("Sub32", &[OpType::R, OpType::R, OpType::R]),
    ("Mul32", &[OpType::R, OpType::R, OpType::R]),
    ("Divi32", &[OpType::R, OpType::R, OpType::R]),
    ("Divu32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu32", &[OpType::R, OpType::R, OpType::R]),
    ("Store8", &[OpType::R, OpType::R, OpType::R]),
    ("Store16", &[OpType::R, OpType::R, OpType::R]),
    ("Store32", &[OpType::R, OpType::R, OpType::R]),
];
const V87_STRING_IDS: &[(u8, u8)] = &[
    (51, 0),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 3),
    (59, 3),
    (60, 3),
    (61, 2),
    (62, 2),
    (63, 2),
    (64, 2),
    (65, 2),
    (69, 2),
    (70, 2),
    (113, 1),
    (114, 1),
    (130, 2),
];
const V87_FUNC_IDS: &[(u8, u8)] = &[];

// v90: 206 opcodes (commit 906b5cff3)
pub const V90_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("Inc", &[OpType::R, OpType::R]),
    ("Dec", &[OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateAsyncClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateAsyncClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstBigInt", &[OpType::R, OpType::U2]),
    ("LoadConstBigIntLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToNumeric", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    (
        "GetArgumentsPropByValLoose",
        &[OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetArgumentsPropByValStrict",
        &[OpType::R, OpType::R, OpType::R],
    ),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArgumentsStrict", &[OpType::R]),
    ("ReifyArgumentsLoose", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("Add32", &[OpType::R, OpType::R, OpType::R]),
    ("Sub32", &[OpType::R, OpType::R, OpType::R]),
    ("Mul32", &[OpType::R, OpType::R, OpType::R]),
    ("Divi32", &[OpType::R, OpType::R, OpType::R]),
    ("Divu32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu32", &[OpType::R, OpType::R, OpType::R]),
    ("Store8", &[OpType::R, OpType::R, OpType::R]),
    ("Store16", &[OpType::R, OpType::R, OpType::R]),
    ("Store32", &[OpType::R, OpType::R, OpType::R]),
];
const V90_STRING_IDS: &[(u8, u8)] = &[
    (51, 0),
    (52, 3),
    (53, 3),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 3),
    (59, 3),
    (60, 3),
    (61, 2),
    (62, 2),
    (63, 2),
    (64, 2),
    (65, 2),
    (69, 2),
    (70, 2),
    (113, 1),
    (114, 1),
    (132, 2),
];
const V90_FUNC_IDS: &[(u8, u8)] = &[
    (80, 2),
    (98, 2),
    (99, 2),
    (100, 2),
    (101, 2),
    (102, 2),
    (103, 2),
    (137, 2),
    (138, 2),
];

// v92: 206 opcodes (commit b544ff4a5)
pub const V92_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("Inc", &[OpType::R, OpType::R]),
    ("Dec", &[OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    (
        "CreateInnerEnvironment",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("DeclareGlobalVar", &[OpType::U4]),
    ("ThrowIfHasRestrictedGlobalProperty", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateAsyncClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateAsyncClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstBigInt", &[OpType::R, OpType::U2]),
    ("LoadConstBigIntLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToNumeric", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("Add32", &[OpType::R, OpType::R, OpType::R]),
    ("Sub32", &[OpType::R, OpType::R, OpType::R]),
    ("Mul32", &[OpType::R, OpType::R, OpType::R]),
    ("Divi32", &[OpType::R, OpType::R, OpType::R]),
    ("Divu32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu32", &[OpType::R, OpType::R, OpType::R]),
    ("Store8", &[OpType::R, OpType::R, OpType::R]),
    ("Store16", &[OpType::R, OpType::R, OpType::R]),
    ("Store32", &[OpType::R, OpType::R, OpType::R]),
];
const V92_STRING_IDS: &[(u8, u8)] = &[
    (52, 0),
    (53, 0),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 3),
    (59, 3),
    (60, 3),
    (61, 3),
    (62, 3),
    (63, 2),
    (64, 2),
    (65, 2),
    (66, 2),
    (67, 2),
    (71, 2),
    (72, 2),
    (115, 1),
    (116, 1),
    (132, 2),
];
const V92_FUNC_IDS: &[(u8, u8)] = &[
    (82, 2),
    (100, 2),
    (101, 2),
    (102, 2),
    (103, 2),
    (104, 2),
    (105, 2),
    (137, 2),
    (138, 2),
];

// v95: 206 opcodes (commit f6b56d334)
pub const V95_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    (
        "NewObjectWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("Inc", &[OpType::R, OpType::R]),
    ("Dec", &[OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetEnvironment", &[OpType::R, OpType::U1]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateEnvironment", &[OpType::R]),
    (
        "CreateInnerEnvironment",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("DeclareGlobalVar", &[OpType::U4]),
    ("ThrowIfHasRestrictedGlobalProperty", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "PutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelById", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("PutByVal", &[OpType::R, OpType::R, OpType::R]),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    ("CallDirect", &[OpType::R, OpType::U1, OpType::U2]),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    ("CallLong", &[OpType::R, OpType::R, OpType::U4]),
    ("ConstructLong", &[OpType::R, OpType::R, OpType::U4]),
    ("CallDirectLongIndex", &[OpType::R, OpType::U1, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R, OpType::U1]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateGeneratorClosure",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateGeneratorClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateAsyncClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateAsyncClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstBigInt", &[OpType::R, OpType::U2]),
    ("LoadConstBigIntLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToNumeric", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("GetArgumentsPropByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArguments", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("StartGenerator", &[]),
    ("ResumeGenerator", &[OpType::R, OpType::R]),
    ("CompleteGenerator", &[]),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("SaveGenerator", &[OpType::A1]),
    ("SaveGeneratorLong", &[OpType::A4]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("Add32", &[OpType::R, OpType::R, OpType::R]),
    ("Sub32", &[OpType::R, OpType::R, OpType::R]),
    ("Mul32", &[OpType::R, OpType::R, OpType::R]),
    ("Divi32", &[OpType::R, OpType::R, OpType::R]),
    ("Divu32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu8", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu16", &[OpType::R, OpType::R, OpType::R]),
    ("Loadi32", &[OpType::R, OpType::R, OpType::R]),
    ("Loadu32", &[OpType::R, OpType::R, OpType::R]),
    ("Store8", &[OpType::R, OpType::R, OpType::R]),
    ("Store16", &[OpType::R, OpType::R, OpType::R]),
    ("Store32", &[OpType::R, OpType::R, OpType::R]),
];
const V95_STRING_IDS: &[(u8, u8)] = &[
    (52, 0),
    (53, 0),
    (54, 3),
    (55, 3),
    (56, 3),
    (57, 3),
    (58, 3),
    (59, 3),
    (60, 3),
    (61, 3),
    (62, 3),
    (63, 2),
    (64, 2),
    (65, 2),
    (66, 2),
    (67, 2),
    (71, 2),
    (72, 2),
    (115, 1),
    (116, 1),
    (132, 2),
];
const V95_FUNC_IDS: &[(u8, u8)] = &[
    (82, 2),
    (100, 2),
    (101, 2),
    (102, 2),
    (103, 2),
    (104, 2),
    (105, 2),
    (137, 2),
    (138, 2),
];

// v97: 197 opcodes (commit 16b5ada82)
pub const V97_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    ("NewObjectWithBuffer", &[OpType::R, OpType::U2, OpType::U2]),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("AddS", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("Inc", &[OpType::R, OpType::R]),
    ("Dec", &[OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetParentEnvironment", &[OpType::R, OpType::U1]),
    ("GetEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("GetClosureEnvironment", &[OpType::R, OpType::R]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateFunctionEnvironment", &[OpType::R, OpType::U1]),
    ("CreateTopLevelEnvironment", &[OpType::R, OpType::U4]),
    ("CreateEnvironment", &[OpType::R, OpType::R, OpType::U4]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "PutByIdLoose",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "PutByIdStrict",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "PutByIdLooseLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "PutByIdStrictLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutByIdLoose",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdStrict",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLooseLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutByIdStrictLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnBySlotIdx", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnBySlotIdxLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelByIdLoose", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdStrict", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLooseLong", &[OpType::R, OpType::R, OpType::U4]),
    ("DelByIdStrictLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutByValLoose", &[OpType::R, OpType::R, OpType::R]),
    ("PutByValStrict", &[OpType::R, OpType::R, OpType::R]),
    ("DelByValLoose", &[OpType::R, OpType::R, OpType::R]),
    ("DelByValStrict", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    (
        "CallWithNewTarget",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    (
        "CallWithNewTargetLong",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R, OpType::U1]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstBigInt", &[OpType::R, OpType::U2]),
    ("LoadConstBigIntLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToNumeric", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    (
        "GetArgumentsPropByValLoose",
        &[OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetArgumentsPropByValStrict",
        &[OpType::R, OpType::R, OpType::R],
    ),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArgumentsStrict", &[OpType::R]),
    ("ReifyArgumentsLoose", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V97_STRING_IDS: &[(u8, u8)] = &[
    (56, 0),
    (57, 3),
    (58, 3),
    (59, 3),
    (60, 3),
    (61, 3),
    (62, 3),
    (63, 3),
    (64, 3),
    (65, 3),
    (66, 3),
    (67, 3),
    (68, 3),
    (69, 3),
    (70, 2),
    (71, 2),
    (72, 2),
    (75, 2),
    (76, 2),
    (80, 2),
    (81, 2),
    (82, 2),
    (83, 2),
    (123, 1),
    (124, 1),
    (142, 2),
];
const V97_FUNC_IDS: &[(u8, u8)] = &[(112, 2), (113, 2), (144, 2), (145, 2)];

// v98: 201 opcodes (commit c00cc5759)
pub const V98_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    ("NewObjectWithBuffer", &[OpType::R, OpType::U2, OpType::U2]),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("AddS", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("Inc", &[OpType::R, OpType::R]),
    ("Dec", &[OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("GetParentEnvironment", &[OpType::R, OpType::U1]),
    ("GetEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("GetClosureEnvironment", &[OpType::R, OpType::R]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("CreateFunctionEnvironment", &[OpType::R, OpType::U1]),
    ("CreateTopLevelEnvironment", &[OpType::R, OpType::U4]),
    ("CreateEnvironment", &[OpType::R, OpType::R, OpType::U4]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "PutByIdLoose",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "PutByIdStrict",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "PutByIdLooseLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "PutByIdStrictLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutByIdLoose",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdStrict",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLooseLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutByIdStrictLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutNewOwnByIdShort", &[OpType::R, OpType::R, OpType::U1]),
    ("PutNewOwnById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnBySlotIdx", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnBySlotIdxLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetOwnBySlotIdx", &[OpType::R, OpType::R, OpType::U1]),
    ("GetOwnBySlotIdxLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutNewOwnNEById", &[OpType::R, OpType::R, OpType::U2]),
    ("PutNewOwnNEByIdLong", &[OpType::R, OpType::R, OpType::U4]),
    ("PutOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    (
        "PutOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelByIdLoose", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdStrict", &[OpType::R, OpType::R, OpType::U2]),
    ("DelByIdLooseLong", &[OpType::R, OpType::R, OpType::U4]),
    ("DelByIdStrictLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("PutByValLoose", &[OpType::R, OpType::R, OpType::R]),
    ("PutByValStrict", &[OpType::R, OpType::R, OpType::R]),
    ("DelByValLoose", &[OpType::R, OpType::R, OpType::R]),
    ("DelByValStrict", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    (
        "CallWithNewTarget",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    (
        "CallWithNewTargetLong",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R, OpType::U1]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThis", &[OpType::R, OpType::R, OpType::R]),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstBigInt", &[OpType::R, OpType::U2]),
    ("LoadConstBigIntLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToNumeric", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    (
        "GetArgumentsPropByValLoose",
        &[OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetArgumentsPropByValStrict",
        &[OpType::R, OpType::R, OpType::R],
    ),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArgumentsStrict", &[OpType::R]),
    ("ReifyArgumentsLoose", &[OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "SwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("TypedLoadParent", &[OpType::R, OpType::R]),
    ("TypedStoreParent", &[OpType::R, OpType::R]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
];
const V98_STRING_IDS: &[(u8, u8)] = &[
    (56, 0),
    (57, 3),
    (58, 3),
    (59, 3),
    (60, 3),
    (61, 3),
    (62, 3),
    (63, 3),
    (64, 3),
    (65, 3),
    (66, 3),
    (67, 3),
    (68, 3),
    (69, 3),
    (70, 2),
    (71, 2),
    (72, 2),
    (77, 2),
    (78, 2),
    (82, 2),
    (83, 2),
    (84, 2),
    (85, 2),
    (125, 1),
    (126, 1),
    (144, 2),
];
const V98_FUNC_IDS: &[(u8, u8)] = &[(114, 2), (115, 2), (146, 2), (147, 2)];

// v99: 220 opcodes (commit 913d31acd)
pub const V99_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    ("NewObjectWithBuffer", &[OpType::R, OpType::U2, OpType::U2]),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U4, OpType::U4],
    ),
    (
        "NewObjectWithBufferAndParent",
        &[OpType::R, OpType::R, OpType::U4, OpType::U4],
    ),
    (
        "NewTypedObjectWithBuffer",
        &[OpType::R, OpType::R, OpType::U4, OpType::U4, OpType::U1],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("NewFastArray", &[OpType::R, OpType::U2]),
    ("FastArrayLength", &[OpType::R, OpType::R]),
    ("FastArrayLoad", &[OpType::R, OpType::R, OpType::R]),
    ("FastArrayStore", &[OpType::R, OpType::R, OpType::R]),
    ("FastArrayPush", &[OpType::R, OpType::R]),
    ("FastArrayAppend", &[OpType::R, OpType::R]),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("AddS", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("Inc", &[OpType::R, OpType::R]),
    ("Dec", &[OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("PrivateIsIn", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    ("TypeOfIs", &[OpType::R, OpType::R, OpType::U2]),
    ("GetParentEnvironment", &[OpType::R, OpType::U1]),
    ("GetEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("GetClosureEnvironment", &[OpType::R, OpType::R]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("LoadParentNoTraps", &[OpType::R, OpType::R]),
    ("CreateFunctionEnvironment", &[OpType::R, OpType::U1]),
    ("CreateTopLevelEnvironment", &[OpType::R, OpType::U4]),
    ("CreateEnvironment", &[OpType::R, OpType::R, OpType::U4]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "GetByIdWithReceiverLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::R, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "PutByIdLoose",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "PutByIdStrict",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "PutByIdLooseLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "PutByIdStrictLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutByIdLoose",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdStrict",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLooseLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutByIdStrictLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutOwnBySlotIdx", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnBySlotIdxLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetOwnBySlotIdx", &[OpType::R, OpType::R, OpType::U1]),
    ("GetOwnBySlotIdxLong", &[OpType::R, OpType::R, OpType::U4]),
    (
        "DefineOwnById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "DefineOwnByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("DefineOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("DefineOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    ("DefineOwnInDenseArray", &[OpType::R, OpType::R, OpType::U1]),
    (
        "DefineOwnInDenseArrayL",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "DefineOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetByIndex", &[OpType::R, OpType::R, OpType::U1]),
    (
        "GetByValWithReceiver",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("PutByValLoose", &[OpType::R, OpType::R, OpType::R]),
    ("PutByValStrict", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutByValWithReceiver",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R, OpType::U1]),
    ("AddOwnPrivateBySym", &[OpType::R, OpType::R, OpType::R]),
    (
        "GetOwnPrivateBySym",
        &[OpType::R, OpType::R, OpType::U1, OpType::R],
    ),
    (
        "PutOwnPrivateBySym",
        &[OpType::R, OpType::R, OpType::U1, OpType::R],
    ),
    (
        "DefineOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    (
        "CallWithNewTarget",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    (
        "CallWithNewTargetLong",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("CallRequire", &[OpType::R, OpType::R, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R, OpType::U1]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("ThrowIfUndefined", &[OpType::R, OpType::R]),
    ("ThrowIfThisInitialized", &[OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    (
        "CreateBaseClass",
        &[OpType::R, OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateBaseClassLongIndex",
        &[OpType::R, OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateDerivedClass",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateDerivedClassLongIndex",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThisForNew", &[OpType::R, OpType::R, OpType::U1]),
    (
        "CreateThisForSuper",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstBigInt", &[OpType::R, OpType::U2]),
    ("LoadConstBigIntLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToNumeric", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("ToUint32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("CreatePrivateName", &[OpType::R, OpType::U4]),
    (
        "GetArgumentsPropByValLoose",
        &[OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetArgumentsPropByValStrict",
        &[OpType::R, OpType::R, OpType::R],
    ),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArgumentsStrict", &[OpType::R]),
    ("ReifyArgumentsLoose", &[OpType::R]),
    ("ToPropertyKey", &[OpType::R, OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "UIntSwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    (
        "StringSwitchImm",
        &[OpType::R, OpType::U4, OpType::U4, OpType::A4, OpType::U4],
    ),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("TypedLoadParent", &[OpType::R, OpType::R]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("JmpTypeOfIs", &[OpType::A4, OpType::R, OpType::U2]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JmpBuiltinIs", &[OpType::A1, OpType::U1, OpType::R]),
    ("JmpBuiltinIsLong", &[OpType::A4, OpType::U1, OpType::R]),
    ("JmpBuiltinIsNot", &[OpType::A1, OpType::U1, OpType::R]),
    ("JmpBuiltinIsNotLong", &[OpType::A4, OpType::U1, OpType::R]),
];
const V99_STRING_IDS: &[(u8, u8)] = &[
    (67, 0),
    (68, 3),
    (69, 3),
    (70, 3),
    (71, 4),
    (72, 3),
    (73, 3),
    (74, 3),
    (75, 3),
    (76, 3),
    (77, 3),
    (78, 3),
    (79, 3),
    (80, 3),
    (81, 3),
    (87, 3),
    (144, 1),
    (145, 1),
    (159, 1),
    (166, 2),
];
const V99_FUNC_IDS: &[(u8, u8)] = &[(132, 2), (133, 2), (169, 2), (170, 2)];

// v98L: 219 opcodes (commit fbd342ebb)
pub const V98L_SCHEMAS: &[(&str, &[OpType])] = &[
    ("Unreachable", &[]),
    ("NewObjectWithBuffer", &[OpType::R, OpType::U2, OpType::U2]),
    (
        "NewObjectWithBufferLong",
        &[OpType::R, OpType::U4, OpType::U4],
    ),
    (
        "NewObjectWithBufferAndParent",
        &[OpType::R, OpType::R, OpType::U4, OpType::U4],
    ),
    ("NewObject", &[OpType::R]),
    ("NewObjectWithParent", &[OpType::R, OpType::R]),
    (
        "NewArrayWithBuffer",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U2],
    ),
    (
        "NewArrayWithBufferLong",
        &[OpType::R, OpType::U2, OpType::U2, OpType::U4],
    ),
    ("NewArray", &[OpType::R, OpType::U2]),
    ("NewFastArray", &[OpType::R, OpType::U2]),
    ("FastArrayLength", &[OpType::R, OpType::R]),
    ("FastArrayLoad", &[OpType::R, OpType::R, OpType::R]),
    ("FastArrayStore", &[OpType::R, OpType::R, OpType::R]),
    ("FastArrayPush", &[OpType::R, OpType::R]),
    ("FastArrayAppend", &[OpType::R, OpType::R]),
    (
        "CacheNewObject",
        &[OpType::R, OpType::R, OpType::U4, OpType::U1],
    ),
    ("Mov", &[OpType::R, OpType::R]),
    ("MovLong", &[OpType::R4, OpType::R4]),
    ("Negate", &[OpType::R, OpType::R]),
    ("Not", &[OpType::R, OpType::R]),
    ("BitNot", &[OpType::R, OpType::R]),
    ("TypeOf", &[OpType::R, OpType::R]),
    ("Eq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictEq", &[OpType::R, OpType::R, OpType::R]),
    ("Neq", &[OpType::R, OpType::R, OpType::R]),
    ("StrictNeq", &[OpType::R, OpType::R, OpType::R]),
    ("Less", &[OpType::R, OpType::R, OpType::R]),
    ("LessEq", &[OpType::R, OpType::R, OpType::R]),
    ("Greater", &[OpType::R, OpType::R, OpType::R]),
    ("GreaterEq", &[OpType::R, OpType::R, OpType::R]),
    ("Add", &[OpType::R, OpType::R, OpType::R]),
    ("AddN", &[OpType::R, OpType::R, OpType::R]),
    ("AddS", &[OpType::R, OpType::R, OpType::R]),
    ("Mul", &[OpType::R, OpType::R, OpType::R]),
    ("MulN", &[OpType::R, OpType::R, OpType::R]),
    ("Div", &[OpType::R, OpType::R, OpType::R]),
    ("DivN", &[OpType::R, OpType::R, OpType::R]),
    ("Mod", &[OpType::R, OpType::R, OpType::R]),
    ("Sub", &[OpType::R, OpType::R, OpType::R]),
    ("SubN", &[OpType::R, OpType::R, OpType::R]),
    ("LShift", &[OpType::R, OpType::R, OpType::R]),
    ("RShift", &[OpType::R, OpType::R, OpType::R]),
    ("URshift", &[OpType::R, OpType::R, OpType::R]),
    ("BitAnd", &[OpType::R, OpType::R, OpType::R]),
    ("BitXor", &[OpType::R, OpType::R, OpType::R]),
    ("BitOr", &[OpType::R, OpType::R, OpType::R]),
    ("Inc", &[OpType::R, OpType::R]),
    ("Dec", &[OpType::R, OpType::R]),
    ("InstanceOf", &[OpType::R, OpType::R, OpType::R]),
    ("IsIn", &[OpType::R, OpType::R, OpType::R]),
    ("PrivateIsIn", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    ("TypeOfIs", &[OpType::R, OpType::R, OpType::U2]),
    ("GetParentEnvironment", &[OpType::R, OpType::U1]),
    ("GetEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("GetClosureEnvironment", &[OpType::R, OpType::R]),
    ("StoreToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("StoreNPToEnvironment", &[OpType::R, OpType::U1, OpType::R]),
    ("StoreNPToEnvironmentL", &[OpType::R, OpType::U2, OpType::R]),
    ("LoadFromEnvironment", &[OpType::R, OpType::R, OpType::U1]),
    ("LoadFromEnvironmentL", &[OpType::R, OpType::R, OpType::U2]),
    ("GetGlobalObject", &[OpType::R]),
    ("GetNewTarget", &[OpType::R]),
    ("LoadParentNoTraps", &[OpType::R, OpType::R]),
    ("CreateFunctionEnvironment", &[OpType::R, OpType::U1]),
    ("CreateTopLevelEnvironment", &[OpType::R, OpType::U4]),
    ("CreateEnvironment", &[OpType::R, OpType::R, OpType::U4]),
    ("DeclareGlobalVar", &[OpType::U4]),
    (
        "GetByIdShort",
        &[OpType::R, OpType::R, OpType::U1, OpType::U1],
    ),
    ("GetById", &[OpType::R, OpType::R, OpType::U1, OpType::U2]),
    (
        "GetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "GetByIdWithReceiverLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::R, OpType::U4],
    ),
    (
        "TryGetById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryGetByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "PutByIdLoose",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "PutByIdStrict",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "PutByIdLooseLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "PutByIdStrictLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutByIdLoose",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdStrict",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "TryPutByIdLooseLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    (
        "TryPutByIdStrictLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("PutOwnBySlotIdx", &[OpType::R, OpType::R, OpType::U1]),
    ("PutOwnBySlotIdxLong", &[OpType::R, OpType::R, OpType::U4]),
    ("GetOwnBySlotIdx", &[OpType::R, OpType::R, OpType::U1]),
    ("GetOwnBySlotIdxLong", &[OpType::R, OpType::R, OpType::U4]),
    (
        "DefineOwnById",
        &[OpType::R, OpType::R, OpType::U1, OpType::U2],
    ),
    (
        "DefineOwnByIdLong",
        &[OpType::R, OpType::R, OpType::U1, OpType::U4],
    ),
    ("DefineOwnByIndex", &[OpType::R, OpType::R, OpType::U1]),
    ("DefineOwnByIndexL", &[OpType::R, OpType::R, OpType::U4]),
    ("DefineOwnInDenseArray", &[OpType::R, OpType::R, OpType::U1]),
    (
        "DefineOwnInDenseArrayL",
        &[OpType::R, OpType::R, OpType::U2],
    ),
    (
        "DefineOwnByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("GetByVal", &[OpType::R, OpType::R, OpType::R]),
    ("GetByIndex", &[OpType::R, OpType::R, OpType::U1]),
    (
        "GetByValWithReceiver",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("PutByValLoose", &[OpType::R, OpType::R, OpType::R]),
    ("PutByValStrict", &[OpType::R, OpType::R, OpType::R]),
    (
        "PutByValWithReceiver",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("DelByVal", &[OpType::R, OpType::R, OpType::R, OpType::U1]),
    ("AddOwnPrivateBySym", &[OpType::R, OpType::R, OpType::R]),
    (
        "GetOwnPrivateBySym",
        &[OpType::R, OpType::R, OpType::U1, OpType::R],
    ),
    (
        "PutOwnPrivateBySym",
        &[OpType::R, OpType::R, OpType::U1, OpType::R],
    ),
    (
        "DefineOwnGetterSetterByVal",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    (
        "GetPNameList",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetNextPName",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("Call", &[OpType::R, OpType::R, OpType::U1]),
    ("Construct", &[OpType::R, OpType::R, OpType::U1]),
    ("Call1", &[OpType::R, OpType::R, OpType::R]),
    (
        "CallWithNewTarget",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("Call2", &[OpType::R, OpType::R, OpType::R, OpType::R]),
    (
        "Call3",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    (
        "Call4",
        &[
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
            OpType::R,
        ],
    ),
    (
        "CallWithNewTargetLong",
        &[OpType::R, OpType::R, OpType::R, OpType::R],
    ),
    ("CallRequire", &[OpType::R, OpType::R, OpType::U4]),
    ("CallBuiltin", &[OpType::R, OpType::U1, OpType::U1]),
    ("CallBuiltinLong", &[OpType::R, OpType::U1, OpType::U4]),
    ("GetBuiltinClosure", &[OpType::R, OpType::U1]),
    ("Ret", &[OpType::R]),
    ("Catch", &[OpType::R]),
    ("DirectEval", &[OpType::R, OpType::R, OpType::U1]),
    ("Throw", &[OpType::R]),
    ("ThrowIfEmpty", &[OpType::R, OpType::R]),
    ("ThrowIfUndefined", &[OpType::R, OpType::R]),
    ("ThrowIfThisInitialized", &[OpType::R]),
    ("Debugger", &[]),
    ("AsyncBreakCheck", &[]),
    ("ProfilePoint", &[OpType::U2]),
    (
        "CreateBaseClass",
        &[OpType::R, OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateBaseClassLongIndex",
        &[OpType::R, OpType::R, OpType::R, OpType::U4],
    ),
    (
        "CreateDerivedClass",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U2],
    ),
    (
        "CreateDerivedClassLongIndex",
        &[OpType::R, OpType::R, OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateClosure", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateClosureLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("CreateThisForNew", &[OpType::R, OpType::R, OpType::U1]),
    (
        "CreateThisForSuper",
        &[OpType::R, OpType::R, OpType::R, OpType::U1],
    ),
    ("SelectObject", &[OpType::R, OpType::R, OpType::R]),
    ("LoadParam", &[OpType::R, OpType::U1]),
    ("LoadParamLong", &[OpType::R, OpType::U4]),
    ("LoadConstUInt8", &[OpType::R, OpType::U1]),
    ("LoadConstInt", &[OpType::R, OpType::I4]),
    ("LoadConstDouble", &[OpType::R, OpType::D]),
    ("LoadConstBigInt", &[OpType::R, OpType::U2]),
    ("LoadConstBigIntLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstString", &[OpType::R, OpType::U2]),
    ("LoadConstStringLongIndex", &[OpType::R, OpType::U4]),
    ("LoadConstEmpty", &[OpType::R]),
    ("LoadConstUndefined", &[OpType::R]),
    ("LoadConstNull", &[OpType::R]),
    ("LoadConstTrue", &[OpType::R]),
    ("LoadConstFalse", &[OpType::R]),
    ("LoadConstZero", &[OpType::R]),
    ("CoerceThisNS", &[OpType::R, OpType::R]),
    ("LoadThisNS", &[OpType::R]),
    ("ToNumber", &[OpType::R, OpType::R]),
    ("ToNumeric", &[OpType::R, OpType::R]),
    ("ToInt32", &[OpType::R, OpType::R]),
    ("AddEmptyString", &[OpType::R, OpType::R]),
    ("CreatePrivateName", &[OpType::R, OpType::U4]),
    (
        "GetArgumentsPropByValLoose",
        &[OpType::R, OpType::R, OpType::R],
    ),
    (
        "GetArgumentsPropByValStrict",
        &[OpType::R, OpType::R, OpType::R],
    ),
    ("GetArgumentsLength", &[OpType::R, OpType::R]),
    ("ReifyArgumentsStrict", &[OpType::R]),
    ("ReifyArgumentsLoose", &[OpType::R]),
    ("ToPropertyKey", &[OpType::R, OpType::R]),
    (
        "CreateRegExp",
        &[OpType::R, OpType::U4, OpType::U4, OpType::U4],
    ),
    (
        "UIntSwitchImm",
        &[OpType::R, OpType::U4, OpType::A4, OpType::U4, OpType::U4],
    ),
    (
        "StringSwitchImm",
        &[OpType::R, OpType::U4, OpType::U4, OpType::A4, OpType::U4],
    ),
    ("CreateGenerator", &[OpType::R, OpType::R, OpType::U2]),
    (
        "CreateGeneratorLongIndex",
        &[OpType::R, OpType::R, OpType::U4],
    ),
    ("IteratorBegin", &[OpType::R, OpType::R]),
    ("IteratorNext", &[OpType::R, OpType::R, OpType::R]),
    ("IteratorClose", &[OpType::R, OpType::U1]),
    ("TypedLoadParent", &[OpType::R, OpType::R]),
    ("Jmp", &[OpType::A1]),
    ("JmpLong", &[OpType::A4]),
    ("JmpTrue", &[OpType::A1, OpType::R]),
    ("JmpTrueLong", &[OpType::A4, OpType::R]),
    ("JmpFalse", &[OpType::A1, OpType::R]),
    ("JmpFalseLong", &[OpType::A4, OpType::R]),
    ("JmpUndefined", &[OpType::A1, OpType::R]),
    ("JmpUndefinedLong", &[OpType::A4, OpType::R]),
    ("JmpTypeOfIs", &[OpType::A4, OpType::R, OpType::U2]),
    ("JLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLess", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotLessEqualN", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotLessEqualNLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreater", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotGreaterEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotGreaterEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JStrictNotEqual", &[OpType::A1, OpType::R, OpType::R]),
    ("JStrictNotEqualLong", &[OpType::A4, OpType::R, OpType::R]),
    ("JmpBuiltinIs", &[OpType::A1, OpType::U1, OpType::R]),
    ("JmpBuiltinIsLong", &[OpType::A4, OpType::U1, OpType::R]),
    ("JmpBuiltinIsNot", &[OpType::A1, OpType::U1, OpType::R]),
    ("JmpBuiltinIsNotLong", &[OpType::A4, OpType::U1, OpType::R]),
];
const V98L_STRING_IDS: &[(u8, u8)] = &[
    (67, 0),
    (68, 3),
    (69, 3),
    (70, 3),
    (71, 4),
    (72, 3),
    (73, 3),
    (74, 3),
    (75, 3),
    (76, 3),
    (77, 3),
    (78, 3),
    (79, 3),
    (80, 3),
    (81, 3),
    (87, 3),
    (144, 1),
    (145, 1),
    (158, 1),
    (165, 2),
];
const V98L_FUNC_IDS: &[(u8, u8)] = &[(132, 2), (133, 2), (168, 2), (169, 2)];

pub fn get_version_schemas(
    version: u32,
) -> crate::Result<&'static [(&'static str, &'static [OpType])]> {
    Ok(match version {
        40 => V40_SCHEMAS,
        41 => V41_SCHEMAS,
        42 => V41_SCHEMAS, // v42 same as v41
        43 => V41_SCHEMAS, // v43 same as v41
        44 => V44_SCHEMAS,
        45 => V45_SCHEMAS,
        46 => V46_SCHEMAS,
        47 => V46_SCHEMAS, // v47 same as v46
        48 => V46_SCHEMAS, // v48 same as v46
        49 => V46_SCHEMAS, // v49 same as v46
        50 => V46_SCHEMAS, // v50 same as v46
        51 => V46_SCHEMAS, // v51 same as v46
        52 => V52_SCHEMAS,
        53 => V52_SCHEMAS, // v53 same as v52
        54 => V52_SCHEMAS, // v54 same as v52
        55 => V52_SCHEMAS, // v55 same as v52
        56 => V52_SCHEMAS, // v56 same as v52
        57 => V52_SCHEMAS, // v57 same as v52
        58 => V52_SCHEMAS, // v58 same as v52
        59 => V59_SCHEMAS,
        60 => V59_SCHEMAS, // v60 same as v59
        61 => V61_SCHEMAS,
        62 => V61_SCHEMAS, // v62 same as v61
        63 => V61_SCHEMAS, // v63 same as v61
        64 => V61_SCHEMAS, // v64 same as v61
        65 => V61_SCHEMAS, // v65 same as v61
        66 => V61_SCHEMAS, // v66 same as v61
        67 => V61_SCHEMAS, // v67 same as v61
        68 => V61_SCHEMAS, // v68 same as v61
        69 => V61_SCHEMAS, // v69 same as v61
        70 => V61_SCHEMAS, // v70 same as v61
        71 => V61_SCHEMAS, // v71 same as v61
        72 => V61_SCHEMAS, // v72 same as v61
        73 => V73_SCHEMAS,
        74 => V73_SCHEMAS, // v74 same as v73
        75 => V73_SCHEMAS, // v75 same as v73
        76 => V73_SCHEMAS, // v76 same as v73
        77 => V73_SCHEMAS, // v77 same as v73
        78 => V73_SCHEMAS, // v78 same as v73
        79 => V73_SCHEMAS, // v79 same as v73
        80 => V80_SCHEMAS,
        81 => V81_SCHEMAS,
        82 => V81_SCHEMAS, // v82 same as v81
        83 => V83_SCHEMAS,
        84 => V84_SCHEMAS,
        85 => V85_SCHEMAS,
        86 => V85_SCHEMAS, // v86 same as v85
        87 => V87_SCHEMAS,
        88 => V87_SCHEMAS, // v88 same as v87
        89 => V87_SCHEMAS, // v89 same as v87
        90 => V90_SCHEMAS,
        91 => V87_SCHEMAS, // v91 same as v87
        92 => V92_SCHEMAS,
        93 => V87_SCHEMAS, // v93 same as v87
        94 => V92_SCHEMAS, // v94 same as v92
        95 => V95_SCHEMAS,
        96 => V95_SCHEMAS, // v96 same as v95
        97 => V97_SCHEMAS,
        98 => V98_SCHEMAS,
        99 => V99_SCHEMAS,
        100 => V99_SCHEMAS, // v100 same as v99
        crate::parser::V98_LATE => V98L_SCHEMAS,
        _ => return Err(crate::HermesError::UnsupportedVersion { observed: version, supported_min: crate::header::MIN_SUPPORTED_VERSION, supported_max: crate::header::MAX_SUPPORTED_VERSION }),
    })
}

pub fn get_string_id_operands(version: u32) -> crate::Result<&'static [(u8, u8)]> {
    Ok(match version {
        40 => V40_STRING_IDS,
        41 => V41_STRING_IDS,
        42 => V41_STRING_IDS, // v42 same as v41
        43 => V41_STRING_IDS, // v43 same as v41
        44 => V44_STRING_IDS,
        45 => V45_STRING_IDS,
        46 => V46_STRING_IDS,
        47 => V46_STRING_IDS, // v47 same as v46
        48 => V46_STRING_IDS, // v48 same as v46
        49 => V46_STRING_IDS, // v49 same as v46
        50 => V46_STRING_IDS, // v50 same as v46
        51 => V46_STRING_IDS, // v51 same as v46
        52 => V52_STRING_IDS,
        53 => V52_STRING_IDS, // v53 same as v52
        54 => V52_STRING_IDS, // v54 same as v52
        55 => V52_STRING_IDS, // v55 same as v52
        56 => V52_STRING_IDS, // v56 same as v52
        57 => V52_STRING_IDS, // v57 same as v52
        58 => V52_STRING_IDS, // v58 same as v52
        59 => V59_STRING_IDS,
        60 => V59_STRING_IDS, // v60 same as v59
        61 => V61_STRING_IDS,
        62 => V61_STRING_IDS, // v62 same as v61
        63 => V61_STRING_IDS, // v63 same as v61
        64 => V61_STRING_IDS, // v64 same as v61
        65 => V61_STRING_IDS, // v65 same as v61
        66 => V61_STRING_IDS, // v66 same as v61
        67 => V61_STRING_IDS, // v67 same as v61
        68 => V61_STRING_IDS, // v68 same as v61
        69 => V61_STRING_IDS, // v69 same as v61
        70 => V61_STRING_IDS, // v70 same as v61
        71 => V61_STRING_IDS, // v71 same as v61
        72 => V61_STRING_IDS, // v72 same as v61
        73 => V73_STRING_IDS,
        74 => V73_STRING_IDS, // v74 same as v73
        75 => V73_STRING_IDS, // v75 same as v73
        76 => V73_STRING_IDS, // v76 same as v73
        77 => V73_STRING_IDS, // v77 same as v73
        78 => V73_STRING_IDS, // v78 same as v73
        79 => V73_STRING_IDS, // v79 same as v73
        80 => V80_STRING_IDS,
        81 => V81_STRING_IDS,
        82 => V81_STRING_IDS, // v82 same as v81
        83 => V83_STRING_IDS,
        84 => V84_STRING_IDS,
        85 => V85_STRING_IDS,
        86 => V85_STRING_IDS, // v86 same as v85
        87 => V87_STRING_IDS,
        88 => V87_STRING_IDS, // v88 same as v87
        89 => V87_STRING_IDS, // v89 same as v87
        90 => V90_STRING_IDS,
        91 => V87_STRING_IDS, // v91 same as v87
        92 => V92_STRING_IDS,
        93 => V87_STRING_IDS, // v93 same as v87
        94 => V92_STRING_IDS, // v94 same as v92
        95 => V95_STRING_IDS,
        96 => V95_STRING_IDS, // v96 same as v95
        97 => V97_STRING_IDS,
        98 => V98_STRING_IDS,
        99 => V99_STRING_IDS,
        100 => V99_STRING_IDS, // v100 same as v99
        crate::parser::V98_LATE => V98L_STRING_IDS,
        _ => return Err(crate::HermesError::UnsupportedVersion { observed: version, supported_min: crate::header::MIN_SUPPORTED_VERSION, supported_max: crate::header::MAX_SUPPORTED_VERSION }),
    })
}

pub fn get_func_id_operands(version: u32) -> crate::Result<&'static [(u8, u8)]> {
    Ok(match version {
        40 => V40_FUNC_IDS,
        41 => V41_FUNC_IDS,
        42 => V41_FUNC_IDS, // v42 same as v41
        43 => V41_FUNC_IDS, // v43 same as v41
        44 => V44_FUNC_IDS,
        45 => V45_FUNC_IDS,
        46 => V46_FUNC_IDS,
        47 => V46_FUNC_IDS, // v47 same as v46
        48 => V46_FUNC_IDS, // v48 same as v46
        49 => V46_FUNC_IDS, // v49 same as v46
        50 => V46_FUNC_IDS, // v50 same as v46
        51 => V46_FUNC_IDS, // v51 same as v46
        52 => V52_FUNC_IDS,
        53 => V52_FUNC_IDS, // v53 same as v52
        54 => V52_FUNC_IDS, // v54 same as v52
        55 => V52_FUNC_IDS, // v55 same as v52
        56 => V52_FUNC_IDS, // v56 same as v52
        57 => V52_FUNC_IDS, // v57 same as v52
        58 => V52_FUNC_IDS, // v58 same as v52
        59 => V59_FUNC_IDS,
        60 => V59_FUNC_IDS, // v60 same as v59
        61 => V61_FUNC_IDS,
        62 => V61_FUNC_IDS, // v62 same as v61
        63 => V61_FUNC_IDS, // v63 same as v61
        64 => V61_FUNC_IDS, // v64 same as v61
        65 => V61_FUNC_IDS, // v65 same as v61
        66 => V61_FUNC_IDS, // v66 same as v61
        67 => V61_FUNC_IDS, // v67 same as v61
        68 => V61_FUNC_IDS, // v68 same as v61
        69 => V61_FUNC_IDS, // v69 same as v61
        70 => V61_FUNC_IDS, // v70 same as v61
        71 => V61_FUNC_IDS, // v71 same as v61
        72 => V61_FUNC_IDS, // v72 same as v61
        73 => V73_FUNC_IDS,
        74 => V73_FUNC_IDS, // v74 same as v73
        75 => V73_FUNC_IDS, // v75 same as v73
        76 => V73_FUNC_IDS, // v76 same as v73
        77 => V73_FUNC_IDS, // v77 same as v73
        78 => V73_FUNC_IDS, // v78 same as v73
        79 => V73_FUNC_IDS, // v79 same as v73
        80 => V80_FUNC_IDS,
        81 => V81_FUNC_IDS,
        82 => V81_FUNC_IDS, // v82 same as v81
        83 => V83_FUNC_IDS,
        84 => V84_FUNC_IDS,
        85 => V85_FUNC_IDS,
        86 => V85_FUNC_IDS, // v86 same as v85
        87 => V87_FUNC_IDS,
        88 => V87_FUNC_IDS, // v88 same as v87
        89 => V87_FUNC_IDS, // v89 same as v87
        90 => V90_FUNC_IDS,
        91 => V87_FUNC_IDS, // v91 same as v87
        92 => V92_FUNC_IDS,
        93 => V87_FUNC_IDS, // v93 same as v87
        94 => V92_FUNC_IDS, // v94 same as v92
        95 => V95_FUNC_IDS,
        96 => V95_FUNC_IDS, // v96 same as v95
        97 => V97_FUNC_IDS,
        98 => V98_FUNC_IDS,
        99 => V99_FUNC_IDS,
        100 => V99_FUNC_IDS, // v100 same as v99
        crate::parser::V98_LATE => V98L_FUNC_IDS,
        _ => return Err(crate::HermesError::UnsupportedVersion { observed: version, supported_min: crate::header::MIN_SUPPORTED_VERSION, supported_max: crate::header::MAX_SUPPORTED_VERSION }),
    })
}
