@Override public void Self(Self self) { // %self is in JVM-local-2 always jvm.method().loadLocal(2); }
@Override public void Self(Self self) { // %self is in JVM-local-2 always jvm.method().loadLocal(2); }
public void emitVariable(Variable variable) { // System.out.println("variable: " + variable); int index = getJVMLocalVarIndex(variable); // System.out.println("index: " + index); jvm.method().loadLocal(index); }
@Override public void AliasInstr(AliasInstr aliasInstr) { IRBytecodeAdapter m = jvm.method(); m.loadLocal(0); m.loadLocal(getJVMLocalVarIndex(aliasInstr.getReceiver())); m.adapter.ldc(((StringLiteral) aliasInstr.getNewName()).string); m.adapter.ldc(((StringLiteral) aliasInstr.getOldName()).string); m.invokeHelper("defineAlias", IRubyObject.class, ThreadContext.class, IRubyObject.class, Object.class, Object.class); m.adapter.pop(); }
@Override public void ReceivePreReqdArgInstr(ReceivePreReqdArgInstr instr) { int index = getJVMLocalVarIndex(instr.getResult()); jvm.method().loadLocal(3 + instr.getArgIndex()); jvm.method().storeLocal(index); }
@Override public void ReceivePreReqdArgInstr(ReceivePreReqdArgInstr instr) { int index = getJVMLocalVarIndex(instr.getResult()); jvm.method().loadLocal(3 + instr.getArgIndex()); jvm.method().storeLocal(index); }
@Override public void Array(Array array) { jvm.method().loadLocal(0); for (Operand operand : array.getElts()) { visit(operand); } jvm.method().array(array.getElts().length); }
@Override public void Array(Array array) { jvm.method().loadLocal(0); for (Operand operand : array.getElts()) { visit(operand); } jvm.method().array(array.getElts().length); }
@Override public void ProcessModuleBodyInstr(ProcessModuleBodyInstr processmodulebodyinstr) { jvm.method().loadLocal(0); visit(processmodulebodyinstr.getModuleBody()); jvm.method().invokeHelper("invokeModuleBody", IRubyObject.class, ThreadContext.class, CompiledIRMethod.class); jvmStoreLocal(processmodulebodyinstr.getResult()); }
private void jvmLoadLocal(Variable variable) { if (variable instanceof TemporaryLocalVariable) { switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: jvmAdapter().dload(getJVMLocalVarIndex(variable)); break; case FIXNUM: jvmAdapter().lload(getJVMLocalVarIndex(variable)); break; case BOOLEAN: jvmAdapter().iload(getJVMLocalVarIndex(variable)); break; default: jvmMethod().loadLocal(getJVMLocalVarIndex(variable)); break; } } else { jvmMethod().loadLocal(getJVMLocalVarIndex(variable)); } }
private void jvmLoadLocal(Variable variable) { if (variable instanceof TemporaryLocalVariable) { switch (((TemporaryLocalVariable)variable).getType()) { case FLOAT: jvmAdapter().dload(getJVMLocalVarIndex(variable)); break; case FIXNUM: jvmAdapter().lload(getJVMLocalVarIndex(variable)); break; case BOOLEAN: jvmAdapter().iload(getJVMLocalVarIndex(variable)); break; default: jvmMethod().loadLocal(getJVMLocalVarIndex(variable)); break; } } else { jvmMethod().loadLocal(getJVMLocalVarIndex(variable)); } }
@Override public void ProcessModuleBodyInstr(ProcessModuleBodyInstr processmodulebodyinstr) { jvm.method().loadLocal(0); visit(processmodulebodyinstr.getModuleBody()); jvm.method().invokeHelper("invokeModuleBody", IRubyObject.class, ThreadContext.class, CompiledIRMethod.class); jvmStoreLocal(processmodulebodyinstr.getResult()); }
@Override public void InheritanceSearchConstInstr(InheritanceSearchConstInstr inheritancesearchconstinstr) { jvm.method().loadLocal(0); visit(inheritancesearchconstinstr.getCurrentModule()); // TODO: private consts jvm.method().inheritanceSearchConst(inheritancesearchconstinstr.getConstName()); jvmStoreLocal(inheritancesearchconstinstr.getResult()); }
@Override public void SearchConstInstr(SearchConstInstr searchconstinstr) { // TODO: private consts jvm.method().loadLocal(0); visit(searchconstinstr.getStartingScope()); jvm.method().searchConst(searchconstinstr.getConstName()); jvmStoreLocal(searchconstinstr.getResult()); }
@Override public void InheritanceSearchConstInstr(InheritanceSearchConstInstr inheritancesearchconstinstr) { jvm.method().loadLocal(0); visit(inheritancesearchconstinstr.getCurrentModule()); // TODO: private consts jvm.method().inheritanceSearchConst(inheritancesearchconstinstr.getConstName()); jvmStoreLocal(inheritancesearchconstinstr.getResult()); }
@Override public void BEQInstr(BEQInstr beqInstr) { Operand[] args = beqInstr.getOperands(); jvm.method().loadLocal(0); visit(args[0]); visit(args[1]); jvm.method().invokeHelper("BEQ", boolean.class, ThreadContext.class, IRubyObject.class, IRubyObject.class); jvm.method().adapter.iftrue(getJVMLabel(beqInstr.getJumpTarget())); }
@Override public void BNEInstr(BNEInstr bneinstr) { Operand[] args = bneinstr.getOperands(); jvm.method().loadLocal(0); visit(args[0]); visit(args[1]); jvm.method().invokeHelper("BNE", boolean.class, ThreadContext.class, IRubyObject.class, IRubyObject.class); jvm.method().adapter.iftrue(getJVMLabel(bneinstr.getJumpTarget())); }
@Override public void BEQInstr(BEQInstr beqInstr) { Operand[] args = beqInstr.getOperands(); jvm.method().loadLocal(0); visit(args[0]); visit(args[1]); jvm.method().invokeHelper("BEQ", boolean.class, ThreadContext.class, IRubyObject.class, IRubyObject.class); jvm.method().adapter.iftrue(getJVMLabel(beqInstr.getJumpTarget())); }
@Override public void AttrAssignInstr(AttrAssignInstr attrAssignInstr) { jvm.method().loadLocal(0); visit(attrAssignInstr.getReceiver()); for (Operand operand : attrAssignInstr.getCallArgs()) { visit(operand); } jvm.method().invokeOther(attrAssignInstr.getMethodAddr().getName(), attrAssignInstr.getCallArgs().length); jvm.method().adapter.pop(); }
@Override public void AttrAssignInstr(AttrAssignInstr attrAssignInstr) { jvm.method().loadLocal(0); visit(attrAssignInstr.getReceiver()); for (Operand operand : attrAssignInstr.getCallArgs()) { visit(operand); } jvm.method().invokeOther(attrAssignInstr.getMethodAddr().getName(), attrAssignInstr.getCallArgs().length); jvm.method().adapter.pop(); }