Changeset 1828


Ignore:
Timestamp:
Dec 29, 2005, 7:41:47 AM (15 years ago)
Author:
orlov
Message:
  • Fixed generation of function calls in ifs in Java code.
File:
1 edited

Legend:

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

    r1826 r1828  
    108108        ('{' (<ASAIL-To-Java e.body> e.return) '}');
    109109    (IF (e.cond) e.body) =
    110       {
    111         e.cond : (CALL t.name (e.args) (e.ress)) =
    112           <Copy-Args (e.args) (e.ress)> :: (e.args) e.subst,
    113           <Expr-Args-To-Java e.args <Paren e.ress>> :: e.arrays (e.args),
    114           e.subst e.arrays (<Name-To-Java t.name>' ('e.args')') ();
    115         <Box> :: s.acc =
    116           /*empty*/ (<Cond-To-Java s.acc e.cond>) (<? s.acc>);
    117       } :: e.subst (e.cond) (e.arrays),
    118       e.subst e.arrays
     110      <Box> :: s.acc,
     111      <Cond-To-Java s.acc e.cond> :: e.cond,
     112      <? s.acc>
    119113      ('if ('e.cond')')
    120114      ('{' (<ASAIL-To-Java e.body>) '}');
     
    178172    (EXPR t.var e.expr) =
    179173      <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
    180       e.a ('Expr '<Rfp2Java t.var>' = new Expr ('e.j-expr');');
     174      e.a ('Expr '<Rfp2Java t.var>' = 'e.j-expr';');
    181175    (DEREF t.var e.expr (e.pos)) =
    182176      <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
     
    331325Cond-To-Java s.acc expr = expr : {
    332326  /*empty*/ = /*empty*/;
     327  (CALL t.name (e.args) (e.ress)) =
     328    <Copy-Args (e.args) (e.ress)> :: (e.args) e.subst,
     329    <Expr-Args-To-Java e.args <Paren e.ress>> :: e.arrays (e.args),
     330    <Put s.acc e.subst e.arrays>,
     331    <Name-To-Java t.name>' ('e.args')';
    333332  (SYMBOL? e.expr (e.pos)) =
    334333    <Expr-Ref-To-Java e.expr> :: e.a (e.j-expr),
     
    350349    '!' <Cond-To-Java s.acc e.cond>;
    351350  (INFIX s.op e.args) =
    352     '(' <Infix-To-Java s.acc <Op-Arg-To-Java s.op> s.op e.args> ')';
     351    {
     352      s.op : \{ "+"; "-"; "%"; "*"; "/"; } =
     353        <Infix-To-Java s.acc &Expr-Int-To-Java s.op e.args>' != 0';
     354      '(' <Infix-To-Java s.acc <Op-Arg-To-Java s.op> s.op e.args> ')';
     355    };
    353356  expr = '(' <Infix-To-Java s.acc &Cond-To-Java "&&" <Paren expr>> ')';
    354357};
     
    380383
    381384Const-Expr-To-Java {
    382   /*empty*/ = ('empty');
     385  /*empty*/ = ('Expr.empty');
    383386  (SUBEXPR t.name s.pos s.len) = ('new Expr ('<Rfp2Java t.name>', 's.pos', 's.len')');
    384387                  //FIXME: надо проверять, что s.pos и s.len
Note: See TracChangeset for help on using the changeset viewer.