From mboxrd@z Thu Jan 1 00:00:00 1970 MIME-Version: 1.0 In-Reply-To: <02F03B0C-22E7-4D42-888E-468499922AB1@me.com> References: <20151125160347.GN20646@sigint.cs.purdue.edu> <02F03B0C-22E7-4D42-888E-468499922AB1@me.com> Date: Thu, 26 Nov 2015 13:57:11 +1100 Message-ID: From: Prof Brucee To: Fans of the OS Plan 9 from Bell Labs <9fans@9fans.net> Content-Type: multipart/alternative; boundary=001a11c32286433224052568bb3e Subject: Re: [9fans] Undefined Behaviour in C Topicbox-Message-UUID: 7787b456-ead9-11e9-9d60-3106f5b1d025 --001a11c32286433224052568bb3e Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I am still fascinated by the VAX architecture manual which designates as "unpredictable" many things with consequences including machine crash. Pissed that I can't get my vaxen to crash or burst into flames. On 26/11/2015 1:46 PM, "Brantley Coile" wrote: > Bruce's law: undefined !=3D stupid > > Sent from my iPad > > On Nov 25, 2015, at 9:04 PM, Prof Brucee wrote: > > gcc is indeed a very sad tome. The mmap of 0 is disgusting. I like kenc. > It just works. My behaviour this afternoon will be undefined but not as > stupid as that of some programmers. > On 26/11/2015 5:43 AM, "Brantley Coile" wrote: > >> Align it to column 7 and it looks like all the code I saw when I started= . >> >> iPhone email >> >> On Nov 25, 2015, at 12:13 PM, Ryan Gonzalez wrote: >> >> Neither! It's what happens when you run sed 's/^\s*//' on your whole cod= e >> base, yielding results like (from cmd/yacc.c): >> >> >> void >> setup(int argc, char *argv[]) >> { >> long c, t; >> int i, j, fd, lev, ty, ytab, *p; >> int vflag, dflag, stem; >> char actnm[8], *stemc, *s, dirbuf[128]; >> Biobuf *fout; >> >> ytab =3D 0; >> vflag =3D 0; >> dflag =3D 0; >> stem =3D 0; >> stemc =3D "y"; >> foutput =3D 0; >> fdefine =3D 0; >> fdebug =3D 0; >> ARGBEGIN{ >> case 'v': >> case 'V': >> vflag++; >> break; >> case 'D': >> yydebug =3D ARGF(); >> break; >> case 'a': >> yyarg =3D 1; >> break; >> case 'd': >> dflag++; >> break; >> case 'l': >> yyline =3D 0; >> break; >> case 'o': >> ytab++; >> ytabc =3D ARGF(); >> break; >> case 's': >> stem++; >> stemc =3D ARGF(); >> break; >> case 'S': >> parser =3D PARSERS; >> break; >> default: >> error("illegal option: %c", ARGC()); >> }ARGEND >> openup(stemc, dflag, vflag, ytab, ytabc); >> fout =3D dflag?fdefine:ftable; >> if(yyarg){ >> Bprint(ftable, "#define\tYYARG\t1\n\n"); >> } >> if((fd =3D mkstemp(ttempname)) >=3D 0){ >> tempname =3D ttempname; >> ftemp =3D Bfdopen(fd, OWRITE); >> } >> if((fd =3D mkstemp(tactname)) >=3D 0){ >> actname =3D tactname; >> faction =3D Bfdopen(fd, OWRITE); >> } >> if(ftemp =3D=3D 0 || faction =3D=3D 0) >> error("cannot open temp file"); >> if(argc < 1) >> error("no input file"); >> infile =3D argv[0]; >> if(infile[0] !=3D '/' && getwd(dirbuf, sizeof dirbuf)!=3Dnil){ >> i =3D strlen(infile)+1+strlen(dirbuf)+1+10; >> s =3D malloc(i); >> if(s !=3D nil){ >> snprint(s, i, "%s/%s", dirbuf, infile); >> cleanname(s); >> infile =3D s; >> } >> } >> finput =3D Bopen(infile, OREAD); >> if(finput =3D=3D 0) >> error("cannot open '%s'", argv[0]); >> cnamp =3D cnames; >> >> defin(0, "$end"); >> extval =3D PRIVATE; /* tokens start in unicode 'private use' */ >> defin(0, "error"); >> defin(1, "$accept"); >> defin(0, "$unk"); >> mem =3D mem0; >> i =3D 0; >> >> for(t =3D gettok(); t !=3D MARK && t !=3D ENDFILE;) >> switch(t) { >> case ';': >> t =3D gettok(); >> break; >> >> case START: >> if(gettok() !=3D IDENTIFIER) >> error("bad %%start construction"); >> start =3D chfind(1, tokname); >> t =3D gettok(); >> continue; >> >> case TYPEDEF: >> if(gettok() !=3D TYPENAME) >> error("bad syntax in %%type"); >> ty =3D numbval; >> for(;;) { >> t =3D gettok(); >> switch(t) { >> case IDENTIFIER: >> if((t=3Dchfind(1, tokname)) < NTBASE) { >> j =3D TYPE(toklev[t]); >> if(j !=3D 0 && j !=3D ty) >> error("type redeclaration of token %s", >> tokset[t].name); >> else >> SETTYPE(toklev[t], ty); >> } else { >> j =3D nontrst[t-NTBASE].value; >> if(j !=3D 0 && j !=3D ty) >> error("type redeclaration of nonterminal %s", >> nontrst[t-NTBASE].name ); >> else >> nontrst[t-NTBASE].value =3D ty; >> } >> case ',': >> continue; >> case ';': >> t =3D gettok(); >> default: >> break; >> } >> break; >> } >> continue; >> >> case UNION: >> /* copy the union declaration to the output */ >> cpyunion(); >> t =3D gettok(); >> continue; >> >> case LEFT: >> case BINARY: >> case RIGHT: >> i++; >> >> case TERM: >> /* nonzero means new prec. and assoc. */ >> lev =3D t-TERM; >> ty =3D 0; >> >> /* get identifiers so defined */ >> t =3D gettok(); >> >> /* there is a type defined */ >> if(t =3D=3D TYPENAME) { >> ty =3D numbval; >> t =3D gettok(); >> } >> for(;;) { >> switch(t) { >> case ',': >> t =3D gettok(); >> continue; >> >> case ';': >> break; >> >> case IDENTIFIER: >> j =3D chfind(0, tokname); >> if(j >=3D NTBASE) >> error("%s defined earlier as nonterminal", tokname); >> if(lev) { >> if(ASSOC(toklev[j])) >> error("redeclaration of precedence of %s", tokname); >> SETASC(toklev[j], lev); >> SETPLEV(toklev[j], i); >> } >> if(ty) { >> if(TYPE(toklev[j])) >> error("redeclaration of type of %s", tokname); >> SETTYPE(toklev[j],ty); >> } >> t =3D gettok(); >> if(t =3D=3D NUMBER) { >> tokset[j].value =3D numbval; >> if(j < ndefout && j > 3) >> error("please define type number of %s earlier", >> tokset[j].name); >> t =3D gettok(); >> } >> continue; >> } >> break; >> } >> continue; >> >> case LCURLY: >> defout(0); >> cpycode(); >> t =3D gettok(); >> continue; >> >> default: >> error("syntax error"); >> } >> if(t =3D=3D ENDFILE) >> error("unexpected EOF before %%"); >> >> /* t is MARK */ >> if(!yyarg) >> Bprint(ftable, "extern int yyerrflag;\n"); >> Bprint(ftable, "#ifndef YYMAXDEPTH\n"); >> Bprint(ftable, "#define YYMAXDEPTH 150\n"); >> Bprint(ftable, "#endif\n" ); >> if(!ntypes) { >> Bprint(ftable, "#ifndef YYSTYPE\n"); >> Bprint(ftable, "#define YYSTYPE int\n"); >> Bprint(ftable, "#endif\n"); >> } >> if(!yyarg){ >> Bprint(ftable, "YYSTYPE yylval;\n"); >> Bprint(ftable, "YYSTYPE yyval;\n"); >> }else{ >> if(dflag) >> Bprint(ftable, "#include \"%s.%s\"\n\n", stemc, FILED); >> Bprint(fout, "struct Yyarg {\n"); >> Bprint(fout, "\tint\tyynerrs;\n"); >> Bprint(fout, "\tint\tyyerrflag;\n"); >> Bprint(fout, "\tvoid*\targ;\n"); >> Bprint(fout, "\tYYSTYPE\tyyval;\n"); >> Bprint(fout, "\tYYSTYPE\tyylval;\n"); >> Bprint(fout, "};\n\n"); >> } >> prdptr[0] =3D mem; >> >> /* added production */ >> *mem++ =3D NTBASE; >> >> /* if start is 0, we will overwrite with the lhs of the first rule */ >> *mem++ =3D start; >> *mem++ =3D 1; >> *mem++ =3D 0; >> prdptr[1] =3D mem; >> while((t=3Dgettok()) =3D=3D LCURLY) >> cpycode(); >> if(t !=3D IDENTCOLON) >> error("bad syntax on first rule"); >> >> if(!start) >> prdptr[0][1] =3D chfind(1, tokname); >> >> /* read rules */ >> while(t !=3D MARK && t !=3D ENDFILE) { >> /* process a rule */ >> rlines[nprod] =3D lineno; >> if(t =3D=3D '|') >> *mem++ =3D *prdptr[nprod-1]; >> else >> if(t =3D=3D IDENTCOLON) { >> *mem =3D chfind(1, tokname); >> if(*mem < NTBASE) >> error("token illegal on LHS of grammar rule"); >> mem++; >> } else >> error("illegal rule: missing semicolon or | ?"); >> /* read rule body */ >> t =3D gettok(); >> >> more_rule: >> while(t =3D=3D IDENTIFIER) { >> *mem =3D chfind(1, tokname); >> if(*mem < NTBASE) >> levprd[nprod] =3D toklev[*mem]; >> mem++; >> t =3D gettok(); >> } >> if(t =3D=3D PREC) { >> if(gettok() !=3D IDENTIFIER) >> error("illegal %%prec syntax"); >> j =3D chfind(2, tokname); >> if(j >=3D NTBASE) >> error("nonterminal %s illegal after %%prec", >> nontrst[j-NTBASE].name); >> levprd[nprod] =3D toklev[j]; >> t =3D gettok(); >> } >> if(t =3D=3D '=3D') { >> levprd[nprod] |=3D ACTFLAG; >> Bprint(faction, "\ncase %d:", nprod); >> cpyact(mem-prdptr[nprod]-1); >> Bprint(faction, " break;"); >> if((t=3Dgettok()) =3D=3D IDENTIFIER) { >> >> /* action within rule... */ >> sprint(actnm, "$$%d", nprod); >> >> /* make it a nonterminal */ >> j =3D chfind(1, actnm); >> >> /* >> * the current rule will become rule number nprod+1 >> * move the contents down, and make room for the null >> */ >> for(p =3D mem; p >=3D prdptr[nprod]; --p) >> p[2] =3D *p; >> mem +=3D 2; >> >> /* enter null production for action */ >> p =3D prdptr[nprod]; >> *p++ =3D j; >> *p++ =3D -nprod; >> >> /* update the production information */ >> levprd[nprod+1] =3D levprd[nprod] & ~ACTFLAG; >> levprd[nprod] =3D ACTFLAG; >> if(++nprod >=3D NPROD) >> error("more than %d rules", NPROD); >> prdptr[nprod] =3D p; >> >> /* make the action appear in the original rule */ >> *mem++ =3D j; >> >> /* get some more of the rule */ >> goto more_rule; >> } >> } >> >> while(t =3D=3D ';') >> t =3D gettok(); >> *mem++ =3D -nprod; >> >> /* check that default action is reasonable */ >> if(ntypes && !(levprd[nprod]&ACTFLAG) && >> nontrst[*prdptr[nprod]-NTBASE].value) { >> >> /* no explicit action, LHS has value */ >> int tempty; >> >> tempty =3D prdptr[nprod][1]; >> if(tempty < 0) >> error("must return a value, since LHS has a type"); >> else >> if(tempty >=3D NTBASE) >> tempty =3D nontrst[tempty-NTBASE].value; >> else >> tempty =3D TYPE(toklev[tempty]); >> if(tempty !=3D nontrst[*prdptr[nprod]-NTBASE].value) >> error("default action causes potential type clash"); >> } >> nprod++; >> if(nprod >=3D NPROD) >> error("more than %d rules", NPROD); >> prdptr[nprod] =3D mem; >> levprd[nprod] =3D 0; >> } >> >> /* end of all rules */ >> defout(1); >> >> finact(); >> if(t =3D=3D MARK) { >> Bprint(ftable, "\n"); >> if(yyline) >> Bprint(ftable, "#line\t%d\t\"%s\"\n", lineno, infile); >> while((c=3DBgetrune(finput)) !=3D Beof) >> Bputrune(ftable, c); >> } >> Bterm(finput); >> } >> >> >> On Wed, Nov 25, 2015 at 10:03 AM, wrote: >> >>> On Wed, Nov 25, 2015 at 09:25:55AM -0500, Brantley Coile wrote: >>> > unindented consequences >>> >>> Is that a class of Python bugs or an awesome name for a Nerdcore band? >>> >>> >> >> >> -- >> Ryan >> [ERROR]: Your autotools build scripts are 200 lines longer than your >> program. Something=E2=80=99s wrong. >> http://kirbyfan64.github.io/ >> >> >> --001a11c32286433224052568bb3e Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

