diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-03-12 22:14:08 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-03-12 22:14:08 +0900 |
| commit | 59dabb38abffc9ea438032df363a65c72f84db8c (patch) | |
| tree | f3c85d7541a128406e9e417955a5314d10cc3b32 /src | |
| parent | 843053c97c57472439b3502d2f260cf9e7f6c015 (diff) | |
| parent | a5ac49de3038955732d9d06271a5df9175e86669 (diff) | |
| download | mruby-59dabb38abffc9ea438032df363a65c72f84db8c.tar.gz mruby-59dabb38abffc9ea438032df363a65c72f84db8c.zip | |
Merge pull request #3963 from dearblue/forced-block-arguments
Give me block by mrb_get_args() (forced block arguments)
Diffstat (limited to 'src')
| -rw-r--r-- | src/class.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/class.c b/src/class.c index 3f24528ca..b01bbc4e8 100644 --- a/src/class.c +++ b/src/class.c @@ -593,7 +593,7 @@ mrb_get_argv(mrb_state *mrb) n: Symbol [mrb_sym] d: Data [void*,mrb_data_type const] 2nd argument will be used to check data type so it won't be modified I: Inline struct [void*] - &: Block [mrb_value] + &: Block [mrb_value] when &! gives raised exception if no block given *: rest argument [mrb_value*,mrb_int] The rest of the arguments as an array; *! avoid copy of the stack |: optional Following arguments are optional ?: optional given [mrb_bool] true if preceding argument (optional) is given @@ -937,6 +937,12 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) else { bp = mrb->c->stack + mrb->c->ci->argc + 1; } + if (*format == '!') { + format ++; + if (mrb_nil_p(*bp)) { + mrb_raise(mrb, E_ARGUMENT_ERROR, "no block given"); + } + } *p = *bp; } break; |
