macr2tree fixed about line function number. 43/16843/4
Cedric Delamarre [Mon, 13 Jul 2015 15:42:39 +0000 (17:42 +0200)]
Change-Id: Id22e85ef1f981eadde174f9b8ea4a4791444a14d

scilab/modules/ast/includes/types/callable.hxx
scilab/modules/ast/includes/types/macrofile.hxx
scilab/modules/ast/src/cpp/ast/runvisitor.cpp
scilab/modules/ast/src/cpp/ast/treevisitor.cpp
scilab/modules/ast/src/cpp/types/macrofile.cpp
scilab/modules/core/sci_gateway/cpp/sci_macr2tree.cpp
scilab/modules/functions/tests/nonreg_tests/bug_1469.tst

index f45ef68..96346bd 100644 (file)
@@ -117,15 +117,22 @@ public :
         return m_iFirstLine;
     }
 
-    virtual void       setFirstLine(int _iFirstLine)
+    virtual int        getLastLine(void)
+    {
+        return m_iLastLine;
+    }
+
+    virtual void       setLines(int _iFirstLine, int _iLastLine)
     {
         m_iFirstLine = _iFirstLine;
+        m_iLastLine  = _iLastLine;
     }
 
 protected :
     std::wstring           m_wstName;
     std::wstring           m_wstModule;
     int                    m_iFirstLine;
+    int                    m_iLastLine;
 };
 }
 
index 5f03965..9720905 100644 (file)
@@ -53,7 +53,7 @@ public :
 
     Macro*                  getMacro(void);
 
-    void                    setFirstLine(int _iLine);
+    void                    setLines(int _iFirstLine, int _iLastLine);
 
     /* return type as string ( double, int, cell, list, ... )*/
     virtual std::wstring    getTypeStr()
index 1ad66fe..9e949db 100644 (file)
@@ -1190,7 +1190,7 @@ void RunVisitorT<T>::visitprivate(const FunctionDec & e)
 
     types::Macro *pMacro = new types::Macro(e.getSymbol().getName(), *pVarList, *pRetList,
                                             const_cast<SeqExp&>(static_cast<const SeqExp&>(e.getBody())), L"script");
-    pMacro->setFirstLine(e.getLocation().first_line);
+    pMacro->setLines(e.getLocation().first_line, e.getLocation().last_line);
 
     bool bEquals = false;
     int iFuncProt = ConfigVariable::getFuncprot();
index b34f9e2..edfe80e 100644 (file)
@@ -249,7 +249,7 @@ void TreeVisitor::visit(const OpExp &e)
 
     switch (e.getOper())
     {
-        // Arithmetics.
+            // Arithmetics.
         case OpExp::plus:
             ope->append(new types::String(SCI_PLUS));
             break;
@@ -269,7 +269,7 @@ void TreeVisitor::visit(const OpExp &e)
         case OpExp::power:
             ope->append(new types::String(SCI_POWER));
             break;
-        // Element wise.
+            // Element wise.
         case OpExp::dottimes:
             ope->append(new types::String(SCI_DOTTIMES));
             break;
@@ -282,7 +282,7 @@ void TreeVisitor::visit(const OpExp &e)
         case OpExp::dotpower:
             ope->append(new types::String(SCI_DOTPOWER));
             break;
-        // Kroneckers
+            // Kroneckers
         case OpExp::krontimes:
             ope->append(new types::String(SCI_KRONTIMES));
             break;
@@ -292,7 +292,7 @@ void TreeVisitor::visit(const OpExp &e)
         case OpExp::kronldivide:
             ope->append(new types::String(SCI_KRONLDIVIDE));
             break;
-        // Control
+            // Control
         case OpExp::controltimes:
             ope->append(new types::String(SCI_CONTROLTIMES));
             break;
@@ -302,7 +302,7 @@ void TreeVisitor::visit(const OpExp &e)
         case OpExp::controlldivide:
             ope->append(new types::String(SCI_CONTROLLDIVIDE));
             break;
-        // Comparisons
+            // Comparisons
         case OpExp::eq:
             ope->append(new types::String(SCI_EQ));
             break;
index 97c079a..a3427ed 100644 (file)
@@ -133,7 +133,7 @@ bool MacroFile::parse(void)
 
             const symbol::Symbol & sym = pFD->getSymbol();
             Macro* macro = new Macro(sym.getName(), *pVarList, *pRetList, (ast::SeqExp&)pFD->getBody(), m_wstModule);
-            macro->setFirstLine(pFD->getLocation().first_line);
+            macro->setLines(pFD->getLocation().first_line, pFD->getLocation().last_line);
             macro->setFileName(m_stPath);
 
             if (m_pMacro == nullptr && sym.getName() == getName())
@@ -195,9 +195,9 @@ Macro* MacroFile::getMacro(void)
     return m_pMacro;
 }
 
