'Create a context-sensitive CFGNode instance for a specific block.
:param SimSuccessors sim_successors:         The SimSuccessors object.
:param CallStack call_stack_suffix:          The call stack.
:param int func_addr:                        Address of the current function.
:param BlockID block_id:                     The block ID of this CFGNode.
:param int or None depth:                    Depth of this CFGNode.
:return:                                     A CFGNode instance.
:rtype:                                      CFGNode'

def _create_cfgnode(self, sim_successors, call_stack, func_addr, block_id=None, depth=None, exception_info=None):

    sa = sim_successors.artifacts
    syscall = None
    is_syscall = False
    if (sim_successors.sort == 'SimProcedure'):
        is_simprocedure = True
        if (sa['is_syscall'] is True):
            is_syscall = True
            syscall = sim_successors.artifacts['procedure']
    else:
        is_simprocedure = False
    if is_simprocedure:
        simproc_name = sa['name'].split('.')[(-1)]
        if ((simproc_name == 'ReturnUnconstrained') and (sa['resolves'] is not None)):
            simproc_name = sa['resolves']
        no_ret = False
        if ((syscall is not None) and sa['no_ret']):
            no_ret = True
        cfg_node = CFGNode(sim_successors.addr, None, self, callstack=call_stack, input_state=None, simprocedure_name=simproc_name, syscall_name=syscall, no_ret=no_ret, is_syscall=is_syscall, syscall=syscall, function_address=sim_successors.addr, block_id=block_id, depth=depth, creation_failure_info=exception_info)
    else:
        cfg_node = CFGNode(sim_successors.addr, sa['irsb_size'], self, callstack=call_stack, input_state=None, is_syscall=is_syscall, syscall=syscall, function_address=func_addr, block_id=block_id, depth=depth, irsb=sim_successors.artifacts['irsb'], creation_failure_info=exception_info)
    return cfg_node
