Changeset 3584


Ignore:
Timestamp:
Mar 26, 2008, 4:59:07 PM (13 years ago)
Author:
orlov
Message:
  • Some advances in T++ generation.
File:
1 edited

Legend:

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

    r3539 r3584  
    3232$table Locals;
    3333
    34 $box Local_Static;
     34$table Used_Consts;
    3535
    3636$func ASAIL_To_CPP e.body = e.cpp_code;
     
    8686  <ClearTable &Decls>,
    8787  <ClearTable &Locals>,
     88  <ClearTable &Used_Consts>,
    8889  {
    8990    <ASAIL_To_CPP e.asail> : v.cpp,
     
    99100        <Get &Const_Exprs> : v.c_exprs =
    100101          <Namespace_Control <Get &Module_Name>> :: e.nc,
    101           (/*e.init-consts*/) v.c_exprs $iter {
    102             e.c_exprs : (t.name (e.value)) e.rest =
     102          (/*e.init_consts*/) (/*e.decl_consts*/) v.c_exprs $iter {
     103            e.c_exprs : (t.name (e.value) e.decl) e.rest =
    103104              {
    104                 t.name : (STATIC e) = <Rfp2Cpp t.name>;
    105                 <Name_To_CPP "DECL-OBJ" t.name>;
    106               } :: e.name,
    107               (e.init_consts (e.name ' = ' e.value ';')) e.rest;
    108           } :: (e.init_consts) e.c_exprs,
     105                <IsInTable &Used_Consts t.name> =
     106                  {
     107                    t.name : (STATIC e) = <Rfp2Cpp t.name>;
     108                    <Name_To_CPP "DECL-OBJ" t.name>;
     109                  } :: e.name,
     110                  (e.init_consts (e.name ' = ' e.value ';')) (e.decl_consts e.decl) e.rest;
     111                (e.init_consts) (e.decl_consts) e.rest;
     112              };
     113          } :: (e.init_consts) (e.decl_consts) e.c_exprs,
    109114          e.c_exprs : /*empty*/ =
    110115          e.nc
    111116          ('static void init_ () {' (e.init_consts) '}')
    112117          ('static AtStart init_registrator_ (&init_);')
    113           <Map &Close_Namespace (<Get &Current_Namespace>)>;;
    114       } :: e.init,
     118          <Map &Close_Namespace (<Get &Current_Namespace>)>
     119          (<Store &Current_Namespace /*empty*/>
     120            <Namespace_Control <Get &Module_Name>>
     121            e.decl_consts
     122            <Map &Close_Namespace (<Get &Current_Namespace>)>
     123          );
     124        ();
     125      } :: e.init (e.decl_consts),
    115126      <Store &Current_Namespace /*empty*/>,
    116127      ('#include <rf_core.hh>')
     
    118129      <ASAIL_To_CPP <List.Sub (<Domain &Decls>) <Domain &Locals>>>
    119130      <Map &Close_Namespace (<Get &Current_Namespace>)>
     131      e.decl_consts
    120132      v.cpp e.init e.entry;;
    121133  };
     
    153165      <MapIn &Rfp2Cpp (<Paren e.ress>)> :: e.ress,
    154166      <MapIn &Id 'tout Expr ' (e.ress)> :: e.ress,
    155       <Store &Local_Static /*empty*/>,
    156167      <ASAIL_To_CPP e.body> :: e.body,
    157168      <Extract_Qualifiers t.name> :: (e.qualifiers) e,
    158169      <Namespace_Control e.qualifiers>
    159170      ('tfun int '<Name_To_CPP "DECL-FUNC" t.name>' ('<Concat <Intersperse (', ') e.args e.ress>>') {'
    160         (e.trace_enter <Get &Local_Static> e.body e.trace_exit ('return 0;'))
     171        (e.trace_enter e.body e.trace_exit ('return 0;'))
    161172      '}');
    162173    (s.tag s.linkage t.name (e.args) (e.ress) e.body),
     
    254265        <Extract_Qualifiers t.name> (&Name_To_CPP "DECL-OBJ" t.name);
    255266      } :: (e.qualifiers) e (s.name_producer e.name_arg),
    256       <Bind &Locals ("DECL-OBJ" t.name) (<Const_Expr_To_CPP e.comment>)>;
    257       //T/<Put &Const_Exprs (t.name (<Const_Expr_To_CPP e.expr>))>,
    258       //T/<Namespace_Control e.qualifiers>
    259       //T/(e.linkage 'Expr ' <Apply s.name_producer e.name_arg> ';');
     267      <Put &Const_Exprs (t.name
     268        (<Const_Expr_To_CPP /*e.expr*/ e.comment>)
     269        /*e.qualifiers*/ (e.linkage 'TExpr* ' <Apply s.name_producer e.name_arg> ';'))>;
    260270    (OBJ s.linkage s.tag t.name) =
    261271      <Bind &Locals ("DECL-OBJ" t.name) ()>,
     
    332342  "ERROR-EXPR" = 'err';
    333343  (STATIC t.name) =
    334     <Rfp2Cpp (STATIC t.name)> :: e.n,
    335     <Put &Local_Static ('TExpr 'e.n';')>,
    336     <Lookup &Locals "DECL-OBJ" (STATIC t.name)> :: e.def,
    337     <Put &Local_Static ('((Expr&) 'e.n').init('e.def', '<Arithm.Sub <Length e.def> 2>');')>,
    338     e.n;
    339     //T/<Get &Current_Namespace> :: e.namespace,
    340     //T/{
    341     //T/  <Get &Module_Name> : e.namespace = /*empty*/;
    342     //T/  <Get &Module_Name>'::';
    343     //T/} :: e.prefix,
    344     //T/e.prefix <Rfp2Cpp (STATIC t.name)>;
     344    <Bind &Used_Consts ((STATIC t.name)) ()>,
     345    <Get &Current_Namespace> :: e.namespace,
     346    {
     347      <Get &Module_Name> : e.namespace = /*empty*/;
     348      <Get &Module_Name>'::';
     349    } :: e.prefix,
     350    '*' e.prefix <Rfp2Cpp (STATIC t.name)>;
    345351  (s.var_tag e.ns t.name) = <Rfp2Cpp (s.var_tag e.ns t.name)>;
    346352  s.sym, {
     
    446452//      ' + Expr::create<ObjectRef>(' <Name-To-CPP t.name> ')';
    447453    (STATIC e) =
    448       ' + ' <Rfp2Cpp t.item>;
     454      <Bind &Used_Consts (t.item) ()>,
     455      ' + ' '*' <Rfp2Cpp t.item>;
    449456    (s.FUNC t.name), s.FUNC : \{ FUNC; "FUNC?"; TFUNC; } =
    450457      ' + Expr::create_sym<rftype::Func> (' <Name_To_CPP "DECL-FUNC" t.name> ')';
Note: See TracChangeset for help on using the changeset viewer.