public void emit(IRModuleBody method) { String name = method.getName(); if (name.indexOf("DUMMY_MC") != -1) { name = "METACLASS"; } name = emitScope(method, name, 0); // push a method handle for binding purposes jvm.method().pushHandle(jvm.clsData().clsName, name, method.getStaticScope().getRequiredArgs()); }
public void emit(IRModuleBody method) { String name = method.getName(); if (name.indexOf("DUMMY_MC") != -1) { name = "METACLASS"; } name = emitScope(method, name, 0); // push a method handle for binding purposes jvm.method().pushHandle(jvm.clsData().clsName, name, method.getStaticScope().getRequiredArgs()); }
public void emit(IRMethod method) { String name = emitScope(method, method.getName(), method.getCallArgs().length); // push a method handle for binding purposes jvm.method().pushHandle(jvm.clsData().clsName, name, method.getStaticScope().getRequiredArgs()); }
public void emit(IRMethod method) { String name = emitScope(method, method.getName(), method.getCallArgs().length); // push a method handle for binding purposes jvm.method().pushHandle(jvm.clsData().clsName, name, method.getStaticScope().getRequiredArgs()); }
private String pushHandlesForDef(String variableName, String specificName, IntHashMap<MethodType> signaturesExceptVariable, MethodType variable, String variableOnly, String variableAndSpecific) { String defSignature; jvmMethod().pushHandle(new Handle( Opcodes.H_INVOKESTATIC, jvm.clsData().clsName, variableName, sig(variable.returnType(), variable.parameterArray()), false)); if (signaturesExceptVariable.size() == 0) { defSignature = variableOnly; } else { defSignature = variableAndSpecific; for (IntHashMap.Entry<MethodType> entry : signaturesExceptVariable.entrySet()) { jvmMethod().pushHandle(new Handle( Opcodes.H_INVOKESTATIC, jvm.clsData().clsName, specificName, sig(entry.getValue().returnType(), entry.getValue().parameterArray()), false)); jvmAdapter().pushInt(entry.getKey()); break; // FIXME: only supports one arity } } return defSignature; }
private String pushHandlesForDef(String variableName, String specificName, IntHashMap<MethodType> signaturesExceptVariable, MethodType variable, String variableOnly, String variableAndSpecific) { String defSignature; jvmMethod().pushHandle(new Handle( Opcodes.H_INVOKESTATIC, jvm.clsData().clsName, variableName, sig(variable.returnType(), variable.parameterArray()), false)); if (signaturesExceptVariable.size() == 0) { defSignature = variableOnly; } else { defSignature = variableAndSpecific; for (IntHashMap.Entry<MethodType> entry : signaturesExceptVariable.entrySet()) { jvmMethod().pushHandle(new Handle( Opcodes.H_INVOKESTATIC, jvm.clsData().clsName, specificName, sig(entry.getValue().returnType(), entry.getValue().parameterArray()), false)); jvmAdapter().pushInt(entry.getKey()); break; // FIXME: only supports one arity } } return defSignature; }
@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()); }
@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()); }
@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 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()); }
@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()); }