// $Id$ $use Convert List; $func Add-Env e.items (env) = e.items (env); $func Gen-Debugs (e.in-result?) (e.debugs) e.items = (e.debugs) e.items; $func Gener-Debug e.debugs = e.debug-calls; Add-Debug e.items = :: e.items t, :: t e.items, e.items; Add-Env e.items (env), e.items : { (BRANCH t.p e.branch) e.rest = :: e.branch t, (BRANCH t.p e.branch) ; (ITER (BRANCH t.p e.branch) (FORMAT t.fp e.format) t.tail) = :: e.format (env2), :: e.branch t, :: e.tail t, (Comp-Debug t.p env) (Comp-Debug t.fp env) (ITER (BRANCH t.p e.branch) (FORMAT t.fp e.format) e.tail) (env); (s.tag t.p t.name) e.rest, s.tag : \{ EVAR; VVAR; SVAR; TVAR; } = { env : $r e (s.tag t t.name) e = env; env (s.tag t.p t.name); } :: env, (s.tag t.p t.name) ; (e1 (PRAGMA e.p) e2) e.rest = :: e2 (env2), (Comp-Debug (PRAGMA e.p) env) (e1 (PRAGMA e.p) e2) ; (e1) e.rest = :: e1 (env), (e1) ; t1 e.rest = t1 ; /*empty*/ = (env); }; Gen-Debugs (e.in-result?) (e.debugs) e.items, e.items : { e1 (Comp-Debug e.d) = ; e1 (Comp-Debug e.d) (RESULT t.p e.r) = { e.r : /*empty*/ = (RESULT t.p ); :: (e) e.r, (RESULT t.p e.r ); }; e1 (Comp-Debug e.d) (s.op t.p), s.op : \{ CUT; CUTALL; STAKE; FAIL; ERROR; } = (s.op t.p) (RESULT t.p ); e1 (Comp-Debug e.d) (CALL t.p t.name e.r) = :: (e) e.r, (CALL t.p t.name e.r ); e1 (e2) = :: (e.debugs) e2, (e2); e1 t2 = t2; /*empty*/ = (e.debugs); }; $func Conv-Var t.var = t.converted-var; Conv-Var t.var = t.var : (t t (e.name)) = (PAREN (PAREN t.var)); $func Conv-Pragma t = e; Conv-Pragma { ((PRAGMA (FILE e.file) (LINE s.line s.col)) env) = (BRANCH (PRAGMA) (RESULT (PRAGMA) (CALL (PRAGMA) (Debug Stop?) e.file s.line s.col))); t = /*empty*/; }; Gener-Debug { v.debugs = v.debugs : (t.pragma env) e, )> : { v.stop-cals = (BLOCK (PRAGMA) (BRANCH (PRAGMA) (BLOCK? (PRAGMA) v.stop-cals) (RESULT (PRAGMA) (CALL (PRAGMA) (Debug Debug) ))) (BRANCH (PRAGMA) (RESULT (PRAGMA)))); empty = empty; };; }; // Sveta: // creating of label for debug // Sveta: // Sveta: $use "rfpc"; // rfpc.rfi // Sveta: $use "rfp_lex"; // rfp_lex.rfi // Sveta: $use "rfp_parse"; // rfp_parse.rfi // Sveta: $use "rfp_compile"; // rfp_compile.rfi // Sveta: $use "rfp_format"; // rfp_format.rfi // Sveta: $use "rfp_src"; // Sveta: // Sveta: // Sveta: $use Box ; // Sveta: $use Convert ; // Sveta: $use Table ; // Sveta: $use StdIO ; // Sveta: $use Arithm ; // Sveta: $use Access; // Sveta: // Sveta: $func Debug-Call e.pos = e.debug; // Sveta: // $func Debug s.id e.names = e.Debug ; // Sveta: $func Push-Vars = ; // Sveta: $func Pop-Vars = ; // Sveta: $func Add-Vars t.var = ; // Sveta: $func Get-Vars-Str e.list = e.result; // Sveta: $func Get-Vars e.list = e.vars; // Sveta: $func Names-List t.pragma ex = ey; // Sveta: $func AS-To-Ref e.as = e.rf; // Sveta: $func Save-Id s.id (e.pos) = ; // Sveta: $func Add-Pragma t.pragma e.list = e.vars; // Sveta: $func Debug-Sent e.sentence = e.Debug; // Sveta: $func Debug-Result e.result = e.Debug; // Sveta: $func Debug-Hard e.hard = e.Debug; // Sveta: $func Debug-Module e.module = e.Debug; // Sveta: $func Store-Pragma e.pragma = ; // Sveta: $func Debug-Pattern e.pattern = e.Debug; // Sveta: $func Debug-Call-Pattern t.pragma = e.Debug; // Sveta: $func Debug-Add e.sent = e.Debug; // Sveta: $func Format-Hard t.pragma e.expr = e.format; // Sveta: $func? Debug-Lib /*empty*/ = e.lib; // Sveta: $func? Try-Open e.path = e.dir; // Sveta: $func Get-Ready-To-Work e.lib = e.ImportLib; // Sveta: $func Correct-Tab-Sources s.tab e.key = ; // Sveta: $func Def-Key s.key = s.new; // Sveta: // Sveta: $box Debug-id; // Sveta: $box Vars; // Sveta: $box Pragma; // (e.filename) s.line s.col // Sveta: $box HardExpr; // result format for :: // Sveta: $box Numb; // for unical "_debug" // Sveta: // Sveta: $table Id-Position; // Sveta: // Sveta: //RFP-Debug ex = , ex : // Sveta: //{ // Sveta: // t.Syntax e.rest = t.Syntax : { // Sveta: // (MODULE t.Module e.ModuleBody) = // Sveta: // (MODULE t.Module ); // Sveta: // (INTERFACE e.body) = t.Syntax; // Sveta: // } :: e.debug, e.debug ; // Sveta: // /*empty*/; // Sveta: // }; // Sveta: // Sveta: RFP-Debug e.module = { // Sveta: :: s.tab, // Sveta: > // Sveta: // Sveta: ; // Sveta: e.module ; // Sveta: }; // Sveta: // Sveta: Correct-Tab-Sources s.tab e.sources = e.sources : { // Sveta: /*empty*/; // Sveta: (s.key) e.rest = :: s.idx, // Sveta: ) > ; // Sveta: }; // Sveta: // Sveta: Def-Key s.key = { // Sveta: = >; // Sveta: s.key; // Sveta: }; // Sveta: // Sveta: Debug-Module // Sveta: { // Sveta: /*empty*/; // Sveta: t.item e.rest = t.item : (s.type e.body), // Sveta: { // Sveta: s.type : PRAGMA = t.item; // Sveta: s.type : IMPORT, // Sveta: { // Sveta: e.body : s.objtype t.pragma t.objname, // Sveta: { // Sveta: t.objname : CHANNEL = t.item; // Sveta: // ToDo // Sveta: t.item; // Sveta: }; // Sveta: t.item; // Sveta: }; // Sveta: s.type: \{ LOCAL; EXPORT; }, e.body : { // Sveta: CONST e.const = t.item; // Sveta: s.tag t.pragma t.fname t.input t.output e.sent = // Sveta: (s.type s.tag t.pragma t.fname t.input t.output ) // Sveta: ; // Sveta: s.objtype t.pragma t.objname = // Sveta: { // Sveta: t.objname : CHANNEL = t.item; // Sveta: // ToDo // Sveta: t.item; // Sveta: }; // Sveta: }; // Sveta: } :: e.debug, e.debug ; // Sveta: }; // Sveta: // Sveta: Debug-Sent // Sveta: { // Sveta: /*empty*/ ; // Sveta: (RESULT (PRAGMA) e.expr) e.rest = (RESULT (PRAGMA) e.expr) // Sveta: ; // Sveta: // (RESULT (EVAR (PRAGMA) e.var) e.expr) e.rest = // Sveta: // (RESULT (EVAR (PRAGMA) e.var) e.expr) ; // Sveta: (RESULT t.pragma e.expr) e.rest = // Sveta: // { e.rest : /*empty*/ = // Sveta: // (RESULT t.pragma ) ; // Sveta: // Sveta: // Sveta: (RESULT t.pragma ) ; // Sveta: // }; // Sveta: t.stat e.rest = t.stat : // Sveta: { // Sveta: (PRAGMA e.pragma) = t.stat; // Sveta: // (FORMAT (EVAR (PRAGMA) e.var)) = t.stat; // Sveta: (FORMAT t.pragma e.hard) = (FORMAT t.pragma ); // Sveta: (NOT t.branch) = (NOT ) ; // Sveta: (ITER e.sent) = (ITER ) ; // Sveta: (TRY t.try e.Nofail t.catch) = // Sveta: (TRY e.Nofail ); // Sveta: (CUT) = t.stat; // Sveta: (CUTALL t.pragma) = t.stat; // Sveta: (STAKE) = t.stat; // Sveta: (FAIL t.pragma) = t.stat; // Sveta: (ERROR t.pragma) = t.stat; // Sveta: (NOFAIL) = t.stat; // Sveta: (BLOCK t.pragma e.branch) = // Sveta: (BLOCK t.pragma ) ; // Sveta: (BLOCK? t.pragma e.branch) = // Sveta: (BLOCK? t.pragma ) ; // Sveta: (BRANCH t.pragma e.sent) = // Sveta: // (BRANCH t.pragma ) ; // Sveta: (BRANCH t.pragma ) ; // Sveta: (BRANCH? t.pragma e.sent) = // Sveta: // (BRANCH? t.pragma ) ; // Sveta: (BRANCH? t.pragma ) ; // Sveta: (LEFT t.pragma e.expr) = (LEFT t.pragma ); // Sveta: (RIGHT t.pragma e.expr) = (RIGHT t.pragma ); // Sveta: } :: e.debug, e.debug ; // Sveta: }; // Sveta: // Sveta: Debug-Add e.sent = e.sent : { // Sveta: /*empty*/ = ; // Sveta: (FORMAT t.pragma e.expr) e.rest = // Sveta: > // Sveta: ; // Sveta: (BLOCK t.pragma e.expr) e.rest = // Sveta: ; // Sveta: (BLOCK? t.pragma e.expr) e.rest = // Sveta: ; // Sveta: (LEFT t.pragma e.expr) e.rest = // Sveta: ; // Sveta: (RIGHT t.pragma e.expr) e.rest = // Sveta: ; // Sveta: e.sent = ; // Sveta: }; // Sveta: // Sveta: Format-Hard t.pragma e.expr = e.expr : { // Sveta: /*empty*/ = ; // Sveta: t1 e.rest = t1: { // Sveta: s.sym = (SVAR t.pragma ("_debug_" >)); // Sveta: (PAREN e.hard) = (PAREN ); // Sveta: (e.type t.var-pragma t.name) = // Sveta: (e.type t.pragma ("_debug_" >)); // Sveta: } :: e.format, // Sveta: : s.num, >, // Sveta: e.format ; // Sveta: }; // Sveta: // Sveta: Debug-Pattern // Sveta: { // Sveta: (PAREN e.pat) = (PAREN ); // Sveta: (e.type t.pragma t.name) = // Sveta: (e.type t.pragma t.name) ; // Sveta: e.expr = e.expr; // Sveta: }; // Sveta: // Sveta: Store-Pragma { // Sveta: (PRAGMA (FILE e.file) (LINE s.line s.col)) = ; // Sveta: }; // Sveta: // Sveta: Debug-Result // Sveta: { // Sveta: /*empty*/; // Sveta: t.res e.rest = t.res : // Sveta: { // Sveta: s1 = s1; // Sveta: (PAREN e.expr) = (PAREN ); // Sveta: (REF t.name) = t.res; // Sveta: (CALL t.pragma t.name e.expr) = (CALL t.pragma t.name ); // Sveta: (BLOCK t.pragma e.branch) = // Sveta: (BLOCK t.pragma ); // Sveta: (BLOCK? t.pragma e.branch) = // Sveta: (BLOCK? t.pragma ) ; // Sveta: (e.type t.pragma t.name) = // Sveta: t.res; // Sveta: } :: e.debug, e.debug ; // Sveta: }; // Sveta: // Sveta: Debug-Hard // Sveta: { // Sveta: /*empty*/ = ; // Sveta: t.hard e.rest = t.hard : // Sveta: { // Sveta: s1 = s1; // Sveta: (PAREN e.expr) = (PAREN ); // Sveta: (e.type t.pragma t.name) = // Sveta: t.hard; // Sveta: } :: e.debug, e.debug ; // Sveta: }; // Sveta: // Sveta: Debug-Call { // Sveta: /*empty*/ = // Sveta: : (e.file) s.line s.col, // Sveta: <"+" s.col 1> :: s.col, // Sveta: (e.file) s.line s.col :: e.pos, // Sveta: , // Sveta: (PRAGMA (FILE e.file) (LINE s.line s.col)) :: t.pragma, // Sveta: : s.id, // Sveta: >, // Sveta: , // Sveta: (BLOCK t.pragma // Sveta: (BRANCH t.pragma // Sveta: (RESULT t.pragma // Sveta: (CALL t.pragma ("Debug" "Debug-Check") s.id) // Sveta: (CALL t.pragma ("Debug" "Debug")>) // Sveta: ) // Sveta: ) // Sveta: (BRANCH t.pragma (RESULT t.pragma)) // Sveta: ); // Sveta: // ; // Sveta: t.pragma = t.pragma : (PRAGMA (FILE e.file)(LINE s.line s.col)), // Sveta: (e.file) s.line s.col :: e.pos, // Sveta: : s.id, // Sveta: >, // Sveta: , // Sveta: (BLOCK t.pragma // Sveta: (BRANCH t.pragma // Sveta: (RESULT t.pragma // Sveta: (CALL t.pragma ("Debug" "Debug-Check") s.id) // Sveta: (CALL t.pragma ("Debug" "Debug") > ) // Sveta: ) // Sveta: ) // Sveta: (BRANCH t.pragma (RESULT t.pragma)) // Sveta: ); // Sveta: // ; // Sveta: }; // Sveta: // Sveta: Debug-Call-Pattern t.pragma = // Sveta: t.pragma : (PRAGMA (FILE e.file)(LINE s.line s.col)), // Sveta: (e.file) s.line s.col :: e.pos, // Sveta: : s.id, // Sveta: >, // Sveta: , // Sveta: :: e.format, // Sveta: , // Sveta: { // Sveta: e.format : /*empty*/ = (EVAR t.pragma ("_debug_")); // Sveta: e.format; // Sveta: } :: e.format, // Sveta: (FORMAT t.pragma e.format) // Sveta: (BLOCK t.pragma // Sveta: (BRANCH t.pragma // Sveta: (RESULT t.pragma // Sveta: (CALL t.pragma ("Debug" "Debug-Check") s.id) // Sveta: (CALL t.pragma ("Debug" "Debug") >) // Sveta: ) // Sveta: ) // Sveta: (BRANCH t.pragma (RESULT t.pragma) // Sveta: ) // Sveta: ) // Sveta: (RESULT t.pragma e.format); // Sveta: // Sveta: // Call of Debug-Function with variant- parameters // Sveta: // Debug s.id e.pos = e.pos : (e.file) s.line s.col, // Sveta: // // Sveta: // '.' ; // Sveta: }; // Sveta: // Sveta: Save-Id s.idx (e.pos) = ; // e.pos : e.filename s.line s.col // Sveta: // Sveta: Try-Open { // Sveta: /*empty*/ = // Sveta: $fail; // Sveta: (e.dir) e.rest = { // Sveta: :: s.ch, // Sveta: , // Sveta: , // Sveta: e.dir; // Sveta: ; // Sveta: }; // Sveta: }; // Sveta: // Sveta: Debug-Lib = :: e.path, { // Sveta: :: e.dir, // Sveta: :: e.source, // Sveta: , // Sveta: : (INTERFACE t.name e.lib), // Debug.rfi // Sveta: ; // Sveta: $fail; // Sveta: }; // Sveta: // Sveta: Get-Ready-To-Work // Sveta: { // Sveta: /*empty*/ ; // Sveta: t.Item e.rest = // Sveta: t.Item : (s.Linkage s.ItemType t.Pragma t.ItemName e.ItemBody), // Sveta: s.ItemType : { // Sveta: FUNC = : (e.in) (e.out), // Sveta: &Fun () (); // Sveta: FUNC? = : (e.in) (e.out), // Sveta: &Fun? () (); // Sveta: } :: s.tab e.ItemDef, // Sveta: , // Sveta: (IMPORT s.ItemType t.Pragma t.ItemName e.ItemBody) // Sveta: ; // Sveta: };