// convert each item to a criterion for (i = 1; i LTE arrayLen(item); i = i + 1) { // it's an OR, and it's a legal location for one if (i GT 1 AND i LT arrayLen(item) AND isSimpleValue(item[i]) AND compare(item[i], "OR") EQ 0) { item[i] = createObject("component", "orcriterion").init( convertToCriterion(item[i - 1], replacedStrings), convertToCriterion(item[i + 1], replacedStrings) ); arrayDeleteAt(item, i + 1); arrayDeleteAt(item, i - 1); i = i - 1; } else { item[i] = convertToCriterion(item[i], replacedStrings); } } // aggregate the array into and-criterions while (arrayLen(item) GT 1) { i = arrayLen(item); item[i - 1] = createObject("component", "andcriterion").init(item[i - 1], item[i]); arrayDeleteAt(item, i); }