summaryrefslogtreecommitdiffhomepage
path: root/src/string.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/string.c')
-rw-r--r--src/string.c40
1 files changed, 13 insertions, 27 deletions
diff --git a/src/string.c b/src/string.c
index 205c39876..23da3baa6 100644
--- a/src/string.c
+++ b/src/string.c
@@ -35,7 +35,7 @@ _obj_classname(mrb_state *mrb, mrb_value obj)
}
void
-mrb_str_decref(mrb_state *mrb, struct mrb_shared_string *shared)
+mrb_str_decref(mrb_state *mrb, mrb_shared_string *shared)
{
shared->refcnt--;
if (shared->refcnt == 0) {
@@ -48,7 +48,7 @@ static void
str_modify(mrb_state *mrb, struct RString *s)
{
if (s->flags & MRB_STR_SHARED) {
- struct mrb_shared_string *shared = s->aux.shared;
+ mrb_shared_string *shared = s->aux.shared;
if (shared->refcnt == 1 && s->ptr == shared->ptr) {
s->ptr = shared->ptr;
@@ -275,7 +275,7 @@ static void
str_make_shared(mrb_state *mrb, struct RString *s)
{
if (!(s->flags & MRB_STR_SHARED)) {
- struct mrb_shared_string *shared = (struct mrb_shared_string *)mrb_malloc(mrb, sizeof(struct mrb_shared_string));
+ mrb_shared_string *shared = (mrb_shared_string *)mrb_malloc(mrb, sizeof(mrb_shared_string));
shared->refcnt = 1;
if (s->aux.capa > s->len) {
@@ -301,7 +301,7 @@ mrb_value
mrb_str_literal(mrb_state *mrb, mrb_value str)
{
struct RString *s, *orig;
- struct mrb_shared_string *shared;
+ mrb_shared_string *shared;
s = str_alloc(mrb, mrb->string_class);
orig = mrb_str_ptr(str);
@@ -759,23 +759,22 @@ num_index:
return mrb_str_dup(mrb, indx);
return mrb_nil_value();
- default:
+ case MRB_TT_RANGE:
/* check if indx is Range */
{
mrb_int beg, len;
mrb_value tmp;
len = RSTRING_LEN(str);
- switch (mrb_range_beg_len(mrb, indx, &beg, &len, len, 0)) {
- case FALSE:
- break;
- case 2/*OTHER*/:
- return mrb_nil_value();
- default:
- tmp = mrb_str_subseq(mrb, str, beg, len);
- return tmp;
+ if (mrb_range_beg_len(mrb, indx, &beg, &len, len)) {
+ tmp = mrb_str_subseq(mrb, str, beg, len);
+ return tmp;
+ }
+ else {
+ return mrb_nil_value();
}
}
+ default:
idx = mrb_fixnum(indx);
goto num_index;
}
@@ -1162,7 +1161,7 @@ static mrb_value
mrb_str_subseq(mrb_state *mrb, mrb_value str, int beg, int len)
{
struct RString *orig, *s;
- struct mrb_shared_string *shared;
+ mrb_shared_string *shared;
orig = mrb_str_ptr(str);
str_make_shared(mrb, orig);
@@ -2057,7 +2056,6 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, int base, int badcheck)
char *end;
char sign = 1;
int c;
- long len;
unsigned long val;
#undef ISDIGIT
@@ -2114,30 +2112,25 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, int base, int badcheck)
}
switch (base) {
case 2:
- len = 1;
if (str[0] == '0' && (str[1] == 'b'||str[1] == 'B')) {
str += 2;
}
break;
case 3:
- len = 2;
break;
case 8:
if (str[0] == '0' && (str[1] == 'o'||str[1] == 'O')) {
str += 2;
}
case 4: case 5: case 6: case 7:
- len = 3;
break;
case 10:
if (str[0] == '0' && (str[1] == 'd'||str[1] == 'D')) {
str += 2;
}
case 9: case 11: case 12: case 13: case 14: case 15:
- len = 4;
break;
case 16:
- len = 4;
if (str[0] == '0' && (str[1] == 'x'||str[1] == 'X')) {
str += 2;
}
@@ -2146,12 +2139,6 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, int base, int badcheck)
if (base < 2 || 36 < base) {
mrb_raisef(mrb, E_ARGUMENT_ERROR, "illegal radix %d", base);
}
- if (base <= 32) {
- len = 5;
- }
- else {
- len = 6;
- }
break;
} /* end of switch (base) { */
if (*str == '0') { /* squeeze preceeding 0s */
@@ -2172,7 +2159,6 @@ mrb_cstr_to_inum(mrb_state *mrb, const char *str, int base, int badcheck)
if (badcheck) goto bad;
return mrb_fixnum_value(0);
}
- len *= strlen(str);
val = strtoul((char*)str, &end, base);