(final InlineContext ic)
| 109 | } |
| 110 | |
| 111 | @Override |
| 112 | public final Expr inline(final InlineContext ic) throws QueryException { |
| 113 | boolean changed = false; |
| 114 | // context inlining: only consider first expression |
| 115 | final CompileContext cc = ic.cc; |
| 116 | final int el = ic.var == null ? 1 : exprs.length; |
| 117 | final boolean items = items(); |
| 118 | for(int e = 0; e < el; e++) { |
| 119 | Expr inlined; |
| 120 | try { |
| 121 | inlined = exprs[e].inline(ic); |
| 122 | } catch(final QueryException ex) { |
| 123 | // replace original expression with error |
| 124 | inlined = FnError.get(ex, exprs[e]); |
| 125 | } |
| 126 | if(inlined != null) { |
| 127 | exprs[e] = inlined; |
| 128 | changed = true; |
| 129 | } else { |
| 130 | inlined = exprs[e]; |
| 131 | } |
| 132 | if(e == 0) cc.pushFocus(inlined, items); |
| 133 | else cc.updateFocus(inlined, items); |
| 134 | } |
| 135 | cc.removeFocus(); |
| 136 | |
| 137 | return changed ? optimize(cc) : null; |
| 138 | } |
| 139 | |
| 140 | @Override |
| 141 | public final void markTailCalls(final CompileContext cc) { |
nothing calls this directly
no test coverage detected