public static Handle getBootstrapHandle(String name, Class type, String sig) { return new Handle( Opcodes.H_INVOKESTATIC, p(type), name, sig, false); }
@Override public void prepareBlock(Handle handle, org.jruby.runtime.Signature signature, String className) { Handle scopeHandle = new Handle( Opcodes.H_GETSTATIC, getClassData().clsName, handle.getName() + "_IRScope", ci(IRScope.class), false); long encodedSignature = signature.encode(); adapter.invokedynamic(handle.getName(), sig(Block.class, ThreadContext.class, IRubyObject.class, DynamicScope.class), Bootstrap.prepareBlock(), handle, scopeHandle, encodedSignature); }
@Override public void DefineModuleInstr(DefineModuleInstr definemoduleinstr) { IRModuleBody newIRModuleBody = definemoduleinstr.getNewIRModuleBody(); jvmMethod().loadContext(); Handle handle = emitModuleBody(newIRModuleBody); jvmMethod().pushHandle(handle); jvmAdapter().getstatic(jvm.clsData().clsName, handle.getName() + "_IRScope", ci(IRScope.class)); visit(definemoduleinstr.getContainer()); jvmMethod().invokeIRHelper("newCompiledModuleBody", sig(DynamicMethod.class, ThreadContext.class, java.lang.invoke.MethodHandle.class, IRScope.class, Object.class)); jvmStoreLocal(definemoduleinstr.getResult()); }
@Override public void DefineMetaClassInstr(DefineMetaClassInstr definemetaclassinstr) { IRModuleBody metaClassBody = definemetaclassinstr.getMetaClassBody(); jvmMethod().loadContext(); Handle handle = emitModuleBody(metaClassBody); jvmMethod().pushHandle(handle); jvmAdapter().getstatic(jvm.clsData().clsName, handle.getName() + "_IRScope", ci(IRScope.class)); visit(definemetaclassinstr.getObject()); jvmMethod().invokeIRHelper("newCompiledMetaClass", sig(DynamicMethod.class, ThreadContext.class, java.lang.invoke.MethodHandle.class, IRScope.class, IRubyObject.class)); jvmStoreLocal(definemetaclassinstr.getResult()); }
public static Handle getBootstrapHandle(String name, Class type, String sig) { return new Handle( Opcodes.H_INVOKESTATIC, p(type), name, sig, false); }
@Override public void prepareBlock(Handle handle, org.jruby.runtime.Signature signature, String className) { Handle scopeHandle = new Handle( Opcodes.H_GETSTATIC, getClassData().clsName, handle.getName() + "_IRScope", ci(IRScope.class), false); long encodedSignature = signature.encode(); adapter.invokedynamic(handle.getName(), sig(Block.class, ThreadContext.class, IRubyObject.class, DynamicScope.class), Bootstrap.prepareBlock(), handle, scopeHandle, encodedSignature); }
@Override public void DefineModuleInstr(DefineModuleInstr definemoduleinstr) { IRModuleBody newIRModuleBody = definemoduleinstr.getNewIRModuleBody(); jvmMethod().loadContext(); Handle handle = emitModuleBody(newIRModuleBody); jvmMethod().pushHandle(handle); jvmAdapter().getstatic(jvm.clsData().clsName, handle.getName() + "_IRScope", ci(IRScope.class)); visit(definemoduleinstr.getContainer()); jvmMethod().invokeIRHelper("newCompiledModuleBody", sig(DynamicMethod.class, ThreadContext.class, java.lang.invoke.MethodHandle.class, IRScope.class, Object.class)); jvmStoreLocal(definemoduleinstr.getResult()); }
public static Handle getBootstrapHandle(String name, Class type, String sig) { return new Handle(Opcodes.H_INVOKESTATIC, p(type), name, sig); }
@Override public void DefineMetaClassInstr(DefineMetaClassInstr definemetaclassinstr) { IRModuleBody metaClassBody = definemetaclassinstr.getMetaClassBody(); jvmMethod().loadContext(); Handle handle = emitModuleBody(metaClassBody); jvmMethod().pushHandle(handle); jvmAdapter().getstatic(jvm.clsData().clsName, handle.getName() + "_IRScope", ci(IRScope.class)); visit(definemetaclassinstr.getObject()); jvmMethod().invokeIRHelper("newCompiledMetaClass", sig(DynamicMethod.class, ThreadContext.class, java.lang.invoke.MethodHandle.class, IRScope.class, IRubyObject.class)); jvmStoreLocal(definemetaclassinstr.getResult()); }
public static Handle getBootstrapHandle(String name, Class type, String sig) { return new Handle(Opcodes.H_INVOKESTATIC, p(type), name, sig); }
@Override public void DefineClassInstr(DefineClassInstr defineclassinstr) { IRClassBody newIRClassBody = defineclassinstr.getNewIRClassBody(); jvmMethod().loadContext(); Handle handle = emitModuleBody(newIRClassBody); jvmMethod().pushHandle(handle); jvmAdapter().getstatic(jvm.clsData().clsName, handle.getName() + "_IRScope", ci(IRScope.class)); visit(defineclassinstr.getContainer()); visit(defineclassinstr.getSuperClass()); jvmMethod().invokeIRHelper("newCompiledClassBody", sig(DynamicMethod.class, ThreadContext.class, java.lang.invoke.MethodHandle.class, IRScope.class, Object.class, Object.class)); jvmStoreLocal(defineclassinstr.getResult()); }
public static Handle bytelist() { return new Handle( Opcodes.H_INVOKESTATIC, p(Bootstrap.class), "bytelist", sig(CallSite.class, Lookup.class, String.class, MethodType.class, String.class, String.class), false); }
@Override public void DefineClassInstr(DefineClassInstr defineclassinstr) { IRClassBody newIRClassBody = defineclassinstr.getNewIRClassBody(); jvmMethod().loadContext(); Handle handle = emitModuleBody(newIRClassBody); jvmMethod().pushHandle(handle); jvmAdapter().getstatic(jvm.clsData().clsName, handle.getName() + "_IRScope", ci(IRScope.class)); visit(defineclassinstr.getContainer()); visit(defineclassinstr.getSuperClass()); jvmMethod().invokeIRHelper("newCompiledClassBody", sig(DynamicMethod.class, ThreadContext.class, java.lang.invoke.MethodHandle.class, IRScope.class, Object.class, Object.class)); jvmStoreLocal(defineclassinstr.getResult()); }
public static Handle global() { return new Handle( Opcodes.H_INVOKESTATIC, p(Bootstrap.class), "globalBootstrap", sig(CallSite.class, Lookup.class, String.class, MethodType.class, String.class, int.class), false); }
@Override public void prepareBlock(Handle handle, org.jruby.runtime.Signature signature, String className) { // FIXME: too much bytecode String cacheField = "blockBody" + getClassData().callSiteCount.getAndIncrement(); Label done = new Label(); adapter.getClassVisitor().visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, cacheField, ci(CompiledIRBlockBody.class), null, null).visitEnd(); adapter.getstatic(getClassData().clsName, cacheField, ci(CompiledIRBlockBody.class)); adapter.dup(); adapter.ifnonnull(done); { adapter.pop(); adapter.newobj(p(CompiledIRBlockBody.class)); adapter.dup(); adapter.ldc(handle); adapter.getstatic(className, handle.getName() + "_IRScope", ci(IRScope.class)); adapter.ldc(signature.encode()); adapter.invokespecial(p(CompiledIRBlockBody.class), "<init>", sig(void.class, java.lang.invoke.MethodHandle.class, IRScope.class, long.class)); adapter.dup(); adapter.putstatic(getClassData().clsName, cacheField, ci(CompiledIRBlockBody.class)); } adapter.label(done); invokeIRHelper("prepareBlock", sig(Block.class, ThreadContext.class, IRubyObject.class, DynamicScope.class, BlockBody.class)); }
public static Handle prepareBlock() { return new Handle( Opcodes.H_INVOKESTATIC, p(Bootstrap.class), "prepareBlock", sig(CallSite.class, Lookup.class, String.class, MethodType.class, MethodHandle.class, MethodHandle.class, long.class), false); }
@Override public void prepareBlock(Handle handle, org.jruby.runtime.Signature signature, String className) { // FIXME: too much bytecode String cacheField = "blockBody" + getClassData().callSiteCount.getAndIncrement(); Label done = new Label(); adapter.getClassVisitor().visitField(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, cacheField, ci(CompiledIRBlockBody.class), null, null).visitEnd(); adapter.getstatic(getClassData().clsName, cacheField, ci(CompiledIRBlockBody.class)); adapter.dup(); adapter.ifnonnull(done); { adapter.pop(); adapter.newobj(p(CompiledIRBlockBody.class)); adapter.dup(); adapter.ldc(handle); adapter.getstatic(className, handle.getName() + "_IRScope", ci(IRScope.class)); adapter.ldc(signature.encode()); adapter.invokespecial(p(CompiledIRBlockBody.class), "<init>", sig(void.class, java.lang.invoke.MethodHandle.class, IRScope.class, long.class)); adapter.dup(); adapter.putstatic(getClassData().clsName, cacheField, ci(CompiledIRBlockBody.class)); } adapter.label(done); invokeIRHelper("prepareBlock", sig(Block.class, ThreadContext.class, IRubyObject.class, DynamicScope.class, BlockBody.class)); }
public static Handle string() { return new Handle( Opcodes.H_INVOKESTATIC, p(Bootstrap.class), "string", sig(CallSite.class, Lookup.class, String.class, MethodType.class, String.class, String.class, int.class), false); }
public static Handle kwargsHash() { return new Handle( Opcodes.H_INVOKESTATIC, p(Bootstrap.class), "kwargsHash", sig(CallSite.class, Lookup.class, String.class, MethodType.class), false); }
public static Handle contextValueString() { return new Handle( Opcodes.H_INVOKESTATIC, p(Bootstrap.class), "contextValueString", sig(CallSite.class, Lookup.class, String.class, MethodType.class, String.class), false); }