mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Use rb_fstring for "defined" strings.
We can take advantage of fstrings to de-duplicate the defined strings. This means we don't need to keep the list of defined strings on the VM (or register them as mark objects)
This commit is contained in:
parent
ea817c60fc
commit
8359821870
Notes:
git
2021-03-18 02:56:04 +09:00
4 changed files with 3 additions and 22 deletions
|
@ -662,14 +662,14 @@ adjuststack
|
|||
/* defined? */
|
||||
DEFINE_INSN
|
||||
defined
|
||||
(rb_num_t op_type, VALUE obj, VALUE needstr)
|
||||
(rb_num_t op_type, VALUE obj, VALUE pushval)
|
||||
(VALUE v)
|
||||
(VALUE val)
|
||||
// attr bool leaf = leafness_of_defined(op_type);
|
||||
{
|
||||
val = Qnil;
|
||||
if (vm_defined(ec, GET_CFP(), op_type, obj, v)) {
|
||||
val = needstr;
|
||||
val = pushval;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
16
iseq.c
16
iseq.c
|
@ -3103,24 +3103,10 @@ rb_iseq_defined_string(enum defined_type type)
|
|||
"expression",
|
||||
};
|
||||
const char *estr;
|
||||
VALUE *defs, str;
|
||||
|
||||
if ((unsigned)(type - 1) >= (unsigned)numberof(expr_names)) rb_bug("unknown defined type %d", type);
|
||||
estr = expr_names[type - 1];
|
||||
if (!estr[0]) return 0;
|
||||
defs = GET_VM()->defined_strings;
|
||||
if (!defs) {
|
||||
defs = ruby_xcalloc(numberof(expr_names), sizeof(VALUE));
|
||||
GET_VM()->defined_strings = defs;
|
||||
}
|
||||
str = defs[type-1];
|
||||
if (!str) {
|
||||
str = rb_str_new_cstr(estr);
|
||||
OBJ_FREEZE(str);
|
||||
defs[type-1] = str;
|
||||
rb_gc_register_mark_object(str);
|
||||
}
|
||||
return str;
|
||||
return rb_fstring_cstr(estr);
|
||||
}
|
||||
|
||||
/* A map from encoded_insn to insn_data: decoded insn number, its len,
|
||||
|
|
4
vm.c
4
vm.c
|
@ -2677,15 +2677,11 @@ ruby_vm_destruct(rb_vm_t *vm)
|
|||
static size_t
|
||||
vm_memsize(const void *ptr)
|
||||
{
|
||||
const rb_vm_t *vmobj = ptr;
|
||||
size_t size = sizeof(rb_vm_t);
|
||||
|
||||
// TODO
|
||||
// size += vmobj->ractor_num * sizeof(rb_ractor_t);
|
||||
|
||||
if (vmobj->defined_strings) {
|
||||
size += DEFINED_EXPR * sizeof(VALUE);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
|
|
|
@ -650,7 +650,6 @@ typedef struct rb_vm_struct {
|
|||
|
||||
rb_at_exit_list *at_exit;
|
||||
|
||||
VALUE *defined_strings;
|
||||
st_table *frozen_strings;
|
||||
|
||||
const struct rb_builtin_function *builtin_function_table;
|
||||
|
|
Loading…
Add table
Reference in a new issue