Analysis: fix bug in listexp analysis
[scilab.git] / scilab / modules / ast / src / cpp / analysis / VisitForExp.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #include "AnalysisVisitor.hxx"
14
15 namespace analysis
16 {
17
18 void AnalysisVisitor::visit(ast::ForExp & e)
19 {
20     logger.log(L"ForExp", e.getLocation());
21     loops.push(&e);
22
23     dm.addBlock(Block::LOOP, &e);
24     e.getVardec().accept(*this);
25     dm.addBlock(Block::NORMAL, &e.getBody());
26     e.getBody().accept(*this);
27
28     if (dm.requiresAnotherTrip())
29     {
30         dm.finalizeBlock();
31         dm.addBlock(Block::NORMAL, &e.getBody());
32         e.getBody().accept(*this);
33
34         if (dm.requiresAnotherTrip())
35         {
36             std::wcerr << "Invalid forexp: types or refcount are not the same before and after the loop" << std::endl;
37         }
38     }
39
40     dm.finalizeBlock();
41     dm.finalizeBlock();
42
43     loops.pop();
44 }
45
46 } // namespace analysis