def _graph_get_node(self, node_key, terminator_for_nonexistent_node=False):
        """

        :param node_key:
        :return:
        """

        if node_key not in self._nodes:
            if not terminator_for_nonexistent_node:
                return None
            # Generate a PathTerminator node
            addr = self._simrun_key_addr(node_key)
            func_addr = self._simrun_key_current_func_addr(node_key)
            if func_addr is None:
                # We'll have to use the current SimRun address instead
                # TODO: Is it really OK?
                func_addr = self._simrun_key_addr(node_key)

            pt = CFGNode(self._simrun_key_addr(node_key),
                         None,
                         self,
                         callstack_key=self._simrun_key_callstack_key(node_key),
                         input_state=None,
                         simprocedure_name="PathTerminator",
                         function_address=func_addr)
            if self._keep_state:
                # We don't have an input state available for it (otherwise we won't have to create a
                # PathTerminator). This is just a trick to make get_any_irsb() happy.
                pt.input_state = self.project.factory.entry_state()
                pt.input_state.ip = pt.addr
            self._nodes[node_key] = pt
            self._nodes_by_addr[pt.addr].append((node_key, pt))

            if isinstance(self.project.arch, ArchARM) and addr % 2 == 1:
                self._thumb_addrs.add(addr)
                self._thumb_addrs.add(addr - 1)

            l.debug("SimRun key %s does not exist. Create a PathTerminator instead.",
                    self._simrun_key_repr(node_key))

        return self._nodes[node_key]
dataset/ETHPy150Open angr/angr/angr/analyses/cfg_accurate.py/CFGAccurate._graph_get_node/original