docs: def remove_block(self, name):
          """ Removes an existing block from the AST.
  
              `name`
                  Block name.
  
              * Raises a ``ValueError`` exception if `name` hasn't been added.
              """
  
          if not self._ast or not name in self._block_map:
              raise ValueError(u"Block '{0}' does not exist"
                               .format(common.from_utf8(name)))
  
          block_idx = self._block_map[name]
  
          # remove block
          self._ast[2].pop(block_idx)
          del self._block_map[name]