except_handler_else.py 1.0 KB

123456789101112131415161718192021222324252627
  1. # Copyright (c) 2020-2021 Rocky Bernstein
  2. def except_handler_else(self, lhs, n, rule, ast, tokens, first, last):
  3. # FIXME: expand this to other versions
  4. if self.version[:2] not in ((2, 7), (3, 5)):
  5. return False
  6. if tokens[first] in ("JUMP_FORWARD", "JUMP_ABSOLUTE"):
  7. first_jump_target = tokens[first].pattr
  8. last = min(last, len(tokens)-1)
  9. for i in range(last, first, -1):
  10. if tokens[i] == "END_FINALLY":
  11. i -= 1
  12. second_jump = tokens[i]
  13. if second_jump in ("JUMP_FORWARD", "JUMP_ABSOLUTE"):
  14. second_jump_target = second_jump.pattr
  15. equal_target = second_jump_target == first_jump_target
  16. if equal_target:
  17. return lhs != "except_handler"
  18. else:
  19. return lhs != "except_handler_else"
  20. pass
  21. else:
  22. return False
  23. pass
  24. pass
  25. return False