diff options
| author | dearblue <[email protected]> | 2021-08-28 15:52:37 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2021-08-28 15:52:37 +0900 |
| commit | c9f7bcc0cfc3bf27a5906f617c0a32b179d31cc4 (patch) | |
| tree | 313bc7719eaec31e14595d98f9ea50fa5dfc28f7 /src | |
| parent | 07f12fe890738688da917cfdc75a95be2bea2e26 (diff) | |
| download | mruby-c9f7bcc0cfc3bf27a5906f617c0a32b179d31cc4.tar.gz mruby-c9f7bcc0cfc3bf27a5906f617c0a32b179d31cc4.zip | |
Integrate the processing of similar specifiers of `mrb_get_args()`
It is `o`, `C`, `S`, `A` and `H` specifiers that are integrated.
As a side effect, the `C!` Specifier can now be used.
Diffstat (limited to 'src')
| -rw-r--r-- | src/class.c | 62 |
1 files changed, 12 insertions, 50 deletions
diff --git a/src/class.c b/src/class.c index 316f61798..a4a2f90e3 100644 --- a/src/class.c +++ b/src/class.c @@ -877,7 +877,7 @@ void mrb_hash_check_kdict(mrb_state *mrb, mrb_value self); string mruby type C type note ---------------------------------------------------------------------------------------------- o: Object [mrb_value] - C: Class/Module [mrb_value] + C: Class/Module [mrb_value] when ! follows, the value may be nil S: String [mrb_value] when ! follows, the value may be nil A: Array [mrb_value] when ! follows, the value may be nil H: Hash [mrb_value] when ! follows, the value may be nil @@ -1015,22 +1015,23 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) switch (c) { case 'o': - { - mrb_value *p; - - p = va_arg(ap, mrb_value*); - if (pickarg) { - *p = *pickarg; - } - } - break; case 'C': + case 'S': + case 'A': + case 'H': { mrb_value *p; p = va_arg(ap, mrb_value*); if (pickarg) { - ensure_class_type(mrb, *pickarg); + if (!(altmode && mrb_nil_p(*pickarg))) { + switch (c) { + case 'C': ensure_class_type(mrb, *pickarg); break; + case 'S': mrb_ensure_string_type(mrb, *pickarg); break; + case 'A': mrb_ensure_array_type(mrb, *pickarg); break; + case 'H': mrb_ensure_hash_type(mrb, *pickarg); break; + } + } *p = *pickarg; } } @@ -1046,45 +1047,6 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) } } break; - case 'S': - { - mrb_value *p; - - p = va_arg(ap, mrb_value*); - if (pickarg) { - if (!(altmode && mrb_nil_p(*pickarg))) { - mrb_ensure_string_type(mrb, *pickarg); - } - *p = *pickarg; - } - } - break; - case 'A': - { - mrb_value *p; - - p = va_arg(ap, mrb_value*); - if (pickarg) { - if (!(altmode && mrb_nil_p(*pickarg))) { - mrb_ensure_array_type(mrb, *pickarg); - } - *p = *pickarg; - } - } - break; - case 'H': - { - mrb_value *p; - - p = va_arg(ap, mrb_value*); - if (pickarg) { - if (!(altmode && mrb_nil_p(*pickarg))) { - mrb_ensure_hash_type(mrb, *pickarg); - } - *p = *pickarg; - } - } - break; case 's': { const char **ps = 0; |
