private void prepareCallSite(String message) { if (isNotClinit()) { mv.visitVarInsn(ALOAD, callSiteArrayVarIndex); } else { mv.visitMethodInsn(INVOKESTATIC,getClassName(),"$getCallSiteArray","()[Lorg/codehaus/groovy/runtime/callsite/CallSite;"); } final int index = allocateIndex(message); mv.visitLdcInsn(index); mv.visitInsn(AALOAD); }
private void makeGetPropertySite(Expression receiver, String methodName, boolean safe, boolean implicitThis) { if (isNotClinit()) { mv.visitVarInsn(ALOAD, callSiteArrayVarIndex); } else { mv.visitMethodInsn(INVOKESTATIC,getClassName(),"$getCallSiteArray","()[Lorg/codehaus/groovy/runtime/callsite/CallSite;"); } final int index = allocateIndex(methodName); mv.visitLdcInsn(index); mv.visitInsn(AALOAD); // site boolean lhs = leftHandExpression; leftHandExpression = false; boolean oldVal = this.implicitThis; this.implicitThis = implicitThis; visitAndAutoboxBoolean(receiver); this.implicitThis = oldVal; if (!safe) mv.visitMethodInsn(INVOKEINTERFACE,"org/codehaus/groovy/runtime/callsite/CallSite", "callGetProperty","(Ljava/lang/Object;)Ljava/lang/Object;"); else { mv.visitMethodInsn(INVOKEINTERFACE,"org/codehaus/groovy/runtime/callsite/CallSite", "callGetPropertySafe","(Ljava/lang/Object;)Ljava/lang/Object;"); } leftHandExpression = lhs; }
private void makeGroovyObjectGetPropertySite(Expression receiver, String methodName, boolean safe, boolean implicitThis) { if (isNotClinit()) { mv.visitVarInsn(ALOAD, callSiteArrayVarIndex); } else { mv.visitMethodInsn(INVOKESTATIC,getClassName(),"$getCallSiteArray","()[Lorg/codehaus/groovy/runtime/callsite/CallSite;"); } final int index = allocateIndex(methodName); mv.visitLdcInsn(index); mv.visitInsn(AALOAD); // site boolean lhs = leftHandExpression; leftHandExpression = false; boolean oldVal = this.implicitThis; this.implicitThis = implicitThis; visitAndAutoboxBoolean(receiver); this.implicitThis = oldVal; if (!safe) mv.visitMethodInsn(INVOKEINTERFACE,"org/codehaus/groovy/runtime/callsite/CallSite", "callGroovyObjectGetProperty","(Ljava/lang/Object;)Ljava/lang/Object;"); else { mv.visitMethodInsn(INVOKEINTERFACE,"org/codehaus/groovy/runtime/callsite/CallSite", "callGroovyObjectGetPropertySafe","(Ljava/lang/Object;)Ljava/lang/Object;"); } leftHandExpression = lhs; }
mv.visitMethodInsn(INVOKESTATIC,getClassName(),"$getCallSiteArray","()[Lorg/codehaus/groovy/runtime/callsite/CallSite;");