shithub: mc

Download patch

ref: c40f319b0a288ac9021513083c4abcb261d2822c
parent: 077b43497cb528d529f0d7380b0ebd58e46b0674
author: Ori Bernstein <[email protected]>
date: Fri Jun 15 15:20:35 EDT 2012

Better errors for unknown names.

--- a/parse/infer.c
+++ b/parse/infer.c
@@ -142,8 +142,9 @@
 {
     char *s;
     switch (n->type) {
-        case Nexpr:     s = opstr(exprop(n)); break;
-        default:        s = nodestr(n->type); break;
+        case Nexpr:     s = opstr(exprop(n)); 	break;
+        case Nname:     s = namestr(n); 	break;
+        default:        s = nodestr(n->type); 	break;
     }
     return s;
 }
@@ -352,7 +353,7 @@
         case Ovar:      /* a:@a -> @a */
             s = getdcl(curstab(), args[0]);
             if (!s)
-                fatal(n->line, "Undeclared var %s", declname(args[0]));
+                fatal(n->line, "Undeclared var %s", ctxstr(args[0]));
             else
                 settype(n, s->type);
             n->expr.did = s->id;
--- a/parse/parse.h
+++ b/parse/parse.h
@@ -336,6 +336,7 @@
 Node *mkslice(int line, Node *base, Node *off);
 
 /* node util functions */
+char *namestr(Node *name);
 char *declname(Node *n);
 Type *decltype(Node *n);
 Type *exprtype(Node *n);
@@ -344,7 +345,6 @@
 void setns(Node *n, char *name);
 Op exprop(Node *n);
 Node **aggrmemb(Type *t, size_t *n);
-char *namestr(Node *name);
 
 /* usefiles */
 void readuse(Node *use, Stab *into);