code: def _preprocess_successor(self, state, add_guard=True): #pylint:disable=unused-argument
          
  
          # Next, simplify what needs to be simplified
          if o.SIMPLIFY_EXIT_STATE in state.options:
              state.solver.simplify()
          if o.SIMPLIFY_EXIT_GUARD in state.options:
              state.scratch.guard = state.solver.simplify(state.scratch.guard)
          if o.SIMPLIFY_EXIT_TARGET in state.options:
              state.scratch.target = state.solver.simplify(state.scratch.target)
  
          # unwrap stuff from SimActionObjects
          state.scratch.target = _raw_ast(state.scratch.target)
          state.scratch.guard = _raw_ast(state.scratch.guard)
  
          # apply the guard constraint and new program counter to the state
          if add_guard:
              state.add_constraints(state.scratch.guard)
          # trigger inspect breakpoints here since this statement technically shows up in the IRSB as the "next"
          state.regs.ip = state.scratch.target
  
          # For architectures with no stack pointer, we can't manage a callstack. This has the side effect of breaking
          # SimProcedures that call out to binary code self.call.
          if self.initial_state.arch.sp_offset is not None and not isinstance(state.arch, ArchSoot):
              self._manage_callstack(state)
  
          if len(self.successors) != 0:
              # This is a fork!
              state._inspect('fork', BP_AFTER)
  
          # clean up the state
          state.options.discard(o.AST_DEPS)
          state.options.discard(o.AUTO_REFS)
docs: Preprocesses the successor state.
  
          :param state: the successor state