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

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

?? encoding.c

?? gcc庫的原代碼,對(duì)編程有很大幫助.
?? C
字號(hào):
/* Encoding of types for Objective C.   Copyright (C) 1993, 1995 Free Software Foundation, Inc.   Contributed by Kresten Krab ThorupThis file is part of GNU CC.GNU CC is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, or (at your option)any later version.GNU CC is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with GNU CC; see the file COPYING.  If not, write tothe Free Software Foundation, 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 "encoding.h"#define MAX(X, Y)                    \  ({ typeof(X) __x = (X), __y = (Y); \     (__x > __y ? __x : __y); })#define MIN(X, Y)                    \  ({ typeof(X) __x = (X), __y = (Y); \     (__x < __y ? __x : __y); })#define ROUND(V, A) \  ({ typeof(V) __v=(V); typeof(A) __a=(A); \     __a*((__v+__a-1)/__a); })static inline intatoi (const char* str){  int res = 0;    while (isdigit (*str))    res *= 10, res += (*str++ - '0');  return res;}/*  return the size of an object specified by type */intobjc_sizeof_type(const char* type){  switch(*type) {  case _C_ID:    return sizeof(id);    break;  case _C_CLASS:    return sizeof(Class);    break;  case _C_SEL:    return sizeof(SEL);    break;  case _C_CHR:    return sizeof(char);    break;      case _C_UCHR:    return sizeof(unsigned char);    break;  case _C_SHT:    return sizeof(short);    break;  case _C_USHT:    return sizeof(unsigned short);    break;  case _C_INT:    return sizeof(int);    break;  case _C_UINT:    return sizeof(unsigned int);    break;  case _C_LNG:    return sizeof(long);    break;  case _C_ULNG:    return sizeof(unsigned long);    break;  case _C_FLT:    return sizeof(float);    break;  case _C_DBL:    return sizeof(double);    break;  case _C_PTR:  case _C_ATOM:  case _C_CHARPTR:    return sizeof(char*);    break;  case _C_ARY_B:    {      int len = atoi(type+1);      while (isdigit(*++type));      return len*objc_aligned_size (type);    }    break;   case _C_STRUCT_B:    {      int acc_size = 0;      int align;      while (*type != _C_STRUCT_E && *type++ != '='); /* skip "<name>=" */      while (*type != _C_STRUCT_E)	{	  align = objc_alignof_type (type);       /* padd to alignment */	  acc_size = ROUND (acc_size, align);	  acc_size += objc_sizeof_type (type);   /* add component size */	  type = objc_skip_typespec (type);	         /* skip component */	}      return acc_size;    }  case _C_UNION_B:    {      int max_size = 0;      while (*type != _C_UNION_E && *type++ != '=') /* do nothing */;      while (*type != _C_UNION_E)	{	  max_size = MAX (max_size, objc_sizeof_type (type));	  type = objc_skip_typespec (type);	}      return max_size;    }      default:    abort();  }}/*  Return the alignment of an object specified by type */intobjc_alignof_type(const char* type){  switch(*type) {  case _C_ID:    return __alignof__(id);    break;  case _C_CLASS:    return __alignof__(Class);    break;      case _C_SEL:    return __alignof__(SEL);    break;  case _C_CHR:    return __alignof__(char);    break;      case _C_UCHR:    return __alignof__(unsigned char);    break;  case _C_SHT:    return __alignof__(short);    break;  case _C_USHT:    return __alignof__(unsigned short);    break;  case _C_INT:    return __alignof__(int);    break;  case _C_UINT:    return __alignof__(unsigned int);    break;  case _C_LNG:    return __alignof__(long);    break;  case _C_ULNG:    return __alignof__(unsigned long);    break;  case _C_FLT:    return __alignof__(float);    break;  case _C_DBL:    return __alignof__(double);    break;  case _C_ATOM:  case _C_CHARPTR:    return __alignof__(char*);    break;  case _C_ARY_B:    while (isdigit(*++type)) /* do nothing */;    return objc_alignof_type (type);        case _C_STRUCT_B:    {      struct { int x; double y; } fooalign;      while(*type != _C_STRUCT_E && *type++ != '=') /* do nothing */;      if (*type != _C_STRUCT_E)	return MAX (objc_alignof_type (type), __alignof__ (fooalign));      else	return __alignof__ (fooalign);    }  case _C_UNION_B:    {      int maxalign = 0;      while (*type != _C_UNION_E && *type++ != '=') /* do nothing */;      while (*type != _C_UNION_E)	{	  maxalign = MAX (maxalign, objc_alignof_type (type));	  type = objc_skip_typespec (type);	}      return maxalign;    }      default:    abort();  }}/*  The aligned size if the size rounded up to the nearest alignment.*/intobjc_aligned_size (const char* type){  int size = objc_sizeof_type (type);  int align = objc_alignof_type (type);  return ROUND (size, align);}/*  The size rounded up to the nearest integral of the wordsize, taken  to be the size of a void*.*/int objc_promoted_size (const char* type){  int size = objc_sizeof_type (type);  int wordsize = sizeof (void*);  return ROUND (size, wordsize);}/*  Skip type qualifiers.  These may eventually precede typespecs  occurring in method prototype encodings.*/inline const char*objc_skip_type_qualifiers (const char* type){  while (*type == _C_CONST	 || *type == _C_IN 	 || *type == _C_INOUT	 || *type == _C_OUT 	 || *type == _C_BYCOPY	 || *type == _C_ONEWAY)    {      type += 1;    }  return type;}  /*  Skip one typespec element.  If the typespec is prepended by type  qualifiers, these are skipped as well.*/const char* objc_skip_typespec (const char* type){  type = objc_skip_type_qualifiers (type);    switch (*type) {  case _C_ID:    /* An id may be annotated by the actual type if it is known       with the @"ClassName" syntax */    if (*++type != '"')      return type;    else      {	while (*++type != '"') /* do nothing */;	return type + 1;      }    /* The following are one character type codes */  case _C_CLASS:  case _C_SEL:  case _C_CHR:  case _C_UCHR:  case _C_CHARPTR:  case _C_ATOM:  case _C_SHT:  case _C_USHT:  case _C_INT:  case _C_UINT:  case _C_LNG:  case _C_ULNG:  case _C_FLT:  case _C_DBL:  case _C_VOID:    return ++type;    break;  case _C_ARY_B:    /* skip digits, typespec and closing ']' */        while(isdigit(*++type));    type = objc_skip_typespec(type);    if (*type == _C_ARY_E)      return ++type;    else      abort();  case _C_STRUCT_B:    /* skip name, and elements until closing '}'  */        while (*type != _C_STRUCT_E && *type++ != '=');    while (*type != _C_STRUCT_E) { type = objc_skip_typespec (type); }    return ++type;  case _C_UNION_B:    /* skip name, and elements until closing ')'  */        while (*type != _C_UNION_E && *type++ != '=');    while (*type != _C_UNION_E) { type = objc_skip_typespec (type); }    return ++type;  case _C_PTR:    /* Just skip the following typespec */        return objc_skip_typespec (++type);      default:    abort();  }}/*  Skip an offset as part of a method encoding.  This is prepended by a  '+' if the argument is passed in registers.*/inline const char* objc_skip_offset (const char* type){  if (*type == '+') type++;  while(isdigit(*++type));  return type;}/*  Skip an argument specification of a method encoding.*/const char*objc_skip_argspec (const char* type){  type = objc_skip_typespec (type);  type = objc_skip_offset (type);  return type;}/*  Return the number of arguments that the method MTH expects.  Note that all methods need two implicit arguments `self' and  `_cmd'. */intmethod_get_number_of_arguments (struct objc_method* mth){  int i = 0;  const char* type = mth->method_types;  while (*type)    {      type = objc_skip_argspec (type);      i += 1;    }  return i - 1;}/*  Return the size of the argument block needed on the stack to invoke  the method MTH.  This may be zero, if all arguments are passed in  registers.*/intmethod_get_sizeof_arguments (struct objc_method* mth){  const char* type = objc_skip_typespec (mth->method_types);  return atoi (type);}/*  Return a pointer to the next argument of ARGFRAME.  type points to  the last argument.  Typical use of this look like:  {    char *datum, *type;     for (datum = method_get_first_argument (method, argframe, &type);         datum; datum = method_get_next_argument (argframe, &type))      {        unsigned flags = objc_get_type_qualifiers (type);        type = objc_skip_type_qualifiers (type);	if (*type != _C_PTR)          [portal encodeData: datum ofType: type];	else	  {	    if ((flags & _F_IN) == _F_IN)              [portal encodeData: *(char**)datum ofType: ++type];	  }      }  }*/  char*method_get_next_argument (arglist_t argframe,			  const char **type){  const char *t = objc_skip_argspec (*type);  if (*t == '\0')    return 0;  *type = t;  t = objc_skip_typespec (t);  if (*t == '+')    return argframe->arg_regs + atoi (++t);  else    return argframe->arg_ptr + atoi (t);}/*  Return a pointer to the value of the first argument of the method   described in M with the given argumentframe ARGFRAME.  The type  is returned in TYPE.  type must be passed to successive calls of   method_get_next_argument.*/char*method_get_first_argument (struct objc_method* m,			   arglist_t argframe, 			   const char** type){  *type = m->method_types;  return method_get_next_argument (argframe, type);}/*   Return a pointer to the ARGth argument of the method   M from the frame ARGFRAME.  The type of the argument   is returned in the value-result argument TYPE */char*method_get_nth_argument (struct objc_method* m,			 arglist_t argframe, int arg, 			 const char **type){  const char* t = objc_skip_argspec (m->method_types);  if (arg > method_get_number_of_arguments (m))    return 0;  while (arg--)    t = objc_skip_argspec (t);    *type = t;  t = objc_skip_typespec (t);  if (*t == '+')    return argframe->arg_regs + atoi (++t);  else    return argframe->arg_ptr + atoi (t);}unsignedobjc_get_type_qualifiers (const char* type){  unsigned res = 0;  BOOL flag = YES;  while (flag)    switch (*type++)      {      case _C_CONST:  res |= _F_CONST; break;      case _C_IN:     res |= _F_IN; break;      case _C_INOUT:  res |= _F_INOUT; break;      case _C_OUT:    res |= _F_OUT; break;      case _C_BYCOPY: res |= _F_BYCOPY; break;      case _C_ONEWAY: res |= _F_ONEWAY; break;      default: flag = NO;    }  return res;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人中文字幕在线视频 | 中文字幕在线视频一区| 最新久久zyz资源站| 亚洲国产精品一区二区www在线| 首页综合国产亚洲丝袜| 国产伦精品一区二区三区视频青涩| 国产馆精品极品| 色国产精品一区在线观看| 欧美电视剧免费全集观看| 国产精品久久久久久一区二区三区| 亚洲精品国产a久久久久久 | 久久久噜噜噜久久中文字幕色伊伊| 综合久久久久综合| 日本在线不卡视频一二三区| 不卡视频一二三| 91精品国产综合久久久久久| 国产精品麻豆欧美日韩ww| 亚洲国产精品久久人人爱蜜臀| 国产一区999| 欧美日韩亚州综合| 国产欧美一区二区精品仙草咪| 一级做a爱片久久| 国产乱码字幕精品高清av| 欧美日韩视频在线观看一区二区三区| 久久在线观看免费| 午夜天堂影视香蕉久久| 成人动漫av在线| 欧美成人精品二区三区99精品| 亚洲精品日日夜夜| 高清国产一区二区| 欧美一区二区三区人| 一区二区三区日韩| 国产精品一区二区你懂的| 91精品婷婷国产综合久久性色| 亚洲美女屁股眼交| 国产黄人亚洲片| 日韩情涩欧美日韩视频| 一区二区三区在线不卡| 成人午夜在线播放| 精品美女一区二区三区| 午夜在线成人av| 色综合久久中文字幕| 中文字幕乱码一区二区免费| 国产综合久久久久影院| 日韩一区二区三区在线观看| 一区二区三区四区蜜桃| av电影在线观看一区| 久久久一区二区三区| 久久91精品久久久久久秒播| 91精品国产一区二区三区| 亚洲成人在线免费| 欧美亚洲国产一区二区三区va | 欧洲国内综合视频| 亚洲日本在线a| 成人网男人的天堂| 久久综合av免费| 精品一区二区三区免费毛片爱| 777xxx欧美| 男人操女人的视频在线观看欧美| 欧美日韩成人综合天天影院| 亚洲午夜日本在线观看| 色菇凉天天综合网| 亚洲精品国产精华液| 成人国产亚洲欧美成人综合网| 国产喂奶挤奶一区二区三区| 国内精品不卡在线| 精品嫩草影院久久| 国产麻豆一精品一av一免费 | 国产成a人无v码亚洲福利| 国产日韩精品一区二区三区| 国产精品99久| 日本一区二区免费在线| 成人av在线一区二区三区| 久久久激情视频| 粉嫩高潮美女一区二区三区| 中文字幕一区二区三区乱码在线| www.亚洲精品| 一区二区三区四区激情| 精品视频在线看| 青青草视频一区| 精品捆绑美女sm三区| 久久国产日韩欧美精品| 久久久久久久久久美女| 岛国精品在线观看| 成人免费一区二区三区在线观看| 91麻豆免费视频| 亚洲影院免费观看| 制服丝袜日韩国产| 精品综合久久久久久8888| 久久久不卡网国产精品二区| 国产成人超碰人人澡人人澡| 久久99精品一区二区三区| 久久99这里只有精品| 精品制服美女丁香| 国产激情一区二区三区四区| 五月婷婷久久丁香| 亚洲成人7777| 蜜桃一区二区三区在线| 亚洲成人综合网站| 亚洲自拍偷拍综合| 一区二区不卡在线播放 | 国产夜色精品一区二区av| 91精品欧美福利在线观看| 94-欧美-setu| 欧美在线高清视频| 欧美三级在线播放| 欧美性猛交一区二区三区精品| 麻豆高清免费国产一区| 亚洲黄色av一区| 亚洲r级在线视频| 亚洲女同一区二区| 欧美bbbbb| 欧美日韩国产一级| 中文一区二区在线观看| 天天综合色天天综合| 懂色av中文一区二区三区| 成人开心网精品视频| 色哟哟在线观看一区二区三区| 日本黄色一区二区| 欧美视频中文字幕| 欧美日韩国产另类一区| 日韩三级高清在线| 九九国产精品视频| 久久人人97超碰com| 中文字幕av不卡| 欧美日韩性生活| 国产成人免费在线观看不卡| 亚洲福利视频一区二区| 久久久精品黄色| 欧美在线播放高清精品| 国产一区二区三区四区五区美女| 一区二区三区在线播| 久久精品一区二区| 欧美日本精品一区二区三区| 成人av电影在线网| 久久se精品一区精品二区| 一区二区三区四区精品在线视频| 久久久高清一区二区三区| 欧美日韩不卡一区二区| 99这里只有精品| 国产一区二区三区四区五区入口| 午夜精品福利一区二区三区蜜桃| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产亚洲综合在线| 91精品国产综合久久久蜜臀图片| 99久久国产免费看| 国产成人综合网站| 日本伊人精品一区二区三区观看方式 | 亚洲一线二线三线久久久| 国产性做久久久久久| 日韩欧美国产电影| 欧美三级日韩三级国产三级| 91一区一区三区| 国产91露脸合集magnet| 久久国产精品99精品国产 | 精品国产凹凸成av人网站| 欧美日韩三级视频| 欧洲视频一区二区| 91美女在线观看| 不卡av免费在线观看| 国产69精品久久777的优势| 激情六月婷婷综合| 麻豆精品久久久| 日本不卡一区二区| 天堂av在线一区| 日韩精品国产欧美| 天天影视涩香欲综合网| 亚洲成av人综合在线观看| 亚洲一区二区在线播放相泽| 一区二区三区中文字幕精品精品| 亚洲天堂成人在线观看| 综合色天天鬼久久鬼色| 国产精品成人免费在线| 国产精品天美传媒沈樵| 国产精品日韩成人| 中文字幕中文字幕中文字幕亚洲无线| 日本一区二区高清| 国产精品你懂的在线欣赏| 国产精品福利影院| 亚洲视频一二三| 亚洲欧美日韩在线播放| 中文字幕精品一区二区三区精品| 国产日韩精品视频一区| 欧美激情综合在线| 国产精品理论片| 亚洲精品自拍动漫在线| 一区二区三区毛片| 天天色图综合网| 裸体在线国模精品偷拍| 麻豆国产91在线播放| 国产精品一区2区| 成人免费视频网站在线观看| 成人黄色电影在线| 一本到不卡精品视频在线观看| 91国在线观看| 91精品国产综合久久精品麻豆| 日韩亚洲欧美在线观看| 久久综合狠狠综合久久激情| 国产女同性恋一区二区| 亚洲视频一区二区在线|