Changeset 2043


Ignore:
Timestamp:
Aug 1, 2006, 9:25:13 PM (14 years ago)
Author:
orlov
Message:
  • 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.
Location:
to-imperative/trunk/compiler
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/trunk/compiler/rfp_as2as.rf

    r2042 r2043  
    141141    e1 (FORMAT (PRAGMA) e.aux2)
    142142    <Flatten-Result s.N (e.aux1 e.aux2) e.rest>;
     143  (CALL t.p t.name e.r) e.rest =
     144    <Flatten-Result s.N () e.r> :: e.assigns s.N (e.r),
     145    {
     146      e.assigns : v =
     147        <Format-Exp e.Re> :: e.Fe,
     148        <MSG (e.Fe) (e.Fe)> :: e.Fe,  // hack for avoiding non-hard formats
     149        <Gener-Var-Indices s.N (e.Fe) "aux" "result"> :: e.aux1 s.N,
     150        (RESULT (PRAGMA) e.Re) (FORMAT (PRAGMA) e.aux1)
     151        e.assigns <Flatten-Result s.N (e.aux1 (CALL t.p t.name e.r)) e.rest>;
     152      <Flatten-Result s.N (e.Re (CALL t.p t.name e.r)) e.rest>;
     153    };
    143154  (PAREN e.r) e.rest =
    144155    <Flatten-Result s.N () e.r> :: e.assigns s.N (e.r),
    145156    e.assigns <Flatten-Result s.N (e.Re (PAREN e.r)) e.rest>;
    146   (CALL t.p t.name e.r) e.rest =
    147     <Flatten-Result s.N () e.r> :: e.assigns s.N (e.r),
    148     e.assigns <Flatten-Result s.N (e.Re (CALL t.p t.name e.r)) e.rest>;
    149157  t1 e.rest = <Flatten-Result s.N (e.Re t1) e.rest>;
    150158  /*empty*/ = s.N (e.Re);
  • to-imperative/trunk/compiler/rfp_asail2asail.rf

    r1950 r2043  
    1111$func Remove-Unreachable e.asail = e.asail;
    1212
     13$func Remove-Dupl-Decl (e.decls) (e.subst) e.asail = e.asail;
     14
     15$func Free-Idx = s.idx;
     16
     17
    1318Simplify-ASAIL e.asail =
    14   <Remove-Unreachable <Simplify e.asail>>;
     19  <Remove-Dupl-Decl () () <Remove-Unreachable <Simplify e.asail>>>;
    1520
    1621Simplify {
     
    3338$box Last-Breaks;
    3439
    35 $func GetR s.box = t.right-term;
     40$func? GetR s.box = t.right-term;
    3641GetR s.box =
    3742  <? s.box> : e1 t2,
     
    7782        (FOR (e.cont) (e.break) (/*empty-cond*/) (e.step) e.body) ();
    7883      };
    79       (CATCH-ERROR) = (CATCH-ERROR e.body) ();
     84      (TRY) = {
     85        <? &Last-Breaks> : e (e Normal-Exit) =
     86          (TRY e.body) (e2);
     87        e2 : (CATCH-ERROR e.catch-body) e3,
     88          (TRY e.body) ((CATCH-ERROR e.catch-body e3));
     89      };
    8090      (e.item) = (e.item e.body) (e2);
    8191    } :: e.t1 (e2),
     
    105115  };
    106116  t1 e2 = t1 <Remove-Unreachable e2>;
     117  /*empty*/ =
     118    {
     119      <GetR &Last-Breaks> : (e.breaks),
     120        <Put &Last-Breaks (e.breaks Normal-Exit)>;;
     121    };
     122};
     123
     124
     125Remove-Dupl-Decl (e.decls) (e.subst) e.items, e.items : {
     126  t1 e.rest = {
     127    t1 : (DECL s.type t.var) = {
     128      e.decls : $r e (DECL s.type-old t.var) e = {
     129        s.type : s.type-old = <Remove-Dupl-Decl (e.decls) (e.subst) e.rest>;
     130        t.var : (s.tag e (e.name)),
     131          (s.tag 'dd' (e.name <Free-Idx>)) :: t.new-var,
     132          (DECL s.type t.new-var) :: t.new-decl,
     133          t.new-decl <Remove-Dupl-Decl (e.decls t.new-decl) (e.subst (t.var t.new-var)) e.rest>;
     134      };
     135      t1 <Remove-Dupl-Decl (e.decls t1) (e.subst) e.rest>;
     136    };
     137    t1 : (EXPR t.var e.expr) = {
     138      e.decls : $r e (DECL s.type-old t.var) e = {
     139        s.type-old : Expr =
     140          (ASSIGN t.var <Remove-Dupl-Decl (e.decls) (e.subst) e.expr>)
     141          <Remove-Dupl-Decl (e.decls) (e.subst) e.rest>;
     142        t.var : (s.tag e (e.name)),
     143          (s.tag 'dd' (e.name <Free-Idx>)) :: t.new-var,
     144          (EXPR t.new-var <Remove-Dupl-Decl (e.decls) (e.subst) e.expr>)
     145          <Remove-Dupl-Decl (e.decls (DECL Expr t.new-var)) (e.subst (t.var t.new-var)) e.rest>;
     146      };
     147      (EXPR t.var <Remove-Dupl-Decl (e.decls) (e.subst) e.expr>)
     148      <Remove-Dupl-Decl (e.decls (DECL Expr t.var)) (e.subst) e.rest>;
     149    };
     150    e.subst : e (t1 t.new-var) e =
     151      <Remove-Dupl-Decl (e.decls) (e.subst) t.new-var e.rest>;
     152    t1 : (e2) =
     153      (<Remove-Dupl-Decl (e.decls) (e.subst) e2>) <Remove-Dupl-Decl (e.decls) (e.subst) e.rest>;
     154    t1 <Remove-Dupl-Decl (e.decls) (e.subst) e.rest>;
     155  };
    107156  /*empty*/ = /*empty*/;
    108157};
     
    170219};
    171220
     221
     222$box Idx;
     223
     224Free-Idx =
     225  {
     226    <? &Idx> : s1 = <"+" s1 1>;
     227    1;
     228  } :: s1,
     229  <Store &Idx s1>,
     230  s1;
     231
  • to-imperative/trunk/compiler/rfp_asail_cpp.rf

    r1992 r2043  
    311311    } :: e.prefix,
    312312    e.prefix <Rfp2Cpp (STATIC t.name)>;
    313   (s.var-tag t.name) = <Rfp2Cpp (s.var-tag t.name)>;
     313  (s.var-tag e.ns t.name) = <Rfp2Cpp (s.var-tag e.ns t.name)>;
    314314};
    315315
  • to-imperative/trunk/compiler/rfp_asail_java.rf

    r1960 r2043  
    340340  (REF t.name) = <Name-To-Java t.name>;
    341341  ERROR-EXPR = 'err';
    342   (s.var-tag t.name) = <Var-To-Java (s.var-tag t.name)>;
     342  (s.var-tag e.ns t.name) = <Var-To-Java term>;
    343343};
    344344
  • to-imperative/trunk/compiler/rfp_compile.rf

    r2026 r2043  
    209209  <Prepare-Res (e.in)> : (e.arg),
    210210  <Vars e.arg> :: e.arg-vars,
    211   <Map &Set-Var- (Instantiated? True) (e.arg-vars)> : e,
     211  <Map &Set-Var (Instantiated? True) (e.arg-vars)> : e,
    212212  s.tag : {
    213213    FUNC = FUNC (FATAL);
     
    649649    <Gener-Subst-Vars (e.Fout) e.prefix> :: e.Re,
    650650    <Vars e.Re> :: e.vars,
    651     <Map &Set-Var- (Instantiated? True) (e.vars)> : e,
     651    <Map &Set-Var (Instantiated? True) (e.vars)> : e,
    652652    {
    653653      s.tag : FUNC? =   (Failable (CALL t.name (e.splited-Re) (e.vars)));
     
    758758};
    759759
     760/*
     761 * Обеспечивает, что сгенерированные препроцессорами переменные (с именами,
     762 * оканчивающимися на число) не пересекаются с программными переменными (за
     763 * счёт того, что таг будет VAR).
     764 */
    760765Prepare-Vars {
    761766  (s.var-tag (e.prefix s.n)) e.rest, <Int? s.n> =
    762767    {
    763       <Lookup &Prep-Vars e.prefix s.n>;
     768      <Lookup &Prep-Vars (s.var-tag (e.prefix s.n))>;
    764769      <Gener-Vars ((s.var-tag)) e.prefix> :: e.var,
    765         <Bind &Prep-Vars (e.prefix s.n) (e.var)>,
     770        <Bind &Prep-Vars ((s.var-tag (e.prefix s.n))) (e.var)>,
    766771        e.var;
    767772    } :: e.var,
     
    10691074       */
    10701075      <Prepare-Res (e.Re) (e.Pe)> : (e.R1) (e.P1),
    1071       <Map &Set-Var- (Clashes /*empty*/) (<Vars e.R1 e.P1>)> : e,
     1076      <Map &Set-Var (Clashes /*empty*/) (<Vars e.R1 e.P1>)> : e,
    10721077      (e.clashes (e.R1) (s.dir e.P1)) e.rest;
    10731078  } :: (e.clashes) e.Snt,
  • to-imperative/trunk/compiler/rfp_debug.rf

    r2034 r2043  
    1717    <Add-Env e.branch (env)> :: e.branch t,
    1818    (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);
    1926  (s.tag t.p t.name) e.rest, s.tag : \{ EVAR; VVAR; SVAR; TVAR; } =
    2027    {
     
    3946  e1 (Comp-Debug e.d) = <Gen-Debugs (e.in-result?) ((e.d) e.debugs) e1>;
    4047  e1 (Comp-Debug e.d) (RESULT t.p e.r) =
    41     <Gen-Debugs (In-Result!) () e.r> :: (e) e.r,
    42     <Gen-Debugs (e.in-result?) () e1>
    43     (RESULT t.p <Gener-Debug (e.d)> e.r <Gener-Debug e.debugs>);
     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    };
    4456  e1 (Comp-Debug e.d) (s.op t.p), s.op : \{ CUT; CUTALL; STAKE; FAIL; ERROR; } =
    4557    <Gen-Debugs () () e1>
     
    5062    (CALL t.p t.name e.r <Gener-Debug (e.d)>);
    5163  e1 (e2) =
    52     <Gen-Debugs (e.in-result?) () e2> :: (e.debugs2) e2,
    53     <Gen-Debugs (e.in-result?) (e.debugs2 e.debugs) e1> (e2);
     64    <Gen-Debugs (e.in-result?) (e.debugs) e2> :: (e.debugs) e2,
     65    <Gen-Debugs (e.in-result?) (e.debugs) e1> (e2);
    5466  e1 t2 =
    5567    <Gen-Debugs (e.in-result?) (e.debugs) e1> t2;
     
    6476Conv-Pragma {
    6577  ((PRAGMA (FILE e.file) (LINE s.line s.col)) env) =
    66     (RESULT (PRAGMA) (CALL (PRAGMA) (Debug Stop?) e.file s.line s.col));
     78    (BRANCH (PRAGMA) (RESULT (PRAGMA) (CALL (PRAGMA) (Debug Stop?) e.file s.line s.col)));
    6779  t = /*empty*/;
    6880};
     
    7385    <Map &Conv-Pragma (<Nub v.debugs>)> : {
    7486      v.stop-cals =
    75         (BLOCK? (PRAGMA) (BRANCH (PRAGMA) v.stop-cals
    76           (RESULT (PRAGMA) (CALL (PRAGMA) (Debug Debug) <Map &Conv-Var (env)>)))
     87        (BLOCK (PRAGMA) (BRANCH (PRAGMA)
     88            (BLOCK? (PRAGMA) v.stop-cals)
     89            (RESULT (PRAGMA) (CALL (PRAGMA) (Debug Debug) <Map &Conv-Var (env)>)))
    7790          (BRANCH (PRAGMA) (RESULT (PRAGMA))));
    7891      empty = empty;
  • to-imperative/trunk/compiler/rfp_format.rf

    r2034 r2043  
    174174
    175175MSG-Terms {
     176  (PAREN e.Fe1) (PAREN e.Fe2) = (PAREN <MSG-Exprs (e.Fe1) e.Fe2>);
    176177  t.Ft t.Ft = t.Ft;
    177   (PAREN e.Fe1) (PAREN e.Fe2) = (PAREN <MSG-Exprs (e.Fe1) e.Fe2>);
    178178  s s = (SVAR);
    179179  (SVAR) s = (SVAR);
  • to-imperative/trunk/compiler/rfp_lex.rf

    r1920 r2043  
    3737$use Convert ;
    3838$use Table ;
     39$use Apply ;
     40$use List ;
    3941
    4042$box Source ;
     
    217219            \{
    218220              '/' e.rest2 = <Scan-Token>;
    219               '*' e.rest2 = <Scan-Token <Skip-Comment e.rest2>>;
     221              '*' e.rest2 = <Next-Column>, <Scan-Token <Skip-Comment e.rest2>>;
    220222              s.err e.rest2 = <RFP-Error (<Token-Position>)
    221223                ("Invalid character \'" s.err "\'")>,
     
    450452
    451453Skip-Comment e.line = {
    452   e.line : e1 '*/' e.rest = e.rest ;
     454  e.line : e1 '*/' e.rest = <Map &Apply (<Replicate <Length e1 '*/'> &Next-Column>)> : e, e.rest;
    453455  <Skip-Comment <Get-Source-Line>>;
    454456  <RFP-Error (<Token-Position>) ("Unexpected end of file")>;
  • to-imperative/trunk/compiler/rfp_vars.rf

    r1950 r2043  
    139139    /*empty*/;
    140140  };
    141 
    142 Set-Var- e.info t.var = <Set-Var e.info t.var>;
    143 
    144141
    145142
  • to-imperative/trunk/compiler/rfp_vars.rfi

    r1950 r2043  
    66$func Set-Var e.info t.var = ;
    77$func? Get-Var t.key e.var = e.val;
    8 $func Set-Var- e = e;
    98
    109$func Vars-Copy-State = t.vars;
  • to-imperative/trunk/compiler/rfpc.rf

    r2034 r2043  
    275275                <In-Table? &RFP-Options NO-OPTIM> = e.module;
    276276                <Verbose "as-ail optimization started">,
    277                   <ASAIL-Optim e.module> :: e.module,
     277                  <Simplify-ASAIL e.module> :: e.module,
     278//                  <ASAIL-Optim e.module> :: e.module,
    278279                  <Verbose "as-ail optimization finished"> =
    279280                  e.module;
     
    302303                <In-Table? &RFP-Options NO-OPTIM> = e.module;
    303304                <Verbose "as-ail optimization started">,
    304                   <ASAIL-Optim e.module> :: e.module,
     305                  <Simplify-ASAIL e.module> :: e.module,
     306//                  <ASAIL-Optim e.module> :: e.module,
    305307                  <Verbose "as-ail optimization finished"> =
    306308                  e.module;
Note: See TracChangeset for help on using the changeset viewer.