summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-27 17:32:35 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-27 17:32:35 +0000
commit4050436e57ce02f20058c90185f8711c299c8d3c (patch)
tree48d42ac274c8bda675a6fe53237ac2c1220a8644
parent8bbcbef83e1afe71fb49a098cbf7b9be62b1c47a (diff)
merge revision(s) 40336: [Backport #8142]
* compile.c (iseq_add_mark_object): Use new rb_iseq_add_mark_object(). * insns.def (setinlinecache): Ditto. * iseq.c (rb_iseq_add_mark_object): New function to allocate iseq->mark_ary on demand. [Bug #8142] * iseq.h (rb_iseq_add_mark_object): Ditto. * iseq.c (prepare_iseq_build): Avoid allocating mark_ary until needed. * iseq.c (rb_iseq_build_for_ruby2cext): Ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@41682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog15
-rw-r--r--compile.c2
-rw-r--r--insns.def2
-rw-r--r--iseq.c18
-rw-r--r--iseq.h1
-rw-r--r--version.h6
6 files changed, 34 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index bf89b26762..f804cd01d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+Fri Jun 28 02:20:13 2013 Aman Gupta <ruby@tmm1.net>
+
+ * compile.c (iseq_add_mark_object): Use new rb_iseq_add_mark_object().
+
+ * insns.def (setinlinecache): Ditto.
+
+ * iseq.c (rb_iseq_add_mark_object): New function to allocate
+ iseq->mark_ary on demand. [Bug #8142]
+
+ * iseq.h (rb_iseq_add_mark_object): Ditto.
+
+ * iseq.c (prepare_iseq_build): Avoid allocating mark_ary until needed.
+
+ * iseq.c (rb_iseq_build_for_ruby2cext): Ditto.
+
Thu Jun 27 20:10:56 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org>
* ext/openssl/lib/openssl/ssl.rb (verify_certificate_identity): fix
diff --git a/compile.c b/compile.c
index 50b3d4c29a..b86a1e38f3 100644
--- a/compile.c
+++ b/compile.c
@@ -416,7 +416,7 @@ static int
iseq_add_mark_object(rb_iseq_t *iseq, VALUE v)
{
if (!SPECIAL_CONST_P(v)) {
- rb_ary_push(iseq->mark_ary, v);
+ rb_iseq_add_mark_object(iseq, v);
}
return COMPILE_OK;
}
diff --git a/insns.def b/insns.def
index 479d0daefe..ea138cc69d 100644
--- a/insns.def
+++ b/insns.def
@@ -1237,7 +1237,7 @@ setinlinecache
(VALUE val)
{
if (ic->ic_value.value == Qundef) {
- rb_ary_push(GET_ISEQ()->mark_ary, val);
+ rb_iseq_add_mark_object(GET_ISEQ(), val);
}
ic->ic_value.value = val;
ic->ic_vmstat = GET_VM_STATE_VERSION() - ruby_vm_const_missing_count;
diff --git a/iseq.c b/iseq.c
index 15c1fe13ae..567f9ea429 100644
--- a/iseq.c
+++ b/iseq.c
@@ -237,6 +237,17 @@ set_relation(rb_iseq_t *iseq, const VALUE parent)
}
}
+void
+rb_iseq_add_mark_object(rb_iseq_t *iseq, VALUE obj)
+{
+ if (!RTEST(iseq->mark_ary)) {
+ iseq->mark_ary = rb_ary_tmp_new(3);
+ OBJ_UNTRUST(iseq->mark_ary);
+ RBASIC(iseq->mark_ary)->klass = 0;
+ }
+ rb_ary_push(iseq->mark_ary, obj);
+}
+
static VALUE
prepare_iseq_build(rb_iseq_t *iseq,
VALUE name, VALUE path, VALUE absolute_path, VALUE first_lineno,
@@ -259,9 +270,7 @@ prepare_iseq_build(rb_iseq_t *iseq,
}
iseq->defined_method_id = 0;
- iseq->mark_ary = rb_ary_tmp_new(3);
- OBJ_UNTRUST(iseq->mark_ary);
- RBASIC(iseq->mark_ary)->klass = 0;
+ iseq->mark_ary = 0;
/*
@@ -2047,8 +2056,7 @@ rb_iseq_build_for_ruby2cext(
iseq->location.label = rb_str_new2(name);
iseq->location.path = rb_str_new2(path);
iseq->location.first_lineno = first_lineno;
- iseq->mark_ary = rb_ary_tmp_new(3);
- OBJ_UNTRUST(iseq->mark_ary);
+ iseq->mark_ary = 0;
iseq->self = iseqval;
iseq->iseq = ALLOC_N(VALUE, iseq->iseq_size);
diff --git a/iseq.h b/iseq.h
index 0790529638..4de08169d8 100644
--- a/iseq.h
+++ b/iseq.h
@@ -23,6 +23,7 @@ VALUE rb_iseq_build_from_ary(rb_iseq_t *iseq, VALUE locals, VALUE args,
VALUE exception, VALUE body);
/* iseq.c */
+void rb_iseq_add_mark_object(rb_iseq_t *iseq, VALUE obj);
VALUE rb_iseq_load(VALUE data, VALUE parent, VALUE opt);
VALUE rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc);
struct st_table *ruby_insn_make_insn_table(void);
diff --git a/version.h b/version.h
index 7d78f65d38..75cf5a4f56 100644
--- a/version.h
+++ b/version.h
@@ -1,10 +1,10 @@
#define RUBY_VERSION "2.0.0"
-#define RUBY_RELEASE_DATE "2013-06-27"
-#define RUBY_PATCHLEVEL 247
+#define RUBY_RELEASE_DATE "2013-06-28"
+#define RUBY_PATCHLEVEL 248
#define RUBY_RELEASE_YEAR 2013
#define RUBY_RELEASE_MONTH 6
-#define RUBY_RELEASE_DAY 27
+#define RUBY_RELEASE_DAY 28
#include "ruby/version.h"