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

Class VarExpr

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

Source from the content-addressed store, hash-verified

631}
632
633public static class VarExpr implements Expr, AssignableExpr{
634 public final Var var;
635 public final Object tag;
636 final static Method getMethod = Method.getMethod("Object get()");
637 final static Method setMethod = Method.getMethod("Object set(Object)");
638
639 Class jc;
640
641 public VarExpr(Var var, Symbol tag){
642 this.var = var;
643 this.tag = tag != null ? tag : var.getTag();
644 }
645
646 public Object eval() {
647 return var.deref();
648 }
649
650 public void emit(C context, ObjExpr objx, GeneratorAdapter gen){
651 objx.emitVarValue(gen,var);
652 if(context == C.STATEMENT)
653 {
654 gen.pop();
655 }
656 }
657
658 public boolean hasJavaClass(){
659 return tag != null;
660 }
661
662 public Class getJavaClass() {
663 if (jc == null)
664 jc = HostExpr.tagToClass(tag);
665 return jc;
666 }
667
668 public Object evalAssign(Expr val) {
669 return var.set(val.eval());
670 }
671
672 public void emitAssign(C context, ObjExpr objx, GeneratorAdapter gen,
673 Expr val){
674 objx.emitVar(gen, var);
675 val.emit(C.EXPRESSION, objx, gen);
676 gen.invokeVirtual(VAR_TYPE, setMethod);
677 if(context == C.STATEMENT)
678 gen.pop();
679 }
680}
681
682public static class TheVarExpr implements Expr{
683 public final Var var;

Callers

nothing calls this directly

Calls 1

getMethodMethod · 0.95

Tested by

no test coverage detected