diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-05-31 11:14:33 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-05-31 11:14:33 +0900 |
| commit | e3c1b48ba25e97967a5f27869653af05fad90dd2 (patch) | |
| tree | 560c4a56cda55d774804d5ab68e96c0ffc46c2a5 /src/class.c | |
| parent | 3e8d330c2cca7b67edbfa2a03331c03499dbdbf5 (diff) | |
| download | mruby-e3c1b48ba25e97967a5f27869653af05fad90dd2.tar.gz mruby-e3c1b48ba25e97967a5f27869653af05fad90dd2.zip | |
mrb_gets_args strict argc check; now returns argc
Diffstat (limited to 'src/class.c')
| -rw-r--r-- | src/class.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/class.c b/src/class.c index fa349a015..f96922f4b 100644 --- a/src/class.c +++ b/src/class.c @@ -398,10 +398,16 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) sp = a->buf; } while ((c = *format++)) { - if (argc < i) { - if (opt) continue; - mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); + switch (c) { + case '|': case '*': case '&': + break; + default: + if (argc <= i) { + if (opt) continue; + mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); + } } + switch (c) { case 'o': { @@ -556,6 +562,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) case '|': opt = 1; break; + case '*': { mrb_value **var; @@ -569,6 +576,8 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) *var = sp; i = argc; } + i = argc; + sp += *pl; } else { *pl = 0; @@ -582,7 +591,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); } va_end(ap); - return 0; + return i; } static struct RClass* |
