Merge remote-tracking branch 'origin/master' into windows
[scilab.git] / scilab / modules / ast / src / cpp / analysis / VisitTypeExps.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #include "AnalysisVisitor.hxx"
17
18 namespace analysis
19 {
20
21 void AnalysisVisitor::visit(ast::DoubleExp & e)
22 {
23     logger.log("DoubleExp", e.getLocation());
24     if (!e.getConstant())
25     {
26         e.accept(cv.getExec());
27         cv.getExec().setResult(nullptr);
28     }
29     types::Double * pDbl = static_cast<types::Double *>(e.getConstant());
30     if (pDbl->isComplex())
31     {
32         Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::COMPLEX, pDbl->getRows(), pDbl->getCols()));
33         res.getConstant() = e.getConstant();
34         setResult(res);
35     }
36     else
37     {
38         Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::DOUBLE, pDbl->getRows(), pDbl->getCols()));
39         res.getConstant() = e.getConstant();
40         setResult(res);
41     }
42 }
43
44 void AnalysisVisitor::visit(ast::BoolExp & e)
45 {
46     logger.log("BoolExp", e.getLocation());
47     if (!e.getConstant())
48     {
49         e.accept(cv.getExec());
50         cv.getExec().setResult(nullptr);
51     }
52     types::Bool * pBool = static_cast<types::Bool *>(e.getConstant());
53     Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::BOOLEAN, pBool->getRows(), pBool->getCols()));
54     res.getConstant() = e.getConstant();
55     setResult(res);
56 }
57
58 void AnalysisVisitor::visit(ast::StringExp & e)
59 {
60     logger.log("StringExp", e.getLocation());
61     if (!e.getConstant())
62     {
63         e.accept(cv.getExec());
64         cv.getExec().setResult(nullptr);
65     }
66     types::String * pStr = static_cast<types::String *>(e.getConstant());
67     Result & res = e.getDecorator().setResult(TIType(dm.getGVN(), TIType::STRING, pStr->getRows(), pStr->getCols()));
68     res.getConstant() = e.getConstant();
69     setResult(res);
70 }
71
72
73 } // namespace analysis