<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_child(self, node, as_last=True):
 """ Add the given child to the current list of children. The new child is appended as the last child if ``as_last`` is ``True``, or as the first child if ``as_last`` is ``False``. This call updates the ``__parent`` and ``__level`` fields of ``node``. :param node: the child node to be added :type node: :class:`~aeneas.tree.Tree` :param bool as_last: if ``True``, append the node as the last child; if ``False``, append the node as the first child :raises: TypeError if ``node`` is not an instance of :class:`~aeneas.tree.Tree` """

        if not isinstance(node, Tree):
            self.log_exc(u"node is not an instance of Tree", None, True, TypeError)
        if as_last:
            self.__children.append(node)
        else:
            self.__children = [node] + self.__children
        node.__parent = self
        new_height = 1 + self.level
        for n in node.subtree:
            n.__level += new_height