summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2021-03-16 15:30:47 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2021-03-17 10:55:37 -0700
commit8359821870d756eb75d66c5ddb5d119f6247c35d (patch)
treeda96d7248f3725aadd08eed812d5460f4d6a260d
parentea817c60fcbdc2c4496be045f5bf028b702561ba (diff)
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)
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/4279
-rw-r--r--insns.def4
-rw-r--r--iseq.c16
-rw-r--r--vm.c4
-rw-r--r--vm_core.h1
4 files changed, 3 insertions, 22 deletions
diff --git a/insns.def b/insns.def
index 1dc0bb3365..5704bf44e7 100644
--- a/insns.def
+++ b/insns.def
@@ -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;
}
}
diff --git a/iseq.c b/iseq.c
index f696df9e71..3624c5a5c2 100644
--- a/iseq.c
+++ b/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,
diff --git a/vm.c b/vm.c
index 6b8119b1ba..1238cebc23 100644
--- a/vm.c
+++ b/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;
}
diff --git a/vm_core.h b/vm_core.h
index a7644eb658..31ac4ace76 100644
--- a/vm_core.h
+++ b/vm_core.h
@@ -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;