org.jruby.RubyModule.createProcMethod()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(7.1k)|赞(0)|评价(0)|浏览(81)

本文整理了Java中org.jruby.RubyModule.createProcMethod方法的一些代码示例,展示了RubyModule.createProcMethod的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RubyModule.createProcMethod方法的具体详情如下:
包路径:org.jruby.RubyModule
类名称:RubyModule
方法名:createProcMethod

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;

相关文章

微信公众号

最新文章

更多

RubyModule类方法