source: to-imperative/trunk/compiler/rfp_debug.rf @ 2043

Last change on this file since 2043 was 2043, checked in by orlov, 14 years ago
  • Improved block extraction from result expressions.
  • Use asail2asail when converting to C++.
  • Remove duplicate declarations after cleanup of blocks

(rfp_asail2asail.Remove-Dupl-Decl).

  • Proper generation of debug info for $iter.
  • Fixed pragma-generation when comments are used.
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 18.0 KB
Line 
1// $Id: rfp_debug.rf 2043 2006-08-01 17:25:13Z orlov $
2
3$use Convert List;
4
5$func Add-Env e.items (env) = e.items (env);
6$func Gen-Debugs (e.in-result?) (e.debugs) e.items = (e.debugs) e.items;
7
8$func Gener-Debug e.debugs = e.debug-calls;
9
10Add-Debug e.items =
11  <Add-Env e.items ()> :: e.items t,
12  <Gen-Debugs () () e.items> :: t e.items,
13  e.items;
14
15Add-Env e.items (env), e.items : {
16  (BRANCH t.p e.branch) e.rest =
17    <Add-Env e.branch (env)> :: e.branch t,
18    (BRANCH t.p e.branch) <Add-Env e.rest (env)>;
19  (ITER (BRANCH t.p e.branch) (FORMAT t.fp e.format) t.tail) =
20    <Add-Env e.format (env)> :: e.format (env2),
21    <Add-Env (RESULT (PRAGMA)) e.branch (env2)> :: e.branch t,
22    <Add-Env t.tail (env2)> :: e.tail t,
23    (Comp-Debug t.p env)
24    (Comp-Debug t.fp env)
25    (ITER (BRANCH t.p e.branch) (FORMAT t.fp e.format) e.tail) (env);
26  (s.tag t.p t.name) e.rest, s.tag : \{ EVAR; VVAR; SVAR; TVAR; } =
27    {
28      env : $r e (s.tag t t.name) e = env;
29      env (s.tag t.p t.name);
30    } :: env,
31    (s.tag t.p t.name)
32    <Add-Env e.rest (env)>;
33  (e1 (PRAGMA e.p) e2) e.rest =
34    <Add-Env e2 (env)> :: e2 (env2),
35    (Comp-Debug (PRAGMA e.p) env)
36    (e1 (PRAGMA e.p) e2) <Add-Env e.rest (env2)>;
37  (e1) e.rest =
38    <Add-Env e1 (env)> :: e1 (env),
39    (e1) <Add-Env e.rest (env)>;
40  t1 e.rest =
41    t1 <Add-Env e.rest (env)>;
42  /*empty*/ = (env);
43};
44
45Gen-Debugs (e.in-result?) (e.debugs) e.items, e.items : {
46  e1 (Comp-Debug e.d) = <Gen-Debugs (e.in-result?) ((e.d) e.debugs) e1>;
47  e1 (Comp-Debug e.d) (RESULT t.p e.r) =
48    {
49      e.r : /*empty*/ =
50        <Gen-Debugs (e.in-result?) () e1>
51        (RESULT t.p <Gener-Debug (e.d) e.debugs>);
52      <Gen-Debugs (In-Result!) () e.r> :: (e) e.r,
53        <Gen-Debugs (e.in-result?) () e1>
54        (RESULT t.p <Gener-Debug (e.d)> e.r <Gener-Debug e.debugs>);
55    };
56  e1 (Comp-Debug e.d) (s.op t.p), s.op : \{ CUT; CUTALL; STAKE; FAIL; ERROR; } =
57    <Gen-Debugs () () e1>
58    <Gener-Debug (e.d)> (s.op t.p) (RESULT t.p <Gener-Debug e.debugs>);
59  e1 (Comp-Debug e.d) (CALL t.p t.name e.r) =
60    <Gen-Debugs (In-Result!) () e.r> :: (e) e.r,
61    <Gen-Debugs (In-Result!) () e1>
62    (CALL t.p t.name e.r <Gener-Debug (e.d)>);
63  e1 (e2) =
64    <Gen-Debugs (e.in-result?) (e.debugs) e2> :: (e.debugs) e2,
65    <Gen-Debugs (e.in-result?) (e.debugs) e1> (e2);
66  e1 t2 =
67    <Gen-Debugs (e.in-result?) (e.debugs) e1> t2;
68  /*empty*/ = (e.debugs);
69};
70
71$func Conv-Var t.var = t.converted-var;
72Conv-Var t.var =
73  t.var : (t t (e.name)) = (PAREN <To-Chars e.name> (PAREN t.var));
74 
75$func Conv-Pragma t = e;
76Conv-Pragma {
77  ((PRAGMA (FILE e.file) (LINE s.line s.col)) env) =
78    (BRANCH (PRAGMA) (RESULT (PRAGMA) (CALL (PRAGMA) (Debug Stop?) e.file s.line s.col)));
79  t = /*empty*/;
80};
81
82Gener-Debug {
83  v.debugs =
84    v.debugs : (t.pragma env) e,
85    <Map &Conv-Pragma (<Nub v.debugs>)> : {
86      v.stop-cals =
87        (BLOCK (PRAGMA) (BRANCH (PRAGMA)
88            (BLOCK? (PRAGMA) v.stop-cals)
89            (RESULT (PRAGMA) (CALL (PRAGMA) (Debug Debug) <Map &Conv-Var (env)>)))
90          (BRANCH (PRAGMA) (RESULT (PRAGMA))));
91      empty = empty;
92    };;
93};
94
95// Sveta: //  creating of label for debug
96// Sveta:
97// Sveta: $use "rfpc";         //  rfpc.rfi 
98// Sveta: $use "rfp_lex";      // rfp_lex.rfi
99// Sveta: $use "rfp_parse";    // rfp_parse.rfi
100// Sveta: $use "rfp_compile";  // rfp_compile.rfi
101// Sveta: $use "rfp_format";   // rfp_format.rfi
102// Sveta: $use "rfp_src";
103// Sveta:
104// Sveta:
105// Sveta: $use Box ;
106// Sveta: $use Convert ;
107// Sveta: $use Table ;
108// Sveta: $use StdIO ;
109// Sveta: $use Arithm ;
110// Sveta: $use Access;
111// Sveta:
112// Sveta: $func Debug-Call e.pos = e.debug;
113// Sveta: //  $func Debug s.id e.names = e.Debug ;
114// Sveta: $func Push-Vars  = ;
115// Sveta: $func Pop-Vars = ;
116// Sveta: $func Add-Vars t.var = ;
117// Sveta: $func Get-Vars-Str  e.list = e.result;
118// Sveta: $func Get-Vars e.list = e.vars;
119// Sveta: $func Names-List t.pragma ex = ey;
120// Sveta: $func AS-To-Ref e.as = e.rf;
121// Sveta: $func Save-Id s.id (e.pos) = ;
122// Sveta: $func Add-Pragma t.pragma e.list = e.vars;
123// Sveta: $func Debug-Sent e.sentence = e.Debug;
124// Sveta: $func Debug-Result e.result = e.Debug;
125// Sveta: $func Debug-Hard e.hard = e.Debug;
126// Sveta: $func Debug-Module e.module = e.Debug;
127// Sveta: $func Store-Pragma e.pragma = ;
128// Sveta: $func Debug-Pattern e.pattern = e.Debug;
129// Sveta: $func Debug-Call-Pattern t.pragma = e.Debug;
130// Sveta: $func Debug-Add e.sent = e.Debug;
131// Sveta: $func Format-Hard t.pragma e.expr = e.format;
132// Sveta: $func? Debug-Lib /*empty*/ = e.lib;
133// Sveta: $func? Try-Open e.path = e.dir;
134// Sveta: $func Get-Ready-To-Work e.lib = e.ImportLib;
135// Sveta: $func Correct-Tab-Sources s.tab e.key = ;
136// Sveta: $func Def-Key s.key = s.new;
137// Sveta:
138// Sveta: $box Debug-id;
139// Sveta: $box Vars;
140// Sveta: $box Pragma;    //  (e.filename) s.line s.col
141// Sveta: $box HardExpr;  // result format for ::
142// Sveta: $box Numb;     // for unical "_debug"
143// Sveta:
144// Sveta: $table Id-Position;
145// Sveta:
146// Sveta: //RFP-Debug ex = <PrintLN "Debug : "ex '\n'>, ex :
147// Sveta: //{
148// Sveta: //  t.Syntax e.rest = t.Syntax : {
149// Sveta: //    (MODULE t.Module e.ModuleBody) = <Push-Vars>
150// Sveta: //      (MODULE t.Module <Debug-Module e.ModuleBody>)<Pop-Vars>;                             
151// Sveta: //    (INTERFACE e.body)  = t.Syntax;
152// Sveta: //  } :: e.debug, e.debug <RFP-Debug e.rest>;
153// Sveta: //  /*empty*/;
154// Sveta: // };
155// Sveta:
156// Sveta: RFP-Debug  e.module = {
157// Sveta:   <Table-Copy &RFP-Sources> :: s.tab,
158// Sveta:   <Debug-Lib> <Correct-Tab-Sources s.tab <Domain s.tab>> 
159// Sveta:   <Push-Vars> <Store &Debug-id 0>
160// Sveta:   <Debug-Module e.module> <Pop-Vars>;
161// Sveta:   e.module ;
162// Sveta: };
163// Sveta:
164// Sveta: Correct-Tab-Sources s.tab e.sources = e.sources : {
165// Sveta:   /*empty*/;
166// Sveta:   (s.key) e.rest = <Def-Key s.key> :: s.idx, 
167// Sveta:     <Bind &RFP-Sources (s.idx) (<Lookup s.tab s.key>) > <Correct-Tab-Sources s.tab e.rest>;
168// Sveta: }; 
169// Sveta:
170// Sveta: Def-Key s.key = {
171// Sveta:   <In-Table?  &RFP-Sources s.key> = <Def-Key <"+" s.key 1> >;
172// Sveta:   s.key;                 
173// Sveta: };
174// Sveta:
175// Sveta: Debug-Module
176// Sveta: {
177// Sveta:   /*empty*/;
178// Sveta:   t.item e.rest = t.item : (s.type e.body), 
179// Sveta:   {
180// Sveta:     s.type : PRAGMA = t.item;   
181// Sveta:     s.type : IMPORT,   
182// Sveta:     {
183// Sveta:       e.body : s.objtype t.pragma t.objname,
184// Sveta:       {
185// Sveta:          t.objname : CHANNEL = t.item;
186// Sveta: // ToDo    <Add-Vars t.objname>
187// Sveta:          t.item;
188// Sveta:       };
189// Sveta:       t.item;     
190// Sveta:     };
191// Sveta:     s.type: \{ LOCAL; EXPORT; }, e.body : {
192// Sveta:       CONST e.const = t.item;
193// Sveta:       s.tag t.pragma t.fname t.input t.output e.sent = <Push-Vars>
194// Sveta:          (s.type s.tag t.pragma t.fname t.input t.output <Debug-Sent e.sent>)
195// Sveta:          <Pop-Vars>;
196// Sveta:       s.objtype t.pragma t.objname =
197// Sveta:       {
198// Sveta:          t.objname : CHANNEL = t.item;
199// Sveta: // ToDo    <Add-Vars t.objname>
200// Sveta:           t.item;
201// Sveta:       };
202// Sveta:     };
203// Sveta:   } :: e.debug, e.debug <Debug-Module e.rest>;
204// Sveta: };
205// Sveta:
206// Sveta: Debug-Sent 
207// Sveta: {
208// Sveta:   /*empty*/ ;
209// Sveta:   (RESULT (PRAGMA) e.expr) e.rest = (RESULT (PRAGMA) e.expr)
210// Sveta:     <Debug-Sent e.rest>;
211// Sveta: //  (RESULT (EVAR (PRAGMA) e.var) e.expr) e.rest =
212// Sveta: //    (RESULT (EVAR (PRAGMA) e.var) e.expr) <Debug-Sent e.rest>;
213// Sveta:   (RESULT t.pragma e.expr) e.rest = 
214// Sveta: //   { e.rest : /*empty*/ = <Debug-Call><Store-Pragma t.pragma>
215// Sveta: //     (RESULT t.pragma <Debug-Result e.expr>) <Debug-Call-Pattern t.pragma > ;
216// Sveta:     <Debug-Call> 
217// Sveta:     <Store-Pragma t.pragma>   
218// Sveta:       (RESULT t.pragma <Debug-Result e.expr>) <Debug-Add e.rest>;
219// Sveta: //  };
220// Sveta:   t.stat e.rest = t.stat :
221// Sveta:   {
222// Sveta:     (PRAGMA e.pragma) = t.stat;
223// Sveta: //    (FORMAT (EVAR (PRAGMA) e.var)) = t.stat;
224// Sveta:     (FORMAT t.pragma e.hard)  = (FORMAT t.pragma <Debug-Hard e.hard>);   
225// Sveta:     (NOT t.branch)  = (NOT <Debug-Sent t.branch>) ;
226// Sveta:     (ITER e.sent)  = (ITER <Debug-Sent e.sent>) ;
227// Sveta:     (TRY t.try e.Nofail t.catch) =
228// Sveta:       (TRY <Debug-Sent t.try> e.Nofail <Debug-Sent t.catch>);
229// Sveta:     (CUT) = t.stat;
230// Sveta:     (CUTALL t.pragma) = t.stat;
231// Sveta:     (STAKE) = t.stat;
232// Sveta:     (FAIL t.pragma) = <Debug-Call t.pragma> t.stat;
233// Sveta:     (ERROR t.pragma) = <Store-Pragma t.pragma> t.stat;
234// Sveta:     (NOFAIL) = t.stat;
235// Sveta:     (BLOCK t.pragma e.branch) = <Push-Vars> <Store-Pragma t.pragma>
236// Sveta:       (BLOCK t.pragma <Debug-Sent e.branch>) <Pop-Vars>;
237// Sveta:     (BLOCK? t.pragma e.branch) = <Push-Vars>  <Store-Pragma t.pragma>
238// Sveta:       (BLOCK? t.pragma <Debug-Sent e.branch>) <Pop-Vars>;
239// Sveta:     (BRANCH t.pragma e.sent) = <Push-Vars> <Store-Pragma t.pragma>
240// Sveta: //      (BRANCH t.pragma <Debug-Sent e.sent> <Debug-Call>) <Pop-Vars>;
241// Sveta:         (BRANCH t.pragma <Debug-Sent e.sent>) <Pop-Vars>;
242// Sveta:     (BRANCH? t.pragma e.sent) = <Push-Vars> <Store-Pragma t.pragma>
243// Sveta: //    (BRANCH? t.pragma <Debug-Sent e.sent> <Debug-Call>) <Pop-Vars> ;
244// Sveta:        (BRANCH? t.pragma <Debug-Sent e.sent>) <Pop-Vars>;
245// Sveta:     (LEFT t.pragma e.expr) = (LEFT t.pragma <Debug-Pattern e.expr>);
246// Sveta:     (RIGHT t.pragma e.expr) = (RIGHT t.pragma <Debug-Pattern e.expr>);
247// Sveta:   } :: e.debug, e.debug <Debug-Sent e.rest>;
248// Sveta: };
249// Sveta:
250// Sveta: Debug-Add e.sent = e.sent : {
251// Sveta: /*empty*/ = ;
252// Sveta: (FORMAT t.pragma e.expr) e.rest = <Store &Numb 1>
253// Sveta:   <Store &HardExpr <Format-Hard t.pragma e.expr>>
254// Sveta:   <Debug-Call-Pattern t.pragma> <Debug-Sent e.sent>;
255// Sveta: (BLOCK t.pragma e.expr) e.rest = <Debug-Call-Pattern t.pragma>
256// Sveta:   <Debug-Sent e.sent>;
257// Sveta: (BLOCK? t.pragma e.expr) e.rest = <Debug-Call-Pattern t.pragma>
258// Sveta:   <Debug-Sent e.sent>;
259// Sveta: (LEFT t.pragma e.expr) e.rest = <Debug-Call-Pattern t.pragma>
260// Sveta:   <Debug-Sent e.sent>;
261// Sveta: (RIGHT t.pragma e.expr) e.rest = <Debug-Call-Pattern t.pragma>
262// Sveta:   <Debug-Sent e.sent>;
263// Sveta: e.sent = <Debug-Sent e.sent>;
264// Sveta: };
265// Sveta:
266// Sveta: Format-Hard t.pragma e.expr = e.expr : {
267// Sveta: /*empty*/ = ;
268// Sveta: t1 e.rest = t1: {
269// Sveta:   s.sym = (SVAR t.pragma ("_debug_" <To-Word <? &Numb>>));
270// Sveta:   (PAREN e.hard) = (PAREN <Format-Hard t.pragma e.hard>);
271// Sveta:   (e.type t.var-pragma t.name) =
272// Sveta:     (e.type t.pragma ("_debug_" <To-Chars <? &Numb>>));
273// Sveta:   } :: e.format,
274// Sveta:   <? &Numb> : s.num, <Store &Numb <"+" s.num 1>>,
275// Sveta:   e.format <Format-Hard t.pragma e.rest>;
276// Sveta: };
277// Sveta:
278// Sveta: Debug-Pattern
279// Sveta: {
280// Sveta:   (PAREN e.pat) = (PAREN <Debug-Pattern e.pat>);
281// Sveta:   (e.type t.pragma t.name) =
282// Sveta:     (e.type t.pragma t.name) <Add-Vars (e.type t.name)>;
283// Sveta:   e.expr = e.expr;
284// Sveta: };
285// Sveta:
286// Sveta: Store-Pragma {
287// Sveta:  (PRAGMA (FILE e.file) (LINE s.line s.col)) = <Store &Pragma (e.file) s.line s.col>;
288// Sveta: };
289// Sveta:
290// Sveta: Debug-Result
291// Sveta: {
292// Sveta:   /*empty*/;
293// Sveta:   t.res e.rest = t.res :
294// Sveta:   {
295// Sveta:     s1 = s1;
296// Sveta:     (PAREN e.expr) = (PAREN <Debug-Result e.expr>);
297// Sveta:     (REF t.name) = t.res;
298// Sveta:     (CALL t.pragma t.name e.expr) = (CALL t.pragma t.name <Debug-Result e.expr>);
299// Sveta:     (BLOCK t.pragma e.branch) = <Push-Vars> <Store-Pragma t.pragma>
300// Sveta:       (BLOCK t.pragma <Debug-Sent e.branch>)<Pop-Vars>;
301// Sveta:     (BLOCK? t.pragma e.branch) = <Push-Vars> <Store-Pragma t.pragma>
302// Sveta:       (BLOCK? t.pragma <Debug-Sent e.branch>) <Pop-Vars>;
303// Sveta:     (e.type t.pragma t.name) =
304// Sveta:       <Add-Vars (e.type t.name)> t.res;     
305// Sveta:   } :: e.debug, e.debug <Debug-Result e.rest>;
306// Sveta: };
307// Sveta:
308// Sveta: Debug-Hard
309// Sveta: {
310// Sveta:   /*empty*/ =  ;
311// Sveta:   t.hard e.rest = t.hard :
312// Sveta:   {
313// Sveta:     s1 = s1;
314// Sveta:     (PAREN e.expr) = (PAREN <Debug-Hard e.expr>);
315// Sveta:     (e.type t.pragma t.name) = 
316// Sveta:       <Add-Vars (e.type t.name)> t.hard;
317// Sveta:   } :: e.debug, e.debug <Debug-Hard e.rest>;
318// Sveta: };
319// Sveta:
320// Sveta: Debug-Call  {
321// Sveta: /*empty*/ =
322// Sveta:      <? &Pragma> : (e.file) s.line s.col,
323// Sveta:        <"+" s.col 1> :: s.col, 
324// Sveta:        (e.file) s.line s.col :: e.pos,
325// Sveta:        <Store &Pragma e.pos>,
326// Sveta:        (PRAGMA (FILE e.file) (LINE s.line s.col)) :: t.pragma,
327// Sveta:        <? &Debug-id> : s.id,
328// Sveta:        <Store &Debug-id <"+" s.id 1>>,
329// Sveta:        <Bind &Id-Position (s.id) (e.pos)>,
330// Sveta:        (BLOCK t.pragma
331// Sveta:          (BRANCH t.pragma
332// Sveta:             (RESULT t.pragma
333// Sveta:              (CALL t.pragma ("Debug" "Debug-Check") s.id)
334// Sveta:              (CALL t.pragma ("Debug" "Debug")<Get-Vars-Str t.pragma <? &Vars>>)
335// Sveta:             )
336// Sveta:           )
337// Sveta:           (BRANCH t.pragma (RESULT t.pragma))
338// Sveta:        ); 
339// Sveta: //     <Debug s.id e.pos>;
340// Sveta: t.pragma = t.pragma : (PRAGMA (FILE e.file)(LINE s.line s.col)),
341// Sveta:     (e.file) s.line s.col :: e.pos,
342// Sveta:     <? &Debug-id> : s.id,
343// Sveta:     <Store &Debug-id <"+" s.id 1>>,
344// Sveta:     <Bind &Id-Position (s.id) (e.pos)>,
345// Sveta:     (BLOCK t.pragma
346// Sveta:       (BRANCH t.pragma
347// Sveta:          (RESULT t.pragma
348// Sveta:            (CALL t.pragma ("Debug" "Debug-Check") s.id)
349// Sveta:            (CALL t.pragma ("Debug" "Debug")  <Get-Vars-Str t.pragma <? &Vars>> )
350// Sveta:          )
351// Sveta:        )
352// Sveta:        (BRANCH t.pragma (RESULT t.pragma))
353// Sveta:     );
354// Sveta: //  <Debug s.id e.pos >;
355// Sveta: };
356// Sveta:
357// Sveta: Debug-Call-Pattern t.pragma =
358// Sveta:   t.pragma : (PRAGMA (FILE e.file)(LINE s.line s.col)),
359// Sveta:   (e.file) s.line s.col :: e.pos,
360// Sveta:   <? &Debug-id> : s.id,
361// Sveta:   <Store &Debug-id <"+" s.id 1>>,
362// Sveta:   <Bind &Id-Position (s.id)(e.pos)>,
363// Sveta:   <? &HardExpr> :: e.format,
364// Sveta:   <Store &HardExpr /*empty*/ >,
365// Sveta:   { 
366// Sveta:     e.format : /*empty*/ = (EVAR t.pragma ("_debug_"));
367// Sveta:     e.format;
368// Sveta:   } :: e.format,
369// Sveta:   (FORMAT t.pragma e.format)
370// Sveta:   (BLOCK t.pragma
371// Sveta:     (BRANCH t.pragma
372// Sveta:       (RESULT t.pragma
373// Sveta:         (CALL t.pragma ("Debug" "Debug-Check") s.id)
374// Sveta:         (CALL t.pragma ("Debug" "Debug") <Get-Vars-Str t.pragma <? &Vars>>)
375// Sveta:       )
376// Sveta:     )
377// Sveta:     (BRANCH t.pragma (RESULT t.pragma)
378// Sveta:     )
379// Sveta:   )
380// Sveta:   (RESULT t.pragma e.format);
381// Sveta:
382// Sveta: // Call of Debug-Function with variant- parameters
383// Sveta: // Debug s.id e.pos = e.pos : (e.file) s.line s.col, 
384// Sveta: //   <Save-Id s.id (e.idx s.line s.col)>
385// Sveta: //     <PrintLN 's.id = 's.id ' e.pos= ' e.file
386// Sveta: //     s.line s.col 'e.names ='<Names-List (e.pos) <Get-Vars <? &Vars>>> > ;
387// Sveta:
388// Sveta: // new level of vars-stack is added
389// Sveta: Push-Vars = <Store &Vars <? &Vars> () >;
390// Sveta:
391// Sveta: // level of vars-stack is deleted
392// Sveta: Pop-Vars  = <? &Vars> : e.var (e.last),
393// Sveta:             <Store &Vars e.var>;
394// Sveta:
395// Sveta: Add-Vars t.var =  // t.var = (e.type t.name)
396// Sveta:   <? &Vars> :: e.list, e.list : {
397// Sveta:      e1 ( e2 t.var e3) e4 = ;
398// Sveta:      e1 (e.last) = <Store &Vars e1 (e.last t.var) >;
399// Sveta:   };
400// Sveta:
401// Sveta: Get-Vars
402// Sveta: {
403// Sveta:   /*empty*/ = /*empty*/;
404// Sveta:    (e.head) e.tail = e.head <Get-Vars e.tail>;
405// Sveta: };
406// Sveta:
407// Sveta: Get-Vars-Str   
408// Sveta: {
409// Sveta:   t.pragma  = ;
410// Sveta:   t.pragma (e.head) e.tail  =  {
411// Sveta:     e.head : /*empty*/  = <Get-Vars-Str  t.pragma e.tail>;
412// Sveta:     <Names-List t.pragma e.head> <Get-Vars-Str t.pragma e.tail>;
413// Sveta:   };
414// Sveta: };
415// Sveta:
416// Sveta: Add-Pragma t.pragma e.list = e.list :
417// Sveta: {
418// Sveta:   (s.type t.name) e.tail = (s.type t.pragma t.name) <Add-Pragma t.pragma e.tail>;
419// Sveta:    /*empty*/ = ;;
420// Sveta: };
421// Sveta:
422// Sveta: Names-List
423// Sveta: { 
424// Sveta:    t.pragma  = /*empty*/;
425// Sveta:    t.pragma t.var e.tail = (PAREN <To-Word <AS-To-Ref t.var>>) (PAREN <Add-Pragma t.pragma  t.var>)
426// Sveta:                   <Names-List t.pragma e.tail>;
427// Sveta: };     
428// Sveta:
429// Sveta: AS-To-Ref
430// Sveta: {
431// Sveta:   SVAR = 's';
432// Sveta:   TVAR = 't';
433// Sveta:   EVAR = 'e';
434// Sveta:   VVAR = 'v';
435// Sveta:   (s.tag (e.name)) = <AS-To-Ref s.tag> '.' <To-Chars e.name> ;
436// Sveta: };
437// Sveta:
438// Sveta: Save-Id s.idx (e.pos) = ;  // e.pos : e.filename s.line s.col
439// Sveta:
440// Sveta: Try-Open {
441// Sveta: /*empty*/ = <PrintLN "File of debug-library " &Name-Debug-File "  not found ">
442// Sveta:    $fail;
443// Sveta: (e.dir) e.rest = {
444// Sveta:   <Channel> :: s.ch,
445// Sveta:   <Open-File s.ch e.dir &Dir-Separator &Name-Debug-File "r">,
446// Sveta:   <Close-Channel s.ch>,
447// Sveta:   e.dir;
448// Sveta:   <Try-Open e.rest>;
449// Sveta:   };
450// Sveta: };
451// Sveta: 
452// Sveta: Debug-Lib  =  <? &RFP-Include-Path> :: e.path, {
453// Sveta:   <Try-Open e.path> :: e.dir,
454// Sveta:   <RFP-Lexer e.dir &Dir-Separator &Name-Debug-File> :: e.source,
455// Sveta:   <Store &RFP-Token-Stack e.source>,
456// Sveta:   <RFP-Parser> : (INTERFACE t.name e.lib),      // Debug.rfi
457// Sveta:   <Get-Ready-To-Work e.lib>; 
458// Sveta:   $fail;
459// Sveta: };
460// Sveta:
461// Sveta: Get-Ready-To-Work 
462// Sveta: {
463// Sveta:   /*empty*/ ;
464// Sveta:   t.Item e.rest =
465// Sveta:     t.Item : (s.Linkage s.ItemType t.Pragma t.ItemName e.ItemBody),
466// Sveta:     s.ItemType : {
467// Sveta:       FUNC = <Left 0 2 e.ItemBody> : (e.in) (e.out),
468// Sveta:         &Fun (<Format-Exp e.in>) (<Format-Exp e.out>);
469// Sveta:       FUNC? = <Left 0 2 e.ItemBody> : (e.in) (e.out),
470// Sveta:         &Fun? (<Format-Exp e.in>) (<Format-Exp e.out>);
471// Sveta:     } :: s.tab e.ItemDef,
472// Sveta:     <Bind s.tab (t.ItemName) (IMPORT s.ItemType t.Pragma e.ItemDef)>,
473// Sveta:     (IMPORT s.ItemType t.Pragma t.ItemName e.ItemBody)
474// Sveta:     <Get-Ready-To-Work e.rest>;
475// Sveta: };
476
477
Note: See TracBrowser for help on using the repository browser.