1. 21 Jan, 2015 2 commits
  2. 20 Jan, 2015 1 commit
  3. 19 Jan, 2015 1 commit
    • Andrei Paskevich's avatar
      Expr: rename 'psymbol' to 'rsymbol' (routine) · 58586dac
      Andrei Paskevich authored
      1. We really need to distinguish first-class functions (mappings),
      pure logical functions (functions and predicates), and program
      functions (routines).
      2. The ps_ prefix is already used for predicate symbols.
      3. 'psymbol' and 'pvsymbol' are too similar.
  4. 18 Jan, 2015 1 commit
  5. 06 Jan, 2015 1 commit
  6. 21 Dec, 2014 1 commit
  7. 19 Dec, 2014 3 commits
  8. 25 Oct, 2014 1 commit
  9. 22 Oct, 2014 2 commits
  10. 14 Mar, 2014 1 commit
  11. 11 Feb, 2014 4 commits
  12. 20 Jan, 2014 3 commits
    • Andrei Paskevich's avatar
      minor English grammar fix · dff7079b
      Andrei Paskevich authored
    • Andrei Paskevich's avatar
    • Andrei Paskevich's avatar
      WhyML: add "diverges", "reads {}", and "writes {}" effect clauses · 83858597
      Andrei Paskevich authored
      - "diverges" states that the computation may not terminate (which
        does not mean that is always diverges: just as any other effect
        annotation, this clause states a possibility of a side effect).
      - "reads {}" states that the computation does not access any variable
        except those that are listed elsewhere in the specification (or the
        proper function arguments, if "reads" is in a function spec).
      - "writes {}" states that the computation does not modify any mutable
      - If a function definition or an abstract computation may diverge,
        but there is no "diverges" clause in the specification, a warning
        is produced. If a function definition or an abstract computation
        always terminates, but there is a "diverges" clause in the spec,
        an error is produced.
      - If there is a "reads" or a "writes" clause in a function definition
        or an abstract computation, then every modified value must be listed
        in "writes" and every accessed external variable not mentioned in
        the spec must be listed in "reads". (Notice that this is a stricter
        requirement than before, when the presence of a "writes" clause
        did not require to specify "reads".) However, one does not have to
        write "reads {}" or "writes {}" if the corresponding lists are empty.
  13. 19 Jan, 2014 1 commit
    • Andrei Paskevich's avatar
      Mlw_dexpr: ignore 'old when checking user-supplied read effects · 1550af00
      Andrei Paskevich authored
      Strictly speaking, 'old should not even be a variable, we only do
      it to make Mlw_wp.old_mark efficient (compared to replacement of
      a constant). It is possible that presence of 'old in specs will
      bite us again in the future. TODO: think about a robust way to
      not count 'old among the free pvsymbols of a spec.
  14. 16 Jan, 2014 1 commit
  15. 25 Nov, 2013 1 commit
    • Andrei Paskevich's avatar
      WhyML: generalize in let-in (value restriction) · 07d793f0
      Andrei Paskevich authored
      Up to now, WhyML managed without generalization in let-in,
      since we only generalized function definitions in Erec.
      This patch adds generalization of arrow-types values,
      such as effectless Eany (= abstract local functions),
      anonymous functions and psymbols.
  16. 24 Nov, 2013 1 commit
  17. 19 Nov, 2013 6 commits
  18. 11 Nov, 2013 2 commits
  19. 10 Nov, 2013 4 commits
  20. 09 Nov, 2013 2 commits
  21. 27 Oct, 2013 1 commit
    • Andrei Paskevich's avatar
      Dexpr: polymorphic recursion only for fully specified functions · f26c42c4
      Andrei Paskevich authored
      If we generalize on varible-by-variable basis, then the following
      letrecs are not the same:
        let rec f (x:'a) y = (x = y) and g (z:int) = f z z  // typechecks
        let rec g (z:int) = f z z and f (x:'a) y = (x = y)  // does not
      In the first case, we unify the type of y with 'a, and thus
      f is fully generalized in the definition of g. In the second
      case, we unify the non-generazled second argument of f with int,
      and the definition of f does not typecheck.
      Also: accept implicit type variables in programs.