reactor/Core/src/jetbrains/mps/logic/reactor/util/ClassicIndexedTermTrie.kt [133:154]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - val seen = IdentityHashMap() val nodeStack = arrayListOf(root) val termStack = arrayListOf(matchTerm) val argPool = arrayListOf() while (!termStack.isEmpty()) { val node = nodeStack.peek() val term = termStack.pop() // dereferece the term only if it hasn't been dereferenced before val deref = deref(term).let { dt -> seen[dt]?.run { term } ?: dt.apply { seen[dt] = term } } argPool.addAll(deref.arguments()) for(i in 1..argPool.size) { termStack.push(argPool[argPool.size - i]) } argPool.clear() val nextNode = node.next(symbolOrWildcard(deref)) if (nextNode == null) { // term not found return } nodeStack.push(nextNode) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - reactor/Core/src/jetbrains/mps/logic/reactor/util/ClassicTermTrie.kt [111:132]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - val seen = IdentityHashMap() val nodeStack = arrayListOf(root) val termStack = arrayListOf(matchTerm) val argPool = arrayListOf() while (!termStack.isEmpty()) { val node = nodeStack.peek() val term = termStack.pop() // dereferece the term only if it hasn't been dereferenced before val deref = deref(term).let { dt -> seen[dt]?.run { term } ?: dt.apply { seen[dt] = term } } argPool.addAll(deref.arguments()) for(i in 1..argPool.size) { termStack.push(argPool[argPool.size - i]) } argPool.clear() val nextNode = node.next(symbolOrWildcard(deref)) if (nextNode == null) { // term not found return } nodeStack.push(nextNode) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -