remove watches from scilab debugger
[scilab.git] / scilab / modules / ast / includes / ast / deserializervisitor.hxx
index a5b9657..68d1d03 100644 (file)
@@ -3,11 +3,14 @@
  *  Copyright (C) 2012-2013 - OCAMLPRO INRIA - Fabrice LE FESSANT
  *  Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
  *
- *  This file must be used under the terms of the CeCILL.
- *  This source file is licensed as described in the file COPYING, which
- *  you should have received as part of this distribution.  The terms
- *  are also available at
- *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ *
+ * This file is hereby licensed under the terms of the GNU GPL v2.0,
+ * pursuant to article 5.3.4 of the CeCILL v.2.1.
+ * This file was originally licensed under the terms of the CeCILL v2.1,
+ * and continues to be available under such terms.
+ * For more information, see the COPYING file which you should have received
+ * along with this program.
  *
  */
 #ifndef __DESERIALIZER_HXX__
@@ -67,10 +70,10 @@ private :
         return loc;
     }
 
-    std::list<Exp*>* get_exps(void)
+    exps_t* get_exps(void)
     {
         int nitems = get_uint32();
-        std::list<Exp*> *list = new std::list<Exp*>;
+        exps_t *list = new exps_t;
         for (int i = 0; i < nitems; i++)
         {
             Exp* exp = get_exp();
@@ -79,28 +82,26 @@ private :
         return list;
     }
 
-    std::list<MatrixLineExp*>* get_MatrixLines(void)
+    exps_t* get_MatrixLines(void)
     {
         int nitems = get_uint32();
-        std::list<MatrixLineExp*> *list = new std::list<MatrixLineExp*>;
+        exps_t* list = new exps_t;
         for (int i = 0; i < nitems; i++)
         {
             Location line_loc = get_location();
-            std::list<Exp*>* columns = get_exps();
-            MatrixLineExp* line = new MatrixLineExp(line_loc, * columns);
+            MatrixLineExp* line = new MatrixLineExp(line_loc, *get_exps());
             list->push_back(line);
         }
         return list;
     }
 
-    std::list<Var*>* get_vars(void)
+    ast::exps_t* get_vars(void)
     {
         int nitems = get_uint32();
-        std::list<Var*> *list = new  std::list<Var*>;
+        ast::exps_t* list = new ast::exps_t;
         for (int i = 0; i < nitems; i++)
         {
-            Var* var = static_cast<Var*>(get_exp());
-            list->push_back(var);
+            list->push_back(get_exp());
         }
         return list;
     }
@@ -170,26 +171,12 @@ private :
                 return  OpExp::logicalShortCutAnd;
             case 27 :
                 return  OpExp::logicalShortCutOr;
-        }
-        std::cerr << "Unknown get_OpExp_Oper code " << code << std::endl;
-        exit(2);
-    }
 
-    IntExp::Prec get_IntExp_Prec(void)
-    {
-        int code = get_uint8();
-        switch (code)
-        {
-            case 1:
-                return IntExp::_8_;
-            case 2:
-                return IntExp::_16_;
-            case 3:
-                return IntExp::_32_;
-            case 4:
-                return IntExp::_64_;
+            case 28 :
+               return  OpExp::unaryPlus;
+
         }
-        std::cerr << "Unknown get_IntExp_Prec code " << code << std::endl;
+        std::cerr << "Unknown get_OpExp_Oper code " << code << std::endl;
         exit(2);
     }
 
@@ -210,10 +197,13 @@ private :
     std::wstring* get_wstring(void)
     {
         unsigned int size = get_uint32();
-        wchar_t* ss = (wchar_t*)buf;
-        std::wstring* s = new std::wstring(ss, size / sizeof(wchar_t));
+        char* ss = (char*)buf;
+        std::string s(ss, size / sizeof(char));
+        wchar_t* ws = to_wide_string(s.data());
+        std::wstring* w = new std::wstring(ws);
+        FREE(ws);
         buf += size;
-        return s;
+        return w;
     }
 
     symbol::Symbol* get_Symbol(void)
@@ -236,6 +226,7 @@ private :
         symbol::Symbol *name = get_Symbol();
         Exp *init = get_exp();
         VarDec* vardec = new VarDec(vardec_location, *name, *init);
+        delete name;
         return vardec;
     }
 
@@ -246,20 +237,13 @@ private :
         int code = get_uint8();
         size_t nodeNumber = get_uint64();
         Location loc = get_location();
-        bool is_verbose = get_bool();
-        int is_break = get_bool();
-        int is_breakable = get_bool();
-        int is_return = get_bool();
-        int is_returnable = get_bool();
-        int is_continue = get_bool();
-        int is_continuable = get_bool();
-
+        bool isVerbose = get_bool();
 
         switch (code)
         {
             case 1:
             {
-                std::list<Exp *>* l_body = get_exps();
+                exps_t* l_body = get_exps();
                 exp = new SeqExp(loc, *l_body);
                 break;
             }
@@ -296,8 +280,9 @@ private :
             }
             case 9:
             {
-                symbol::Symbol *name = get_Symbol();
-                exp = new SimpleVar(loc, *name);
+                symbol::Symbol* sym = get_Symbol();
+                exp = new SimpleVar(loc, *sym);
+                delete sym;
                 break;
             }
             case 10:
@@ -312,8 +297,7 @@ private :
             }
             case 12:
             {
-                std::list<Var*>* vars = get_vars();
-                exp = new ArrayListVar(loc, *vars);
+                exp = new ArrayListVar(loc, *get_vars());
                 break;
             }
             case 13:
@@ -325,14 +309,14 @@ private :
             }
             case 14:
             {
-                bool has_else = get_bool();
+                bool hasElse = get_bool();
                 Exp* test = get_exp();
                 Exp* _then = get_exp();
                 IfExp* ifexp;
-                if ( has_else )
+                if (hasElse)
                 {
                     Exp* _else = get_exp();
-                    ifexp = new IfExp(loc, *test, *_then, *_else);
+                    ifexp = new IfExp(loc, *test, *_then->getAs<SeqExp>(), *_else->getAs<SeqExp>());
                 }
                 else
                 {
@@ -345,8 +329,8 @@ private :
             {
                 Location try_location = get_location();
                 Location catch_location = get_location();
-                std::list<Exp *>* try_exps = get_exps();
-                std::list<Exp *>* catch_exps = get_exps();
+                exps_t* try_exps = get_exps();
+                exps_t* catch_exps = get_exps();
                 SeqExp *tryexp = new SeqExp(try_location, *try_exps);
                 SeqExp *catchexp = new SeqExp(catch_location, *catch_exps);
                 exp = new TryCatchExp(loc, *tryexp, *catchexp);
@@ -356,7 +340,7 @@ private :
             {
                 Exp* test = get_exp();
                 Exp* body = get_exp();
-                exp = new WhileExp(loc, *test, *body);
+                exp = new WhileExp(loc, *test, *body->getAs<SeqExp>());
                 break;
             }
             case 17:
@@ -364,7 +348,7 @@ private :
                 Location vardec_location = get_location();
                 VarDec* vardec = get_VarDec(vardec_location);
                 Exp* body = get_exp();
-                exp = new ForExp(loc, *vardec, *body);
+                exp = new ForExp(loc, *vardec, *body->getAs<SeqExp>());
                 break;
             }
             case 18:
@@ -398,21 +382,21 @@ private :
                 if ( has_default )
                 {
                     Location default_case_location = get_location();
-                    std::list<Exp *>* default_case_exps = get_exps();
+                    exps_t* default_case_exps = get_exps();
                     default_case = new SeqExp(default_case_location,
                                               *default_case_exps);
                 }
                 Exp* select = get_exp();
 
                 int nitems = get_uint32();
-                std::list<CaseExp*> *cases = new  std::list<CaseExp*>;
+                exps_t* cases = new  exps_t;
                 for (int i = 0; i < nitems; i++)
                 {
 
                     Location case_location = get_location();
                     Location body_location = get_location();
                     Exp* test = get_exp();
-                    std::list<Exp *>* body_exps = get_exps();
+                    exps_t* body_exps = get_exps();
                     SeqExp *body = new SeqExp(body_location,  *body_exps);
 
                     CaseExp* _case = new CaseExp(case_location, *test, *body);
@@ -438,19 +422,19 @@ private :
             */
             case 23:
             {
-                std::list<MatrixLineExp *>* lines = get_MatrixLines();
+                ast::exps_t* lines = get_MatrixLines();
                 exp = new CellExp(loc, *lines);
                 break;
             }
             case 24:
             {
-                std::list<Exp *>* exps = get_exps();
+                exps_t* exps = get_exps();
                 exp = new ArrayListExp(loc, *exps);
                 break;
             }
             case 25:
             {
-                std::list<Exp *>* exps = get_exps();
+                exps_t* exps = get_exps();
                 exp = new AssignListExp(loc, *exps);
                 break;
             }
@@ -478,11 +462,12 @@ private :
                 Location args_loc = get_location();
                 Location returns_loc = get_location();
                 Exp* body = get_exp();
-                std::list <Var*>* args_list = get_vars();
-                std::list <Var*>* returns_list = get_vars();
+                exps_t* args_list = get_vars();
+                exps_t* returns_list = get_vars();
                 ArrayListVar *args = new ArrayListVar(args_loc, *args_list);
                 ArrayListVar *returns = new ArrayListVar(returns_loc, *returns_list);
-                exp = new FunctionDec(loc, *name, *args, *returns, *body);
+                exp = new FunctionDec(loc, *name, *args, *returns, *body->getAs<SeqExp>());
+                delete name;
                 break;
             }
             case 30:
@@ -490,7 +475,7 @@ private :
                 Exp* _start = get_exp();
                 Exp* _step = get_exp();
                 Exp* _end = get_exp();
-                exp = new ListExp(loc, *_start, *_step, *_end);
+                exp = new ListExp(loc, *_start, *_step, *_end, true);
                 break;
             }
             case 31:
@@ -521,14 +506,14 @@ private :
             }
             case 34:
             {
-                std::list<MatrixLineExp *>* lines = get_MatrixLines();
+                exps_t* lines = get_MatrixLines();
                 exp = new MatrixExp(loc, *lines);
                 break;
             }
             case 35:
             {
                 Exp* name = get_exp();
-                std::list<Exp *> * args = get_exps();
+                exps_t* args = get_exps();
                 exp = new CallExp(loc, *name, *args);
                 break;
             }
