Skip to content
Snippets Groups Projects
  1. Jan 20, 2010
  2. Jan 13, 2010
  3. May 26, 2009
    • Erwan Jahier's avatar
      Attach the clock of Eff.val_exp to the val_exp itself, instead of · e7ef1b90
      Erwan Jahier authored
      maintaining (ugly and error-prone) hash tables.
      
      That change revealed an untriggered bug in EvalClock.check_args: it was wrong
      to add in subst the substitutions made of the parameters and the arguments (it
      is enough to unify the clocks of the pars and of the args). For instance, consider
      the node (in should_work/clock/clock.lus)
      
         node clock5(x :  bool; y:  bool when x; z: bool when y)
      
      and the call
      
        z2 = clock5(a, b when a, c when e);
      
      I was adding y/b in the subst, which was wrong.
      
      Other minor changes:
       - move const_to_val_eff from Eff to UnifyClock.
       - GetEff.translate_val_exp now returns a substitution, in order to be able
         to unify clock vars and propagate the resulting substitution.
      e7ef1b90
  4. Feb 05, 2009
  5. Feb 03, 2009
    • Erwan Jahier's avatar
      The structure and array expanser was buggy in presence of polymorphic · cdb52a14
      Erwan Jahier authored
      nodes (e.g., map<<+,2>>). While fixing  that, I put all the functions
      that deals with polymorphism into a new (Eponymous) dedicated module.
      
      The idea to be able to expand polymorphic node is basically the same,
      as the one for printing polymorphic  nodes: we need to wait until the
      type is instanciated (in GetEff).  That delay is implemented by using
      a stack of nodes.
      cdb52a14
  6. Jan 30, 2009
  7. Jan 23, 2009
  8. Dec 12, 2008
    • Erwan Jahier's avatar
      Break the recursivity is the Eff.node_exp representation (which fix nested iter. pbs). · 5c722d86
      Erwan Jahier authored
      In  short, the  rationale for  this change,  is that  it is  having a
      recursive node_exp is
      - useless,
      - too complicated,
      - wrong w.r.t. nesting iterator calls
      
      In long:
      
      - It is useless because, at the  Eff level, a node cannot call itself
        via one  of its  static arg (which  was where the  recursivity came
        from).
      
      - and indeed, it  is much simpler to consider that  a static arg node
        can only be ident.long that identifies a node alias.
      
        This  means of  course, that  nested iterators  have  been unnested
        before,   inventing  alias   node  names   along  the   way...  And
        polymorphism makes thing difficult once again.
      
      - But the  *big* problem  with a recursive  node_exp is that  it make
        things very  complicated to (lic)dump nested  iterator call because
        of polymorphism!   Actually, it  even makes thing  complicated when
        the iterators were themselves not nested in the source code !
      
        Some ugly  things were done in  LicDump to unnest  those calls when
        printing node_exp.   But this uglyness  have a price:  tricky code,
        and bugs! Indeed, nested iterators calls were wong for example when
        using  the --inline-iterator  mode (but  i would  not  be surprised
        that is wrong in other cases...).
      
      Hence,  LicDump  is  simpler,  but  of course  LazyCompiler  is  more
      complicated.  But  this  is  reasonable:  a  pretty-printer  is  not
      supposed to be complicated.
      5c722d86
  9. Nov 28, 2008
  10. Nov 25, 2008
  11. Nov 21, 2008
  12. Nov 20, 2008
  13. Oct 24, 2008
  14. Oct 23, 2008
  15. Oct 22, 2008
  16. Sep 17, 2008
  17. Sep 15, 2008
  18. Aug 29, 2008
  19. Aug 19, 2008
    • Erwan Jahier's avatar
      Split expressions into atomic expressions. In other words, introduce · d7905aff
      Erwan Jahier authored
      as many  new local  variables as necessary  so that an  expression is
      made at most of one operator.
      
      The rational  for that  is to obtain  a lic  code that is  trivial to
      clock check (nested node calls, for example, make it less simple).
      
      The old behavior can still be obtained using --keep-nested-calls.
      
      During  that  change,   I  realised  that  I  did   not  clock  check
      asserts. Hence, I have also added this check.
      d7905aff
  20. Jul 22, 2008
  21. Jul 07, 2008
  22. Jun 30, 2008
  23. Jun 26, 2008
    • Erwan Jahier's avatar
      A new implementation of EvalClock, that is more general. · 5dd64311
      Erwan Jahier authored
      Not yet implemented (assert false): iterators, struct
      
      Add a UnifyClock module, and rename Unify into UnifyType.
      
      nb : a lot of test are now broken, because
         - the clock checking is now plugged ;-)
         - iterators, struct are not yet implemented
      5dd64311
  24. Jun 23, 2008
  25. Jun 18, 2008
  26. Jun 12, 2008
  27. Jun 06, 2008
  28. Jun 05, 2008
  29. Jun 03, 2008
    • Erwan Jahier's avatar
      Wrap the parser output with a new function, · e64e1031
      Erwan Jahier authored
      SolveIdent.recognize_predef_op  that  replaces  node call  by  Predef
      constructor  when   necessary,  via  a  complete   traversal  of  the
      SyntaxTree (instead  of doing it  in the parser). The  rationales for
      this change are that:
      
      - it is quite tedious to do it in parser as multiple locations are involved
      - I did missed some locations
      - It makes the parser more focused on parsing issues
      - that traversal  is a first step  do deal with  idref solving (hence
       the name of the new module that contains that function
      
      Note that lsrc/test/should_work/fab_test/lecteur.lus was using
      "plus" as a variable ident, which raised an error, which
      e64e1031
  30. May 30, 2008
  31. May 28, 2008
  32. May 20, 2008
  33. May 15, 2008
    • Erwan Jahier's avatar
      Fix a bug where, when defining a package exporting an abstract type · 16344043
      Erwan Jahier authored
      t, and a node returning such a t, the compiler was actually returning
      the type definition of t (instead of the abstract type).
      
      In  order  to fix  that,  it  was necessary  to  add  in argument  of
      Lazycompiler.solve_x_idref  a  flag  (named provide_flag)  indicating
      whether the  item being  compiled appears in  the provide, or  in the
      body part of the package.
      
      This fix  triggered another bug that  we also fix: indeed,  it is not
      correct to return  a compile error when the  provided parameters of a
      node is not equal to  its implementation. Indeed, such parameters can
      be abstract type that are defined in that package.
      
      The test "should_work/packEnvTest/packages.lus" is now ok.
      6.9.1
      16344043
  34. May 02, 2008
  35. Apr 02, 2008
    • Erwan Jahier's avatar
      Add stuff to output the lic file. · 2b30a91d
      Erwan Jahier authored
      For non-regression tests, do not use Lazycompiler.test function
      anymore and just use  LazyCompiler.node_check instead.
      
      put in the new file compiledDataDump.ml all the stuff
      related to string convertions of CompiledData items.
      6.7.0
      2b30a91d
  36. Mar 28, 2008
  37. Mar 20, 2008
    • Erwan Jahier's avatar
      Add two new modules, Predef and PredefSemantics, that deals with predefined · 4c0a0b1f
      Erwan Jahier authored
      operators. Predef contains the abstract syntax of those operators (taken
      for SyntaxTreeCore.by_pos_op), and PredefSemantics contains:
      
       - const_eval: that says how to statically evaluate constants
       - type_eval: that provides the type profile of predef operators
       - clock_eval: that provides the clock profile of predef operators
      
      The code in EvalConst that dealt with predef const evaluation is now in
      Predef.const_eval
      4c0a0b1f
  38. Mar 17, 2008
    • Erwan Jahier's avatar
      Merge EvalType, EvalNode and EvalEq into a single module GetEff. · 64fca779
      Erwan Jahier authored
      EvalNode.f -> GetEff.node,
      EvalType.f -> GetEff.typ,
      EvalEq.f -> GetEff.eq
      
      EvalConst.f (val_exp -> const_eff list) should have been put there too,
      but in fact EvalConst.f ougth to be splitted in two parts:
        - val_exp -> val_exp_eff (but this function already exist)
        - val_exp_eff -> const_eff list
      
      Therefore, the signature of EvalConst.f will be changed to:
      val_exp_eff -> const_eff list (and will use GetEff.val_exp)
      
      Ditto for eval_array_index.
      
       eval_array_index : CompiledData.id_solver -> SyntaxTreeCore.val_exp -> int -> int
      
      ougth to be splitted into two functions:
         - CompiledData.id_solver -> SyntaxTreeCore.val_exp_eff
         - SyntaxTreeCore.val_exp_eff -> int -> int
      
      Ditto for eval_array_size
      
       eval_array_size : CompiledData.id_solver -> SyntaxTreeCore.val_exp -> int
      
      ougth to be splitted into two functions:
         - CompiledData.id_solver -> SyntaxTreeCore.val_exp_eff
         - SyntaxTreeCore.val_exp_eff -> int
      
      arg... evalConst.f est utilis par GettEff.typ !!!
      64fca779
Loading