mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
add forced block arguments feature to mrb_get_args
This commit is contained in:
+1
-1
@@ -843,7 +843,7 @@ MRB_API struct RClass * mrb_define_module_under(mrb_state *mrb, struct RClass *o
|
||||
* | `i` | {Integer} | {mrb_int} | |
|
||||
* | `b` | boolean | {mrb_bool} | |
|
||||
* | `n` | {Symbol} | {mrb_sym} | |
|
||||
* | `&` | block | {mrb_value} | |
|
||||
* | `&` | block | {mrb_value} | when && gives raised exception if no block given. |
|
||||
* | `*` | rest arguments | {mrb_value} *, {mrb_int} | Receive the rest of arguments as an array. |
|
||||
* | | | optional | | After this spec following specs would be optional. |
|
||||
* | `?` | optional given | {mrb_bool} | `TRUE` if preceding argument is given. Used to check optional argument is given. |
|
||||
|
||||
+7
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user