source: to-imperative/trunk/library/List/List.cc @ 2037

Last change on this file since 2037 was 2037, checked in by orlov, 14 years ago
  • Added List.Replicate function.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 20.0 KB
Line 
1#include <rf_core.hh>
2#include <refal/Access.hh>
3#include <refal/Apply.hh>
4#include <refal/Compare.hh>
5#include <refal/Arithm.hh>
6
7namespace refal
8{
9
10using namespace rfrt;
11
12namespace List
13{
14
15RF_DECL (Deparen_m_Term);
16
17RF_DECL (Paren_m_Term);
18
19RF_DECL (Zip);
20
21RF_DECL (Map);
22
23RF_DECL (Filter);
24
25RF_DECL (Split);
26
27RF_DECL (Elem_q_);
28
29RF_DECL (Get_m_Elem);
30
31RF_DECL (Foldr);
32
33RF_DECL (Foldr1);
34
35RF_DECL (Concat);
36
37RF_DECL (Paren);
38
39RF_DECL (Reverse);
40
41RF_DECL (Intersperse);
42
43RF_DECL (Nub);
44
45RF_DECL (Replicate);
46
47RF_DECL (Entries);
48
49RF_DECL (Or);
50
51RF_DECL (And);
52
53RF_DECL (Sub);
54
55RF_DECL (Paren_m_Term__0);
56
57RF_DECL (Deparen_m_Term__0);
58
59static Expr _c_0;
60
61static Expr _c_1;
62
63static Expr _c_2;
64
65static Expr _c_3;
66
67static Expr _c_4;
68
69RF_FUNC (Deparen_m_Term, (RF_ARG _v_arg1;;), (RF_RES _v_res1;;))
70  {
71    {
72      if (_v_arg1.symbol_at (0))
73      {
74        goto _block1__branch1;
75      }
76      Expr _v_deref__arg1 (_v_arg1, 0);
77      uintptr_t _v_len1 = _v_deref__arg1.get_len ();
78      uintptr_t _v_len2 = 0;
79      if ((_v_len1 < _v_len2))
80      {
81        goto _block1__branch1;
82      }
83      uintptr_t _v_len__xpr = (_v_len1 - _v_len2);
84      Expr _ve_xpr (_v_deref__arg1, 0, _v_len__xpr);
85      _v_res1 = _ve_xpr;
86      goto _block1;
87    }
88  _block1__branch1: {}
89    _v_res1 = _v_arg1;
90  }
91_block1: {}
92RF_END
93
94RF_FUNC (Paren_m_Term, (RF_ARG _vt_erm;;), (RF_RES _v_res1;;))
95  _v_res1 = _vt_erm;
96RF_END
97
98RF_FUNC (Zip, (RF_ARG _ve_list1, _ve_list2;;), (RF_RES _v_res1;;))
99  Expr _v_list1__1 (_ve_list1);
100  Expr _v_list2__1 (_ve_list2);
101  Expr _ve_new_m_list (empty);
102  for ( ; ; )
103  {
104    {
105      if ((_v_list1__1.get_len () != 0))
106      {
107        goto _iter1;
108      }
109      _v_res1 = _ve_new_m_list;
110      goto _exit__iter1;
111    }
112  _iter1: {}
113    uintptr_t _v_len1 = _v_list2__1.get_len ();
114    uintptr_t _v_len2 = 1;
115    if ((_v_len1 < _v_len2))
116    {
117      RF_FUNC_ERROR (unexpected_fail);
118    }
119    uintptr_t _v_len__rest2 = (_v_len1 - _v_len2);
120    uintptr_t _v_len3 = _v_list1__1.get_len ();
121    uintptr_t _v_len4 = 1;
122    if ((_v_len3 < _v_len4))
123    {
124      RF_FUNC_ERROR (unexpected_fail);
125    }
126    uintptr_t _v_len__rest1 = (_v_len3 - _v_len4);
127    Expr _vt_first1 (_v_list1__1, 0, 1);
128    Expr _ve_rest1 (_v_list1__1, 1, _v_len__rest1);
129    Expr _vt_first2 (_v_list2__1, 0, 1);
130    Expr _ve_rest2 (_v_list2__1, 1, _v_len__rest2);
131    _v_list1__1 = _ve_rest1;
132    _v_list2__1 = _ve_rest2;
133    _ve_new_m_list = (_ve_new_m_list + (_vt_first1 + _vt_first2) ());
134  }
135_exit__iter1: {}
136RF_END
137
138RF_FUNC (Map, (RF_ARG _vs_Fname, _ve_Fargs, _ve_list;;), (RF_RES _v_res1;;))
139  Expr _ve_new_m_list (empty);
140  Expr _v_list__1 (_ve_list);
141  for ( ; ; )
142  {
143    {
144      if ((_v_list__1.get_len () != 0))
145      {
146        goto _iter1;
147      }
148      _v_res1 = _ve_new_m_list;
149      goto _exit__iter1;
150    }
151  _iter1: {}
152    uintptr_t _v_len1 = _v_list__1.get_len ();
153    uintptr_t _v_len2 = 1;
154    if ((_v_len1 < _v_len2))
155    {
156      RF_FUNC_ERROR (unexpected_fail);
157    }
158    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
159    Expr _vt_item (_v_list__1, 0, 1);
160    Expr _ve_rest (_v_list__1, 1, _v_len__rest);
161    Expr _v_Apply1;
162    if (!RF_CALL (Apply::Apply, (_vs_Fname, (_ve_Fargs + _vt_item)), _v_Apply1))
163    {
164      RF_FUNC_ERROR (unexpected_fail);
165    }
166    _ve_new_m_list = (_ve_new_m_list + _v_Apply1);
167    _v_list__1 = _ve_rest;
168  }
169_exit__iter1: {}
170RF_END
171
172RF_FUNC (Filter, (RF_ARG _vs_Fname, _ve_Fargs, _ve_list;;), (RF_RES _v_res1;;))
173  Expr _ve_new_m_list (empty);
174  Expr _v_list__1 (_ve_list);
175  for ( ; ; )
176  {
177    {
178      if ((_v_list__1.get_len () != 0))
179      {
180        goto _iter1;
181      }
182      _v_res1 = _ve_new_m_list;
183      goto _exit__iter1;
184    }
185  _iter1: {}
186    uintptr_t _v_len1 = _v_list__1.get_len ();
187    uintptr_t _v_len2 = 1;
188    if ((_v_len1 < _v_len2))
189    {
190      RF_FUNC_ERROR (unexpected_fail);
191    }
192    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
193    Expr _vt_item (_v_list__1, 0, 1);
194    Expr _ve_rest (_v_list__1, 1, _v_len__rest);
195    {
196      {
197        Expr _v_Apply1;
198        if (!RF_CALL (Apply::Apply, (_vs_Fname, (_ve_Fargs + _vt_item)), _v_Apply1))
199        {
200          goto _block2__branch1;
201        }
202        uintptr_t _v_len3 = _v_Apply1.get_len ();
203        uintptr_t _v_len4 = 0;
204        if ((_v_len3 < _v_len4))
205        {
206          goto _block2__branch1;
207        }
208        uintptr_t _v_len___e__e_tmp_m_Listrf_m_36_m_41 = (_v_len3 - _v_len4);
209        Expr _ve__e__e_tmp_m_Listrf_m_36_m_41 (_v_Apply1, 0, _v_len___e__e_tmp_m_Listrf_m_36_m_41);
210        _ve_new_m_list = (_ve_new_m_list + _vt_item);
211        _v_list__1 = _ve_rest;
212        goto _block2;
213      }
214    _block2__branch1: {}
215      _v_list__1 = _ve_rest;
216    }
217  _block2: {}
218  }
219_exit__iter1: {}
220RF_END
221
222RF_FUNC (Split, (RF_ARG _vs_Fname, _ve_Fargs, _ve_list;;), (RF_RES _v_res1, _v_res2;;))
223  Expr _ve_true_m_list (empty);
224  Expr _ve_false_m_list (empty);
225  Expr _v_list__1 (_ve_list);
226  for ( ; ; )
227  {
228    {
229      if ((_v_list__1.get_len () != 0))
230      {
231        goto _iter1;
232      }
233      _v_res1 = _ve_true_m_list;
234      _v_res2 = _ve_false_m_list;
235      goto _exit__iter1;
236    }
237  _iter1: {}
238    uintptr_t _v_len1 = _v_list__1.get_len ();
239    uintptr_t _v_len2 = 1;
240    if ((_v_len1 < _v_len2))
241    {
242      RF_FUNC_ERROR (unexpected_fail);
243    }
244    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
245    Expr _vt_item (_v_list__1, 0, 1);
246    Expr _ve_rest (_v_list__1, 1, _v_len__rest);
247    {
248      {
249        Expr _v_Apply1;
250        if (!RF_CALL (Apply::Apply, (_vs_Fname, (_ve_Fargs + _vt_item)), _v_Apply1))
251        {
252          goto _block2__branch1;
253        }
254        uintptr_t _v_len3 = _v_Apply1.get_len ();
255        uintptr_t _v_len4 = 0;
256        if ((_v_len3 < _v_len4))
257        {
258          goto _block2__branch1;
259        }
260        uintptr_t _v_len___e__e_tmp_m_Listrf_m_47_m_41 = (_v_len3 - _v_len4);
261        Expr _ve__e__e_tmp_m_Listrf_m_47_m_41 (_v_Apply1, 0, _v_len___e__e_tmp_m_Listrf_m_47_m_41);
262        _ve_true_m_list = (_ve_true_m_list + _vt_item);
263        _v_list__1 = _ve_rest;
264        goto _block2;
265      }
266    _block2__branch1: {}
267      _ve_false_m_list = (_ve_false_m_list + _vt_item);
268      _v_list__1 = _ve_rest;
269    }
270  _block2: {}
271  }
272_exit__iter1: {}
273RF_END
274
275RF_FUNC (Elem_q_, (RF_ARG _ve_list, _vt_item;;), RF_VOID)
276  if (((_ve_list.get_len () < (1 + 0 + 0))))
277  {
278    RF_RETFAIL;
279  }
280  RF_lsplit (_ve_list, 0, _ve__e__e_tmp_m_Listrf_m_56_m_13, _v_lsplit__list);
281  for ( ; ; RF_iter(_ve_list)++)
282  {
283    {
284      if (!RF_iter(_ve_list))
285      {
286        RF_RETFAIL;
287      }
288      uintptr_t _v_len1 = _v_lsplit__list.get_len ();
289      uintptr_t _v_len2 = 1;
290      if (((_v_len1 < (_v_len2 + (0 * 1)))))
291      {
292        RF_RETFAIL;
293      }
294      if (((_v_len1 - _v_len2) % 1))
295      {
296        goto _continue1;
297      }
298      uintptr_t _v_len___e__e_tmp_m_Listrf_m_56_m_22 = ((_v_len1 - _v_len2) / 1);
299      if (!_vt_item.term_eq (_v_lsplit__list, 0))
300      {
301        goto _continue1;
302      }
303      Expr _ve__e__e_tmp_m_Listrf_m_56_m_22 (_v_lsplit__list, (0 + 1), _v_len___e__e_tmp_m_Listrf_m_56_m_22);
304      goto _exit1;
305    }
306_continue1: {}
307  }
308_exit1: {}
309RF_END
310
311RF_FUNC (Get_m_Elem, (RF_ARG _vs_num, _ve_list;;), (RF_RES _v_res1;;))
312  if (!RF_CALL (Access::L, (_vs_num, _ve_list), _v_res1))
313  {
314    RF_FUNC_ERROR (unexpected_fail);
315  }
316RF_END
317
318RF_FUNC (Foldr, (RF_ARG _vs_Fname, _ve_Fargs, _ve_value, _ve_list;;), (RF_RES _v_res1;;))
319  Expr _v_value__1 (_ve_value);
320  Expr _v_list__1 (_ve_list);
321  for ( ; ; )
322  {
323    {
324      if ((_v_list__1.get_len () != 0))
325      {
326        goto _iter1;
327      }
328      _v_res1 = _v_value__1;
329      goto _exit__iter1;
330    }
331  _iter1: {}
332    uintptr_t _v_len1 = _v_list__1.get_len ();
333    uintptr_t _v_len2 = 1;
334    if ((_v_len1 < _v_len2))
335    {
336      RF_FUNC_ERROR (unexpected_fail);
337    }
338    uintptr_t _v_len__something = (_v_len1 - _v_len2);
339    Expr _ve_something (_v_list__1, 0, _v_len__something);
340    Expr _vt_last (_v_list__1, _v_len__something, 1);
341    if (!RF_CALL (Apply::Apply, (_vs_Fname, (_ve_Fargs + _vt_last + _v_value__1)), _v_value__1))
342    {
343      RF_FUNC_ERROR (unexpected_fail);
344    }
345    _v_list__1 = _ve_something;
346  }
347_exit__iter1: {}
348RF_END
349
350RF_FUNC (Foldr1, (RF_ARG _vs_Fname, _ve_Fargs, _ve_list;;), (RF_RES _v_res1;;))
351  {
352    {
353      uintptr_t _v_len1 = _ve_list.get_len ();
354      uintptr_t _v_len2 = 1;
355      if ((_v_len1 < _v_len2))
356      {
357        goto _block1__branch1;
358      }
359      uintptr_t _v_len__something = (_v_len1 - _v_len2);
360      Expr _ve_something (_ve_list, 0, _v_len__something);
361      Expr _vt_last (_ve_list, _v_len__something, 1);
362      RF_TAILCALL (Foldr, (_vs_Fname, _ve_Fargs, _vt_last, _ve_something), _v_res1);
363      goto _block1;
364    }
365  _block1__branch1: {}
366    _v_res1 = empty;
367  }
368_block1: {}
369RF_END
370
371RF_FUNC (Concat, (RF_ARG _ve_lists;;), (RF_RES _v_res1;;))
372  RF_TAILCALL (Map, (_c_0, empty, _ve_lists), _v_res1);
373RF_END
374
375RF_FUNC (Paren, (RF_ARG _ve_xpr;;), (RF_RES _v_res1;;))
376  RF_TAILCALL (Map, (_c_1, empty, _ve_xpr), _v_res1);
377RF_END
378
379RF_FUNC (Reverse, (RF_ARG _v_arg1;;), (RF_RES _v_res1;;))
380  {
381    {
382      uintptr_t _v_len1 = _v_arg1.get_len ();
383      uintptr_t _v_len2 = 1;
384      if ((_v_len1 < _v_len2))
385      {
386        goto _block1__branch1;
387      }
388      uintptr_t _v_len__list = (_v_len1 - _v_len2);
389      Expr _vt_erm (_v_arg1, 0, 1);
390      Expr _ve_list (_v_arg1, 1, _v_len__list);
391      Expr _v_Reverse1;
392      RF_CALL (Reverse, _ve_list, _v_Reverse1);
393      _v_res1 = (_v_Reverse1 + _vt_erm);
394      goto _block1;
395    }
396  _block1__branch1: {}
397    if ((_v_arg1.get_len () != 0))
398    {
399      RF_FUNC_ERROR (unexpected_fail);
400    }
401    _v_res1 = empty;
402  }
403_block1: {}
404RF_END
405
406RF_FUNC (Intersperse, (RF_ARG _ve_sep, _ve_list;;), (RF_RES _v_res1;;))
407  Expr _ve_new_m_list (empty);
408  Expr _v_list__1 (_ve_list);
409  for ( ; ; )
410  {
411    {
412      if ((_v_list__1.get_len () != 0))
413      {
414        goto _iter1;
415      }
416      _v_res1 = _ve_new_m_list;
417      goto _exit__iter1;
418    }
419  _iter1: {}
420    {
421      {
422        uintptr_t _v_len1 = _v_list__1.get_len ();
423        uintptr_t _v_len2 = 1;
424        if ((_v_len1 < (_v_len2 + 1)))
425        {
426          goto _block1__branch1;
427        }
428        uintptr_t _v_len__2 = (_v_len1 - _v_len2);
429        Expr _vt_1 (_v_list__1, 0, 1);
430        Expr _vv_2 (_v_list__1, 1, _v_len__2);
431        _ve_new_m_list = (_ve_new_m_list + _vt_1 + _ve_sep);
432        _v_list__1 = _vv_2;
433        goto _block1;
434      }
435    _block1__branch1: {}
436      _ve_new_m_list = (_ve_new_m_list + _v_list__1);
437      _v_list__1 = empty;
438    }
439  _block1: {}
440  }
441_exit__iter1: {}
442RF_END
443
444RF_FUNC (Nub, (RF_ARG _ve_expr;;), (RF_RES _v_res1;;))
445  Expr _v_expr__1 (_ve_expr);
446  Expr _ve_selected (empty);
447  for ( ; ; )
448  {
449    {
450      if ((_v_expr__1.get_len () != 0))
451      {
452        goto _iter1;
453      }
454      _v_res1 = _ve_selected;
455      goto _exit__iter1;
456    }
457  _iter1: {}
458    uintptr_t _v_len1 = _v_expr__1.get_len ();
459    uintptr_t _v_len2 = 1;
460    if ((_v_len1 < _v_len2))
461    {
462      RF_FUNC_ERROR (unexpected_fail);
463    }
464    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
465    Expr _vt_erm (_v_expr__1, 0, 1);
466    Expr _ve_rest (_v_expr__1, 1, _v_len__rest);
467    {
468      {
469        if ((_ve_selected.get_len () < 1))
470        {
471          goto _block2__branch1;
472        }
473        RF_lsplit (_ve_selected, 0, _ve__e__e_tmp_m_Listrf_m_95_m_21, _v_lsplit__selected);
474        for ( ; ; RF_iter(_ve_selected)++)
475        {
476          {
477            if (!RF_iter(_ve_selected))
478            {
479              goto _block2__branch1;
480            }
481            uintptr_t _v_len3 = _v_lsplit__selected.get_len ();
482            uintptr_t _v_len4 = 1;
483            if ((_v_len3 < _v_len4))
484            {
485              goto _block2__branch1;
486            }
487            uintptr_t _v_len___e__e_tmp_m_Listrf_m_95_m_28 = (_v_len3 - _v_len4);
488            if (!_vt_erm.term_eq (_v_lsplit__selected, 0))
489            {
490              goto _continue1;
491            }
492            Expr _ve__e__e_tmp_m_Listrf_m_95_m_28 (_v_lsplit__selected, 1, _v_len___e__e_tmp_m_Listrf_m_95_m_28);
493            _v_expr__1 = _ve_rest;
494            goto _exit1;
495          }
496      _continue1: {}
497        }
498      _exit1: {}
499        goto _block2;
500      }
501    _block2__branch1: {}
502      _v_expr__1 = _ve_rest;
503      _ve_selected = (_ve_selected + _vt_erm);
504    }
505  _block2: {}
506  }
507_exit__iter1: {}
508RF_END
509
510RF_FUNC (Replicate, (RF_ARG _vs_n, _ve_expr;;), (RF_RES _v_res1;;))
511  Expr _v_n__1 (_vs_n);
512  Expr _ve_list (empty);
513  for ( ; ; )
514  {
515    {
516      if (!RF_CALL (Compare::_lt__eq_, (_v_n__1, _c_2), /*void*/))
517      {
518        goto _iter1;
519      }
520      _v_res1 = _ve_list;
521      goto _exit__iter1;
522    }
523  _iter1: {}
524    RF_CALL (Arithm::_m_, (_v_n__1, _c_3), _v_n__1);
525    _ve_list = (_ve_list + _ve_expr);
526  }
527_exit__iter1: {}
528RF_END
529
530RF_FUNC (Entries, (RF_ARG _ve_expr, _ve_source;;), (RF_RES _v_res1, _v_res2;;))
531  Expr _vs_num (_c_2);
532  Expr _v_source__1 (_ve_source);
533  Expr _ve_res (empty);
534  for ( ; ; )
535  {
536    {
537      if ((_v_source__1.get_len () != 0))
538      {
539        goto _iter1;
540      }
541      _v_res1 = _vs_num;
542      _v_res2 = _ve_res;
543      goto _exit__iter1;
544    }
545  _iter1: {}
546    {
547      {
548        if ((_v_source__1.get_len () < _ve_expr.get_len ()))
549        {
550          goto _block1__branch1;
551        }
552        RF_lsplit (_v_source__1, 0, _ve_1, _v_lsplit__source__1);
553        for ( ; ; RF_iter(_v_source__1)++)
554        {
555          {
556            if (!RF_iter(_v_source__1))
557            {
558              goto _block1__branch1;
559            }
560            uintptr_t _v_len1 = _v_lsplit__source__1.get_len ();
561            uintptr_t _v_len2 = _ve_expr.get_len ();
562            if ((_v_len1 < _v_len2))
563            {
564              goto _block1__branch1;
565            }
566            uintptr_t _v_len__2 = (_v_len1 - _v_len2);
567            if (!_ve_expr.eq (_v_lsplit__source__1, 0))
568            {
569              goto _continue1;
570            }
571            Expr _ve_2 (_v_lsplit__source__1, _ve_expr.get_len (), _v_len__2);
572            RF_CALL (Arithm::_p_, (_vs_num, _c_3), _vs_num);
573            _v_source__1 = _ve_2;
574            _ve_res = (_ve_res + _ve_1);
575            goto _exit1;
576          }
577      _continue1: {}
578        }
579      _exit1: {}
580        goto _block1;
581      }
582    _block1__branch1: {}
583      _ve_res = (_ve_res + _v_source__1);
584      _v_source__1 = empty;
585    }
586  _block1: {}
587  }
588_exit__iter1: {}
589RF_END
590
591RF_FUNC (Or, (RF_ARG _ve_list1, _ve_list2;;), (RF_RES _v_res1;;))
592  Expr _v_list1__1 (_ve_list1);
593  Expr _v_list2__1 (_ve_list2);
594  for ( ; ; )
595  {
596    {
597      if ((_v_list2__1.get_len () != 0))
598      {
599        goto _iter1;
600      }
601      _v_res1 = _v_list1__1;
602      goto _exit__iter1;
603    }
604  _iter1: {}
605    uintptr_t _v_len1 = _v_list2__1.get_len ();
606    uintptr_t _v_len2 = 1;
607    if ((_v_len1 < _v_len2))
608    {
609      RF_FUNC_ERROR (unexpected_fail);
610    }
611    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
612    Expr _vt_erm (_v_list2__1, 0, 1);
613    Expr _ve_rest (_v_list2__1, 1, _v_len__rest);
614    {
615      {
616        if ((_v_list1__1.get_len () < 1))
617        {
618          goto _block2__branch1;
619        }
620        RF_lsplit (_v_list1__1, 0, _ve__e__e_tmp_m_Listrf_m_127_m_20, _v_lsplit__list1__1);
621        for ( ; ; RF_iter(_v_list1__1)++)
622        {
623          {
624            if (!RF_iter(_v_list1__1))
625            {
626              goto _block2__branch1;
627            }
628            uintptr_t _v_len3 = _v_lsplit__list1__1.get_len ();
629            uintptr_t _v_len4 = 1;
630            if ((_v_len3 < _v_len4))
631            {
632              goto _block2__branch1;
633            }
634            uintptr_t _v_len___e__e_tmp_m_Listrf_m_127_m_27 = (_v_len3 - _v_len4);
635            if (!_vt_erm.term_eq (_v_lsplit__list1__1, 0))
636            {
637              goto _continue1;
638            }
639            Expr _ve__e__e_tmp_m_Listrf_m_127_m_27 (_v_lsplit__list1__1, 1, _v_len___e__e_tmp_m_Listrf_m_127_m_27);
640            _v_list2__1 = _ve_rest;
641            goto _exit1;
642          }
643      _continue1: {}
644        }
645      _exit1: {}
646        goto _block2;
647      }
648    _block2__branch1: {}
649      _v_list1__1 = (_v_list1__1 + _vt_erm);
650      _v_list2__1 = _ve_rest;
651    }
652  _block2: {}
653  }
654_exit__iter1: {}
655RF_END
656
657RF_FUNC (And, (RF_ARG _ve_list1, _ve_list2;;), (RF_RES _v_res1;;))
658  Expr _v_list1__1 (_ve_list1);
659  Expr _ve_and (empty);
660  for ( ; ; )
661  {
662    {
663      if ((_v_list1__1.get_len () != 0))
664      {
665        goto _iter1;
666      }
667      _v_res1 = _ve_and;
668      goto _exit__iter1;
669    }
670  _iter1: {}
671    uintptr_t _v_len1 = _v_list1__1.get_len ();
672    uintptr_t _v_len2 = 1;
673    if ((_v_len1 < _v_len2))
674    {
675      RF_FUNC_ERROR (unexpected_fail);
676    }
677    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
678    Expr _vt_erm (_v_list1__1, 0, 1);
679    Expr _ve_rest (_v_list1__1, 1, _v_len__rest);
680    {
681      {
682        if ((_ve_list2.get_len () < 1))
683        {
684          goto _block2__branch1;
685        }
686        RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_141_m_20, _v_lsplit__list2);
687        for ( ; ; RF_iter(_ve_list2)++)
688        {
689          {
690            if (!RF_iter(_ve_list2))
691            {
692              goto _block2__branch1;
693            }
694            uintptr_t _v_len3 = _v_lsplit__list2.get_len ();
695            uintptr_t _v_len4 = 1;
696            if ((_v_len3 < _v_len4))
697            {
698              goto _block2__branch1;
699            }
700            uintptr_t _v_len___e__e_tmp_m_Listrf_m_141_m_27 = (_v_len3 - _v_len4);
701            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
702            {
703              goto _continue1;
704            }
705            Expr _ve__e__e_tmp_m_Listrf_m_141_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_141_m_27);
706            _v_list1__1 = _ve_rest;
707            _ve_and = (_ve_and + _vt_erm);
708            goto _exit1;
709          }
710      _continue1: {}
711        }
712      _exit1: {}
713        goto _block2;
714      }
715    _block2__branch1: {}
716      _v_list1__1 = _ve_rest;
717    }
718  _block2: {}
719  }
720_exit__iter1: {}
721RF_END
722
723RF_FUNC (Sub, (RF_ARG _ve_list1, _ve_list2;;), (RF_RES _v_res1;;))
724  Expr _v_list1__1 (_ve_list1);
725  Expr _ve_not (empty);
726  for ( ; ; )
727  {
728    {
729      if ((_v_list1__1.get_len () != 0))
730      {
731        goto _iter1;
732      }
733      _v_res1 = _ve_not;
734      goto _exit__iter1;
735    }
736  _iter1: {}
737    uintptr_t _v_len1 = _v_list1__1.get_len ();
738    uintptr_t _v_len2 = 1;
739    if ((_v_len1 < _v_len2))
740    {
741      RF_FUNC_ERROR (unexpected_fail);
742    }
743    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
744    Expr _vt_erm (_v_list1__1, 0, 1);
745    Expr _ve_rest (_v_list1__1, 1, _v_len__rest);
746    {
747      {
748        if ((_ve_list2.get_len () < 1))
749        {
750          goto _block2__branch1;
751        }
752        RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_155_m_20, _v_lsplit__list2);
753        for ( ; ; RF_iter(_ve_list2)++)
754        {
755          {
756            if (!RF_iter(_ve_list2))
757            {
758              goto _block2__branch1;
759            }
760            uintptr_t _v_len3 = _v_lsplit__list2.get_len ();
761            uintptr_t _v_len4 = 1;
762            if ((_v_len3 < _v_len4))
763            {
764              goto _block2__branch1;
765            }
766            uintptr_t _v_len___e__e_tmp_m_Listrf_m_155_m_27 = (_v_len3 - _v_len4);
767            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
768            {
769              goto _continue1;
770            }
771            Expr _ve__e__e_tmp_m_Listrf_m_155_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_155_m_27);
772            _v_list1__1 = _ve_rest;
773            goto _exit1;
774          }
775      _continue1: {}
776        }
777      _exit1: {}
778        goto _block2;
779      }
780    _block2__branch1: {}
781      _v_list1__1 = _ve_rest;
782      _ve_not = (_ve_not + _vt_erm);
783    }
784  _block2: {}
785  }
786_exit__iter1: {}
787RF_END
788
789RF_FUNC (Paren_m_Term__0, (RF_ARG _v_arg1;;), (RF_RES _v_res1;;))
790  if ((_v_arg1.get_len () != 1))
791  {
792    RF_ERROR (_c_4);
793  }
794  Expr _v_stub1 (_v_arg1, 0, 1);
795  Expr _v_Paren_m_Term1;
796  RF_CALL (Paren_m_Term, _v_stub1, _v_Paren_m_Term1);
797  _v_res1 = _v_Paren_m_Term1 ();
798RF_END
799
800RF_FUNC (Deparen_m_Term__0, (RF_ARG _v_arg1;;), (RF_RES _v_res1;;))
801  if ((_v_arg1.get_len () != 1))
802  {
803    RF_ERROR (_c_4);
804  }
805  Expr _v_stub1 (_v_arg1, 0, 1);
806  RF_TAILCALL (Deparen_m_Term, _v_stub1, _v_res1);
807RF_END
808
809}
810
811namespace List
812{
813
814static void init_ ()
815{
816  _c_0 = Expr::create_sym<Func> (Deparen_m_Term__0);
817  _c_1 = Expr::create_sym<Func> (Paren_m_Term__0);
818  _c_2 = Expr::create<Integer>("0");
819  _c_3 = Expr::create<Integer>("1");
820  _c_4 = Expr::create<Word>("Apply") + Expr::create<Word>("Apply") + Expr::create<Word>("Unexpected fail");
821}
822
823static AtStart init_registrator_ (&init_);
824
825}
826
827}
Note: See TracBrowser for help on using the repository browser.