make package local the default.
warn about name case not matching export keyword.
R=ken
OCL=22881
CL=22886
dump("gmove", t);
fatal("gmove t %O class %d reg %R", t->op, t->class, t->val.u.reg);
case PEXTERN:
- case PSTATIC:
goto refcount;
break;
case PAUTO:
case PPARAM:
a->type = D_PARAM;
break;
- case PSTATIC:
- a->type = D_STATIC;
- break;
}
break;
t = typ(TFORW);
addvar(n, t, dclcontext);
- if(dcladj)
- dcladj(n->sym);
+ autoexport(n->sym);
}
void
dodclconst(n, e);
addconst(n, e, dclcontext);
- if(dcladj)
- dcladj(n->sym);
+ autoexport(n->sym);
}
/*
found:
n->local = 1;
- if(dcladj)
- dcladj(n->sym);
+ autoexport(n->sym);
return n;
}
addexportsym(s);
}
+int
+exportname(char *s)
+{
+ Rune r;
+
+ if((uchar)s[0] < Runeself)
+ return 'A' <= s[0] && s[0] <= 'Z';
+ chartorune(&r, s);
+ return isupperrune(r);
+}
+
+void
+autoexport(Sym *s)
+{
+ if(s == S)
+ return;
+ if(dclcontext != PEXTERN)
+ return;
+ if(exportname(s->name)) {
+ if(dcladj != exportsym)
+ warn("uppercase missing export");
+ exportsym(s);
+ } else
+ packagesym(s);
+}
+
void
dumpprereq(Type *t)
{
Node *n;
Sym *s;
+ export = exportname(ss->sym->name);
if(export == 2 && !mypackage(ss))
return;
n->val = *v;
n->type = t;
- s = importsym(export, ss, LNAME);
+ s = importsym(export, ss, LACONST);
if(s->oconst != N) {
// TODO: check if already the same.
return;
}
+// fake out export vs upper checks until transition is over
+if(export == 1) dcladj = exportsym;
+
dodclconst(newname(s), n);
+dcladj = nil;
if(debug['e'])
print("import const %S\n", s);
}
uchar addable; // type of addressability - 0 is not addressable
uchar trecur; // to detect loops
uchar etype; // op for OASOP, etype for OTYPE, exclam for export
- uchar class; // PPARAM, PAUTO, PEXTERN, PSTATIC
+ uchar class; // PPARAM, PAUTO, PEXTERN
uchar method; // OCALLMETH name
uchar iota; // OLITERAL made from iota
uchar embedded; // ODCLFIELD embedded type
PEXTERN, // declaration context
PAUTO,
PPARAM,
- PSTATIC,
};
enum
* export.c
*/
void renamepkg(Node*);
+void autoexport(Sym*);
void exportsym(Sym*);
void packagesym(Sym*);
void dumpe(Sym*);
{
$$ = N;
}
-| LEXPORT export_list_r
- {
- $$ = N;
- }
| LEXPORT { dcladj = exportsym; stksize = initstksize; } common_dcl
{
$$ = $3;
dcladj = 0;
initstksize = stksize;
}
-| LPACKAGE { dcladj = packagesym; stksize = initstksize; } common_dcl
+| LPACKAGE { warn("package is gone"); stksize = initstksize; } common_dcl
{
$$ = $3;
- dcladj = 0;
initstksize = stksize;
}
| LEXPORT '(' export_list_r ')'
exportsym($2->nname->sym);
$$ = N;
}
-| LPACKAGE xfndcl
+| LPACKAGE { warn("package is gone"); } xfndcl
{
- if($2 != N && $2->nname != N)
- packagesym($2->nname->sym);
+ if($3 != N && $3->nname != N)
+ packagesym($3->nname->sym);
$$ = N;
}
| ';'
make smoketest
) || exit $?
-(xcd ../usr/gri/gosrc
-make clean
-time make
-# make test
-) || exit $?
+# (xcd ../usr/gri/gosrc
+# make clean
+# time make
+# # make test
+# ) || exit $?
(xcd ../doc/progs
time ./run