Esempio n. 1
0
 Object* Module::reset_method_cache(STATE, Symbol* name) {
   if(Class* self = try_as<Class>(this)) {
     self->increment_serial();
   }
   if(!name->nil_p()) {
     if(MethodTableBucket* b = method_table_->find_entry(state, name)) {
       Executable* exec = b->method();
       if(!exec->nil_p()) {
         exec->clear_inliners(state);
       }
     }
   }
   if(!hierarchy_subclasses_->nil_p()) {
     for(native_int i = 0; i < hierarchy_subclasses_->size(); ++i) {
       WeakRef* ref = try_as<WeakRef>(hierarchy_subclasses_->get(state, i));
       if(ref && ref->alive_p()) {
         Module* mod = as<Module>(ref->object());
         mod->reset_method_cache(state, name);
       }
     }
   }
   return cNil;
 }