| 21603 | }, 160, true); |
| 21604 | |
| 21605 | function comprehensiveArrayExpression() { |
| 21606 | var res = {}; |
| 21607 | res.exps = true; |
| 21608 | state.funct["(comparray)"].stack(); |
| 21609 | |
| 21610 | // Handle reversed for expressions, used in spidermonkey |
| 21611 | var reversed = false; |
| 21612 | if (state.tokens.next.value !== "for") { |
| 21613 | reversed = true; |
| 21614 | if (!state.inMoz()) { |
| 21615 | warning("W116", state.tokens.next, "for", state.tokens.next.value); |
| 21616 | } |
| 21617 | state.funct["(comparray)"].setState("use"); |
| 21618 | res.right = expression(10); |
| 21619 | } |
| 21620 | |
| 21621 | advance("for"); |
| 21622 | if (state.tokens.next.value === "each") { |
| 21623 | advance("each"); |
| 21624 | if (!state.inMoz()) { |
| 21625 | warning("W118", state.tokens.curr, "for each"); |
| 21626 | } |
| 21627 | } |
| 21628 | advance("("); |
| 21629 | state.funct["(comparray)"].setState("define"); |
| 21630 | res.left = expression(130); |
| 21631 | if (_.contains(["in", "of"], state.tokens.next.value)) { |
| 21632 | advance(); |
| 21633 | } else { |
| 21634 | error("E045", state.tokens.curr); |
| 21635 | } |
| 21636 | state.funct["(comparray)"].setState("generate"); |
| 21637 | expression(10); |
| 21638 | |
| 21639 | advance(")"); |
| 21640 | if (state.tokens.next.value === "if") { |
| 21641 | advance("if"); |
| 21642 | advance("("); |
| 21643 | state.funct["(comparray)"].setState("filter"); |
| 21644 | res.filter = expression(10); |
| 21645 | advance(")"); |
| 21646 | } |
| 21647 | |
| 21648 | if (!reversed) { |
| 21649 | state.funct["(comparray)"].setState("use"); |
| 21650 | res.right = expression(10); |
| 21651 | } |
| 21652 | |
| 21653 | advance("]"); |
| 21654 | state.funct["(comparray)"].unstack(); |
| 21655 | return res; |
| 21656 | } |
| 21657 | |
| 21658 | prefix("[", function() { |
| 21659 | var blocktype = lookupBlockType(); |