diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-06-23 14:42:58 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2015-06-23 14:42:58 +0900 |
| commit | 937b5b546201b874e7aba6a371f28456a784b39a (patch) | |
| tree | 17333773b99b23583789f3a648ff1ec4084dd271 /src | |
| parent | f0eaf9eaf53ce659c44ce6beeedbeb8bfc5b4efa (diff) | |
| download | mruby-937b5b546201b874e7aba6a371f28456a784b39a.tar.gz mruby-937b5b546201b874e7aba6a371f28456a784b39a.zip | |
fix Proc#curry test failure; ref #2848
Diffstat (limited to 'src')
| -rw-r--r-- | src/proc.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/proc.c b/src/proc.c index 61524f00c..f98998f68 100644 --- a/src/proc.c +++ b/src/proc.c @@ -200,7 +200,7 @@ mrb_proc_arity(mrb_state *mrb, mrb_value self) struct RProc *p = mrb_proc_ptr(self); mrb_code *iseq = mrb_proc_iseq(mrb, p); mrb_aspec aspec; - int ma, ra, pa, arity; + int ma, op, ra, pa, arity; if (MRB_PROC_CFUNC_P(p)) { /* TODO cfunc aspec not implemented yet */ @@ -214,9 +214,10 @@ mrb_proc_arity(mrb_state *mrb, mrb_value self) aspec = GETARG_Ax(*iseq); ma = MRB_ASPEC_REQ(aspec); + op = MRB_ASPEC_OPT(aspec); ra = MRB_ASPEC_REST(aspec); pa = MRB_ASPEC_POST(aspec); - arity = ra || MRB_PROC_STRICT_P(p) ? -(ma + pa + 1) : ma + pa; + arity = ra || (MRB_PROC_STRICT_P(p) && op) ? -(ma + pa + 1) : ma + pa; return mrb_fixnum_value(arity); } |
