📄 cp-lex.c
字号:
IDENTIFIER_OPNAME_P (ansi_assopname[(int) TRUNC_MOD_EXPR]) = 1; ansi_opname[(int) CEIL_MOD_EXPR] = ansi_opname[(int) TRUNC_MOD_EXPR]; ansi_opname[(int) FLOOR_MOD_EXPR] = ansi_opname[(int) TRUNC_MOD_EXPR]; ansi_opname[(int) ROUND_MOD_EXPR] = ansi_opname[(int) TRUNC_MOD_EXPR]; ansi_opname[(int) MINUS_EXPR] = get_identifier ("__mi"); IDENTIFIER_OPNAME_P (ansi_opname[(int) MINUS_EXPR]) = 1; ansi_opname[(int) NEGATE_EXPR] = ansi_opname[(int) MINUS_EXPR]; ansi_assopname[(int) MINUS_EXPR] = get_identifier ("__ami"); IDENTIFIER_OPNAME_P (ansi_assopname[(int) MINUS_EXPR]) = 1; ansi_assopname[(int) NEGATE_EXPR] = ansi_assopname[(int) MINUS_EXPR]; ansi_opname[(int) RSHIFT_EXPR] = get_identifier ("__rs"); IDENTIFIER_OPNAME_P (ansi_opname[(int) RSHIFT_EXPR]) = 1; ansi_assopname[(int) RSHIFT_EXPR] = get_identifier ("__ars"); IDENTIFIER_OPNAME_P (ansi_assopname[(int) RSHIFT_EXPR]) = 1; ansi_opname[(int) NE_EXPR] = get_identifier ("__ne"); IDENTIFIER_OPNAME_P (ansi_opname[(int) NE_EXPR]) = 1; ansi_opname[(int) GT_EXPR] = get_identifier ("__gt"); IDENTIFIER_OPNAME_P (ansi_opname[(int) GT_EXPR]) = 1; ansi_opname[(int) GE_EXPR] = get_identifier ("__ge"); IDENTIFIER_OPNAME_P (ansi_opname[(int) GE_EXPR]) = 1; ansi_opname[(int) BIT_IOR_EXPR] = get_identifier ("__or"); IDENTIFIER_OPNAME_P (ansi_opname[(int) BIT_IOR_EXPR]) = 1; ansi_assopname[(int) BIT_IOR_EXPR] = get_identifier ("__aor"); IDENTIFIER_OPNAME_P (ansi_assopname[(int) BIT_IOR_EXPR]) = 1; ansi_opname[(int) TRUTH_ANDIF_EXPR] = get_identifier ("__aa"); IDENTIFIER_OPNAME_P (ansi_opname[(int) TRUTH_ANDIF_EXPR]) = 1; ansi_opname[(int) TRUTH_NOT_EXPR] = get_identifier ("__nt"); IDENTIFIER_OPNAME_P (ansi_opname[(int) TRUTH_NOT_EXPR]) = 1; ansi_opname[(int) PREINCREMENT_EXPR] = get_identifier ("__pp"); IDENTIFIER_OPNAME_P (ansi_opname[(int) PREINCREMENT_EXPR]) = 1; ansi_opname[(int) POSTINCREMENT_EXPR] = ansi_opname[(int) PREINCREMENT_EXPR]; ansi_opname[(int) MODIFY_EXPR] = get_identifier ("__as"); IDENTIFIER_OPNAME_P (ansi_opname[(int) MODIFY_EXPR]) = 1; ansi_assopname[(int) NOP_EXPR] = ansi_opname[(int) MODIFY_EXPR]; ansi_opname[(int) COMPOUND_EXPR] = get_identifier ("__cm"); IDENTIFIER_OPNAME_P (ansi_opname[(int) COMPOUND_EXPR]) = 1; ansi_opname[(int) EXACT_DIV_EXPR] = get_identifier ("__dv"); IDENTIFIER_OPNAME_P (ansi_opname[(int) EXACT_DIV_EXPR]) = 1; ansi_assopname[(int) EXACT_DIV_EXPR] = get_identifier ("__adv"); IDENTIFIER_OPNAME_P (ansi_assopname[(int) EXACT_DIV_EXPR]) = 1; ansi_opname[(int) TRUNC_DIV_EXPR] = ansi_opname[(int) EXACT_DIV_EXPR]; ansi_opname[(int) CEIL_DIV_EXPR] = ansi_opname[(int) EXACT_DIV_EXPR]; ansi_opname[(int) FLOOR_DIV_EXPR] = ansi_opname[(int) EXACT_DIV_EXPR]; ansi_opname[(int) ROUND_DIV_EXPR] = ansi_opname[(int) EXACT_DIV_EXPR]; ansi_opname[(int) PLUS_EXPR] = get_identifier ("__pl"); ansi_assopname[(int) TRUNC_DIV_EXPR] = ansi_assopname[(int) EXACT_DIV_EXPR]; ansi_assopname[(int) CEIL_DIV_EXPR] = ansi_assopname[(int) EXACT_DIV_EXPR]; ansi_assopname[(int) FLOOR_DIV_EXPR] = ansi_assopname[(int) EXACT_DIV_EXPR]; ansi_assopname[(int) ROUND_DIV_EXPR] = ansi_assopname[(int) EXACT_DIV_EXPR]; ansi_opname[(int) PLUS_EXPR] = get_identifier ("__pl"); IDENTIFIER_OPNAME_P (ansi_opname[(int) PLUS_EXPR]) = 1; ansi_assopname[(int) PLUS_EXPR] = get_identifier ("__apl"); IDENTIFIER_OPNAME_P (ansi_assopname[(int) PLUS_EXPR]) = 1; ansi_opname[(int) CONVERT_EXPR] = ansi_opname[(int) PLUS_EXPR]; ansi_assopname[(int) CONVERT_EXPR] = ansi_assopname[(int) PLUS_EXPR]; ansi_opname[(int) LSHIFT_EXPR] = get_identifier ("__ls"); IDENTIFIER_OPNAME_P (ansi_opname[(int) LSHIFT_EXPR]) = 1; ansi_assopname[(int) LSHIFT_EXPR] = get_identifier ("__als"); IDENTIFIER_OPNAME_P (ansi_assopname[(int) LSHIFT_EXPR]) = 1; ansi_opname[(int) EQ_EXPR] = get_identifier ("__eq"); IDENTIFIER_OPNAME_P (ansi_opname[(int) EQ_EXPR]) = 1; ansi_opname[(int) LT_EXPR] = get_identifier ("__lt"); IDENTIFIER_OPNAME_P (ansi_opname[(int) LT_EXPR]) = 1; ansi_opname[(int) LE_EXPR] = get_identifier ("__le"); IDENTIFIER_OPNAME_P (ansi_opname[(int) LE_EXPR]) = 1; ansi_opname[(int) BIT_AND_EXPR] = get_identifier ("__ad"); IDENTIFIER_OPNAME_P (ansi_opname[(int) BIT_AND_EXPR]) = 1; ansi_assopname[(int) BIT_AND_EXPR] = get_identifier ("__aad"); IDENTIFIER_OPNAME_P (ansi_assopname[(int) BIT_AND_EXPR]) = 1; ansi_opname[(int) ADDR_EXPR] = ansi_opname[(int) BIT_AND_EXPR]; ansi_assopname[(int) ADDR_EXPR] = ansi_assopname[(int) BIT_AND_EXPR]; ansi_opname[(int) BIT_XOR_EXPR] = get_identifier ("__er"); IDENTIFIER_OPNAME_P (ansi_opname[(int) BIT_XOR_EXPR]) = 1; ansi_assopname[(int) BIT_XOR_EXPR] = get_identifier ("__aer"); IDENTIFIER_OPNAME_P (ansi_assopname[(int) BIT_XOR_EXPR]) = 1; ansi_opname[(int) TRUTH_ORIF_EXPR] = get_identifier ("__oo"); IDENTIFIER_OPNAME_P (ansi_opname[(int) TRUTH_ORIF_EXPR]) = 1; ansi_opname[(int) BIT_NOT_EXPR] = get_identifier ("__co"); IDENTIFIER_OPNAME_P (ansi_opname[(int) BIT_NOT_EXPR]) = 1; ansi_opname[(int) PREDECREMENT_EXPR] = get_identifier ("__mm"); IDENTIFIER_OPNAME_P (ansi_opname[(int) PREDECREMENT_EXPR]) = 1; ansi_opname[(int) POSTDECREMENT_EXPR] = ansi_opname[(int) PREDECREMENT_EXPR]; ansi_opname[(int) COMPONENT_REF] = get_identifier ("__rf"); IDENTIFIER_OPNAME_P (ansi_opname[(int) COMPONENT_REF]) = 1; ansi_opname[(int) MEMBER_REF] = get_identifier ("__rm"); IDENTIFIER_OPNAME_P (ansi_opname[(int) MEMBER_REF]) = 1; ansi_opname[(int) CALL_EXPR] = get_identifier ("__cl"); IDENTIFIER_OPNAME_P (ansi_opname[(int) CALL_EXPR]) = 1; ansi_opname[(int) ARRAY_REF] = get_identifier ("__vc"); IDENTIFIER_OPNAME_P (ansi_opname[(int) ARRAY_REF]) = 1; ansi_opname[(int) NEW_EXPR] = get_identifier ("__nw"); IDENTIFIER_OPNAME_P (ansi_opname[(int) NEW_EXPR]) = 1; ansi_opname[(int) DELETE_EXPR] = get_identifier ("__dl"); IDENTIFIER_OPNAME_P (ansi_opname[(int) DELETE_EXPR]) = 1; ansi_opname[(int) TYPE_EXPR] = get_identifier ("__op"); IDENTIFIER_OPNAME_P (ansi_opname[(int) TYPE_EXPR]) = 1; /* This is not true: these operators are not defined in ANSI, but we need them anyway. */ ansi_opname[(int) MIN_EXPR] = get_identifier ("__mn"); IDENTIFIER_OPNAME_P (ansi_opname[(int) MIN_EXPR]) = 1; ansi_opname[(int) MAX_EXPR] = get_identifier ("__mx"); IDENTIFIER_OPNAME_P (ansi_opname[(int) MAX_EXPR]) = 1; ansi_opname[(int) COND_EXPR] = get_identifier ("__cn"); IDENTIFIER_OPNAME_P (ansi_opname[(int) COND_EXPR]) = 1; ansi_opname[(int) METHOD_CALL_EXPR] = get_identifier ("__wr"); IDENTIFIER_OPNAME_P (ansi_opname[(int) METHOD_CALL_EXPR]) = 1; init_method (); gcc_obstack_init (&inline_text_obstack); inline_text_firstobj = (char *) obstack_alloc (&inline_text_obstack, 0); /* Start it at 0, because check_newline is called at the very beginning and will increment it to 1. */ lineno = 0; current_function_decl = NULL; maxtoken = 40; token_buffer = (char *) xmalloc (maxtoken + 2); ridpointers[(int) RID_INT] = get_identifier ("int"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_INT], build_tree_list (NULL_TREE, ridpointers[(int) RID_INT])); ridpointers[(int) RID_CHAR] = get_identifier ("char"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_CHAR], build_tree_list (NULL_TREE, ridpointers[(int) RID_CHAR])); ridpointers[(int) RID_VOID] = get_identifier ("void"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_VOID], build_tree_list (NULL_TREE, ridpointers[(int) RID_VOID])); ridpointers[(int) RID_FLOAT] = get_identifier ("float"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_FLOAT], build_tree_list (NULL_TREE, ridpointers[(int) RID_FLOAT])); ridpointers[(int) RID_DOUBLE] = get_identifier ("double"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_DOUBLE], build_tree_list (NULL_TREE, ridpointers[(int) RID_DOUBLE])); ridpointers[(int) RID_SHORT] = get_identifier ("short"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_SHORT], build_tree_list (NULL_TREE, ridpointers[(int) RID_SHORT])); ridpointers[(int) RID_LONG] = get_identifier ("long"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_LONG], build_tree_list (NULL_TREE, ridpointers[(int) RID_LONG])); ridpointers[(int) RID_UNSIGNED] = get_identifier ("unsigned"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_UNSIGNED], build_tree_list (NULL_TREE, ridpointers[(int) RID_UNSIGNED])); ridpointers[(int) RID_SIGNED] = get_identifier ("signed"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_SIGNED], build_tree_list (NULL_TREE, ridpointers[(int) RID_SIGNED])); ridpointers[(int) RID_INLINE] = get_identifier ("inline"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_INLINE], build_tree_list (NULL_TREE, ridpointers[(int) RID_INLINE])); ridpointers[(int) RID_CONST] = get_identifier ("const"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_CONST], build_tree_list (NULL_TREE, ridpointers[(int) RID_CONST])); ridpointers[(int) RID_VOLATILE] = get_identifier ("volatile"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_VOLATILE], build_tree_list (NULL_TREE, ridpointers[(int) RID_VOLATILE])); ridpointers[(int) RID_AUTO] = get_identifier ("auto"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_AUTO], build_tree_list (NULL_TREE, ridpointers[(int) RID_AUTO])); ridpointers[(int) RID_STATIC] = get_identifier ("static"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_STATIC], build_tree_list (NULL_TREE, ridpointers[(int) RID_STATIC])); ridpointers[(int) RID_EXTERN] = get_identifier ("extern"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_EXTERN], build_tree_list (NULL_TREE, ridpointers[(int) RID_EXTERN])); ridpointers[(int) RID_TYPEDEF] = get_identifier ("typedef"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_TYPEDEF], build_tree_list (NULL_TREE, ridpointers[(int) RID_TYPEDEF])); ridpointers[(int) RID_REGISTER] = get_identifier ("register"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_REGISTER], build_tree_list (NULL_TREE, ridpointers[(int) RID_REGISTER])); /* C++ extensions. These are probably not correctly named. */ ridpointers[(int) RID_WCHAR] = get_identifier ("__wchar_t"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_WCHAR], build_tree_list (NULL_TREE, ridpointers[(int) RID_WCHAR])); class_type_node = build_int_2 (class_type, 0); TREE_TYPE (class_type_node) = class_type_node; ridpointers[(int) RID_CLASS] = class_type_node; record_type_node = build_int_2 (record_type, 0); TREE_TYPE (record_type_node) = record_type_node; ridpointers[(int) RID_RECORD] = record_type_node; union_type_node = build_int_2 (union_type, 0); TREE_TYPE (union_type_node) = union_type_node; ridpointers[(int) RID_UNION] = union_type_node; enum_type_node = build_int_2 (enum_type, 0); TREE_TYPE (enum_type_node) = enum_type_node; ridpointers[(int) RID_ENUM] = enum_type_node; ridpointers[(int) RID_VIRTUAL] = get_identifier ("virtual"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_VIRTUAL], build_tree_list (NULL_TREE, ridpointers[(int) RID_VIRTUAL])); ridpointers[(int) RID_FRIEND] = get_identifier ("friend"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_FRIEND], build_tree_list (NULL_TREE, ridpointers[(int) RID_FRIEND])); ridpointers[(int) RID_PUBLIC] = get_identifier ("public"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_PUBLIC], build_tree_list (NULL_TREE, ridpointers[(int) RID_PUBLIC])); ridpointers[(int) RID_PRIVATE] = get_identifier ("private"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_PRIVATE], build_tree_list (NULL_TREE, ridpointers[(int) RID_PRIVATE])); ridpointers[(int) RID_PROTECTED] = get_identifier ("protected"); SET_IDENTIFIER_AS_LIST (ridpointers[(int) RID_PROTECTED], build_tree_list (NULL_TREE, ridpointers[(int) RID_PROTECTED])); /* Exception handling extensions. */ exception_type_node = build_int_2 (exception_type, 0); TREE_TYPE (exception_type_node) = exception_type_node; ridpointers[(int) RID_EXCEPTION] = exception_type_node; opname_tab[(int) COMPONENT_REF] = "->"; opname_tab[(int) MEMBER_REF] = "->*"; opname_tab[(int) METHOD_CALL_EXPR] = "->()"; opname_tab[(int) INDIRECT_REF] = "(unary *)"; opname_tab[(int) ARRAY_REF] = "[]"; opname_tab[(int) MODIFY_EXPR] = "="; opname_tab[(int) NEW_EXPR] = "new"; opname_tab[(int) DELETE_EXPR] = "delete"; opname_tab[(int) COND_EXPR] = "... ? ... : ..."; opname_tab[(int) CALL_EXPR] = "()"; opname_tab[(int) PLUS_EXPR] = "+"; opname_tab[(int) MINUS_EXPR] = "-"; opname_tab[(int) MULT_EXPR] = "*"; opname_tab[(int) TRUNC_DIV_EXPR] = "/"; opname_tab[(int) CEIL_DIV_EXPR] = "(ceiling /)"; opname_tab[(int) FLOOR_DIV_EXPR] = "(floor /)"; opname_tab[(int) ROUND_DIV_EXPR] = "(round /)"; opname_tab[(int) TRUNC_MOD_EXPR] = "%"; opname_tab[(int) CEIL_MOD_EXPR] = "(ceiling %)"; opname_tab[(int) FLOOR_MOD_EXPR] = "(floor %)"; opname_tab[(int) ROUND_MOD_EXPR] = "(round %)"; opname_tab[(int) NEGATE_EXPR] = "-"; opname_tab[(int) MIN_EXPR] = "<?"; opname_tab[(int) MAX_EXPR] = ">?"; opname_tab[(int) ABS_EXPR] = "abs"; opname_tab[(int) FFS_EXPR] = "ffs"; opname_tab[(int) LSHIFT_EXPR] = "<<"; opname_tab[(int) RSHIFT_EXPR] = ">>"; opname_tab[(int) BIT_IOR_EXPR] = "|"; opname_tab[(int) BIT_XOR_EXPR] = "^"; opname_tab[(int) BIT_AND_EXPR] = "&"; opname_tab[(int) BIT_ANDTC_EXPR] = "&~"; opname_tab[(int) BIT_NOT_EXPR] = "~"; opname_tab[(int) TRUTH_ANDIF_EXPR] = "&&"; opname_tab[(int) TRUTH_ORIF_EXPR] = "||"; opname_tab[(int) TRUTH_AND_EXPR] = "strict &&"; opname_tab[(int) TRUTH_OR_EXPR] = "strict ||"; opname_tab[(int) TRUTH_NOT_EXPR] = "!"; opname_tab[(int) LT_EXPR] = "<"; opname_tab[(int) LE_EXPR] = "<="; opname_tab[(int) GT_EXPR] = ">"; opname_tab[(int) GE_EXPR] = ">="; opname_tab[(int) EQ_EXPR] = "=="; opname_tab[(int) NE_EXPR] = "!="; opname_tab[(int) IN_EXPR] = "in"; opname_tab[(int) SET_LE_EXPR] = "subset"; opname_tab[(int) CARD_EXPR] = "#"; opname_tab[(int) RANGE_EXPR] = ".."; opname_tab[(int) CONVERT_EXPR] = "(unary +)"; opname_tab[(int) ADDR_EXPR] = "(unary &)"; opname_tab[(int) PREDECREMENT_EXPR] = "--"; opname_tab[(int) PREINCREMENT_EXPR] = "++"; opname_tab[(int) POSTDECREMENT_EXPR] = "--"; opname_tab[(int) POSTINCREMENT_EXPR] = "++"; opname_tab[(int) COMPOUND_EXPR] = ","; assignop_tab[(int) NOP_EXPR] = "="; assignop_tab[(int) PLUS_EXPR] = "+="; assignop_tab[(int) CONVERT_EXPR] = "+="; assignop_tab[(int) MINUS_EXPR] = "-="; assignop_tab[(int) NEGATE_EXPR] = "-="; assignop_tab[(int) MULT_EXPR] = "*="; assignop_tab[(int) INDIRECT_REF] = "*="; assignop_tab[(int) TRUNC_DIV_EXPR] = "/="; assignop_tab[(int) EXACT_DIV_EXPR] = "(exact /=)"; assignop_tab[(int) CEIL_DIV_EXPR] = "(ceiling /=)"; assignop_tab[(int) FLOOR_DIV_EXPR] = "(floor /=)"; assignop_tab[(int) ROUND_DIV_EXPR] = "(round /=)"; assignop_tab[(int) TRUNC_MOD_EXPR] = "%="; assignop_tab[(int) CEIL_MOD_EXPR] = "(ceiling %=)"; assignop_tab[(int) FLOOR_MOD_EXPR] = "(floor %=)"; assignop_tab[(int) ROUND_MOD_EXPR] = "(round %=)"; assignop_tab[(int) MIN_EXPR] = "<?="; assignop_tab[(int) MAX_EXPR] = ">?="; assignop_tab[(int) LSHIFT_EXPR] = "<<="; assignop_tab[(int) RSHIFT_EXPR] = ">>="; assignop_tab[(int) BIT_IOR_EXPR] = "|="; assignop_tab[(int) BIT_XOR_EXPR] = "^="; assignop_tab[(int) BIT_AND_EXPR] = "&="; assignop_tab[(int) ADDR_EXPR] = "&="; init_filename_times ();#define UNSET_RESERVED_WORD(STRING) \ do { is_reserved_word (STRING, sizeof (STRING) - 1)->name = ""; } while (0) if (flag_ansi_exceptions) flag_handle_exceptions = 2; if (!flag_ansi_exceptions) { UNSET_RESERVED_WORD ("catch"); } if (! flag_handle_exceptions) { /* Easiest way to not recognize exception handling extensions... */ UNSET_RESERVED_WORD ("all"); UNSET_RESERVED_WORD ("except"); UNSET_RESERVED_WORD ("exception"); UNSET_RESERVED_WORD ("raise"); UNSET_RESERVED_WORD ("raises"); UNSET_RESERVED_WORD ("reraise"); UNSET_RESERVED_WORD ("try"); UNSET_RESERVED_WORD ("throw"); } else if (flag_ansi_exceptions) { /* Easiest way to not recognize exception handling extensions... */ UNSET_RESERVED_WORD ("exception"); UNSET_RESERVED_WORD ("all"); UNSET_RESERVED_WORD ("except"); UNSET_RESERVED_WORD ("raise"); UNSET_RESERVED_WORD ("raises"); UNSET_RESERVED_WORD ("reraise"); is_reserved_word ("try", sizeof ("try") - 1)->token = ANSI_TRY; is_reserved_word ("throw", sizeof ("throw") - 1)->token = ANSI_THROW; } if (! (flag_gc || flag_dossier)) { UNSET_RESERVED_WORD ("classof"); UNSET_RESERVED_WORD ("headof"); } if (flag_no_asm) UNSET_RESERVED_WORD ("asm"); if (flag_no_asm || flag_traditional) UNSET_RESERVED_WORD ("typeof");#ifndef SOS UNSET_RESERVED_WORD ("dynamic");#endif token_count = init_parse (); interface_unknown = 1;}voidreinit_parse_for_function (){ current_base_init_list = NULL_TREE; current_member_init_list = NULL_TREE;}static#ifdef __GNUC____inline#endifvoidyyprint (file, yychar, yylval) FILE *file; int yychar; YYSTYPE yylval;{ tree t; switch (yychar) { case IDENTIFIER: case TYPENAME: case TYPESPEC: case PTYPENAME: case IDENTIFIER_DEFN: case TYPENAME_DEFN: case PTYPENAME_DEFN: case TYPENAME_COLON: case TYPENAME_ELLIPSIS: case SCOPED_TYPENAME: case SCSPEC: t = yylval.ttype; print_id: my_friendly_assert (TREE_CODE (t) == IDENTIFIER_NODE, 224); if (IDENTIFIER_POINTER (t)) fprintf (file, " `%s'", IDENTIFIER_POINTER (t)); break; case AGGR: if (yylval.ttype == class_type_node) fprintf (file, " `class'"); else if (yylval.ttype == record_type_node) fprintf (file, " `struct'"); else if (yylval.ttype == union_type_node) fprintf (file, " `union'"); else if (yylval.ttype == enum_type_node) fprintf (file, " `enum'"); else my_friendly_abort (80); break; case PRE_PARSED_CLASS_DECL: t = yylval.ttype; my_friendly_assert (TREE_CODE (t) == TREE_LIST, 225); t = TREE_VALUE (t); goto print_id; }}static int *reduce_count;int *token_count;#define REDUCE_LENGTH (sizeof (yyr2) / sizeof (yyr2[0]))#define TOKEN_LENGTH (256 + sizeof (yytname) / sizeof (yytname[0]))int *init_parse (){#ifdef GATHER_STATISTICS reduce_count = (int *)malloc (sizeof (int) * (REDUCE_LENGTH + 1)); bzero (reduce_count, sizeof (int) * (REDUCE_LENGTH + 1)); reduce_count += 1; token_count = (int *)malloc (sizeof (int) * (TOKEN_LENGTH + 1)); bzero (token_count, sizeof (int) * (TOKEN_LENGTH + 1)); token_count += 1;#endif return token_count;}#ifdef GATHER_STATISTICSvoidyyhook (yyn) int yyn;{ reduce_count[yyn] += 1;}#endifstatic intreduce_cmp (p, q) int *p, *q;{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -