use correct lineno in nod even if yacc has looked ahead.
makes lineno correct for statements without semicolons.
R=ken
OCL=19454
CL=19454
diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h
index 54c47d0..c5e35a1 100644
--- a/src/cmd/gc/go.h
+++ b/src/cmd/gc/go.h
@@ -419,6 +419,7 @@
EXTERN Io curio;
EXTERN Io pushedio;
EXTERN int32 lineno;
+EXTERN int32 prevlineno;
EXTERN char* pathname;
EXTERN Hist* hist;
EXTERN Hist* ehist;
diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c
index 99a8d79..d305fb6 100644
--- a/src/cmd/gc/lex.c
+++ b/src/cmd/gc/lex.c
@@ -300,6 +300,8 @@
int escflag;
Sym *s;
+ prevlineno = lineno;
+
l0:
c = getc();
if(isspace(c))
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index e1bdde5..851f174 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -269,6 +269,7 @@
return d;
}
+extern int yychar;
Node*
nod(int op, Node *nleft, Node *nright)
{
@@ -278,7 +279,10 @@
n->op = op;
n->left = nleft;
n->right = nright;
- n->lineno = lineno;
+ if(yychar <= 0) // no lookahead
+ n->lineno = lineno;
+ else
+ n->lineno = prevlineno;
return n;
}