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

Method emit

src/jvm/clojure/lang/Compiler.java:3835–3867  ·  view source on GitHub ↗
(C context, ObjExpr objx, GeneratorAdapter gen)

Source from the content-addressed store, hash-verified

3833 }
3834
3835 public void emit(C context, ObjExpr objx, GeneratorAdapter gen){
3836 Label endLabel = gen.newLabel();
3837 Label faultLabel = gen.newLabel();
3838
3839 gen.visitLineNumber(line, gen.mark());
3840 gen.getStatic(objx.objtype, objx.thunkNameStatic(siteIndex),ObjExpr.ILOOKUP_THUNK_TYPE);
3841 gen.dup(); //thunk, thunk
3842 target.emit(C.EXPRESSION, objx, gen); //thunk,thunk,target
3843 gen.visitLineNumber(line, gen.mark());
3844 gen.dupX2(); //target,thunk,thunk,target
3845 gen.invokeInterface(ObjExpr.ILOOKUP_THUNK_TYPE, Method.getMethod("Object get(Object)")); //target,thunk,result
3846 gen.dupX2(); //result,target,thunk,result
3847 gen.visitJumpInsn(IF_ACMPEQ, faultLabel); //result,target
3848 gen.pop(); //result
3849 gen.goTo(endLabel);
3850
3851 gen.mark(faultLabel); //result,target
3852 gen.swap(); //target,result
3853 gen.pop(); //target
3854 gen.dup(); //target,target
3855 gen.getStatic(objx.objtype, objx.siteNameStatic(siteIndex),ObjExpr.KEYWORD_LOOKUPSITE_TYPE); //target,target,site
3856 gen.swap(); //target,site,target
3857 gen.invokeInterface(ObjExpr.ILOOKUP_SITE_TYPE,
3858 Method.getMethod("clojure.lang.ILookupThunk fault(Object)")); //target,new-thunk
3859 gen.dup(); //target,new-thunk,new-thunk
3860 gen.putStatic(objx.objtype, objx.thunkNameStatic(siteIndex),ObjExpr.ILOOKUP_THUNK_TYPE); //target,new-thunk
3861 gen.swap(); //new-thunk,target
3862 gen.invokeInterface(ObjExpr.ILOOKUP_THUNK_TYPE, Method.getMethod("Object get(Object)")); //result
3863
3864 gen.mark(endLabel);
3865 if(context == C.STATEMENT)
3866 gen.pop();
3867 }
3868
3869 public boolean hasJavaClass() {
3870 return tag != null;

Callers

nothing calls this directly

Calls 15

getMethodMethod · 0.95
newLabelMethod · 0.80
markMethod · 0.80
getStaticMethod · 0.80
thunkNameStaticMethod · 0.80
dupMethod · 0.80
dupX2Method · 0.80
invokeInterfaceMethod · 0.80
goToMethod · 0.80
siteNameStaticMethod · 0.80
putStaticMethod · 0.80
emitMethod · 0.65

Tested by

no test coverage detected