00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <lestes/common.hh>
00029
00030 #include <lestes/std/list.hh>
00031 #include <lestes/lang/cplus/sem/ss_misc.g.hh>
00032 #include <lestes/lang/cplus/sem/ss_declaration.g.hh>
00033 #include <lestes/lang/cplus/sem/ss_decl_name.g.hh>
00034 #include <lestes/lang/cplus/sem/ss_statement.g.hh>
00035 #include <lestes/lang/cplus/sem/ss_type.g.hh>
00036 #include <lestes/lang/cplus/sem/ss_type_builtin.g.hh>
00037 #include <lestes/lang/cplus/sem/ss_expression.g.hh>
00038 #include <lestes/lang/cplus/sem/ss_expr_binary_op.g.hh>
00039 #include <lestes/lang/cplus/sem/ss_expr_unary_op.g.hh>
00040 #include <lestes/lang/cplus/sem/ss_expr_funcall.g.hh>
00041 #include <lestes/lang/cplus/sem/ss_enums.g.hh>
00042 #include <lestes/lang/cplus/sem/ss_literal_info.g.hh>
00043 #include <lestes/lang/cplus/sem/or_or.g.hh>
00044
00045 #include <lestes/backend/backend.g.hh>
00046
00047 #include <lestes/std/dumper.hh>
00048 #include <lestes/msg/logger.hh>
00049 #include <fstream>
00050 #include <iostream>
00051
00052 using namespace ::lestes::msg;
00053
00054 package(lestes);
00055 package(lang);
00056 package(cplus);
00057 package(sem);
00058
00059
00060 using namespace ::lestes::std;
00061
00062 extern void ss2pi_start(ptr< ss_translation_unit >);
00063 extern void summary_seq_points(ptr< ss_sp > x);
00064 int man(){
00065
00066
00067
00068 ptr<ss_translation_unit> tu = ss_translation_unit::create( ss_decl_seq::root_instance() );
00069
00070 #define NOINIT ss_decl_stmt::IK_DEFAULT_INITIALIZATION
00071
00072 typedef ::lestes::std::list< srp< ss_declaration > > listdecl;
00073 typedef ::lestes::std::list< srp< ss_type > > listtype;
00074 typedef ::lestes::std::list< srp< ss_statement > > liststmt;
00075 typedef ::lestes::std::list< srp< ss_label > > listlbl;
00076 typedef ::lestes::std::list< srp< ss_expression > > listexpr;
00077 typedef ::lestes::std::list< srp< ss_se > > listse;
00078 typedef ::lestes::std::list< srp< ss_sp > > listsp;
00079
00080
00081 ptr<ss_sp> sp13= ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00082 ptr<ss_sp> sp12= ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00083 ptr<ss_sp> sp11= ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00084 ptr<ss_sp> sp10= ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00085 ptr<ss_sp> sp9 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,1);
00086 ptr<ss_sp> sp8 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,1);
00087 ptr<ss_sp> sp7 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00088 ptr<ss_sp> sp6 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00089 ptr<ss_sp> sp5 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00090 ptr<ss_sp> sp4 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00091 ptr<ss_sp> sp3 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00092 ptr<ss_sp> sp2 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00093 ptr<ss_sp> sp1 = ss_sp::create(NULL,NULL,NULL,listse::create(),listse::create(),NULL,0);
00094
00095
00096 ptr<ss_decl_seq> ds1 = ss_decl_seq::root_instance();
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 ptr<ss_compound_stmt> cs1 = ss_compound_stmt::root_instance();
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122 ptr<ss_function_declaration> fd1 = ss_function_declaration::create(
00123 NULL,
00124 ss_declaration_time::create(0),
00125 ss_declaration_time::create(0),
00126 NULL,
00127 NULL,
00128 NULL,
00129 NULL,
00130 NULL,
00131 NULL
00132
00133
00134
00135 );
00136
00137 ptr<ss_ordinary_name> on1 = ss_ordinary_name::create(NULL,"main");
00138
00139 ptr<ss_type> sint = ss_type_sint::instance();
00140
00141 ptr<ss_function> tfun1 = ss_function::create(sint,listtype::create(),false);
00142
00143 ptr<ss_decl_seq> ds3 = ss_decl_seq::create(NULL,listdecl::create(),ds1,NULL,NULL,NULL);
00144
00145 ptr<ss_decl_seq> ds2 = ss_decl_seq::create(NULL,listdecl::create(),ds3,NULL,NULL,NULL);
00146
00147 ptr<ss_compound_stmt> cs3 = ss_compound_stmt::create(NULL,listlbl::create(),cs1,NULL,NULL,listsp::create(),ds3,liststmt::create(),NULL);
00148
00149 ptr<ss_compound_stmt> cs2 = ss_compound_stmt::create(NULL,listlbl::create(),cs3,sp1,sp7,listsp::create(),ds2,liststmt::create(),sp6);
00150
00151 ptr<ss_decl_stmt> dst1 = ss_decl_stmt::create(NULL,listlbl::create(),cs2,sp2,sp3,listsp::create(),NULL,listexpr::create(),NOINIT);
00152
00153 ptr<ss_object_declaration> od1 = ss_object_declaration::create(NULL,ss_declaration_time::create(0),ss_declaration_time::create(0),NULL,NULL,sint,NULL,ss_declaration_time::infinity(),NULL);
00154
00155 ptr<ss_ordinary_name> on2 = ss_ordinary_name::create(NULL,"i");
00156
00157 ptr<ss_expr_stmt> est1 = ss_expr_stmt::create(NULL,listlbl::create(),NULL,sp4,sp5,listsp::create(),NULL);
00158
00159 ptr<ss_assign> as1 = ss_assign::create(NULL,sint,sp4,sp5,NULL,NULL);
00160
00161 ptr<ss_se> ase1 = ss_se::create(NULL,NULL,sp4,sp5);
00162
00163 ptr<ss_var_ref> var1 = ss_var_ref::create(NULL,sint,sp4,sp5,NULL);
00164
00165 ptr<ss_literal_info> linfo1 = ss_integral_literal_info::create(sint,"1");
00166
00167 ptr<ss_literal> lit1 = ss_literal::create(NULL,sint,sp4,sp5,NULL);
00168
00169 ptr<ss_decl_stmt> dst2 = ss_decl_stmt::create(NULL,listlbl::create(),cs1,NULL,NULL,listsp::create(),NULL,listexpr::create(),NOINIT);
00170
00171 ptr< ss_se > fse2 = ss_se::create(NULL,NULL,sp8,sp9);
00172
00173 ptr< ss_funcall > fc1 = ss_funcall::create(NULL,sint,sp8,sp9,listexpr::create(),NULL);
00174
00175 ptr<ss_expr_stmt> est2 = ss_expr_stmt::create(NULL,listlbl::create(),cs2,sp6,sp7,listsp::create(),NULL);
00176
00177
00178
00179
00180
00181 ptr<ss_decl_stmt> dst3 = ss_decl_stmt::create(NULL,listlbl::create(),cs3,NULL,NULL,listsp::create(),NULL,listexpr::create(),NOINIT);
00182
00183 ptr< ss_parameter_declaration > dpar1 = ss_parameter_declaration::create(NULL,ss_declaration_time::create(0),ss_declaration_time::create(0),NULL,NULL,sint,NULL,ss_access_specifier::ACCESS_PUBLIC,ss_storage_class::ST_NONE,ss_declaration_time::infinity(),NULL,0);
00184
00185 ptr< ss_ordinary_name > on3 = ss_ordinary_name::create(NULL,"j");
00186
00187 ptr< ss_get > get1 = ss_get::create(NULL,sint,sp8,sp9,NULL);
00188
00189 ptr< ss_var_ref > var2 = ss_var_ref::create(NULL,sint,sp6,sp8,NULL);
00190
00191 ptr< ss_fake_declaration > fake1 = ss_fake_declaration::create(NULL,ss_declaration_time::create(0),ss_declaration_time::create(0),NULL,NULL,sint,NULL,ss_access_specifier::ACCESS_PUBLIC,ss_storage_class::ST_NONE,NULL);
00192
00193 ptr< ss_compound_stmt_declaration > csd1 = ss_compound_stmt_declaration::create(NULL,ss_declaration_time::create(0),ss_declaration_time::create(0),NULL,NULL,NULL,NULL,cs2);
00194
00195
00196 ptr< ss_get > get2 = ss_get::create(NULL,sint,sp10,sp11,NULL);
00197
00198 ptr< ss_var_ref > var3 = ss_var_ref::create(NULL,sint,sp10,sp11,NULL);
00199
00200 ptr< ss_return > ret1 = ss_return::create(NULL,NULL,cs2,sp10,sp11,listsp::create(),NULL);
00201
00202 ptr< ss_get > get3 = ss_get::create(NULL,sint,sp10,sp11,NULL);
00203
00204 ptr< ss_var_ref > var4 = ss_var_ref::create(NULL,sint,sp10,sp11,NULL);
00205
00206 ptr< ss_add > add1 = ss_add::create(NULL,sint,sp10,sp11,NULL,NULL);
00207
00208 ptr< ss_linkage > link1 = ss_linkage::create("C",ss_linkage::LINKAGE_EXTERNAL);
00209
00210
00211
00212
00213
00214 tfun1->params_get()->push_back(sint);
00215
00216 ds1->contents_get()->push_back(fd1);
00217
00218
00219
00220 cs1->statements_get()->push_back(dst2);
00221
00222
00223 dst2->decl_set(fd1);
00224
00225 fd1->name_set(on1);
00226 fd1->type_set(tfun1);
00227 fd1->body_set(cs2);
00228 fd1->contained_in_set(ds1);
00229 fd1->parameters_set(ds3);
00230 fd1->linkage_set(link1);
00231
00232
00233
00234 cs2->statements_get()->push_back(dst1);
00235 cs2->statements_get()->push_back(est1);
00236 cs2->statements_get()->push_back(est2);
00237 cs2->statements_get()->push_back(ret1);
00238
00239
00240
00241 ds2->compound_stmt_set(cs2);
00242 ds2->contents_get()->push_back(fake1);
00243 ds2->contents_get()->push_back(od1);
00244 ds2->declared_by_set(csd1);
00245
00246
00247 dst1->decl_set(od1);
00248
00249 od1->contained_in_set(ds2);
00250 od1->name_set(on2);
00251
00252 est1->expression_set(as1);
00253 est1->sequence_points_get()->push_back(sp4);
00254 est1->sequence_points_get()->push_back(sp5);
00255
00256 as1->left_set(var1);
00257 as1->right_set(lit1);
00258
00259
00260 ase1->from_set(as1);
00261
00262 var1->var_decl_set(od1);
00263
00264 lit1->value_set(linfo1);
00265
00266 est2->expression_set(fc1);
00267 est2->sequence_points_get()->push_back(sp6);
00268 est2->sequence_points_get()->push_back(sp7);
00269 est2->sequence_points_get()->push_back(sp8);
00270 est2->sequence_points_get()->push_back(sp9);
00271
00272 fc1->function_set(fd1);
00273 fc1->args_get()->push_back(get1);
00274
00275 fse2->from_set(fc1);
00276
00277
00278
00279 ds3->compound_stmt_set(cs3);
00280 ds3->contents_get()->push_back(dpar1);
00281 ds3->declared_by_set(fd1);
00282
00283 cs3->statements_get()->push_back(dst3);
00284
00285 dst3->decl_set(dpar1);
00286
00287 dpar1->name_set(on3);
00288 dpar1->contained_in_set(ds3);
00289
00290 get1->expr_set(var2);
00291
00292 var2->var_decl_set(fake1);
00293
00294 fake1->real_decl_set(dpar1);
00295 fake1->name_set(on3);
00296 fake1->contained_in_set(ds2);
00297
00298
00299 get2->expr_set(var3);
00300
00301 var3->var_decl_set(fake1);
00302
00303 ret1->result_set(add1);
00304 ret1->sequence_points_get()->push_back(sp10);
00305 ret1->sequence_points_get()->push_back(sp11);
00306
00307 get3->expr_set(var4);
00308
00309 var4->var_decl_set(fake1);
00310
00311 add1->left_set(get2);
00312 add1->right_set(get3);
00313
00314
00315 sp1->nsp_set(sp2);
00316 sp2->psp_set(sp1);sp2->nsp_set(sp3);
00317 sp3->psp_set(sp2);sp3->nsp_set(sp4);
00318 sp4->psp_set(sp3);sp4->nsp_set(sp5);sp4->nse_get()->push_back(ase1);
00319 sp5->psp_set(sp4);sp5->nsp_set(sp6);sp5->pse_get()->push_back(ase1);
00320 sp6->psp_set(sp5);sp6->nsp_set(sp7);
00321 sp7->psp_set(sp6);sp7->nsp_set(sp10);
00322 sp8->psp_set(sp6);sp8->nsp_set(sp9);sp8->nse_get()->push_back(fse2);
00323 sp9->psp_set(sp8);sp9->nsp_set(sp7);sp9->pse_get()->push_back(fse2);
00324 sp10->psp_set(sp7);sp10->nsp_set(sp11);
00325 sp11->psp_set(sp10);sp11->nsp_set(sp12);
00326 sp12->psp_set(sp11);sp12->nsp_set(sp13);
00327 sp13->psp_set(sp12);
00328
00329
00330
00331
00332
00333 ::std::ofstream f("example1.xml");
00334 dumper::dump( f, tu );
00335 f.close();
00336
00337 ss2pi_start(tu);
00338 summary_seq_points(sp1);
00339 lestes::backend::backend::create(::std::cout)->main();
00340
00341 return 1;
00342 }
00343
00344
00345 end_package(sem);
00346 end_package(cplus);
00347 end_package(lang);
00348 end_package(lestes);
00349
00350
00351 int main(){
00352
00353 #ifndef unchecked_pointers
00354
00355 ::std::cerr<<"Example skipped, checked pointers set.\n";
00356 return 0;
00357 #endif
00358
00359 logger::init("example1.log.cfg");
00360
00361 lestes::lang::cplus::sem::man();
00362 }