зеркало из https://github.com/github/ruby.git
Avoid slow path ivar setting
If the ivar index table exists, we can avoid the slowest path for setting ivars.
This commit is contained in:
Родитель
6778ba48fd
Коммит
f259906eab
|
@ -1237,6 +1237,17 @@ vm_setivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const str
|
||||||
else {
|
else {
|
||||||
vm_cc_attr_index_set(cc, (int)(ent->index + 1));
|
vm_cc_attr_index_set(cc, (int)(ent->index + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
index = ent->index;
|
||||||
|
|
||||||
|
VALUE *ptr = ROBJECT_IVPTR(obj);
|
||||||
|
if (index >= ROBJECT_NUMIV(obj)) {
|
||||||
|
rb_init_iv_list(obj, ROBJECT_NUMIV(obj), (uint32_t)iv_index_tbl->num_entries, iv_index_tbl);
|
||||||
|
ptr = ROBJECT_IVPTR(obj);
|
||||||
|
}
|
||||||
|
RB_OBJ_WRITE(obj, &ptr[index], val);
|
||||||
|
|
||||||
|
return val;
|
||||||
}
|
}
|
||||||
/* fall through */
|
/* fall through */
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче