00001
00002
00003 #ifndef lestes__lang__cplus__sem__ss_ss2pi_base_g_hh__included
00004 #define lestes__lang__cplus__sem__ss_ss2pi_base_g_hh__included
00005
00006 #include <lestes/common.hh>
00007 #include <lestes/lang/cplus/sem/ss_statement.g.hh>
00008 #include <lestes/lang/cplus/sem/ss_type_visitor.v.g.hh>
00009 #include <lestes/lang/cplus/sem/visitor.v.g.hh>
00010 #include <lestes/lang/cplus/sem/ss_declaration_visitor.v.g.hh>
00011 #include <lestes/lang/cplus/sem/ss_ss2pi_typedefs.hh>
00012
00013 #include <lestes/std/objectize_macros.hh>
00014 package(lestes);
00015 package(std);
00016 class object;
00017 end_package(std);
00018 end_package(lestes);
00019
00020 package(lestes);
00021 package(backend_v2);
00022 package(intercode);
00023 class pi_pi;
00024 end_package(intercode);
00025 end_package(backend_v2);
00026 end_package(lestes);
00027
00028 package(lestes);
00029 package(backend_v2);
00030 package(intercode);
00031 class pi_mem;
00032 end_package(intercode);
00033 end_package(backend_v2);
00034 end_package(lestes);
00035
00036 package(lestes);
00037 package(backend_v2);
00038 package(intercode);
00039 class pi_mem_ptr_deref;
00040 end_package(intercode);
00041 end_package(backend_v2);
00042 end_package(lestes);
00043
00044 package(lestes);
00045 package(backend_v2);
00046 package(intercode);
00047 class pi_preg;
00048 end_package(intercode);
00049 end_package(backend_v2);
00050 end_package(lestes);
00051
00052 package(lestes);
00053 package(backend_v2);
00054 package(intercode);
00055 class pi_sp;
00056 end_package(intercode);
00057 end_package(backend_v2);
00058 end_package(lestes);
00059
00060 package(lestes);
00061 package(backend_v2);
00062 package(intercode);
00063 class pi_operand;
00064 end_package(intercode);
00065 end_package(backend_v2);
00066 end_package(lestes);
00067
00068 package(lestes);
00069 package(backend_v2);
00070 package(intercode);
00071 class pi_mem_factory;
00072 end_package(intercode);
00073 end_package(backend_v2);
00074 end_package(lestes);
00075
00076 package(lestes);
00077 package(md);
00078 package(literals);
00079 class literal_info_base;
00080 end_package(literals);
00081 end_package(md);
00082 end_package(lestes);
00083
00084 package(lestes);
00085 package(lang);
00086 package(cplus);
00087 package(sem);
00088
00089
00090 class ss_function_declaration;
00091 class ss_declaration;
00092 class ss_stmt2pi_base;
00093 class ss_compound_stmt;
00094 class ss_type;
00095 class ss_sp;
00096 class ss_expression;
00097 class ss_decl_stmt;
00098 class ss_stmt2pi;
00099 class ss_decl2pi;
00100 class ss_decl2mem;
00101 class ss_type2destructor;
00102 class ss_expr2destination;
00103 class ss_expr2pi;
00104 class ss_destructor_table;
00105 class ss_destructor_tables;
00106 class ss_destructor_tables_stack;
00107 class ss_linfo2pi_linfo;
00108
00109
00110
00111 class ss_stmt2pi : public ss_statement_visitor {
00112 public:
00113
00114 ptr< ss_function_declaration > current_function_get() const;
00115
00116
00117 void current_function_set(const ptr< ss_function_declaration > &);
00118
00119
00120 ptr< variable_map_type > local_variable_map_get() const;
00121
00122
00123 void local_variable_map_set(const ptr< variable_map_type > &);
00124
00125
00126 ptr< variable_map_type > namespace_variable_map_get() const;
00127
00128
00129 void namespace_variable_map_set(const ptr< variable_map_type > &);
00130
00131
00132 void mem_variable_set(ptr< ss_declaration > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > );
00133
00134
00135 ptr< ::lestes::backend_v2::intercode::pi_mem_factory > mem_variable_get(ptr< ss_declaration > );
00136
00137 virtual void visit_ss_compound_stmt(ptr< ::lestes::lang::cplus::sem::ss_compound_stmt > );
00138
00139 virtual void visit_ss_decl_stmt(ptr< ::lestes::lang::cplus::sem::ss_decl_stmt > );
00140
00141 virtual void visit_ss_try(ptr< ::lestes::lang::cplus::sem::ss_try > );
00142
00143 virtual void visit_ss_break(ptr< ::lestes::lang::cplus::sem::ss_break > );
00144
00145 virtual void visit_ss_return(ptr< ::lestes::lang::cplus::sem::ss_return > );
00146
00147 virtual void visit_ss_goto(ptr< ::lestes::lang::cplus::sem::ss_goto > );
00148
00149 virtual void visit_ss_expr_stmt(ptr< ::lestes::lang::cplus::sem::ss_expr_stmt > );
00150
00151 virtual void visit_ss_continue(ptr< ::lestes::lang::cplus::sem::ss_continue > );
00152
00153 virtual void visit_ss_if_stmt(ptr< ::lestes::lang::cplus::sem::ss_if_stmt > );
00154
00155 virtual void visit_ss_catch(ptr< ::lestes::lang::cplus::sem::ss_catch > );
00156
00157 virtual void visit_ss_switch_stmt(ptr< ::lestes::lang::cplus::sem::ss_switch_stmt > );
00158
00159 virtual void visit_ss_do(ptr< ::lestes::lang::cplus::sem::ss_do > );
00160
00161 virtual void visit_ss_while(ptr< ::lestes::lang::cplus::sem::ss_while > );
00162
00163 virtual void visit_ss_for(ptr< ::lestes::lang::cplus::sem::ss_for > );
00164
00165
00166
00167 static ptr< ss_stmt2pi > create (
00168 ptr< ss_function_declaration > a__ss_stmt2pi__current_function,
00169 ptr< variable_map_type > a__ss_stmt2pi__local_variable_map,
00170 ptr< variable_map_type > a__ss_stmt2pi__namespace_variable_map);
00171
00172
00173
00174
00175 virtual ptr<reflection_list> reflection_get() const;
00176
00177 virtual ptr<field_list_list> field_values_get() const;
00178
00179 protected:
00180
00181 ss_stmt2pi (
00182 ptr< ss_function_declaration > a__ss_stmt2pi__current_function,
00183 ptr< variable_map_type > a__ss_stmt2pi__local_variable_map,
00184 ptr< variable_map_type > a__ss_stmt2pi__namespace_variable_map);
00185
00186
00187 virtual void gc_mark();
00188
00189 private:
00190
00191 srp< ss_function_declaration > current_function;
00192
00193
00194
00195
00196
00197
00198
00199 srp< variable_map_type > local_variable_map;
00200
00201 srp< variable_map_type > namespace_variable_map;
00202 static ptr<reflection_list> reflection;
00203
00204 };
00205
00206
00207
00208 class ss_decl2pi : public ss_decl2pi_default {
00209 public:
00210
00211 ptr< ss_stmt2pi > caller_get() const;
00212
00213
00214 void caller_set(const ptr< ss_stmt2pi > &);
00215
00216
00217 ptr< ss_decl_stmt > statement_get() const;
00218
00219
00220 void statement_set(const ptr< ss_decl_stmt > &);
00221
00222 virtual void default_action(ptr< ::lestes::lang::cplus::sem::ss_declaration > );
00223
00224 virtual void visit_ss_function_declaration(ptr< ::lestes::lang::cplus::sem::ss_function_declaration > );
00225
00226 virtual void visit_ss_object_declaration(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > );
00227
00228 virtual void visit_ss_structure_declaration(ptr< ::lestes::lang::cplus::sem::ss_structure_declaration > );
00229
00230
00231
00232 static ptr< ss_decl2pi > create (
00233 ptr< ss_stmt2pi > a__ss_decl2pi__caller,
00234 ptr< ss_decl_stmt > a__ss_decl2pi__statement);
00235
00236
00237
00238
00239 virtual ptr<reflection_list> reflection_get() const;
00240
00241 virtual ptr<field_list_list> field_values_get() const;
00242
00243 protected:
00244
00245 ss_decl2pi (
00246 ptr< ss_stmt2pi > a__ss_decl2pi__caller,
00247 ptr< ss_decl_stmt > a__ss_decl2pi__statement);
00248
00249
00250 virtual void gc_mark();
00251
00252 private:
00253
00254 srp< ss_stmt2pi > caller;
00255
00256 srp< ss_decl_stmt > statement;
00257 static ptr<reflection_list> reflection;
00258
00259 };
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269 class ss_decl2mem : public ss_decl2pi_default {
00270 public:
00271
00272 ptr< ss_stmt2pi > caller_get() const;
00273
00274
00275 void caller_set(const ptr< ss_stmt2pi > &);
00276
00277
00278 ptr< ::lestes::backend_v2::intercode::pi_mem_factory > result_get() const;
00279
00280
00281 void result_set(const ptr< ::lestes::backend_v2::intercode::pi_mem_factory > &);
00282
00283 virtual void default_action(ptr< ::lestes::lang::cplus::sem::ss_declaration > );
00284
00285 virtual void visit_ss_parameter_declaration(ptr< ::lestes::lang::cplus::sem::ss_parameter_declaration > );
00286
00287 virtual void visit_ss_fake_declaration(ptr< ::lestes::lang::cplus::sem::ss_fake_declaration > );
00288
00289 virtual void visit_ss_object_declaration(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > );
00290
00291
00292
00293 static ptr< ss_decl2mem > create (
00294 ptr< ss_stmt2pi > a__ss_decl2mem__caller,
00295 ptr< ::lestes::backend_v2::intercode::pi_mem_factory > a__ss_decl2mem__result);
00296
00297
00298 static ptr< ss_decl2mem > create (
00299 ptr< ss_stmt2pi > a__ss_decl2mem__caller);
00300
00301
00302
00303 ptr< ::lestes::backend_v2::intercode::pi_mem_factory > get_real_decl_mem( const ptr< ::lestes::lang::cplus::sem::ss_declaration > & );
00304
00305
00306 virtual ptr<reflection_list> reflection_get() const;
00307
00308 virtual ptr<field_list_list> field_values_get() const;
00309
00310 protected:
00311
00312 ss_decl2mem (
00313 ptr< ss_stmt2pi > a__ss_decl2mem__caller,
00314 ptr< ::lestes::backend_v2::intercode::pi_mem_factory > a__ss_decl2mem__result);
00315
00316
00317 virtual void gc_mark();
00318
00319 private:
00320
00321 srp< ss_stmt2pi > caller;
00322
00323 srp< ::lestes::backend_v2::intercode::pi_mem_factory > result;
00324 static ptr<reflection_list> reflection;
00325
00326 };
00327
00328
00329 class ss_type2destructor : public ss_type2destructor_base {
00330 public:
00331
00332 ptr< ss_function_declaration > destructor_get() const;
00333
00334
00335 void destructor_set(const ptr< ss_function_declaration > &);
00336
00337 virtual void default_destructor(ptr< ::lestes::lang::cplus::sem::ss_type > );
00338
00339 virtual void visit_ss_class(ptr< ::lestes::lang::cplus::sem::ss_class > );
00340
00341 virtual void visit_ss_union(ptr< ::lestes::lang::cplus::sem::ss_union > );
00342
00343
00344
00345 static ptr< ss_type2destructor > create (
00346 ptr< ss_function_declaration > a__ss_type2destructor__destructor);
00347
00348
00349 static ptr< ss_type2destructor > create (
00350 );
00351
00352
00353
00354 ptr< ss_function_declaration > find_destructor( const ptr< ::lestes::lang::cplus::sem::ss_type > & );
00355
00356
00357 virtual ptr<reflection_list> reflection_get() const;
00358
00359 virtual ptr<field_list_list> field_values_get() const;
00360
00361 protected:
00362
00363 ss_type2destructor (
00364 ptr< ss_function_declaration > a__ss_type2destructor__destructor);
00365
00366
00367 virtual void gc_mark();
00368
00369 private:
00370
00371
00372
00373
00374 srp< ss_function_declaration > destructor;
00375 static ptr<reflection_list> reflection;
00376
00377 };
00378
00379
00380
00381 class ss_expr2destination : public ss_expr2destination_base {
00382 public:
00383
00384 ptr< ss_expression > destination_get() const;
00385
00386
00387 void destination_set(const ptr< ss_expression > &);
00388
00389 virtual void default_destination(ptr< ::lestes::lang::cplus::sem::ss_expression > );
00390
00391 virtual void visit_ss_funcall(ptr< ::lestes::lang::cplus::sem::ss_funcall > );
00392
00393 virtual void visit_ss_assign(ptr< ::lestes::lang::cplus::sem::ss_assign > );
00394
00395 virtual void visit_ss_vol_get(ptr< ::lestes::lang::cplus::sem::ss_vol_get > );
00396
00397
00398
00399 static ptr< ss_expr2destination > create (
00400 ptr< ss_expression > a__ss_expr2destination__destination);
00401
00402
00403 static ptr< ss_expr2destination > create (
00404 );
00405
00406
00407
00408 ptr< ss_expression > get_destination( const ptr< ::lestes::lang::cplus::sem::ss_expression > & );
00409
00410
00411 virtual ptr<reflection_list> reflection_get() const;
00412
00413 virtual ptr<field_list_list> field_values_get() const;
00414
00415 protected:
00416
00417 ss_expr2destination (
00418 ptr< ss_expression > a__ss_expr2destination__destination);
00419
00420
00421 virtual void gc_mark();
00422
00423 private:
00424
00425
00426
00427
00428
00429
00430
00431
00432 srp< ss_expression > destination;
00433 static ptr<reflection_list> reflection;
00434
00435 };
00436
00437
00438
00439 class ss_expr2pi : public ss_expression_visitor {
00440 public:
00441
00442 ptr< ss_stmt2pi > caller_get() const;
00443
00444
00445 void caller_set(const ptr< ss_stmt2pi > &);
00446
00447
00448 ptr< ::lestes::backend_v2::intercode::pi_operand > result_get() const;
00449
00450
00451 void result_set(const ptr< ::lestes::backend_v2::intercode::pi_operand > &);
00452
00453
00454 ptr< ss_sp > psp_get() const;
00455
00456
00457 void psp_set(const ptr< ss_sp > &);
00458
00459
00460 ptr< ss_destructor_table > temporaries_get() const;
00461
00462
00463 void temporaries_set(const ptr< ss_destructor_table > &);
00464
00465
00466 ptr< expression_results_map_type > expr2operand_map_get() const;
00467
00468
00469 void expr2operand_map_set(const ptr< expression_results_map_type > &);
00470
00471
00472 bool returned_pointer_get() const;
00473
00474
00475 void returned_pointer_set(bool);
00476
00477
00478 bool evaluated(ptr< ss_expression > );
00479
00480
00481 ptr< ::lestes::backend_v2::intercode::pi_pi > compute_origin(ptr< ::lestes::backend_v2::intercode::pi_mem_factory > , ptr< ss_sp > );
00482
00483
00484 ptr< ::lestes::backend_v2::intercode::pi_preg > returns_preg(const ptr < ss_expression > & );
00485
00486 ptr< ::lestes::backend_v2::intercode::pi_mem > returns_mem(const ptr < ss_expression > & );
00487
00488 ptr< ::lestes::backend_v2::intercode::pi_mem_ptr_deref > returns_mem_pointer(const ptr < ss_expression > & );
00489
00490 bool is_returned_pointer(ptr< ss_expression > );
00491
00492 virtual void visit_ss_assign(ptr< ::lestes::lang::cplus::sem::ss_assign > );
00493
00494 virtual void visit_ss_add(ptr< ::lestes::lang::cplus::sem::ss_add > );
00495
00496 virtual void visit_ss_sub(ptr< ::lestes::lang::cplus::sem::ss_sub > );
00497
00498 virtual void visit_ss_mul(ptr< ::lestes::lang::cplus::sem::ss_mul > );
00499
00500 virtual void visit_ss_div(ptr< ::lestes::lang::cplus::sem::ss_div > );
00501
00502 virtual void visit_ss_mod(ptr< ::lestes::lang::cplus::sem::ss_mod > );
00503
00504 virtual void visit_ss_shr(ptr< ::lestes::lang::cplus::sem::ss_shr > );
00505
00506 virtual void visit_ss_shl(ptr< ::lestes::lang::cplus::sem::ss_shl > );
00507
00508 virtual void visit_ss_sbg(ptr< ::lestes::lang::cplus::sem::ss_sbg > );
00509
00510 virtual void visit_ss_sbl(ptr< ::lestes::lang::cplus::sem::ss_sbl > );
00511
00512 virtual void visit_ss_sbng(ptr< ::lestes::lang::cplus::sem::ss_sbng > );
00513
00514 virtual void visit_ss_sbnl(ptr< ::lestes::lang::cplus::sem::ss_sbnl > );
00515
00516 virtual void visit_ss_sbne(ptr< ::lestes::lang::cplus::sem::ss_sbne > );
00517
00518 virtual void visit_ss_sbe(ptr< ::lestes::lang::cplus::sem::ss_sbe > );
00519
00520 virtual void visit_ss_band(ptr< ::lestes::lang::cplus::sem::ss_band > );
00521
00522 virtual void visit_ss_bor(ptr< ::lestes::lang::cplus::sem::ss_bor > );
00523
00524 virtual void visit_ss_bxor(ptr< ::lestes::lang::cplus::sem::ss_bxor > );
00525
00526 virtual void visit_ss_land(ptr< ::lestes::lang::cplus::sem::ss_land > );
00527
00528 virtual void visit_ss_lor(ptr< ::lestes::lang::cplus::sem::ss_lor > );
00529
00530 virtual void visit_ss_arr_acc(ptr< ::lestes::lang::cplus::sem::ss_arr_acc > );
00531
00532 virtual void visit_ss_pfuncall(ptr< ::lestes::lang::cplus::sem::ss_pfuncall > );
00533
00534 virtual void visit_ss_funcall(ptr< ::lestes::lang::cplus::sem::ss_funcall > );
00535
00536 virtual void visit_ss_ifuncall(ptr< ::lestes::lang::cplus::sem::ss_ifuncall > );
00537
00538 virtual void visit_ss_mfuncall(ptr< ::lestes::lang::cplus::sem::ss_mfuncall > );
00539
00540 virtual void visit_ss_vfuncall(ptr< ::lestes::lang::cplus::sem::ss_vfuncall > );
00541
00542 virtual void visit_ss_dereference(ptr< ::lestes::lang::cplus::sem::ss_dereference > );
00543
00544 virtual void visit_ss_conversion(ptr< ::lestes::lang::cplus::sem::ss_conversion > );
00545
00546 virtual void visit_ss_array_to_pointer(ptr< ::lestes::lang::cplus::sem::ss_array_to_pointer > );
00547
00548 virtual void visit_ss_bind_reference(ptr< ::lestes::lang::cplus::sem::ss_bind_reference > );
00549
00550 virtual void visit_ss_bind_to_temporary(ptr< ::lestes::lang::cplus::sem::ss_bind_to_temporary > );
00551
00552 virtual void visit_ss_get(ptr< ::lestes::lang::cplus::sem::ss_get > );
00553
00554 virtual void visit_ss_vol_get(ptr< ::lestes::lang::cplus::sem::ss_vol_get > );
00555
00556 virtual void visit_ss_gat(ptr< ::lestes::lang::cplus::sem::ss_gat > );
00557
00558 virtual void visit_ss_neg(ptr< ::lestes::lang::cplus::sem::ss_neg > );
00559
00560 virtual void visit_ss_lnot(ptr< ::lestes::lang::cplus::sem::ss_lnot > );
00561
00562 virtual void visit_ss_bnot(ptr< ::lestes::lang::cplus::sem::ss_bnot > );
00563
00564 virtual void visit_ss_address_of(ptr< ::lestes::lang::cplus::sem::ss_address_of > );
00565
00566 virtual void visit_ss_this_expr(ptr< ::lestes::lang::cplus::sem::ss_this_expr > );
00567
00568 virtual void visit_ss_literal(ptr< ::lestes::lang::cplus::sem::ss_literal > );
00569
00570 virtual void visit_ss_ternary(ptr< ::lestes::lang::cplus::sem::ss_ternary > );
00571
00572 virtual void visit_ss_var_ref_by_qname(ptr< ::lestes::lang::cplus::sem::ss_var_ref_by_qname > );
00573
00574 virtual void visit_ss_var_ref(ptr< ::lestes::lang::cplus::sem::ss_var_ref > );
00575
00576 virtual void visit_ss_throw(ptr< ::lestes::lang::cplus::sem::ss_throw > );
00577
00578 virtual void visit_ss_member_ptr(ptr< ::lestes::lang::cplus::sem::ss_member_ptr > );
00579
00580 virtual void visit_ss_ptr_member_ptr(ptr< ::lestes::lang::cplus::sem::ss_ptr_member_ptr > );
00581
00582 virtual void visit_ss_access(ptr< ::lestes::lang::cplus::sem::ss_access > );
00583
00584 virtual void visit_ss_ptr_access(ptr< ::lestes::lang::cplus::sem::ss_ptr_access > );
00585
00586
00587
00588 static ptr< ss_expr2pi > create (
00589 ptr< ss_stmt2pi > a__ss_expr2pi__caller,
00590 ptr< ::lestes::backend_v2::intercode::pi_operand > a__ss_expr2pi__result,
00591 ptr< ss_sp > a__ss_expr2pi__psp,
00592 ptr< ss_destructor_table > a__ss_expr2pi__temporaries,
00593 ptr< expression_results_map_type > a__ss_expr2pi__expr2operand_map,
00594 bool a__ss_expr2pi__returned_pointer);
00595
00596
00597 static ptr< ss_expr2pi > create (
00598 ptr< ss_stmt2pi > a__ss_expr2pi__caller,
00599 ptr< ss_sp > a__ss_expr2pi__psp,
00600 ptr< ss_destructor_table > a__ss_expr2pi__temporaries,
00601 ptr< expression_results_map_type > a__ss_expr2pi__expr2operand_map);
00602
00603
00604
00605 ptr< ::lestes::backend_v2::intercode::pi_operand > returns( const ptr< ::lestes::lang::cplus::sem::ss_expression > & );
00606
00607
00608 virtual ptr<reflection_list> reflection_get() const;
00609
00610 virtual ptr<field_list_list> field_values_get() const;
00611
00612 protected:
00613
00614 ss_expr2pi (
00615 ptr< ss_stmt2pi > a__ss_expr2pi__caller,
00616 ptr< ::lestes::backend_v2::intercode::pi_operand > a__ss_expr2pi__result,
00617 ptr< ss_sp > a__ss_expr2pi__psp,
00618 ptr< ss_destructor_table > a__ss_expr2pi__temporaries,
00619 ptr< expression_results_map_type > a__ss_expr2pi__expr2operand_map,
00620 bool a__ss_expr2pi__returned_pointer);
00621
00622
00623 virtual void gc_mark();
00624
00625 private:
00626
00627 srp< ss_stmt2pi > caller;
00628
00629
00630
00631
00632
00633
00634
00635
00636 srp< ::lestes::backend_v2::intercode::pi_operand > result;
00637
00638
00639
00640
00641
00642
00643
00644
00645 srp< ss_sp > psp;
00646
00647
00648
00649
00650
00651
00652
00653 srp< ss_destructor_table > temporaries;
00654
00655
00656
00657
00658
00659
00660
00661 srp< expression_results_map_type > expr2operand_map;
00662
00663 bool returned_pointer;
00664 static ptr<reflection_list> reflection;
00665
00666 };
00667
00668
00669 class ss_destructor_table : public ::lestes::std::object {
00670 public:
00671
00672 ptr< ss_compound_stmt > compound_stmt_get() const;
00673
00674
00675 void compound_stmt_set(const ptr< ss_compound_stmt > &);
00676
00677
00678 ptr< ::lestes::std::list< srp< destructor_entry_type > > > destructors_get() const;
00679
00680
00681 void destructors_set(const ptr< ::lestes::std::list< srp< destructor_entry_type > > > & );
00682
00683 void destructor_add(ptr< ss_function_declaration > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > );
00684
00685
00686 virtual ptr< ::lestes::backend_v2::intercode::pi_sp > back_roll_table(ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp);
00687
00688
00689
00690 static ptr< ss_destructor_table > create (
00691 ptr< ss_compound_stmt > a__ss_destructor_table__compound_stmt,
00692 ptr< ::lestes::std::list< srp< destructor_entry_type > > > a__ss_destructor_table__destructors);
00693
00694
00695 static ptr< ss_destructor_table > create (
00696 ptr< ss_compound_stmt > a__ss_destructor_table__compound_stmt);
00697
00698
00699
00700
00701 virtual ptr<reflection_list> reflection_get() const;
00702
00703 virtual ptr<field_list_list> field_values_get() const;
00704
00705 protected:
00706
00707 ss_destructor_table (
00708 ptr< ss_compound_stmt > a__ss_destructor_table__compound_stmt,
00709 ptr< ::lestes::std::list< srp< destructor_entry_type > > > a__ss_destructor_table__destructors);
00710
00711
00712 virtual void gc_mark();
00713
00714 private:
00715
00716 srp< ss_compound_stmt > compound_stmt;
00717
00718
00719
00720 srp< ::lestes::std::list< srp< destructor_entry_type > > > destructors;
00721 static ptr<reflection_list> reflection;
00722
00723 };
00724
00725
00726 class ss_destructor_tables : public ::lestes::std::object {
00727 public:
00728
00729 static ptr< ss_destructor_tables > singleton_instance_get();
00730
00731
00732 static void singleton_instance_set(const ptr< ss_destructor_tables > &);
00733
00734 static ptr< ss_destructor_tables > instance();
00735
00736
00737 virtual ptr< ss_destructor_table > open_compound_stmt(ptr< ss_compound_stmt > ) abstract;
00738
00739
00740 virtual ptr< ss_destructor_table > close_compound_stmt() abstract;
00741
00742
00743 virtual void destructor_add(ptr< ss_type > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > ) abstract;
00744
00745
00746 virtual void destructor_add_to_destr(ptr< ss_destructor_table > , ptr< ss_type > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > ) abstract;
00747
00748
00749 virtual void back_roll_from_current_compound_stmt() abstract;
00750
00751
00752 virtual void back_roll_to_compound_stmt(ptr< ss_compound_stmt > , bool , ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp) abstract;
00753
00754
00755 virtual void back_roll_from_function(ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp) abstract;
00756
00757
00758
00759
00760 virtual ptr<reflection_list> reflection_get() const;
00761
00762 virtual ptr<field_list_list> field_values_get() const;
00763
00764 protected:
00765
00766 ss_destructor_tables (
00767 );
00768
00769
00770 virtual void gc_mark();
00771
00772 private:
00773 static ptr< ss_destructor_tables > singleton_instance;
00774 static ptr<reflection_list> reflection;
00775
00776 };
00777
00778
00779 class ss_destructor_tables_stack : public ss_destructor_tables {
00780 public:
00781
00782 static ptr< ss_destructor_table > current_get();
00783
00784
00785 static void current_set(const ptr< ss_destructor_table > &);
00786
00787
00788 static ptr< ::lestes::std::list< srp< ss_destructor_table > > > tables_get();
00789
00790
00791 static void tables_set(const ptr< ::lestes::std::list< srp< ss_destructor_table > > > & );
00792
00793 virtual ptr< ss_destructor_table > open_compound_stmt(ptr< ss_compound_stmt > );
00794
00795 virtual ptr< ss_destructor_table > close_compound_stmt();
00796
00797 virtual void destructor_add(ptr< ss_type > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > );
00798
00799 virtual void destructor_add_to_destr(ptr< ss_destructor_table > , ptr< ss_type > , ptr< ::lestes::backend_v2::intercode::pi_mem_factory > );
00800
00801 virtual void back_roll_from_current_compound_stmt();
00802
00803 virtual void back_roll_to_compound_stmt(ptr< ss_compound_stmt > , bool , ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp);
00804
00805 virtual void back_roll_from_function(ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp);
00806
00807
00808
00809 static ptr< ss_destructor_tables_stack > create (
00810 );
00811
00812
00813
00814
00815 virtual ptr<reflection_list> reflection_get() const;
00816
00817 virtual ptr<field_list_list> field_values_get() const;
00818
00819 protected:
00820
00821 ss_destructor_tables_stack (
00822 );
00823
00824
00825 virtual void gc_mark();
00826
00827 private:
00828
00829 static ptr< ss_destructor_table > current;
00830
00831 static ptr< ::lestes::std::list< srp< ss_destructor_table > > > tables;
00832 static ptr<reflection_list> reflection;
00833
00834 };
00835
00836
00837
00838 class ss_linfo2pi_linfo : public ss_literal_info_visitor {
00839 public:
00840
00841 ptr< ::lestes::md::literals::literal_info_base > pinfo_get() const;
00842
00843
00844 void pinfo_set(const ptr< ::lestes::md::literals::literal_info_base > &);
00845
00846 virtual void visit_ss_integral_literal_info(ptr< ::lestes::lang::cplus::sem::ss_integral_literal_info > );
00847
00848 virtual void visit_ss_floating_literal_info(ptr< ::lestes::lang::cplus::sem::ss_floating_literal_info > );
00849
00850 virtual void visit_ss_compound_literal_info(ptr< ::lestes::lang::cplus::sem::ss_compound_literal_info > );
00851
00852
00853
00854 static ptr< ss_linfo2pi_linfo > create (
00855 ptr< ::lestes::md::literals::literal_info_base > a__ss_linfo2pi_linfo__pinfo);
00856
00857
00858 static ptr< ss_linfo2pi_linfo > create (
00859 );
00860
00861
00862
00863 ptr< ::lestes::md::literals::literal_info_base > get_pinfo( const ptr< ::lestes::lang::cplus::sem::ss_literal_info > & );
00864
00865
00866 virtual ptr<reflection_list> reflection_get() const;
00867
00868 virtual ptr<field_list_list> field_values_get() const;
00869
00870 protected:
00871
00872 ss_linfo2pi_linfo (
00873 ptr< ::lestes::md::literals::literal_info_base > a__ss_linfo2pi_linfo__pinfo);
00874
00875
00876 virtual void gc_mark();
00877
00878 private:
00879
00880 srp< ::lestes::md::literals::literal_info_base > pinfo;
00881 static ptr<reflection_list> reflection;
00882
00883 };
00884
00885
00886 end_package(sem);
00887 end_package(cplus);
00888 end_package(lang);
00889 end_package(lestes);
00890
00891 #endif // lestes__lang__cplus__sem__ss_ss2pi_base_g_hh__included