code: def fix_missing_locations(node):
      
      def _fix(node, lineno, col_offset):
          if 'lineno' in node._attributes:
              if not hasattr(node, 'lineno'):
                  node.lineno = lineno
              else:
                  lineno = node.lineno
          if 'col_offset' in node._attributes:
              if not hasattr(node, 'col_offset'):
                  node.col_offset = col_offset
              else:
                  col_offset = node.col_offset
          for child in iter_child_nodes(node):
              _fix(child, lineno, col_offset)
      _fix(node, 1, 0)
      return node
docs: Some nodes require a line number and the column offset.  Without that
      information the compiler will abort the compilation.  Because it can be
      a dull task to add appropriate line numbers and column offsets when
      adding new nodes this function can help.  It copies the line number and
      column offset of the parent node to the child nodes without this
      information.
  
      Unlike `copy_location` this works recursive and won't touch nodes that
      already have a location information.