00001
00002
00003 #ifndef lestes__lang__cplus__syn__hinter_g_hh__included
00004 #define lestes__lang__cplus__syn__hinter_g_hh__included
00005
00006 #include <lestes/common.hh>
00007 #include <lestes/intercode/intercode.g.hh>
00008 #include <lestes/lang/cplus/sem/lu_typedef.hh>
00009 #include <lestes/lang/cplus/sem/ss_declaration_visitor.v.g.hh>
00010 #include <lestes/lang/cplus/sem/ss_type_visitor.v.g.hh>
00011
00012 #include <lestes/std/objectize_macros.hh>
00013 package(lestes);
00014 package(intercode);
00015 class as_base;
00016 end_package(intercode);
00017 end_package(lestes);
00018
00019 package(lestes);
00020 package(lang);
00021 package(cplus);
00022 package(sem);
00023 class as_class_key;
00024 end_package(sem);
00025 end_package(cplus);
00026 end_package(lang);
00027 end_package(lestes);
00028
00029 package(lestes);
00030 package(lang);
00031 package(cplus);
00032 package(sem);
00033 class ss_declaration_visitor;
00034 end_package(sem);
00035 end_package(cplus);
00036 end_package(lang);
00037 end_package(lestes);
00038
00039 package(lestes);
00040 package(lang);
00041 package(cplus);
00042 package(sem);
00043 class ss_type_default_visitor;
00044 end_package(sem);
00045 end_package(cplus);
00046 end_package(lang);
00047 end_package(lestes);
00048
00049 package(lestes);
00050 package(lang);
00051 package(cplus);
00052 package(sem);
00053 class ss_declaration;
00054 end_package(sem);
00055 end_package(cplus);
00056 end_package(lang);
00057 end_package(lestes);
00058
00059 package(lestes);
00060 package(lang);
00061 package(cplus);
00062 package(sem);
00063 class ss_struct_base;
00064 end_package(sem);
00065 end_package(cplus);
00066 end_package(lang);
00067 end_package(lestes);
00068
00069 package(lestes);
00070 package(lang);
00071 package(cplus);
00072 package(syn);
00073
00074
00075 class elab_spec_key;
00076 class elab_spec_enum;
00077 class elab_spec_class_key;
00078 class hint_from_declaration_set;
00079 class typedef_class_resolver;
00080
00081
00082 class elab_spec_key : public ::lestes::intercode::as_base {
00083 public:
00084
00085
00086
00087 virtual ptr<reflection_list> reflection_get() const;
00088
00089 virtual ptr<field_list_list> field_values_get() const;
00090
00091 protected:
00092
00093 elab_spec_key (
00094 ptr< ::lestes::std::source_location > a__as_base__location);
00095
00096
00097 virtual void gc_mark();
00098
00099 private:
00100 static ptr<reflection_list> reflection;
00101
00102 };
00103
00104
00105 class elab_spec_enum : public elab_spec_key {
00106 public:
00107
00108
00109 static ptr< elab_spec_enum > create (
00110 ptr< ::lestes::std::source_location > a__as_base__location);
00111
00112
00113
00114
00115 virtual ptr<reflection_list> reflection_get() const;
00116
00117 virtual ptr<field_list_list> field_values_get() const;
00118
00119 protected:
00120
00121 elab_spec_enum (
00122 ptr< ::lestes::std::source_location > a__as_base__location);
00123
00124
00125 virtual void gc_mark();
00126
00127 private:
00128 static ptr<reflection_list> reflection;
00129
00130 };
00131
00132
00133 class elab_spec_class_key : public elab_spec_key {
00134 public:
00135
00136 ptr< ::lestes::lang::cplus::sem::as_class_key > class_key_get() const;
00137
00138
00139 void class_key_set(const ptr< ::lestes::lang::cplus::sem::as_class_key > &);
00140
00141
00142
00143 static ptr< elab_spec_class_key > create (
00144 ptr< ::lestes::std::source_location > a__as_base__location,
00145 ptr< ::lestes::lang::cplus::sem::as_class_key > a__elab_spec_class_key__class_key);
00146
00147
00148
00149
00150 virtual ptr<reflection_list> reflection_get() const;
00151
00152 virtual ptr<field_list_list> field_values_get() const;
00153
00154 protected:
00155
00156 elab_spec_class_key (
00157 ptr< ::lestes::std::source_location > a__as_base__location,
00158 ptr< ::lestes::lang::cplus::sem::as_class_key > a__elab_spec_class_key__class_key);
00159
00160
00161 virtual void gc_mark();
00162
00163 private:
00164 srp< ::lestes::lang::cplus::sem::as_class_key > class_key;
00165 static ptr<reflection_list> reflection;
00166
00167 };
00168
00169
00170 class hint_from_declaration_set : public ::lestes::lang::cplus::sem::ss_declaration_visitor {
00171 public:
00172
00173 int result_get() const;
00174
00175
00176 void result_set(int);
00177
00178
00179 bool was_function_get() const;
00180
00181
00182 void was_function_set(bool);
00183
00184 int process(ptr< ::lestes::lang::cplus::sem::declaration_set_type > );
00185
00186 virtual void visit_ss_namespace_definition(ptr< ::lestes::lang::cplus::sem::ss_namespace_definition > );
00187
00188 virtual void visit_ss_object_declaration(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > );
00189
00190 virtual void visit_ss_bitfield_declaration(ptr< ::lestes::lang::cplus::sem::ss_bitfield_declaration > );
00191
00192 virtual void visit_ss_parameter_declaration(ptr< ::lestes::lang::cplus::sem::ss_parameter_declaration > );
00193
00194 virtual void visit_ss_fake_declaration(ptr< ::lestes::lang::cplus::sem::ss_fake_declaration > );
00195
00196 virtual void visit_ss_injected_class_declaration(ptr< ::lestes::lang::cplus::sem::ss_injected_class_declaration > );
00197
00198 virtual void visit_ss_enum_definition(ptr< ::lestes::lang::cplus::sem::ss_enum_definition > );
00199
00200 virtual void visit_ss_typedef_definition(ptr< ::lestes::lang::cplus::sem::ss_typedef_definition > );
00201
00202 virtual void visit_ss_enumerator_declaration(ptr< ::lestes::lang::cplus::sem::ss_enumerator_declaration > );
00203
00204 virtual void visit_ss_structure_declaration(ptr< ::lestes::lang::cplus::sem::ss_structure_declaration > );
00205
00206 virtual void visit_ss_function_declaration(ptr< ::lestes::lang::cplus::sem::ss_function_declaration > );
00207
00208 virtual void visit_ss_method_declaration(ptr< ::lestes::lang::cplus::sem::ss_method_declaration > );
00209
00210 virtual void visit_ss_using_declaration(ptr< ::lestes::lang::cplus::sem::ss_using_declaration > );
00211
00212 virtual void visit_ss_compound_stmt_declaration(ptr< ::lestes::lang::cplus::sem::ss_compound_stmt_declaration > );
00213
00214 virtual void visit_ss_builtin_operator_declaration(ptr< ::lestes::lang::cplus::sem::ss_builtin_operator_declaration > );
00215
00216
00217
00218 static ptr< hint_from_declaration_set > instance ();
00219
00220
00221
00222
00223 virtual ptr<reflection_list> reflection_get() const;
00224
00225 virtual ptr<field_list_list> field_values_get() const;
00226
00227 protected:
00228
00229 hint_from_declaration_set (
00230 int a__hint_from_declaration_set__result,
00231 bool a__hint_from_declaration_set__was_function);
00232
00233
00234 virtual void gc_mark();
00235
00236 private:
00237 int result;
00238 bool was_function;
00239 static ptr<reflection_list> reflection;
00240 static ptr<hint_from_declaration_set> the_instance;
00241
00242 };
00243
00244
00245 class typedef_class_resolver : public ::lestes::lang::cplus::sem::ss_type_default_visitor {
00246 public:
00247
00248 ptr< ::lestes::lang::cplus::sem::ss_declaration > decl_get() const;
00249
00250
00251 void decl_set(const ptr< ::lestes::lang::cplus::sem::ss_declaration > &);
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262 void visit_ss_struct_base(ptr< ::lestes::lang::cplus::sem::ss_struct_base > );
00263
00264 ptr< ::lestes::lang::cplus::sem::declaration_set_type > process(ptr< ::lestes::lang::cplus::sem::declaration_set_type > );
00265
00266 virtual void default_action(ptr< ::lestes::lang::cplus::sem::ss_type > );
00267
00268 virtual void visit_ss_class(ptr< ::lestes::lang::cplus::sem::ss_class > );
00269
00270 virtual void visit_ss_union(ptr< ::lestes::lang::cplus::sem::ss_union > );
00271
00272
00273
00274 static ptr< typedef_class_resolver > instance ();
00275
00276
00277
00278
00279 virtual ptr<reflection_list> reflection_get() const;
00280
00281 virtual ptr<field_list_list> field_values_get() const;
00282
00283 protected:
00284
00285 typedef_class_resolver (
00286 ptr< ::lestes::lang::cplus::sem::ss_declaration > a__typedef_class_resolver__decl);
00287
00288
00289 virtual void gc_mark();
00290
00291 private:
00292 srp< ::lestes::lang::cplus::sem::ss_declaration > decl;
00293 static ptr<reflection_list> reflection;
00294 static ptr<typedef_class_resolver> the_instance;
00295
00296 };
00297
00298
00299 end_package(syn);
00300 end_package(cplus);
00301 end_package(lang);
00302 end_package(lestes);
00303
00304 #endif // lestes__lang__cplus__syn__hinter_g_hh__included