I am still fascinated by the VAX architecture manual which d= esignates as "unpredictable" many things with consequences=C2=A0 = including machine crash. Pissed that I can't get my vaxen to crash or b= urst into flames.

On 26/11/2015 1:46 PM, "Brantley Coile"= ; <brantleycoile@me.com> = wrote:
Bruce's law: undefined !=3D stupid

Sent from my iPad

On Nov 25, 2015, at 9:04 PM, Prof Brucee <prof.brucee@gmail.com> wro= te:

gcc is indee= d a very sad tome. The mmap of 0 is disgusting. I like kenc. It just works.= My behaviour this afternoon will be undefined but not as stupid as that of= some programmers.

On 26/11/2015 5:43 AM, "Brantley Coile"= ; <brantleycoi= le@me.com> wrote:
Align it to column 7 and it looks like all the code I saw when I star= ted.=C2=A0

iPhone email

On Nov 25, 2015, at 12:= 13 PM, Ryan Gonzalez <rymg19@gmail.com> wrote:

=
Neither! It's what happens when you run sed '= s/^\s*//' on your whole code base, yielding results like (from cmd/yacc= .c):


void
setup(int argc, = char *argv[])
{
long c, t;
int i, j, fd, lev,= ty, ytab, *p;
int vflag, dflag, stem;
char actnm[8], *= stemc, *s, dirbuf[128];
Biobuf *fout;

yt= ab =3D 0;
vflag =3D 0;
dflag =3D 0;
stem =3D = 0;
stemc =3D "y";
foutput =3D 0;
fd= efine =3D 0;
fdebug =3D 0;
ARGBEGIN{
case = 9;v':
case 'V':
vflag++;
break;
case 'D':
yydebug =3D ARGF();
break;
case 'a':
yyarg =3D 1;
break;
case 'd':
dflag++;
break;
case '= ;l':
yyline =3D 0;
break;
case 'o'= ;:
ytab++;
ytabc =3D ARGF();
break;
case 's':
stem++;
stemc =3D ARGF();
= break;
case 'S':
parser =3D PARSERS;
= break;
default:
error("illegal option: %c", A= RGC());
}ARGEND
openup(stemc, dflag, vflag, ytab, ytabc= );
fout =3D dflag?fdefine:ftable;
if(yyarg){
= Bprint(ftable, "#define\tYYARG\t1\n\n");
}
if= ((fd =3D mkstemp(ttempname)) >=3D 0){
tempname =3D ttempname;<= /div>
ftemp =3D Bfdopen(fd, OWRITE);
}
if((fd =3D m= kstemp(tactname)) >=3D 0){
actname =3D tactname;
fac= tion =3D Bfdopen(fd, OWRITE);
}
if(ftemp =3D=3D 0 || fa= ction =3D=3D 0)
error("cannot open temp file");
if(argc < 1)
error("no input file");
in= file =3D argv[0];
if(infile[0] !=3D '/' && getwd(= dirbuf, sizeof dirbuf)!=3Dnil){
i =3D strlen(infile)+1+strlen(dir= buf)+1+10;
s =3D malloc(i);
if(s !=3D nil){
s= nprint(s, i, "%s/%s", dirbuf, infile);
cleanname(s);
infile =3D s;
}
}
finput =3D Bopen(in= file, OREAD);
if(finput =3D=3D 0)
error("cannot op= en '%s'", argv[0]);
cnamp =3D cnames;

=
defin(0, "$end");
extval =3D PRIVATE; /* tokens start in unicode 'priva= te use' */
defin(0, "error");
defin(1, &q= uot;$accept");
defin(0, "$unk");
mem =3D= mem0;
i =3D 0;

for(t =3D gettok(); t != =3D MARK && t !=3D ENDFILE;)
switch(t) {
case &= #39;;':
t =3D gettok();
break;

=
case START:
if(gettok() !=3D IDENTIFIER)
error(&qu= ot;bad %%start construction");
start =3D chfind(1, tokname);=
t =3D gettok();
continue;

cas= e TYPEDEF:
if(gettok() !=3D TYPENAME)
error("bad s= yntax in %%type");
ty =3D numbval;
for(;;) {
=
t =3D gettok();
switch(t) {
case IDENTIFIER:
=
if((t=3Dchfind(1, tokname)) < NTBASE) {
j =3D TYPE(toklev= [t]);
if(j !=3D 0 && j !=3D ty)
error("typ= e redeclaration of token %s",
tokset[t].name);
els= e
SETTYPE(toklev[t], ty);
} else {
j =3D nont= rst[t-NTBASE].value;
if(j !=3D 0 && j !=3D ty)
= error("type redeclaration of nonterminal %s",
nontrst[t= -NTBASE].name );
else
nontrst[t-NTBASE].value =3D ty;
}
case ',':
continue;
case &= #39;;':
t =3D gettok();
default:
break;
}
break;
}
continue;

<= /div>
case UNION:
/* copy the union declaration to the output= */
cpyunion();
t =3D gettok();
continue;

case LEFT:
case BINARY:
case RIGH= T:
i++;

case TERM:
/* nonzero = means new prec. and assoc. */
lev =3D t-TERM;
ty =3D 0;=

/* get identifiers so defined */
t =3D = gettok();

/* there is a type defined */
= if(t =3D=3D TYPENAME) {
ty =3D numbval;
t =3D gettok();=
}
for(;;) {
switch(t) {
case '= ,':
t =3D gettok();
continue;

<= div>case ';':
break;

case IDENTI= FIER:
j =3D chfind(0, tokname);
if(j >=3D NTBASE)
error("%s defined earlier as nonterminal", tokname);
if(lev) {
if(ASSOC(toklev[j]))
error("redecl= aration of precedence of %s", tokname);
SETASC(toklev[j], le= v);
SETPLEV(toklev[j], i);
}
if(ty) {
if(TYPE(toklev[j]))
error("redeclaration of type of %s&qu= ot;, tokname);
SETTYPE(toklev[j],ty);
}
t =3D= gettok();
if(t =3D=3D NUMBER) {
tokset[j].value =3D nu= mbval;
if(j < ndefout && j > 3)
error(&qu= ot;please define type number of %s earlier",
tokset[j].name)= ;
t =3D gettok();
}
continue;
}
break;
}
continue;

case= LCURLY:
defout(0);
cpycode();
t =3D gettok()= ;
continue;

default:
error(&qu= ot;syntax error");
}
if(t =3D=3D ENDFILE)
error("unexpected EOF before %%");

/* = t is MARK */
if(!yyarg)
Bprint(ftable, "extern int yyerrflag;\n");
Bprint(ftable, "#ifndef YYMAXDEPTH\n");
B= print(ftable, "#define YYM= AXDEPTH 150\n");
Bprint(ftable, "#endif\n" );
if(!ntypes) {
B= print(ftable, "#ifndef YYS= TYPE\n");
Bprint(ftable, "#define YYSTYPE = int\n");
Bprint(ftable, "#endif\n");
}
if(!yyarg){
Bprint(ftable, "YYSTYPE yylval;\n");
Bprint(ftable, &qu= ot;YYSTYPE yyval;\n");
}else{
if(dflag)
Bprint(ftable, "#include \= "%s.%s\"\n\n", stemc, FILED);
Bprint(fout, "s= truct Yyarg {\n");
Bprint(fout, "\tint\tyynerrs;\n"= ;);
Bprint(fout, "\tint\tyyerrflag;\n");
Bpri= nt(fout, "\tvoid*\targ;\n");
Bprint(fout, "\tYYSTY= PE\tyyval;\n");
Bprint(fout, "\tYYSTYPE\tyylval;\n"= ;);
Bprint(fout, "};\n\n");
}
prdpt= r[0] =3D mem;

/* added production */
*me= m++ =3D NTBASE;

/* if start is 0, we will overwrit= e with the lhs of the first rule */
*mem++ =3D start;
*= mem++ =3D 1;
*mem++ =3D 0;
prdptr[1] =3D mem;
while((t=3Dgettok()) =3D=3D LCURLY)
cpycode();
if(t != =3D IDENTCOLON)
error("bad syntax on first rule");

if(!start)
prdptr[0][1] =3D chfind(1, toknam= e);

/* read rules */
while(t !=3D MARK &= amp;& t !=3D ENDFILE) {
/* process a rule */
rlines= [nprod] =3D lineno;
if(t =3D=3D '|')
*mem++ =3D= *prdptr[nprod-1];
else
if(t =3D=3D IDENTCOLON) {
=
*mem =3D chfind(1, tokname);
if(*mem < NTBASE)
= error("token illegal on LHS of grammar rule");
mem++;
} else
error("illegal rule: missing semicolon or | = ?");
/* read rule body */
t =3D gettok();

more_rule:
while(t =3D=3D IDENTIFIER) {
*mem =3D chfind(1, tokname);
if(*mem < NTBASE)
lev= prd[nprod] =3D toklev[*mem];
mem++;
t =3D gettok();
}
if(t =3D=3D PREC) {
if(gettok() !=3D IDENTIFIE= R)
error("illegal %%prec syntax");
j =3D chfi= nd(2, tokname);
if(j >=3D NTBASE)
error("nonter= minal %s illegal after %%prec",
nontrst[j-NTBASE].name);
levprd[nprod] =3D toklev[j];
t =3D gettok();
}
if(t =3D=3D '=3D') {
levprd[nprod] |=3D ACTFLAG;=
Bprint(faction, "\ncase %d:", nprod);
cpyact= (mem-prdptr[nprod]-1);
Bprint(faction, " break;");
if((t=3Dgettok()) =3D=3D IDENTIFIER) {

/* ac= tion within rule... */
sprint(actnm, "$$%d", nprod);

/* make it a nonterminal */
j =3D chfind(1= , actnm);

/*
* the current rule will bec= ome rule number nprod+1
* move the contents down, and make room f= or the null
*/
for(p =3D mem; p >=3D prdptr[nprod]; = --p)
p[2] =3D *p;
mem +=3D 2;

= /* enter null production for action */
p =3D prdptr[nprod];
=
*p++ =3D j;
*p++ =3D -nprod;

/* upd= ate the production information */
levprd[nprod+1] =3D levprd[npro= d] & ~ACTFLAG;
levprd[nprod] =3D ACTFLAG;
if(++npro= d >=3D NPROD)
error("more than %d rules", NPROD);
prdptr[nprod] =3D p;

/* make the action ap= pear in the original rule */
*mem++ =3D j;

/* get some more of the rule */
goto more_rule;
}
}

while(t =3D=3D ';')
t = =3D gettok();
*mem++ =3D -nprod;

/* chec= k that default action is reasonable */
if(ntypes && !(lev= prd[nprod]&ACTFLAG) && nontrst[*prdptr[nprod]-NTBASE].value) {<= /div>

/* no explicit action, LHS has value */
= int tempty;

tempty =3D prdptr[nprod][1];
if(tempty < 0)
error("must return a value, since LHS has= a type");
else
if(tempty >=3D NTBASE)
tempty =3D nontrst[tempty-NTBASE].value;
else
tempty = =3D TYPE(toklev[tempty]);
if(tempty !=3D nontrst[*prdptr[nprod]-N= TBASE].value)
error("default action causes potential type cl= ash");
}
nprod++;
if(nprod >=3D NPROD= )
error("more than %d rules", NPROD);
prdptr[= nprod] =3D mem;
levprd[nprod] =3D 0;
}

/* end of all rules */
defout(1);

finact();
if(t =3D=3D MARK) {
Bprint(ftable, "\= n");
if(yyline)
Bprint(ftable, "#line\t%d\t\&= quot;%s\"\n", lineno, infile);
while((c=3DBgetrune(finp= ut)) !=3D Beof)
Bputrune(ftable, c);
}
Bterm(= finput);
}


On Wed, Nov 25, 2015 at 10:03 AM, <plannine@sigint.cs.purdue.edu> wrote:
On Wed, Nov 25, 2015 at 09:25:55AM -0500, Brantley C= oile wrote:
> unindented consequences

Is that a class of Python bugs or an awesome name for a Nerdcore band?




--
Ryan
[ERROR]: Your autotools build scripts are 200 lines longe= r than your program. Something=E2=80=99s wrong.
--001a11c32286433224052568bb3e--