if (!fill_iid(&id, iid)) { IDL_tree_error(state->tree, "cannot parse IID %s\n", iid); return FALSE;
if (holder->iid) { if (!xpidl_parse_iid(&id, holder->iid)) { IDL_tree_error(state->tree, "cannot parse IID %s\n", holder->iid); return FALSE; } } else { memset(&id, 0, sizeof(id));
fill_ide_table(gpointer key, gpointer value, gpointer user_data){    TreeState *state = user_data;    NewInterfaceHolder *holder = (NewInterfaceHolder *) value;    struct nsID id;    XPTInterfaceDirectoryEntry *ide;    char *iid;    XPT_ASSERT(holder);    iid = holder->iid ? holder->iid : "";#ifdef DEBUG_shaver_ifaces    fprintf(stderr, "filling %s\n", holder->full_name);#endif    if (!fill_iid(&id, iid)) {        IDL_tree_error(state->tree, "cannot parse IID %s\n", iid);        return FALSE;    }    ide = &(HEADER(state)->interface_directory[IFACES(state)]);    if (!XPT_FillInterfaceDirectoryEntry(ide, &id, holder->name,                                         holder->name_space, NULL)) {        IDL_tree_error(state->tree, "INTERNAL: XPT_FillIDE failed for %s\n",                       holder->full_name);        return FALSE;    }    IFACES(state)++;    DeleteNewInterfaceHolder(holder);    return TRUE;}