int index,
CoreInferInfo& info)
{
+ NodeManager* nm = NodeManager::currentNM();
+ Node conc;
+ const std::vector<Node>& veci = nfi.d_nf;
+ const std::vector<Node>& vecoi = nfj.d_nf;
+
+ TypeNode stype = veci[loop_index].getType();
+
if (options::stringProcessLoopMode() == options::ProcessLoopMode::ABORT)
{
throw LogicException("Looping word equation encountered.");
}
- else if (options::stringProcessLoopMode() == options::ProcessLoopMode::NONE)
+ else if (options::stringProcessLoopMode() == options::ProcessLoopMode::NONE
+ || stype.isSequence())
{
+ // note we cannot convert looping word equations into regular expressions if
+ // we are handling sequences, since there is no analog for regular
+ // expressions over sequences currently
d_im.setIncomplete(IncompleteId::STRINGS_LOOP_SKIP);
return ProcessLoopResult::SKIPPED;
}
- NodeManager* nm = NodeManager::currentNM();
- Node conc;
- const std::vector<Node>& veci = nfi.d_nf;
- const std::vector<Node>& vecoi = nfj.d_nf;
-
- TypeNode stype = veci[loop_index].getType();
-
Trace("strings-loop") << "Detected possible loop for " << veci[loop_index]
<< std::endl;
Trace("strings-loop") << " ... (X)= " << vecoi[index] << std::endl;