private static void prepareForPre(SkinnyMethodAdapter mv, int specificArity, boolean block, CallConfiguration callConfig) { if (callConfig.isNoop()) return; mv.aloadMany(0, THREADCONTEXT_INDEX); switch (callConfig.framing()) { case Full: mv.aloadMany(RECEIVER_INDEX, NAME_INDEX); // self, name loadBlockForPre(mv, specificArity, block); break; case Backtrace: mv.aload(NAME_INDEX); // name break; case None: break; default: throw new RuntimeException("Unknown call configuration"); } }
private static void prepareForPre(SkinnyMethodAdapter mv, int specificArity, boolean block, CallConfiguration callConfig) { if (callConfig.isNoop()) return; mv.aloadMany(0, THREADCONTEXT_INDEX); switch (callConfig.framing()) { case Full: mv.aloadMany(RECEIVER_INDEX, NAME_INDEX); // self, name loadBlockForPre(mv, specificArity, block); break; case Backtrace: mv.aload(NAME_INDEX); // name break; case None: break; default: throw new RuntimeException("Unknown call configuration"); } }
private void prepareForPre(SkinnyMethodAdapter mv, int specificArity, boolean block, CallConfiguration callConfig) { if (callConfig.isNoop()) return; mv.aloadMany(0, THREADCONTEXT_INDEX); switch (callConfig.framing()) { case Full: mv.aloadMany(RECEIVER_INDEX, NAME_INDEX); // self, name loadBlockForPre(mv, specificArity, block); break; case Backtrace: mv.aload(NAME_INDEX); // name break; case None: break; default: throw new RuntimeException("Unknown call configuration"); } }
private void prepareForPre(SkinnyMethodAdapter mv, int specificArity, boolean block, CallConfiguration callConfig) { if (callConfig.isNoop()) return; mv.aloadMany(0, THREADCONTEXT_INDEX); switch (callConfig.framing()) { case Full: mv.aloadMany(RECEIVER_INDEX, NAME_INDEX); // self, name loadBlockForPre(mv, specificArity, block); break; case Backtrace: mv.aload(NAME_INDEX); // name break; case None: break; default: throw new RuntimeException("Unknown call configuration"); } }
private void invokeTraceCompiledPost(SkinnyMethodAdapter mv, String superClass, int traceBoolIndex) { mv.aloadMany(0, 1); // method, threadContext mv.iload(traceBoolIndex); // traceEnable mv.aload(4); // invokedName mv.invokevirtual(superClass, "returnTraceCompiled", sig(void.class, ThreadContext.class, boolean.class, String.class)); } }
private void invokeTraceCompiledPost(SkinnyMethodAdapter mv, String superClass, int traceBoolIndex) { mv.aloadMany(0, 1); // method, threadContext mv.iload(traceBoolIndex); // traceEnable mv.aload(4); // invokedName mv.invokevirtual(superClass, "returnTraceCompiled", sig(void.class, ThreadContext.class, boolean.class, String.class)); } }
private static void invokeCCallTrace(SkinnyMethodAdapter method, int traceBoolIndex) { method.aloadMany(0, 1); // method, threadContext method.iload(traceBoolIndex); // traceEnable method.aload(4); // invokedName method.invokevirtual(p(JavaMethod.class), "callTrace", sig(void.class, ThreadContext.class, boolean.class, String.class)); }
private static void invokeCReturnTrace(SkinnyMethodAdapter method, int traceBoolIndex) { method.aloadMany(0, 1); // method, threadContext method.iload(traceBoolIndex); // traceEnable method.aload(4); // invokedName method.invokevirtual(p(JavaMethod.class), "returnTrace", sig(void.class, ThreadContext.class, boolean.class, String.class)); }
private static void invokeCReturnTrace(SkinnyMethodAdapter method, int traceBoolIndex) { method.aloadMany(0, 1); // method, threadContext method.iload(traceBoolIndex); // traceEnable method.aload(4); // invokedName method.invokevirtual(p(JavaMethod.class), "returnTrace", sig(void.class, ThreadContext.class, boolean.class, String.class)); }
private static void invokeCCallTrace(SkinnyMethodAdapter method, int traceBoolIndex) { method.aloadMany(0, 1); // method, threadContext method.iload(traceBoolIndex); // traceEnable method.aload(4); // invokedName method.invokevirtual(p(JavaMethod.class), "callTrace", sig(void.class, ThreadContext.class, boolean.class, String.class)); }
private void invokeCCallTrace(SkinnyMethodAdapter method, int traceBoolIndex) { method.aloadMany(0, 1); // method, threadContext method.iload(traceBoolIndex); // traceEnable method.aload(4); // invokedName method.invokevirtual(p(JavaMethod.class), "callTrace", sig(void.class, ThreadContext.class, boolean.class, String.class)); }
private void invokeCReturnTrace(SkinnyMethodAdapter method, int traceBoolIndex) { method.aloadMany(0, 1); // method, threadContext method.iload(traceBoolIndex); // traceEnable method.aload(4); // invokedName method.invokevirtual(p(JavaMethod.class), "returnTrace", sig(void.class, ThreadContext.class, boolean.class, String.class)); }
private void invokeCReturnTrace(SkinnyMethodAdapter method, int traceBoolIndex) { method.aloadMany(0, 1); // method, threadContext method.iload(traceBoolIndex); // traceEnable method.aload(4); // invokedName method.invokevirtual(p(JavaMethod.class), "returnTrace", sig(void.class, ThreadContext.class, boolean.class, String.class)); }
private void invokeCCallTrace(SkinnyMethodAdapter method, int traceBoolIndex) { method.aloadMany(0, 1); // method, threadContext method.iload(traceBoolIndex); // traceEnable method.aload(4); // invokedName method.invokevirtual(p(JavaMethod.class), "callTrace", sig(void.class, ThreadContext.class, boolean.class, String.class)); }
private void invokeTraceCompiledPre(SkinnyMethodAdapter mv, String superClass, int traceBoolIndex, String filename, int line) { mv.aloadMany(0, 1); // method, threadContext mv.iload(traceBoolIndex); // traceEnable mv.aload(4); // invokedName mv.ldc(filename); mv.ldc(line); mv.invokevirtual(superClass, "callTraceCompiled", sig(void.class, ThreadContext.class, boolean.class, String.class, String.class, int.class)); }
private void invokeTraceCompiledPre(SkinnyMethodAdapter mv, String superClass, int traceBoolIndex, String filename, int line) { mv.aloadMany(0, 1); // method, threadContext mv.iload(traceBoolIndex); // traceEnable mv.aload(4); // invokedName mv.ldc(filename); mv.ldc(line); mv.invokevirtual(superClass, "callTraceCompiled", sig(void.class, ThreadContext.class, boolean.class, String.class, String.class, int.class)); }
private ClassWriter createJavaMethodCtor(String namePath, String sup, String parameterDesc) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); String sourceFile = namePath.substring(namePath.lastIndexOf('/') + 1) + ".gen"; cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, sup, null); cw.visitSource(sourceFile, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", JAVA_SUPER_SIG, null, null); mv.start(); mv.aloadMany(0, 1, 2); mv.visitMethodInsn(INVOKESPECIAL, sup, "<init>", JAVA_SUPER_SIG); mv.aload(0); mv.ldc(parameterDesc); mv.invokevirtual(p(JavaMethod.class), "setParameterDesc", sig(void.class, String.class)); mv.voidreturn(); mv.end(); return cw; }
private ClassWriter createBlockCtor(String namePath, String classname) { String ciClassname = "L" + classname + ";"; ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, COMPILED_BLOCK_SUPER_CLASS_NAME, null); cw.visitSource(namePath, null); cw.visitField(ACC_PRIVATE | ACC_FINAL, "$scriptObject", ciClassname, null, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", sig(Void.TYPE, params(Object.class)), null, null); mv.start(); mv.aload(0); mv.invokespecial(p(CompiledBlockCallback.class), "<init>", sig(void.class)); mv.aloadMany(0, 1); mv.checkcast(classname); mv.putfield(namePath, "$scriptObject", ciClassname); mv.voidreturn(); mv.end(); return cw; }
private ClassWriter createBlockCtor19(String namePath, String classname) { String ciClassname = "L" + classname + ";"; ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, p(Object.class), new String[] {COMPILED_BLOCK_19_INTERFACE_NAME}); cw.visitSource(namePath, null); cw.visitField(ACC_PRIVATE | ACC_FINAL, "$scriptObject", ciClassname, null, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", sig(Void.TYPE, params(Object.class)), null, null); mv.start(); mv.aload(0); mv.invokespecial(p(Object.class), "<init>", sig(void.class)); mv.aloadMany(0, 1); mv.checkcast(classname); mv.putfield(namePath, "$scriptObject", ciClassname); mv.voidreturn(); mv.end(); return cw; }
private ClassWriter createBlockCtor19(String namePath, String classname) { String ciClassname = "L" + classname + ";"; ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES); cw.visit(RubyInstanceConfig.JAVA_VERSION, ACC_PUBLIC + ACC_SUPER, namePath, null, p(Object.class), new String[] {COMPILED_BLOCK_19_INTERFACE_NAME}); cw.visitSource(namePath, null); cw.visitField(ACC_PRIVATE | ACC_FINAL, "$scriptObject", ciClassname, null, null); SkinnyMethodAdapter mv = new SkinnyMethodAdapter(cw, ACC_PUBLIC, "<init>", sig(Void.TYPE, params(Object.class)), null, null); mv.start(); mv.aload(0); mv.invokespecial(p(Object.class), "<init>", sig(void.class)); mv.aloadMany(0, 1); mv.checkcast(classname); mv.putfield(namePath, "$scriptObject", ciClassname); mv.voidreturn(); mv.end(); return cw; }