decl.c.2
上传用户:upcnvip
上传日期:2007-01-06
资源大小:474k
文件大小:48k
- return 0;
- }
- if (args) {
- if (mp1->kind == MK_PARAM && mp1->othername)
- tp1 = mp1->rectype;
- if (mp2->kind == MK_PARAM && mp2->othername)
- tp2 = mp2->rectype;
- }
- if (tp1 == tp2)
- return 1;
- switch (mixtypes) {
- case 0:
- return 0;
- case 1:
- return (findbasetype(tp1, flags) == findbasetype(tp2, flags));
- default:
- if (findbasetype(tp1, flags) != findbasetype(tp2, flags))
- return 0;
- while (tp1->kind == TK_POINTER && tp1->basetype)
- tp1 = tp1->basetype;
- while (tp2->kind == TK_POINTER && tp2->basetype)
- tp2 = tp2->basetype;
- return (tp1 == tp2);
- }
- }
- void declarefiles(fnames)
- Strlist *fnames;
- {
- Meaning *mp;
- char *cp;
- while (fnames) {
- mp = (Meaning *)fnames->value;
- if (mp->kind == MK_VAR || mp->kind == MK_FIELD) {
- if (mp->namedfile) {
- output(storageclassname(varstorageclass(mp)));
- output(format_ss("%s %s", charname,
- format_s(name_FNVAR, fnames->s)));
- output(format_s("[%s];n", *name_FNSIZE ? name_FNSIZE : "80"));
- }
- if (mp->bufferedfile && *declbufname) {
- cp = format_s("%s", storageclassname(varstorageclass(mp)));
- if (*cp && isspace(cp[strlen(cp)-1]))
- cp[strlen(cp)-1] = 0;
- if (*cp || !*declbufncname) {
- output(declbufname);
- output("(");
- output(fnames->s);
- output(",");
- output(cp);
- } else {
- output(declbufncname);
- output("(");
- output(fnames->s);
- }
- output(",");
- out_type(mp->type->basetype->basetype, 1);
- output(");n");
- }
- }
- strlist_eat(&fnames);
- }
- }
- char *variantfieldname(num)
- int num;
- {
- if (num >= 0)
- return format_d("U%d", num);
- else
- return format_d("UM%d", -num);
- }
- int record_is_union(tp)
- Type *tp;
- {
- return (tp->fbase && tp->fbase->kind == MK_VARIANT);
- }
- void outfieldlist(mp)
- Meaning *mp;
- {
- Meaning *mp0;
- int num, only_union, empty, saveindent, saveindent2;
- Strlist *fnames, *fn;
- if (!mp) {
- output("int empty_struct; /* Pascal record was empty */n");
- return;
- }
- only_union = (mp && mp->kind == MK_VARIANT);
- fnames = NULL;
- while (mp && mp->kind == MK_FIELD) {
- flushcomments(&mp->comments, CMT_PRE, -1);
- output(storageclassname(varstorageclass(mp) & 0x10));
- outbasetype(mp->type, 0);
- output("