source: to-imperative/trunk/library/StdIO/StdIO.cc @ 2030

Last change on this file since 2030 was 2030, checked in by orlov, 15 years ago
  • Fresh-generated libraries for C++.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 12.4 KB
Line 
1#include <rf_core.hh>
2#include <refal/Arithm.hh>
3#include <refal/Class.hh>
4#include <refal/Convert.hh>
5#include <refal/Compare.hh>
6#include <refal/Table.hh>
7#include "../Stream/StreamErr.hh"
8#include "../Stream/Stream.hh"
9#include "../Lexer/Lexer.hh"
10#include <refal/Error.hh>
11#include <refal/Box.hh>
12#include "StdIO.hh"
13
14namespace refal
15{
16
17using namespace rfrt;
18
19namespace StdIO
20{
21
22//Expr StdIn;
23//
24//Expr StdOut;
25//
26//Expr StdErr;
27
28Expr Read_m_Chunk_m_Size;
29
30static Expr Buffers;
31
32RF_DECL (Open_m_File);
33
34RF_DECL (Close_m_Channel);
35
36RF_DECL (EOF_q_);
37
38RF_DECL (Read_m_Char_e_);
39
40RF_DECL (Read_m_Char);
41
42RF_DECL (Read_m_Line_e_);
43
44RF_DECL (Read_m_Line);
45
46RF_DECL (Read_e_);
47
48RF_DECL (Read);
49
50RF_DECL (Read_m_Main);
51
52RF_DECL (Print);
53
54RF_DECL (Write);
55
56RF_DECL (Print_e_);
57
58RF_DECL (Flush_e_);
59
60RF_DECL (Write_e_);
61
62RF_DECL (PrintLN);
63
64RF_DECL (PrintLN_e_);
65
66RF_DECL (WriteLN);
67
68RF_DECL (Prim_m_Read);
69
70RF_DECL (WriteLN_e_);
71
72RF_DECL (Prim_m_Open_m_File);
73
74RF_DECL (Prim_m_Close_m_Channel);
75
76RF_DECL (Parse_m_File_m_Name);
77
78RF_DECL (Erase_m_File);
79
80RF_DECL (Channel);
81
82RF_DECL (Prim_m_Read__0);
83
84static Expr _c_0;
85
86static Expr _c_1;
87
88static Expr _c_2;
89
90static Expr _c_3;
91
92static Expr _c_4;
93
94static Expr _c_5;
95
96static Expr _c_6;
97
98static Expr _c_7;
99
100static Expr _c_8;
101
102static Expr _c_9;
103
104static Expr _c_10;
105
106static Expr _c_11;
107
108static Expr _c_12;
109
110static Expr _c_13;
111
112static Expr _c_14;
113
114static Expr _c_15;
115
116RF_FUNC (Open_m_File, (RF_ARG _vs_channel, _ve_file, _vs_mode;;), RF_VOID)
117  {
118    {
119      {
120        if (!RF_CALL (Class::Channel_q_, _vs_channel, /*void*/))
121        {
122          goto _negation1;
123        }
124        goto _block1__branch1;
125      }
126    _negation1: {}
127      RF_TAILCALL (Error::Lib_m_Error, (_c_0, _c_1), /*void*/);
128      goto _block1;
129    }
130  _block1__branch1: {}
131    {
132      {
133        if (!RF_CALL (Class::Word_q_, _vs_mode, /*void*/))
134        {
135          goto _negation2;
136        }
137        goto _block1__branch2;
138      }
139    _negation2: {}
140      RF_TAILCALL (Error::Lib_m_Error, (_c_0, _c_2), /*void*/);
141      goto _block1;
142    }
143  _block1__branch2: {}
144    if (!RF_CALL (Prim_m_Open_m_File, (_vs_channel, _ve_file, _vs_mode), /*void*/))
145    {
146      RF_RETFAIL;
147    }
148    Expr _v_Stream1;
149    RF_CALL (Stream::Stream, (_c_3, (_vs_channel + Read_m_Chunk_m_Size)), _v_Stream1);
150    RF_TAILCALL (Table::Bind, (Buffers, _vs_channel, _v_Stream1), /*void*/);
151  }
152_block1: {}
153RF_END
154
155RF_FUNC (Close_m_Channel, (RF_ARG _vs_channel;;), RF_VOID)
156  {
157    {
158      {
159        if (!RF_CALL (Class::Channel_q_, _vs_channel, /*void*/))
160        {
161          goto _negation1;
162        }
163        goto _block1__branch1;
164      }
165    _negation1: {}
166      RF_TAILCALL (Error::Lib_m_Error, (_c_4, _c_1), /*void*/);
167      goto _block1;
168    }
169  _block1__branch1: {}
170    RF_CALL (Prim_m_Close_m_Channel, _vs_channel, /*void*/);
171    RF_TAILCALL (Table::Unbind, (Buffers, _vs_channel), /*void*/);
172  }
173_block1: {}
174RF_END
175
176RF_FUNC (EOF_q_, (RF_ARG _vs_channel;;), RF_VOID)
177  {
178    {
179      Expr _v_Lookup1;
180      if (!RF_CALL (Table::Lookup, (Buffers, _vs_channel), _v_Lookup1))
181      {
182        goto _block1__branch1;
183      }
184      if ((_v_Lookup1.get_len () != 1))
185      {
186        goto _block1__branch1;
187      }
188      if (!_v_Lookup1.symbol_at (0))
189      {
190        goto _block1__branch1;
191      }
192      Expr _vs_tream (_v_Lookup1, 0, 1);
193      RF_TAILCALL (Stream::End_m_of_m_Stream_q_, _vs_tream, /*void*/);
194      goto _block1;
195    }
196  _block1__branch1: {}
197    RF_TAILCALL (Error::Lib_m_Error, (_c_5, _c_6), /*void*/);
198  }
199_block1: {}
200RF_END
201
202RF_FUNC (Read_m_Char_e_, (RF_ARG _vs_channel;;), (RF_RES _v_res1;;))
203  {
204    {
205      Expr _v_Lookup1;
206      if (!RF_CALL (Table::Lookup, (Buffers, _vs_channel), _v_Lookup1))
207      {
208        goto _block1__branch1;
209      }
210      if ((_v_Lookup1.get_len () != 1))
211      {
212        goto _block1__branch1;
213      }
214      if (!_v_Lookup1.symbol_at (0))
215      {
216        goto _block1__branch1;
217      }
218      Expr _vs_tream (_v_Lookup1, 0, 1);
219      Expr _v_Getc1;
220      if (!RF_CALL (Stream::Getc, _vs_tream, _v_Getc1))
221      {
222        RF_RETFAIL;
223      }
224      if ((1 != 1))
225      {
226        RF_RETFAIL;
227      }
228      if (!_v_Getc1.symbol_at (0))
229      {
230        RF_RETFAIL;
231      }
232      Expr _vs_char (_v_Getc1, 0, 1);
233      _v_res1 = _vs_char;
234      goto _block1;
235    }
236  _block1__branch1: {}
237    RF_CALL (Error::Lib_m_Error, (_c_7, _c_6), /*void*/);
238    RF_RETFAIL;
239  }
240_block1: {}
241RF_END
242
243RF_FUNC (Read_m_Char, RF_VOID, (RF_RES _v_res1;;))
244  RF_TAILCALL (Read_m_Char_e_, StdIn, _v_res1);
245RF_END
246
247RF_FUNC (Read_m_Line_e_, (RF_ARG _vs_channel;;), (RF_RES _v_res1;;))
248  {
249    {
250      Expr _v_Lookup1;
251      if (!RF_CALL (Table::Lookup, (Buffers, _vs_channel), _v_Lookup1))
252      {
253        goto _block1__branch1;
254      }
255      if ((_v_Lookup1.get_len () != 1))
256      {
257        goto _block1__branch1;
258      }
259      if (!_v_Lookup1.symbol_at (0))
260      {
261        goto _block1__branch1;
262      }
263      Expr _vs_tream (_v_Lookup1, 0, 1);
264      Expr _v_Get_m_Line1;
265      RF_CALL (Stream::Get_m_Line, _vs_tream, _v_Get_m_Line1);
266      {
267        {
268          uintptr_t _v_len1 = _v_Get_m_Line1.get_len ();
269          uintptr_t _v_len2 = (1 + 1);
270          if (((_v_len1 < (_v_len2 + (0 * 1)))))
271          {
272            goto _block2__branch1;
273          }
274          if (((_v_len1 - _v_len2) % 1))
275          {
276            goto _block2__branch1;
277          }
278          uintptr_t _v_len__line = ((_v_len1 - _v_len2) / 1);
279          if (!_c_8.eq (_v_Get_m_Line1, (0 + _v_len__line)))
280          {
281            goto _block2__branch1;
282          }
283          Expr _ve_line (_v_Get_m_Line1, 0, _v_len__line);
284          _v_res1 = _ve_line;
285          goto _block2;
286        }
287      _block2__branch1: {}
288        {
289          uintptr_t _v_len3 = _v_Get_m_Line1.get_len ();
290          uintptr_t _v_len4 = 1;
291          if (((_v_len3 < (_v_len4 + (0 * 1)))))
292          {
293            goto _block2__branch2;
294          }
295          if (((_v_len3 - _v_len4) % 1))
296          {
297            goto _block2__branch2;
298          }
299          uintptr_t _v_len__line2 = ((_v_len3 - _v_len4) / 1);
300          if (!_c_9.term_eq (_v_Get_m_Line1, (0 + _v_len__line2)))
301          {
302            goto _block2__branch2;
303          }
304          Expr _ve_line (_v_Get_m_Line1, 0, _v_len__line2);
305          _v_res1 = _ve_line;
306          goto _block2;
307        }
308      _block2__branch2: {}
309        {
310          uintptr_t _v_len5 = _v_Get_m_Line1.get_len ();
311          uintptr_t _v_len6 = 1;
312          if (((_v_len5 < (_v_len6 + (0 * 1)))))
313          {
314            goto _block2__branch3;
315          }
316          if (((_v_len5 - _v_len6) % 1))
317          {
318            goto _block2__branch3;
319          }
320          uintptr_t _v_len__line3 = ((_v_len5 - _v_len6) / 1);
321          if (!_c_10.term_eq (_v_Get_m_Line1, (0 + _v_len__line3)))
322          {
323            goto _block2__branch3;
324          }
325          Expr _ve_line (_v_Get_m_Line1, 0, _v_len__line3);
326          _v_res1 = _ve_line;
327          goto _block2;
328        }
329      _block2__branch3: {}
330        uintptr_t _v_len7 = _v_Get_m_Line1.get_len ();
331        uintptr_t _v_len8 = 0;
332        if (((_v_len7 < (_v_len8 + (1 * 1)))))
333        {
334          RF_RETFAIL;
335        }
336        if (((_v_len7 - _v_len8) % 1))
337        {
338          RF_RETFAIL;
339        }
340        uintptr_t _v_len__line4 = ((_v_len7 - _v_len8) / 1);
341        Expr _vv_line (_v_Get_m_Line1, 0, _v_len__line4);
342        _v_res1 = _vv_line;
343      }
344    _block2: {}
345      goto _block1;
346    }
347  _block1__branch1: {}
348    RF_CALL (Error::Lib_m_Error, (_c_11, _c_6), /*void*/);
349    RF_RETFAIL;
350  }
351_block1: {}
352RF_END
353
354RF_FUNC (Read_m_Line, RF_VOID, (RF_RES _v_res1;;))
355  RF_TAILCALL (Read_m_Line_e_, StdIn, _v_res1);
356RF_END
357
358RF_FUNC (Read_e_, (RF_ARG _vs_channel;;), (RF_RES _v_res1;;))
359  RF_TAILCALL (Read_m_Main, (_c_12, _vs_channel), _v_res1);
360RF_END
361
362RF_FUNC (Read, RF_VOID, (RF_RES _v_res1;;))
363  RF_TAILCALL (Read_m_Main, (_c_13, StdIn), _v_res1);
364RF_END
365
366RF_FUNC (Read_m_Main, (RF_ARG _vs_fname, _vs_channel;;), (RF_RES _v_res1;;))
367  {
368    {
369      Expr _v_Lookup1;
370      if (!RF_CALL (Table::Lookup, (Buffers, _vs_channel), _v_Lookup1))
371      {
372        goto _block1__branch1;
373      }
374      if ((_v_Lookup1.get_len () != 1))
375      {
376        goto _block1__branch1;
377      }
378      if (!_v_Lookup1.symbol_at (0))
379      {
380        goto _block1__branch1;
381      }
382      Expr _vs_tream (_v_Lookup1, 0, 1);
383      Expr _ve_result;
384      {
385        {
386          if (!RF_CALL (Lexer::Read_m_Term_q_, _vs_tream, _ve_result))
387          {
388            goto _block2__branch1;
389          }
390          goto _block2;
391        }
392      _block2__branch1: {}
393        _ve_result = empty;
394      }
395    _block2: {}
396      {
397        {
398          Expr _v_Errors1;
399          RF_CALL (StreamErr::Errors, /*void*/, _v_Errors1);
400          uintptr_t _v_len1 = _v_Errors1.get_len ();
401          uintptr_t _v_len2 = 1;
402          if (((_v_len1 < (_v_len2 + (0 * 1)))))
403          {
404            goto _block3__branch1;
405          }
406          if (((_v_len1 - _v_len2) % 1))
407          {
408            goto _block3__branch1;
409          }
410          uintptr_t _v_len___e__e_tmp_m_StdIOrf_m_86_m_46 = ((_v_len1 - _v_len2) / 1);
411          if (_v_Errors1.symbol_at (0))
412          {
413            goto _block3__branch1;
414          }
415          Expr _v_deref__Errors1 (_v_Errors1, 0);
416          if ((_v_deref__Errors1.get_len () != (1 + 1 + 1)))
417          {
418            goto _block3__branch1;
419          }
420          if (_v_deref__Errors1.symbol_at ((0 + 1 + 1)))
421          {
422            goto _block3__branch1;
423          }
424          Expr _v_deref__deref__Errors1 (_v_deref__Errors1, (0 + 1 + 1));
425          uintptr_t _v_len3 = _v_deref__deref__Errors1.get_len ();
426          uintptr_t _v_len4 = 0;
427          if (((_v_len3 < (_v_len4 + (0 * 1)))))
428          {
429            goto _block3__branch1;
430          }
431          if (((_v_len3 - _v_len4) % 1))
432          {
433            goto _block3__branch1;
434          }
435          uintptr_t _v_len__message = ((_v_len3 - _v_len4) / 1);
436          Expr _ve__e__e_tmp_m_StdIOrf_m_86_m_46 (_v_Errors1, (0 + 1), _v_len___e__e_tmp_m_StdIOrf_m_86_m_46);
437          Expr _vt_name (_v_deref__Errors1, 0, 1);
438          Expr _vt_pos (_v_deref__Errors1, (0 + 1), 1);
439          Expr _ve_message (_v_deref__deref__Errors1, 0, _v_len__message);
440          RF_CALL (Error::Lib_m_Error, ((_c_14 + _vs_fname), _ve_message), /*void*/);
441          RF_RETFAIL;
442          goto _block3;
443        }
444      _block3__branch1: {}
445      }
446    _block3: {}
447      if ((_ve_result.get_len () != 1))
448      {
449        RF_RETFAIL;
450      }
451      Expr _vt_erm (_ve_result, 0, 1);
452      _v_res1 = _vt_erm;
453      goto _block1;
454    }
455  _block1__branch1: {}
456    RF_CALL (Error::Lib_m_Error, ((_c_14 + _vs_fname), _c_6), /*void*/);
457    RF_RETFAIL;
458  }
459_block1: {}
460RF_END
461
462RF_FUNC (Prim_m_Read__0, (RF_ARG _v_arg1;;), (RF_RES _v_res1;;))
463  if ((_v_arg1.get_len () != (1 + 1)))
464  {
465    RF_ERROR (_c_15);
466  }
467  if (!_v_arg1.symbol_at (0))
468  {
469    RF_ERROR (_c_15);
470  }
471  if (!_v_arg1.symbol_at ((0 + 1)))
472  {
473    RF_ERROR (_c_15);
474  }
475  Expr _v_stub1 (_v_arg1, 0, 1);
476  Expr _v_stub2 (_v_arg1, (0 + 1), 1);
477  RF_TAILCALL (Prim_m_Read, (_v_stub1, _v_stub2), _v_res1);
478RF_END
479
480}
481
482namespace StdIO
483{
484
485static void init_ ()
486{
487//  StdIn = new rftype::StaticObject<rftype::Channel>(L"StdIn");
488//  StdOut = new rftype::StaticObject<rftype::Channel>(L"StdOut");
489//  StdErr = new rftype::StaticObject<rftype::Channel>(L"StdErr");
490  Read_m_Chunk_m_Size = Expr::create<Integer>("64");
491  Buffers = new rftype::StaticObject<rftype::Table>(L"Buffers");
492  _c_0 = Expr::create<Word>("StdIO") + Expr::create<Word>("Open-File");
493  _c_1 = Expr::create<Word>("Arg 1 is not a Channel");
494  _c_2 = Expr::create<Word>("Arg 3 is not a Word");
495  _c_3 = Expr::create_sym<Func> (Prim_m_Read__0);
496  _c_4 = Expr::create<Word>("StdIO") + Expr::create<Word>("Close-Channel");
497  _c_5 = Expr::create<Word>("StdIO") + Expr::create<Word>("EOF?");
498  _c_6 = Expr::create<Word>("Channel is not open");
499  _c_7 = Expr::create<Word>("StdIO") + Expr::create<Word>("Read-Char!");
500  _c_8 = Char::create_expr (L"\r\n");
501  _c_9 = Expr (_c_8, 1, 1);
502  _c_10 = Expr (_c_8, 0, 1);
503  _c_11 = Expr::create<Word>("StdIO") + Expr::create<Word>("Read-Line!");
504  _c_12 = Expr::create<Word>("Read!");
505  _c_13 = Expr::create<Word>("Read");
506  _c_14 = Expr (_c_5, 0, 1);
507  _c_15 = Expr::create<Word>("Apply") + Expr::create<Word>("Apply") + Expr::create<Word>("Unexpected fail");
508}
509
510static AtStart init_registrator_ (&init_);
511
512static void init_StdIn_ ()
513{
514  Expr _v_Stream1;
515  RF_CALL (Stream::Stream, (_c_3, (StdIn + Expr::create<Integer>(1))), _v_Stream1);
516  RF_CALL (Table::Bind, (Buffers, StdIn, _v_Stream1), /*void*/);
517}
518
519static rfrt::InitStdIn init_StdIn_registrator_ (init_StdIn_);
520
521}
522
523}
Note: See TracBrowser for help on using the repository browser.