summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xmrbgems/mruby-bin-debugger/tools/mrdb/apilist.c8
-rwxr-xr-xmrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c2
-rwxr-xr-xmrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c3
-rw-r--r--src/codegen.c5
-rw-r--r--src/load.c2
-rw-r--r--src/string.c5
-rw-r--r--test/t/string.rb2
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