diff options
| -rw-r--r-- | src/array.c | 12 | ||||
| -rw-r--r-- | src/codegen.c | 34 | ||||
| -rw-r--r-- | test/t/array.rb | 8 |
3 files changed, 31 insertions, 23 deletions
diff --git a/src/array.c b/src/array.c index 3b42abc74..ca111bc0e 100644 --- a/src/array.c +++ b/src/array.c @@ -880,9 +880,9 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list) { int i; mrb_value s, arystr; - char *head = "["; - char *sep = ", "; - char *tail = "]"; + char head[] = { '[' }; + char sep[] = { ',', ' ' }; + char tail[] = { ']' }; /* check recursive */ for(i=0; i<RARRAY_LEN(list); i++) { @@ -894,13 +894,13 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list) mrb_ary_push(mrb, list, ary); arystr = mrb_str_buf_new(mrb, 64); - mrb_str_buf_cat(mrb, arystr, head, strlen(head)); + mrb_str_buf_cat(mrb, arystr, head, sizeof(head)); for(i=0; i<RARRAY_LEN(ary); i++) { int ai = mrb_gc_arena_save(mrb); if (i > 0) { - mrb_str_buf_cat(mrb, arystr, sep, strlen(sep)); + mrb_str_buf_cat(mrb, arystr, sep, sizeof(sep)); } if (mrb_type(RARRAY_PTR(ary)[i]) == MRB_TT_ARRAY) { s = inspect_ary(mrb, RARRAY_PTR(ary)[i], list); @@ -911,7 +911,7 @@ inspect_ary(mrb_state *mrb, mrb_value ary, mrb_value list) mrb_gc_arena_restore(mrb, ai); } - mrb_str_buf_cat(mrb, arystr, tail, strlen(tail)); + mrb_str_buf_cat(mrb, arystr, tail, sizeof(tail)); mrb_ary_pop(mrb, list); return arystr; diff --git a/src/codegen.c b/src/codegen.c index e6c339521..3374b2e7f 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -633,31 +633,31 @@ gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val) { const char *name = mrb_sym2name(s->mrb, sym); - if (!noop && name[0] == '+' && strlen(name) == 1) { + if (!noop && name[0] == '+' && name[1] == '\0') { genop(s, MKOP_ABC(OP_ADD, cursp(), idx, n)); } - else if (!noop && name[0] == '-' && strlen(name) == 1) { + else if (!noop && name[0] == '-' && name[1] == '\0') { genop(s, MKOP_ABC(OP_SUB, cursp(), idx, n)); } - else if (!noop && name[0] == '*' && strlen(name) == 1) { + else if (!noop && name[0] == '*' && name[1] == '\0') { genop(s, MKOP_ABC(OP_MUL, cursp(), idx, n)); } - else if (!noop && name[0] == '/' && strlen(name) == 1) { + else if (!noop && name[0] == '/' && name[1] == '\0') { genop(s, MKOP_ABC(OP_DIV, cursp(), idx, n)); } - else if (!noop && name[0] == '<' && strlen(name) == 1) { + else if (!noop && name[0] == '<' && name[1] == '\0') { genop(s, MKOP_ABC(OP_LT, cursp(), idx, n)); } - else if (!noop && name[0] == '<' && strlen(name) == 2 && name[1] == '=') { + else if (!noop && name[0] == '<' && name[1] == '=' && name[2] == '\0') { genop(s, MKOP_ABC(OP_LE, cursp(), idx, n)); } - else if (!noop && name[0] == '>' && strlen(name) == 1) { + else if (!noop && name[0] == '>' && name[1] == '\0') { genop(s, MKOP_ABC(OP_GT, cursp(), idx, n)); } - else if (!noop && name[0] == '>' && strlen(name) == 2 && name[1] == '=') { + else if (!noop && name[0] == '>' && name[1] == '=' && name[2] == '\0') { genop(s, MKOP_ABC(OP_GE, cursp(), idx, n)); } - else if (!noop && name[0] == '=' && strlen(name) == 2 && name[1] == '=') { + else if (!noop && name[0] == '=' && name[1] == '=' && name[2] == '\0') { genop(s, MKOP_ABC(OP_EQ, cursp(), idx, n)); } else { @@ -1258,8 +1258,8 @@ codegen(codegen_scope *s, node *tree, int val) int idx; codegen(s, tree->car, VAL); - if ((name[0] == '|' && strlen(name) == 2 && name[1] == '|') || - (name[0] == '&' && strlen(name) == 2 && name[1] == '&')) { + if ((name[0] == '|' && name[1] == '|' && name[2] == '\0') || + (name[0] == '&' && name[1] == '&' && name[2] == '\0')) { int pos; pop(); @@ -1276,22 +1276,22 @@ codegen(codegen_scope *s, node *tree, int val) pop(); pop(); idx = new_msym(s, sym); - if (name[0] == '+' && strlen(name) == 1) { + if (name[0] == '+' && name[1] == '\0') { genop(s, MKOP_ABC(OP_ADD, cursp(), idx, 1)); } - else if (name[0] == '-' && strlen(name) == 1) { + else if (name[0] == '-' && name[1] == '\0') { genop(s, MKOP_ABC(OP_SUB, cursp(), idx, 1)); } - else if (name[0] == '<' && strlen(name) == 1) { + else if (name[0] == '<' && name[1] == '\0') { genop(s, MKOP_ABC(OP_LT, cursp(), idx, 1)); } - else if (name[0] == '<' && strlen(name) == 2 && name[1] == '=') { + else if (name[0] == '<' && name[1] == '=' && name[2] == '\0') { genop(s, MKOP_ABC(OP_LE, cursp(), idx, 1)); } - else if (name[0] == '>' && strlen(name) == 1) { + else if (name[0] == '>' && name[1] == '\0') { genop(s, MKOP_ABC(OP_GT, cursp(), idx, 1)); } - else if (name[0] == '>' && strlen(name) == 2 && name[1] == '=') { + else if (name[0] == '>' && name[1] == '=' && name[2] == '\0') { genop(s, MKOP_ABC(OP_GE, cursp(), idx, 1)); } else { diff --git a/test/t/array.rb b/test/t/array.rb index 1cfe02af7..3f441c1cc 100644 --- a/test/t/array.rb +++ b/test/t/array.rb @@ -234,4 +234,12 @@ assert('Array#unshift', '15.2.12.5.30') do a == [1,2,3] and b == [1,2,3] end +assert('Array#to_s', '15.2.12.5.31') do + a = [2, 3, 4, 5] + r1 = a.to_s + r2 = a.inspect + + r1 == r2 and r1 == "[2, 3, 4, 5]" +end + # Not ISO specified |
