]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkInterpreter.cxx
Fixed Window deletion mechanism
[bbtk.git] / kernel / src / bbtkInterpreter.cxx
index e71ff53d0e0a2f0f3f135f8dbed23a87afae0d78..a9b480f86ae3c3a178c5af19d0a2b107704732d4 100644 (file)
@@ -2,8 +2,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkInterpreter.cxx,v $
   Language:  C++
-  Date:      $Date: 2009/04/30 14:31:31 $
-  Version:   $Revision: 1.84 $
+  Date:      $Date: 2009/05/28 08:12:06 $
+  Version:   $Revision: 1.85 $
 =========================================================================*/
 
 /* ---------------------------------------------------------------------
@@ -56,7 +56,7 @@ namespace bbtk
  //=======================================================================
   Interpreter::Pointer Interpreter::New(const std::string& cpp_file) 
   {
-    bbtkDebugMessage("Kernel",9,"Interpreter::New('"<<cpp_file<<"')"<<std::endl);
+    bbtkDebugMessage("kernel",9,"Interpreter::New('"<<cpp_file<<"')"<<std::endl);
     return MakePointer(new Interpreter(cpp_file));
   }
  //=======================================================================
@@ -64,7 +64,7 @@ namespace bbtk
  //=======================================================================
   Interpreter::Pointer Interpreter::New(VirtualExec::Pointer e) 
   {
-    bbtkDebugMessage("Kernel",9,"Interpreter::New(VirtualExec)"<<std::endl);
+    bbtkDebugMessage("kernel",9,"Interpreter::New(VirtualExec)"<<std::endl);
     return MakePointer(new Interpreter(e));
   }
  //=======================================================================
@@ -72,14 +72,18 @@ namespace bbtk
  //=======================================================================
   Interpreter::Interpreter(const std::string& cpp_file) 
   {
+    bbtkDebugMessage("object",2,"==> Interpreter("<<cpp_file<<")"<<std::endl);
     Init(VirtualExec::Pointer(), cpp_file);
+    bbtkDebugMessage("object",2,"<== Interpreter("<<cpp_file<<")"<<std::endl);
   }
   //=======================================================================
 
  //=======================================================================
   Interpreter::Interpreter(VirtualExec::Pointer e) 
   {
+    bbtkDebugMessage("object",2,"==> Interpreter(VirtualExec)"<<std::endl);
     Init(e,"");
+    bbtkDebugMessage("object",2,"<== Interpreter(VirtualExec)"<<std::endl);
   }
   //=======================================================================
 
@@ -371,7 +375,7 @@ namespace bbtk
     mCommandDict[info.keyword] = info;
     */
 
-    bbtkDebugDecTab("Interpreter",9);
+
 
   } 
   //=======================================================================
@@ -384,9 +388,9 @@ namespace bbtk
    */
   Interpreter::~Interpreter()
   {
-    bbtkDebugMessageInc("Interpreter",9,"==> Interpreter::~Interpreter()" <<std::endl);
+    bbtkDebugMessage("object",2,"==> ~Interpreter()" <<std::endl);
     mVirtualExecuter = VirtualExec::Pointer();
-    bbtkDebugMessageInc("Interpreter",9,"<== Interpreter::~Interpreter()" <<std::endl);
+    bbtkDebugMessage("object",2,"<== ~Interpreter()" <<std::endl);
   }
   //=======================================================================
 
@@ -397,7 +401,7 @@ namespace bbtk
                                      const std::string& script_file,
                                      int script_line 
                                      )
-    : Exception("Interpreter",0,message),
+    : Exception("interpreter",0,message),
       mInScriptFile(in_script_file),
       mScriptFile(script_file),
       mScriptLine(script_line)
@@ -616,7 +620,7 @@ namespace bbtk
   //=======================================================================
   Interpreter::ExitStatus Interpreter::InterpretFile( const std::string& filename, bool source )
   {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretFile(\""<<filename<<"\")"<<std::endl);
+    bbtkDebugMessage("interpreter",4,"==> Interpreter::InterpretFile(\""<<filename<<"\")"<<std::endl);
 
     bool exm = mCommandLine;
     mCommandLine = false;
@@ -630,10 +634,10 @@ namespace bbtk
     } 
     CATCH_MACRO;
     
