From 30f2799f88f6ec028c63cf06a7035fa406bb7af0 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 25 Jun 2009 16:22:46 -0700 Subject: [PATCH] disable "any" except during canned imports. new flag -A enables it during mkbuiltin. avoids mysterious errors in programs that refer to any accidentally. R=ken OCL=30763 CL=30763 --- src/cmd/gc/lex.c | 13 +++++++++++++ src/cmd/gc/mkbuiltin | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index 2cad4310eb..32a9298421 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -9,6 +9,7 @@ #include extern int yychar; +Sym *anysym; #define DBG if(!debug['x']);else print enum @@ -120,6 +121,7 @@ main(int argc, char *argv[]) usage: print("flags:\n"); + // -A is allow use of "any" type, for bootstrapping print(" -I DIR search for packages in DIR\n"); print(" -d print declarations\n"); print(" -e no limit on number of errors printed\n"); @@ -325,6 +327,9 @@ unimportfile(void) { linehist(nil, 0, 0); + if(!debug['A']) + anysym->def = nil; + if(curio.bin != nil) { Bterm(curio.bin); curio.bin = nil; @@ -341,6 +346,9 @@ cannedimports(char *file, char *cp) lineno++; // if sys.6 is included on line 1, linehist(file, 0, 0); // the debugger gets confused + if(!debug['A']) + anysym->def = typenod(types[TANY]); + pushedio = curio; curio.bin = nil; curio.peekc = 0; @@ -1296,6 +1304,11 @@ lexinit(void) types[etype] = t; } s->def = typenod(t); + if(etype == TANY) { + anysym = s; + if(!debug['A']) + s->def = nil; + } continue; } diff --git a/src/cmd/gc/mkbuiltin b/src/cmd/gc/mkbuiltin index ba01cbb457..b99752cc91 100755 --- a/src/cmd/gc/mkbuiltin +++ b/src/cmd/gc/mkbuiltin @@ -15,7 +15,7 @@ gcc -o mkbuiltin1 mkbuiltin1.c rm -f _builtin.c for i in sys unsafe do - $GC $i.go + $GC -A $i.go ./mkbuiltin1 $i >>_builtin.c done -- 2.48.1