Changeset 1201


Ignore:
Timestamp:
Aug 14, 2003, 2:59:18 AM (17 years ago)
Author:
orlov
Message:
  • Jumping into the wrong place on $fail is fixed.
  • Variable naming scheme is improved a little bit.
  • More unused code is throwed away.
Location:
to-imperative/trunk/compiler
Files:
3 edited

Legend:

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

    r1146 r1201  
    10781078  <Domain &Unknown-Lengths> : e.clashes =
    10791079    <CC-Unknown-Lengths t.end-cycle e.clashes> :: e.conds,
     1080    /*
     1081     * Когда мы добрались до сюда, все условия на длины на текущем уровне
     1082     * выписаны.  Невыполнение любого из оставшихся условий (на
     1083     * соответствие типов, равенство, длины внутри скобок) ведёт не к
     1084     * прекращению текущего цикла, а переход к его следующей итерации.
     1085     * Поэтому в качестве t.end-cycle везде дальше подставляется текущий
     1086     * откат.
     1087     */
    10801088    <Update-Hard-Parts> : {
    10811089      v.actions =
    10821090        e.conds <CC-Deref <R 0 v.fails> v.actions>
    1083         <CC s.tail? (v.fails) t.end-cycle e.Snt>;
     1091        <CC s.tail? (v.fails) <R 0 v.fails> e.Snt>;
    10841092      /*empty*/ =
    10851093        e.conds <CC-Eqs <R 0 v.fails> () <? &Eqs>> :: e.actions,
     
    10881096          <Compose-Source> :: e.assign =
    10891097            e.actions <CC-Eqs <R 0 v.fails> () e.assign>
    1090             <CC s.tail? (v.fails) t.end-cycle e.Snt>;
     1098            <CC s.tail? (v.fails) <R 0 v.fails> e.Snt>;
    10911099          {
    10921100            <Get-Cycle> :: s.split (e.left) (e.right) (e.len)
  • to-imperative/trunk/compiler/rfp_vars.rf

    r1146 r1201  
    275275        t.var <Boxes-To-Vars expr>;
    276276      1 e.prefix t.var =
    277         <Boxes-To-Vars t.var> : (s (e.name)),
     277        <Boxes-To-Vars t.var> : {
     278          (REF (e s.name)) = s.name;
     279          (s (e.name)) = e.name;
     280        } :: e.name,
    278281        (VAR (<Gener-Name From-Two <To-Word e.prefix e.name>>)) :: t.var,
    279282        <Store s.box t.var>,
     
    338341
    339342
    340 Strip-STVE expr = <Subst (SVAR TVAR VVAR EVAR) ((VAR) (VAR) (VAR) (VAR)) expr>;
    341 
    342343Vars e.expr =
    343344  e.expr () $iter {
     
    359360  e.vars;
    360361
    361 Norm-Vars (e.vars) e.Snt =
    362   /*
    363    * Store all new variables in the &Vars-Tab table and return the list with
    364    * all variables in the (VAR t.name) form.
    365    */
    366   <Store-Vars e.vars> :: e.new-vars,
    367   /*
    368    * Rename all new variables in e.Snt. Never mind multiple occurences.
    369    */
    370   (e.vars) (e.new-vars) e.Snt $iter {
    371     e.vars : t.var e.rest, e.tmp-vars : t.new-var e.new-rest, {
    372       t.var : t.new-var =
    373         (e.rest) (e.new-rest) e.Snt;
    374       t.var : (s.tag e) =
    375         (e.rest) (e.new-rest) <Subst (t.var) ((t.new-var)) e.Snt>;
    376     };
    377   } :: (e.vars) (e.tmp-vars) e.Snt,
    378   e.vars : /*empty*/ =
    379   (e.new-vars) e.Snt;
    380 
    381 
    382 $table Vars-Tab;
    383 
    384 Store-Vars e.vars =
    385 //  <WriteLN Store-Vars e.vars>,
    386   e.vars () $iter {
    387     e.vars : (s.var-tag (e.QualifiedName s.last)) e.rest,
    388       {
    389         s.last : 0 = (e.QualifiedName);
    390         <Int? s.last> = (e.QualifiedName s.last);
    391         /*empty*/ =
    392           s.var-tag : {
    393             SVAR = "s";
    394             TVAR = "t";
    395             VVAR = "v";
    396             EVAR = "e";
    397             VAR = /*empty*/;
    398           } :: e.var-sym,
    399           (e.var-sym e.QualifiedName s.last);
    400       } :: t.name,
    401       {
    402         <In-Table? &Vars-Tab t.name>; // do nothing
    403         <Table> :: s.tab, <Bind &Vars-Tab (t.name) (s.tab)>,
    404           s.var-tag : {
    405             SVAR =
    406               <Set-Var t.name (Min) (1)>,
    407               <Set-Var t.name (Max) (1)>,
    408               <Set-Var t.name (Length) (1)>,
    409               <Set-Var t.name (Flat) (True)>;
    410             TVAR =
    411               <Set-Var t.name (Min) (1)>,
    412               <Set-Var t.name (Max) (1)>,
    413               <Set-Var t.name (Length) (1)>;
    414             VVAR =
    415               <Set-Var t.name (Min) (1)>;
    416 //              <Set-Var t.name (Max) ()>;
    417             EVAR =
    418               <Set-Var t.name (Min) (0)>;
    419 //              <Set-Var t.name (Max) ()>;
    420             e = <WriteLN !-!-!-! t.name>,
    421               <Exit -1>;
    422           },
    423           <Set-Var t.name (Left-compare) ()>,
    424           <Set-Var t.name (Right-compare) ()>,
    425           <Set-Var t.name (Left-checks) ()>,
    426           <Set-Var t.name (Right-checks) ()>,
    427           <Set-Var t.name (Format) ((s.var-tag))>;
    428       },
    429       e.rest (e.new-vars (VAR t.name));
    430   } :: e.vars (e.new-vars),
    431   e.vars : /*empty*/ =
    432   e.new-vars;
    433 
    434 Declare-Vars s.type e.vars =
    435   e.vars () $iter {
    436     e.vars : (VAR t.name) e.rest, {
    437       <?? t.name Declared> : True;  // do nothing
    438       {
    439         <In-Table? &Vars-Tab t.name>; // do nothing
    440         { s.type : Expr = <WriteLN Decl-Format t.name>;; },
    441         <Table> :: s.tab, <Bind &Vars-Tab (t.name) (s.tab)>,
    442           <Set-Var t.name (Left-compare) ()>,
    443           <Set-Var t.name (Right-compare) ()>,
    444           <Set-Var t.name (Left-checks) ()>,
    445           <Set-Var t.name (Right-checks) ()>,
    446 //          <Set-Var t.name (Format) ((VAR t.name))>,
    447           <Set-Var t.name (Format) ((EVAR))>,
    448           <Set-Var t.name (Min) (0)>;
    449       },
    450         <Set-Var t.name (Declared) (True)>,
    451         (DECL s.type (VAR t.name));
    452     } :: e.new-decl,
    453     e.rest (e.decls e.new-decl);
    454   } :: e.vars (e.decls),
    455   e.vars : /*empty*/ =
    456   e.decls;
    457 
    458 Instantiate-Vars e.vars =
    459   e.vars $iter {
    460     e.vars : (VAR t.name) e.rest,
    461       <Set-Var t.name (Instantiated) (True)>,
    462       e.rest;
    463   } :: e.vars,
    464   e.vars : /*empty*/;
    465 
    466 ?? t.name e.key =
    467   <Lookup &Vars-Tab t.name> : s.tab,
    468   <Lookup s.tab e.key>;
    469 
    470 //!Set-Var t.name (e.key) (e.val) =
    471 //  <WriteLN Set-Var t.name (e.key)>,
    472 //!     <Lookup &Vars-Tab t.name> : s.tab,
    473 //!     <Bind s.tab (e.key) (e.val)>;
    474 
    475 
  • to-imperative/trunk/compiler/rfp_vars.rfi

    r1146 r1201  
    3535$func Gener-Var-Indices s.num (e.Format) e.prefix = e.Re s.max;
    3636
    37 $func? ?? t.name e.key = e.val;
    38 
    39 $func Strip-STVE expr = expr;
    40 
    41 //!$func Set-Var t.name (e.key) (e.val) = ;
    42 
    43 $func Store-Vars e.vars = e.vars;
    44 
    45 $func Declare-Vars s.type e.vars = e.decls;
    46 
    47 //!$func? Declared? t.var = ;
    48 
    49 //!$func? Instantiated? t.var = ;
    50 
    51 $func Instantiate-Vars e.vars = ;
    52 
    53 $func Norm-Vars (e.vars) e.Snt = (e.vars) e.Snt;
    54 
Note: See TracChangeset for help on using the changeset viewer.