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

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

?? init.c

?? GCC編譯器源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* GNU Objective C Runtime initialization    Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.   Contributed by Kresten Krab Thorup   +load support contributed by Ovidiu Predescu <ovidiu@net-community.com>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 version number of this runtime.  This must match the number    defined in gcc (objc-act.c) */#define OBJC_VERSION 8#define PROTOCOL_VERSION 2/* This list contains all modules currently loaded into the runtime */static struct objc_list* __objc_module_list = 0; 	/* !T:MUTEX *//* This list contains all proto_list's not yet assigned class links */static struct objc_list* unclaimed_proto_list = 0; 	/* !T:MUTEX *//* List of unresolved static instances.  */static struct objc_list *uninitialized_statics = 0; 	/* !T:MUTEX *//* Global runtime "write" mutex. */objc_mutex_t __objc_runtime_mutex = 0;/* Number of threads that are alive. */int __objc_runtime_threads_alive = 1;			/* !T:MUTEX *//* Check compiler vs runtime version */static void init_check_module_version (Module_t);/* Assign isa links to protos */static void __objc_init_protocols (struct objc_protocol_list* protos);/* Add protocol to class */static void __objc_class_add_protocols (Class, struct objc_protocol_list*);/* This is a hook which is called by __objc_exec_class every time a class   or a category is loaded into the runtime.  This may e.g. help a   dynamic loader determine the classes that have been loaded when   an object file is dynamically linked in */void (*_objc_load_callback)(Class class, Category* category); /* !T:SAFE *//* Is all categories/classes resolved? */BOOL __objc_dangling_categories = NO;           /* !T:UNUSED */extern SEL__sel_register_typed_name (const char *name, const char *types, 			   struct objc_selector *orig, BOOL is_const);/* Sends +load to all classes and categories in certain situations. */static void objc_send_load (void);/* Inserts all the classes defined in module in a tree of classes that   resembles the class hierarchy. This tree is traversed in preorder and the   classes in its nodes receive the +load message if these methods were not   executed before. The algorithm ensures that when the +load method of a class   is executed all the superclasses have been already received the +load   message. */static void __objc_create_classes_tree (Module_t module);static void __objc_call_callback (Module_t module);/* A special version that works only before the classes are completely   installed in the runtime. */static BOOL class_is_subclass_of_class (Class class, Class superclass);typedef struct objc_class_tree {  Class class;  struct objc_list *subclasses; /* `head' is pointer to an objc_class_tree */} objc_class_tree;/* This is a linked list of objc_class_tree trees. The head of these trees   are root classes (their super class is Nil). These different trees   represent different class hierarchies. */static struct objc_list *__objc_class_tree_list = NULL;/* Keeps the +load methods who have been already executed. This hash should   not be destroyed during the execution of the program. */static cache_ptr __objc_load_methods = NULL;/* Creates a tree of classes whose topmost class is directly inherited from   `upper' and the bottom class in this tree is `bottom_class'. The classes   in this tree are super classes of `bottom_class'. `subclasses' member   of each tree node point to the next subclass tree node. */static objc_class_tree *create_tree_of_subclasses_inherited_from (Class bottom_class, Class upper){  Class superclass = bottom_class->super_class ?			objc_lookup_class ((char*)bottom_class->super_class)		      : Nil;					  objc_class_tree *tree, *prev;  DEBUG_PRINTF ("create_tree_of_subclasses_inherited_from:");  DEBUG_PRINTF ("bottom_class = %s, upper = %s\n",		(bottom_class ? bottom_class->name : NULL),		(upper ? upper->name : NULL));  tree = prev = objc_calloc (1, sizeof (objc_class_tree));  prev->class = bottom_class;  while (superclass != upper)    {      tree = objc_calloc (1, sizeof (objc_class_tree));      tree->class = superclass;      tree->subclasses = list_cons (prev, tree->subclasses);      superclass = (superclass->super_class ?			objc_lookup_class ((char*)superclass->super_class)		      : Nil);      prev = tree;    }  return tree;}/* Insert the `class' into the proper place in the `tree' class hierarchy. This   function returns a new tree if the class has been successfully inserted into   the tree or NULL if the class is not part of the classes hierarchy described   by `tree'. This function is private to objc_tree_insert_class(), you should   not call it directly. */static objc_class_tree *__objc_tree_insert_class (objc_class_tree *tree, Class class){  DEBUG_PRINTF ("__objc_tree_insert_class: tree = %x, class = %s\n",		tree, class->name);  if (tree == NULL)    return create_tree_of_subclasses_inherited_from (class, NULL);  else if (class == tree->class)    {      /* `class' has been already inserted */      DEBUG_PRINTF ("1. class %s was previously inserted\n", class->name);      return tree;    }  else if ((class->super_class ?		    objc_lookup_class ((char*)class->super_class)		  : Nil)	    == tree->class)    {      /* If class is a direct subclass of tree->class then add class to the	 list of subclasses. First check to see if it wasn't already	 inserted. */      struct objc_list *list = tree->subclasses;      objc_class_tree *node;      while (list)	{	  /* Class has been already inserted; do nothing just return	     the tree. */	  if (((objc_class_tree*)list->head)->class == class)	    {	      DEBUG_PRINTF ("2. class %s was previously inserted\n",			    class->name);	      return tree;	    }	  list = list->tail;	}      /* Create a new node class and insert it into the list of subclasses */      node = objc_calloc (1, sizeof (objc_class_tree));      node->class = class;      tree->subclasses = list_cons (node, tree->subclasses);      DEBUG_PRINTF ("3. class %s inserted\n", class->name);      return tree;    }  else    {      /* The class is not a direct subclass of tree->class. Search for class's         superclasses in the list of subclasses. */      struct objc_list *subclasses = tree->subclasses;      /* Precondition: the class must be a subclass of tree->class; otherwise         return NULL to indicate our caller that it must take the next tree. */      if (!class_is_subclass_of_class (class, tree->class))	return NULL;      for (; subclasses != NULL; subclasses = subclasses->tail)	{	  Class aClass = ((objc_class_tree*)(subclasses->head))->class;	  if (class_is_subclass_of_class (class, aClass))	    {	      /* If we found one of class's superclasses we insert the class	         into its subtree and return the original tree since nothing		 has been changed. */	      subclasses->head		  = __objc_tree_insert_class (subclasses->head, class); 	      DEBUG_PRINTF ("4. class %s inserted\n", class->name);	      return tree;	    }	}      /* We haven't found a subclass of `class' in the `subclasses' list.         Create a new tree of classes whose topmost class is a direct subclass	 of tree->class. */      {	objc_class_tree *new_tree	    = create_tree_of_subclasses_inherited_from (class, tree->class);	tree->subclasses = list_cons (new_tree, tree->subclasses); 	DEBUG_PRINTF ("5. class %s inserted\n", class->name);	return tree;      }    }}/* This function inserts `class' in the right tree hierarchy classes. */static voidobjc_tree_insert_class (Class class){  struct objc_list *list_node;  objc_class_tree *tree;  list_node = __objc_class_tree_list;  while (list_node)    {      tree = __objc_tree_insert_class (list_node->head, class);      if (tree)	{	  list_node->head = tree;	  break;	}      else	list_node = list_node->tail;    }  /* If the list was finished but the class hasn't been inserted, insert it     here. */  if (!list_node)    {      __objc_class_tree_list = list_cons (NULL, __objc_class_tree_list);      __objc_class_tree_list->head = __objc_tree_insert_class (NULL, class);    }}/* Traverse tree in preorder. Used to send +load. */static voidobjc_preorder_traverse (objc_class_tree *tree,			int level,			void (*function)(objc_class_tree*, int)){  struct objc_list *node;  (*function) (tree, level);  for (node = tree->subclasses; node; node = node->tail)    objc_preorder_traverse (node->head, level + 1, function);}/* Traverse tree in postorder. Used to destroy a tree. */static voidobjc_postorder_traverse (objc_class_tree *tree,			int level,			void (*function)(objc_class_tree*, int)){  struct objc_list *node;  for (node = tree->subclasses; node; node = node->tail)    objc_postorder_traverse (node->head, level + 1, function);  (*function) (tree, level);}/* Used to print a tree class hierarchy. */static void__objc_tree_print (objc_class_tree *tree, int level){  int i;  for (i = 0; i < level; i++)    printf ("  ");  printf ("%s\n", tree->class->name);}/* Walks on a linked list of methods in the reverse order and executes all   the methods corresponding to `op' selector. Walking in the reverse order   assures the +load of class is executed first and then +load of categories   because of the way in which categories are added to the class methods. */static void__objc_send_message_in_list (MethodList_t method_list, Class class, SEL op){  int i;  if (!method_list)    return;  /* First execute the `op' message in the following method lists */  __objc_send_message_in_list (method_list->method_next, class, op);  /* Search the method list. */  for (i = 0; i < method_list->method_count; i++)    {      Method_t mth = &method_list->method_list[i];      if (mth->method_name && sel_eq (mth->method_name, op)	  && !hash_is_key_in_hash (__objc_load_methods, mth->method_name))	{	  /* The method was found and wasn't previously executed. */	  (*mth->method_imp) ((id)class, mth->method_name);	  /* Add this method into the +load hash table */	  hash_add (&__objc_load_methods, mth->method_imp, mth->method_imp);	  DEBUG_PRINTF ("sending +load in class: %s\n", class->name);	  break;	}    }}static void__objc_send_load (objc_class_tree *tree, int level){  static SEL load_sel = 0;  Class class = tree->class;  MethodList_t method_list = class->class_pointer->methods;  if (!load_sel)    load_sel = sel_register_name ("load");  __objc_send_message_in_list (method_list, class, load_sel);}static void__objc_destroy_class_tree_node (objc_class_tree *tree, int level){  objc_free (tree);}/* This is used to check if the relationship between two classes before the   runtime completely installs the classes. */static BOOLclass_is_subclass_of_class (Class class, Class superclass){  for (; class != Nil;)    {      if (class == superclass)	return YES;      class = (class->super_class ?		  objc_lookup_class ((char*)class->super_class)		: Nil);    }  return NO;}/* This list contains all the classes in the runtime system for whom their   superclasses are not yet know to the runtime. */static struct objc_list* unresolved_classes = 0;/* Static function used to reference the Object and NXConstantString classes. */static void__objc_force_linking (void){  extern void __objc_linking (void);  __objc_linking ();  /* Call the function to avoid compiler warning */  __objc_force_linking ();}/* Run through the statics list, removing modules as soon as all its statics   have been initialized.  */static voidobjc_init_statics (void){  struct objc_list **cell = &uninitialized_statics;  struct objc_static_instances **statics_in_module;  objc_mutex_lock(__objc_runtime_mutex);  while (*cell)    {      int module_initialized = 1;      for (statics_in_module = (*cell)->head;	   *statics_in_module; statics_in_module++)	{	  struct objc_static_instances *statics = *statics_in_module;	  Class class = objc_lookup_class (statics->class_name);	  if (!class)	    module_initialized = 0;	  /* Actually, the static's class_pointer will be NULL when we             haven't been here before.  However, the comparison is to be             reminded of taking into account class posing and to think about             possible semantics...  */	  else if (class != statics->instances[0]->class_pointer)	    {	      id *inst;	      for (inst = &statics->instances[0]; *inst; inst++)		{		  (*inst)->class_pointer = class;		  /* ??? Make sure the object will not be freed.  With                     refcounting, invoke `-retain'.  Without refcounting, do                     nothing and hope that `-free' will never be invoked.  */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品美女一区二区三区| 欧美三级乱人伦电影| 久久久久久电影| 国产一区高清在线| 久久亚洲一区二区三区明星换脸 | 国产精品久久精品日日| av电影一区二区| 亚洲精品国产一区二区精华液 | 成人午夜在线播放| 亚洲欧美一区二区不卡| 欧美男人的天堂一二区| 久久精品国产99国产精品| 国产日韩欧美综合在线| 成人高清免费观看| 香蕉成人啪国产精品视频综合网 | 91精品国产综合久久精品性色| 亚洲一区二区三区不卡国产欧美| 欧美日韩aaaaa| 狠狠色综合播放一区二区| 国产精品美女www爽爽爽| 在线区一区二视频| 久久激情综合网| 1024成人网| 欧美一区日本一区韩国一区| 国产精品一线二线三线精华| 中文字幕字幕中文在线中不卡视频| 欧美丝袜丝交足nylons图片| 精品一区二区三区在线观看| 中文字幕亚洲成人| 4438x亚洲最大成人网| 国产成人精品免费看| 亚洲综合免费观看高清完整版在线 | 精品毛片乱码1区2区3区| 国产超碰在线一区| 亚洲综合无码一区二区| 精品播放一区二区| 色香色香欲天天天影视综合网| 日韩av一区二区在线影视| 中文字幕中文字幕在线一区| 宅男噜噜噜66一区二区66| 成a人片亚洲日本久久| 日产精品久久久久久久性色 | 亚洲欧美中日韩| 欧美一级淫片007| 色视频一区二区| 国产福利一区二区| 日本系列欧美系列| 亚洲日本在线看| 亚洲精品在线免费播放| 欧美色倩网站大全免费| 成人av在线看| 国产一区亚洲一区| 男人的j进女人的j一区| 亚洲综合免费观看高清完整版在线| 国产亚洲成av人在线观看导航 | 欧洲在线/亚洲| 成人18精品视频| 国产精品一区二区你懂的| 免费在线观看日韩欧美| 丝袜美腿亚洲一区二区图片| 亚洲精品视频在线看| 国产婷婷色一区二区三区| 日韩三级av在线播放| 国产乱理伦片在线观看夜一区 | 亚洲电影在线播放| 亚洲日本在线a| 椎名由奈av一区二区三区| 国产欧美日韩麻豆91| 精品国产1区二区| 日韩精品在线看片z| 欧美卡1卡2卡| 欧美久久婷婷综合色| 欧美日韩亚洲国产综合| 欧美性受xxxx黑人xyx| 日本精品一区二区三区四区的功能| av在线不卡网| av在线不卡免费看| 色综合咪咪久久| 欧美综合在线视频| 欧美色手机在线观看| 欧美日韩国产一级二级| 337p亚洲精品色噜噜噜| 欧美午夜精品久久久久久孕妇 | 91精品国产综合久久久久久久久久 | 五月综合激情网| 日韩高清一区在线| 奇米精品一区二区三区四区| 伦理电影国产精品| 久久成人18免费观看| 国产在线国偷精品产拍免费yy| 国产盗摄一区二区三区| 成人av电影在线观看| 91色porny在线视频| 91国偷自产一区二区使用方法| 色婷婷av一区二区三区软件| 欧美伊人精品成人久久综合97| 91福利国产精品| 制服丝袜在线91| 久久午夜羞羞影院免费观看| 国产精品久久久久久久久久久免费看| ...av二区三区久久精品| 亚洲风情在线资源站| 久久99热99| a美女胸又www黄视频久久| 欧洲亚洲精品在线| 精品免费视频一区二区| 亚洲国产岛国毛片在线| 一区二区三区国产精华| 奇米影视一区二区三区小说| 韩国女主播一区| 99久久精品免费精品国产| 欧美老女人第四色| 国产亚洲精品超碰| 一卡二卡三卡日韩欧美| 韩国av一区二区三区四区| www.久久精品| 91精品国产综合久久精品app| 久久久综合九色合综国产精品| 国产精品久久久久三级| 日本中文字幕一区二区有限公司| 国产福利一区二区三区视频| 日韩视频在线永久播放| 国产精品久久福利| 久久se这里有精品| 色欧美片视频在线观看在线视频| 日韩亚洲欧美成人一区| 国产精品毛片a∨一区二区三区 | 精品一区二区三区久久| 成年人国产精品| 日韩免费观看2025年上映的电影 | 国产香蕉久久精品综合网| 亚洲一区二区黄色| 成人美女视频在线观看18| 正在播放亚洲一区| 一区二区三区美女| 不卡区在线中文字幕| 精品久久久网站| 亚洲成av人片在线观看| 成人91在线观看| 久久久久久毛片| 日本亚洲免费观看| 欧美日韩国产首页| 亚洲视频一二三| 成人国产一区二区三区精品| 日韩情涩欧美日韩视频| 婷婷激情综合网| 欧美性做爰猛烈叫床潮| 国产精品黄色在线观看| 国产激情精品久久久第一区二区 | 欧美日韩精品欧美日韩精品| 亚洲丝袜另类动漫二区| 国产成人免费视| 精品999久久久| 麻豆91精品91久久久的内涵| 欧美日韩一区二区三区四区 | 久久久不卡影院| 美女网站在线免费欧美精品| 欧美亚洲国产怡红院影院| 亚洲欧美在线高清| 国产成+人+日韩+欧美+亚洲| 亚洲免费在线看| 色综合天天综合网天天看片| 日韩一区日韩二区| 国产原创一区二区三区| 精品国产人成亚洲区| 青青草原综合久久大伊人精品优势| 欧美中文字幕亚洲一区二区va在线| 亚洲精品久久久蜜桃| 91免费精品国自产拍在线不卡 | 欧美成人艳星乳罩| 麻豆成人久久精品二区三区红| 在线播放91灌醉迷j高跟美女| 亚洲午夜久久久久久久久电影网| 欧美午夜精品久久久久久孕妇| 亚洲一二三四久久| 欧美日韩国产一级片| 亚瑟在线精品视频| 91精品国产黑色紧身裤美女| 美女被吸乳得到大胸91| 日韩欧美成人激情| 国产一区二区三区久久久 | 99久久精品一区二区| 日韩毛片视频在线看| 欧美三级日本三级少妇99| 日韩精品一区第一页| 精品精品国产高清a毛片牛牛| 狠狠色丁香久久婷婷综合_中 | 精品福利二区三区| 粉嫩av一区二区三区在线播放| 中文字幕不卡在线观看| 色婷婷综合久久久久中文 | 亚洲最大成人综合| 欧美性大战久久久久久久| 伦理电影国产精品| 中国色在线观看另类| 欧美专区日韩专区| 蜜桃精品视频在线| 国产日产精品一区| 色天使久久综合网天天| 美女国产一区二区|