MCPcopy Index your code
hub / github.com/clojure/clojure / BodyExpr

Class BodyExpr

src/jvm/clojure/lang/Compiler.java:6678–6755  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6676}
6677
6678public 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++)

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected