Analysis: fix bugs found with Coverity
[scilab.git] / scilab / modules / ast / src / cpp / analysis / MacroDef.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2014 - 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 "data/MacroDef.hxx"
14 #include "data/GlobalsCollector.hxx"
15
16 namespace analysis
17 {
18 ExistingMacroDef::ExistingMacroDef(types::Macro & _macro) : MacroDef(_macro.getOutputs()->size(), _macro.getInputs()->size(), _macro.getBody()), name(_macro.getName()), se(nullptr), inputs(MacroDef::asVector(_macro.getInputs())), outputs(MacroDef::asVector(_macro.getOutputs()))
19 {
20     GlobalsCollector::collect(*this);
21 }
22
23 ExistingMacroDef::ExistingMacroDef(const ExistingMacroDef & emd) : MacroDef(emd.inputs.size(), emd.outputs.size(), emd.original), name(emd.name), se(emd.se->clone()), inputs(emd.inputs), outputs(emd.outputs)
24 {
25     GlobalsCollector::collect(*this);
26 }
27
28 ast::SeqExp & ExistingMacroDef::getBody()
29 {
30     se = static_cast<ast::SeqExp *>(original)->clone();
31     return *se;
32 }
33
34 const std::wstring & ExistingMacroDef::getName()
35 {
36     return name;
37 }
38
39 std::vector<symbol::Symbol> ExistingMacroDef::getIn()
40 {
41     return inputs;
42 }
43
44 std::vector<symbol::Symbol> ExistingMacroDef::getOut()
45 {
46     return outputs;
47 }
48
49 MacroDef * ExistingMacroDef::clone() const
50 {
51     return new ExistingMacroDef(*this);
52 }
53
54 DeclaredMacroDef::DeclaredMacroDef(ast::FunctionDec * const _dec) : MacroDef(_dec->getReturns().getVars().size(), _dec->getArgs().getVars().size(), _dec), dec(nullptr)
55 {
56     GlobalsCollector::collect(*this);
57 }
58
59 ast::SeqExp & DeclaredMacroDef::getBody()
60 {
61     dec = static_cast<ast::FunctionDec *>(original)->clone();
62     return static_cast<ast::SeqExp &>(dec->getBody());
63 }
64
65 const std::wstring & DeclaredMacroDef::getName()
66 {
67     return static_cast<ast::FunctionDec *>(original)->getSymbol().getName();
68 }
69
70 std::vector<symbol::Symbol> DeclaredMacroDef::getIn()
71 {
72     return MacroDef::asVector(&static_cast<ast::FunctionDec *>(original)->getArgs().getVars());
73 }
74
75 std::vector<symbol::Symbol> DeclaredMacroDef::getOut()
76 {
77     return MacroDef::asVector(&static_cast<ast::FunctionDec *>(original)->getReturns().getVars());
78 }
79
80 MacroDef * DeclaredMacroDef::clone() const
81 {
82     return new DeclaredMacroDef(dec ? dec : static_cast<ast::FunctionDec *>(original));
83 }
84
85 } // namespace analysis