def list2bytecode(l, opc, varnames, consts): """Convert list/tuple of list/tuples to bytecode _names_ contains a list of name objects """ bc = [] for i, opcodes in enumerate(l): opname = opcodes[0] operands = opcodes[1:] if opname not in opc.opname: raise TypeError( "error at item %d [%s, %s], opcode not valid" % (i, opname, operands)) opcode = opc.opmap[opname] bc.append(opcode) print(opname, operands) gen = (j for j in operands if operands) for j in gen: k = (consts if opcode in opc.CONST_OPS else varnames).index(j) if k == -1: raise TypeError( "operand %s [%s, %s], not found in names" % (i, opname, operands)) else: bc += num2code(k) pass pass pass if opc.python_version < 3.0: return reduce(lambda a, b: a + chr(b), bc, '') else: if PYTHON3: return bytes(bc) else: return bytes(bytearray(bc))