public void pushmethod(String name, IRScope scope, Signature signature, boolean specificArity) { clsData().pushmethod(name, scope, signature, specificArity); method().startMethod(); }
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()); }
@Override public void Scope(Scope scope) { IRScope irScope = scope.getScope(); String name = JavaNameMangler.encodeScopeForBacktrace(irScope) + '$' + methodIndex++ + "_IRSCope"; if (scopeMap.get(name) == null) { scopeMap.put(name, irScope); jvm.cls().visitField(Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC | Opcodes.ACC_VOLATILE, name, ci(IRScope.class), null, null).visitEnd(); } jvmAdapter().getstatic(jvm.clsData().clsName, name, ci(IRScope.class)); jvmAdapter().invokestatic(p(Helpers.class), "getStaticScope", sig(StaticScope.class, IRScope.class)); }
@Override public void Scope(Scope scope) { IRScope irScope = scope.getScope(); String name = JavaNameMangler.encodeScopeForBacktrace(irScope) + '$' + methodIndex++ + "_IRSCope"; if (scopeMap.get(name) == null) { scopeMap.put(name, irScope); jvm.cls().visitField(Opcodes.ACC_STATIC | Opcodes.ACC_PUBLIC | Opcodes.ACC_VOLATILE, name, ci(IRScope.class), null, null).visitEnd(); } jvmAdapter().getstatic(jvm.clsData().clsName, name, ci(IRScope.class)); jvmAdapter().invokestatic(p(Helpers.class), "getStaticScope", sig(StaticScope.class, IRScope.class)); }
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()); }
protected Handle emitClosure(IRClosure closure, boolean print) { /* Compile the closure like a method */ String name = JavaNameMangler.encodeScopeForBacktrace(closure) + '$' + methodIndex++; emitScope(closure, name, CLOSURE_SIGNATURE, false, print); return new Handle( Opcodes.H_INVOKESTATIC, jvm.clsData().clsName, name, sig(CLOSURE_SIGNATURE.type().returnType(), CLOSURE_SIGNATURE.type().parameterArray()), false); }
protected Handle emitClosure(IRClosure closure, boolean print) { /* Compile the closure like a method */ String name = JavaNameMangler.encodeScopeForBacktrace(closure) + '$' + methodIndex++; emitScope(closure, name, CLOSURE_SIGNATURE, false, print); return new Handle( Opcodes.H_INVOKESTATIC, jvm.clsData().clsName, name, sig(CLOSURE_SIGNATURE.type().returnType(), CLOSURE_SIGNATURE.type().parameterArray()), false); }
protected Handle emitModuleBody(IRModuleBody method) { String name = JavaNameMangler.encodeScopeForBacktrace(method) + '$' + methodIndex++; Signature signature = signatureFor(method, false); emitScope(method, name, signature, false, true); return new Handle( Opcodes.H_INVOKESTATIC, jvm.clsData().clsName, name, sig(signature.type().returnType(), signature.type().parameterArray()), false); }
protected Handle emitModuleBody(IRModuleBody method) { String name = JavaNameMangler.encodeScopeForBacktrace(method) + '$' + methodIndex++; Signature signature = signatureFor(method, false); emitScope(method, name, signature, false, true); return new Handle( Opcodes.H_INVOKESTATIC, jvm.clsData().clsName, name, sig(signature.type().returnType(), signature.type().parameterArray()), false); }
@Override public void WrappedIRClosure(WrappedIRClosure wrappedirclosure) { IRClosure closure = wrappedirclosure.getClosure(); jvmMethod().loadContext(); visit(closure.getSelf()); jvmLoadLocal(DYNAMIC_SCOPE); jvmMethod().prepareBlock(closure.getHandle(), closure.getSignature(), jvm.clsData().clsName); }
@Override public void WrappedIRClosure(WrappedIRClosure wrappedirclosure) { IRClosure closure = wrappedirclosure.getClosure(); jvmMethod().loadContext(); visit(closure.getSelf()); jvmLoadLocal(DYNAMIC_SCOPE); jvmMethod().prepareBlock(closure.getHandle(), closure.getSignature(), jvm.clsData().clsName); }
@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()); }