for (Iterator<AbsoluteAddress> it = Program.getProgram().codeAddressIterator(); it.hasNext();) {
targetValue = it.next().toNumericConstant();
assumption = ExpressionFactory.createEqual(stmt.getTargetExpression(), targetValue);
// set next label to jump target
nextLabel = new Location(new AbsoluteAddress(targetValue));
RTLAssume assume = new RTLAssume(assumption, stmt);
assume.setLabel(stmt.getLabel());
assume.setNextLabel(nextLabel);
results.add(new CFAEdge(assume.getLabel(), assume.getNextLabel(), assume));
}
continue;
}
} else {
// assume (condition = true AND targetExpression = targetValue)
assumption = ExpressionFactory.createAnd(
assumption,
ExpressionFactory.createEqual(
stmt.getTargetExpression(),
targetValue)
);
// set next label to jump target
nextLabel = new Location(new AbsoluteAddress(targetValue));
}
}
assumption = assumption.evaluate(new Context());
RTLAssume assume = new RTLAssume(assumption, stmt);
assume.setLabel(stmt.getLabel());