code: def make_if_statement(instr, queue, stack, context):
      
      test_expr = make_expr(stack)
      if isinstance(instr, instrs.POP_JUMP_IF_TRUE):
          test_expr = ast.UnaryOp(op=ast.Not(), operand=test_expr)
  
      first_block = popwhile(op.is_not(instr.arg), queue, side='left')
      if isinstance(first_block[-1], instrs.RETURN_VALUE):
          body = instrs_to_body(first_block, context)
          return ast.If(test=test_expr, body=body, orelse=[])
  
      jump_to_end = expect(
          first_block.pop(), instrs.JUMP_FORWARD, "at end of if-block"
      )
  
      body = instrs_to_body(first_block, context)
  
      # First instruction after the whole if-block.
      end = jump_to_end.arg
      if instr.arg is jump_to_end.arg:
          orelse = []
      else:
          orelse = instrs_to_body(
              popwhile(op.is_not(end), queue, side='left'),
              context,
          )
  
      return ast.If(test=test_expr, body=body, orelse=orelse)
docs: Make an ast.If block from a POP_JUMP_IF_TRUE or POP_JUMP_IF_FALSE.