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
		Add a link
		
	
		Reference in a new issue