testtrue.py 987 B

12345678910111213141516171819202122
  1. # Copyright (c) 2020 Rocky Bernstein
  2. def testtrue(self, lhs: str, n: int, rule, ast, tokens, first: int, last: int) -> bool:
  3. # FIXME: make this work for all versions
  4. if self.version != 3.7:
  5. return False
  6. if rule == ("testtrue", ("expr", "POP_JUMP_IF_TRUE")):
  7. pjit = tokens[min(last - 1, n - 2)]
  8. # If we have a backwards (looping) jump then this is
  9. # really a testfalse. But "asserts" work funny
  10. if pjit == "POP_JUMP_IF_TRUE_LOOP":
  11. assert_next = tokens[min(last + 1, n - 1)]
  12. return assert_next != "RAISE_VARARGS_1"
  13. elif rule == ("testfalsec", ("expr", "POP_JUMP_IF_TRUE")):
  14. pjit = tokens[min(last - 1, n - 2)]
  15. # If we have a backwards (looping) jump then this is
  16. # really a testtrue. But "asserts" work funny
  17. if pjit.kind == "POP_JUMP_IF_TRUE_LOOP":
  18. assert_next = tokens[min(last + 1, n - 1)]
  19. return assert_next == "RAISE_VARARGS_1"
  20. return False