diff options
| -rwxr-xr-x | mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c | 5 | ||||
| -rwxr-xr-x | mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c | 6 | ||||
| -rwxr-xr-x | mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c | 2 | ||||
| -rwxr-xr-x | mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c | 4 | ||||
| -rwxr-xr-x | mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-string-ext/mrblib/string.rb | 7 | ||||
| -rw-r--r-- | src/codegen.c | 48 | ||||
| -rw-r--r-- | src/load.c | 2 | ||||
| -rw-r--r-- | src/parse.y | 4 |
9 files changed, 47 insertions, 33 deletions
diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c b/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c index cddcab270..8234e05dc 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c @@ -105,7 +105,8 @@ source_file_new(mrb_state *mrb, mrb_debug_context *dbg, char *filename) static mrb_bool remove_newlines(char *s, FILE *fp) { - char c, *p; + int c; + char *p; size_t len; if ((len = strlen(s)) == 0) { @@ -120,7 +121,7 @@ remove_newlines(char *s, FILE *fp) if (*p == '\r') { /* peek the next character and skip '\n' */ - if ((unsigned char)(c = fgetc(fp)) != '\n') { + if ((c = fgetc(fp)) != '\n') { ungetc(c, fp); } } diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c b/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c index 23b321f7c..2c93eb4ee 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c @@ -33,7 +33,7 @@ mrdb_check_syntax(mrb_state *mrb, mrb_debug_context *dbg, const char *expr, size mrb_value mrb_debug_eval(mrb_state *mrb, mrb_debug_context *dbg, const char *expr, size_t len, mrb_bool *exc) { - void *tmp; + void (*tmp)(struct mrb_state *, struct mrb_irep *, mrb_code *, mrb_value *); mrb_value ruby_code; mrb_value s; mrb_value v; @@ -56,9 +56,9 @@ mrb_debug_eval(mrb_state *mrb, mrb_debug_context *dbg, const char *expr, size_t * e * end */ - ruby_code = mrb_str_new_cstr(mrb, "begin\n"); + ruby_code = mrb_str_new_lit(mrb, "begin\n"); ruby_code = mrb_str_cat(mrb, ruby_code, expr, len); - ruby_code = mrb_str_cat_cstr(mrb, ruby_code, "\nrescue => e\ne\nend"); + ruby_code = mrb_str_cat_lit(mrb, ruby_code, "\nrescue => e\ne\nend"); recv = dbg->regs[0]; diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c index b8d62ac07..74e10ab5a 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdmisc.c @@ -411,11 +411,11 @@ dbgcmd_list(mrb_state *mrb, mrdb_state *mrdb) filename = st->filename; } mrb_debug_list(mrb, mrdb->dbg, filename, st->line_min, st->line_max); - listcmd_parser_state_free(mrb, st); if (filename != NULL && filename != st->filename) { mrb_free(mrb, filename); } + listcmd_parser_state_free(mrb, st); } return DBGST_PROMPT; diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c index 16b811edb..a617aff13 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c @@ -32,14 +32,14 @@ dbgcmd_print(mrb_state *mrb, mrdb_state *mrdb) /* eval expr */ expr = mrb_str_new_cstr(mrb, NULL); for (wcnt=1; wcnt<mrdb->wcnt; wcnt++) { - expr = mrb_str_cat_cstr(mrb, expr, " "); + expr = mrb_str_cat_lit(mrb, expr, " "); expr = mrb_str_cat_cstr(mrb, expr, mrdb->words[wcnt]); } result = mrb_debug_eval(mrb, mrdb->dbg, RSTRING_PTR(expr), RSTRING_LEN(expr), NULL); /* $print_no = result */ - s = mrb_str_cat_cstr(mrb, result, "\0"); + s = mrb_str_cat_lit(mrb, result, "\0"); printf("$%lu = %s\n", (unsigned long)mrdb->print_no++, RSTRING_PTR(s)); if (mrdb->print_no == 0) { diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c index 7a0c37b2c..a0969a3ac 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c @@ -503,7 +503,7 @@ get_and_parse_command(mrb_state *mrb, mrdb_state *mrdb) return cmd; } -static const int32_t +static int32_t check_method_breakpoint(mrb_state *mrb, mrb_irep *irep, mrb_code *pc, mrb_value *regs) { struct RClass* c; diff --git a/mrbgems/mruby-string-ext/mrblib/string.rb b/mrbgems/mruby-string-ext/mrblib/string.rb index b8cb93199..34744cc38 100644 --- a/mrbgems/mruby-string-ext/mrblib/string.rb +++ b/mrbgems/mruby-string-ext/mrblib/string.rb @@ -181,6 +181,7 @@ class String ed = arg1.end beg += self.size if beg < 0 ed += self.size if ed < 0 + ed -= 1 if arg1.exclude_end? validated = true elsif arg1.kind_of?(String) validated = true @@ -198,18 +199,18 @@ class String unless str == nil || str == "" if arg1 != nil && arg2 !=nil idx = arg1 >= 0 ? arg1 : self.size+arg1 - str2 = self[0...idx] + self[idx+arg2..-1] + str2 = self[0...idx] + self[idx+arg2..-1].to_s else if arg1.kind_of?(Range) idx = beg >= 0 ? beg : self.size+beg idx2 = ed>= 0 ? ed : self.size+ed - str2 = self[0...idx] + self[idx2+1..-1] + str2 = self[0...idx] + self[idx2+1..-1].to_s elsif arg1.kind_of?(String) idx = self.index(arg1) str2 = self[0...idx] + self[idx+arg1.size..-1] unless idx == nil else idx = arg1 >= 0 ? arg1 : self.size+arg1 - str2 = self[0...idx] + self[idx+1..-1] + str2 = self[0...idx] + self[idx+1..-1].to_s end end self.replace(str2) unless str2 == nil diff --git a/src/codegen.c b/src/codegen.c index ebab9e11e..65d276b02 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -953,6 +953,18 @@ gen_assignment(codegen_scope *s, node *tree, int sp, int val) } break; + case NODE_MASGN: + gen_vmassignment(s, tree->car, sp, val); + break; + + push(); + gen_call(s, tree, attrsym(s, sym(tree->cdr->car)), sp, NOVAL); + pop(); + if (val) { + genop_peep(s, MKOP_AB(OP_MOVE, cursp(), sp), val); + } + break; + default: #ifdef ENABLE_STDIO printf("unknown lhs %d\n", type); @@ -1006,7 +1018,7 @@ gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val) } } } - else { + else if (val) { pop(); } } @@ -2746,7 +2758,7 @@ codedump(mrb_state *mrb, mrb_irep *irep) printf("OP_NOP\n"); break; case OP_MOVE: - printf("OP_MOVE\tR%d\tR%d", GETARG_A(c), GETARG_B(c)); + printf("OP_MOVE\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c)); print_lv(mrb, irep, c, RAB); break; case OP_LOADL: @@ -2758,7 +2770,7 @@ codedump(mrb_state *mrb, mrb_irep *irep) print_lv(mrb, irep, c, RA); break; case OP_LOADI: - printf("OP_LOADI\tR%d\t%d", GETARG_A(c), GETARG_sBx(c)); + printf("OP_LOADI\tR%d\t%d\t", GETARG_A(c), GETARG_sBx(c)); print_lv(mrb, irep, c, RA); break; case OP_LOADSYM: @@ -2767,19 +2779,19 @@ codedump(mrb_state *mrb, mrb_irep *irep) print_lv(mrb, irep, c, RA); break; case OP_LOADNIL: - printf("OP_LOADNIL\tR%d\t", GETARG_A(c)); + printf("OP_LOADNIL\tR%d\t\t", GETARG_A(c)); print_lv(mrb, irep, c, RA); break; case OP_LOADSELF: - printf("OP_LOADSELF\tR%d\t", GETARG_A(c)); + printf("OP_LOADSELF\tR%d\t\t", GETARG_A(c)); print_lv(mrb, irep, c, RA); break; case OP_LOADT: - printf("OP_LOADT\tR%d\t", GETARG_A(c)); + printf("OP_LOADT\tR%d\t\t", GETARG_A(c)); print_lv(mrb, irep, c, RA); break; case OP_LOADF: - printf("OP_LOADF\tR%d\t", GETARG_A(c)); + printf("OP_LOADF\tR%d\t\t", GETARG_A(c)); print_lv(mrb, irep, c, RA); break; case OP_GETGLOBAL: @@ -2788,7 +2800,7 @@ codedump(mrb_state *mrb, mrb_irep *irep) print_lv(mrb, irep, c, RA); break; case OP_SETGLOBAL: - printf("OP_SETGLOBAL\t:%s\tR%d", + printf("OP_SETGLOBAL\t:%s\tR%d\t", mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)]), GETARG_A(c)); print_lv(mrb, irep, c, RA); @@ -2799,7 +2811,7 @@ codedump(mrb_state *mrb, mrb_irep *irep) print_lv(mrb, irep, c, RA); break; case OP_SETCONST: - printf("OP_SETCONST\t:%s\tR%d", + printf("OP_SETCONST\t:%s\tR%d\t", mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)]), GETARG_A(c)); print_lv(mrb, irep, c, RA); @@ -2996,11 +3008,11 @@ codedump(mrb_state *mrb, mrb_irep *irep) print_lv(mrb, irep, c, RAB); break; case OP_ARYCAT: - printf("OP_ARYCAT\tR%d\tR%d", GETARG_A(c), GETARG_B(c)); + printf("OP_ARYCAT\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c)); print_lv(mrb, irep, c, RAB); break; case OP_ARYPUSH: - printf("OP_ARYPUSH\tR%d\tR%d", GETARG_A(c), GETARG_B(c)); + printf("OP_ARYPUSH\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c)); print_lv(mrb, irep, c, RAB); break; case OP_AREF: @@ -3020,7 +3032,7 @@ codedump(mrb_state *mrb, mrb_irep *irep) print_lv(mrb, irep, c, RA); break; case OP_STRCAT: - printf("OP_STRCAT\tR%d\tR%d", GETARG_A(c), GETARG_B(c)); + printf("OP_STRCAT\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c)); print_lv(mrb, irep, c, RAB); break; case OP_HASH: @@ -3029,7 +3041,7 @@ codedump(mrb_state *mrb, mrb_irep *irep) break; case OP_OCLASS: - printf("OP_OCLASS\tR%d", GETARG_A(c)); + printf("OP_OCLASS\tR%d\t\t", GETARG_A(c)); print_lv(mrb, irep, c, RA); break; case OP_CLASS: @@ -3047,11 +3059,11 @@ codedump(mrb_state *mrb, mrb_irep *irep) print_lv(mrb, irep, c, RA); break; case OP_SCLASS: - printf("OP_SCLASS\tR%d\tR%d", GETARG_A(c), GETARG_B(c)); + printf("OP_SCLASS\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c)); print_lv(mrb, irep, c, RAB); break; case OP_TCLASS: - printf("OP_TCLASS\tR%d", GETARG_A(c)); + printf("OP_TCLASS\tR%d\t\t", GETARG_A(c)); print_lv(mrb, irep, c, RA); break; case OP_ERR: @@ -3068,15 +3080,15 @@ codedump(mrb_state *mrb, mrb_irep *irep) printf("OP_ONERR\t%03d\n", i+GETARG_sBx(c)); break; case OP_RESCUE: - printf("OP_RESCUE\tR%d", GETARG_A(c)); + printf("OP_RESCUE\tR%d\t\t", GETARG_A(c)); print_lv(mrb, irep, c, RA); break; case OP_RAISE: - printf("OP_RAISE\tR%d", GETARG_A(c)); + printf("OP_RAISE\tR%d\t\t", GETARG_A(c)); print_lv(mrb, irep, c, RA); break; case OP_POPERR: - printf("OP_POPERR\t%d", GETARG_A(c)); + printf("OP_POPERR\t%d\t\t", GETARG_A(c)); print_lv(mrb, irep, c, RA); break; case OP_EPOP: diff --git a/src/load.c b/src/load.c index 62f6b9433..7640d8fda 100644 --- a/src/load.c +++ b/src/load.c @@ -19,7 +19,7 @@ #define FLAG_SRC_MALLOC 1 #define FLAG_SRC_STATIC 0 -#if !defined(_WIN32) && SIZE_MAX < UINT32_MAX +#if SIZE_MAX < UINT32_MAX # define SIZE_ERROR_MUL(x, y) ((x) > SIZE_MAX / (y)) # define SIZE_ERROR(x) ((x) > SIZE_MAX) #else diff --git a/src/parse.y b/src/parse.y index b98a2c2e2..f8e1ff9aa 100644 --- a/src/parse.y +++ b/src/parse.y @@ -1468,7 +1468,7 @@ mlhs : mlhs_basic mlhs_inner : mlhs_basic | tLPAREN mlhs_inner rparen { - $$ = list1($2); + $$ = $2; } ; @@ -1517,7 +1517,7 @@ mlhs_basic : mlhs_list mlhs_item : mlhs_node | tLPAREN mlhs_inner rparen { - $$ = $2; + $$ = new_masgn(p, $2, NULL); } ; |
