- for (predef_struct = &psi_predef_structs[0]; predef_struct->type_tag; ++predef_struct) {
- struct psi_predef_struct *member;
- struct psi_plist *dargs = psi_plist_init((psi_plist_dtor) psi_decl_arg_free);
- struct psi_decl_struct *dstruct = psi_decl_struct_init(predef_struct->var_name, dargs);
-
- dstruct->size = predef_struct->size;
- dstruct->align = predef_struct->offset;
- for (member = &predef_struct[1]; member->type_tag; ++member) {
- struct psi_decl_type *type;
- struct psi_decl_var *dvar;
- struct psi_decl_arg *darg;
-
- type = psi_decl_type_init(member->type_tag, member->type_name);
- dvar = psi_decl_var_init(member->var_name, member->pointer_level, member->array_size);
- darg = psi_decl_arg_init(type, dvar);
- darg->layout = psi_layout_init(member->offset, member->size);
- dstruct->args = psi_plist_add(dstruct->args, &darg);
- }
-
- T.structs = psi_plist_add(T.structs, &dstruct);
- predef_struct = member;