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
00029
00030
00031
00032
00033
00034 #include <lestes/common.hh>
00035 #include <lestes/std/source_location.hh>
00036 #include <lestes/lang/cplus/lex/macro_head.hh>
00037 #include <lestes/lang/cplus/lex/token_sequence.hh>
00038 #include <lestes/lang/cplus/lex/token_value.hh>
00039 #include <lestes/lang/cplus/lex/pp_token.hh>
00040
00041 package(lestes);
00042 package(lang);
00043 package(cplus);
00044 package(lex);
00045
00046 using namespace ::std;
00047
00048
00049
00050
00051
00052
00053 void macro_head_test(void)
00054 {
00055 ptr<file_info> fi = file_info::create("abc",NULL);
00056 ptr<source_location> loc = source_location::create(fi,0,0);
00057
00058 ptr<token_value> tv1 = token_value::create("abc");
00059 ptr<token_value> tv2 = token_value::create("def");
00060
00061 ptr<token_sequence> ts = token_sequence::create();
00062
00063 ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK));
00064 ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK));
00065 ts->add_back(pp_token::create(loc,pp_token::TOK_LINE_END));
00066
00067 ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK));
00068 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00069
00070 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00071 ts->add_back(pp_token::create(loc,pp_token::TOK_BLANK));
00072 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00073
00074 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00075 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00076 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00077
00078 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00079 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00080 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv2));
00081 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00082
00083 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv2));
00084 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00085 ts->add_back(pp_token::create(loc,pp_token::TOK_IDENT,tv1));
00086 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00087
00088 ptr<macro_head> mh0 = macro_head::create();
00089
00090
00091 lassert(is_equal(mh0,mh0));
00092 lassert(is_equal(mh0->state_get(),macro_head::BEGIN));
00093
00094
00095 lassert(is_equal(mh0->parse(ts),false));
00096 lassert(is_equal(mh0->state_get(),macro_head::DEAD));
00097 lassert(is_equal(mh0,mh0));
00098
00099 ptr<macro_head> mh1 = macro_head::create();
00100
00101
00102 lassert(is_equal(mh1->parse(ts),false));
00103 lassert(is_equal(mh1->state_get(),macro_head::DEAD));
00104
00105 ptr<macro_head> mh2 = macro_head::create();
00106
00107
00108 lassert(is_equal(mh2->parse(ts),false));
00109 lassert(is_equal(mh2->state_get(),macro_head::DEAD));
00110
00111 ptr<macro_head> mh3 = macro_head::create();
00112
00113
00114 lassert(is_equal(mh3->parse(ts),false));
00115 lassert(is_equal(mh3->state_get(),macro_head::DEAD));
00116
00117 ptr<macro_head> mh4 = macro_head::create();
00118
00119
00120 lassert(is_equal(mh4->parse(ts),true));
00121 lassert(is_equal(mh4->state_get(),macro_head::PARSED));
00122 lassert(is_equal(mh4,mh4));
00123 lassert(is_equal(mh4->length(),2U));
00124 lassert(is_equal(mh4->index_of(tv1),0U));
00125 lassert(is_equal(mh4->index_of(tv2),1U));
00126 lassert(is_equal(mh4->index_of(token_value::create("ghi")),mh4->length()));
00127
00128 ptr<macro_head> mh5 = macro_head::create();
00129
00130
00131 lassert(is_equal(mh5->parse(ts),true));
00132 lassert(is_equal(mh5->state_get(),macro_head::PARSED));
00133 lassert(!is_equal(mh5,mh4));
00134 lassert(is_equal(mh5->length(),2U));
00135 lassert(is_equal(mh5->index_of(tv2),0U));
00136 lassert(is_equal(mh5->index_of(tv1),1U));
00137 lassert(is_equal(mh5->index_of(token_value::create("ghi")),mh5->length()));
00138
00139 }
00140
00141 end_package(lex);
00142 end_package(cplus);
00143 end_package(lang);
00144 end_package(lestes);
00145
00146
00147
00148
00149
00150
00151 int main(void)
00152 {
00153 ::lestes::lang::cplus::lex::macro_head_test();
00154 return 0;
00155 }
00156