diff options
| -rwxr-xr-x | mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c | 8 | ||||
| -rwxr-xr-x | mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c | 2 | ||||
| -rwxr-xr-x | mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c | 3 | ||||
| -rw-r--r-- | src/codegen.c | 5 | ||||
| -rw-r--r-- | src/load.c | 2 | ||||
| -rw-r--r-- | src/string.c | 5 | ||||
| -rw-r--r-- | test/t/string.rb | 2 |
7 files changed, 19 insertions, 8 deletions
diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c b/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c index 20378522f..734f03f0a 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/apilist.c @@ -106,7 +106,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) { @@ -121,7 +122,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); } } @@ -197,6 +198,9 @@ mrb_debug_get_source(mrb_state *mrb, mrdb_state *mrdb, const char *srcpath, cons fclose(fp); break; } + + mrb_free(mrb, (void *)search_path[1]); + return path; } diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c b/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c index 2708a6259..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; diff --git a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c index ec5a68dc1..a0969a3ac 100755 --- a/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +++ b/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c @@ -215,6 +215,7 @@ void mrb_debug_context_free(mrb_state *mrb) { if (_debug_context) { + mrb_debug_delete_break_all(mrb, _debug_context); mrb_free(mrb, _debug_context); _debug_context = NULL; } @@ -502,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/src/codegen.c b/src/codegen.c index 65d276b02..a880244cc 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1003,7 +1003,6 @@ gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val) genop(s, MKOP_AB(OP_MOVE, cursp(), rhs)); push(); } - pop(); genop(s, MKOP_ABC(OP_APOST, cursp(), n, post)); n = 1; if (t->car) { /* rest */ @@ -1018,7 +1017,7 @@ gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val) } } } - else if (val) { + if (!val) { pop(); } } @@ -3021,7 +3020,7 @@ codedump(mrb_state *mrb, mrb_irep *irep) break; case OP_APOST: printf("OP_APOST\tR%d\t%d\t%d", GETARG_A(c), GETARG_B(c), GETARG_C(c)); - print_lv(mrb, irep, c, RAB); + print_lv(mrb, irep, c, RA); break; case OP_STRING: { 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/string.c b/src/string.c index 5eaed533a..23cd76747 100644 --- a/src/string.c +++ b/src/string.c @@ -15,6 +15,7 @@ #include "mruby/class.h" #include "mruby/range.h" #include "mruby/string.h" +#include "mruby/numeric.h" #include "mruby/re.h" const char mrb_digitmap[] = "0123456789abcdefghijklmnopqrstuvwxyz"; @@ -750,6 +751,9 @@ mrb_str_aref(mrb_state *mrb, mrb_value str, mrb_value indx) mrb_regexp_check(mrb, indx); switch (mrb_type(indx)) { + case MRB_TT_FLOAT: + indx = mrb_flo_to_fixnum(mrb, indx); + /* fall through */ case MRB_TT_FIXNUM: idx = mrb_fixnum(indx); @@ -813,6 +817,7 @@ num_index: * * a = "hello there" * a[1] #=> 101(1.8.7) "e"(1.9.2) + * a[1.1] #=> "e"(1.9.2) * a[1,3] #=> "ell" * a[1..3] #=> "ell" * a[-3,2] #=> "er" diff --git a/test/t/string.rb b/test/t/string.rb index c0e545e87..a56862fe2 100644 --- a/test/t/string.rb +++ b/test/t/string.rb @@ -44,6 +44,7 @@ assert('String#[]', '15.2.10.5.6') do b = 'abc'[-1] c = 'abc'[10] d = 'abc'[-10] + e = 'abc'[1.1] # length of args is 2 a1 = 'abc'[0, -1] @@ -63,6 +64,7 @@ assert('String#[]', '15.2.10.5.6') do assert_equal 'c', b assert_nil c assert_nil d + assert_equal 'b', e assert_nil a1 assert_nil b1 assert_nil c1 |
