Skip to content
Snippets Groups Projects
  1. Sep 02, 2008
  2. Sep 01, 2008
  3. Aug 29, 2008
  4. Aug 28, 2008
  5. Aug 25, 2008
    • Erwan Jahier's avatar
      Unnest array iterator calls by modifying the Lic printer. · 65c62005
      Erwan Jahier authored
      The  idea  is  the  following:  each  time  a  nested  iterator  call
      (map<<map<<n,3>>,4>>) is  encountered, we  create a fresh  alias name
      (create_alias_name) ad we  add it in the node_alias_tbl.   At the end
      of the  compilation, LicDump.dump_node_alias is  called, which prints
      the definition of those node aliases.
      
      For example, the expression  "map<<map<<n,3>>,4>>" is printed like this:
      
          map<<_node_alias1, 4>>
      
      and later, the node alias is defined:
      
          node _node_alias1(x:int) returns(y:int); let y = map<<n,3>>(x); tel;
      65c62005
  6. Aug 21, 2008
  7. 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
  8. Jul 23, 2008
  9. Jul 22, 2008
  10. Jul 01, 2008
  11. Jun 30, 2008
  12. Jun 26, 2008
  13. Jun 18, 2008
  14. Jun 12, 2008
  15. Jun 09, 2008
    • Erwan Jahier's avatar
      Use type_eff_ext everywhere I was using type_eff (and rename · 00c67618
      Erwan Jahier authored
      type_eff_ext into type_eff btw). The  rationale is to be able to type
      alias           on           polymorphic          nodes           (cf
      test/should_fail/semantics/bad_call03.lus,  that now  have  a correct
      error msg).  It also makes  to code more compact (no more translation
      from one  to the  other), and more  general (type_eff_ext  being more
      general than type_eff).  User polymorphic nodes should be easy now.
      
      move all the code in parsey.mly into parserUtil.ml (ease the debug).
      00c67618
  16. Jun 06, 2008
  17. Jun 05, 2008
  18. Jun 02, 2008
  19. May 27, 2008
  20. May 26, 2008
    • Erwan Jahier's avatar
      * mapred -> fillred · b3051f50
      Erwan Jahier authored
      b3051f50
    • Erwan Jahier's avatar
      I have complety rewritten the way predef operator typing is · b09c78c5
      Erwan Jahier authored
      performed. The resulting code is both more compact, and more general.
      
      It is more  general, since that predef operators  are now represented
      by  node_exp_eff, exactly as  user nodes.   Hence, all  the functions
      that were  operating on  user nodes via  node_exp_eff (such  as, node
      aliasing) works for free on predef op!
      
      In order to be able  to perform that generalisation, it was necessary
      to  extend sligthly  the data  structure used  to represent  the node
      profile in CompiledData.node_exp_eff with information indicating if a
      variable is polymorphic or overloaded.
      
      Not that, currently, polymorphic  or overloaded variables can only be
      introduced by predef  operators. But I think it would  be easy to add
      those notions for normal user nodes after this change.
      
      New non-reg files boolred now compiles. Those involving
      - boolred
      - alias on predef.op
      b09c78c5
  21. May 21, 2008
    • Erwan Jahier's avatar
      Add support to be able to use iterators in node aliases. · 65b93560
      Erwan Jahier authored
      Also, node aliased to other nodes were handled poorly: I was replacing
      in the syntax tree the node by its alias. Now, I really define
      the alias node using the aliases one.
      
      For instance,
      
          node toto(x:t) returns (y:t);
          let
            ...
           tel
           node titi = toto;
           node tutu(...) returns(...);
           let
              ...
      	z = titi(a);
           tel
      
      was compiled into
      
          node toto(x:t) returns (y:t);
          let
            ...
           tel
      
           node tutu(...) returns(...);
           let
              ...
      	z = toto(a);
           tel
      
      Now, I generate
      
           node toto(x:t) returns (y:t);
           let
             ...
           tel
           node titi(i1:t) returns (o1:t);
           let
             o1 =toto(i1);
           tel
           node tutu(...) returns(...);
           let
              ...
      	z = titi(a);
           tel
      
      which is equivalent, but closer to the original program.
      6.13.0
      65b93560
  22. May 20, 2008
  23. May 16, 2008
  24. 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
  25. May 07, 2008
    • Erwan Jahier's avatar
      In symbolTab.ml, change · 956514c2
      Erwan Jahier authored
      	type 'a hereflagged =
      	  Here of 'a
      	| NotHere of Ident.long
      into
      	type 'a elt =
      	  Local of 'a
      	| Imported of Ident.long * static_arg list
      
      i.e., i am basically doing two things:
       - fix poor naming
       - adding static arg to nodes
      
      indeed, when compiling an equation that involves nodes defined
      in another package, I need to check that the static args and the
      static params match. Therefore I need to have the static params !
      Therefore I add them (I will use them in the next commit).
      
      Moreover, in SyntaxTreeCore.node_info, the static_params list was
      an option type, which is a bit weird (empty lists are enough to
      represent node with no static params).
      6.9.0
      956514c2
  26. May 02, 2008
  27. Apr 02, 2008
  28. Mar 28, 2008
  29. 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
  30. 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
  31. Mar 14, 2008
Loading