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

Last change on this file since 2044 was 2044, checked in by orlov, 14 years ago
  • Improved Intersperse.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 21.9 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 _v_arg1, _v_arg2;;), (RF_RES _v_res1;;))
407  {
408    {
409      if (((_v_arg2.get_len () + 1) != 1))
410      {
411        goto _block1__branch1;
412      }
413      Expr _v_compose1 ((_v_arg1 () + _v_arg2));
414      if (_v_compose1.symbol_at (0))
415      {
416        goto _block1__branch1;
417      }
418      Expr _v_deref__compose1 (_v_compose1, 0);
419      uintptr_t _v_len1 = _v_deref__compose1.get_len ();
420      uintptr_t _v_len2 = 0;
421      if ((_v_len1 < _v_len2))
422      {
423        goto _block1__branch1;
424      }
425      uintptr_t _v_len__sep = (_v_len1 - _v_len2);
426      Expr _ve_sep (_v_deref__compose1, 0, _v_len__sep);
427      _v_res1 = empty;
428      goto _block1;
429    }
430  _block1__branch1: {}
431    {
432      if (((_v_arg2.get_len () + 1) != 2))
433      {
434        goto _block1__branch2;
435      }
436      Expr _v_compose2 ((_v_arg1 () + _v_arg2));
437      if (_v_compose2.symbol_at (0))
438      {
439        goto _block1__branch2;
440      }
441      Expr _v_deref__compose2 (_v_compose2, 0);
442      uintptr_t _v_len3 = _v_deref__compose2.get_len ();
443      uintptr_t _v_len4 = 0;
444      if ((_v_len3 < _v_len4))
445      {
446        goto _block1__branch2;
447      }
448      uintptr_t _v_len__sep2 = (_v_len3 - _v_len4);
449      Expr _vt_1 (_v_compose2, 1, 1);
450      Expr _ve_sep (_v_deref__compose2, 0, _v_len__sep2);
451      _v_res1 = _vt_1;
452      goto _block1;
453    }
454  _block1__branch2: {}
455    uintptr_t _v_len5 = (_v_arg2.get_len () + 1);
456    uintptr_t _v_len6 = 2;
457    if ((_v_len5 < _v_len6))
458    {
459      RF_FUNC_ERROR (unexpected_fail);
460    }
461    uintptr_t _v_len__list = (_v_len5 - _v_len6);
462    Expr _v_compose3 ((_v_arg1 () + _v_arg2));
463    if (_v_compose3.symbol_at (0))
464    {
465      RF_FUNC_ERROR (unexpected_fail);
466    }
467    Expr _v_deref__compose3 (_v_compose3, 0);
468    uintptr_t _v_len7 = _v_deref__compose3.get_len ();
469    uintptr_t _v_len8 = 0;
470    if ((_v_len7 < _v_len8))
471    {
472      RF_FUNC_ERROR (unexpected_fail);
473    }
474    uintptr_t _v_len__sep3 = (_v_len7 - _v_len8);
475    Expr _vt_1 (_v_compose3, 1, 1);
476    Expr _ve_list (_v_compose3, 2, _v_len__list);
477    Expr _ve_sep (_v_deref__compose3, 0, _v_len__sep3);
478    Expr _ve_new_m_list ((_vt_1 + _ve_sep));
479    for ( ; ; )
480    {
481      {
482        if ((_ve_list.get_len () != 1))
483        {
484          goto _iter1;
485        }
486        Expr _vt_2 (_ve_list, 0, 1);
487        _v_res1 = (_ve_new_m_list + _vt_2);
488        goto _exit__iter1;
489      }
490    _iter1: {}
491      uintptr_t _v_len9 = _ve_list.get_len ();
492      uintptr_t _v_len10 = 1;
493      if ((_v_len9 < _v_len10))
494      {
495        RF_FUNC_ERROR (unexpected_fail);
496      }
497      uintptr_t _v_len__rest = (_v_len9 - _v_len10);
498      Expr _vt_2 (_ve_list, 0, 1);
499      Expr _ve_rest (_ve_list, 1, _v_len__rest);
500      _ve_new_m_list = (_ve_new_m_list + _vt_2 + _ve_sep);
501      _ve_list = _ve_rest;
502    }
503  _exit__iter1: {}
504  }
505_block1: {}
506RF_END
507
508RF_FUNC (Nub, (RF_ARG _ve_expr;;), (RF_RES _v_res1;;))
509  Expr _v_expr__1 (_ve_expr);
510  Expr _ve_selected (empty);
511  for ( ; ; )
512  {
513    {
514      if ((_v_expr__1.get_len () != 0))
515      {
516        goto _iter1;
517      }
518      _v_res1 = _ve_selected;
519      goto _exit__iter1;
520    }
521  _iter1: {}
522    uintptr_t _v_len1 = _v_expr__1.get_len ();
523    uintptr_t _v_len2 = 1;
524    if ((_v_len1 < _v_len2))
525    {
526      RF_FUNC_ERROR (unexpected_fail);
527    }
528    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
529    Expr _vt_erm (_v_expr__1, 0, 1);
530    Expr _ve_rest (_v_expr__1, 1, _v_len__rest);
531    {
532      {
533        if ((_ve_selected.get_len () < 1))
534        {
535          goto _block2__branch1;
536        }
537        RF_lsplit (_ve_selected, 0, _ve__e__e_tmp_m_Listrf_m_98_m_21, _v_lsplit__selected);
538        for ( ; ; RF_iter(_ve_selected)++)
539        {
540          {
541            if (!RF_iter(_ve_selected))
542            {
543              goto _block2__branch1;
544            }
545            uintptr_t _v_len3 = _v_lsplit__selected.get_len ();
546            uintptr_t _v_len4 = 1;
547            if ((_v_len3 < _v_len4))
548            {
549              goto _block2__branch1;
550            }
551            uintptr_t _v_len___e__e_tmp_m_Listrf_m_98_m_28 = (_v_len3 - _v_len4);
552            if (!_vt_erm.term_eq (_v_lsplit__selected, 0))
553            {
554              goto _continue1;
555            }
556            Expr _ve__e__e_tmp_m_Listrf_m_98_m_28 (_v_lsplit__selected, 1, _v_len___e__e_tmp_m_Listrf_m_98_m_28);
557            _v_expr__1 = _ve_rest;
558            goto _exit1;
559          }
560      _continue1: {}
561        }
562      _exit1: {}
563        goto _block2;
564      }
565    _block2__branch1: {}
566      _v_expr__1 = _ve_rest;
567      _ve_selected = (_ve_selected + _vt_erm);
568    }
569  _block2: {}
570  }
571_exit__iter1: {}
572RF_END
573
574RF_FUNC (Replicate, (RF_ARG _vs_n, _ve_expr;;), (RF_RES _v_res1;;))
575  Expr _v_n__1 (_vs_n);
576  Expr _ve_list (empty);
577  for ( ; ; )
578  {
579    {
580      if (!RF_CALL (Compare::_lt__eq_, (_v_n__1, _c_2), /*void*/))
581      {
582        goto _iter1;
583      }
584      _v_res1 = _ve_list;
585      goto _exit__iter1;
586    }
587  _iter1: {}
588    RF_CALL (Arithm::_m_, (_v_n__1, _c_3), _v_n__1);
589    _ve_list = (_ve_list + _ve_expr);
590  }
591_exit__iter1: {}
592RF_END
593
594RF_FUNC (Entries, (RF_ARG _ve_expr, _ve_source;;), (RF_RES _v_res1, _v_res2;;))
595  Expr _vs_num (_c_2);
596  Expr _v_source__1 (_ve_source);
597  Expr _ve_res (empty);
598  for ( ; ; )
599  {
600    {
601      if ((_v_source__1.get_len () != 0))
602      {
603        goto _iter1;
604      }
605      _v_res1 = _vs_num;
606      _v_res2 = _ve_res;
607      goto _exit__iter1;
608    }
609  _iter1: {}
610    {
611      {
612        if ((_v_source__1.get_len () < _ve_expr.get_len ()))
613        {
614          goto _block1__branch1;
615        }
616        RF_lsplit (_v_source__1, 0, _ve_1, _v_lsplit__source__1);
617        for ( ; ; RF_iter(_v_source__1)++)
618        {
619          {
620            if (!RF_iter(_v_source__1))
621            {
622              goto _block1__branch1;
623            }
624            uintptr_t _v_len1 = _v_lsplit__source__1.get_len ();
625            uintptr_t _v_len2 = _ve_expr.get_len ();
626            if ((_v_len1 < _v_len2))
627            {
628              goto _block1__branch1;
629            }
630            uintptr_t _v_len__2 = (_v_len1 - _v_len2);
631            if (!_ve_expr.eq (_v_lsplit__source__1, 0))
632            {
633              goto _continue1;
634            }
635            Expr _ve_2 (_v_lsplit__source__1, _ve_expr.get_len (), _v_len__2);
636            RF_CALL (Arithm::_p_, (_vs_num, _c_3), _vs_num);
637            _v_source__1 = _ve_2;
638            _ve_res = (_ve_res + _ve_1);
639            goto _exit1;
640          }
641      _continue1: {}
642        }
643      _exit1: {}
644        goto _block1;
645      }
646    _block1__branch1: {}
647      _ve_res = (_ve_res + _v_source__1);
648      _v_source__1 = empty;
649    }
650  _block1: {}
651  }
652_exit__iter1: {}
653RF_END
654
655RF_FUNC (Or, (RF_ARG _ve_list1, _ve_list2;;), (RF_RES _v_res1;;))
656  Expr _v_list1__1 (_ve_list1);
657  Expr _v_list2__1 (_ve_list2);
658  for ( ; ; )
659  {
660    {
661      if ((_v_list2__1.get_len () != 0))
662      {
663        goto _iter1;
664      }
665      _v_res1 = _v_list1__1;
666      goto _exit__iter1;
667    }
668  _iter1: {}
669    uintptr_t _v_len1 = _v_list2__1.get_len ();
670    uintptr_t _v_len2 = 1;
671    if ((_v_len1 < _v_len2))
672    {
673      RF_FUNC_ERROR (unexpected_fail);
674    }
675    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
676    Expr _vt_erm (_v_list2__1, 0, 1);
677    Expr _ve_rest (_v_list2__1, 1, _v_len__rest);
678    {
679      {
680        if ((_v_list1__1.get_len () < 1))
681        {
682          goto _block2__branch1;
683        }
684        RF_lsplit (_v_list1__1, 0, _ve__e__e_tmp_m_Listrf_m_130_m_20, _v_lsplit__list1__1);
685        for ( ; ; RF_iter(_v_list1__1)++)
686        {
687          {
688            if (!RF_iter(_v_list1__1))
689            {
690              goto _block2__branch1;
691            }
692            uintptr_t _v_len3 = _v_lsplit__list1__1.get_len ();
693            uintptr_t _v_len4 = 1;
694            if ((_v_len3 < _v_len4))
695            {
696              goto _block2__branch1;
697            }
698            uintptr_t _v_len___e__e_tmp_m_Listrf_m_130_m_27 = (_v_len3 - _v_len4);
699            if (!_vt_erm.term_eq (_v_lsplit__list1__1, 0))
700            {
701              goto _continue1;
702            }
703            Expr _ve__e__e_tmp_m_Listrf_m_130_m_27 (_v_lsplit__list1__1, 1, _v_len___e__e_tmp_m_Listrf_m_130_m_27);
704            _v_list2__1 = _ve_rest;
705            goto _exit1;
706          }
707      _continue1: {}
708        }
709      _exit1: {}
710        goto _block2;
711      }
712    _block2__branch1: {}
713      _v_list1__1 = (_v_list1__1 + _vt_erm);
714      _v_list2__1 = _ve_rest;
715    }
716  _block2: {}
717  }
718_exit__iter1: {}
719RF_END
720
721RF_FUNC (And, (RF_ARG _ve_list1, _ve_list2;;), (RF_RES _v_res1;;))
722  Expr _v_list1__1 (_ve_list1);
723  Expr _ve_and (empty);
724  for ( ; ; )
725  {
726    {
727      if ((_v_list1__1.get_len () != 0))
728      {
729        goto _iter1;
730      }
731      _v_res1 = _ve_and;
732      goto _exit__iter1;
733    }
734  _iter1: {}
735    uintptr_t _v_len1 = _v_list1__1.get_len ();
736    uintptr_t _v_len2 = 1;
737    if ((_v_len1 < _v_len2))
738    {
739      RF_FUNC_ERROR (unexpected_fail);
740    }
741    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
742    Expr _vt_erm (_v_list1__1, 0, 1);
743    Expr _ve_rest (_v_list1__1, 1, _v_len__rest);
744    {
745      {
746        if ((_ve_list2.get_len () < 1))
747        {
748          goto _block2__branch1;
749        }
750        RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_144_m_20, _v_lsplit__list2);
751        for ( ; ; RF_iter(_ve_list2)++)
752        {
753          {
754            if (!RF_iter(_ve_list2))
755            {
756              goto _block2__branch1;
757            }
758            uintptr_t _v_len3 = _v_lsplit__list2.get_len ();
759            uintptr_t _v_len4 = 1;
760            if ((_v_len3 < _v_len4))
761            {
762              goto _block2__branch1;
763            }
764            uintptr_t _v_len___e__e_tmp_m_Listrf_m_144_m_27 = (_v_len3 - _v_len4);
765            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
766            {
767              goto _continue1;
768            }
769            Expr _ve__e__e_tmp_m_Listrf_m_144_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_144_m_27);
770            _v_list1__1 = _ve_rest;
771            _ve_and = (_ve_and + _vt_erm);
772            goto _exit1;
773          }
774      _continue1: {}
775        }
776      _exit1: {}
777        goto _block2;
778      }
779    _block2__branch1: {}
780      _v_list1__1 = _ve_rest;
781    }
782  _block2: {}
783  }
784_exit__iter1: {}
785RF_END
786
787RF_FUNC (Sub, (RF_ARG _ve_list1, _ve_list2;;), (RF_RES _v_res1;;))
788  Expr _v_list1__1 (_ve_list1);
789  Expr _ve_not (empty);
790  for ( ; ; )
791  {
792    {
793      if ((_v_list1__1.get_len () != 0))
794      {
795        goto _iter1;
796      }
797      _v_res1 = _ve_not;
798      goto _exit__iter1;
799    }
800  _iter1: {}
801    uintptr_t _v_len1 = _v_list1__1.get_len ();
802    uintptr_t _v_len2 = 1;
803    if ((_v_len1 < _v_len2))
804    {
805      RF_FUNC_ERROR (unexpected_fail);
806    }
807    uintptr_t _v_len__rest = (_v_len1 - _v_len2);
808    Expr _vt_erm (_v_list1__1, 0, 1);
809    Expr _ve_rest (_v_list1__1, 1, _v_len__rest);
810    {
811      {
812        if ((_ve_list2.get_len () < 1))
813        {
814          goto _block2__branch1;
815        }
816        RF_lsplit (_ve_list2, 0, _ve__e__e_tmp_m_Listrf_m_158_m_20, _v_lsplit__list2);
817        for ( ; ; RF_iter(_ve_list2)++)
818        {
819          {
820            if (!RF_iter(_ve_list2))
821            {
822              goto _block2__branch1;
823            }
824            uintptr_t _v_len3 = _v_lsplit__list2.get_len ();
825            uintptr_t _v_len4 = 1;
826            if ((_v_len3 < _v_len4))
827            {
828              goto _block2__branch1;
829            }
830            uintptr_t _v_len___e__e_tmp_m_Listrf_m_158_m_27 = (_v_len3 - _v_len4);
831            if (!_vt_erm.term_eq (_v_lsplit__list2, 0))
832            {
833              goto _continue1;
834            }
835            Expr _ve__e__e_tmp_m_Listrf_m_158_m_27 (_v_lsplit__list2, 1, _v_len___e__e_tmp_m_Listrf_m_158_m_27);
836            _v_list1__1 = _ve_rest;
837            goto _exit1;
838          }
839      _continue1: {}
840        }
841      _exit1: {}
842        goto _block2;
843      }
844    _block2__branch1: {}
845      _v_list1__1 = _ve_rest;
846      _ve_not = (_ve_not + _vt_erm);
847    }
848  _block2: {}
849  }
850_exit__iter1: {}
851RF_END
852
853RF_FUNC (Paren_m_Term__0, (RF_ARG _v_arg1;;), (RF_RES _v_res1;;))
854  if ((_v_arg1.get_len () != 1))
855  {
856    RF_ERROR (_c_4);
857  }
858  Expr _v_stub1 (_v_arg1, 0, 1);
859  Expr _v_Paren_m_Term1;
860  RF_CALL (Paren_m_Term, _v_stub1, _v_Paren_m_Term1);
861  _v_res1 = _v_Paren_m_Term1 ();
862RF_END
863
864RF_FUNC (Deparen_m_Term__0, (RF_ARG _v_arg1;;), (RF_RES _v_res1;;))
865  if ((_v_arg1.get_len () != 1))
866  {
867    RF_ERROR (_c_4);
868  }
869  Expr _v_stub1 (_v_arg1, 0, 1);
870  RF_TAILCALL (Deparen_m_Term, _v_stub1, _v_res1);
871RF_END
872
873}
874
875namespace List
876{
877
878static void init_ ()
879{
880  _c_0 = Expr::create_sym<Func> (Deparen_m_Term__0);
881  _c_1 = Expr::create_sym<Func> (Paren_m_Term__0);
882  _c_2 = Expr::create<Integer>("0");
883  _c_3 = Expr::create<Integer>("1");
884  _c_4 = Expr::create<Word>("Apply") + Expr::create<Word>("Apply") + Expr::create<Word>("Unexpected fail");
885}
886
887static AtStart init_registrator_ (&init_);
888
889}
890
891}
Note: See TracBrowser for help on using the repository browser.