summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2015-06-23 14:43:12 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2015-06-23 14:43:12 +0900
commit66a352c836c4ab246cf6d30f6fa4eb353202c675 (patch)
tree17333773b99b23583789f3a648ff1ec4084dd271 /src
parente344c6ab6d7b3d6a8ffcec6f7f96aeba6c5fdeda (diff)
parent937b5b546201b874e7aba6a371f28456a784b39a (diff)
downloadmruby-66a352c836c4ab246cf6d30f6fa4eb353202c675.tar.gz
mruby-66a352c836c4ab246cf6d30f6fa4eb353202c675.zip
Merge branch 'cremno-fix-strict-proc-arity'
Diffstat (limited to 'src')
-rw-r--r--src/proc.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/proc.c b/src/proc.c
index 4cb9ffe18..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 ? -(ma + pa + 1) : ma + pa;
+ arity = ra || (MRB_PROC_STRICT_P(p) && op) ? -(ma + pa + 1) : ma + pa;
return mrb_fixnum_value(arity);
}