mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
iseq: reduce array allocations for simple sequences
* 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/trunk@40336 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
ce6db8f286
commit
cbd8b09920
5 changed files with 31 additions and 7 deletions
15
ChangeLog
15
ChangeLog
|
@ -1,3 +1,18 @@
|
|||
Wed Apr 17 04:09:19 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.
|
||||
|
||||
Wed Apr 17 20:00:18 2013 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* ext/socket/rubysocket.h (SOCKLEN_MAX): Defined.
|
||||
|
|
|
@ -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;
|
||||
|
|
18
iseq.c
18
iseq.c
|
@ -240,6 +240,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,
|
||||
|
@ -262,9 +273,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;
|
||||
|
||||
|
||||
/*
|
||||
|
@ -2064,8 +2073,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);
|
||||
|
|
1
iseq.h
1
iseq.h
|
@ -21,6 +21,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);
|
||||
|
|
Loading…
Add table
Reference in a new issue