aboutsummaryrefslogtreecommitdiffstats
path: root/include/ruby
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-08-19 23:39:03 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-08-19 23:39:03 +0000
commitde8f99e963de72270762fcb224154246feab92e9 (patch)
treeaad498ab75630f1c68d274b307172e039aaacb99 /include/ruby
parent83aa2879348afcf8298ea8032282476b75d9a0ac (diff)
downloadruby-de8f99e963de72270762fcb224154246feab92e9.tar.gz
ruby.h: fix rb_scan_args_trail_idx
* include/ruby/ruby.h (rb_scan_args_trail_idx): fix the case both of optional and rest arguments are defined. [ruby-core:82427] [Bug #13830] * include/ruby/ruby.h (rb_scan_args_n_trail): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59624 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'include/ruby')
-rw-r--r--include/ruby/ruby.h21
1 files changed, 4 insertions, 17 deletions
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h
index 4c72cfc3a9..566e5f6b32 100644
--- a/include/ruby/ruby.h
+++ b/include/ruby/ruby.h
@@ -2279,29 +2279,16 @@ ALWAYS_INLINE(static int rb_scan_args_trail_idx(const char *fmt));
static inline int
rb_scan_args_trail_idx(const char *fmt)
{
- return (rb_scan_args_lead_p(fmt) ?
- (rb_scan_args_isdigit(fmt[1]) || fmt[1]=='*')+1 :
- (fmt[0]=='*'));
-}
-
-ALWAYS_INLINE(static int rb_scan_args_trail_p(const char *fmt));
-static inline int
-rb_scan_args_trail_p(const char *fmt)
-{
- return (rb_scan_args_lead_p(fmt) ?
- (rb_scan_args_isdigit(fmt[1]) || fmt[1]=='*') &&
- rb_scan_args_isdigit(fmt[2]) :
- fmt[0]=='*' && rb_scan_args_isdigit(fmt[1]));
+ const int idx = rb_scan_args_var_idx(fmt);
+ return idx+(fmt[idx]=='*');
}
ALWAYS_INLINE(static int rb_scan_args_n_trail(const char *fmt));
static inline int
rb_scan_args_n_trail(const char *fmt)
{
- return (rb_scan_args_lead_p(fmt) ?
- ((rb_scan_args_isdigit(fmt[1]) || fmt[1]=='*') &&
- rb_scan_args_isdigit(fmt[2]) ? fmt[2]-'0' : 0) :
- (fmt[0]=='*' && rb_scan_args_isdigit(fmt[1]) ? fmt[1]-'0' : 0));
+ const int idx = rb_scan_args_trail_idx(fmt);
+ return (rb_scan_args_isdigit(fmt[idx]) ? fmt[idx]-'0' : 0);
}
ALWAYS_INLINE(static int rb_scan_args_hash_idx(const char *fmt));