code: def _walk_tb_with_full_positions(tb):
      # Internal version of walk_tb that yields full code positions including
      # end line and column information.
      while tb is not None:
          positions = _get_code_position(
              tb.tb_frame.f_code, tb.tb_lasti
          )
          # Yield tb_lineno when co_positions does not have a line number to
          # maintain behavior with walk_tb.
          if positions[0] is None:
              yield tb.tb_frame, (tb.tb_lineno,) + positions[1:]
          else:
              yield tb.tb_frame, positions
          tb = tb.tb_next
  
imports: import collections.abc
  import itertools
  import linecache
  import sys
  import textwrap
  from contextlib import suppress
label_desc: Use image node_id 21 for calling a global function with example usage: _walk_tb_with_full_positions(tb) without return types