xref: /AOO41X/main/autodoc/source/parser/cpp/pe_vafu.hxx (revision 1c78a5d6c0093dece4c096ba53051800fbad6e33)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 
25 #ifndef ADC_CPP_PE_VAFU_HXX
26 #define ADC_CPP_PE_VAFU_HXX
27 
28 // BASE CLASSES
29 #include "cpp_pe.hxx"
30 // USED SERVICES
31 #include <semantic/callf.hxx>
32 #include <semantic/sub_peu.hxx>
33 #include <ary/cpp/c_types4cpp.hxx>
34 #include <ary/cpp/c_vfflag.hxx>
35 
36 
37 
38 namespace cpp
39 {
40 
41 class PE_Type;
42 class PE_Variable;
43 class PE_Function;
44 class PE_Ignore;
45 
46 
47 
48 
49 class PE_VarFunc : public Cpp_PE
50 {
51   public:
52     enum E_State
53     {
54         start,
55         expectCtor,
56         afterClassDecl,     // Also used for after enum declaration.
57         expectName,
58         afterName,
59         afterName_inErraneousTemplate,
60         finished,
61         finishedIncludingFunctionImplementation,
62         size_of_states
63     };
64     enum E_ResultType
65     {
66         result_unknown = 0,
67         result_ignore,          /// Used for class and enum declarations and predeclarations and for extern variables and functions.
68         result_variable,
69         result_function
70     };
71 
72     typedef ary::cpp::E_Protection              E_Protection;
73 
74 
75                         PE_VarFunc(
76                             Cpp_PE *            i_pParent );
77                         ~PE_VarFunc();
78 
79     virtual void        Call_Handler(
80                             const cpp::Token &  i_rTok );
81 
82     const std::vector<ary::cpp::Ce_id> &
83                         Result_Ids() const;
84     ary::cpp::Type_id   Result_FrontType() const;
85     const StringVector &
86                         Result_Names() const;
87     E_ResultType        Result_CeType() const;
88 
89   private:
90     typedef SubPe< PE_VarFunc, PE_Type >        SP_Type;
91     typedef SubPeUse< PE_VarFunc, PE_Type >     SPU_Type;
92     typedef SubPe< PE_VarFunc, PE_Variable >    SP_Variable;
93     typedef SubPeUse< PE_VarFunc, PE_Variable > SPU_Variable;
94     typedef SubPe< PE_VarFunc, PE_Function >    SP_Function;
95     typedef SubPeUse< PE_VarFunc, PE_Function > SPU_Function;
96     typedef SubPe< PE_VarFunc, PE_Ignore >      SP_Ignore;
97     typedef SubPeUse< PE_VarFunc, PE_Ignore >   SPU_Ignore;
98 
99     void                Setup_StatusFunctions();
100     virtual void        InitData();
101     virtual void        TransferData();
102     void                Hdl_UnknownToken( const char *);
103 
104     void                SpInit_FunctionStd();
105     void                SpInit_FunctionCtor();
106     void                SpInit_FunctionDtor();
107     void                SpInit_FunctionCastOperator();
108     void                SpInit_FunctionNormalOperator();
109     void                SpReturn_Type();
110     void                SpReturn_Variable();
111     void                SpReturn_FunctionStd();
112     void                SpReturn_Ignore();
113 
114     void                On_start_Identifier(const char * i_sText);
115     void                On_start_operator(const char * i_sText);
116     void                On_start_TypeKey(const char * i_sText);
117     void                On_start_virtual(const char * i_sText);
118     void                On_start_Tilde(const char * i_sText);
119     void                On_start_const(const char * i_sText);
120     void                On_start_volatile(const char * i_sText);
121     void                On_start_extern(const char * i_sText);
122     void                On_start_static(const char * i_sText);
123     void                On_start_mutable(const char * i_sText);
124     void                On_start_register(const char * i_sText);
125     void                On_start_inline(const char * i_sText);
126     void                On_start_explicit(const char * i_sText);
127     void                On_start_Bracket_Right(const char * i_sText);
128     void                On_start_typename(const char * i_sText);
129 
130     void                On_expectCtor_Bracket_Left(const char * i_sText);
131 
132     void                On_afterClassDecl_Semicolon(const char * i_sText);
133 
134     void                On_expectName_Identifier(const char * i_sText);
135     void                On_expectName_operator(const char * i_sText);
136     void                On_expectName_Bracket_Left(const char * i_sText);
137 
138     void                On_afterName_ArrayBracket_Left(const char * i_sText);
139     void                On_afterName_Bracket_Left(const char * i_sText);
140     void                On_afterName_DoubleColon(const char * i_sText);
141     void                On_afterName_Semicolon(const char * i_sText);
142     void                On_afterName_Comma(const char * i_sText);
143     void                On_afterName_Assign(const char * i_sText);
144     void                On_afterName_Less(const char * i_sText);
145 
146     void                On_afterName_inErraneousTemplate_Less(const char * i_sText);
147     void                On_afterName_inErraneousTemplate_Greater(const char * i_sText);
148     void                On_afterName_inErraneousTemplate_Default(const char * i_sText);
149 
150     void                On_finished_Semicolon(const char * i_sText);
151     void                On_finished_Comma(const char * i_sText);
152     void                On_finished_Default(const char * i_sText);
153 
154     void                On_finishedIncludingFunctionImplementation_Default(const char * i_sText);
155 
156     ary::cpp::FunctionFlags
157                         CreateFunctionFlags();
158 
159     // DATA
160     Dyn< PeStatusArray<PE_VarFunc> >
161                         pStati;
162 
163     Dyn<SP_Type>        pSpType;
164     Dyn<SPU_Type>       pSpuType;
165     Dyn<SP_Variable>    pSpVariable;
166     Dyn<SPU_Variable>   pSpuVariable;
167     Dyn<SP_Function>    pSpFunction;
168     Dyn<SPU_Function>   pSpuFunctionStd;
169     Dyn<SPU_Function>   pSpuFunctionCtor;
170     Dyn<SPU_Function>   pSpuFunctionDtor;
171     Dyn<SPU_Function>   pSpuFunctionCastOperator;
172     Dyn<SPU_Function>   pSpuFunctionNormalOperator;
173     Dyn<SP_Ignore>      pSpIgnore;
174     Dyn<SPU_Ignore>     pSpuIgnore;
175 
176     intt                nCounter_TemplateBrackets;
177     bool                bInDestructor;
178 
179     std::vector<ary::cpp::Ce_id>
180                         aResultIds;
181     ary::cpp::Type_id   nResultFrontType;
182     E_ResultType        eResultType;
183 
184     // Pre-Results
185     String              sName;
186 
187     bool                bVirtual;
188     bool                bStatic;
189     bool                bExtern;
190     bool                bExternC;
191     bool                bMutable;
192     bool                bInline;
193     bool                bRegister;
194     bool                bExplicit;
195 };
196 
197 
198 
199 // IMPLEMENTATION
200 
201 inline const std::vector<ary::cpp::Ce_id> &
Result_Ids() const202 PE_VarFunc::Result_Ids() const
203     { return aResultIds; }
204 inline ary::cpp::Type_id
Result_FrontType() const205 PE_VarFunc::Result_FrontType() const
206     { return nResultFrontType; }
207 inline PE_VarFunc::E_ResultType
Result_CeType() const208 PE_VarFunc::Result_CeType() const
209     { return eResultType; }
210 
211 
212 
213 }   // namespace cpp
214 
215 
216 
217 
218 #endif
219 
220 
221 /*  // Overview of Stati
222 
223 Undecided
224 ---------
225 
226 start           // vor und w�hrend storage class specifiern
227     any         ->stay
228     operaator   ->goto Function
229 
230 ->Typ
231 
232 expectName
233     Identifier  ->stay
234     operator    ->goto Function
235 
236 afterName       ->goto Variable or Function
237 
238 
239 
240 
241 Variable
242 --------
243 
244 start           // vor und w�hrend storage class specifiern
245 
246 ->Typ
247 
248 expectName      // Typ ist da  -> im Falle von '(': notyetimplemented
249 afterName
250 
251 expectSize      // after [
252 expectFinish
253                 // vor ; oder ,
254 expectNextVarName  // anders als bei expectName kann hier auch * oder & kommen
255 
256 
257 
258 
259 
260 Function
261 --------
262 
263 start               // vor und w�hrend storage class specifiern
264 
265 ->Typ
266 
267 expectName          // Typ ist da
268 expectBracket       // Nach Name
269 expectParameter     // nach ( oder ,
270 -> Parameter
271 after Parameters    // before const, volatile throw or = 0.
272 after throw         // expect (
273 expectException     // after (
274 after exceptions    // = 0 oder ; oder ,
275 
276 
277 expectNextVarName  // anders als bei expectName kann hier auch * oder & kommen
278 
279 
280 
281 
282 
283 
284 
285 */
286