gcc编译器中某种声明指示c_declarator结构

详细说明: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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44285036/article/details/107718618