-    bbtkDebugMessage("Interpreter",9,
-                    "EO Interpreter::InterpretFile(\""
+    bbtkDebugMessage("interpreter",4,
+                    "<== Interpreter::InterpretFile(\""
                     <<filename<<"\")"<<std::endl);
-    bbtkDecTab("Interpreter",9);
+
 
     mCommandLine = exm;
     
@@ -646,7 +650,7 @@ namespace bbtk
   Interpreter::ExitStatus 
   Interpreter::InterpretBuffer( std::stringstream* buffer )
   {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretBuffer()"<<std::endl);
+    bbtkDebugMessage("interpreter",4,"==> Interpreter::InterpretBuffer()"<<std::endl);
 
     bool exm = mCommandLine;
     mCommandLine = false;
@@ -661,8 +665,8 @@ namespace bbtk
     CATCH_MACRO;
     
     //    CloseAllFiles();
-    bbtkDebugMessage("Interpreter",9,"EO Interpreter::InterpretBuffer()"<<std::endl);
-    bbtkDecTab("Interpreter",9);
+    bbtkDebugMessage("interpreter",4,"<== Interpreter::InterpretBuffer()"<<std::endl);
+
     
     mCommandLine = exm;
     return mStatus;
@@ -673,8 +677,8 @@ namespace bbtk
   /// Interprets the currently open streams
   Interpreter::ExitStatus Interpreter::InterpretCurrentStreams()
   {
-    bbtkDebugMessageInc("Interpreter",9,
-                       "Interpreter::InterpretCurrentStreams()"<<std::endl);
+    bbtkDebugMessage("interpreter",4,
+                    "==> Interpreter::InterpretCurrentStreams()"<<std::endl);
 
     while (mFile.size()>0) 
       {
@@ -697,6 +701,9 @@ namespace bbtk
        } 
        CloseCurrentFile();
       }
+    bbtkDebugMessage("interpreter",4,
+                    "<== Interpreter::InterpretCurrentStreams()"<<std::endl);
+
     return mStatus;
   }
   //=======================================================================
@@ -705,7 +712,7 @@ namespace bbtk
   /// Runs the interpretation of a command
   Interpreter::ExitStatus Interpreter::InterpretLine( const std::string& line )
   {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretLine('"<<line<<"')"<<std::endl);
+    bbtkDebugMessage("interpreter",5,"==> Interpreter::InterpretLine('"<<line<<"')"<<std::endl);
 
     try 
     {
@@ -716,9 +723,7 @@ namespace bbtk
     CATCH_MACRO;
     
     
-    bbtkDebugMessage("Interpreter",9,"EO Interpreter::InterpretLine()"
-                    <<std::endl);
-    bbtkDecTab("Interpreter",9);
+   bbtkDebugMessage("interpreter",5,"<== Interpreter::InterpretLine('"<<line<<"')"<<std::endl);
     
     return mStatus;
   }
@@ -728,7 +733,8 @@ namespace bbtk
   //=======================================================================  
   void Interpreter::DoInterpretLine( const std::string& line )
   {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::DoInterpretLine(\""<<line<<"\")"<<std::endl);
+    bbtkDebugMessage("interpreter",6,"==> Interpreter::DoInterpretLine(\""
+                    <<line<<"\")"<<std::endl);
     
     std::vector<std::string> words;
     SplitLine(line,words);
@@ -736,15 +742,15 @@ namespace bbtk
     // Empty line
     if (words.size()<1) 
     {
-       bbtkDebugDecTab("Interpreter",9);
+       bbtkDebugDecTab("interpreter",9);
        return;
     }
 
     // Single line comment : # or //
     if ( words[0][0]=='#' || (words[0][0]=='/' && words[0][1]=='/') ) 
     {  
-       bbtkDebugDecTab("Interpreter",9);
-       bbtkMessage("Interpreter",9,"Comment"<<std::endl);
+       bbtkDebugDecTab("interpreter",9);
+       bbtkMessage("interpreter",9,"Comment"<<std::endl);
        return;
     }
 
@@ -752,19 +758,19 @@ namespace bbtk
     
     if (words[0][0]=='/' && words[0][1]=='*') 
     {  
-       bbtkDebugDecTab("Interpreter",9);
-       bbtkMessage("Interpreter",9,"In multiline comment"<<std::endl);
+       bbtkDebugDecTab("interpreter",9);
+       bbtkMessage("interpreter",9,"In multiline comment"<<std::endl);
        mInsideComment = true;
        return;
     }
 
     if (words[0][0]=='*' && words[0][1]=='/') 
     {  
-       bbtkDebugDecTab("Interpreter",9);
-       bbtkMessage("Interpreter",9,"Out multiline comment"<<std::endl);
+       bbtkDebugDecTab("interpreter",9);
+       bbtkMessage("interpreter",9,"Out multiline comment"<<std::endl);
        if ( !mInsideComment ) {
-          bbtkDebugDecTab("Interpreter",9);
-          bbtkMessage("Interpreter",9,"Comment mismatch : '*/' with no matching '/*'"<<std::endl);       
+          bbtkDebugDecTab("interpreter",9);
+          bbtkMessage("interpreter",9,"Comment mismatch : '*/' with no matching '/*'"<<std::endl);       
        }
        mInsideComment = false;
        return;
@@ -772,8 +778,8 @@ namespace bbtk
 
     if (mInsideComment) 
     {  
-       bbtkDebugDecTab("Interpreter",9);
-       bbtkMessage("Interpreter",9,"Multiline Comment"<<std::endl);
+       bbtkDebugDecTab("interpreter",9);
+       bbtkMessage("interpreter",9,"Multiline Comment"<<std::endl);
        return;
     }
 
@@ -781,7 +787,7 @@ namespace bbtk
     CommandInfoType command;
     InterpretCommand(words,command);
 
-    bbtkDebugMessage("Interpreter",9,
+    bbtkDebugMessage("interpreter",9,
                      "Command='"<<command.keyword
                       <<"' code="<<command.code<<std::endl); 
     int level=0;
@@ -1017,8 +1023,10 @@ namespace bbtk
         bbtkInternalError("should not reach here !!!");
    }
 
-   bbtkDecTab("Interpreter",9);
-}
+    bbtkDebugMessage("interpreter",6,"<== Interpreter::DoInterpretLine(\""
+                    <<line<<"\")"<<std::endl);
+    
+  }
   //=======================================================================  
 
 
@@ -1028,7 +1036,7 @@ namespace bbtk
   //=======================================================================
   void Interpreter::SplitLine ( const std::string& str, std::vector<std::string>& tokens)
 {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::SplitLine(\""<<str<<"\")"<<std::endl);
+    bbtkDebugMessage("interpreter",9,"==> Interpreter::SplitLine(\""<<str<<"\")"<<std::endl);
 
     std::string delimiters = "\"";
     std::vector<std::string> quote;
@@ -1042,7 +1050,7 @@ namespace bbtk
        ++i;
        if (i!=quote.end()) 
        {
-        //    bbtkDebugMessage("Interpreter",0,"\""<<*i<<"\""<<std::endl);
+        //    bbtkDebugMessage("interpreter",0,"\""<<*i<<"\""<<std::endl);
           tokens.push_back(*i);
           ++i;
        }
@@ -1050,11 +1058,10 @@ namespace bbtk
 
     for (i=tokens.begin(); i!=tokens.end(); ++i) 
     {
-       bbtkDebugMessage("Interpreter",9,"["<<*i<<"] ");
+      bbtkDebugMessage("interpreter",9,"--["<<*i<<"]"<<std::endl);
     }
-    bbtkDebugMessageCont("Interpreter",9,std::endl);
+    bbtkDebugMessage("interpreter",9,"<== Interpreter::SplitLine(\""<<str<<"\")"<<std::endl);
 
-    bbtkDebugDecTab("Interpreter",9);
  }
   //=======================================================================
 
@@ -1078,7 +1085,7 @@ namespace bbtk
   {
     if (mVirtualExecuter->GetNoExecMode()) return;
 
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::Print(\""<<str<<"\")"<<std::endl);
+    bbtkDebugMessageInc("interpreter",9,"Interpreter::Print(\""<<str<<"\")"<<std::endl);
 
  // TO DO :
  // InterpretLine ("load std")
@@ -1140,7 +1147,7 @@ namespace bbtk
        std::cout << *i;
      }
      std::cout << std::endl;
-     bbtkDebugDecTab("Interpreter",9);
+     bbtkDebugDecTab("interpreter",9);
  }
 */
 
@@ -1162,8 +1169,8 @@ namespace bbtk
   // use ./directory/subdir/scrname.bbs
   //
 
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::SwitchToFile( \""
-                         <<name<<"\")"<<std::endl);
+    bbtkDebugMessage("interpreter",4,"==> Interpreter::SwitchToFile( \""
+                    <<name<<"\")"<<std::endl);
 
     std::vector<std::string> script_paths;
     std::string fullPathScriptName;  // full path script name
@@ -1173,7 +1180,7 @@ namespace bbtk
     // The following is *NOT* a debug time message :
     // It's a user intended message.
     // Please don't remove it.
-    bbtkMessage("Interpreter",1,
+    bbtkMessage("interpreter",1,
         "look for : [" << name
         << "]" << std::endl);
 
@@ -1181,7 +1188,7 @@ namespace bbtk
     std::string upath;
     pkgname = Utilities::ExtractScriptName(name,upath);
 
-    bbtkMessage("Interpreter",3,
+    bbtkMessage("interpreter",3,
                "package name:[" << pkgname
                 << "] path:[" << upath << "]" << std::endl);
     bool fullnameGiven = false; 
@@ -1198,7 +1205,7 @@ namespace bbtk
        // ==== no path provided : look in root bbs path
        if (upath.size()==0)
          {
-           //      bbtkMessage("Interpreter",1,
+           //      bbtkMessage("interpreter",1,
            // LG : add all bbs path
            //  script_paths.push_back(  ConfigurationFile::GetInstance().Get_root_bbs_path() );
            std::vector<std::string>::const_iterator i;
@@ -1262,7 +1269,7 @@ namespace bbtk
        std::vector<std::string>::iterator i;
        for (i=script_paths.begin();i!=script_paths.end();i++)
          {
-           bbtkMessage("Interpreter",1,
+           bbtkMessage("interpreter",1,
                        "--> Looking in '" << *i << "'" << std::endl);
            
            Filenames.clear();
@@ -1278,7 +1285,7 @@ namespace bbtk
                if ( (*j).substr(lgr-4, 4) != ".bbp") continue; 
                
                (*stream) << "include \"" << *j << "\"\n";
-               bbtkMessage("Interpreter",2,"  --> Found '" << *j << "'" << std::endl);
+               bbtkMessage("interpreter",2,"  --> Found '" << *j << "'" << std::endl);
                
                nbBssFiles++;
              } // for (std::vector...
@@ -1287,12 +1294,12 @@ namespace bbtk
        // === Result ...
        if (nbBssFiles==0)
          {
-           bbtkMessage("Interpreter",1,
+           bbtkMessage("interpreter",1,
                        "  --> No .bbp found"<< std::endl);
          } 
        else 
          {
-           bbtkMessage("Interpreter",1,
+           bbtkMessage("interpreter",1,
                        "  --> "<<nbBssFiles<<" .bbp found"<< std::endl);
            SwitchToStream(stream);
          }
@@ -1374,12 +1381,12 @@ namespace bbtk
                                // The following is *NOT* a debug time message :
                                // It's a user intended message.
                                // Please don't remove it.
-                               bbtkMessage("Interpreter",2,
+                               bbtkMessage("interpreter",2,
                          "   [" <<fullPathScriptName <<"] : does not exist" 
                          <<std::endl);
                                continue;  // try next path
                        }
-                       bbtkMessage("Interpreter",2,
+                       bbtkMessage("interpreter",2,
                              "   [" <<fullPathScriptName 
                                  <<"] : found" <<std::endl);
                        foundFile = true;
@@ -1397,13 +1404,13 @@ namespace bbtk
                                        // The following is *NOT* a debug time message :
                                        // It's a user intended message.
                                        // Please don't remove it.
-                                       bbtkMessage("Interpreter",2,
+                                       bbtkMessage("interpreter",2,
                                        "   [" <<tfullPathScriptName <<".bbs/.bbp] : do not exist" 
                                        <<std::endl);
                                        continue;  // try next path
                                }
                        }
-                       bbtkMessage("Interpreter",2,
+                       bbtkMessage("interpreter",2,
                      "   [" <<fullPathScriptName 
                      <<"] : found" <<std::endl);
                        foundFile = true;
@@ -1437,7 +1444,9 @@ namespace bbtk
   //=======================================================================
 void Interpreter::SwitchToStream( std::stringstream* stream )
 {
-    mFile.push_back(stream);
+  bbtkDebugMessage("interpreter",4,"==> Interpreter::SwitchToStream()"
+                  <<std::endl);
+   mFile.push_back(stream);
     std::ostringstream buffer_name;
     bufferNb++;
     buffer_name << "buffer_" ;
@@ -1457,7 +1466,11 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
   void Interpreter::LoadScript( std::string fullPathScriptName,
                                std::string includeScriptName)
   {
-     Utilities::replace( fullPathScriptName , 
+    bbtkDebugMessage("interpreter",4,"==> Interpreter::LoadScript("
+                    <<fullPathScriptName<<")"
+                    <<std::endl);
+
+    Utilities::replace( fullPathScriptName , 
                         INVALID_FILE_SEPARATOR , VALID_FILE_SEPARATOR);
    
      if (find(mFileNameHistory.begin(),
@@ -1476,7 +1489,7 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
         return;
     }
 
-    bbtkMessage("Interpreter",1,"   -->[" << fullPathScriptName 
+    bbtkMessage("interpreter",1,"   -->[" << fullPathScriptName 
                << "] found" << std::endl);
 
     mFile.push_back(s);
@@ -1485,23 +1498,23 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
     mIncludeFileName.push_back(includeScriptName);
     mLine.push_back(0);
 
-       return;
+    return;
   }
   //=======================================================================
 
   //=======================================================================
   void Interpreter::CloseCurrentFile()
   {
-    bbtkDebugMessage("Interpreter",9,"Interpreter::CloseCurrentFile()"
+    bbtkDebugMessage("interpreter",9,"==> Interpreter::CloseCurrentFile()"
                       <<std::endl);
 
     if (mFile.size()==0)
     {
-      bbtkDebugMessage("Interpreter",9," -> no file left open"<<std::endl);
+      bbtkDebugMessage("interpreter",9," -> no file left open"<<std::endl);
       return;
     }
 
-    bbtkDebugMessage("Interpreter",9," Closing file '"<<mFileName.back()<<"'"<<std::endl);
+    bbtkDebugMessage("interpreter",9," Closing file '"<<mFileName.back()<<"'"<<std::endl);
 
     std::ifstream* file = dynamic_cast<std::ifstream*>(mFile.back());
     if (file!=0) file->close();
@@ -1512,10 +1525,10 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
     mIncludeFileName.pop_back();
     mLine.pop_back();
 
-    bbtkDebugMessage("Interpreter",9," Remains "
+    bbtkDebugMessage("interpreter",9," Remains "
                      <<mFile.size()
                      <<" open"<<std::endl);
-    bbtkDebugMessage("Interpreter",9,"EO Interpreter::CloseCurrentFile()"
+    bbtkDebugMessage("interpreter",9,"<== Interpreter::CloseCurrentFile()"
                      <<std::endl);
   }
   //=======================================================================
@@ -1523,14 +1536,14 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
  //=======================================================================
   void Interpreter::CloseAllFiles()
   {
-    bbtkDebugMessage("Interpreter",9,"Interpreter::CloseAllFiles()"
+    bbtkDebugMessage("interpreter",9,"==> Interpreter::CloseAllFiles()"
                       <<std::endl);
 
     while (mFile.size() != 0) 
     {
        CloseCurrentFile();
     }
-    bbtkDebugMessage("Interpreter",9,"EO Interpreter::CloseAllFiles()"
+    bbtkDebugMessage("interpreter",9,"<== Interpreter::CloseAllFiles()"
                       <<std::endl);
   }
   //=======================================================================
@@ -1541,7 +1554,7 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
   void Interpreter::InterpretCommand( const std::vector<std::string>& words,
                                       CommandInfoType& info )
   {
-    bbtkDebugMessageInc("Interpreter",9,"Interpreter::InterpretCommand(...)"<<std::endl);
+    bbtkDebugMessage("interpreter",9,"==> Interpreter::InterpretCommand(...)"<<std::endl);
 
     // searches the command keyword
     CommandDictType::iterator c;
@@ -1559,7 +1572,9 @@ void Interpreter::SwitchToStream( std::stringstream* stream )
     }
 
     info = c->second;
-    bbtkDecTab("Interpreter",9);
+
+    bbtkDebugMessage("interpreter",9,"<== Interpreter::InterpretCommand(...)"<<std::endl);
+
   }
   //=======================================================================
 
@@ -1950,7 +1965,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
   //=======================================================================
   void Interpreter::CommandLineInterpreter()
   {
-    bbtkDebugMessageInc("Interpreter",9,
+    bbtkDebugMessageInc("interpreter",9,
                         "Interpreter::CommandLineInterpreter()"<<std::endl);
 
 #ifdef BBTK_USE_TERMIOS_BASED_PROMPT  
@@ -1981,7 +1996,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
       /*
       catch (QuitException e)
       {
-       bbtkMessage("Interpreter",1,"Interpreter : Quit"<<std::endl);
+       bbtkMessage("interpreter",1,"Interpreter : Quit"<<std::endl);
         again = false;
       }
       */
@@ -2006,7 +2021,7 @@ void Interpreter::Help(const std::vector<std::string>& words)
 
     std::cout << "Good bye !" << std::endl;
 
-    bbtkDebugDecTab("Interpreter",9);
+    bbtkDebugDecTab("interpreter",9);
   }
 
 //=======================================================================
@@ -2108,7 +2123,7 @@ void  Interpreter::NewGUI(const std::string& boxname,
   if (workspace==0)
     {
       delete s;
-      bbtkError("Interpreter::CreateGUI : could not access the executer currently defined complex box");
+      bbtkError("interpreter::CreateGUI : could not access the executer currently defined complex box");
     }