详细说明:gcc编译器中某种声明指示c_declarator结构
//
// 某种声明指示c_declarator
//
// 如, 此时类型或后来声明的属性, 变量名标识符, 星号建指针类型,数组尺寸建数组类型,入参列表建函数类型
//
//
/* A declarator. */
struct c_declarator {
// xyg: ----------------
//
// 声明采用 变量名标识符cdk_id,tree_id_name
// 声明采用 数组名标识符cdk_id,tree_id_name
// 声明采用 函数名标识符cdk_id,tree_id_name
// 声明采用 匿名标识符cdk_id,NULL_TREE
//
// 声明采用 数组尺寸建数组类型cdk_array【[rid_qual4_ATTR_t static 尺寸] 或 [rid_qual4_ATTR_t */空/尺寸]】
//
// 声明采用 入参列表建函数类型cdk_function【(ATTR_bf 空) 或 (ATTR_bf ...) 或 (ATTR_bf 入参定义 ATTR_af, ...)】
//
// 声明采用 星号建指针类型cdk_pointer【* type_qual id_name】
//
// 属性插入 此时类型或后来声明的属性cdk_attrs
//
/* The kind of declarator. */
enum c_declarator_kind kind;
//
// 输入源位置编号input_location
//
location_t id_loc; /* Currently only set for cdk_id, cdk_array. */
// xyg: ----------------
//
// 某种声明指示的级链c_declarator
//
//
// xyg: ----------------
//
// 得到 (某种声明指示c_declarator的)上级声明指示c_declarator
//
// 请见: grokdeclarator(),
//
//
// xyg: ----------------
//
// 记录 (名标识符的)上级声明指示c_declarator, 且为空
//
// 总设置: build_id_declarator() <-- c_parser_direct_declarator(),
//
//
// 记录 (数组尺寸建数组类型的)上级声明指示c_declarator【数组名标识符cdk_id,tree_id_name, 数组尺寸建数组类型cdk_array, 匿名标识符cdk_id,NULL_TREE, 星号建指针类型cdk_pointer】
//
// 总设置: set_array_declarator_inner() <-- c_parser_direct_declarator_inner(),
//
//
// 记录 (入参列表建函数类型的)上级声明指示c_declarator【函数名标识符cdk_id,tree_id_name, 匿名标识符cdk_id,NULL_TREE, 星号建指针类型cdk_pointer】
//
// 总设置: build_function_declarator() <-- c_parser_direct_declarator_inner(),
//
//
// 记录 (星号建指针类型的)上级声明指示c_declarator【此时类型或后来声明的属性cdk_attrs, 名标识符cdk_id,tree_id_name, 数组尺寸建数组类型cdk_array, 入参列表建函数类型cdk_function】
//
// 总设置: make_pointer_declarator() <-- c_parser_declarator(),
//
//
// 记录 (后来声明的属性的)上级声明指示c_declarator【名标识符cdk_id,tree_id_name, 数组尺寸建数组类型cdk_array, 入参列表建函数类型cdk_function】
//
// 总设置: build_attrs_declarator(),
//
/* Except for cdk_id, the contained declarator. For cdk_id, NULL. */
struct c_declarator *declarator;
union {
// xyg: ----------------
//
// 记录 变量名标识符tree_id_name
// 记录 数组名标识符tree_id_name
// 记录 函数名标识符tree_id_name
//
// 记录 匿名标识符NULL_TREE
//
// 总设置: build_id_declarator() <-- c_parser_direct_declarator(),
//
/* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract
declarator. */
tree id;
// xyg: ----------------
//
// 记录 入参定义列表c_arg_info: 系列入参tree_chain,系列入参数据类型tree_list,系列其它声明tree_chain,系列定义的枚举结构联合ENUM_REC_UNI
//
//
// 总设置: build_function_declarator() <-- c_parser_direct_declarator_inner(),
//
// 统计: get_parm_info() <-- c_parser_parms_list_declarator(),
//
/* For functions. */
struct c_arg_info *arg_info;
// xyg: ----------------
//
// 总设置: build_array_declarator() <-- c_parser_direct_declarator_inner(),
//
/* For arrays. */
struct {
//
// 记录 数组整型尺寸tree【[rid_qual4_ATTR_t static 尺寸] 或 [rid_qual4_ATTR_t 尺寸]】
//
// declarator->u.array.dimen.int_cst.int_cst
//
/* The array dimension, or NULL for [] and [*]. */
tree dimen;
//
// 记录 入参定义时建数组类型中的修饰类rid关键字标号rid_qual4 ---- 用于 (数组类型ARR_TYPE入参PARM_DECL的)数据类型==数组单元指针type_unit_ptr
//
/* The qualifiers inside []. */
int quals;
//
// 记录 入参定义时建数组类型中的属性指定项ATTR_list ---- 无用
//
/* The attributes (currently ignored) inside []. */
tree attrs;
//
// 标记 入参定义时建数组尺寸static【[rid_qual4_ATTR_t static 尺寸]】
//
/* Whether [static] was used. */
BOOL_BITFIELD static_p : 1;
//
// 标记 入参定义时建数组尺寸*【[rid_qual4_ATTR_t *]】
//
/* Whether [*] was used. */
BOOL_BITFIELD vla_unspec_p : 1;
} array;
// xyg: ----------------
//
// 记录 星号建指针类型中的修饰类rid关键字标号rid_qual4 ---- 用于 指针类型PTR_TYPE
//
// 总设置: make_pointer_declarator() <-- c_parser_declarator(),
//
// 处理: grokdeclarator(),
//
/* For pointers, the qualifiers on the pointer type. */
int pointer_quals;
// xyg: ----------------
//
// 记录 此时类型或后来声明的属性指定项ATTR_list
//
// 识别 后来声明的属性cdk_attrs 根据 上级声明指示c_declarator
//
// 总设置: build_attrs_declarator(),
//
// 处理: grokdeclarator(),
//
/* For attributes. */
tree attrs;
} u;
}