tree objc_finish_struct (tree type, tree fieldlist) { gcc_assert (objc_building_struct); objc_building_struct = false; return finish_struct (input_location, type, fieldlist, NULL_TREE, objc_struct_info); }
tree objcp_finish_struct (tree t, tree fieldlist, tree attributes) { tree field, next_field; for (field = fieldlist; field; field = next_field) { next_field = TREE_CHAIN (field); /* insert one field at a time; */ TREE_CHAIN (field) = NULL_TREE; /* otherwise, grokfield croaks. */ finish_member_declaration (field); } t = finish_struct (t, attributes); pop_lang_context (); return t; }
static tree vla_capture_type (tree array_type) { static tree ptr_id, max_id; tree type = xref_tag (record_type, make_anon_name (), ts_current, false); xref_basetypes (type, NULL_TREE); type = begin_class_definition (type); if (!ptr_id) { ptr_id = get_identifier ("ptr"); max_id = get_identifier ("max"); } tree ptrtype = build_pointer_type (TREE_TYPE (array_type)); tree field = build_decl (input_location, FIELD_DECL, ptr_id, ptrtype); finish_member_declaration (field); field = build_decl (input_location, FIELD_DECL, max_id, sizetype); finish_member_declaration (field); return finish_struct (type, NULL_TREE); }
tree objcp_finish_struct (location_t loc ATTRIBUTE_UNUSED, tree t, tree fieldlist, tree attributes) { tree field, next_field; for (field = fieldlist; field; field = next_field) { next_field = TREE_CHAIN (field); /* insert one field at a time; */ TREE_CHAIN (field) = NULL_TREE; /* otherwise, grokfield croaks. */ finish_member_declaration (field); } t = finish_struct (t, attributes); /* If we are inside an @interface and are generating the list of ivars, we need to check for duplicate ivars. */ if (fieldlist) objc_detect_field_duplicates (true); pop_lang_context (); return t; }