diff options
author | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-06-27 17:32:35 +0000 |
---|---|---|
committer | nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-06-27 17:32:35 +0000 |
commit | 4050436e57ce02f20058c90185f8711c299c8d3c (patch) | |
tree | 48d42ac274c8bda675a6fe53237ac2c1220a8644 | |
parent | 8bbcbef83e1afe71fb49a098cbf7b9be62b1c47a (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-- | ChangeLog | 15 | ||||
-rw-r--r-- | compile.c | 2 | ||||
-rw-r--r-- | insns.def | 2 | ||||
-rw-r--r-- | iseq.c | 18 | ||||
-rw-r--r-- | iseq.h | 1 | ||||
-rw-r--r-- | version.h | 6 |
6 files changed, 34 insertions, 10 deletions
@@ -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 @@ -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; } @@ -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; @@ -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); @@ -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); @@ -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" |