summaryrefslogtreecommitdiff
path: root/test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@colm.net>2019-09-09 09:34:14 -0600
committerAdrian Thurston <thurston@colm.net>2019-09-09 09:34:14 -0600
commit2d8e9c3f5c0417d6237c945c50f92bf8d28b32d5 (patch)
treee463c784309e402c1c7bb89247596165b07ad8d1 /test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in
parentc0323a27ad612db4fa7d3d5c25c3e9611bcf874b (diff)
parentc171cdda894fa59515d1bdc1e00cace185366e7f (diff)
downloadcolm-2d8e9c3f5c0417d6237c945c50f92bf8d28b32d5.tar.gz
mega-merge of pruned test code
Diffstat (limited to 'test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in')
-rw-r--r--test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in260
1 files changed, 260 insertions, 0 deletions
diff --git a/test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in b/test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in
new file mode 100644
index 00000000..190197f7
--- /dev/null
+++ b/test/cases/rlhc.d/case/element1.cpp-C-T1--var-backend.in
@@ -0,0 +1,260 @@
+host( "working/element1.rl", 1 ) @{/*
+ * @@LANG: c++
+ */
+
+ #include <iostream>
+ using namespace std;
+
+ struct LangEl
+ {
+ int key;
+ const char *name;
+ };
+
+ struct Fsm
+ {
+ int cs;
+
+ // Initialize the machine. Invokes any init statement blocks. Returns 0
+ // if the machine begins in a non-accepting state and 1 if the machine
+ // begins in an accepting state.
+ int init( );
+
+ // Execute the machine on a block of data. Returns -1 if after processing
+ // the data, the machine is in the error state and can never accept, 0 if
+ // the machine is in a non-accepting state and 1 if the machine is in an
+ // accepting state.
+ int execute( LangEl *data, int len );
+
+ // Indicate that there is no more data. Returns -1 if the machine finishes
+ // in the error state and does not accept, 0 if the machine finishes
+ // in any other non-accepting state and 1 if the machine finishes in an
+ // accepting state.
+ int finish( );
+
+ };
+
+
+
+}@
+array s8 _Fsm_key_offsets( 0, 3 ) = { 0, 0, 1, 3, 0 };
+
+array int _Fsm_trans_keys( 0, 3 ) = { 1, 2, 3, 0 };
+
+array s8 _Fsm_single_lengths( 0, 2 ) = { 0, 1, 2, 0, 0 };
+
+array s8 _Fsm_range_lengths( 0, 0 ) = { 0, 0, 0, 0, 0 };
+
+array s8 _Fsm_index_offsets( 0, 5 ) = { 0, 0, 2, 5, 0 };
+
+array s8 _Fsm_trans_cond_spaces( -1, 0 ) = { -1, -1, -1, -1, -1, -1, 0 };
+
+array s8 _Fsm_trans_offsets( 0, 5 ) = { 0, 1, 2, 3, 4, 5, 0 };
+
+array s8 _Fsm_trans_lengths( 0, 1 ) = { 1, 1, 1, 1, 1, 1, 0 };
+
+array s8 _Fsm_cond_keys( 0, 0 ) = { 0, 0, 0, 0, 0, 0, 0 };
+
+array s8 _Fsm_cond_targs( 0, 3 ) = { 2, 0, 2, 3, 0, 0, 0 };
+
+array s8 _Fsm_cond_actions( 0, 1 ) = { 1, 0, 1, 1, 0, 0, 0 };
+
+array s8 _Fsm_eof_actions( 0, 2 ) = { 0, 0, 0, 2, 0 };
+
+array s8 _Fsm_nfa_targs( 0, 0 ) = { 0, 0 };
+
+array s8 _Fsm_nfa_offsets( 0, 0 ) = { 0, 0, 0, 0, 0 };
+
+array s8 _Fsm_nfa_push_actions( 0, 0 ) = { 0, 0 };
+
+array s8 _Fsm_nfa_pop_trans( 0, 0 ) = { 0, 0 };
+
+value int Fsm_start = 1;
+value int Fsm_first_final = 3;
+value int Fsm_error = 0;
+
+value int Fsm_en_main = 1;
+
+host( "working/element1.rl", 54 ) @{
+
+ int Fsm::init( )
+ {
+ }@
+ {
+ cs = cast(int)Fsm_start;
+ }
+ host( "working/element1.rl", 58 ) @{
+ return 0;
+ }
+
+ int Fsm::execute( LangEl *data, int len )
+ {
+ LangEl *p = data;
+ LangEl *pe = data + len;
+ LangEl *eof_marker = pe;
+ }@
+ {
+ int _klen;
+ index int _keys;
+ index s8 _ckeys;
+ int _cpc;
+ uint _trans;
+ uint _cond = 0;
+ uint _have = 0;
+ uint _cont = 1;
+ while ( _cont == 1 ) {
+
+ if ( cs == 0 )
+ _cont = 0;
+ _have = 0;
+ if ( p == pe ) {
+ if ( p == host( "-", 1 ) ={ eof_marker}= )
+ {
+ if ( _have == 0 ) {
+ switch ( _Fsm_eof_actions[cs] ) {
+ case 2 {
+ host( "working/element1.rl", 50 ) ${cout << "accept" << endl;}$
+ }
+ }
+ }
+ }
+
+ if ( _have == 0 )
+ _cont = 0;
+ }
+ if ( _cont == 1 ) {
+ if ( _have == 0 ) {
+ _keys = offset( _Fsm_trans_keys, _Fsm_key_offsets[cs] );
+ _trans = cast(uint)_Fsm_index_offsets[cs];
+ _have = 0;
+
+ _klen = cast(int)_Fsm_single_lengths[cs];
+ if ( _klen > 0 ) {
+ index int _lower;
+ index int _mid;
+ index int _upper;
+ _lower = _keys;
+ _upper = _keys + _klen - 1;
+ while ( _upper >= _lower && _have == 0 ) {
+ _mid = _lower + ((_upper-_lower) >> 1);
+ if ( host( "-", 1 ) ={p->key}= < deref( _Fsm_trans_keys, _mid ) )
+ _upper = _mid - 1;
+ else if ( host( "-", 1 ) ={p->key}= > deref( _Fsm_trans_keys, _mid ) )
+ _lower = _mid + 1;
+ else {
+ _trans += cast(uint)(_mid - _keys);
+ _have = 1;
+ }
+ }
+ if ( _have == 0 ) {
+ _keys += _klen;
+ _trans += cast(uint)_klen;
+ }
+ }
+
+ if ( _have == 0 ) {
+ _klen = cast(int)_Fsm_range_lengths[cs];
+ if ( _klen > 0 ) {
+ index int _lower;
+ index int _mid;
+ index int _upper;
+ _lower = _keys;
+ _upper = _keys + (_klen<<1) - 2;
+ while ( _have == 0 && _lower <= _upper ) {
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
+ if ( host( "-", 1 ) ={p->key}= < deref( _Fsm_trans_keys, _mid ) )
+ _upper = _mid - 2;
+ else if ( host( "-", 1 ) ={p->key}= > deref( _Fsm_trans_keys, _mid + 1 ) )
+ _lower = _mid + 2;
+ else {
+ _trans += cast(uint)((_mid - _keys)>>1);
+ _have = 1;
+ }
+ }
+ if ( _have == 0 )
+ _trans += cast(uint)_klen;
+ }
+ }
+
+ _ckeys = offset( _Fsm_cond_keys, _Fsm_trans_offsets[_trans] );
+ _klen = cast(int)_Fsm_trans_lengths[_trans];
+ _cond = cast(uint)_Fsm_trans_offsets[_trans];
+ _have = 0;
+
+ _cpc = 0;
+ {
+ index s8 _lower;
+ index s8 _mid;
+ index s8 _upper;
+ _lower = _ckeys;
+ _upper = _ckeys + _klen - 1;
+ while ( _have == 0 && _lower <= _upper ) {
+ _mid = _lower + ((_upper-_lower) >> 1);
+ if ( _cpc < cast(int)deref( _Fsm_cond_keys, _mid ) )
+ _upper = _mid - 1;
+ else if ( _cpc > cast(int)deref( _Fsm_cond_keys, _mid ) )
+ _lower = _mid + 1;
+ else {
+ _cond += cast(uint)(_mid - _ckeys);
+ _have = 1;
+ }
+ }
+ if ( _have == 0 ) {
+ cs = 0;
+ _cont = 0;
+ }
+ }
+ }
+ if ( _cont == 1 ) {
+ cs = cast(int)_Fsm_cond_targs[_cond];
+
+ switch ( _Fsm_cond_actions[_cond] ) {
+ case 1 {
+ host( "working/element1.rl", 49 ) ${cout << p->name << endl;}$
+ }
+ }
+
+ if ( cs == 0 )
+ _cont = 0;
+ if ( _cont == 1 )
+ p += 1;
+
+ }}
+ }
+ }
+ host( "working/element1.rl", 67 ) @{
+
+ if ( cs == Fsm_error )
+ return -1;
+ if ( cs >= Fsm_first_final )
+ return 1;
+ return 0;
+ }
+
+ int Fsm::finish( )
+ {
+ if ( cs == Fsm_error )
+ return -1;
+ if ( cs >= Fsm_first_final )
+ return 1;
+ return 0;
+ }
+
+ int main( )
+ {
+ static Fsm fsm;
+ static LangEl lel[] = {
+ {1, "one"},
+ {2, "two-a"},
+ {2, "two-b"},
+ {2, "two-c"},
+ {3, "three"}
+ };
+
+ fsm.init();
+ fsm.execute( lel, 5 );
+ fsm.finish();
+ return 0;
+ }
+
+}@ \ No newline at end of file