def emit_equal(self, word): return opmap["COMPARE_OP"], cmp_op.index("==")
from dis import opmap from collections import OrderedDict from opcode import cmp_op from .interpreter import Interpreter CALL_FUNCTION = opmap["CALL_FUNCTION"] CALL_FLAG_VAR = 1 CALL_FLAG_KW = 2 COMPARE = { cmp_op.index("<"): (lambda a, b: a < b), cmp_op.index("<="): (lambda a, b: a <= b), cmp_op.index("=="): (lambda a, b: a == b), cmp_op.index("!="): (lambda a, b: a != b), cmp_op.index(">"): (lambda a, b: a > b), cmp_op.index(">="): (lambda a, b: a >= b), cmp_op.index("in"): (lambda a, b: a in b), cmp_op.index("not in"): (lambda a, b: a not in b), cmp_op.index("is"): (lambda a, b: a is b), cmp_op.index("is not"): (lambda a, b: a is not b), cmp_op.index("exception match"): (lambda a, b: a == b), cmp_op.index("BAD"): (lambda a, b: False) } class CodeInterpreter(Interpreter):
def compare(self, word): return opmap["COMPARE_OP"], cmp_op.index(word)
def _compare(self, op: int, cmp: str): self.append(op) self.append(cmp_op.index(cmp)) return self
SLICE+0 => slice_0 """ opname = opname.replace('+', '_') return opname.lower() def _make_op_ids(): ids_by_code = {} for code, name in enumerate(opname): if not name.startswith('<'): # missing code ids_by_code[ code ] = _opname2id(name) return ids_by_code # Dict of operation name by code opcode_method_names = _make_op_ids() CMP_LT = cmp_op.index('<') CMP_LE = cmp_op.index('<=') CMP_EQ = cmp_op.index('==') CMP_NE = cmp_op.index('!=') CMP_GT = cmp_op.index('>') CMP_GE = cmp_op.index('>=') CMP_IN = cmp_op.index('in') CMP_NOT_IN = cmp_op.index('not in') CMP_IS = cmp_op.index('is') CMP_IS_NOT = cmp_op.index('is not') CMP_EXCEPTION_MATCH = cmp_op.index('exception match') def opcode_decoder( co_code, next_instr ): opcode = co_code[next_instr] next_instr += 1
import sys import types from collections import OrderedDict from dis import opmap from opcode import cmp_op from .interpreter import Interpreter CALL_FUNCTION = opmap['CALL_FUNCTION'] CALL_FLAG_VAR = 1 CALL_FLAG_KW = 2 COMPARE = { cmp_op.index('<'): (lambda a, b: a < b), cmp_op.index('<='): (lambda a, b: a <= b), cmp_op.index('=='): (lambda a, b: a == b), cmp_op.index('!='): (lambda a, b: a != b), cmp_op.index('>'): (lambda a, b: a > b), cmp_op.index('>='): (lambda a, b: a >= b), cmp_op.index('in'): (lambda a, b: a in b), cmp_op.index('not in'): (lambda a, b: a not in b), cmp_op.index('is'): (lambda a, b: a is b), cmp_op.index('is not'): (lambda a, b: a is not b), cmp_op.index('exception match'): (lambda a, b: a == b), cmp_op.index('BAD'): (lambda a, b: False) } class CodeInterpreter(Interpreter):
import types import dis from dis import opmap from collections import OrderedDict from opcode import cmp_op from .interpreter import Interpreter CALL_FUNCTION = opmap["CALL_FUNCTION"] CALL_FLAG_VAR = 1 CALL_FLAG_KW = 2 COMPARE = { cmp_op.index("<"): (lambda a, b: a < b), cmp_op.index("<="): (lambda a, b: a <= b), cmp_op.index("=="): (lambda a, b: a == b), cmp_op.index("!="): (lambda a, b: a != b), cmp_op.index(">"): (lambda a, b: a > b), cmp_op.index(">="): (lambda a, b: a >= b), cmp_op.index("in"): (lambda a, b: a in b), cmp_op.index("not in"): (lambda a, b: a not in b), cmp_op.index("is"): (lambda a, b: a is b), cmp_op.index("is not"): (lambda a, b: a is not b), cmp_op.index("exception match"): (lambda a, b: a == b), cmp_op.index("BAD"): (lambda a, b: False) } class CodeInterpreter(Interpreter):