DfaInstructionState[] (@NotNull DataFlowInterpreter interpreter, @NotNull DfaMemoryState stateBefore) { DfaValue tosValue = stateBefore.isEmptyStack() ? interpreter.getFactory().getUnknown() : stateBefore.peek(); DfaCondition cond = createCondition(tosValue); UnsatisfiedConditionProblem problem = getProblem(); if (cond.equals(DfaCondition.getTrue())) { if (problem != null) { interpreter.getListener().onCondition(problem, tosValue, ThreeState.NO, stateBefore); } return nextStates(interpreter, stateBefore); } DfaMemoryState falseState = stateBefore.createCopy(); boolean trueStatePossible = stateBefore.applyCondition(cond); boolean falseStatePossible = falseState.applyCondition(cond.negate()); List<DfaInstructionState> result = new ArrayList<>(); if (trueStatePossible) { result.add(nextState(interpreter, stateBefore)); } if (problem != null) { ThreeState failed = !trueStatePossible ? ThreeState.YES : !falseStatePossible ? ThreeState.NO : ThreeState.UNSURE; interpreter.getListener().onCondition(problem, tosValue, failed, stateBefore); } if (falseStatePossible && myTransferValue != null) { List<DfaInstructionState> states = myTransferValue.dispatch(falseState, interpreter); if (myMakeEphemeral) { for (DfaInstructionState negState : states) { negState.getMemoryState().markEphemeral(); } } result.addAll(states); } return result.toArray(DfaInstructionState.EMPTY_ARRAY); }