| 6676 | } |
| 6677 | |
| 6678 | public static class BodyExpr implements Expr, MaybePrimitiveExpr{ |
| 6679 | PersistentVector exprs; |
| 6680 | |
| 6681 | public final PersistentVector exprs(){ |
| 6682 | return exprs; |
| 6683 | } |
| 6684 | |
| 6685 | public BodyExpr(PersistentVector exprs){ |
| 6686 | this.exprs = exprs; |
| 6687 | } |
| 6688 | |
| 6689 | static class Parser implements IParser{ |
| 6690 | public Expr parse(C context, Object frms) { |
| 6691 | ISeq forms = (ISeq) frms; |
| 6692 | if(Util.equals(RT.first(forms), DO)) |
| 6693 | forms = RT.next(forms); |
| 6694 | PersistentVector exprs = PersistentVector.EMPTY; |
| 6695 | for(; forms != null; forms = forms.next()) |
| 6696 | { |
| 6697 | Expr e = (context != C.EVAL && |
| 6698 | (context == C.STATEMENT || forms.next() != null)) ? |
| 6699 | analyze(C.STATEMENT, forms.first()) |
| 6700 | : |
| 6701 | analyze(context, forms.first()); |
| 6702 | exprs = exprs.cons(e); |
| 6703 | } |
| 6704 | if(exprs.count() == 0) |
| 6705 | exprs = exprs.cons(NIL_EXPR); |
| 6706 | return new BodyExpr(exprs); |
| 6707 | } |
| 6708 | } |
| 6709 | |
| 6710 | public Object eval() { |
| 6711 | Object ret = null; |
| 6712 | for(Object o : exprs) |
| 6713 | { |
| 6714 | Expr e = (Expr) o; |
| 6715 | ret = e.eval(); |
| 6716 | } |
| 6717 | return ret; |
| 6718 | } |
| 6719 | |
| 6720 | public boolean canEmitPrimitive(){ |
| 6721 | return lastExpr() instanceof MaybePrimitiveExpr && ((MaybePrimitiveExpr)lastExpr()).canEmitPrimitive(); |
| 6722 | } |
| 6723 | |
| 6724 | public void emitUnboxed(C context, ObjExpr objx, GeneratorAdapter gen){ |
| 6725 | for(int i = 0; i < exprs.count() - 1; i++) |
| 6726 | { |
| 6727 | Expr e = (Expr) exprs.nth(i); |
| 6728 | e.emit(C.STATEMENT, objx, gen); |
| 6729 | } |
| 6730 | MaybePrimitiveExpr last = (MaybePrimitiveExpr) exprs.nth(exprs.count() - 1); |
| 6731 | last.emitUnboxed(context, objx, gen); |
| 6732 | } |
| 6733 | |
| 6734 | public void emit(C context, ObjExpr objx, GeneratorAdapter gen){ |
| 6735 | for(int i = 0; i < exprs.count() - 1; i++) |
nothing calls this directly
no outgoing calls
no test coverage detected