Skip to content
Snippets Groups Projects
  1. Feb 27, 2015
  2. Jan 21, 2015
    • Erwan Jahier's avatar
      Check node declaration wrt safety and memory. · b29c70ff
      Erwan Jahier authored
        More precisely, a node that has memory ougth to be declared using
        "node", and using "function" otherwise.
      
        Moreover, a node that performs side-effects (i.e., if it calls an
        extern node that performs side effects) ougth to be declared as
        "unsafe".
      
        Safe/unsafe mismatches raise an error.
      
        Memory mismatches raise an error in one way (a "function" that uses
        memory), and a warning in the other way (a "node" that uses no
        memory).
      
      Also fix some errors done when transmitting the unsafe flag (well, it's
      the first time I use it!).
      b29c70ff
  3. Jan 20, 2015
  4. Aug 26, 2014
  5. Apr 04, 2013
    • Erwan Jahier's avatar
      The -exec mode now supports the merge statement. · 1ca66bc0
      Erwan Jahier authored
      In order to do that, I've generalised the type of merge : now the clock
      argument can be any expression. Some assert false still prevent its use,
      but it should be easy to get rid of them (I'll do that latter).
      1ca66bc0
  6. Feb 07, 2013
  7. Feb 06, 2013
  8. Feb 01, 2013
  9. Jan 31, 2013
  10. Jan 11, 2013
  11. Dec 20, 2012
  12. Dec 13, 2012
    • Erwan Jahier's avatar
      Documentation et renommage des modules. · 65dfa567
      Erwan Jahier authored
      nb: les tests ne passent toujours bien sur.
      
      * Partie lus -> AST
      
      predef.ml -> srcPredef.ml
      syntaxTreeCore.ml -> astCore.ml
      syntaxTree.ml     -> astV6.ml
      syntaxTreeDump.mli-> astV6Dump.mli
      
      * Partie Ast -> Ast
      
      solveIdent.mli -> astRecognizePredef.mli
      syntaxTab.mli -> astTab.mli
      symbolTab.mli -> astTabSymbol.mli
      
      * Partie  AST -> lic (static evaluation)
      
      eff.ml  -> lic.ml
      getEff.mli -> ast2lic.mli
      lazyCompiler.mli -> licTab.mli
      builtIn.ml -> licMetaOp.ml
      predefEval*.ml -> licEval*.ml
      name.mli -> licName.mli
      
      * Partie Lic -> Lic
      
      uniqueOutput.mli      -> l2lCheckOutputs.mli
      structArrayExpand.mli -> l2lExpandArrays.mli
      nodesExpand.mli       -> l2lExpandNodes.mli
      doNoPoly.ml           -> l2lRmPoly.ml
      doAliasTypes.ml       -> l2lAliasType.ml
      doSplit.ml            -> l2lSplit.ml
      65dfa567
  13. Jul 14, 2012
  14. Jul 06, 2010
  15. Jul 02, 2010
  16. May 05, 2010
  17. Oct 24, 2008
  18. Oct 23, 2008
  19. Sep 15, 2008
  20. Sep 01, 2008
  21. Aug 29, 2008
  22. Jul 17, 2008
  23. Jul 08, 2008
  24. Jul 01, 2008
  25. Jun 12, 2008
  26. Jun 06, 2008
  27. 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
  28. May 29, 2008
  29. May 28, 2008
  30. May 27, 2008
  31. 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
  32. May 20, 2008
  33. 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
  34. May 02, 2008
  35. Mar 28, 2008
  36. 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
  37. Mar 14, 2008
  38. Mar 11, 2008
    • Erwan Jahier's avatar
      Simplify the node_eff representation as well as change the names · 57431a16
      Erwan Jahier authored
      used in order to make it homogoneous with what is done in SyntaxTreeCore.ml
      
      This commit is related to the previous one actually.
      
      Also remove all this story of node_half_eff that is not
      used (yet), and that may not be useful (we'll see later).
      
      Also continue to fix the representation of SyntaxTrreCore.node_info :
       -> remove the node alias
       -> put the corresponding infomation in node_body field
       -> rename node_body field into node_def
       -> associate to node_def (instead of a body option) a new union
      type made of Abstract, Extern, Alias of ..., Body of ...
      
      This allows us to
       - remove an "assert false" to deal with node with body and alias
      (this new presentation makes it impossible)
       - Deal with Abstract node properly
      57431a16
    • Erwan Jahier's avatar
      Simplify significantly the node representation. The rational for this · 7f628ceb
      Erwan Jahier authored
      change is
      	- make the parser simpler
      	- make the compilation simpler
      	- make everything simpler actually...
      	- accepts more correct programs.
      	- etc.
      
      Indeed, before, we had specific syntax nodes for
      	- extern nodes
      	- aliased nodes
      	- abstract nodes
      	- normal nodes
      which leads to duplicate code everywhere. Now, we have a more generic
      representation.
      
      The nice thing is that the parser is much simpler, and a lot of
      duplicated code is avoided (for example, extern and abstract nodes do
      now share the same code).
      
      The bad thing is that we have more "assert false" lying everywere due
      to this «too rich» representation, in order to deal with cases
      that can never happen. For exemple, we have to do something with
      nodes that have  both an alias and a body. This cannot happen of
      course, so we issue an "assert false", which is a little bit painful,
      as it have been rejected by the parser anyway.
      
      Moreover, for some reason, external node params could not be clocked,
      and cannot have static params. Maybe it is not possible to compile
      such nodes (I don't know yet), but we should not raise a syntax error IMHO.
      
      Somehow, what was done was very similar to ask the parser to perform type
      checking.
      6.3.0
      7f628ceb
Loading