00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef lestes__lang__cplus__sem__ss_type2info_g_hh__included
00010 #define lestes__lang__cplus__sem__ss_type2info_g_hh__included
00011
00012 #include <lestes/common.hh>
00013 #include <lestes/std/list.hh>
00014 #include <lestes/lang/cplus/sem/ss_type_visitor.v.g.hh>
00015
00016 #include <lestes/std/objectize_macros.hh>
00017 package(lestes);
00018 package(lang);
00019 package(cplus);
00020 package(sem);
00021
00022
00023 class ss_const;
00024 class ss_volatile;
00025 class ss_struct_base;
00026 class ss_builtin_type;
00027 class ss_type;
00028 class ss_type2info;
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 class ss_type2info : public ss_type2info_base {
00039 public:
00040 enum info_type {
00041 UNKNOWN,
00042 SS_CONST,
00043 SS_VOLATILE,
00044 SS_CONST_VOLATILE,
00045 SS_POINTER,
00046 SS_MEMBER_POINTER,
00047 SS_REFERENCE,
00048 SS_PSEUDOREFERENCE,
00049 SS_FUNCTION
00050 };
00051
00052
00053 info_type info_get() const;
00054
00055
00056 ptr< ss_const > ss_const_object_get() const;
00057
00058
00059 ptr< ss_volatile > ss_volatile_object_get() const;
00060
00061
00062
00063
00064
00065
00066
00067
00068 void default_ss_struct_base(ptr< ss_struct_base > obj);
00069
00070
00071
00072
00073
00074
00075
00076
00077 void default_ss_builtin_type(ptr< ss_builtin_type > obj);
00078
00079 virtual void visit_ss_const(ptr< ::lestes::lang::cplus::sem::ss_const > );
00080
00081 virtual void visit_ss_volatile(ptr< ::lestes::lang::cplus::sem::ss_volatile > );
00082
00083 virtual void visit_ss_const_volatile(ptr< ::lestes::lang::cplus::sem::ss_const_volatile > );
00084
00085 virtual void visit_ss_reference(ptr< ::lestes::lang::cplus::sem::ss_reference > );
00086
00087 virtual void visit_ss_pseudoreference(ptr< ::lestes::lang::cplus::sem::ss_pseudoreference > );
00088
00089 virtual void visit_ss_pointer(ptr< ::lestes::lang::cplus::sem::ss_pointer > );
00090
00091 virtual void visit_ss_enum(ptr< ::lestes::lang::cplus::sem::ss_enum > );
00092
00093 virtual void visit_ss_array(ptr< ::lestes::lang::cplus::sem::ss_array > );
00094
00095 virtual void visit_ss_member_pointer(ptr< ::lestes::lang::cplus::sem::ss_member_pointer > );
00096
00097 virtual void visit_ss_function(ptr< ::lestes::lang::cplus::sem::ss_function > );
00098
00099 virtual void visit_ss_member_function(ptr< ::lestes::lang::cplus::sem::ss_member_function > );
00100
00101
00102
00103 static ptr< ss_type2info > create (
00104 info_type a__ss_type2info__info,
00105 ptr< ss_const > a__ss_type2info__ss_const_object,
00106 ptr< ss_volatile > a__ss_type2info__ss_volatile_object);
00107
00108
00109 static ptr< ss_type2info > create (
00110 );
00111
00112
00113
00114 info_type process( const ptr< ::lestes::lang::cplus::sem::ss_type > & );
00115
00116
00117 virtual ptr<reflection_list> reflection_get() const;
00118
00119 virtual ptr<field_list_list> field_values_get() const;
00120
00121 protected:
00122
00123 ss_type2info (
00124 info_type a__ss_type2info__info,
00125 ptr< ss_const > a__ss_type2info__ss_const_object,
00126 ptr< ss_volatile > a__ss_type2info__ss_volatile_object);
00127
00128
00129 virtual void gc_mark();
00130
00131 private:
00132
00133
00134
00135
00136 info_type info;
00137
00138
00139
00140
00141 srp< ss_const > ss_const_object;
00142
00143
00144
00145
00146 srp< ss_volatile > ss_volatile_object;
00147 static ptr<reflection_list> reflection;
00148
00149 };
00150
00151
00152 end_package(sem);
00153 end_package(cplus);
00154 end_package(lang);
00155 end_package(lestes);
00156
00157 package(lestes);
00158 package(std);
00159 specialize_objectize_for_enum( ::lestes::lang::cplus::sem::ss_type2info::info_type );
00160 end_package(std);
00161 end_package(lestes);
00162
00163 #endif // lestes__lang__cplus__sem__ss_type2info_g_hh__included