GCC C语言处理主要函数之c_parse_init

来源:互联网 发布:人工神经网络5年数据 编辑:程序博客网 时间:2024/05/18 07:45
c_parse_init:

/* Initialization routine for this file.  */

voidc_parse_init (void){  /* The only initialization required is of the reserved word     identifiers.  */  unsigned int i;  tree id;  int mask = 0;

  /* Make sure RID_MAX hasn't grown past the 8 bits used to hold the keyword in     the c_token structure.  */  gcc_assert (RID_MAX <= 255);

  mask |= D_CXXONLY;  if (!flag_isoc99)    mask |= D_C99;  if (flag_no_asm)    {      mask |= D_ASM | D_EXT;      if (!flag_isoc99) mask |= D_EXT89;    }  if (!c_dialect_objc ())    mask |= D_OBJC | D_CXX_OBJC;

  ridpointers = ggc_cleared_vec_alloc<tree> ((int) RID_MAX);  for (i = 0; i < num_c_common_reswords; i++)    {      /* If a keyword is disabled, do not enter it into the table  and so create a canonical spelling that isn't a keyword.  */      if (c_common_reswords[i].disable & mask) {   if (warn_cxx_compat       && (c_common_reswords[i].disable & D_CXXWARN))     {       id = get_identifier (c_common_reswords[i].word);       C_SET_RID_CODE (id, RID_CXX_COMPAT_WARN);       C_IS_RESERVED_WORD (id) = 1;     }   continue; }

      id = get_identifier (c_common_reswords[i].word);      C_SET_RID_CODE (id, c_common_reswords[i].rid);      C_IS_RESERVED_WORD (id) = 1;      ridpointers [(int) c_common_reswords[i].rid] = id;    }

  for (i = 0; i < NUM_INT_N_ENTS; i++)    {      /* We always create the symbols but they aren't always supported.  */      char name[50];      sprintf (name, "__int%d", int_n_data[i].bitsize);      id = get_identifier (name);      C_SET_RID_CODE (id, RID_FIRST_INT_N + i);      C_IS_RESERVED_WORD (id) = 1;    }}

0 0