+ if (dst->structs) {
+ size_t i = 0;
+ struct psi_decl_struct *str;
+
+ while (psi_plist_get(dst->structs, i++, &str)) {
+ size_t nlen = strlen(str->name);
+ size_t slen = sizeof("psi\\SIZEOF_STRUCT_");
+ size_t alen = sizeof("psi\\ALIGNOF_STRUCT_");
+ char *nptr = str->name, *sname, *aname;
+ struct psi_const *cnst;
+ struct psi_const_type *ctyp;
+ struct psi_impl_def_val *cval;
+
+ sname = malloc(slen + nlen + 1);
+ strcpy(sname, "psi\\SIZEOF_STRUCT_");
+ aname = malloc(alen + nlen + 1);
+ strcpy(aname, "psi\\ALIGNOF_STRUCT_");
+
+ nptr = str->name;
+ while (*nptr) {
+ size_t off = nptr - str->name;
+ sname[slen - 1 + off] = aname[alen - 1 + off] = toupper(*nptr++);
+ }
+ sname[slen - 1 + nlen] = aname[alen - 1 + nlen] = 0;
+
+ ctyp = psi_const_type_init(PSI_T_INT, "int");
+ cval = psi_impl_def_val_init(PSI_T_INT, NULL);
+ cval->ival.zend.lval = str->size;
+ cnst = psi_const_init(ctyp, sname, cval);
+ dst->consts = psi_plist_add(dst->consts, &cnst);
+ free(sname);
+
+ ctyp = psi_const_type_init(PSI_T_INT, "int");
+ cval = psi_impl_def_val_init(PSI_T_INT, NULL);
+ cval->ival.zend.lval = str->align;
+ cnst = psi_const_init(ctyp, aname, cval);
+ dst->consts = psi_plist_add(dst->consts, &cnst);
+ free(aname);
+ }
+ }
+