int isvectordef(const char *type, relation rel) { definition *def; for (;;) { switch (rel) { case REL_VECTOR: return (!streq(type, "string")); case REL_ARRAY: return (0); case REL_POINTER: return (0); case REL_ALIAS: def = (definition *) FINDVAL(defined, type, typedefed); if (def == NULL) { return (0); } type = def->def.ty.old_type; rel = def->def.ty.rel; } } return (0); }
static int undefined(char *type) { definition *def; def = (definition *) FINDVAL(defined, type, findtype); return (def == NULL); }
static char* fixit(char* type, char* orig) { definition* def; def = (definition*)FINDVAL(defined, type, findit); if (def == NULL || def->def_kind != DEF_TYPEDEF) { return (orig); } switch (def->def.ty.rel) { case REL_VECTOR: return (def->def.ty.old_type); case REL_ALIAS: return (fixit(def->def.ty.old_type, orig)); default: return (orig); } }