mirror of
https://github.com/golang/go.git
synced 2025-05-28 10:51:22 +00:00
better error; clean up lineno in a few places
wreck.mtv=; cat x.go package main var x = string.Split() wreck.mtv=; 6g x.go x.go:2: type string used as expression x.go:2: undefined DOT Split on string x.go:3: illegal types for operand: AS undefined wreck.mtv=; BUG=1938751 R=ken OCL=30766 CL=30766
This commit is contained in:
parent
4bce6d455f
commit
70a273476b
@ -84,7 +84,7 @@ convlit1(Node *n, Type *t, int explicit)
|
||||
return;
|
||||
}
|
||||
// avoided repeated calculations, errors
|
||||
if(cvttype(n->type, t)) {
|
||||
if(cvttype(n->type, t) == 1) {
|
||||
n->type = t;
|
||||
return;
|
||||
}
|
||||
@ -603,8 +603,7 @@ ret:
|
||||
n->val = v;
|
||||
|
||||
// check range.
|
||||
lno = lineno;
|
||||
lineno = n->lineno;
|
||||
lno = setlineno(n);
|
||||
overflow(v, n->type);
|
||||
lineno = lno;
|
||||
|
||||
|
@ -106,7 +106,14 @@ setlineno(Node *n)
|
||||
int32 lno;
|
||||
|
||||
lno = lineno;
|
||||
if(n != N && n->op != ONAME) {
|
||||
if(n != N)
|
||||
switch(n->op) {
|
||||
case ONAME:
|
||||
case OTYPE:
|
||||
case OPACK:
|
||||
case OLITERAL:
|
||||
break;
|
||||
default:
|
||||
lineno = n->lineno;
|
||||
if(lineno == 0) {
|
||||
if(debug['K'])
|
||||
|
@ -123,15 +123,7 @@ loop:
|
||||
return;
|
||||
|
||||
more = N;
|
||||
switch(n->op) {
|
||||
case ONAME: // one only; lineno isn't right for right now
|
||||
case OPACK:
|
||||
case OTYPE:
|
||||
case OLITERAL:
|
||||
break;
|
||||
default:
|
||||
lineno = n->lineno;
|
||||
}
|
||||
setlineno(n);
|
||||
|
||||
switch(n->op) {
|
||||
|
||||
@ -253,6 +245,13 @@ loop:
|
||||
fatal("walktype: switch 1 unknown op %N", n);
|
||||
goto ret;
|
||||
|
||||
case OTYPE:
|
||||
if(!n->diag) {
|
||||
n->diag = 1;
|
||||
yyerror("type %T used as expression", n->type);
|
||||
}
|
||||
goto ret;
|
||||
|
||||
case ODCL:
|
||||
goto ret;
|
||||
|
||||
@ -1799,8 +1798,12 @@ walkdot(Node *n)
|
||||
n->op = ODOTPTR;
|
||||
}
|
||||
|
||||
if(!lookdot(n, t))
|
||||
yyerror("undefined DOT %S on %T", n->right->sym, n->left->type);
|
||||
if(!lookdot(n, t)) {
|
||||
if(!n->diag) {
|
||||
n->diag = 1;
|
||||
yyerror("undefined DOT %S on %T", n->right->sym, n->left->type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Node*
|
||||
|
Loading…
x
Reference in New Issue
Block a user