mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	vm.c: reduce clearing method cache
* vm_method.c (rb_add_method, rb_alias): rb_method_entry_set() already clears method cache. * vm_method.c (rb_export_method): ditto by rb_add_method(). * vm_method.c (set_method_visibility): ditto by rb_export_method(). * vm.c (vm_define_method): ditto by rb_add_method(). * vm.c (m_core_undef_method): ditto by rb_add_method() in rb_undef(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44167 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									c700511888
								
							
						
					
					
						commit
						f2c319395d
					
				
					 2 changed files with 1 additions and 6 deletions
				
			
		
							
								
								
									
										3
									
								
								vm.c
									
										
									
									
									
								
							
							
						
						
									
										3
									
								
								vm.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -2153,12 +2153,10 @@ vm_define_method(rb_thread_t *th, VALUE obj, ID id, VALUE iseqval,
 | 
			
		|||
    OBJ_WRITE(miseq->self, &miseq->klass, klass);
 | 
			
		||||
    miseq->defined_method_id = id;
 | 
			
		||||
    rb_add_method(klass, id, VM_METHOD_TYPE_ISEQ, miseq, noex);
 | 
			
		||||
    rb_clear_method_cache_by_class(klass);
 | 
			
		||||
 | 
			
		||||
    if (!is_singleton && noex == NOEX_MODFUNC) {
 | 
			
		||||
	klass = rb_singleton_class(klass);
 | 
			
		||||
	rb_add_method(klass, id, VM_METHOD_TYPE_ISEQ, miseq, NOEX_PUBLIC);
 | 
			
		||||
	rb_clear_method_cache_by_class(klass);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2208,7 +2206,6 @@ m_core_undef_method(VALUE self, VALUE cbase, VALUE sym)
 | 
			
		|||
{
 | 
			
		||||
    REWIND_CFP({
 | 
			
		||||
	rb_undef(cbase, SYM2ID(sym));
 | 
			
		||||
	rb_clear_method_cache_by_class(cbase);
 | 
			
		||||
	rb_clear_method_cache_by_class(self);
 | 
			
		||||
    });
 | 
			
		||||
    return Qnil;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -478,7 +478,6 @@ rb_add_method(VALUE klass, ID mid, rb_method_type_t type, void *opts, rb_method_
 | 
			
		|||
    if (type != VM_METHOD_TYPE_UNDEF && type != VM_METHOD_TYPE_REFINED) {
 | 
			
		||||
	method_added(klass, mid);
 | 
			
		||||
    }
 | 
			
		||||
    rb_clear_method_cache_by_class(klass);
 | 
			
		||||
    return me;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -799,6 +798,7 @@ rb_export_method(VALUE klass, ID name, rb_method_flag_t noex)
 | 
			
		|||
	    if (me->def->type == VM_METHOD_TYPE_REFINED) {
 | 
			
		||||
		me->def->body.orig_me->flag = noex;
 | 
			
		||||
	    }
 | 
			
		||||
	    rb_clear_method_cache_by_class(klass);
 | 
			
		||||
	}
 | 
			
		||||
	else {
 | 
			
		||||
	    rb_add_method(klass, name, VM_METHOD_TYPE_ZSUPER, 0, noex);
 | 
			
		||||
| 
						 | 
				
			
			@ -1246,7 +1246,6 @@ rb_alias(VALUE klass, ID name, ID def)
 | 
			
		|||
 | 
			
		||||
    if (flag == NOEX_UNDEF) flag = orig_me->flag;
 | 
			
		||||
    rb_method_entry_set(target_klass, name, orig_me, flag);
 | 
			
		||||
    rb_clear_method_cache_by_class(target_klass);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -1301,7 +1300,6 @@ set_method_visibility(VALUE self, int argc, VALUE *argv, rb_method_flag_t ex)
 | 
			
		|||
	}
 | 
			
		||||
	rb_export_method(self, id, ex);
 | 
			
		||||
    }
 | 
			
		||||
    rb_clear_method_cache_by_class(self);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static VALUE
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue