From 13f3149a01b04e4c21196f49cac1e42e6a832408 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 18 Sep 2008 13:32:14 -0700 Subject: [PATCH] more helpful messages for name-related syntax errors. R=ken OCL=15477 CL=15479 --- src/cmd/gc/go.y | 55 +++++++++++++++++++++++++++++++++++++++++++++++ src/cmd/gc/walk.c | 2 +- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y index dedef05d52..071d51b648 100644 --- a/src/cmd/gc/go.y +++ b/src/cmd/gc/go.y @@ -1644,3 +1644,58 @@ hidden_importfield: $$ = $2; $$->fsym = $1; } + +/* + * helpful error messages. + * THIS SECTION MUST BE AT THE END OF THE FILE. + * + * these rules trigger reduce/reduce conflicts in the grammar. + * they are safe because reduce/reduce conflicts are resolved + * in favor of rules appearing earlier in the grammar, and these + * are at the end of the file. + * + * to check whether the rest of the grammar is free of + * reduce/reduce conflicts, comment this section out by + * removing the slash on the next line. + */ +lpack: + LATYPE + { + yyerror("%s is type, not package", $1->name); + YYERROR; + } + +laconst: + LPACK + { + // for LALR(1) reasons, using laconst works here + // but lname does not. even so, the messages make + // more sense saying "var" instead of "const". + yyerror("%s is package, not var", $1->name); + YYERROR; + } +| LATYPE + { + yyerror("%s is type, not var", $1->name); + YYERROR; + } + +latype: + LACONST + { + yyerror("%s is const, not type", $1->name); + YYERROR; + } +| LPACK + { + yyerror("%s is package, not type", $1->name); + YYERROR; + } +| LNAME + { + yyerror("%s is var, not type", $1->name); + YYERROR; + } + +/**/ + diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 7349915b2f..ecdb4dd7f7 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -1420,7 +1420,7 @@ walkdot(Node *n) f = lookdot(n->right, t->method); if(f == T) { - yyerror("undefined DOT reference %N", n->right); + yyerror("undefined DOT %s", n->right->sym->name); return; } -- 2.50.0