1
0
Fork 0
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:
Aaron Patterson 2021-03-16 15:30:47 -07:00 committed by Aaron Patterson
parent ea817c60fc
commit 8359821870
Notes: git 2021-03-18 02:56:04 +09:00
4 changed files with 3 additions and 22 deletions

View file

@ -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
View file

@ -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
View file

@ -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;
}

View file

@ -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;