亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? core.c

?? 早期freebsd實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
   */  for (i = 0; i < method_list->method_count; ++i) {    Method_t  kill_method = &method_list->method_list[i];    Method_t  method;    /* Remove any instance method found.  */    method = searchForMethodInList (class->methods, 				    kill_method->method_name);    if (method)      method->method_name = NULL;          /* Remove any factory method found.  */    method = searchForMethodInList (class->class_pointer->methods, 				    kill_method->method_name);    if (method)      method->method_name = NULL;  }}/* * This is a incomplete implementation of posing.   This function does the * bulk of the work but does not initialize the class method caches.  That is * a run-time specific operation.  * * I implement posing by hiding SUPER_CLASS, creating new class and meta * class structures, initializing it with IMPOSTOR, and changing it such * that it is identified as SUPER_CLASS. SUPER_CLASS remains in the * hierarchy but is inaccessible by the means. The class hierarchy is then re * arranged such that all of the subclasses of SUPER_CLASS now inherit from * the new class structures -- except the impostor itself. The only dramatic * effect on the application is that subclasses of SUPER_CLASS cannot do a  * [ ....  superClass ] and expect their real super class.  */Class_t class_poseAs (Class_t impostor, Class_t super_class){  Class_t     new_class = (Class_t) calloc (1, sizeof (Class));  MetaClass_t new_meta_class = (MetaClass_t) calloc (1, sizeof (MetaClass));  node_ptr node;  char        *new_name = (char *) malloc (strlen (super_class->name) + 12);    assert (new_class);  assert (new_meta_class);  assert (new_name);  /* No dispatching while the the posing class is being built.     The dispatch tables will be hacked on.  */  MUTEX_LOCK (runtimeMutex);	  assert (impostor->info & CLS_CLASS);  assert (super_class->info & CLS_CLASS);  assert (impostor->instance_size == super_class->instance_size);  /* Create the impostor class.  */  new_class->class_pointer     = new_meta_class;  new_class->super_class       = super_class;  new_class->name              = super_class->name;  new_class->version           = super_class->version;  new_class->info              = super_class->info;  new_class->instance_size     = super_class->instance_size;  new_class->ivars             = super_class->ivars;  new_class->methods           = impostor->methods;  new_class->cache	      = &instance_method_record;    /* Create the impostor meta class.  */  new_meta_class->class_pointer = super_class->class_pointer->class_pointer;  new_meta_class->super_class   = super_class->class_pointer->super_class;  new_meta_class->name          = super_class->class_pointer->name;  new_meta_class->version       = super_class->class_pointer->version;  new_meta_class->info          = super_class->class_pointer->info;  new_meta_class->instance_size = super_class->class_pointer->instance_size;  new_meta_class->ivars         = super_class->class_pointer->ivars;  new_meta_class->methods       = impostor->class_pointer->methods;  new_meta_class->cache	      = &factory_method_record;  /*   * Delete the class from the hash table, change its name so that it   * can no longer be found, then place it back into the hash table   * using its new name.    *   * Don't worry about the class number.  It is already assigned.    *   * Don't worry about dangling pointers.  Life's a bitch.  (A little bit   * of memory is lost with the hash key.)   */  hash_remove (class_hash_table, super_class->name);  sprintf (new_name, "%s*", super_class->name);  super_class->name       = new_name;  super_class->class_pointer->name  = new_name;  hash_add (&class_hash_table, super_class->name, super_class);    /*   * Now change all of the classes derived from super_class to be   * derived from a impostor (except the impostor's impostor.    */  for (node = hash_next (class_hash_table, NULL); node;       node = hash_next (class_hash_table, node)) {		    Class_t	class1 = node->value;        if (class1->super_class == super_class)      if (class1 != impostor)        class1->super_class = new_class;  }  /* Place the impostor class in class hash table     and assign it a class number.  */  addClassToHash (new_class);  /* Reinitialize the dispatch tables.  */  initialize_dispatch_tables ();  MUTEX_UNLOCK (runtimeMutex);  /* Print out class tables if debugging.  */  DEBUG_PRINTF ("dump of class tables class_poseAs\n");  debug_dump_classes ();  return new_class;}/* * This routine is given a class and records all of the methods in its class * structure in the record table.   */static voidrecord_methods_from_class (Class_t class){  MethodList_t	method_list;		  method_list = class->methods;  while (method_list) {    record_methods_from_list (method_list);    method_list = method_list->method_next;  }}/* * This routine is given a list of methods and records each of the methods in * the record table.  This is the routine that does the actual recording * work.  */static voidrecord_methods_from_list (MethodList_t method_list){  int	i;		  for (i = 0; i < method_list->method_count; ++i) {    Method_t method = &method_list->method_list[i];    record_selector (method->method_name);  }}SELsel_getUid (const STR name){  int i;		  for (i = 1; i <= record_entries (selector_record); ++i)    if (!strcmp (name, record_get (i, selector_record)))      return (SEL)i;	  /* Unable to locate selector.  Return error value.  */  return (SEL)0;}STRsel_getName (SEL selector){  return record_get ((unsigned int)selector, selector_record);}/* * Store the passed selector name in the selector record and return its * selector value (value returned by sel_getUid).  */static SELrecord_selector (const char *sel){  int j;				  /* Find either the selector in the table or an empty slot.  */  for (j = 1; j <= record_entries (selector_record); ++j)    if (!strcmp (sel,  record_get (j, selector_record)))      return (SEL)j;			  /* Save the selector name.  */  record_store (my_strdup (sel), selector_record);  DEBUG_PRINTF ("Record: %s as: %#x\n", sel, j);  return (SEL)j;		}/* * Initialize the dispatch tables.  This requires the initialization of the * instance_method_record and factory_method_record arrays and the arrays they * point to.  * * The first array is indexed by a class number.  Therefore its size is the * number of classes in the executable.  The second array is indexed by a * selector id.  Therefore its size is the number of unique selectors in the * application.  * * When a method is sent to a object its class number is extracted from the * class structure and used in the first array.  The selector id is used in * the second.  The result value is a method implementation.  */static voidinitialize_dispatch_tables (void){  int	i;  /* Check to make sure things are in place.  */  assert (selector_record);  /* Blow away the instance and factory method records.  */  if (factory_method_record) {    for (i = 1; i <= record_entries (factory_method_record); ++i)      record_delete (record_get (i, factory_method_record));    record_delete (factory_method_record);  }  if (instance_method_record) {    for (i = 1; i <= record_entries (instance_method_record); ++i)      record_delete (record_get (i, instance_method_record));    record_delete (instance_method_record);  }  /* Reallocate the instance and factory method records.  */  factory_method_record = record_new ();  instance_method_record = record_new ();  for (i = 1; i <= record_entries (selector_record); ++i) {    record_store (record_new (), factory_method_record);    record_store (record_new (), instance_method_record);  }	  /* Fool all of the secondary records into thinking they have data.  */  for (i = 1; i <= record_entries (selector_record); ++i) {    struct record *record;    node_ptr	node;	    record = record_get (i, factory_method_record);    for (node = hash_next (module_hash_table, NULL); node;	 node = hash_next (module_hash_table, node))      record_store (NULL, record);			    record = record_get (i, instance_method_record);    for (node = hash_next (module_hash_table, NULL); node;	 node = hash_next (module_hash_table, node))      record_store (NULL, record);  }		  /* For all classes fill in the methods implemented by the class and visiable     from the class in the hierarchy.  Those methods are assigned to the     class.  */  for (i = 1; i <= record_entries (selector_record); ++i) { /* i is a sel */    node_ptr	node;	    for (node = hash_next (class_hash_table, NULL); node;	 node = hash_next (class_hash_table, node)) {      Class_t     class = node->value;      MetaClass_t meta_class = class->class_pointer;      int	  class_number = getClassNumber (class);      Method_t    method;      /* DEBUG_PRINTF ("Assignment of sel=%s, class=%s (%#x, %#x)\n", 	 sel_getName ((SEL)i), class->name,	 searchForMethodInHierarchy (class, (SEL)i),	 searchForMethodInHierarchy ((Class_t)meta_class, (SEL)i)); */      method = searchForMethodInHierarchy (class, (SEL)i);      if (method)	record_store_at (class_number, method->method_imp,			 record_get (i, instance_method_record));      assert (class_number == getClassNumber ((Class_t)class->class_pointer));      method = searchForMethodInHierarchy ((Class_t)meta_class, (SEL)i);      if (method)        record_store_at (class_number, method->method_imp,                         record_get (i, factory_method_record));    }  }}/* * This method is called by the dispatch routines when a class has not been * initialized.  This method is responsible for initializing the class.  This * is accomplished by first testing the class itself for responding to the * +initialize method.  If such a method is implemented then it is called.  * Before exit, irregardless if the class implements +initialize, the class * is marked as initialized.  */static void		initialize_class (const char *name){  Method_t	method = NULL;  Class_t	class = objc_getClass (name);  SEL		sel = sel_getUid ("initialize");	  /* The class should not be initialized at this point.  */  assert (!(class->info & CLS_INITIALIZED));  assert (!(class->class_pointer->info & CLS_INITIALIZED));  /* Search for the +initialize method.     Call it if it exists.  */  if (sel)    method = searchForMethodInList (class->class_pointer->methods,				    sel_getName (sel));  if (method) {    IMP	imp;    DEBUG_PRINTF ("Class: %s sending +%s\n", 		  name, sel_getName (sel));    imp = get_imp ((Class_t)class->class_pointer, sel);    assert (imp);    (*imp)((id)class, sel);  }  /* Mark the class as initialized.  */  class->info	|= CLS_INITIALIZED;  class->class_pointer->info	|= CLS_INITIALIZED;}/* * Silly little function that checks to make sure the class hash table is * initialized.  If it isn't initialized then do it.  */static inline voidclass_hash_init (void){  static unsigned int	init = 0;		  if (!init)    class_hash_table = hash_new (CLASS_HASH_SIZE, 				 (hash_func_type)hash_string,				 (compare_func_type)compare_strings);  init = 1;}Class_t objc_getClass (const char *name){  Class_t	class;  /* Make sure the class hash table exists.  */  class_hash_init ();  class = hash_value_for_key (class_hash_table, name);	  return class;}MetaClass_t objc_getMetaClass (const char *name){  /* Meta classes are pointed to by the class's class_pointer.     Just get the class and return its class_pointer.  */  return (objc_getClass (name))->class_pointer;}voidaddClassToHash (Class_t class){  Class_t	hClass;		  class_hash_init ();  /* Check to see if the class is already in the hash table.  */  hClass = hash_value_for_key (class_hash_table, class->name);  if (!hClass) {        /* The class isn't in the hash table.  Add the class and        assign a class number.  */    static unsigned int	class_number = 1;	    setClassNumber (class, class_number);    setClassNumber ((Class_t)class->class_pointer, class_number);    ++class_number;        hash_add (&class_hash_table, class->name, class);  }}void  debug_dump_classes (void){  node_ptr node;  int         i;  DEBUG_PRINTF ("class tables\n");  i = 0;  for (node = hash_next (class_hash_table, NULL); node;        node = hash_next (class_hash_table, node)) {    Class_t class = node->value;          DEBUG_PRINTF ("Class { /*%#x*/\n", class);    DEBUG_PRINTF ("   MetaClass_t  class_pointer = %#x\n", class->class_pointer);    DEBUG_PRINTF ("   Class_t      super_class   = %#x\n", class->super_class);    DEBUG_PRINTF ("   char         *name          = %s\n", class->name);    DEBUG_PRINTF ("   long         version       = %ld\n", class->version);    DEBUG_PRINTF ("   long         info          = %#x\n", class->info);    DEBUG_PRINTF ("   long         instance_size = %ld\n", class->instance_size);    DEBUG_PRINTF ("   IvarList_t   ivars         = %#x\n", class->ivars);    DEBUG_PRINTF ("   MethodList_t methods       = %#x\n", class->methods);    DEBUG_PRINTF ("   cache_ptr      cache         = %#x\n", class->cache);    DEBUG_PRINTF ("}[%d];\n", i++);  }      i = 0;  for (node = hash_next (class_hash_table, NULL); node;     node = hash_next (class_hash_table, node)) {    Class_t class = (Class_t)((Class_t)(node->value))->class_pointer;          DEBUG_PRINTF ("MetaClass { /*%#x*/\n", class);    DEBUG_PRINTF ("   MetaClass_t  class_pointer = %#x\n", class->class_pointer);    DEBUG_PRINTF ("   MetaClass_t  super_class   = %#x\n", class->super_class);    DEBUG_PRINTF ("   char         *name          = %s\n", class->name);    DEBUG_PRINTF ("   long         version       = %ld\n", class->version);    DEBUG_PRINTF ("   long         info          = %#x\n", class->info);    DEBUG_PRINTF ("   long         instance_size = %ld\n", class->instance_size);    DEBUG_PRINTF ("   IvarList_t   ivars         = %#x\n", class->ivars);    DEBUG_PRINTF ("   MethodList_t methods       = %#x\n", class->methods);    DEBUG_PRINTF ("   cache_ptr      cache         = %#x\n", class->cache);    DEBUG_PRINTF ("}[%d];\n", i++);  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区精品葵司在线| 精品亚洲成a人| 日韩av一级片| 国产成人精品综合在线观看| 91在线你懂得| 欧美电影免费观看高清完整版在线观看| 久久久精品免费观看| 1区2区3区欧美| 蜜臀av国产精品久久久久| 国产.欧美.日韩| 欧美午夜片在线看| 久久蜜桃一区二区| 艳妇臀荡乳欲伦亚洲一区| 国产一区二区在线视频| 在线一区二区三区四区| 一区二区三区在线观看网站| 日韩精品一级中文字幕精品视频免费观看| 九九九精品视频| 在线观看91视频| 久久精品在这里| 无吗不卡中文字幕| jiyouzz国产精品久久| 欧美一区国产二区| 17c精品麻豆一区二区免费| 另类综合日韩欧美亚洲| 91蜜桃在线免费视频| www欧美成人18+| 日韩国产欧美视频| 日本丰满少妇一区二区三区| 久久精品视频在线免费观看| 天天av天天翘天天综合网色鬼国产 | 三级精品在线观看| 不卡的av在线| 久久中文字幕电影| 五月激情六月综合| 91黄色在线观看| 欧美国产视频在线| 狠狠色狠狠色合久久伊人| 欧美日韩卡一卡二| 亚洲精品免费在线| av一二三不卡影片| 亚洲国产高清在线观看视频| 狠狠色伊人亚洲综合成人| 欧美电影在哪看比较好| 亚洲综合小说图片| 91看片淫黄大片一级在线观看| 国产色产综合产在线视频| 麻豆精品新av中文字幕| 正在播放亚洲一区| 亚洲成人高清在线| 欧美日韩亚洲综合在线 | 欧美视频在线一区| 亚洲欧美自拍偷拍| 福利一区福利二区| 久久精品人人做| 激情综合色综合久久综合| 日韩欧美三级在线| 捆绑紧缚一区二区三区视频| 7777精品伊人久久久大香线蕉的| 亚洲一区在线观看免费| 国产色爱av资源综合区| 国产一区二区精品在线观看| 日韩免费高清电影| 麻豆高清免费国产一区| 日韩欧美在线观看一区二区三区| 日韩成人免费看| 日韩美女视频一区二区在线观看| 人人狠狠综合久久亚洲| 91麻豆精品国产91久久久| 天天综合日日夜夜精品| 欧美一区二区三区电影| 秋霞电影网一区二区| 制服视频三区第一页精品| 免费观看久久久4p| 精品久久久久一区| 国产麻豆视频一区| 亚洲国产精品成人综合| 91在线播放网址| 一区二区三区精品| 欧美妇女性影城| 美国精品在线观看| 国产亚洲欧美在线| 99久久精品国产毛片| 亚洲一区在线视频| 欧美精品少妇一区二区三区 | 精品久久久久久无| 国产成人亚洲综合a∨婷婷 | 欧洲一区二区av| 日日骚欧美日韩| 日韩精品一区二区三区在线| 国产在线日韩欧美| 国产精品久久久久久久久晋中 | 亚洲精品一二三四区| 欧美日韩国产一级二级| 九九视频精品免费| 国产精品久久久久永久免费观看| 91视频com| 天天操天天综合网| 久久女同精品一区二区| 91在线观看一区二区| 亚洲大型综合色站| 久久亚洲综合色| 色综合天天综合网天天狠天天| 婷婷一区二区三区| 日本一区二区三区电影| 在线亚洲一区二区| 美腿丝袜亚洲一区| 中文字幕亚洲一区二区av在线 | 亚洲高清在线视频| 欧美一区二区黄| 成人久久18免费网站麻豆 | 欧美一区三区四区| 国产成人av电影在线| 亚洲大尺度视频在线观看| 久久嫩草精品久久久精品一| 日本道在线观看一区二区| 九九久久精品视频| 亚洲精品国产成人久久av盗摄 | 成人一区二区三区视频| 亚洲午夜久久久久久久久电影网 | 成人精品一区二区三区四区 | 精品国产三级电影在线观看| 91网站最新地址| 精品一区二区免费视频| 亚洲综合激情另类小说区| 久久久不卡网国产精品二区| 欧美手机在线视频| 国产宾馆实践打屁股91| 性感美女久久精品| 国产清纯白嫩初高生在线观看91| 欧美撒尿777hd撒尿| 成人午夜在线视频| 免费黄网站欧美| 亚洲美女精品一区| 国产拍揄自揄精品视频麻豆| 555www色欧美视频| 色综合久久综合网| 国产精品自在在线| 日韩二区在线观看| 一区二区三区中文在线观看| 国产欧美一区二区精品久导航| 欧美日韩国产影片| 色又黄又爽网站www久久| 国产精品影视在线观看| 麻豆精品新av中文字幕| 国产不卡高清在线观看视频| 天堂va蜜桃一区二区三区| 亚洲日本青草视频在线怡红院| 精品国产乱码久久| 欧美精品久久99| 日本福利一区二区| 99精品偷自拍| 国产91清纯白嫩初高中在线观看 | 久久久久久久久伊人| 欧美一卡二卡三卡| 欧美色区777第一页| 91免费小视频| av中文字幕一区| 亚洲成人综合视频| 亚洲韩国精品一区| 国产精品传媒在线| 欧美电影免费提供在线观看| 欧美自拍丝袜亚洲| 色就色 综合激情| 一本色道久久综合精品竹菊| 国产91在线观看| 国产精品一区专区| 极品尤物av久久免费看| 久久精品国产**网站演员| 日韩电影免费一区| 日韩电影免费在线| 日本不卡一区二区三区高清视频| 亚洲国产精品久久久久婷婷884 | 91亚洲国产成人精品一区二三| 成av人片一区二区| 成人午夜av影视| 成人一区二区在线观看| 成人av手机在线观看| 成人免费视频一区| 99re在线视频这里只有精品| 91在线视频官网| 91久久精品国产91性色tv | 天天av天天翘天天综合网色鬼国产 | 国内精品久久久久影院一蜜桃| 麻豆精品精品国产自在97香蕉| 蜜桃视频一区二区三区| 韩国女主播一区二区三区| 国产一区二区三区精品视频| 国产成人精品免费| 99国产精品国产精品毛片| 色综合色狠狠天天综合色| 91成人在线免费观看| 欧美日韩高清影院| 欧美成人a视频| 久久久久久97三级| 国产精品久久久久久户外露出| 亚洲欧美日韩在线| 丝袜诱惑制服诱惑色一区在线观看| 男人的j进女人的j一区| 国产福利一区二区三区|