Changeset 697


Ignore:
Timestamp:
Apr 29, 2003, 9:40:35 PM (18 years ago)
Author:
sveta
Message:
  • Modified for new format t.var (TVAR, SVAR, STATIC etc.)
File:
1 edited

Legend:

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

    r694 r697  
    6969$func Clear-Table s.table e.key = ;
    7070
    71 $func Label-In-Table t.label = t.result;
     71$func Label-In-Table t.label = (e.maybe-empty);
    7272
    7373ASAIL-Optim  e.asail, e.asail: {
     
    7777    (FUNC t.name t.args t.ress e.body) =
    7878      <Clear-Table &Used-Label <Domain &Used-Label>>,
    79       <ASAIL-Optim e.body> :: e.body-opt,
    80       <Correct-Label e.body-opt> :: e.body,
     79      <ASAIL-Optim e.body> :: e.body,
     80      <Correct-Label e.body> :: e.body,
    8181      (FUNC t.name t.args t.ress e.body);
    8282    (IF (e.cond) e.body) =
     
    8484        {
    8585          e.res-cond: 0 = /*empty*/;
    86           <ASAIL-Optim e.body> :: e.body-opt,
     86          <ASAIL-Optim e.body> :: e.body,
    8787            {
    88               e.res-cond:1 = e.body-opt;
    89               (IF (e.res-cond) e.body-opt );
     88              e.res-cond : 1 = e.body;
     89              (IF (e.res-cond) e.body);
    9090            };
    9191        }; 
    9292    (FOR t.label (e.cond) t.step e.body) =
    93       <ASAIL-Optim e.body> :: e.body-opt,                       
    94       (FOR t.label (e.cond) t.step e.body-opt);
    95     (LABEL t.label e.body) = <ASAIL-Optim e.body> :: e.body-opt,
    96       (LABEL t.label e.body-opt) ;
    97     (TRY e.body) = <ASAIL-Optim e.body> :: e.body-opt,
    98       (TRY e.body-opt);
    99     (CATCH-ERROR e.body) =<ASAIL-Optim e.body> :: e.body-opt,
    100       (CATCH-ERROR e.body-opt);
     93      <ASAIL-Optim e.body> :: e.body,                   
     94      (FOR t.label (e.cond) t.step e.body);
     95    (LABEL t.label e.body) = <ASAIL-Optim e.body> :: e.body,
     96      (LABEL t.label e.body) ;
     97    (TRY e.body) = <ASAIL-Optim e.body> :: e.body,
     98      (TRY e.body);
     99    (CATCH-ERROR e.body) =<ASAIL-Optim e.body> :: e.body,
     100      (CATCH-ERROR e.body);
    101101    (LSPLIT e.expr (e.min) t.var1 t.var2) =
    102       <Optim-Ref e.expr> :: e.expr-opt,
    103       <Push><Optim-Int e.min> :: e.min-opt,
    104       (LSPLIT e.expr-opt (e.min-opt) t.var1 t.var2) ;
     102      <Optim-Ref e.expr> :: e.expr,
     103      <Push><Optim-Int e.min> :: e.min,
     104      (LSPLIT e.expr (e.min) t.var1 t.var2) ;
    105105    (RSPLIT e.expr (e.min) t.var1 t.var2) =
    106       <Optim-Ref e.expr> :: e.expr-opt,
    107       <Push><Optim-Int e.min> :: e.min-opt,             
    108       (RSPLIT e.expr-opt (e.min-opt) t.var1 t.var2) ;
     106      <Optim-Ref e.expr> :: e.expr,
     107      <Push><Optim-Int e.min> :: e.min,         
     108      (RSPLIT e.expr (e.min) t.var1 t.var2) ;
    109109    (ASSIGN t.var e.expr) =
    110       <Optim-Expr () e.expr> :: e.expr-opt,
    111       (ASSIGN t.var e.expr-opt);
    112     (EXPR t.var e.expr) = <Optim-Ref e.expr> :: e.expr-opt,
    113       (EXPR t.var e.expr-opt);
     110      <Optim-Expr () e.expr> :: e.expr,
     111      (ASSIGN t.var e.expr);
     112    (EXPR t.var e.expr) = <Optim-Ref e.expr> :: e.expr,
     113      (EXPR t.var e.expr);
    114114    (DEREF t.var e.expr (e.pos)) =
    115115      (DEREF t.var <Optim-Ref e.expr >
     
    124124//  (DECL e1) = (DECL e1);
    125125//  (DROP e1) = (DROP e1);
    126     (CONTINUE (e.label)) = 
    127       <Bind &Used-Label (e.label)()>
    128       (CONTINUE (e.label)) ;
    129     (BREAK (e.label)) = 
    130       <Bind &Used-Label (e.label)()>
    131       (BREAK (e.label)) ;
     126    (CONTINUE t.label) = 
     127      <Bind &Used-Label (t.label) ()>
     128      (CONTINUE t.label ) ;
     129    (BREAK t.label ) = 
     130      <Bind &Used-Label (t.label) ()>
     131      (BREAK t.label ) ;
    132132//  (ERROR e1) = (ERROR e1);
    133133//  (CONSTEXPR e1) = (CONSTEXPR e1);
     134//  (DECL-CONST t.name) = (DECL-CONST t.name);
    134135//  (DECL-FUNC e1) = (DECL-FUNC e1);
    135136//  (s.call t.name (e.exprs) (e.ress)) = (s.call t.name (e.exprs)(e.ress));
     
    141142Optim-Expr  (e.init) e.expr-all, e.expr-all : {
    142143  /*empty*/ = e.init;
    143   (VAR t.name) e.rest =
    144     <Optim-Expr (e.init (VAR t.name)) e.rest>;
    145144  s.ObjectSymbol e.rest,
    146145    {
     
    157156  (DEREF e.expr) e.rest = <Optim-Ref e.init  e.expr-all>;
    158157  (SUBEXPR e.expr) e.rest = <Optim-Ref e.init e.expr-all>;
     158  t.var e.rest = <Optim-Expr (e.init t.var) e.rest>;
    159159};
    160160
     
    170170      (SUBEXPR <Optim-Ref e.expr> (<Push> <Optim-Int e.pos>)
    171171        (<Push> <Optim-Int e.len>)) ;
    172     (VAR t.name)  = (VAR t.name);
     172    t.var  = t.var ;
    173173    } :: e.cpp-item,
    174174  e.cpp-item  <Optim-Ref e.rest>;
     
    180180    s.ObjectSymbol = s.ObjectSymbol;
    181181    (LENGTH e.expr) = (LENGTH <Optim-Ref e.expr>);
    182     (MAX e.args) = <Optim-Int-Args e.args> :: e.args-optim,
    183       <Optim-MAX () () e.args-optim >;
    184     (MIN e.args) = <Optim-Int-Args e.args> :: e.args-optim,
    185       <Optim-MIN () () e.args-optim  > ;
     182    (MAX e.args) = <Optim-Int-Args e.args> :: e.args,
     183      <Optim-MAX () () e.args>;
     184    (MIN e.args) = <Optim-Int-Args e.args> :: e.args,
     185      <Optim-MIN () () e.args> ;
    186186    (INFIX s.op e.args ) = s.op: {
    187       "+" = <Optim-Int-Args e.args> :: e.args-optim,
    188         <Optim-Add (0) () e.args-optim>;
    189       "-" = <Optim-Int-Args e.args> :: e.args-optim,
    190         <Optim-Minus () () (0) e.args-optim>;
    191       "*" = <Optim-Int-Args e.args> :: e.args-optim,
    192         <Optim-Mult (1) () e.args-optim> ;
    193       "/" = <Optim-Int-Args e.args> :: e.args-optim,
    194         <Optim-Div e.args-optim > ;
    195       "%" = <Optim-Int-Args e.args> :: e.args-optim,
    196         <Optim-Rem e.args-optim>;
     187      "+" = <Optim-Int-Args e.args> :: e.args,
     188        <Optim-Add (0) () e.args>;
     189      "-" = <Optim-Int-Args e.args> :: e.args,
     190        <Optim-Minus () () (0) e.args>;
     191      "*" = <Optim-Int-Args e.args> :: e.args,
     192        <Optim-Mult (1) () e.args> ;
     193      "/" = <Optim-Int-Args e.args> :: e.args,
     194        <Optim-Div e.args > ;
     195      "%" = <Optim-Int-Args e.args> :: e.args,
     196        <Optim-Rem e.args>;
    197197      };
    198198    (VAR  t.name ) = (VAR t.name);
     
    368368  t.cond-term e.rest = t.cond-term : {
    369369    (CALL e.call) = <Optim-Cond (e.init (CALL e.call)) e.rest>;
    370     (SYMBOL? e.expr (e.pos)) = <Optim-Ref e.expr> :: e.expr-opt,
    371       <Push> <Optim-Int e.pos> :: e.pos-opt,
    372       <Optim-Cond (e.init (SYMBOL? e.expr-opt (e.pos-opt))) e.rest>;     
     370    (SYMBOL? e.expr (e.pos)) = <Optim-Ref e.expr> :: e.expr,
     371      <Push> <Optim-Int e.pos> :: e.pos,
     372      <Optim-Cond (e.init (SYMBOL? e.expr (e.pos))) e.rest>;     
    373373    (FLAT-SUBEXPR? e.expr (e.pos) (e.len)) =
    374        <Optim-Ref e.expr> :: e.expr-opt,
    375        <Push> <Optim-Int e.pos> :: e.pos-opt,
    376        <Push> <Optim-Int e.len> :: e.len-opt,
    377        <Optim-Cond (e.init (FLAT-SUBEXPR? e.expr-opt
    378          (e.pos-opt)(e.len-opt))) e.rest>;
     374       <Optim-Ref e.expr> :: e.expr,
     375       <Push> <Optim-Int e.pos> :: e.pos,
     376       <Push> <Optim-Int e.len> :: e.len,
     377       <Optim-Cond (e.init (FLAT-SUBEXPR? e.expr
     378         (e.pos)(e.len))) e.rest>;
    379379    (EQ (e.expr1) (e.pos1) (e.len1) (e.expr2) (e.pos2) (e.len2)) =
    380       <Optim-Ref e.expr1> :: e.expr1-opt,
    381       <Push> <Optim-Int e.pos1> :: e.pos1-opt,
    382       <Push> <Optim-Int e.len1> :: e.len1-opt
    383       <Optim-Ref e.expr2> :: e.expr2-opt,
    384       <Push> <Optim-Int e.pos2> :: e.pos2-opt,
    385       <Push> <Optim-Int e.len2> :: e.len2-opt,
    386       <Optim-Cond (e.init (EQ (e.expr1-opt)
    387         (e.pos1-opt)(e.len1-opt)(e.expr2-opt)(e.pos2-opt)(e.len2-opt)))e.rest>;
     380      <Optim-Ref e.expr1> :: e.expr1,
     381      <Push> <Optim-Int e.pos1> :: e.pos1,
     382      <Push> <Optim-Int e.len1> :: e.len1,     
     383      <Optim-Ref e.expr2> :: e.expr2,
     384      <Push> <Optim-Int e.pos2> :: e.pos2,
     385      <Push> <Optim-Int e.len2> :: e.len2,
     386      <Optim-Cond (e.init (EQ (e.expr1)
     387        (e.pos1)(e.len1)(e.expr2)(e.pos2)(e.len2)))e.rest>;
    388388    (FLAT-EQ (e.expr1) (e.pos1) (e.expr2) (e.pos2) (e.len)) =
    389       <Optim-Ref e.expr1> :: e.expr1-opt,
    390       <Push> <Optim-Int e.pos1> :: e.pos1-opt,
    391       <Optim-Ref e.expr2> :: e.expr2-opt,
    392       <Push> <Optim-Int e.pos2> :: e.pos2-opt,
    393       <Push> <Optim-Int e.len> :: e.len-opt,
    394       <Optim-Cond (e.init (FLAT-EQ (e.expr1-opt)
    395         (e.pos1-opt)(e.expr2-opt)(e.pos2-opt)(e.len-opt))) e.rest>;
     389      <Optim-Ref e.expr1> :: e.expr1,
     390      <Push> <Optim-Int e.pos1> :: e.pos1,
     391      <Optim-Ref e.expr2> :: e.expr2,
     392      <Push> <Optim-Int e.pos2> :: e.pos2,
     393      <Push> <Optim-Int e.len> :: e.len,
     394      <Optim-Cond (e.init (FLAT-EQ (e.expr1)
     395        (e.pos1)(e.expr2)(e.pos2)(e.len))) e.rest>;
    396396    (NOT e.cond-new) = <Optim-Cond () e.cond-new> :: e.res,
    397397      e.res: {
     
    402402    (INFIX s.op e.args) =  {
    403403      s.op : \{ "&&"; "||"; } =
    404         <Optim-Cond () e.args> :: e.args-opt,
    405           <Optim-Cond-Log s.op e.args-opt>;
     404        <Optim-Cond () e.args> :: e.args,
     405          <Optim-Cond-Log s.op e.args>;
    406406      s.op : \{ "<"; ">"; "<="; ">="; "=="; } =
    407         <Optim-Int-Args e.args> :: e.args-opt,
    408           <Optim-Cond-Int s.op e.args-opt >;
     407        <Optim-Int-Args e.args> :: e.args,
     408          <Optim-Cond-Int s.op e.args>;
    409409      };
    410410    };
     
    534534  t.item : {
    535535    (IF (e.cond) e.body) =
    536       <Correct-Label e.body> :: e.body-label,
    537       (IF (e.cond) e.body-label );
     536      <Correct-Label e.body> :: e.body,
     537      (IF (e.cond) e.body);
    538538    (FOR (t.label) (e.cond) t.step e.body) =
    539       <Label-In-Table t.label> :: t.label-used,
    540       <Correct-Label e.body> :: e.body-label,                                                                   
    541       (FOR (t.label-used) (e.cond) t.step e.body-label);
     539      <Label-In-Table t.label> :: (e.maybe-empty),
     540      <Correct-Label e.body> :: e.body,                                                                 
     541      (FOR (e.maybe-empty) (e.cond) t.step e.body);
    542542    (LABEL (t.label) e.body) =
    543       <Label-In-Table t.label> :: t.label-used,
    544       <Correct-Label e.body> :: e.body-label,
    545       (LABEL t.label-used e.body-label) ;
    546     (TRY e.body) = <Correct-Label e.body> :: e.body-label,
    547       (TRY e.body-label);
    548     (CATCH-ERROR e.body) =<Correct-Label e.body> :: e.body-label,
    549       (CATCH-ERROR e.body-label);
     543      <Label-In-Table t.label> :: (e.maybe-empty),
     544      <Correct-Label e.body> :: e.body,
     545      (LABEL (e.maybe-empty) e.body) ;
     546    (TRY e.body) = <Correct-Label e.body> :: e.body,
     547      (TRY e.body);
     548    (CATCH-ERROR e.body) =<Correct-Label e.body> :: e.body,
     549      (CATCH-ERROR e.body);
    550550    t.item = t.item ;
    551551    } :: e.cpp-item,
     
    553553};
    554554
    555 Label-In-Table (e.label) = {
    556   <In-Table? &Used-Label  e.label> = ((e.label));
     555Label-In-Table t.label = {
     556  <In-Table? &Used-Label  t.label> = (t.label);
    557557   ();
    558558};
Note: See TracChangeset for help on using the changeset viewer.