source: to-imperative/trunk/opents/samples/fab.tpp

Last change on this file was 3923, checked in by yura, 9 years ago
  • GExpr does not change in copy. Memory is controlled by GlobalExprs?.
File size: 3.6 KB
Line 
1
2#include "trefal.hh"
3
4namespace fab {
5
6tfun int Fab (TExpr _ge_arg1, tout Expr _v_res1);
7
8}
9
10namespace refal {
11
12namespace StdIO {
13
14int PrintLn (TExpr&);
15
16}
17
18}
19
20namespace fab {
21
22int Main (TExpr&);
23
24}
25
26namespace fab {
27
28static GExpr empty;
29
30static GExpr _c_3;
31
32static GExpr _c_1;
33
34static GExpr _c_0;
35
36static GExpr _c_2;
37
38}
39
40namespace fab {
41
42int Main (TExpr& _v_res1) {
43  TExpr _ve_1 (TExpr (_c_0).get_ref());
44  ::refal::StdIO::PrintLn(_ve_1);
45  TExpr _ge_auxcall1;
46  Fab(_ve_1, _ge_auxcall1);
47  TExpr _ge_auxcall2;
48  Fab(TExpr (_c_1).get_ref(), _ge_auxcall2);
49  TExpr _ge_auxcall3;
50  Fab(TExpr (_c_1).get_ref(), _ge_auxcall3);
51  ::refal::StdIO::PrintLn(((_ge_auxcall1 + (_ge_auxcall2 + _ge_auxcall3 ().get_ref()).get_ref()).get_ref()));
52  (Expr&)_v_res1 = (Expr&)TExpr(empty);
53  return 0;
54}
55
56tfun int Fab (TExpr _ge_arg1, tout Expr _v_res1) {
57  {
58    {
59      int _v_len1 = ((Expr&)_ge_arg1).get_len();
60      int _v_len2 = 1;
61      if (_v_len1 < _v_len2)
62      {
63        goto _block1__branch1;
64      }
65      int _v_len__2 = (_v_len1 - _v_len2);
66      if (!(_c_1[0] == ((Expr&)_ge_arg1)[0]))
67      {
68        goto _block1__branch1;
69      }
70      TExpr _ve_2(_ge_arg1, (0 + 1), _v_len__2);
71      TExpr _v_Fab1;
72      Fab(_ve_2, _v_Fab1);
73      (Expr&)_v_res1 = (Expr&)((TExpr (_c_2).get_ref() + _v_Fab1).get_ref());
74      goto _block1;
75    }
76  _block1__branch1: {}
77    {
78      int _v_len3 = ((Expr&)_ge_arg1).get_len();
79      int _v_len4 = 1;
80      if (_v_len3 < _v_len4)
81      {
82        goto _block1__branch2;
83      }
84      int _v_len__22 = (_v_len3 - _v_len4);
85      if (!((Expr&)_ge_arg1).symbol_at(0))
86      {
87        goto _block1__branch2;
88      }
89      TExpr _vs_1(_ge_arg1, 0, 1);
90      TExpr _ve_2(_ge_arg1, (0 + 1), _v_len__22);
91      TExpr _v_Fab2;
92      Fab(_ve_2, _v_Fab2);
93      (Expr&)_v_res1 = (Expr&)((_vs_1 + _v_Fab2).get_ref());
94      goto _block1;
95    }
96  _block1__branch2: {}
97    {
98      int _v_len5 = ((Expr&)_ge_arg1).get_len();
99      int _v_len6 = 1;
100      if (_v_len5 < _v_len6)
101      {
102        goto _block1__branch3;
103      }
104      int _v_len__23 = (_v_len5 - _v_len6);
105      if (((Expr&)_ge_arg1).symbol_at(0))
106      {
107        goto _block1__branch3;
108      }
109      TExpr _v_deref__arg1(((Expr&)_ge_arg1)[0]);
110      int _v_len7 = ((Expr&)_v_deref__arg1).get_len();
111      int _v_len8 = 0;
112      if (_v_len7 < _v_len8)
113      {
114        goto _block1__branch3;
115      }
116      int _v_len__1 = (_v_len7 - _v_len8);
117      TExpr _ve_2(_ge_arg1, (0 + 1), _v_len__23);
118      TExpr _ve_1(_v_deref__arg1, 0, _v_len__1);
119      TExpr _ge_auxcall1;
120      Fab(_ve_1, _ge_auxcall1);
121      TExpr _v_Fab3;
122      Fab(_ve_2, _v_Fab3);
123      (Expr&)_v_res1 = (Expr&)((_ge_auxcall1 ().get_ref() + _v_Fab3).get_ref());
124      goto _block1;
125    }
126  _block1__branch3: {}
127    if (((Expr&)_ge_arg1).get_len() != 0)
128    {
129      {
130        TExpr ex;
131        ((Expr&)ex).init_str("Unexpected fail", 15);
132        throw ex;
133      }
134    }
135    (Expr&)_v_res1 = (Expr&)TExpr(empty);
136  }
137_block1: {}
138  return 0;
139}
140
141}
142
143namespace fab {
144
145tfun int init_ () {
146  _c_3 = GExpr(3).add("AEA", 3);
147  _c_1 = _c_3.subexpr(0, 1);
148  _c_0 = GExpr(8).add("ABABA", 5).add(GExpr(5).add("CA", 2).add(GExpr(9).add("A", 1).add(_c_3).add("ADA", 3).add(GExpr(3).add("EA", 2).add(_c_1)).add("AAA", 3)).add("AC", 2)).add("BA", 2);
149  _c_2 = _c_0.subexpr(1, 1);
150  return 0;
151}
152
153tfun int cleanup_ () {
154  global_exprs.clear();
155  return 0;
156}
157
158}
159
160GlobalExprs global_exprs;
161
162tfun int main (int argc, char *argv[]) {
163  for (int i = 0; i < ts::realsuperSize; i++) {
164    tct(atRank(i));
165    (int)fab::init_();
166  }
167  TExpr res;
168  fab::Main(res);
169  for (int i = 0; i < ts::realsuperSize; i++) {
170    tct(atRank(i));
171    (int)fab::cleanup_();
172  }
173  return 0;
174}
Note: See TracBrowser for help on using the repository browser.