本文整理了Java中org.jruby.RubyModule.createProcMethod
方法的一些代码示例,展示了RubyModule.createProcMethod
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RubyModule.createProcMethod
方法的具体详情如下:
包路径:org.jruby.RubyModule
类名称:RubyModule
方法名:createProcMethod
暂无
代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby
@JRubyMethod(name = "define_method", visibility = PRIVATE, reads = VISIBILITY)
public IRubyObject define_method(ThreadContext context, IRubyObject arg0, Block block) {
Ruby runtime = context.runtime;
String name = TypeConverter.convertToIdentifier(arg0);
DynamicMethod newMethod = null;
Visibility visibility = PUBLIC;
// We need our identifier to be retrievable and creatable as a symbol. This side-effect
// populates this name into our symbol table so it will exist later if needed. The
// reason for this hack/side-effect is that symbols store their values as raw bytes. We lose encoding
// info so we need to make an entry so any accesses with raw bytes later gets proper symbol.
RubySymbol.newSymbol(runtime, arg0);
if (!block.isGiven()) {
throw getRuntime().newArgumentError("tried to create Proc object without a block");
}
block = block.cloneBlockAndFrame();
RubyProc proc = runtime.newProc(Block.Type.LAMBDA, block);
// a normal block passed to define_method changes to do arity checking; make it a lambda
proc.getBlock().type = Block.Type.LAMBDA;
newMethod = createProcMethod(name, visibility, proc);
Helpers.addInstanceMethod(this, name, newMethod, visibility, context, runtime);
return proc;
}
代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby
@JRubyMethod(name = "define_method", visibility = PRIVATE, reads = VISIBILITY)
public IRubyObject define_method(ThreadContext context, IRubyObject arg0, Block block) {
Ruby runtime = context.runtime;
String name = TypeConverter.convertToIdentifier(arg0);
DynamicMethod newMethod = null;
Visibility visibility = PUBLIC;
// We need our identifier to be retrievable and creatable as a symbol. This side-effect
// populates this name into our symbol table so it will exist later if needed. The
// reason for this hack/side-effect is that symbols store their values as raw bytes. We lose encoding
// info so we need to make an entry so any accesses with raw bytes later gets proper symbol.
RubySymbol.newSymbol(runtime, arg0);
if (!block.isGiven()) {
throw getRuntime().newArgumentError("tried to create Proc object without a block");
}
block = block.cloneBlockAndFrame();
RubyProc proc = runtime.newProc(Block.Type.LAMBDA, block);
// a normal block passed to define_method changes to do arity checking; make it a lambda
proc.getBlock().type = Block.Type.LAMBDA;
newMethod = createProcMethod(name, visibility, proc);
Helpers.addInstanceMethod(this, name, newMethod, visibility, context, runtime);
return proc;
}
代码示例来源:origin: org.jruby/jruby-complete
public IRubyObject defineMethodFromCallable(ThreadContext context, IRubyObject arg0, IRubyObject arg1, Visibility visibility) {
final Ruby runtime = context.runtime;
RubySymbol name = TypeConverter.checkID(arg0);
DynamicMethod newMethod;
if (runtime.getProc().isInstance(arg1)) {
// double-testing args.length here, but it avoids duplicating the proc-setup code in two places
RubyProc proc = (RubyProc)arg1;
newMethod = createProcMethod(runtime, name.idString(), visibility, proc.getBlock());
} else if (arg1 instanceof AbstractRubyMethod) {
AbstractRubyMethod method = (AbstractRubyMethod)arg1;
checkValidBindTargetFrom(context, (RubyModule) method.owner(context));
newMethod = method.getMethod().dup();
newMethod.setImplementationClass(this);
newMethod.setVisibility(visibility);
} else {
throw runtime.newTypeError("wrong argument type " + arg1.getType().getName() + " (expected Proc/Method)");
}
Helpers.addInstanceMethod(this, name, newMethod, visibility, context, runtime);
return name;
}
代码示例来源:origin: org.jruby/jruby-core
public IRubyObject defineMethodFromCallable(ThreadContext context, IRubyObject arg0, IRubyObject arg1, Visibility visibility) {
final Ruby runtime = context.runtime;
RubySymbol name = TypeConverter.checkID(arg0);
DynamicMethod newMethod;
if (runtime.getProc().isInstance(arg1)) {
// double-testing args.length here, but it avoids duplicating the proc-setup code in two places
RubyProc proc = (RubyProc)arg1;
newMethod = createProcMethod(runtime, name.idString(), visibility, proc.getBlock());
} else if (arg1 instanceof AbstractRubyMethod) {
AbstractRubyMethod method = (AbstractRubyMethod)arg1;
checkValidBindTargetFrom(context, (RubyModule) method.owner(context));
newMethod = method.getMethod().dup();
newMethod.setImplementationClass(this);
newMethod.setVisibility(visibility);
} else {
throw runtime.newTypeError("wrong argument type " + arg1.getType().getName() + " (expected Proc/Method)");
}
Helpers.addInstanceMethod(this, name, newMethod, visibility, context, runtime);
return name;
}
代码示例来源:origin: org.jruby/jruby-complete
public IRubyObject defineMethodFromBlock(ThreadContext context, IRubyObject arg0, Block block, Visibility visibility) {
final Ruby runtime = context.runtime;
RubySymbol name = TypeConverter.checkID(arg0);
DynamicMethod newMethod;
if (!block.isGiven()) {
throw runtime.newArgumentError("tried to create Proc object without a block");
}
// If we know it comes from IR we can convert this directly to a method and
// avoid overhead of invoking it as a block
if (block.getBody() instanceof IRBlockBody &&
runtime.getInstanceConfig().getCompileMode().shouldJIT()) { // FIXME: Once Interp and Mixed Methods are one class we can fix this to work in interp mode too.
IRBlockBody body = (IRBlockBody) block.getBody();
IRClosure closure = body.getScope();
// Ask closure to give us a method equivalent.
IRMethod method = closure.convertToMethod(name);
if (method != null) {
newMethod = new DefineMethodMethod(method, visibility, this, context.getFrameBlock());
Helpers.addInstanceMethod(this, name, newMethod, visibility, context, runtime);
return name;
}
}
newMethod = createProcMethod(runtime, name.idString(), visibility, block);
Helpers.addInstanceMethod(this, name, newMethod, visibility, context, runtime);
return name;
}
代码示例来源:origin: org.jruby/jruby-core
public IRubyObject defineMethodFromBlock(ThreadContext context, IRubyObject arg0, Block block, Visibility visibility) {
final Ruby runtime = context.runtime;
RubySymbol name = TypeConverter.checkID(arg0);
DynamicMethod newMethod;
if (!block.isGiven()) {
throw runtime.newArgumentError("tried to create Proc object without a block");
}
// If we know it comes from IR we can convert this directly to a method and
// avoid overhead of invoking it as a block
if (block.getBody() instanceof IRBlockBody &&
runtime.getInstanceConfig().getCompileMode().shouldJIT()) { // FIXME: Once Interp and Mixed Methods are one class we can fix this to work in interp mode too.
IRBlockBody body = (IRBlockBody) block.getBody();
IRClosure closure = body.getScope();
// Ask closure to give us a method equivalent.
IRMethod method = closure.convertToMethod(name);
if (method != null) {
newMethod = new DefineMethodMethod(method, visibility, this, context.getFrameBlock());
Helpers.addInstanceMethod(this, name, newMethod, visibility, context, runtime);
return name;
}
}
newMethod = createProcMethod(runtime, name.idString(), visibility, block);
Helpers.addInstanceMethod(this, name, newMethod, visibility, context, runtime);
return name;
}
代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby
body = proc;
newMethod = createProcMethod(name, visibility, proc);
} else if (runtime.getMethod().isInstance(arg1)) {
RubyMethod method = (RubyMethod)arg1;
代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby
body = proc;
newMethod = createProcMethod(name, visibility, proc);
} else if (runtime.getMethod().isInstance(arg1)) {
RubyMethod method = (RubyMethod)arg1;
内容来源于网络,如有侵权,请联系作者删除!