From: Charles Oliver Nutter Date: 2013-07-11T02:46:22+09:00 Subject: [ruby-core:55927] Re: [CommonRuby - Feature #8088] Method#parameters (and friends) should provide useful information about core methods FWIW, here's output from and patch to enable "rich" parameter information on JRuby. We do not provide the argument names because JRuby often implements multiple-arity methods with multiple native code bodies (so there's potentially different argument names for each arity). I would not expect to require parameter names for native methods, since there will be many ways to implement native methods and some may be incompatible with a single variable name for each position. The variable names are not very useful anyway...I think most people will be interested in the parameter types. system ~/projects/jruby $ jruby -e "p String.instance_method(:gsub).parameters" [[:req], [:opt]] system ~/projects/jruby $ jruby -e "p Array.instance_method(:[]=).parameters" [[:req], [:req], [:opt]] system ~/projects/jruby $ git diff diff --git a/core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java b/core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java index dc45ae9..014f09a 100644 --- a/core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java +++ b/core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java @@ -602,7 +602,7 @@ public class InvocationMethodFactory extends MethodFactory implements Opcodes { private boolean block; private String parameterDesc; - private static final boolean RICH_NATIVE_METHOD_PARAMETERS = false; + private static final boolean RICH_NATIVE_METHOD_PARAMETERS = true; public DescriptorInfo(List descs) { min = Integer.MAX_VALUE; On Wed, Jul 10, 2013 at 1:32 PM, Charles Oliver Nutter wrote: > On Wed, Jul 10, 2013 at 11:16 AM, Yorick Peterse > wrote: >> The problem, at least with MRI, is that the moment you do something >> similar with methods that are written in C all meaningful information is >> lost: >> >> String.instance_method(:gsub).parameters # => [[:rest]] >> >> This is false since gsub has at least 1 required argument. This happens >> with a lot of methods (if not all) in MRI that are implemented in C. >> Jruby is also affected by this (at least with the above example). >> Rubinius is thus far the only implementation that gets this right that I >> know of. > > Yes, that is the reason I filed this feature. :-) > > Rubinius diverges from everyone else here and presents its own > argument list for #parameters rather than presenting the same > information as MRI. I would like to see #parameters reflect meaningful > information for even native methods, but the JRuby policy is to not > unilaterally make such decisions. > > We could (and at one point, did) present the same data as Rubinius, > but up to now we have chosen to match MRI. > > - Charlie >