
"""
opcode module - potentially shared between dis and other modules which
operate on bytecodes (e.g. peephole optimizers).
"""


__all__ = ["cmp_op", "stack_effect", "hascompare", "opname", "opmap",
           "HAVE_ARGUMENT", "EXTENDED_ARG", "hasarg", "hasconst", "hasname",
           "hasjump", "hasjrel", "hasjabs", "hasfree", "haslocal", "hasexc"]

import builtins
import _opcode
from _opcode import stack_effect

from _opcode_metadata import (_specializations, _specialized_opmap, opmap,  # noqa: F401
                              HAVE_ARGUMENT, MIN_INSTRUMENTED_OPCODE)  # noqa: F401
EXTENDED_ARG = opmap['EXTENDED_ARG']

opname = ['<%r>' % (op,) for op in range(max(opmap.values()) + 1)]
for m in (opmap, _specialized_opmap):
    for op, i in m.items():
        opname[i] = op

cmp_op = ('<', '<=', '==', '!=', '>', '>=')

# These lists are documented as part of the dis module's API
hasarg = [op for op in opmap.values() if _opcode.has_arg(op)]
hasconst = [op for op in opmap.values() if _opcode.has_const(op)]
hasname = [op for op in opmap.values() if _opcode.has_name(op)]
hasjump = [op for op in opmap.values() if _opcode.has_jump(op)]
hasjrel = hasjump  # for backward compatibility
hasjabs = []
hasfree = [op for op in opmap.values() if _opcode.has_free(op)]
haslocal = [op for op in opmap.values() if _opcode.has_local(op)]
hasexc = [op for op in opmap.values() if _opcode.has_exc(op)]


_intrinsic_1_descs = _opcode.get_intrinsic1_descs()
_intrinsic_2_descs = _opcode.get_intrinsic2_descs()
_special_method_names = _opcode.get_special_method_names()
_common_constants = [builtins.AssertionError, builtins.NotImplementedError,
                     builtins.tuple, builtins.all, builtins.any, builtins.list,
                     builtins.set]
_nb_ops = _opcode.get_nb_ops()

hascompare = [opmap["COMPARE_OP"]]

_cache_format = frozendict(
    LOAD_GLOBAL=frozendict(
        counter=1,
        index=1,
        module_keys_version=1,
        builtin_keys_version=1,
    ),
    BINARY_OP=frozendict(
        counter=1,
        descr=4,
    ),
    UNPACK_SEQUENCE=frozendict(
        counter=1,
    ),
    COMPARE_OP=frozendict(
        counter=1,
    ),
    CONTAINS_OP=frozendict(
        counter=1,
    ),
    FOR_ITER=frozendict(
        counter=1,
    ),
    LOAD_SUPER_ATTR=frozendict(
        counter=1,
    ),
    LOAD_ATTR=frozendict(
        counter=1,
        version=2,
        keys_version=2,
        descr=4,
    ),
    STORE_ATTR=frozendict(
        counter=1,
        version=2,
        index=1,
    ),
    CALL=frozendict(
        counter=1,
        func_version=2,
    ),
    CALL_KW=frozendict(
        counter=1,
        func_version=2,
    ),
    CALL_FUNCTION_EX=frozendict(
        counter=1,
    ),
    STORE_SUBSCR=frozendict(
        counter=1,
    ),
    SEND=frozendict(
        counter=1,
    ),
    JUMP_BACKWARD=frozendict(
        counter=1,
    ),
    TO_BOOL=frozendict(
        counter=1,
        version=2,
    ),
    POP_JUMP_IF_TRUE=frozendict(
        counter=1,
    ),
    POP_JUMP_IF_FALSE=frozendict(
        counter=1,
    ),
    POP_JUMP_IF_NONE=frozendict(
        counter=1,
    ),
    POP_JUMP_IF_NOT_NONE=frozendict(
        counter=1,
    ),
    RESUME=frozendict(
        counter=1,
    ),
)

_inline_cache_entries = frozendict({
    name : sum(value.values()) for (name, value) in _cache_format.items()
})
