00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef lestes__lang__cplus__sem__ss_literal_info_g_hh__included
00013 #define lestes__lang__cplus__sem__ss_literal_info_g_hh__included
00014
00015 #include <lestes/common.hh>
00016 #include <lestes/intercode/intercode.g.hh>
00017
00018 #include <lestes/std/objectize_macros.hh>
00019 package(lestes);
00020 package(lang);
00021 package(cplus);
00022 package(sem);
00023
00024
00025
00026
00027
00028
00029
00030 class ss_type;
00031 class ss_literal_info;
00032 class ss_literal_info_visitor;
00033 class ss_integral_literal_info;
00034 class ss_floating_literal_info;
00035 class ss_compound_literal_info;
00036
00037
00038
00039 class ss_literal_info : public ::lestes::intercode::ss_base {
00040 public:
00041
00042 ptr< ss_type > type_get() const;
00043
00044
00045 void type_set(const ptr< ss_type > &);
00046
00047 virtual void accept_ss_literal_info_visitor( ptr< ss_literal_info_visitor > v ) abstract;
00048
00049
00050
00051 virtual ptr<reflection_list> reflection_get() const;
00052
00053 virtual ptr<field_list_list> field_values_get() const;
00054
00055 protected:
00056
00057 ss_literal_info (
00058 ptr< ss_type > a__ss_literal_info__type);
00059
00060
00061 virtual void gc_mark();
00062
00063 private:
00064 srp< ss_type > type;
00065 static ptr<reflection_list> reflection;
00066
00067 };
00068
00069
00070 class ss_integral_literal_info : public ss_literal_info {
00071 public:
00072
00073 ucn_string data_get() const;
00074
00075
00076 void data_set(ucn_string);
00077
00078 static ptr< ss_integral_literal_info > create_from_number(ptr< ss_type > type, t_size value);
00079
00080 virtual void accept_ss_literal_info_visitor( ptr< ss_literal_info_visitor > v );
00081
00082
00083 static ptr< ss_integral_literal_info > create (
00084 ptr< ss_type > a__ss_literal_info__type,
00085 ucn_string a__ss_integral_literal_info__data);
00086
00087
00088
00089
00090 virtual ptr<reflection_list> reflection_get() const;
00091
00092 virtual ptr<field_list_list> field_values_get() const;
00093
00094 protected:
00095
00096 ss_integral_literal_info (
00097 ptr< ss_type > a__ss_literal_info__type,
00098 ucn_string a__ss_integral_literal_info__data);
00099
00100
00101 virtual void gc_mark();
00102
00103 private:
00104 ucn_string data;
00105 static ptr<reflection_list> reflection;
00106
00107 };
00108
00109
00110 class ss_floating_literal_info : public ss_literal_info {
00111 public:
00112 enum sign_type {
00113 S_POSITIVE,
00114 S_NEGATIVE
00115 };
00116
00117
00118 sign_type sign_get() const;
00119
00120
00121 void sign_set(sign_type);
00122
00123
00124 ucn_string mantissa_get() const;
00125
00126
00127 void mantissa_set(ucn_string);
00128
00129
00130 ulint mantissa_base_get() const;
00131
00132
00133 void mantissa_base_set(ulint);
00134
00135
00136 sign_type exponent_sign_get() const;
00137
00138
00139 void exponent_sign_set(sign_type);
00140
00141
00142 ucn_string exponent_get() const;
00143
00144
00145 void exponent_set(ucn_string);
00146
00147
00148 ulint exponent_base_get() const;
00149
00150
00151 void exponent_base_set(ulint);
00152
00153
00154 ulint radix_get() const;
00155
00156
00157 void radix_set(ulint);
00158
00159 virtual void accept_ss_literal_info_visitor( ptr< ss_literal_info_visitor > v );
00160
00161
00162 static ptr< ss_floating_literal_info > create (
00163 ptr< ss_type > a__ss_literal_info__type,
00164 sign_type a__ss_floating_literal_info__sign,
00165 ucn_string a__ss_floating_literal_info__mantissa,
00166 ulint a__ss_floating_literal_info__mantissa_base,
00167 sign_type a__ss_floating_literal_info__exponent_sign,
00168 ucn_string a__ss_floating_literal_info__exponent,
00169 ulint a__ss_floating_literal_info__exponent_base,
00170 ulint a__ss_floating_literal_info__radix);
00171
00172
00173 static ptr< ss_floating_literal_info > create (
00174 ptr< ss_type > a__ss_literal_info__type,
00175 sign_type a__ss_floating_literal_info__sign,
00176 ucn_string a__ss_floating_literal_info__mantissa,
00177 sign_type a__ss_floating_literal_info__exponent_sign,
00178 ucn_string a__ss_floating_literal_info__exponent);
00179
00180
00181
00182
00183 virtual ptr<reflection_list> reflection_get() const;
00184
00185 virtual ptr<field_list_list> field_values_get() const;
00186
00187 protected:
00188
00189 ss_floating_literal_info (
00190 ptr< ss_type > a__ss_literal_info__type,
00191 sign_type a__ss_floating_literal_info__sign,
00192 ucn_string a__ss_floating_literal_info__mantissa,
00193 ulint a__ss_floating_literal_info__mantissa_base,
00194 sign_type a__ss_floating_literal_info__exponent_sign,
00195 ucn_string a__ss_floating_literal_info__exponent,
00196 ulint a__ss_floating_literal_info__exponent_base,
00197 ulint a__ss_floating_literal_info__radix);
00198
00199
00200 virtual void gc_mark();
00201
00202 private:
00203 sign_type sign;
00204 ucn_string mantissa;
00205 ulint mantissa_base;
00206 sign_type exponent_sign;
00207 ucn_string exponent;
00208 ulint exponent_base;
00209 ulint radix;
00210 static ptr<reflection_list> reflection;
00211
00212 };
00213
00214
00215
00216
00217
00218
00219 class ss_compound_literal_info : public ss_literal_info {
00220 public:
00221
00222 ptr< ::lestes::std::list< srp< ss_literal_info > > > constituents_get() const;
00223
00224 virtual void accept_ss_literal_info_visitor( ptr< ss_literal_info_visitor > v );
00225
00226
00227 static ptr< ss_compound_literal_info > create (
00228 ptr< ss_type > a__ss_literal_info__type,
00229 ptr< ::lestes::std::list< srp< ss_literal_info > > > a__ss_compound_literal_info__constituents);
00230
00231
00232
00233
00234 virtual ptr<reflection_list> reflection_get() const;
00235
00236 virtual ptr<field_list_list> field_values_get() const;
00237
00238 protected:
00239
00240 ss_compound_literal_info (
00241 ptr< ss_type > a__ss_literal_info__type,
00242 ptr< ::lestes::std::list< srp< ss_literal_info > > > a__ss_compound_literal_info__constituents);
00243
00244
00245 virtual void gc_mark();
00246
00247 private:
00248
00249 srp< ::lestes::std::list< srp< ss_literal_info > > > constituents;
00250 static ptr<reflection_list> reflection;
00251
00252 };
00253
00254
00255 end_package(sem);
00256 end_package(cplus);
00257 end_package(lang);
00258 end_package(lestes);
00259
00260 package(lestes);
00261 package(std);
00262 specialize_objectize_for_enum( ::lestes::lang::cplus::sem::ss_floating_literal_info::sign_type );
00263 end_package(std);
00264 end_package(lestes);
00265
00266 #endif // lestes__lang__cplus__sem__ss_literal_info_g_hh__included