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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? class.c

?? GCC編譯器源代碼
?? C
字號:
/* GNU Objective C Runtime class related functions   Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.   Contributed by Kresten Krab Thorup and Dennis Glatting.This file is part of GNU CC.GNU CC is free software; you can redistribute it and/or modify it under theterms of the GNU General Public License as published by the Free SoftwareFoundation; either version 2, or (at your option) any later version.GNU CC is distributed in the hope that it will be useful, but WITHOUT ANYWARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESSFOR A PARTICULAR PURPOSE.  See the GNU General Public License for moredetails.You should have received a copy of the GNU General Public License along withGNU CC; see the file COPYING.  If not, write to the Free SoftwareFoundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  *//* As a special exception, if you link this library with files compiled with   GCC to produce an executable, this does not cause the resulting executable   to be covered by the GNU General Public License. This exception does not   however invalidate any other reasons why the executable file might be   covered by the GNU General Public License.  */#include "runtime.h"		/* the kitchen sink */#include "sarray.h"/* The table of classname->class.  Used for objc_lookup_class and friends */static cache_ptr __objc_class_hash = 0;                 /* !T:MUTEX *//* This is a hook which is called by objc_get_class and    objc_lookup_class if the runtime is not able to find the class.   This may e.g. try to load in the class using dynamic loading */Class (*_objc_lookup_class)(const char* name) = 0;      /* !T:SAFE *//* True when class links has been resolved */     BOOL __objc_class_links_resolved = NO;                  /* !T:UNUSED *//* Initial number of buckets size of class hash table. */#define CLASS_HASH_SIZE 32void __objc_init_class_tables(){  /* Allocate the class hash table */  if(__objc_class_hash)    return;  objc_mutex_lock(__objc_runtime_mutex);  __objc_class_hash    =  hash_new (CLASS_HASH_SIZE,		 (hash_func_type) hash_string,		 (compare_func_type) compare_strings);  objc_mutex_unlock(__objc_runtime_mutex);}  /* This function adds a class to the class hash table, and assigns the    class a number, unless it's already known */void__objc_add_class_to_hash(Class class){  Class h_class;  objc_mutex_lock(__objc_runtime_mutex);  /* make sure the table is there */  assert(__objc_class_hash);  /* make sure it's not a meta class */    assert(CLS_ISCLASS(class));  /* Check to see if the class is already in the hash table.  */  h_class = hash_value_for_key (__objc_class_hash, class->name);  if (!h_class)    {      /* The class isn't in the hash table.  Add the class and assign a class         number.  */      static unsigned int class_number = 1;      CLS_SETNUMBER(class, class_number);      CLS_SETNUMBER(class->class_pointer, class_number);      ++class_number;      hash_add (&__objc_class_hash, class->name, class);    }  objc_mutex_unlock(__objc_runtime_mutex);}/* Get the class object for the class named NAME.  If NAME does not   identify a known class, the hook _objc_lookup_class is called.  If   this fails, nil is returned */Class objc_lookup_class (const char* name){  Class class;  objc_mutex_lock(__objc_runtime_mutex);  /* Make sure the class hash table exists.  */  assert (__objc_class_hash);  class = hash_value_for_key (__objc_class_hash, name);  objc_mutex_unlock(__objc_runtime_mutex);  if (class)    return class;  if (_objc_lookup_class)    return (*_objc_lookup_class)(name);  else    return 0;}/* Get the class object for the class named NAME.  If NAME does not   identify a known class, the hook _objc_lookup_class is called.  If   this fails,  an error message is issued and the system aborts */Classobjc_get_class (const char *name){  Class class;  objc_mutex_lock(__objc_runtime_mutex);  /* Make sure the class hash table exists.  */  assert (__objc_class_hash);  class = hash_value_for_key (__objc_class_hash, name);  objc_mutex_unlock(__objc_runtime_mutex);  if (class)    return class;  if (_objc_lookup_class)    class = (*_objc_lookup_class)(name);  if(class)    return class;    objc_error(nil, OBJC_ERR_BAD_CLASS, 	     "objc runtime: cannot find class %s\n", name);  return 0;}MetaClassobjc_get_meta_class(const char *name){  return objc_get_class(name)->class_pointer;}/* This function provides a way to enumerate all the classes in the   executable.  Pass *ENUM_STATE == NULL to start the enumeration.  The   function will return 0 when there are no more classes.     For example:        id class;        void *es = NULL;       while ((class = objc_next_class(&es)))         ... do something with class; */Classobjc_next_class(void **enum_state){  objc_mutex_lock(__objc_runtime_mutex);  /* make sure the table is there */  assert(__objc_class_hash);  *(node_ptr*)enum_state =     hash_next(__objc_class_hash, *(node_ptr*)enum_state);  objc_mutex_unlock(__objc_runtime_mutex);  if (*(node_ptr*)enum_state)    return (*(node_ptr*)enum_state)->value;  return (Class)0;}/* Resolve super/subclass links for all classes.  The only thing we    can be sure of is that the class_pointer for class objects point    to the right meta class objects */void __objc_resolve_class_links(){  node_ptr node;  Class object_class = objc_get_class ("Object");  assert(object_class);  objc_mutex_lock(__objc_runtime_mutex);  /* Assign subclass links */  for (node = hash_next (__objc_class_hash, NULL); node;       node = hash_next (__objc_class_hash, node))    {      Class class1 = node->value;      /* Make sure we have what we think we have.  */      assert (CLS_ISCLASS(class1));      assert (CLS_ISMETA(class1->class_pointer));      /* The class_pointer of all meta classes point to Object's meta class. */      class1->class_pointer->class_pointer = object_class->class_pointer;      if (!(CLS_ISRESOLV(class1)))        {          CLS_SETRESOLV(class1);          CLS_SETRESOLV(class1->class_pointer);                        if(class1->super_class)            {                 Class a_super_class                 = objc_get_class ((char *) class1->super_class);                            assert (a_super_class);                            DEBUG_PRINTF ("making class connections for: %s\n",                            class1->name);                            /* assign subclass links for superclass */              class1->sibling_class = a_super_class->subclass_list;              a_super_class->subclass_list = class1;                            /* Assign subclass links for meta class of superclass */              if (a_super_class->class_pointer)                {                  class1->class_pointer->sibling_class                    = a_super_class->class_pointer->subclass_list;                  a_super_class->class_pointer->subclass_list                     = class1->class_pointer;                }            }          else                  /* a root class, make its meta object */                                /* be a subclass of Object */            {              class1->class_pointer->sibling_class                 = object_class->subclass_list;              object_class->subclass_list = class1->class_pointer;            }        }    }  /* Assign superclass links */  for (node = hash_next (__objc_class_hash, NULL); node;       node = hash_next (__objc_class_hash, node))    {      Class class1 = node->value;      Class sub_class;      for (sub_class = class1->subclass_list; sub_class;           sub_class = sub_class->sibling_class)        {          sub_class->super_class = class1;          if(CLS_ISCLASS(sub_class))            sub_class->class_pointer->super_class = class1->class_pointer;        }    }  objc_mutex_unlock(__objc_runtime_mutex);}#define CLASSOF(c) ((c)->class_pointer)Classclass_pose_as (Class impostor, Class super_class){  node_ptr node;  Class class1;  if (!CLS_ISRESOLV (impostor))    __objc_resolve_class_links ();  /* preconditions */  assert (impostor);  assert (super_class);  assert (impostor->super_class == super_class);  assert (CLS_ISCLASS (impostor));  assert (CLS_ISCLASS (super_class));  assert (impostor->instance_size == super_class->instance_size);  {    Class *subclass = &(super_class->subclass_list);    /* move subclasses of super_class to impostor */    while (*subclass)      {	Class nextSub = (*subclass)->sibling_class;	if (*subclass != impostor)	  {	    Class sub = *subclass;	    /* classes */	    sub->sibling_class = impostor->subclass_list;	    sub->super_class = impostor;	    impostor->subclass_list = sub;	    /* It will happen that SUB is not a class object if it is 	       the top of the meta class hierarchy chain.  (root	       meta-class objects inherit their class object)  If that is	       the case... don't mess with the meta-meta class. */ 	    if (CLS_ISCLASS (sub))	      {		/* meta classes */		CLASSOF (sub)->sibling_class = 		  CLASSOF (impostor)->subclass_list;		CLASSOF (sub)->super_class = CLASSOF (impostor);		CLASSOF (impostor)->subclass_list = CLASSOF (sub);	      }	  }	*subclass = nextSub;      }    /* set subclasses of superclass to be impostor only */    super_class->subclass_list = impostor;    CLASSOF (super_class)->subclass_list = CLASSOF (impostor);        /* set impostor to have no sibling classes */    impostor->sibling_class = 0;    CLASSOF (impostor)->sibling_class = 0;  }    /* check relationship of impostor and super_class is kept. */  assert (impostor->super_class == super_class);  assert (CLASSOF (impostor)->super_class == CLASSOF (super_class));  /* This is how to update the lookup table. Regardless of     what the keys of the hashtable is, change all values that are     superclass into impostor. */  objc_mutex_lock(__objc_runtime_mutex);  for (node = hash_next (__objc_class_hash, NULL); node;       node = hash_next (__objc_class_hash, node))    {      class1 = (Class)node->value;      if (class1 == super_class)	{	  node->value = impostor; /* change hash table value */	}    }        objc_mutex_unlock(__objc_runtime_mutex);  /* next, we update the dispatch tables... */  __objc_update_dispatch_table_for_class (CLASSOF (impostor));  __objc_update_dispatch_table_for_class (impostor);  return impostor;}  

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美视频一区在线观看| 国产不卡免费视频| 欧美日韩免费观看一区三区| 亚洲午夜电影在线观看| 欧美三级日韩在线| 麻豆成人免费电影| 精品sm捆绑视频| 粉嫩aⅴ一区二区三区四区| 国产精品久久久久毛片软件| 日本电影欧美片| 五月婷婷另类国产| 久久伊99综合婷婷久久伊| 成人黄色小视频在线观看| 国产精品传媒入口麻豆| 欧美日韩视频在线第一区| 久久99精品久久久久久久久久久久| 欧美成人精品高清在线播放| 成人短视频下载| 亚洲一区在线视频观看| 欧美一区二区国产| 成人国产精品免费观看动漫| 亚洲一区二区三区在线看| 欧美本精品男人aⅴ天堂| 99久久精品国产毛片| 亚洲综合男人的天堂| 2020国产精品| 欧美专区在线观看一区| 久久99在线观看| 亚洲日本在线a| 日韩欧美一区中文| 91亚洲男人天堂| 久久99深爱久久99精品| 一区二区三区欧美| 国产亚洲精品精华液| 欧美伦理影视网| 丰满少妇久久久久久久| 三级欧美韩日大片在线看| 欧美激情在线看| 7777女厕盗摄久久久| 99久久99精品久久久久久| 免费成人在线网站| 亚洲香肠在线观看| 欧美国产日韩亚洲一区| 日韩视频免费直播| 欧美影视一区在线| 波多野洁衣一区| 经典三级视频一区| 天天影视涩香欲综合网| 日本一区二区高清| www成人在线观看| 欧美精品三级在线观看| 色伊人久久综合中文字幕| 国产福利91精品一区| 麻豆91免费观看| 亚洲成a人片在线不卡一二三区| 一区精品在线播放| 欧美国产视频在线| 国产视频亚洲色图| 精品少妇一区二区| 欧美一区二区在线播放| 欧美精品久久久久久久多人混战| 91视频在线观看| 成人高清免费观看| 国产不卡高清在线观看视频| 国产一区二区伦理片| 久久国产乱子精品免费女| 日韩综合小视频| 偷拍亚洲欧洲综合| 丝袜美腿亚洲色图| 日韩电影免费在线| 免费在线观看一区| 日韩电影在线看| 日韩av电影免费观看高清完整版| 亚洲成人一区二区| 午夜精品福利一区二区三区av| 亚洲综合视频网| 五月综合激情网| 日韩黄色免费电影| 日韩精品五月天| 麻豆高清免费国产一区| 久久国产精品99精品国产| 精品夜夜嗨av一区二区三区| 久久国产精品露脸对白| 国产美女一区二区| 国产大陆亚洲精品国产| 成人不卡免费av| 99re视频这里只有精品| 色婷婷av一区二区三区大白胸| 欧美在线高清视频| 91麻豆精品国产综合久久久久久| 欧美精选午夜久久久乱码6080| 欧美日韩日日骚| 日韩欧美另类在线| 国产丝袜在线精品| 最新日韩av在线| 亚洲国产日韩精品| 欧美aaaaa成人免费观看视频| 精品一区二区在线播放| 成人久久18免费网站麻豆| 91网上在线视频| 91麻豆精品国产91| 国产午夜精品一区二区三区视频 | 日韩三级中文字幕| 久久精品视频在线免费观看| 国产精品看片你懂得| 亚洲妇熟xx妇色黄| 久久精品理论片| av成人动漫在线观看| 精品视频色一区| 久久久久久久久久久久久久久99 | 国产精品超碰97尤物18| 亚洲国产中文字幕在线视频综合 | 91污片在线观看| 在线不卡欧美精品一区二区三区| 久久这里只有精品视频网| 樱桃视频在线观看一区| 久久99蜜桃精品| 色哟哟精品一区| 久久久久久久国产精品影院| 亚洲男人天堂av网| 国产一区二区成人久久免费影院| 色偷偷一区二区三区| 久久网这里都是精品| 亚洲精品乱码久久久久久久久| 另类调教123区 | 欧美电影在哪看比较好| 亚洲国产精品t66y| 美国三级日本三级久久99| 99riav一区二区三区| 精品国精品国产| 亚洲午夜三级在线| 成人黄色国产精品网站大全在线免费观看| 欧美亚洲一区二区在线观看| 中文字幕第一页久久| 免费高清不卡av| 欧美婷婷六月丁香综合色| 久久精子c满五个校花| 青青草91视频| 欧美性生活大片视频| 中文字幕一区二区三区不卡在线| 精品无人区卡一卡二卡三乱码免费卡| 欧美专区在线观看一区| 国产精品久久久久久久久久久免费看 | 国产精品66部| 日韩一级欧美一级| 五月天一区二区三区| 色综合久久久久久久久| 国产三级久久久| 久久成人羞羞网站| 日韩欧美色综合网站| 丝袜亚洲另类丝袜在线| 欧美日韩国产高清一区二区三区| 亚洲精品中文字幕乱码三区| 成人动漫一区二区| 欧美国产日韩在线观看| 国产成人丝袜美腿| 国产色综合一区| 国产精品91xxx| 国产欧美一区二区在线| 大美女一区二区三区| 国产日本亚洲高清| 国产精品18久久久久久久久久久久| 精品国产亚洲在线| 九九视频精品免费| 精品国产乱码久久久久久浪潮| 美女视频网站黄色亚洲| 日韩免费视频一区| 精久久久久久久久久久| 26uuu国产电影一区二区| 国产精品123| 国产精品入口麻豆原神| 成人高清av在线| 亚洲欧美国产高清| 欧美性大战久久久久久久蜜臀| 午夜精品一区二区三区电影天堂 | 日韩午夜激情视频| 久久av中文字幕片| 国产日韩精品视频一区| 国产91色综合久久免费分享| 国产精品三级av| 在线观看一区二区视频| 亚洲一二三四久久| 欧美一区二区三区喷汁尤物| 免费观看成人av| 国产午夜精品一区二区三区嫩草| 成人免费视频caoporn| 一区二区三区在线观看动漫| 欧美男男青年gay1069videost| 蜜臀av亚洲一区中文字幕| 久久久精品人体av艺术| 99久久99久久精品免费观看| 亚洲aaa精品| 久久综合九色综合欧美亚洲| 成人禁用看黄a在线| 亚洲在线视频免费观看| 欧美mv日韩mv亚洲| 99综合影院在线| 欧美96一区二区免费视频| 国产精品免费av| 在线综合视频播放|