00001
00002
00003 #ifndef lestes__lang__cplus__sem__or_ics_g_hh__included
00004 #define lestes__lang__cplus__sem__or_ics_g_hh__included
00005
00006 #include <lestes/common.hh>
00007 #include <lestes/std/list.hh>
00008 #include <lestes/std/set.hh>
00009 #include <lestes/lang/cplus/sem/or_visitor.v.g.hh>
00010
00011 #include <lestes/std/objectize_macros.hh>
00012 package(lestes);
00013 package(std);
00014 class object;
00015 end_package(std);
00016 end_package(lestes);
00017
00018 package(lestes);
00019 package(lang);
00020 package(cplus);
00021 package(sem);
00022
00023 enum rank_type {
00024 RANK_EXACT,
00025 RANK_PROMOTION,
00026 RANK_CONVERSION,
00027 RANK_USER
00028 };
00029
00030
00031 class ss_expression;
00032 class ss_type;
00033 class ss_sp;
00034 class ss_function_declaration;
00035 class or_or_functional;
00036 class or_ics_functional;
00037 class or_ics_functional_base;
00038 class or_ics_functional_for_std_conversion;
00039 class or_ics_functional_for_arr_ptr_conversion;
00040 class or_ics_functional_for_reference_bind_conversion;
00041 class or_ics_functional_for_bind_to_temporary_conversion;
00042 class or_ics_functional_for_lval_rval_conversion;
00043 class or_ics_functional_for_user_conversion_by_constructor;
00044 class or_ics_functional_for_user_conversion_by_conversion_function;
00045 class or_ics_functional_for_compound_conversion;
00046
00047
00048
00049 class or_ics_functional : public ::lestes::std::object {
00050 public:
00051
00052 lint rank_get() const;
00053
00054
00055 void rank_set(lint);
00056
00057
00058 ptr< ss_type > target_type_get() const;
00059
00060
00061 void target_type_set(const ptr< ss_type > &);
00062
00063
00064
00065
00066
00067
00068
00069
00070 virtual ptr< ss_expression > operator()(ptr< ss_expression > arg, ptr< ss_sp > psp, ptr< ss_sp > nsp);
00071
00072 virtual ptr< ::lestes::std::list< srp< ss_type > > > accept_or_ics_functional_base( ptr< or_ics_functional_base > v ) abstract;
00073
00074
00075
00076 virtual ptr<reflection_list> reflection_get() const;
00077
00078 virtual ptr<field_list_list> field_values_get() const;
00079
00080 protected:
00081
00082 or_ics_functional (
00083 lint a__or_ics_functional__rank,
00084 ptr< ss_type > a__or_ics_functional__target_type);
00085
00086
00087 virtual void gc_mark();
00088
00089 private:
00090 lint rank;
00091 srp< ss_type > target_type;
00092 static ptr<reflection_list> reflection;
00093
00094 };
00095
00096
00097 class or_ics_functional_for_std_conversion : public or_ics_functional {
00098 public:
00099
00100
00101
00102
00103
00104
00105
00106 virtual ptr< ss_expression > operator()(ptr< ss_expression > arg, ptr< ss_sp > psp, ptr< ss_sp > nsp);
00107
00108 virtual ptr< ::lestes::std::list< srp< ss_type > > > accept_or_ics_functional_base( ptr< or_ics_functional_base > v );
00109
00110
00111 static ptr< or_ics_functional_for_std_conversion > create (
00112 lint a__or_ics_functional__rank,
00113 ptr< ss_type > a__or_ics_functional__target_type);
00114
00115
00116
00117
00118 virtual ptr<reflection_list> reflection_get() const;
00119
00120 virtual ptr<field_list_list> field_values_get() const;
00121
00122 protected:
00123
00124 or_ics_functional_for_std_conversion (
00125 lint a__or_ics_functional__rank,
00126 ptr< ss_type > a__or_ics_functional__target_type);
00127
00128
00129 virtual void gc_mark();
00130
00131 private:
00132 static ptr<reflection_list> reflection;
00133
00134 };
00135
00136
00137 class or_ics_functional_for_arr_ptr_conversion : public or_ics_functional {
00138 public:
00139
00140
00141
00142
00143
00144
00145
00146 virtual ptr< ss_expression > operator()(ptr< ss_expression > arg, ptr< ss_sp > psp, ptr< ss_sp > nsp);
00147
00148 virtual ptr< ::lestes::std::list< srp< ss_type > > > accept_or_ics_functional_base( ptr< or_ics_functional_base > v );
00149
00150
00151 static ptr< or_ics_functional_for_arr_ptr_conversion > create (
00152 lint a__or_ics_functional__rank,
00153 ptr< ss_type > a__or_ics_functional__target_type);
00154
00155
00156
00157
00158 virtual ptr<reflection_list> reflection_get() const;
00159
00160 virtual ptr<field_list_list> field_values_get() const;
00161
00162 protected:
00163
00164 or_ics_functional_for_arr_ptr_conversion (
00165 lint a__or_ics_functional__rank,
00166 ptr< ss_type > a__or_ics_functional__target_type);
00167
00168
00169 virtual void gc_mark();
00170
00171 private:
00172 static ptr<reflection_list> reflection;
00173
00174 };
00175
00176
00177 class or_ics_functional_for_reference_bind_conversion : public or_ics_functional {
00178 public:
00179
00180
00181
00182
00183
00184
00185
00186 virtual ptr< ss_expression > operator()(ptr< ss_expression > arg, ptr< ss_sp > psp, ptr< ss_sp > nsp);
00187
00188 virtual ptr< ::lestes::std::list< srp< ss_type > > > accept_or_ics_functional_base( ptr< or_ics_functional_base > v );
00189
00190
00191 static ptr< or_ics_functional_for_reference_bind_conversion > create (
00192 lint a__or_ics_functional__rank,
00193 ptr< ss_type > a__or_ics_functional__target_type);
00194
00195
00196
00197
00198 virtual ptr<reflection_list> reflection_get() const;
00199
00200 virtual ptr<field_list_list> field_values_get() const;
00201
00202 protected:
00203
00204 or_ics_functional_for_reference_bind_conversion (
00205 lint a__or_ics_functional__rank,
00206 ptr< ss_type > a__or_ics_functional__target_type);
00207
00208
00209 virtual void gc_mark();
00210
00211 private:
00212 static ptr<reflection_list> reflection;
00213
00214 };
00215
00216
00217 class or_ics_functional_for_bind_to_temporary_conversion : public or_ics_functional {
00218 public:
00219
00220
00221
00222
00223
00224
00225
00226 virtual ptr< ss_expression > operator()(ptr< ss_expression > arg, ptr< ss_sp > psp, ptr< ss_sp > nsp);
00227
00228 virtual ptr< ::lestes::std::list< srp< ss_type > > > accept_or_ics_functional_base( ptr< or_ics_functional_base > v );
00229
00230
00231 static ptr< or_ics_functional_for_bind_to_temporary_conversion > create (
00232 lint a__or_ics_functional__rank,
00233 ptr< ss_type > a__or_ics_functional__target_type);
00234
00235
00236
00237
00238 virtual ptr<reflection_list> reflection_get() const;
00239
00240 virtual ptr<field_list_list> field_values_get() const;
00241
00242 protected:
00243
00244 or_ics_functional_for_bind_to_temporary_conversion (
00245 lint a__or_ics_functional__rank,
00246 ptr< ss_type > a__or_ics_functional__target_type);
00247
00248
00249 virtual void gc_mark();
00250
00251 private:
00252 static ptr<reflection_list> reflection;
00253
00254 };
00255
00256
00257 class or_ics_functional_for_lval_rval_conversion : public or_ics_functional {
00258 public:
00259
00260
00261
00262
00263
00264
00265
00266 virtual ptr< ss_expression > operator()(ptr< ss_expression > arg, ptr< ss_sp > psp, ptr< ss_sp > nsp);
00267
00268 virtual ptr< ::lestes::std::list< srp< ss_type > > > accept_or_ics_functional_base( ptr< or_ics_functional_base > v );
00269
00270
00271 static ptr< or_ics_functional_for_lval_rval_conversion > create (
00272 lint a__or_ics_functional__rank,
00273 ptr< ss_type > a__or_ics_functional__target_type);
00274
00275
00276
00277
00278 virtual ptr<reflection_list> reflection_get() const;
00279
00280 virtual ptr<field_list_list> field_values_get() const;
00281
00282 protected:
00283
00284 or_ics_functional_for_lval_rval_conversion (
00285 lint a__or_ics_functional__rank,
00286 ptr< ss_type > a__or_ics_functional__target_type);
00287
00288
00289 virtual void gc_mark();
00290
00291 private:
00292 static ptr<reflection_list> reflection;
00293
00294 };
00295
00296
00297 class or_ics_functional_for_user_conversion_by_constructor : public or_ics_functional {
00298 public:
00299
00300 ptr< ss_function_declaration > used_constructor_get() const;
00301
00302
00303 void used_constructor_set(const ptr< ss_function_declaration > &);
00304
00305
00306
00307
00308
00309
00310
00311
00312 virtual ptr< ss_expression > operator()(ptr< ss_expression > arg, ptr< ss_sp > psp, ptr< ss_sp > nsp);
00313
00314 virtual ptr< ::lestes::std::list< srp< ss_type > > > accept_or_ics_functional_base( ptr< or_ics_functional_base > v );
00315
00316
00317 static ptr< or_ics_functional_for_user_conversion_by_constructor > create (
00318 lint a__or_ics_functional__rank,
00319 ptr< ss_type > a__or_ics_functional__target_type,
00320 ptr< ss_function_declaration > a__or_ics_functional_for_user_conversion_by_constructor__used_constructor);
00321
00322
00323
00324
00325 virtual ptr<reflection_list> reflection_get() const;
00326
00327 virtual ptr<field_list_list> field_values_get() const;
00328
00329 protected:
00330
00331 or_ics_functional_for_user_conversion_by_constructor (
00332 lint a__or_ics_functional__rank,
00333 ptr< ss_type > a__or_ics_functional__target_type,
00334 ptr< ss_function_declaration > a__or_ics_functional_for_user_conversion_by_constructor__used_constructor);
00335
00336
00337 virtual void gc_mark();
00338
00339 private:
00340 srp< ss_function_declaration > used_constructor;
00341 static ptr<reflection_list> reflection;
00342
00343 };
00344
00345
00346 class or_ics_functional_for_user_conversion_by_conversion_function : public or_ics_functional {
00347 public:
00348
00349 ptr< ss_function_declaration > used_conversion_function_get() const;
00350
00351
00352 void used_conversion_function_set(const ptr< ss_function_declaration > &);
00353
00354
00355
00356
00357
00358
00359
00360
00361 virtual ptr< ss_expression > operator()(ptr< ss_expression > arg, ptr< ss_sp > psp, ptr< ss_sp > nsp);
00362
00363 virtual ptr< ::lestes::std::list< srp< ss_type > > > accept_or_ics_functional_base( ptr< or_ics_functional_base > v );
00364
00365
00366 static ptr< or_ics_functional_for_user_conversion_by_conversion_function > create (
00367 lint a__or_ics_functional__rank,
00368 ptr< ss_type > a__or_ics_functional__target_type,
00369 ptr< ss_function_declaration > a__or_ics_functional_for_user_conversion_by_conversion_function__used_conversion_function);
00370
00371
00372
00373
00374 virtual ptr<reflection_list> reflection_get() const;
00375
00376 virtual ptr<field_list_list> field_values_get() const;
00377
00378 protected:
00379
00380 or_ics_functional_for_user_conversion_by_conversion_function (
00381 lint a__or_ics_functional__rank,
00382 ptr< ss_type > a__or_ics_functional__target_type,
00383 ptr< ss_function_declaration > a__or_ics_functional_for_user_conversion_by_conversion_function__used_conversion_function);
00384
00385
00386 virtual void gc_mark();
00387
00388 private:
00389 srp< ss_function_declaration > used_conversion_function;
00390 static ptr<reflection_list> reflection;
00391
00392 };
00393
00394
00395 class or_ics_functional_for_compound_conversion : public or_ics_functional {
00396 public:
00397
00398 ptr< or_ics_functional > outter_conversion_get() const;
00399
00400
00401 void outter_conversion_set(const ptr< or_ics_functional > &);
00402
00403
00404 ptr< or_ics_functional > inner_conversion_get() const;
00405
00406
00407 void inner_conversion_set(const ptr< or_ics_functional > &);
00408
00409
00410
00411
00412
00413
00414
00415
00416 virtual ptr< ss_expression > operator()(ptr< ss_expression > arg, ptr< ss_sp > psp, ptr< ss_sp > nsp);
00417
00418 virtual ptr< ::lestes::std::list< srp< ss_type > > > accept_or_ics_functional_base( ptr< or_ics_functional_base > v );
00419
00420
00421 static ptr< or_ics_functional_for_compound_conversion > create (
00422 lint a__or_ics_functional__rank,
00423 ptr< ss_type > a__or_ics_functional__target_type,
00424 ptr< or_ics_functional > a__or_ics_functional_for_compound_conversion__outter_conversion,
00425 ptr< or_ics_functional > a__or_ics_functional_for_compound_conversion__inner_conversion);
00426
00427
00428
00429
00430 virtual ptr<reflection_list> reflection_get() const;
00431
00432 virtual ptr<field_list_list> field_values_get() const;
00433
00434 protected:
00435
00436 or_ics_functional_for_compound_conversion (
00437 lint a__or_ics_functional__rank,
00438 ptr< ss_type > a__or_ics_functional__target_type,
00439 ptr< or_ics_functional > a__or_ics_functional_for_compound_conversion__outter_conversion,
00440 ptr< or_ics_functional > a__or_ics_functional_for_compound_conversion__inner_conversion);
00441
00442
00443 virtual void gc_mark();
00444
00445 private:
00446 srp< or_ics_functional > outter_conversion;
00447 srp< or_ics_functional > inner_conversion;
00448 static ptr<reflection_list> reflection;
00449
00450 };
00451
00452
00453
00454
00455
00456 end_package(sem);
00457 end_package(cplus);
00458 end_package(lang);
00459 end_package(lestes);
00460
00461 package(lestes);
00462 package(std);
00463 specialize_objectize_for_enum( ::lestes::lang::cplus::sem::rank_type );
00464 end_package(std);
00465 end_package(lestes);
00466
00467 #endif // lestes__lang__cplus__sem__or_ics_g_hh__included