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 #include <lestes/common.hh>
00033 #include <lestes/std/source_location.hh>
00034 #include <lestes/std/ucn_string.hh>
00035 #include <lestes/lang/cplus/lex/macro_argument.hh>
00036 #include <lestes/lang/cplus/lex/token_sequence.hh>
00037 #include <lestes/lang/cplus/lex/pp_token.hh>
00038 #include <string>
00039
00040 package(lestes);
00041 package(lang);
00042 package(cplus);
00043 package(lex);
00044
00045 using namespace ::std;
00046
00047 void macro_argument_test(void)
00048 {
00049 ptr<file_info> fi = file_info::create(string("abc"),NULL);
00050 ptr<source_location> loc = source_location::create(fi,0,0);
00051
00052 ptr<token_sequence> ts = token_sequence::create();
00053 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00054 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00055 ts->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00056
00057 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00058
00059 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00060
00061 ts->add_back(pp_token::create(loc,pp_token::TOK_HAT));
00062 ts->add_back(pp_token::create(loc,pp_token::TOK_LT));
00063 ts->add_back(pp_token::create(loc,pp_token::TOK_GT));
00064 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00065
00066 ts->add_back(pp_token::create(loc,pp_token::TOK_EQ));
00067 ts->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00068 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00069
00070 ts->add_back(pp_token::create(loc,pp_token::TOK_STAR));
00071 ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00072 ts->add_back(pp_token::create(loc,pp_token::TOK_EMARK));
00073 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00074 ts->add_back(pp_token::create(loc,pp_token::TOK_QMARK));
00075 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00076
00077 ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00078 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00079 ts->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00080 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00081 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00082 ts->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00083 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00084 ts->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00085
00086 ptr<token_sequence> os1 = token_sequence::create();
00087 os1->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00088
00089 ptr<token_sequence> os2 = token_sequence::create();
00090 os2->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00091
00092 ptr<token_sequence> os3 = token_sequence::create();
00093 os3->add_back(pp_token::create(loc,pp_token::TOK_HAT));
00094 os3->add_back(pp_token::create(loc,pp_token::TOK_LT));
00095 os3->add_back(pp_token::create(loc,pp_token::TOK_GT));
00096 os3->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00097
00098 ptr<token_sequence> os4 = token_sequence::create();
00099 os4->add_back(pp_token::create(loc,pp_token::TOK_EQ));
00100 os4->add_back(pp_token::create(loc,pp_token::TOK_DOT));
00101 os4->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00102
00103 ptr<token_sequence> os5 = token_sequence::create();
00104 os5->add_back(pp_token::create(loc,pp_token::TOK_STAR));
00105 os5->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00106 os5->add_back(pp_token::create(loc,pp_token::TOK_EMARK));
00107 os5->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00108 os5->add_back(pp_token::create(loc,pp_token::TOK_QMARK));
00109 os5->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00110
00111 ptr<token_sequence> os6 = token_sequence::create();
00112 os6->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00113 os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00114 os6->add_back(pp_token::create(loc,pp_token::TOK_LEFT_PAR));
00115 os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00116 os6->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00117 os6->add_back(pp_token::create(loc,pp_token::TOK_COMMA));
00118 os6->add_back(pp_token::create(loc,pp_token::TOK_RIGHT_PAR));
00119 os6->add_back(pp_token::create(loc,pp_token::TOK_FILE_END));
00120
00121 ptr<macro_argument> ma0 = macro_argument::create();
00122
00123
00124 lassert(is_equal(ma0->state_get(),macro_argument::BEGIN));
00125 lassert(is_equal(ma0,ma0));
00126
00127
00128 lassert(is_equal(ma0->parse(ts,true),macro_argument::ERROR));
00129 lassert(is_equal(ma0->state_get(),macro_argument::DEAD));
00130 lassert(is_equal(ma0,ma0));
00131
00132 ts->read_front();
00133
00134 ptr<macro_argument> ma1 = macro_argument::create();
00135
00136
00137 lassert(is_equal(ma1->parse(ts,true),macro_argument::EMPTY));
00138 lassert(is_equal(ma1->state_get(),macro_argument::PARSED));
00139 lassert(is_equal(ma1,ma1));
00140
00141 lassert(is_equal(ma1->nonexpanded_get(),os1));
00142
00143 ptr<macro_argument> ma2 = macro_argument::create();
00144 lassert(!is_equal(ma2,ma1));
00145
00146
00147 lassert(is_equal(ma2->parse(ts,false),macro_argument::LAST));
00148 lassert(is_equal(ma2->state_get(),macro_argument::PARSED));
00149 lassert(is_equal(ma2,ma2));
00150 lassert(is_equal(ma1->nonexpanded_get(),os2));
00151
00152 ptr<macro_argument> ma3 = macro_argument::create();
00153
00154
00155 lassert(is_equal(ma3->parse(ts,true),macro_argument::CONTINUE));
00156 lassert(is_equal(ma3->state_get(),macro_argument::PARSED));
00157 lassert(is_equal(ma3,ma3));
00158 lassert(is_equal(ma3->nonexpanded_get(),os3));
00159
00160 ptr<macro_argument> ma4 = macro_argument::create();
00161
00162
00163 lassert(is_equal(ma4->parse(ts,true),macro_argument::LAST));
00164 lassert(is_equal(ma4->state_get(),macro_argument::PARSED));
00165 lassert(is_equal(ma4,ma4));
00166 lassert(is_equal(ma4->nonexpanded_get(),os4));
00167
00168 ptr<macro_argument> ma5 = macro_argument::create();
00169
00170
00171 lassert(is_equal(ma5->parse(ts,true),macro_argument::CONTINUE));
00172 lassert(is_equal(ma5->state_get(),macro_argument::PARSED));
00173 lassert(is_equal(ma5,ma5));
00174 lassert(is_equal(ma5->nonexpanded_get(),os5));
00175
00176 ptr<macro_argument> ma6 = macro_argument::create();
00177
00178
00179 lassert(is_equal(ma6->parse(ts,true),macro_argument::LAST));
00180 lassert(is_equal(ma6->state_get(),macro_argument::PARSED));
00181 lassert(is_equal(ma6,ma6));
00182 lassert(is_equal(ma6->nonexpanded_get(),os6));
00183
00184 }
00185
00186 end_package(lex);
00187 end_package(cplus);
00188 end_package(lang);
00189 end_package(lestes);
00190
00191 int main(void)
00192 {
00193 ::lestes::lang::cplus::lex::macro_argument_test();
00194 return 0;
00195 }
00196