s = t->sym;
if(s == S)
- fatal("nodtypesig: no sym for type");
+ fatal("signame: no sym for type");
+
+ // mark it as used so signature will be generated
+ if(s->local == 1)
+ s->local = 2;
snprint(namebuf, sizeof(namebuf), "%s_%s", e, s->name);
s = pkglookup(namebuf, s->package);
void
dumpsignatures(void)
{
- Dcl *d;
+ Dcl *d, *x;
Type *t, *f;
Sym *s1, *s;
int et, o, wi, ot;
Prog *p;
char *sp;
+ // copy externdcl list to signatlist
+ for(d=externdcl; d!=D; d=d->forw) {
+ if(d->op != OTYPE)
+ continue;
+
+ t = d->dtype;
+ if(t == T)
+ continue;
+
+ et = t->etype;
+ if(et != TSTRUCT && et != TINTER)
+ continue;
+
+ s = d->dsym;
+ if(s == S)
+ continue;
+
+ if(s->name[0] == '_')
+ continue;
+
+ // if it was imported
+ if(s->local == 0)
+ continue;
+
+// until i can figure out
+// when/if it is used, do them all
+// // if not used and not exported
+// if(s->local == 1 && !s->export)
+// continue;
+
+ x = mal(sizeof(*d));
+ x->op = OTYPE;
+ x->dsym = s;
+ x->dtype = t;
+ x->forw = signatlist;
+ signatlist = x;
+ }
+
/*
* put all the names into a linked
* list so that it may be generated in sorted order.
wi = types[TINT32]->width;
- for(d=externdcl; d!=D; d=d->forw) {
+ for(d=signatlist; d!=D; d=d->forw) {
if(d->op != OTYPE)
continue;
}
if(exportadj)
exportsym(n->sym);
+ n->sym->local = 1;
addtyp(n, t, dclcontext);
}
uchar undef; // a diagnostic has been generated
uchar export; // marked as export
- uchar exported; // has been exported
+ uchar exported; // exported
uchar sym; // huffman encoding in object file
+ uchar local; // created in this file
char* opackage; // original package name
char* package; // package name
EXTERN Dcl* paramdcl;
EXTERN Dcl* externdcl;
EXTERN Dcl* exportlist;
+EXTERN Dcl* signatlist;
EXTERN int dclcontext; // PEXTERN/PAUTO
EXTERN int importflag;
EXTERN int inimportsys;
goto shape;
// mapassign1(hmap *map[any-1]any-2, key any-3, val any-4);
-
-//dump("assign1", n);
if(n->left->op != OINDEX)
goto shape;
assign2:
// mapassign2(hmap *map[any]any, key any, val any, pres bool);
-
-//dump("assign2", n);
if(n->left->op != OINDEX)
goto shape;