Analysis: infer when a refcount is required and add colors in DebugVisitor
[scilab.git] / scilab / modules / ast / includes / analysis / data / PolymorphicMacroCache.hxx
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 #ifndef __POLYMORPHIC_MACRO_CACHE_HXX__
14 #define __POLYMORPHIC_MACRO_CACHE_HXX__
15
16 #include <iostream>
17 #include <map>
18 #include <unordered_map>
19 #include <vector>
20
21 #include "allexp.hxx"
22 #include "CompleteMacroSignature.hxx"
23 #include "MacroDef.hxx"
24 #include "MacroSignature.hxx"
25 #include "FunctionBlock.hxx"
26 #include "TIType.hxx"
27
28 namespace analysis
29 {
30
31 class AnalysisVisitor;
32
33 class PolymorphicMacroCache
34 {
35     typedef std::unordered_map<MacroSignature, CompleteMacroSignature, MacroSignature::Hash, MacroSignature::Eq> MacroSignMap;
36     MacroSignMap signatures;
37
38 public:
39
40     PolymorphicMacroCache() { }
41
42     const bool getOutTypes(AnalysisVisitor & visitor, MacroDef * macrodef, std::vector<TIType> & in, std::vector<TIType> & out);
43
44     static bool getCompleteIn(MacroDef & macrodef, AnalysisVisitor & visitor, const std::vector<TIType> & in, std::vector<TIType> & completeIn);
45
46 private:
47
48     GVN::Value * getValue(const GVN::Value * value, AnalysisVisitor & visitor, const std::vector<const MultivariatePolynomial *> & polys, const int maxVarId) const;
49 };
50
51 } // namespace analysis
52
53 #endif // __POLYMORPHIC_MACRO_CACHE_HXX__