'Assign a new region for under-constrained symbolic execution.
:param dst_addr_ast: the symbolic AST which address of the new allocated region will be assigned to.
:return: as ast of memory address that points to a new region'

def assign(self, dst_addr_ast):

    if (dst_addr_ast.uc_alloc_depth > self._max_alloc_depth):
        raise SimUCManagerAllocationError('Current    allocation    depth    %d    is    greater    than    the    cap    (%d)', dst_addr_ast.uc_alloc_depth, self._max_alloc_depth)
    abs_addr = (self._region_base + self._pos)
    ptr = self.state.se.BVV(abs_addr, self.state.arch.bits)
    self._pos += self._region_size
    self._alloc_depth_map[((abs_addr - self._region_base) / self._region_size)] = dst_addr_ast.uc_alloc_depth
    l.debug('Assigned    new    memory    region    %s', ptr)
    return ptr
