00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef lestes__lang__cplus__sem__ss_type2id_g_hh__included
00010 #define lestes__lang__cplus__sem__ss_type2id_g_hh__included
00011
00012 #include <lestes/common.hh>
00013 #include <lestes/lang/cplus/sem/ss_type_visitor.v.g.hh>
00014
00015 #include <lestes/std/objectize_macros.hh>
00016 package(lestes);
00017 package(lang);
00018 package(cplus);
00019 package(sem);
00020
00021
00022 class ss_type2id;
00023
00024
00025
00026 class ss_type2id : public ss_type_visitor {
00027 public:
00028 enum id_type {
00029 UNION,
00030 CONST,
00031 VOLATILE,
00032 CONST_VOLATILE,
00033 POINTER,
00034 REFERENCE,
00035 PSEUDOREFERENCE,
00036 ENUM,
00037 ARRAY,
00038 MEMBER_POINTER,
00039 FUNCTION,
00040 MEMBER_FUNCTION,
00041 CLASS,
00042 BOOL,
00043 VOID,
00044 SINT,
00045 UINT,
00046 SLONG,
00047 ULONG,
00048 SSHORT,
00049 USHORT,
00050 SCHAR,
00051 UCHAR,
00052 PCHAR,
00053 WCHAR_T,
00054 FLOAT,
00055 DOUBLE,
00056 LDOUBLE
00057 };
00058
00059
00060 id_type ret_val_get() const;
00061
00062
00063 void ret_val_set(id_type);
00064
00065
00066 static ptr< ss_type2id > singleton_instance_get();
00067
00068
00069 static void singleton_instance_set(const ptr< ss_type2id > &);
00070
00071 static ptr< ss_type2id > instance();
00072
00073 virtual void visit_ss_const(ptr< ::lestes::lang::cplus::sem::ss_const > );
00074
00075 virtual void visit_ss_volatile(ptr< ::lestes::lang::cplus::sem::ss_volatile > );
00076
00077 virtual void visit_ss_const_volatile(ptr< ::lestes::lang::cplus::sem::ss_const_volatile > );
00078
00079 virtual void visit_ss_reference(ptr< ::lestes::lang::cplus::sem::ss_reference > );
00080
00081 virtual void visit_ss_pseudoreference(ptr< ::lestes::lang::cplus::sem::ss_pseudoreference > );
00082
00083 virtual void visit_ss_pointer(ptr< ::lestes::lang::cplus::sem::ss_pointer > );
00084
00085 virtual void visit_ss_enum(ptr< ::lestes::lang::cplus::sem::ss_enum > );
00086
00087 virtual void visit_ss_array(ptr< ::lestes::lang::cplus::sem::ss_array > );
00088
00089 virtual void visit_ss_member_pointer(ptr< ::lestes::lang::cplus::sem::ss_member_pointer > );
00090
00091 virtual void visit_ss_function(ptr< ::lestes::lang::cplus::sem::ss_function > );
00092
00093 virtual void visit_ss_member_function(ptr< ::lestes::lang::cplus::sem::ss_member_function > );
00094
00095 virtual void visit_ss_class(ptr< ::lestes::lang::cplus::sem::ss_class > );
00096
00097 virtual void visit_ss_union(ptr< ::lestes::lang::cplus::sem::ss_union > );
00098
00099 virtual void visit_ss_bool(ptr< ::lestes::lang::cplus::sem::ss_bool > );
00100
00101 virtual void visit_ss_void(ptr< ::lestes::lang::cplus::sem::ss_void > );
00102
00103 virtual void visit_ss_type_sint(ptr< ::lestes::lang::cplus::sem::ss_type_sint > );
00104
00105 virtual void visit_ss_type_uint(ptr< ::lestes::lang::cplus::sem::ss_type_uint > );
00106
00107 virtual void visit_ss_type_slong(ptr< ::lestes::lang::cplus::sem::ss_type_slong > );
00108
00109 virtual void visit_ss_type_ulong(ptr< ::lestes::lang::cplus::sem::ss_type_ulong > );
00110
00111 virtual void visit_ss_type_sshort(ptr< ::lestes::lang::cplus::sem::ss_type_sshort > );
00112
00113 virtual void visit_ss_type_ushort(ptr< ::lestes::lang::cplus::sem::ss_type_ushort > );
00114
00115 virtual void visit_ss_type_wchar_t(ptr< ::lestes::lang::cplus::sem::ss_type_wchar_t > );
00116
00117 virtual void visit_ss_type_schar(ptr< ::lestes::lang::cplus::sem::ss_type_schar > );
00118
00119 virtual void visit_ss_type_uchar(ptr< ::lestes::lang::cplus::sem::ss_type_uchar > );
00120
00121 virtual void visit_ss_type_pchar(ptr< ::lestes::lang::cplus::sem::ss_type_pchar > );
00122
00123 virtual void visit_ss_type_float(ptr< ::lestes::lang::cplus::sem::ss_type_float > );
00124
00125 virtual void visit_ss_type_double(ptr< ::lestes::lang::cplus::sem::ss_type_double > );
00126
00127 virtual void visit_ss_type_ldouble(ptr< ::lestes::lang::cplus::sem::ss_type_ldouble > );
00128
00129
00130
00131 static ptr< ss_type2id > create (
00132 id_type a__ss_type2id__ret_val);
00133
00134
00135 static ptr< ss_type2id > create (
00136 );
00137
00138
00139
00140 id_type process( const ptr< ::lestes::lang::cplus::sem::ss_type > & );
00141
00142
00143 virtual ptr<reflection_list> reflection_get() const;
00144
00145 virtual ptr<field_list_list> field_values_get() const;
00146
00147 protected:
00148
00149 ss_type2id (
00150 id_type a__ss_type2id__ret_val);
00151
00152
00153 virtual void gc_mark();
00154
00155 private:
00156 id_type ret_val;
00157 static ptr< ss_type2id > singleton_instance;
00158 static ptr<reflection_list> reflection;
00159
00160 };
00161
00162
00163 end_package(sem);
00164 end_package(cplus);
00165 end_package(lang);
00166 end_package(lestes);
00167
00168 package(lestes);
00169 package(std);
00170 specialize_objectize_for_enum( ::lestes::lang::cplus::sem::ss_type2id::id_type );
00171 end_package(std);
00172 end_package(lestes);
00173
00174 #endif // lestes__lang__cplus__sem__ss_type2id_g_hh__included