Commit 53ebd163 authored by Russ Cox's avatar Russ Cox

more precise error message

package main

func main() {
       var x interface {} = 42;
       switch x := x.(type) {
       case int:
       case foo:
       }
}

before:
x.go:7: non-type case in type switch
x.go:7: inappropriate case for a type switch

now:
x.go:7: foo: undefined

R=ken
OCL=31221
CL=31221
parent a7b4e9f0
......@@ -468,6 +468,7 @@ case:
// done in casebody()
poptodcl();
if(typeswvar != N && typeswvar->right != N) {
int e;
if($2->op == OLITERAL && $2->val.ctype == CTNIL) {
// this version in type switch case nil
$$ = nod(OTYPESW, N, N);
......@@ -481,7 +482,16 @@ case:
addtotop($$);
break;
}
yyerror("non-type case in type switch");
e = nerrors;
gettype($2, N);
// maybe gettype found problems that keep
// e from being valid even outside a type switch.
// only complain if gettype didn't print new errors.
if(nerrors == e)
yyerror("non-type case in type switch");
$$ = nod(OXCASE, N, N);
$$->diag = 1;
break;
}
$$ = nod(OXCASE, $2, N);
}
......
......@@ -326,7 +326,7 @@ loop:
if(n->op != OCASE)
fatal("walkcases: not case %O\n", n->op);
if(n->left != N) {
if(n->left != N && !n->diag) {
setlineno(n);
place = call(n->left, place, arg);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment