remove watches from scilab debugger
[scilab.git] / scilab / modules / ast / includes / ast / deserializervisitor.hxx
index 8c46eba..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__
@@ -168,6 +171,10 @@ private :
                 return  OpExp::logicalShortCutAnd;
             case 27 :
                 return  OpExp::logicalShortCutOr;
+
+            case 28 :
+               return  OpExp::unaryPlus;
+
         }
         std::cerr << "Unknown get_OpExp_Oper code " << code << std::endl;
         exit(2);
@@ -190,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)
@@ -216,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;
     }
 
@@ -269,7 +280,9 @@ private :
             }
             case 9:
             {
-                exp = new SimpleVar(loc, *get_Symbol());
+                symbol::Symbol* sym = get_Symbol();
+                exp = new SimpleVar(loc, *sym);
+                delete sym;
                 break;
             }
             case 10:
@@ -300,10 +313,10 @@ private :
                 Exp* test = get_exp();
                 Exp* _then = get_exp();
                 IfExp* ifexp;
-                if ( hasElse )
+                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
                 {
@@ -327,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:
@@ -335,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:
@@ -453,7 +466,8 @@ private :
                 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:
@@ -461,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: