summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorDaniel Bovensiepen <[email protected]>2012-09-27 18:17:25 +0800
committerDaniel Bovensiepen <[email protected]>2012-09-27 18:17:25 +0800
commit88dfaf19aa0808f78d13133d61ea433d043923f9 (patch)
treee5cc8acde66e8be7338aa5bc09a0c73836644a68 /src
parent5b2572362966bc8c82ca32c83871bd9c27ce1a2e (diff)
parent5adbbe66d86de3959d2e8cb114c8be255459bb0a (diff)
downloadmruby-88dfaf19aa0808f78d13133d61ea433d043923f9.tar.gz
mruby-88dfaf19aa0808f78d13133d61ea433d043923f9.zip
Merge remote-tracking branch 'upstream/master' into mrbgems
Diffstat (limited to 'src')
-rw-r--r--src/array.c7
-rw-r--r--src/parse.y3
2 files changed, 5 insertions, 5 deletions
diff --git a/src/array.c b/src/array.c
index e55b104da..36f4af9c6 100644
--- a/src/array.c
+++ b/src/array.c
@@ -587,8 +587,7 @@ mrb_value
mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_value rpl)
{
struct RArray *a = mrb_ary_ptr(ary);
- mrb_int tail;
- int size;
+ int tail, size;
mrb_value *argv;
int i, argc;
@@ -600,6 +599,9 @@ mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_val
mrb_raise(mrb, E_INDEX_ERROR, "index is out of array");
}
}
+ if (a->len < len || a->len < head + len) {
+ len = a->len - head;
+ }
tail = head + len;
/* size check */
@@ -614,7 +616,6 @@ mrb_ary_splice(mrb_state *mrb, mrb_value ary, mrb_int head, mrb_int len, mrb_val
size = head + argc;
if (tail < a->len) size += a->len - tail;
-
if (size > a->aux.capa)
ary_expand_capa(mrb, a, size);
diff --git a/src/parse.y b/src/parse.y
index a7f645456..af12112c7 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -4850,7 +4850,6 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c)
mrb_value v;
if (!p) {
- mrb_parser_free(p);
return mrb_undef_value();
}
if (!p->tree || p->nerr) {
@@ -4867,7 +4866,7 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c)
static const char msg[] = "syntax error";
mrb->exc = (struct RObject*)mrb_object(mrb_exc_new(mrb, E_SYNTAX_ERROR, msg, sizeof(msg) - 1));
mrb_parser_free(p);
- return mrb_nil_value();
+ return mrb_undef_value();
}
}
n = mrb_generate_code(mrb, p);