diff gen/toir.cpp @ 834:f466f475b654

Added proper "need 'this' to access member foo" errors instead of "variable foo not resolved" for some cases, added FIXME for the old error! Added a bit more information to the runtime's cyclic dependency detection exception.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 09 Dec 2008 01:56:39 +0100
parents a70ddd449e7d
children 14c3319ac1bb
line wrap: on
line diff
--- a/gen/toir.cpp	Sun Dec 07 16:43:20 2008 +0100
+++ b/gen/toir.cpp	Tue Dec 09 01:56:39 2008 +0100
@@ -56,10 +56,18 @@
     LOG_SCOPE;
 
     assert(var);
+
     if (VarDeclaration* vd = var->isVarDeclaration())
     {
         Logger::println("VarDeclaration ' %s ' of type ' %s '", vd->toChars(), vd->type->toChars());
 
+        // this is an error! must be accessed with DotVarExp
+        if (var->needThis())
+        {
+            error("need 'this' to access member %s", toChars());
+            fatal();
+        }
+
         // _arguments
         if (vd->ident == Id::_arguments && p->func()->_arguments)
         {
@@ -144,6 +152,9 @@
             LLValue* val;
 
             if (!vd->ir.isSet() || !(val = vd->ir.getIrValue())) {
+                // FIXME: this error is bad!
+                // We should be VERY careful about adding errors in general, as they have
+                // a tendency to "mask" out the underlying problems ...
                 error("variable %s not resolved", vd->toChars());
                 if (Logger::enabled())
                     Logger::cout() << "unresolved variable had type: " << *DtoType(vd->type) << '\n';