docs: def push_scope(self, frame, extra_vars=()):
          """This function returns all the shadowed variables in a dict
          in the form name: alias and will write the required assignments
          into the current scope.  No indentation takes place.
  
          This also predefines locally declared variables from the loop
          body because under some circumstances it may be the case that
  
          `extra_vars` is passed to `Frame.find_shadowed`.
          """
          aliases = {}
          for name in frame.find_shadowed(extra_vars):
              aliases[name] = ident = self.temporary_identifier()
              self.writeline('%s = l_%s' % (ident, name))
          to_declare = set()
          for name in frame.identifiers.declared_locally:
              if name not in aliases:
                  to_declare.add('l_' + name)
          if to_declare:
              self.writeline(' = '.join(to_declare) + ' = missing')
          return aliases