Source code for easier68k.core.util.find_module

# This *is* actually a necessary import due to using "reflection" style code further down
# noinspection PyUnresolvedReferences
from ..opcodes import *
from types import ModuleType
import sys

valid_opcode_classes = [
    'easier68k.core.opcodes.move.Move',
    'easier68k.core.opcodes.simhalt.Simhalt',
    'easier68k.core.opcodes.dc.DC',
    'easier68k.core.opcodes.lea.Lea',
    'easier68k.core.opcodes.trap.Trap',
    'easier68k.core.opcodes.opcode_or.Or',
    'easier68k.core.opcodes.add.Add',
    'easier68k.core.opcodes.bcc.Bra',
    'easier68k.core.opcodes.bcc.Bhi',
    'easier68k.core.opcodes.bcc.Bls',
    'easier68k.core.opcodes.bcc.Bcc',
    'easier68k.core.opcodes.bcc.Bcs',
    'easier68k.core.opcodes.bcc.Bne',
    'easier68k.core.opcodes.bcc.Beq',
    'easier68k.core.opcodes.bcc.Bvc',
    'easier68k.core.opcodes.bcc.Bvs',
    'easier68k.core.opcodes.bcc.Bpl',
    'easier68k.core.opcodes.bcc.Bmi',
    'easier68k.core.opcodes.bcc.Bge',
    'easier68k.core.opcodes.bcc.Blt',
    'easier68k.core.opcodes.bcc.Bgt',
    'easier68k.core.opcodes.bcc.Ble'
]

valid_opcodes = [
    x.split('.')[-1].upper() for x in valid_opcode_classes
]


[docs]def find_opcode_cls(opcode: str) -> type: # classes are of type "type" Really python? """ Finds the proper module and module class based on the opcode :param opcode: The opcode to search for :return: The module and class found (or (None, None) if it doesn't find any) """ for m in valid_opcode_classes: split = m.split('.') mod_name = '.'.join(split[:-1]) # Trims the class name (the last part after the period) mod = sys.modules[mod_name] cls = getattr(mod, split[-1]) if cls.command_matches(opcode): return cls return None