Coverity: ast module uninitialized members fixed
[scilab.git] / scilab / modules / ast / includes / exps / ast.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2007-2008 - DIGITEO - Bruno JOFRET
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 /**
17 ** \file ast.hxx
18 ** Define the Abstract Syntax Tree mother class.
19 */
20
21 #ifndef AST_AST_HXX
22 #define AST_AST_HXX
23
24 #include "location.hxx"
25 #include "visitor.hxx"
26 #include "Decorator.hxx"
27
28 namespace ast
29 {
30
31 /** \brief Abstract an Abstract Syntax Tree node. */
32 class Ast
33 {
34     /** \name Ctor & dtor.
35     ** \{ */
36 public:
37     /** \brief Construct an Ast node.
38     ** \param location scanner position informations */
39     Ast (const Location& location) : decorator(), coverId(0), _location (location), m_dblElapsedTime(0)
40     {
41         nodeNumber = globalNodeNumber++;
42     }
43
44
45     /** \brief Destroys an Ast node. */
46     virtual ~Ast ()
47     {
48     }
49     /** \} */
50
51     virtual Ast* clone() = 0;
52
53     /** \name Accessors.
54     ** \{ */
55 public:
56     /** \brief Set scanner position informations.
57     ** \param location scanner position informations
58     **
59     ** Return a reference to this.
60     */
61     Ast& setLocation(const Location& location)
62     {
63         _location = location;
64         return *this;
65     }
66     /** \brief Get scanner position informations stored. */
67     inline const Location& getLocation() const
68     {
69         return _location;
70     }
71
72     /** \brief Get scanner position informations stored. */
73     inline Location& getLocation()
74     {
75         return _location;
76     }
77     /** \} */
78
79     /** \name Visitors entry point.
80     ** \{ */
81 public:
82     /** \brief Accept a const visitor \a v. */
83     virtual void accept (ConstVisitor& v) const = 0;
84     /** \brief Accept a non const visitor \a v. */
85     virtual void accept (Visitor& v) = 0;
86     /** \} */
87
88     void setElapsedtime(double _dblElapsedTime)
89     {
90         m_dblElapsedTime = _dblElapsedTime;
91     }
92
93     size_t getNodeNumber() const
94     {
95         return nodeNumber;
96     }
97
98     void setNodeNumber(size_t _nodeNumber)
99     {
100         nodeNumber = _nodeNumber;
101     }
102
103     const analysis::Decorator & getDecorator() const
104     {
105         return decorator;
106     }
107
108     analysis::Decorator & getDecorator()
109     {
110         return decorator;
111     }
112
113     inline void setCoverId(const uint64_t id)
114     {
115         coverId = id;
116     }
117
118     inline uint64_t getCoverId() const
119     {
120         return coverId;
121     }
122
123     inline uint64_t getCoverId()
124     {
125         return coverId;
126     }
127
128 private:
129     analysis::Decorator decorator;
130     uint64_t coverId;
131     /** \brief Construct an Ast by copy. */
132     Ast (const Ast&);
133     /** \brief Assign an Ast to this. */
134     Ast& operator= (const Ast&);
135
136     /** \brief Scanner position informations. */
137     Location _location;
138     double m_dblElapsedTime;
139     size_t nodeNumber;
140     static EXTERN_AST size_t globalNodeNumber;
141 };
142
143 } // namespace ast
144
145 #endif // !AST_AST_HXX