reactor/Core/src/jetbrains/mps/logic/reactor/util/ClassicIndexedTermTrie.kt [216:234]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - while (!visitStack.isEmpty()) { val (bases, ptnTerms) = visitStack.pop() if (!ptnTerms.isEmpty()) { val ptnHead = ptnTerms.first() val ptnTail = ptnTerms.subList(1, ptnTerms.size) if (!canonicTerms.containsKey(ptnHead)) { // dereferece the term only if it hasn't been dereferenced before val derefPtnHead = deref(ptnHead).let { dt -> seenNonLeaf[dt]?.run { ptnHead } ?: dt } canonicTerms[ptnHead] = derefPtnHead to symbolOrWildcard(derefPtnHead) } val (term, sym) = canonicTerms[ptnHead] !! for (base in bases) { if (sym == WILDCARD) { if (!ptnTail.isEmpty()) { // skip the current node // match the patterns tail with the current node's direct successors val (wcdTerms, wcdBases) = base.terms2bases() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - reactor/Core/src/jetbrains/mps/logic/reactor/util/ClassicTermTrie.kt [178:196]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - while (!visitStack.isEmpty()) { val (bases, ptnTerms) = visitStack.pop() if (!ptnTerms.isEmpty()) { val ptnHead = ptnTerms.first() val ptnTail = ptnTerms.subList(1, ptnTerms.size) if (!canonicTerms.containsKey(ptnHead)) { // dereferece the term only if it hasn't been dereferenced before val derefPtnHead = deref(ptnHead).let { dt -> seenNonLeaf[dt]?.run { ptnHead } ?: dt } canonicTerms[ptnHead] = derefPtnHead to symbolOrWildcard(derefPtnHead) } val (term, sym) = canonicTerms[ptnHead] !! for (base in bases) { if (sym == WILDCARD) { if (!ptnTail.isEmpty()) { // skip the current node // match the patterns tail with the current node's direct successors val (wcdTerms, wcdBases) = base.terms2bases() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -