code: def _graph_get_node(self, block_id, terminator_for_nonexistent_node=False):
          
  
          if block_id not in self._nodes:
              l.error("Trying to look up a node that we don't have yet. Is this okay????")
              if not terminator_for_nonexistent_node:
                  return None
              # Generate a PathTerminator node
              addr = block_id.addr
              func_addr = block_id.func_addr
              if func_addr is None:
                  # We'll have to use the current block address instead
                  # TODO: Is it really OK?
                  func_addr = addr
  
              input_state = self.project.factory.entry_state()
              input_state.ip = addr
              pt = VFGNode(addr, block_id, input_state)
              self._nodes[block_id] = pt
  
              if isinstance(self.project.arch, archinfo.ArchARM) and addr % 2 == 1:
                  self._thumb_addrs.add(addr)
                  self._thumb_addrs.add(addr - 1)
  
              l.debug("Block ID %s does not exist. Create a PathTerminator instead.",
                      repr(block_id))
  
          return self._nodes[block_id]
docs: Get an existing VFGNode instance from the graph.
  
          :param BlockID block_id:                     The block ID for the node to get.
          :param bool terminator_for_nonexistent_node: True if a Terminator (which is a SimProcedure stub) should be
                                                       created when there is no existing node available for the given
                                                       block ID.
          :return:                                     A node in the graph, or None.
          :rtype:                                      VFGNode