📄 cp-tree.h
字号:
/* Definitions for C++ parsing and type checking. Copyright (C) 1987, 1993, 1994, 1995 Free Software Foundation, Inc. Hacked by Michael Tiemann (tiemann@cygnus.com)This 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. */#ifndef _CP_TREE_H#define _CP_TREE_H/* Borrow everything that is C from c-tree.h, but do so by copy, not by inclusion, since c-tree.h defines lang_identifier. */#ifndef STDIO_PROTO#ifdef BUFSIZ#define STDIO_PROTO(ARGS) PROTO(ARGS)#else#define STDIO_PROTO(ARGS) ()#endif#endif/* Language-dependent contents of an identifier. */struct lang_identifier{ struct tree_identifier ignore; tree global_value, local_value; tree class_value; tree class_template_info; struct lang_id2 *x;};struct lang_id2{ tree label_value, implicit_decl; tree type_desc, as_list, error_locus;};/* To identify to the debug emitters if it should pay attention to the flag `-Wtemplate-debugging'. */#define HAVE_TEMPLATES 1/* Macros for access to language-specific slots in an identifier. */#define IDENTIFIER_GLOBAL_VALUE(NODE) \ (((struct lang_identifier *)(NODE))->global_value)#define IDENTIFIER_CLASS_VALUE(NODE) \ (((struct lang_identifier *)(NODE))->class_value)#define IDENTIFIER_LOCAL_VALUE(NODE) \ (((struct lang_identifier *)(NODE))->local_value)#define IDENTIFIER_TEMPLATE(NODE) \ (((struct lang_identifier *)(NODE))->class_template_info)#define IDENTIFIER_TYPE_VALUE(NODE) (TREE_TYPE (NODE))#define SET_IDENTIFIER_TYPE_VALUE(NODE,TYPE) (TREE_TYPE (NODE) = TYPE)#define IDENTIFIER_HAS_TYPE_VALUE(NODE) (TREE_TYPE (NODE) ? 1 : 0)#define LANG_ID_FIELD(NAME,NODE) \ (((struct lang_identifier *)(NODE))->x \ ? ((struct lang_identifier *)(NODE))->x->NAME : 0)#define SET_LANG_ID(NODE,VALUE,NAME) \ (((struct lang_identifier *)(NODE))->x == 0 \ ? ((struct lang_identifier *)(NODE))->x \ = (struct lang_id2 *)perm_calloc (1, sizeof (struct lang_id2)) : 0, \ ((struct lang_identifier *)(NODE))->x->NAME = (VALUE))#define IDENTIFIER_LABEL_VALUE(NODE) LANG_ID_FIELD(label_value, NODE)#define SET_IDENTIFIER_LABEL_VALUE(NODE,VALUE) \ SET_LANG_ID(NODE, VALUE, label_value)#define IDENTIFIER_IMPLICIT_DECL(NODE) LANG_ID_FIELD(implicit_decl, NODE)#define SET_IDENTIFIER_IMPLICIT_DECL(NODE,VALUE) \ SET_LANG_ID(NODE, VALUE, implicit_decl)#define IDENTIFIER_AS_DESC(NODE) LANG_ID_FIELD(type_desc, NODE)#define SET_IDENTIFIER_AS_DESC(NODE,DESC) \ SET_LANG_ID(NODE, DESC, type_desc)#define IDENTIFIER_AS_LIST(NODE) LANG_ID_FIELD(as_list, NODE)#define SET_IDENTIFIER_AS_LIST(NODE,LIST) \ SET_LANG_ID(NODE, LIST, as_list)#define IDENTIFIER_ERROR_LOCUS(NODE) LANG_ID_FIELD(error_locus, NODE)#define SET_IDENTIFIER_ERROR_LOCUS(NODE,VALUE) \ SET_LANG_ID(NODE, VALUE, error_locus)#define IDENTIFIER_VIRTUAL_P(NODE) TREE_LANG_FLAG_1(NODE)/* Nonzero if this identifier is the prefix for a mangled C++ operator name. */#define IDENTIFIER_OPNAME_P(NODE) TREE_LANG_FLAG_2(NODE)#define IDENTIFIER_TYPENAME_P(NODE) \ (! strncmp (IDENTIFIER_POINTER (NODE), \ IDENTIFIER_POINTER (ansi_opname[(int) TYPE_EXPR]), \ IDENTIFIER_LENGTH (ansi_opname[(int) TYPE_EXPR])))/* Nonzero means reject anything that ANSI standard C forbids. */extern int pedantic;/* In a RECORD_TYPE or UNION_TYPE, nonzero if any component is read-only. */#define C_TYPE_FIELDS_READONLY(type) TYPE_LANG_FLAG_0 (type)/* Record in each node resulting from a binary operator what operator was specified for it. */#define C_EXP_ORIGINAL_CODE(exp) ((enum tree_code) TREE_COMPLEXITY (exp))/* Store a value in that field. */#define C_SET_EXP_ORIGINAL_CODE(exp, code) \ (TREE_COMPLEXITY (exp) = (int)(code))/* If non-zero, a VAR_DECL whose cleanup will cause a throw to the next exception handler. */extern tree exception_throw_decl;extern tree double_type_node, long_double_type_node, float_type_node;extern tree char_type_node, unsigned_char_type_node, signed_char_type_node;extern tree ptrdiff_type_node;extern tree short_integer_type_node, short_unsigned_type_node;extern tree long_integer_type_node, long_unsigned_type_node;extern tree long_long_integer_type_node, long_long_unsigned_type_node;extern tree unsigned_type_node;extern tree string_type_node, char_array_type_node, int_array_type_node;extern tree wchar_array_type_node;extern tree wchar_type_node, signed_wchar_type_node, unsigned_wchar_type_node;extern tree intQI_type_node, unsigned_intQI_type_node;extern tree intHI_type_node, unsigned_intHI_type_node;extern tree intSI_type_node, unsigned_intSI_type_node;extern tree intDI_type_node, unsigned_intDI_type_node;extern int current_function_returns_value;extern int current_function_returns_null;extern tree current_function_return_value;extern tree ridpointers[];extern tree ansi_opname[];extern tree ansi_assopname[];/* Nonzero means `$' can be in an identifier. */extern int dollars_in_ident;/* Nonzero means allow type mismatches in conditional expressions; just make their values `void'. */extern int flag_cond_mismatch;/* Nonzero means don't recognize the keyword `asm'. */extern int flag_no_asm;/* For cross referencing. */extern int flag_gnu_xref;/* For environments where you can use GNU binutils (as, ld in particular). */extern int flag_gnu_binutils;/* Nonzero means ignore `#ident' directives. */extern int flag_no_ident;/* Nonzero means warn about implicit declarations. */extern int warn_implicit;/* Nonzero means warn when all ctors or dtors are private, and the class has no friends. */extern int warn_ctor_dtor_privacy;/* Nonzero means warn about function definitions that default the return type or that use a null return and have a return-type other than void. */extern int warn_return_type;/* Nonzero means give string constants the type `const char *' to get extra warnings from them. These warnings will be too numerous to be useful, except in thoroughly ANSIfied programs. */extern int warn_write_strings;/* Nonzero means warn about sizeof(function) or addition/subtraction of function pointers. */extern int warn_pointer_arith;/* Nonzero means warn for all old-style non-prototype function decls. */extern int warn_strict_prototypes;/* Nonzero means warn about suggesting putting in ()'s. */extern int warn_parentheses;/* Nonzero means warn about multiple (redundant) decls for the same single variable or function. */extern int warn_redundant_decls;/* Warn if initializer is not completely bracketed. */extern int warn_missing_braces;/* Warn about a subscript that has type char. */extern int warn_char_subscripts;/* Nonzero means warn about pointer casts that can drop a type qualifier from the pointer target type. */extern int warn_cast_qual;/* Warn about traditional constructs whose meanings changed in ANSI C. */extern int warn_traditional;/* Warn about *printf or *scanf format/argument anomalies. */extern int warn_format;/* Nonzero means warn about non virtual destructors in classes that have virtual functions. */extern int warn_nonvdtor;/* Non-zero means warn when a function is declared extern and later inline. */extern int warn_extern_inline;/* Nonzero means do some things the same way PCC does. */extern int flag_traditional;/* Nonzero means to treat bitfields as unsigned unless they say `signed'. */extern int flag_signed_bitfields;/* 3 means write out only virtuals function tables `defined' in this implementation file. 2 means write out only specific virtual function tables and give them (C) public access. 1 means write out virtual function tables and give them (C) public access. 0 means write out virtual function tables and give them (C) static access (default). -1 means declare virtual function tables extern. */extern int write_virtuals;/* True for more efficient but incompatible (not not fully tested) vtable implementation (using thunks). 0 is old behavior; 1 is new behavior. */extern int flag_vtable_thunks;/* INTERFACE_ONLY nonzero means that we are in an "interface" section of the compiler. INTERFACE_UNKNOWN nonzero means we cannot trust the value of INTERFACE_ONLY. If INTERFACE_UNKNOWN is zero and INTERFACE_ONLY is zero, it means that we are responsible for exporting definitions that others might need. */extern int interface_only, interface_unknown;/* Nonzero means we should attempt to elide constructors when possible. */extern int flag_elide_constructors;/* Nonzero means enable obscure ANSI features and disable GNU extensions that might cause ANSI-compliant code to be miscompiled. */extern int flag_ansi;/* Nonzero means recognize and handle ansi-style exception handling constructs. */extern int flag_handle_exceptions;/* Nonzero means recognize and handle signature language constructs. */extern int flag_handle_signatures;/* Nonzero means that member functions defined in class scope are inline by default. */extern int flag_default_inline;/* Nonzero means emit cadillac protocol. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -