Index: tol/btol/bgrammar/oprimp.cpp
===================================================================
--- tol/btol/bgrammar/oprimp.cpp	(revision 1737efac98d271f05dd5bdfe770c743f81aa776a)
+++ tol/btol/bgrammar/oprimp.cpp	(revision 990c4f3b383d9433abe308eca89da9d251c5b45a)
@@ -539,4 +539,5 @@
   str=NULL;
   cls = NULL;
+  rest = NULL;
   if((tok->TokenType() == TYPE))
   {
@@ -568,8 +569,9 @@
   else if((tok->TokenType()==BINARY)&&(tok->Name()=="::"))
   {
+  //BText expr = BParser::Unparse(left);
+  //Std(BText("Unparse(left)=\n")<<BParser::Unparse(left)+"\n");
     List* nbLst = Tree::treLeft(left);
-    BToken* nbTok = BParser::treToken(nbLst);
-    const BText& nbName = nbTok->Name();
-    BUserNameBlock* unb = (BUserNameBlock*)GraNameBlock()->FindOperand(nbName,false);
+  //Std(BText("Unparse(nbLst)=\n")<<BParser::Unparse(nbLst)+"\n");
+    BUserNameBlock* unb = (BUserNameBlock*)GraNameBlock()->LeftEvaluateTree(nbLst);
     if(unb)
     {
@@ -672,17 +674,38 @@
     {
       TRACE_SHOW_MEDIUM(fun," 6");
-      result = BGrammar::FindLocal(name);
-      TRACE_SHOW_MEDIUM(fun," 7");
-      if(result && (result->Level()!=level)) { result = NIL; }
+
+      if(!BEqualOperator::CreatingName().HasName())
+      {
+        result = BNameBlock::LocalMember(name); 
+        if(result && result->NameBlock())
+        {
+          Warning(I2("Local variable","La variable local")+
+                  " "+gra->Name()+" "+name+" "+
+                  I2("hides published NameBlock member",
+                     "oculta el miembro de NameBlock publicado")+
+                  " "+result->FullName());
+          BUserFunction::ShowCallStack();
+          result = NULL; 
+        }
+      }
+      if(!result) 
+      { 
+        result = BGrammar::FindLocal(name); 
+        TRACE_SHOW_MEDIUM(fun," 7");
+        if(result && (result->Level()!=level)) { result = NIL; }
+      }
     } 
-    else result = gra->FindVariable(name);
-    if(result && result->NameBlock())
-    {
-      Warning(I2("Global variable","La variable global")+
-              " "+gra->Name()+" "+name+" "+
-              I2("hides published NameBlock member",
-                 "oculta el miembro de NameBlock publicado")+
-              " "+result->FullName());
-      result = NULL;
+    else 
+    {
+      result = gra->FindVariable(name);
+      if(result && result->NameBlock())
+      {
+        Warning(I2("Global variable","La variable global")+
+                " "+gra->Name()+" "+name+" "+
+                I2("hides published NameBlock member",
+                   "oculta el miembro de NameBlock publicado")+
+                " "+result->FullName());
+        result = NULL;
+      }
     }
     if(result) // send an error messages
@@ -691,5 +714,5 @@
       BText functionName = "";
       BText functionPath = "";
-      BText sentence = result->Description();
+      BText sentence = result->FullName() + " " +result->Description();
 #     ifdef WINDOWS
       path += BText("\n")+SysPath(path);
@@ -711,5 +734,5 @@
                 I2("' already defined as ",
                    "' ya definida como \"") + sentence + "\"\n");
-        } 
+          } 
         else 
         {
@@ -844,8 +867,10 @@
     {
       currentFullName_ = currentFullName_ + "::" +name;
+    //Std(BText("\nTRACE currentFullName_ <- ")<<currentFullName_+"\n");
     }
     else
     {
       currentFullName_ = name;
+    //Std(BText("\nTRACE currentFullName_ <- ")<<currentFullName_+"\n");
     }
     creatingClass_ = cls;
@@ -853,12 +878,5 @@
   if(!rest && gra) 
   {
-    if(defInst)
-    {
-	    result = CreateObject(left, gra, name);
-    }
-    else
-    {
-	    result = CreateObject(left, gra, name);
-    }
+    result = CreateObject(left, gra, name);
     if(str && result)
     {
@@ -887,5 +905,6 @@
   if(isNameBlock) 
   { 
-    currentFullName_ = currentFatherName_;
+    currentFullName_ = oldFullName;
+  //Std(BText("\nTRACE currentFullName_ <- ")<<currentFullName_+"\n");
     creatingName_    = oldName; 
     creatingClass_   = oldClass;
@@ -1425,7 +1444,9 @@
     BStruct*  str  = NIL;
     BClass*   cls  = NIL;
+    bool carIsList = dec->car()->IsListClass();
+    List* decLst = carIsList?Tree::treNode((List*) dec):(List*)dec;
     BGrammar* gra  = GetLeft
     (
-      NIL, Tree::treNode(dec),
+      NIL, decLst,
       names_[n], rest, str, cls
     );
