(C context, ObjExpr objx, GeneratorAdapter gen)
| 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; |
nothing calls this directly
no test coverage detected