00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef lestes__lang__cplus__sem__ss_expression_g_hh__included
00013 #define lestes__lang__cplus__sem__ss_expression_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(lex);
00023 class token_value;
00024 end_package(lex);
00025 end_package(cplus);
00026 end_package(lang);
00027 end_package(lestes);
00028
00029 package(lestes);
00030 package(backend_v2);
00031 package(intercode);
00032 class pi_preg;
00033 end_package(intercode);
00034 end_package(backend_v2);
00035 end_package(lestes);
00036
00037 package(lestes);
00038 package(backend_v2);
00039 package(intercode);
00040 class pi_operand;
00041 end_package(intercode);
00042 end_package(backend_v2);
00043 end_package(lestes);
00044
00045 package(lestes);
00046 package(lang);
00047 package(cplus);
00048 package(sem);
00049
00050
00051
00052
00053
00054
00055
00056 class ss_sp;
00057 class ss_declaration;
00058 class ss_statement;
00059 class ss_type;
00060 class as_name;
00061 class ss_decl_seq;
00062 class ss_literal_info;
00063 class ss_declaration_time;
00064 class ss_expr2pi_base;
00065 class ::lestes::backend_v2::intercode::pi_preg;
00066 class ss_expression;
00067 class ss_expression_visitor;
00068 class ss_this_expr;
00069 class ss_literal;
00070 class ss_ternary;
00071 class ss_var_ref_abstract;
00072 class ss_var_ref_by_qname;
00073 class ss_var_ref;
00074 class ss_throw;
00075 class ss_member_ptr;
00076 class ss_ptr_member_ptr;
00077 class ss_access;
00078 class ss_ptr_access;
00079 class ss_binary_expr;
00080
00081
00082
00083 class ss_expression : public ::lestes::intercode::ss_base_with_location {
00084 public:
00085
00086 ptr< ss_type > type_get() const;
00087
00088
00089 void type_set(const ptr< ss_type > &);
00090
00091
00092 ptr< ss_sp > psp_get() const;
00093
00094
00095 void psp_set(const ptr< ss_sp > &);
00096
00097
00098 ptr< ss_sp > nsp_get() const;
00099
00100
00101 void nsp_set(const ptr< ss_sp > &);
00102
00103
00104 virtual bool is_lvalue();
00105
00106 virtual int get_value();
00107
00108 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v ) abstract;
00109
00110
00111
00112 virtual ptr<reflection_list> reflection_get() const;
00113
00114 virtual ptr<field_list_list> field_values_get() const;
00115
00116 protected:
00117
00118 ss_expression (
00119 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00120 ptr< ss_type > a__ss_expression__type,
00121 ptr< ss_sp > a__ss_expression__psp,
00122 ptr< ss_sp > a__ss_expression__nsp);
00123
00124
00125 virtual void gc_mark();
00126
00127 private:
00128 srp< ss_type > type;
00129 srp< ss_sp > psp;
00130 srp< ss_sp > nsp;
00131 static ptr<reflection_list> reflection;
00132
00133 };
00134
00135
00136
00137 class ss_this_expr : public ss_expression {
00138 public:
00139 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00140
00141
00142 static ptr< ss_this_expr > create (
00143 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00144 ptr< ss_type > a__ss_expression__type,
00145 ptr< ss_sp > a__ss_expression__psp,
00146 ptr< ss_sp > a__ss_expression__nsp);
00147
00148
00149
00150
00151 virtual ptr<reflection_list> reflection_get() const;
00152
00153 virtual ptr<field_list_list> field_values_get() const;
00154
00155 protected:
00156
00157 ss_this_expr (
00158 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00159 ptr< ss_type > a__ss_expression__type,
00160 ptr< ss_sp > a__ss_expression__psp,
00161 ptr< ss_sp > a__ss_expression__nsp);
00162
00163
00164 virtual void gc_mark();
00165
00166 private:
00167 static ptr<reflection_list> reflection;
00168
00169 };
00170
00171
00172
00173 class ss_literal : public ss_expression {
00174 public:
00175
00176 ptr< ss_literal_info > value_get() const;
00177
00178
00179 void value_set(const ptr< ss_literal_info > &);
00180
00181 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00182
00183
00184 static ptr< ss_literal > create (
00185 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00186 ptr< ss_type > a__ss_expression__type,
00187 ptr< ss_sp > a__ss_expression__psp,
00188 ptr< ss_sp > a__ss_expression__nsp,
00189 ptr< ss_literal_info > a__ss_literal__value);
00190
00191
00192
00193
00194 virtual ptr<reflection_list> reflection_get() const;
00195
00196 virtual ptr<field_list_list> field_values_get() const;
00197
00198 protected:
00199
00200 ss_literal (
00201 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00202 ptr< ss_type > a__ss_expression__type,
00203 ptr< ss_sp > a__ss_expression__psp,
00204 ptr< ss_sp > a__ss_expression__nsp,
00205 ptr< ss_literal_info > a__ss_literal__value);
00206
00207
00208 virtual void gc_mark();
00209
00210 private:
00211 srp< ss_literal_info > value;
00212 static ptr<reflection_list> reflection;
00213
00214 };
00215
00216
00217
00218 class ss_ternary : public ss_expression {
00219 public:
00220
00221 ptr< ss_expression > condition_get() const;
00222
00223
00224 void condition_set(const ptr< ss_expression > &);
00225
00226
00227 ptr< ss_expression > true_expr_get() const;
00228
00229
00230 void true_expr_set(const ptr< ss_expression > &);
00231
00232
00233 ptr< ss_expression > false_expr_get() const;
00234
00235
00236 void false_expr_set(const ptr< ss_expression > &);
00237
00238 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00239
00240
00241 static ptr< ss_ternary > create (
00242 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00243 ptr< ss_type > a__ss_expression__type,
00244 ptr< ss_sp > a__ss_expression__psp,
00245 ptr< ss_sp > a__ss_expression__nsp,
00246 ptr< ss_expression > a__ss_ternary__condition,
00247 ptr< ss_expression > a__ss_ternary__true_expr,
00248 ptr< ss_expression > a__ss_ternary__false_expr);
00249
00250
00251
00252
00253 virtual ptr<reflection_list> reflection_get() const;
00254
00255 virtual ptr<field_list_list> field_values_get() const;
00256
00257 protected:
00258
00259 ss_ternary (
00260 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00261 ptr< ss_type > a__ss_expression__type,
00262 ptr< ss_sp > a__ss_expression__psp,
00263 ptr< ss_sp > a__ss_expression__nsp,
00264 ptr< ss_expression > a__ss_ternary__condition,
00265 ptr< ss_expression > a__ss_ternary__true_expr,
00266 ptr< ss_expression > a__ss_ternary__false_expr);
00267
00268
00269 virtual void gc_mark();
00270
00271 private:
00272 srp< ss_expression > condition;
00273 srp< ss_expression > true_expr;
00274 srp< ss_expression > false_expr;
00275 static ptr<reflection_list> reflection;
00276
00277 };
00278
00279
00280
00281
00282
00283
00284 class ss_var_ref_abstract : public ss_expression {
00285 public:
00286
00287 virtual bool is_lvalue();
00288
00289 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v ) abstract;
00290
00291
00292
00293 virtual ptr<reflection_list> reflection_get() const;
00294
00295 virtual ptr<field_list_list> field_values_get() const;
00296
00297 protected:
00298
00299 ss_var_ref_abstract (
00300 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00301 ptr< ss_type > a__ss_expression__type,
00302 ptr< ss_sp > a__ss_expression__psp,
00303 ptr< ss_sp > a__ss_expression__nsp);
00304
00305
00306 virtual void gc_mark();
00307
00308 private:
00309 static ptr<reflection_list> reflection;
00310
00311 };
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322 class ss_var_ref_by_qname : public ss_var_ref_abstract {
00323 public:
00324
00325 ptr< ss_decl_seq > contained_in_get() const;
00326
00327
00328 void contained_in_set(const ptr< ss_decl_seq > &);
00329
00330
00331 ptr< ss_declaration_time > decl_time_get() const;
00332
00333
00334 void decl_time_set(const ptr< ss_declaration_time > &);
00335
00336
00337 ptr< as_name > qualified_name_get() const;
00338
00339
00340 void qualified_name_set(const ptr< as_name > &);
00341
00342 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00343
00344
00345 static ptr< ss_var_ref_by_qname > create (
00346 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00347 ptr< ss_type > a__ss_expression__type,
00348 ptr< ss_sp > a__ss_expression__psp,
00349 ptr< ss_sp > a__ss_expression__nsp,
00350 ptr< ss_decl_seq > a__ss_var_ref_by_qname__contained_in,
00351 ptr< ss_declaration_time > a__ss_var_ref_by_qname__decl_time,
00352 ptr< as_name > a__ss_var_ref_by_qname__qualified_name);
00353
00354
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_var_ref_by_qname (
00364 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00365 ptr< ss_type > a__ss_expression__type,
00366 ptr< ss_sp > a__ss_expression__psp,
00367 ptr< ss_sp > a__ss_expression__nsp,
00368 ptr< ss_decl_seq > a__ss_var_ref_by_qname__contained_in,
00369 ptr< ss_declaration_time > a__ss_var_ref_by_qname__decl_time,
00370 ptr< as_name > a__ss_var_ref_by_qname__qualified_name);
00371
00372
00373 virtual void gc_mark();
00374
00375 private:
00376 srp< ss_decl_seq > contained_in;
00377 srp< ss_declaration_time > decl_time;
00378
00379
00380
00381
00382
00383
00384
00385
00386 srp< as_name > qualified_name;
00387 static ptr<reflection_list> reflection;
00388
00389 };
00390
00391
00392
00393
00394
00395
00396 class ss_var_ref : public ss_var_ref_abstract {
00397 public:
00398
00399 ptr< ss_declaration > var_decl_get() const;
00400
00401
00402 void var_decl_set(const ptr< ss_declaration > &);
00403
00404 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00405
00406
00407 static ptr< ss_var_ref > create (
00408 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00409 ptr< ss_type > a__ss_expression__type,
00410 ptr< ss_sp > a__ss_expression__psp,
00411 ptr< ss_sp > a__ss_expression__nsp,
00412 ptr< ss_declaration > a__ss_var_ref__var_decl);
00413
00414
00415
00416
00417 virtual ptr<reflection_list> reflection_get() const;
00418
00419 virtual ptr<field_list_list> field_values_get() const;
00420
00421 protected:
00422
00423 ss_var_ref (
00424 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00425 ptr< ss_type > a__ss_expression__type,
00426 ptr< ss_sp > a__ss_expression__psp,
00427 ptr< ss_sp > a__ss_expression__nsp,
00428 ptr< ss_declaration > a__ss_var_ref__var_decl);
00429
00430
00431 virtual void gc_mark();
00432
00433 private:
00434
00435 srp< ss_declaration > var_decl;
00436 static ptr<reflection_list> reflection;
00437
00438 };
00439
00440
00441
00442
00443
00444
00445 class ss_throw : public ss_expression {
00446 public:
00447
00448 ptr< ss_type > type_get() const;
00449
00450
00451 void type_set(const ptr< ss_type > &);
00452
00453
00454 ptr< ss_expression > value_get() const;
00455
00456
00457 void value_set(const ptr< ss_expression > &);
00458
00459 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00460
00461
00462 static ptr< ss_throw > create (
00463 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00464 ptr< ss_type > a__ss_expression__type,
00465 ptr< ss_sp > a__ss_expression__psp,
00466 ptr< ss_sp > a__ss_expression__nsp,
00467 ptr< ss_type > a__ss_throw__type,
00468 ptr< ss_expression > a__ss_throw__value);
00469
00470
00471
00472
00473 virtual ptr<reflection_list> reflection_get() const;
00474
00475 virtual ptr<field_list_list> field_values_get() const;
00476
00477 protected:
00478
00479 ss_throw (
00480 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00481 ptr< ss_type > a__ss_expression__type,
00482 ptr< ss_sp > a__ss_expression__psp,
00483 ptr< ss_sp > a__ss_expression__nsp,
00484 ptr< ss_type > a__ss_throw__type,
00485 ptr< ss_expression > a__ss_throw__value);
00486
00487
00488 virtual void gc_mark();
00489
00490 private:
00491 srp< ss_type > type;
00492 srp< ss_expression > value;
00493 static ptr<reflection_list> reflection;
00494
00495 };
00496
00497
00498
00499 class ss_member_ptr : public ss_expression {
00500 public:
00501
00502 ptr< ss_expression > object_get() const;
00503
00504
00505 void object_set(const ptr< ss_expression > &);
00506
00507
00508 ptr< ss_expression > member_ptr_get() const;
00509
00510
00511 void member_ptr_set(const ptr< ss_expression > &);
00512
00513 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00514
00515
00516 static ptr< ss_member_ptr > create (
00517 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00518 ptr< ss_type > a__ss_expression__type,
00519 ptr< ss_sp > a__ss_expression__psp,
00520 ptr< ss_sp > a__ss_expression__nsp,
00521 ptr< ss_expression > a__ss_member_ptr__object,
00522 ptr< ss_expression > a__ss_member_ptr__member_ptr);
00523
00524
00525
00526
00527 virtual ptr<reflection_list> reflection_get() const;
00528
00529 virtual ptr<field_list_list> field_values_get() const;
00530
00531 protected:
00532
00533 ss_member_ptr (
00534 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00535 ptr< ss_type > a__ss_expression__type,
00536 ptr< ss_sp > a__ss_expression__psp,
00537 ptr< ss_sp > a__ss_expression__nsp,
00538 ptr< ss_expression > a__ss_member_ptr__object,
00539 ptr< ss_expression > a__ss_member_ptr__member_ptr);
00540
00541
00542 virtual void gc_mark();
00543
00544 private:
00545 srp< ss_expression > object;
00546 srp< ss_expression > member_ptr;
00547 static ptr<reflection_list> reflection;
00548
00549 };
00550
00551
00552
00553 class ss_ptr_member_ptr : public ss_expression {
00554 public:
00555
00556 ptr< ss_expression > object_ptr_get() const;
00557
00558
00559 void object_ptr_set(const ptr< ss_expression > &);
00560
00561
00562 ptr< ss_expression > member_ptr_get() const;
00563
00564
00565 void member_ptr_set(const ptr< ss_expression > &);
00566
00567 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00568
00569
00570 static ptr< ss_ptr_member_ptr > create (
00571 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00572 ptr< ss_type > a__ss_expression__type,
00573 ptr< ss_sp > a__ss_expression__psp,
00574 ptr< ss_sp > a__ss_expression__nsp,
00575 ptr< ss_expression > a__ss_ptr_member_ptr__object_ptr,
00576 ptr< ss_expression > a__ss_ptr_member_ptr__member_ptr);
00577
00578
00579
00580
00581 virtual ptr<reflection_list> reflection_get() const;
00582
00583 virtual ptr<field_list_list> field_values_get() const;
00584
00585 protected:
00586
00587 ss_ptr_member_ptr (
00588 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00589 ptr< ss_type > a__ss_expression__type,
00590 ptr< ss_sp > a__ss_expression__psp,
00591 ptr< ss_sp > a__ss_expression__nsp,
00592 ptr< ss_expression > a__ss_ptr_member_ptr__object_ptr,
00593 ptr< ss_expression > a__ss_ptr_member_ptr__member_ptr);
00594
00595
00596 virtual void gc_mark();
00597
00598 private:
00599 srp< ss_expression > object_ptr;
00600 srp< ss_expression > member_ptr;
00601 static ptr<reflection_list> reflection;
00602
00603 };
00604
00605
00606
00607 class ss_access : public ss_expression {
00608 public:
00609
00610 ptr< ss_expression > object_get() const;
00611
00612
00613 void object_set(const ptr< ss_expression > &);
00614
00615
00616 ptr< ss_declaration > member_get() const;
00617
00618
00619 void member_set(const ptr< ss_declaration > &);
00620
00621 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00622
00623
00624 static ptr< ss_access > create (
00625 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00626 ptr< ss_type > a__ss_expression__type,
00627 ptr< ss_sp > a__ss_expression__psp,
00628 ptr< ss_sp > a__ss_expression__nsp,
00629 ptr< ss_expression > a__ss_access__object,
00630 ptr< ss_declaration > a__ss_access__member);
00631
00632
00633
00634
00635 virtual ptr<reflection_list> reflection_get() const;
00636
00637 virtual ptr<field_list_list> field_values_get() const;
00638
00639 protected:
00640
00641 ss_access (
00642 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00643 ptr< ss_type > a__ss_expression__type,
00644 ptr< ss_sp > a__ss_expression__psp,
00645 ptr< ss_sp > a__ss_expression__nsp,
00646 ptr< ss_expression > a__ss_access__object,
00647 ptr< ss_declaration > a__ss_access__member);
00648
00649
00650 virtual void gc_mark();
00651
00652 private:
00653 srp< ss_expression > object;
00654 srp< ss_declaration > member;
00655 static ptr<reflection_list> reflection;
00656
00657 };
00658
00659
00660
00661 class ss_ptr_access : public ss_expression {
00662 public:
00663
00664 ptr< ss_expression > object_ptr_get() const;
00665
00666
00667 void object_ptr_set(const ptr< ss_expression > &);
00668
00669
00670 ptr< ss_declaration > member_get() const;
00671
00672
00673 void member_set(const ptr< ss_declaration > &);
00674
00675 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v );
00676
00677
00678 static ptr< ss_ptr_access > create (
00679 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00680 ptr< ss_type > a__ss_expression__type,
00681 ptr< ss_sp > a__ss_expression__psp,
00682 ptr< ss_sp > a__ss_expression__nsp,
00683 ptr< ss_expression > a__ss_ptr_access__object_ptr,
00684 ptr< ss_declaration > a__ss_ptr_access__member);
00685
00686
00687
00688
00689 virtual ptr<reflection_list> reflection_get() const;
00690
00691 virtual ptr<field_list_list> field_values_get() const;
00692
00693 protected:
00694
00695 ss_ptr_access (
00696 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00697 ptr< ss_type > a__ss_expression__type,
00698 ptr< ss_sp > a__ss_expression__psp,
00699 ptr< ss_sp > a__ss_expression__nsp,
00700 ptr< ss_expression > a__ss_ptr_access__object_ptr,
00701 ptr< ss_declaration > a__ss_ptr_access__member);
00702
00703
00704 virtual void gc_mark();
00705
00706 private:
00707 srp< ss_expression > object_ptr;
00708 srp< ss_declaration > member;
00709 static ptr<reflection_list> reflection;
00710
00711 };
00712
00713
00714
00715 class ss_binary_expr : public ss_expression {
00716 public:
00717
00718 ptr< ss_expression > left_get() const;
00719
00720
00721 void left_set(const ptr< ss_expression > &);
00722
00723
00724 ptr< ss_expression > right_get() const;
00725
00726
00727 void right_set(const ptr< ss_expression > &);
00728
00729 virtual void accept_ss_expression_visitor( ptr< ss_expression_visitor > v ) abstract;
00730
00731
00732
00733 virtual ptr<reflection_list> reflection_get() const;
00734
00735 virtual ptr<field_list_list> field_values_get() const;
00736
00737 protected:
00738
00739 ss_binary_expr (
00740 ptr< ::lestes::std::source_location > a__ss_base_with_location__location,
00741 ptr< ss_type > a__ss_expression__type,
00742 ptr< ss_sp > a__ss_expression__psp,
00743 ptr< ss_sp > a__ss_expression__nsp,
00744 ptr< ss_expression > a__ss_binary_expr__left,
00745 ptr< ss_expression > a__ss_binary_expr__right);
00746
00747
00748 virtual void gc_mark();
00749
00750 private:
00751 srp< ss_expression > left;
00752 srp< ss_expression > right;
00753 static ptr<reflection_list> reflection;
00754
00755 };
00756
00757
00758 end_package(sem);
00759 end_package(cplus);
00760 end_package(lang);
00761 end_package(lestes);
00762
00763 #endif // lestes__lang__cplus__sem__ss_expression_g_hh__included