| 576 | return self.labels_map.get(offset, None) |
| 577 | |
| 578 | def get_argval_argrepr(self, op, arg, offset): |
| 579 | get_name = None if self.names is None else self.names.__getitem__ |
| 580 | argval = None |
| 581 | argrepr = '' |
| 582 | deop = _deoptop(op) |
| 583 | if arg is not None: |
| 584 | # Set argval to the dereferenced value of the argument when |
| 585 | # available, and argrepr to the string representation of argval. |
| 586 | # _disassemble_bytes needs the string repr of the |
| 587 | # raw name index for LOAD_GLOBAL, LOAD_CONST, etc. |
| 588 | argval = arg |
| 589 | if deop in hasconst: |
| 590 | argval, argrepr = _get_const_info(deop, arg, self.co_consts) |
| 591 | elif deop in hasname: |
| 592 | if deop == LOAD_GLOBAL: |
| 593 | argval, argrepr = _get_name_info(arg//2, get_name) |
| 594 | if (arg & 1) and argrepr: |
| 595 | argrepr = f"{argrepr} + NULL" |
| 596 | elif deop == LOAD_ATTR: |
| 597 | argval, argrepr = _get_name_info(arg//2, get_name) |
| 598 | if (arg & 1) and argrepr: |
| 599 | argrepr = f"{argrepr} + NULL|self" |
| 600 | elif deop == LOAD_SUPER_ATTR: |
| 601 | argval, argrepr = _get_name_info(arg//4, get_name) |
| 602 | if (arg & 1) and argrepr: |
| 603 | argrepr = f"{argrepr} + NULL|self" |
| 604 | elif deop == IMPORT_NAME: |
| 605 | argval, argrepr = _get_name_info(arg//4, get_name) |
| 606 | if (arg & 1) and argrepr: |
| 607 | argrepr = f"{argrepr} + lazy" |
| 608 | elif (arg & 2) and argrepr: |
| 609 | argrepr = f"{argrepr} + eager" |
| 610 | else: |
| 611 | argval, argrepr = _get_name_info(arg, get_name) |
| 612 | elif deop in hasjump or deop in hasexc: |
| 613 | argval = self.offset_from_jump_arg(op, arg, offset) |
| 614 | lbl = self.get_label_for_offset(argval) |
| 615 | assert lbl is not None |
| 616 | preposition = "from" if deop == END_ASYNC_FOR else "to" |
| 617 | argrepr = f"{preposition} L{lbl}" |
| 618 | elif deop in (LOAD_FAST_LOAD_FAST, LOAD_FAST_BORROW_LOAD_FAST_BORROW, STORE_FAST_LOAD_FAST, STORE_FAST_STORE_FAST): |
| 619 | arg1 = arg >> 4 |
| 620 | arg2 = arg & 15 |
| 621 | val1, argrepr1 = _get_name_info(arg1, self.varname_from_oparg) |
| 622 | val2, argrepr2 = _get_name_info(arg2, self.varname_from_oparg) |
| 623 | argrepr = argrepr1 + ", " + argrepr2 |
| 624 | argval = val1, val2 |
| 625 | elif deop in haslocal or deop in hasfree: |
| 626 | argval, argrepr = _get_name_info(arg, self.varname_from_oparg) |
| 627 | elif deop in hascompare: |
| 628 | argval = cmp_op[arg >> 5] |
| 629 | argrepr = argval |
| 630 | if arg & 16: |
| 631 | argrepr = f"bool({argrepr})" |
| 632 | elif deop == CONVERT_VALUE: |
| 633 | argval = (None, str, repr, ascii)[arg] |
| 634 | argrepr = ('', 'str', 'repr', 'ascii')[arg] |
| 635 | elif deop == SET_FUNCTION_ATTRIBUTE: |