diff options
| author | dearblue <[email protected]> | 2019-08-18 15:34:14 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2019-08-18 15:38:25 +0900 |
| commit | 05a873c25c270072cf979bbe730e7989e8fc4cc9 (patch) | |
| tree | 1ed0d2d36616f12cc230764154dbabd03324cb31 /src/string.c | |
| parent | 83dab1ee0d0d3aa76e44f7fbf14360ee501be151 (diff) | |
| download | mruby-05a873c25c270072cf979bbe730e7989e8fc4cc9.tar.gz mruby-05a873c25c270072cf979bbe730e7989e8fc4cc9.zip | |
Simplify get arguments
- `mrb_str_index_m()` and `mrb_str_rindex()`
Make `mrb_get_args()` called only once from called twice.
- `mrb_str_byteslice()`
Replace `goto` with `if ~ else`.
Diffstat (limited to 'src/string.c')
| -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 ab53c2e69..7c1d32359 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); |
