Merge pull request #5541 from dearblue/mrb_get_args-oCSAH

Integrate the processing of similar specifiers of `mrb_get_args()`
This commit is contained in:
Yukihiro "Matz" Matsumoto
2021-08-29 08:32:05 +09:00
committed by GitHub
2 changed files with 13 additions and 51 deletions
+1 -1
View File
@@ -892,7 +892,7 @@ MRB_API struct RClass* mrb_define_module_under_id(mrb_state *mrb, struct RClass
* | char | Ruby type | C types | Notes |
* |:----:|----------------|-------------------|----------------------------------------------------|
* | `o` | {Object} | {mrb_value} | Could be used to retrieve any type of argument |
* | `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` |
+12 -50
View File
@@ -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;