static void emit_union(definition * def) { declaration *dflt; case_list *cl; declaration *cs; char *object; char *format = "&objp->%s_u.%s"; char *briefformat = "&objp->u.%s"; print_stat(&def->def.un.enum_decl); f_print(fout, "\tswitch (objp->%s) {\n", def->def.un.enum_decl.name); for (cl = def->def.un.cases; cl != NULL; cl = cl->next) { cs = &cl->case_decl; f_print(fout, "\tcase %s:\n", cl->case_name); if (!streq(cs->type, "void")) { object = alloc(strlen(def->def_name) + strlen(format) + strlen(cs->name) + 1); if (brief_flag) s_print(object, briefformat, cs->name); else s_print(object, format, def->def_name, cs->name); print_ifstat(2, cs->prefix, cs->type, cs->rel, cs->array_max, object, cs->name); free(object); } f_print(fout, "\t\tbreak;\n"); } dflt = def->def.un.default_decl; if (dflt != NULL) { if (!streq(dflt->type, "void")) { f_print(fout, "\tdefault:\n"); object = alloc(strlen(def->def_name) + strlen(format) + strlen(dflt->name) + 1); s_print(object, format, def->def_name, dflt->name); print_ifstat(2, dflt->prefix, dflt->type, dflt->rel, dflt->array_max, object, dflt->name); free(object); f_print(fout, "\t\tbreak;\n"); } } else { f_print(fout, "\tdefault:\n"); f_print(fout, "\t\treturn (FALSE);\n"); } f_print(fout, "\t}\n"); }
static void emit_typedef(definition * def) { char *prefix = def->def.ty.old_prefix; char *type = def->def.ty.old_type; char *amax = def->def.ty.array_max; relation rel = def->def.ty.rel; print_ifstat(1, prefix, type, rel, amax, "objp", def->def_name); }
static void print_cout(declaration * dec) { if (cflag) { space(); f_print(fout, "bool_t\n"); f_print(fout, "xdr_%s(XDR *xdrs, %s *objp)\n", dec->name, dec->name); f_print(fout, "{\n"); print_ifstat(1, dec->prefix, dec->type, dec->rel, dec->array_max, "objp", dec->name); print_trailer(); } }
static void print_stat(declaration * dec) { char *prefix = dec->prefix; char *type = dec->type; char *amax = dec->array_max; relation rel = dec->rel; char name[256]; if (isvectordef(type, rel)) { s_print(name, "objp->%s", dec->name); } else { s_print(name, "&objp->%s", dec->name); } print_ifstat(1, prefix, type, rel, amax, name, dec->name); }
static void emit_union (definition * def) { declaration *dflt; case_list *cl; declaration *cs; char *object; #if 1 char *vecformat = "objp->RPC_UNION_NAME(%s).%s"; char *format = "&objp->RPC_UNION_NAME(%s).%s"; #else char *vecformat = "objp->u.%s"; char *format = "&objp->u.%s"; #endif print_stat (1, &def->def.un.enum_decl); f_print (fout, "\tswitch (objp->%s) {\n", def->def.un.enum_decl.name); for (cl = def->def.un.cases; cl != NULL; cl = cl->next) { f_print (fout, "\tcase %s:\n", cl->case_name); if (cl->contflag == 1) /* a continued case statement */ continue; cs = &cl->case_decl; if (!streq (cs->type, "void")) { object = alloc (strlen (def->def_name) + strlen (format) + strlen (cs->name) + 1); #if 1 if (isvectordef (cs->type, cs->rel)) { s_print (object, vecformat, def->def_name, cs->name); } else { s_print (object, format, def->def_name, cs->name); } #else if (isvectordef (cs->type, cs->rel)) s_print (object, vecformat, cs->name); else s_print (object, format, cs->name); #endif print_ifstat (2, cs->prefix, cs->type, cs->rel, cs->array_max, object, cs->name); free (object); } f_print (fout, "\t\tbreak;\n"); } dflt = def->def.un.default_decl; if (dflt != NULL) { if (!streq (dflt->type, "void")) { f_print (fout, "\tdefault:\n"); object = alloc (strlen (def->def_name) + strlen (format) + strlen (dflt->name) + 1); #if 1 if (isvectordef (dflt->type, dflt->rel)) { s_print (object, vecformat, def->def_name, dflt->name); } else { s_print (object, format, def->def_name, dflt->name); } #else if (isvectordef (dflt->type, dflt->rel)) s_print (object, vecformat, dflt->name); else s_print (object, format, dflt->name); #endif print_ifstat (2, dflt->prefix, dflt->type, dflt->rel, dflt->array_max, object, dflt->name); free (object); f_print (fout, "\t\tbreak;\n"); } } else { f_print (fout, "\tdefault:\n"); f_print (fout, "\t\treturn (FALSE);\n"); } f_print (fout, "\t}\n"); }