@@ -541,7 +526,7 @@ private :
             case 37:
             {
                 Exp* name = get_exp();
-                std::list<Exp *>* args = get_exps();
+                exps_t* args = get_exps();
                 exp = new CellCallExp(loc, *name, *args);
                 break;
             }
@@ -550,35 +535,10 @@ private :
                 exit(2);
         }
 
-        exp->set_verbose(is_verbose);
-        if (is_break)
-        {
-            exp->break_set();
-        }
-        if (is_breakable)
-        {
-            exp->breakable_set();
-        }
-        if (is_return)
-        {
-            exp->return_set();
-        }
-        if (is_returnable)
-        {
-            exp->returnable_set();
-        }
-        if (is_continue)
-        {
-            exp->continue_set();
-        }
-        if (is_continuable)
-        {
-            exp->continuable_set();
-        }
-
+        exp->setVerbose(isVerbose);
         if (nodeNumber != 0)
         {
-            exp->nodeNumber_set(nodeNumber);
+            exp->setNodeNumber(nodeNumber);
         }
 
         return exp;
@@ -589,13 +549,20 @@ public :
 
     Exp* deserialize()
     {
-        unsigned int size = get_uint32();
-        unsigned char scilabVersion[4];
 
-        scilabVersion[0] = get_uint8();
-        scilabVersion[1] = get_uint8();
-        scilabVersion[2] = get_uint8();
-        scilabVersion[3] = get_uint8();
+        // scilabVersion and size unused
+        // but get_uintxx used to deserialize macros
+        /*unsigned int size = */get_uint32();
+        // serialization version
+        /*unsigned char scilabVersion[4];
+        scilabVersion[0] = */
+        get_uint8();
+        /*scilabVersion[1] = */
+        get_uint8();
+        /*scilabVersion[2] = */
+        get_uint8();
+        /*scilabVersion[3] = */
+        get_uint8();
 
         return get_exp();
     }