-void MacroFile::setFirstLine(int _iLine)
+void MacroFile::setLines(int _iFirstLine, int _iLastLine)
 {
-    getMacro()->setFirstLine(_iLine);
+    getMacro()->setLines(_iFirstLine, _iLastLine);
 }
 
 bool MacroFile::operator==(const InternalType& it)
index 074d1e9..9232920 100644 (file)
@@ -118,8 +118,8 @@ types::Function::ReturnValue sci_macr2tree(types::typed_list &in, int _iRetCount
 
     l->append(v.getList());
     //nb lines
-    l->append(new types::Double(body->getLocation().last_line - body->getLocation().first_line + 1));
+    l->append(new types::Double(macro->getLastLine() - macro->getFirstLine() + 1));
     out.push_back(l);
     statement->killMe();
     return types::Function::OK;
-}
\ No newline at end of file
+}
index bc97164..12a72bc 100644 (file)
@@ -45,7 +45,7 @@
 
 function foo,endfunction
 L=macr2lst(foo);
-R1=L(4)(1)=='15'&size(L)==6
+R1=L(4)(1)=="15"&size(L)==6
 if ~R1 then pause,end
 clear foo;
 
@@ -53,7 +53,7 @@ clear foo;
 
 function foo,,endfunction
 L=macr2lst(foo);
-R2=L(4)(1)=='15'&size(L)==6
+R2=L(4)(1)=="15"&size(L)==6
 if ~R2 then pause,end
 clear foo;
 
@@ -61,7 +61,7 @@ clear foo;
 
 function foo(),endfunction
 L=macr2lst(foo);
-R3=L(4)(1)=='15'&size(L)==6
+R3=L(4)(1)=="15"&size(L)==6
 if ~R3 then pause,end
 clear foo;
 
@@ -69,7 +69,7 @@ clear foo;
 
 function foo(),a=1,endfunction
 L=macr2lst(foo);
-R4=L(4)(1)=='6'&size(L)==8
+R4=L(4)(1)=="6"&size(L)==8
 if ~R4 then pause,end
 clear foo;
 
@@ -78,7 +78,7 @@ clear foo;
 function foo
 endfunction
 L=macr2lst(foo);
-R5=L(4)(1)=='15'&size(L)==7
+R5=L(4)(1)=="15"&size(L)==7
 if ~R5 then pause,end
 clear foo;
 
@@ -87,7 +87,7 @@ clear foo;
 function foo,
 endfunction
 L=macr2lst(foo);
-R6=L(4)(1)=='15'&size(L)==7
+R6=L(4)(1)=="15"&size(L)==7
 if ~R6 then pause,end
 clear foo;
 
@@ -96,7 +96,7 @@ clear foo;
 function foo//ZZZZ
 endfunction
 L=macr2lst(foo);
-R7=L(4)(1)=='31'&L(5)(1)=='15'&size(L)==8
+R7=L(4)(1)=="31"&L(5)(1)=="15"&size(L)==8
 if ~R7 then pause,end
 clear foo;
 
@@ -105,27 +105,27 @@ clear foo;
 function foo,//ZZZZ
 endfunction
 L=macr2lst(foo);
-R8=L(4)(1)=='31'&L(5)(1)=='15'&size(L)==8
+R8=L(4)(1)=="31"&L(5)(1)=="15"&size(L)==8
 if ~R8 then pause,end
 clear foo;
 
 // ================ Test 9 =====================================================
 
 function foo
-//ZZZZ
+    //ZZZZ
 endfunction
 L=macr2lst(foo);
