// 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);
}