xref: /AOO41X/main/autodoc/source/parser/cpp/pe_type.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_TYPE_HXX
26 #define ADC_CPP_PE_TYPE_HXX
27 
28 
29 
30 // USED SERVICES
31     // BASE CLASSES
32 #include "cpp_pe.hxx"
33     // COMPONENTS
34 #include <ary/cpp/usedtype.hxx>
35 #include <semantic/callf.hxx>
36 #include <semantic/sub_peu.hxx>
37     // PARAMETERS
38 #include <ary/cpp/c_types4cpp.hxx>
39 
40 
41 
42 namespace cpp {
43 
44 class PE_Class;
45 class PE_Enum;
46 class PE_Expression;
47 
48 class PE_Type : public Cpp_PE
49 {
50   public:
51     enum E_State
52     {
53         start,
54         expect_namesegment,
55         after_namesegment,
56         afterclass_expect_semicolon,
57         within_template,
58         within_indirection,
59         size_of_states
60     };
61     enum E_KindOfResult
62     {
63         is_none,
64         is_type,
65         is_constructor,
66         is_explicit_class_declaration,
67         is_class_predeclaration,
68         is_explicit_enum_declaration
69     };
70 
71                         PE_Type(
72                             Cpp_PE *            i_pParent );
73                         ~PE_Type();
74 
75     void                Init_AsCastOperatorType();
76 
77     virtual void        Call_Handler(
78                             const cpp::Token &  i_rTok );
79 
80     E_KindOfResult      Result_KindOf() const;
81     const ary::cpp::Type &
82                         Result_Type() const;
83   private:
84     typedef SubPe< PE_Type, PE_Type >           SP_Type;
85     typedef SubPe< PE_Type, PE_Class >          SP_Class;
86     typedef SubPe< PE_Type, PE_Enum >           SP_Enum;
87     typedef SubPeUse< PE_Type, PE_Type >        SPU_Type;
88     typedef SubPeUse< PE_Type, PE_Class >       SPU_Class;
89     typedef SubPeUse< PE_Type, PE_Enum >        SPU_Enum;
90 
91     void                Setup_StatusFunctions();
92     virtual void        InitData();
93     virtual void        TransferData();
94     void                Hdl_SyntaxError( const char *);
95 
96     void                SpReturn_Type_TemplateParameter();
97     void                SpReturn_Class();
98     void                SpReturn_Enum();
99 
100     void                On_EndOfType(const char *);
101 
102     void                On_start_Identifier(const char *);
103     void                On_start_class(const char *);
104     void                On_start_enum(const char *);
105     void                On_start_const(const char *);
106     void                On_start_volatile(const char *);
107     void                On_start_Bracket_Right(const char *);
108     void                On_start_DoubleColon(const char *);
109     void                On_start_BuiltInType(const char *);
110     void                On_start_TypeSpecializer(const char *);
111     void                On_start_typename(const char *);
112 
113     void                On_expect_namesegment_Identifier(const char *);
114 
115     void                On_after_namesegment_const(const char *);
116     void                On_after_namesegment_volatile(const char *);
117     void                On_after_namesegment_Bracket_Left(const char *);
118     void                On_after_namesegment_DoubleColon(const char *);
119     void                On_after_namesegment_Less(const char *);
120     void                On_after_namesegment_Asterix(const char *);
121     void                On_after_namesegment_AmpersAnd(const char *);
122 
123     void                On_afterclass_expect_semicolon_Semicolon(const char *);
124 
125     void                On_within_template_Comma(const char *);
126     void                On_within_template_Greater(const char *);
127     void                On_within_template_Constant(const char *);
128     void                On_within_template_TypeStart(const char *);
129 
130     void                On_within_indirection_const(const char *);
131     void                On_within_indirection_volatile(const char *);
132     void                On_within_indirection_Asterix(const char *);
133     void                On_within_indirection_AmpersAnd(const char *);
134 
135     bool                IsType() const;
136 
137     // DATA
138     Dyn< PeStatusArray<PE_Type> >
139                         pStati;
140 
141     Dyn<SP_Type>        pSpType;
142     Dyn<SPU_Type>       pSpuType_TemplateParameter;
143     Dyn<SP_Class>       pSpClass;
144     Dyn<SPU_Class>      pSpuClass;
145     Dyn<SP_Enum>        pSpEnum;
146     Dyn<SPU_Enum>       pSpuEnum;
147 
148     Dyn<ary::cpp::UsedType>
149                         pType;
150     ary::cpp::ut::List_TplParameter *
151                         pCurTemplate_ParameterList;
152     String              sOwningClassName;
153     String              sParsedClass_Name;
154 
155     const ary::cpp::Type *
156                         pResult_Type;
157     E_KindOfResult      eResult_KindOf;
158     bool                bIsCastOperatorType;
159 };
160 
161 
162 
163 // IMPLEMENTATION
164 
165 
166 inline const ary::cpp::Type &
Result_Type() const167 PE_Type::Result_Type() const
168     { csv_assert(pResult_Type != 0);
169       return *pResult_Type; }
170 inline PE_Type::E_KindOfResult
Result_KindOf() const171 PE_Type::Result_KindOf() const
172     { return eResult_KindOf; }
173 
174 
175 }   // namespace cpp
176 
177 
178 #endif
179 
180 
181 
182