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;
 }