-R9=L(4)(1)=='15'&L(5)(1)=='31'&size(L)==9
+R9=L(4)(1)=="15"&L(5)(1)=="31"&size(L)==9
 if ~R9 then pause,end
 clear foo;
 
 // ================ Test 10 ====================================================
 
 function foo,//ZZZZ
-  a=1
+    a=1
 endfunction
 L=macr2lst(foo);
-R10=L(4)(1)=='31'&L(5)(1)=='15'&L(6)(1)=='6'&size(L)==11
+R10=L(4)(1)=="31"&L(5)(1)=="15"&L(6)(1)=="6"&size(L)==11
 if ~R10 then pause,end
 clear foo;
 
@@ -139,7 +139,7 @@ clear foo;
 // ================ Test 12 ====================================================
 
 function loc=foo,//ZZZZ
-  [l,w]=where(),loc=l(1)
+    [l,w]=where(),loc=l(1)
 endfunction
 R12= and(foo()==2)
 if ~R12 then pause,end
@@ -148,8 +148,8 @@ clear foo;
 // ================ Test 13 ====================================================
 
 function loc=foo
-//ZZZZ
-  [l,w]=where(),loc=l(1)
+    //ZZZZ
+    [l,w]=where(),loc=l(1)
 endfunction
 R13= and(foo()==3)
 if ~R13 then pause,end
@@ -158,12 +158,12 @@ clear foo;
 // ================ Test 14 ====================================================
 
 function loc=foo1()
