diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-08-19 07:30:48 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-08-19 07:30:48 +0900 |
| commit | f263088b0d3fa4c3a495272875802545709c1848 (patch) | |
| tree | 6d9e87140348cc09ebb1be1908829a042e04f515 /src | |
| parent | b5e2d208b9030290dffffa47f2591b19b731287d (diff) | |
| parent | 05a873c25c270072cf979bbe730e7989e8fc4cc9 (diff) | |
| download | mruby-f263088b0d3fa4c3a495272875802545709c1848.tar.gz mruby-f263088b0d3fa4c3a495272875802545709c1848.zip | |
Merge pull request #4638 from dearblue/simplify-get-args
Simplify get arguments
Diffstat (limited to 'src')
| -rw-r--r-- | src/string.c | 66 |
1 files changed, 30 insertions, 36 deletions
diff --git a/src/string.c b/src/string.c index 1edbff802..247ee78c2 100644 --- a/src/string.c +++ b/src/string.c @@ -1759,28 +1759,25 @@ mrb_str_include(mrb_state *mrb, mrb_value self) static mrb_value mrb_str_index_m(mrb_state *mrb, mrb_value str) { - mrb_value *argv; - mrb_int argc; mrb_value sub; - mrb_int pos, clen; + mrb_int pos; - mrb_get_args(mrb, "*!", &argv, &argc); - if (argc == 2) { - mrb_get_args(mrb, "oi", &sub, &pos); - } - else { - pos = 0; - if (argc > 0) - sub = argv[0]; - else + switch (mrb_get_args(mrb, "|oi", &sub, &pos)) { + case 0: sub = mrb_nil_value(); - } - if (pos < 0) { - clen = RSTRING_CHAR_LEN(str); - pos += clen; - if (pos < 0) { - return mrb_nil_value(); - } + /* fall through */ + case 1: + pos = 0; + break; + case 2: + if (pos < 0) { + mrb_int clen = RSTRING_CHAR_LEN(str); + pos += clen; + if (pos < 0) { + return mrb_nil_value(); + } + } + break; } switch (mrb_type(sub)) { @@ -2009,28 +2006,25 @@ mrb_str_reverse(mrb_state *mrb, mrb_value str) static mrb_value mrb_str_rindex(mrb_state *mrb, mrb_value str) { - mrb_value *argv; - mrb_int argc; mrb_value sub; mrb_int pos, len = RSTRING_CHAR_LEN(str); - mrb_get_args(mrb, "*!", &argv, &argc); - if (argc == 2) { - mrb_get_args(mrb, "oi", &sub, &pos); - if (pos < 0) { - pos += len; + switch (mrb_get_args(mrb, "|oi", &sub, &pos)) { + case 0: + sub = mrb_nil_value(); + /* fall through */ + case 1: + pos = len; + break; + case 2: if (pos < 0) { - return mrb_nil_value(); + pos += len; + if (pos < 0) { + return mrb_nil_value(); + } } - } - if (pos > len) pos = len; - } - else { - pos = len; - if (argc > 0) - sub = argv[0]; - else - sub = mrb_nil_value(); + if (pos > len) pos = len; + break; } pos = chars2bytes(str, 0, pos); |
