def _morph(self):
        """Turn a file system Node (either a freshly initialized directory
        object or a separate Entry object) into a proper directory object.

        Set up this directory's entries and hook it into the file
        system tree.  Specify that directories (this Node) don't use
        signatures for calculating whether they're current.
        """

        self.repositories = []
        self.srcdir = None

        self.entries = {}
        self.entries['.'] = self
        self.entries['..'] = self.dir
        self.cwd = self
        self.searched = 0
        self._sconsign = None
        self.variant_dirs = []
        self.root = self.dir.root
        self.changed_since_last_build = 3
        self._func_sconsign = 1
        self._func_exists = 2
        self._func_get_contents = 2

        self._abspath = SCons.Util.silent_intern(self.dir.entry_abspath(self.name))
        self._labspath = SCons.Util.silent_intern(self.dir.entry_labspath(self.name))
        if self.dir._path == '.':
            self._path = SCons.Util.silent_intern(self.name)
        else:
            self._path = SCons.Util.silent_intern(self.dir.entry_path(self.name))
        if self.dir._tpath == '.':
            self._tpath = SCons.Util.silent_intern(self.name)
        else:
            self._tpath = SCons.Util.silent_intern(self.dir.entry_tpath(self.name))
        self._path_elements = self.dir._path_elements + [self]

        # For directories, we make a difference between the directory
        # 'name' and the directory 'dirname'. The 'name' attribute is
        # used when we need to print the 'name' of the directory or
        # when we it is used as the last part of a path. The 'dirname'
        # is used when the directory is not the last element of the
        # path. The main reason for making that distinction is that
        # for RoorDir's the dirname can not be easily inferred from
        # the name. For example, we have to add a '/' after a drive
        # letter but not after a UNC path prefix ('//').
        self.dirname = self.name + OS_SEP

        # Don't just reset the executor, replace its action list,
        # because it might have some pre-or post-actions that need to
        # be preserved.
        #
        # But don't reset the executor if there is a non-null executor
        # attached already. The existing executor might have other
        # targets, in which case replacing the action list with a
        # Mkdir action is a big mistake.
        if not hasattr(self, 'executor'):
            self.builder = get_MkdirBuilder()
            self.get_executor().set_action_list(self.builder.action)
        else:
            # Prepend MkdirBuilder action to existing action list
            l = self.get_executor().action_list
            a = get_MkdirBuilder().action
            l.insert(0, a)
            self.get_executor().set_action_list(l)
Turn a file system Node (either a freshly initialized directory
        object or a separate Entry object) into a proper directory object.

        Set up this directory's entries and hook it into the file
        system tree.  Specify that directories (this Node) don't use
        signatures for calculating whether they're current.