-  [l,w]=where(),loc=l(1)
-  function loc=foo3(loc)
-    [l,w]=where(),loc=[loc,l(1:2)']
-  endfunction
-  [l,w]=where(),loc=[loc,l(1)]
-  loc=foo3(loc)
+    [l,w]=where(),loc=l(1)
+    function loc=foo3(loc)
+        [l,w]=where(),loc=[loc,l(1:2)']
+    endfunction
+    [l,w]=where(),loc=[loc,l(1)]
+    loc=foo3(loc)
 endfunction
 R14= and(foo1()==[2,6,2,7])
 if ~R14 then pause,end
@@ -172,52 +172,52 @@ clear foo1;
 // ================ Test 15 ====================================================
 
 function loc=foo1()//ZZZZZZZ
-  [l,w]=where(),loc=l(1)
-  function loc=foo3(loc)
-    [l,w]=where(),loc=[loc,l(1:2)']
-  endfunction
-  [l,w]=where(),loc=[loc,l(1)]
-  loc=foo3(loc)
+    [l,w]=where(),loc=l(1)
+    function loc=foo3(loc)
+        [l,w]=where(),loc=[loc,l(1:2)']
+    endfunction
+    [l,w]=where(),loc=[loc,l(1)]
+    loc=foo3(loc)
 endfunction
 L=macr2lst(foo1);
-R15=and(foo1()==[2,6,2,7])&(L(4)(1)=='31')&(L(5)=='15')
+R15=and(foo1()==[2,6,2,7])&(L(4)(1)=="31")&(L(5)=="15")
 if ~R15 then pause,end
 clear foo1;
 
 // ================ Test 16 ====================================================
 
 function loc=foo1()
-  //ZZZZZZZ
-  [l,w]=where(),loc=l(1)
-  function loc=foo3(loc)
-    [l,w]=where(),loc=[loc,l(1:2)']
-  endfunction
-  [l,w]=where(),loc=[loc,l(1)]
-  loc=foo3(loc)
+    //ZZZZZZZ
+    [l,w]=where(),loc=l(1)
+    function loc=foo3(loc)
+        [l,w]=where(),loc=[loc,l(1:2)']
+    endfunction
+    [l,w]=where(),loc=[loc,l(1)]
+    loc=foo3(loc)
 endfunction
 L=macr2lst(foo1);
-R16=and(foo1()==[3,7,2,8])&(L(4)=='15')&(L(5)(1)=='31')
+R16=and(foo1()==[3,7,2,8])&(L(4)=="15")&(L(5)(1)=="31")
 if ~R16 then pause,end
 clear foo1;
 
 // ================ Test 17 ====================================================
 
 //pb execution des macros non compilee
-deff('y=foo(a,b,c)','y=a+b+c','n')
-R17=foo('aaa','bbb','cc')=='aaabbbcc'
+deff("y=foo(a,b,c)","y=a+b+c","n")
+R17=foo("aaa","bbb","cc")=="aaabbbcc"
 if ~R17 then pause,end
 clear foo
 
 // ================ Test 18 ====================================================
 
-deff('y=foo(a,b,c)',['','y=a+b+c'],'n')
-R18=foo('aaa','bbb','cc')=='aaabbbcc'
+deff("y=foo(a,b,c)",["","y=a+b+c"],"n")
+R18=foo("aaa","bbb","cc")=="aaabbbcc"
 if ~R18 then pause,end
 
 // ================ Test 19 ====================================================
 
 comp(foo)
-R19=foo('aaa','bbb','cc')=='aaabbbcc'
+R19=foo("aaa","bbb","cc")=="aaabbbcc"
 if ~R19 then pause,end
 clear foo
 
@@ -226,12 +226,12 @@ clear foo
 //function definition nested in a or loop!
 z=0;R20=%t
 for k=1:2
- function y=foo()
-   y=k
- endfunction
- L=macr2lst(foo);
- R20=R20&(L(4)=='15')&(L(5)(1)=='2');
- z=z+foo();
+    function y=foo()
+        y=k
+    endfunction
+    L=macr2lst(foo);
+    R20=R20&(L(4)=="15")&(L(5)(1)=="2");
+    z=z+foo();
 end
 R20=R20&z==3
 if ~R20 then pause,end
@@ -239,50 +239,50 @@ if ~R20 then pause,end
 // ================ Test 21 ====================================================
 
 //test avec getf
-t=['function foo,//ZZZZ'
-'  a=1'
-'endfunction'];
-mputl(t,TMPDIR+'/foo.sci');
-warning('off');
-exec(TMPDIR+'/foo.sci')
-warning('on');
+t=["function foo,//ZZZZ"
+"  a=1"
+"endfunction"];
+mputl(t,TMPDIR+"/foo.sci");
+warning("off");
+exec(TMPDIR+"/foo.sci")
+warning("on");
 L=macr2lst(foo); //getf ignores declaration line comments
-R21=L(4)(1)=='31'&L(5)(1)=='15'&size(L)==11
+R21=L(4)(1)=="31"&L(5)(1)=="15"&size(L)==11
 if ~R21 then pause,end
 clear foo;
 
 // ================ Test 22 ====================================================
 
-t=['function foo'
-'//ZZZZ'
-'  a=1'
-'endfunction'];
-mputl(t,TMPDIR+'/foo.sci');
-exec(TMPDIR+'/foo.sci')
+t=["function foo"
+"//ZZZZ"
+"  a=1"
+"endfunction"];
+mputl(t,TMPDIR+"/foo.sci");
+exec(TMPDIR+"/foo.sci")
 L=macr2lst(foo); //getf ignores declaration line comments
-R22=L(4)(1)=='15'&L(5)(1)=='31'&L(6)(1)=='15'&size(L)==12
+R22=L(4)(1)=="15"&L(5)(1)=="31"&L(6)(1)=="15"&size(L)==12
 if ~R22 then pause,end
 clear foo;
 
 // ================ Test 23 ====================================================
 function foo()
-  function bar()
-    a=1
+    function bar()
+        a=1
+    endfunction
 endfunction
-endfunction
-t=fun2string(foo,'foo')
+t=fun2string(foo,"foo")
 if size(t,1)<>5 then pause,end
 
 clear foo
 function foo()
-  function bar()
-    a=1
- endfunction
+    function bar()
+        a=1
+    endfunction
 endfunction
-t1=fun2string(foo,'foo')
+t1=fun2string(foo,"foo")
 if or(t<>t1) then pause,end
 // ================ Test 24 ====================================================
 function test;endfunction
 L=macr2lst(test)
 if size(L)<>6 then pause,end
-if L(4)<>'15'|L(5)<>'99'| L(6)<>'15' then pause,end
+if L(4)<>"15"|L(5)<>"99"| L(6)<>"15" then pause,end