private void prepareCallSite(String message) { if (isNotClinit()) { mv.visitVarInsn(ALOAD, callSiteArrayVarIndex); } else { mv.visitMethodInsn(INVOKESTATIC,internalClassName,"$getCallSiteArray","()[Lorg/codehaus/groovy/runtime/callsite/CallSite;"); } final int index = allocateIndex(message); mv.visitLdcInsn(index); mv.visitInsn(AALOAD); }
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,internalClassName,"$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,internalClassName,"$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; }
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; }
private void visitStdMethod(MethodNode node, boolean isConstructor, Parameter[] parameters, Statement code) { if (isConstructor && (code == null || !((ConstructorNode) node).firstStatementIsSpecialConstructorCall())) { // invokes the super class constructor mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, BytecodeHelper.getClassInternalName(classNode.getSuperClass()), "<init>", "()V"); } compileStack.init(node.getVariableScope(), parameters, mv, classNode); if (isNotClinit()) { mv.visitMethodInsn(INVOKESTATIC,internalClassName,"$getCallSiteArray","()[Lorg/codehaus/groovy/runtime/callsite/CallSite;"); callSiteArrayVarIndex = compileStack.defineTemporaryVariable("$local$callSiteArray", ClassHelper.make(CallSite[].class), true); } // handle body super.visitConstructorOrMethod(node, isConstructor); if (!outputReturn || node.isVoidMethod()) { mv.visitInsn(RETURN); } compileStack.clear(); final Label finallyStart = new Label(); mv.visitJumpInsn(GOTO, finallyStart); // let's do all the exception blocks for (Iterator iter = exceptionBlocks.iterator(); iter.hasNext();) { Runnable runnable = (Runnable) iter.next(); runnable.run(); } exceptionBlocks.clear(); }
private void visitStdMethod(MethodNode node, boolean isConstructor, Parameter[] parameters, Statement code) { if (isConstructor && (code == null || !((ConstructorNode) node).firstStatementIsSpecialConstructorCall())) { // invokes the super class constructor mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, BytecodeHelper.getClassInternalName(classNode.getSuperClass()), "<init>", "()V"); } compileStack.init(node.getVariableScope(), parameters, mv, classNode); if (isNotClinit()) { mv.visitMethodInsn(INVOKESTATIC,internalClassName,"$getCallSiteArray","()[Lorg/codehaus/groovy/runtime/callsite/CallSite;"); callSiteArrayVarIndex = compileStack.defineTemporaryVariable("$local$callSiteArray", ClassHelper.make(CallSite[].class), true); } // handle body super.visitConstructorOrMethod(node, isConstructor); if (!outputReturn || node.isVoidMethod()) { mv.visitInsn(RETURN); } compileStack.clear(); final Label finallyStart = new Label(); mv.visitJumpInsn(GOTO, finallyStart); // let's do all the exception blocks for (Iterator iter = exceptionBlocks.iterator(); iter.hasNext();) { Runnable runnable = (Runnable) iter.next(); runnable.run(); } exceptionBlocks.clear(); }
private void makeCallSite(Expression receiver, String message, Expression arguments, boolean safe, boolean implicitThis, boolean callCurrent, boolean callStatic) { if (isNotClinit()) { mv.visitVarInsn(ALOAD, callSiteArrayVarIndex);
private void makeCallSite(Expression receiver, String message, Expression arguments, boolean safe, boolean implicitThis, boolean callCurrent, boolean callStatic) { if (isNotClinit()) { mv.visitVarInsn(ALOAD, callSiteArrayVarIndex);