| Commit message (Collapse) | Author | Age |
... | |
| |
| |
| |
| | |
Fixed bug in type checking for integer division.
|
| |\
| |/
|/| |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Now, loops that may possibly
do an infinite number of iterations (that is, loops marked with 'decreases *') and calls to methods
marked with 'decreases *' are allowed only in methods that themselves are marked with 'decreases *'. As
before, ghost loops and ghost methods are not allowed to be marked with 'decreases *'.
Previously, 'decreases *' was allowed on a method only if the method was tail recursive;
this is no longer so. Note, however, that if the method is not tail recursive and engages
in infinite recursion, then it will eventually run out of stack space.
Previously, a 'decreases *' was not inherited in a refining module; this is no longer so.
That is, 'decreases *' is now inherited. To refine a possibly non-terminating method
or loop, the refining version simply provides a decreases clause that does not mention '*'.
Note that if the refined method is not recursive, it still needs to have _some_ decreases
clause in order not to inherit the 'decreases *' from the refined method, but the expression
stated in the decreases clause can be arbitrary (for example, one can write 'decreases true'
or 'decreases 7' or 'decreases x' for some 'x' in scope).
Note, in the new design, a method needs to be declared with 'decreases *' if
it may recurse forever _or_ if it contains a possibly infinite loop.
Note that the absence of 'decreases *' on a loop does not mean the loop will
terminate, but it does mean that the loop will iterate a finite number of times
(the subtle distinction here is that a loop without a 'decreases *' is allowed
to contain a nested loop that has a 'decreases *' -- provided the enclosing
method is also declared with 'decreases *', as previously mentioned).
|
|/
|
|
| |
+ add a test case with lambdas that don't get their types fully specified
|
| |
|
| |
|
| |
|
|
|
|
| |
twoState and codeContext is moved to a new class ResolveOpts
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Modified syntax in some tests, since predicates now require parentheses (without parentheses refers to a predicate, not an application of the predicate)
|
|\ |
|
| |
| |
| |
| | |
and forall statements, and more expressions
|
| |
| |
| |
| | |
automatic triggering support in either Dafny or Boogie)
|
| | |
|
| |\
| |/
|/| |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* The reads clause now needs to be self framing.
* The requires clause now needs to be framed by the reads clause.
* There are one-shot lambdas, with a single arrow, but they will probably be
removed.
* There is a {:heapQuantifier} attribute to quantifiers, but they will
probably be removed.
* Add smart handling of type variables
* Add < and > for datatype & type parameter
|
|\ \ |
|
| | | |
|
| | | |
|
|\| | |
|
| | |
| | |
| | |
| | | |
the resolver and translator
|
| | | |
|
| | | |
|
| | | |
|
| |\ \ |
|
| | |/ |
|
| |/
|/| |
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
=> ResolvedClass in userdefinedtypes used to be null-> fixed
- checking only bodyless methods and functions to make sure they have been implemented in the child class
- added one more test
|
| | |
|
| |
| |
| |
| | |
- added one more test
|
|/
|
|
|
|
| |
-possibility to declare traits in Dafny
-possibility to extend a class by a trait
-possibility to override body-less methods
|
|
|
|
| |
predictably
|
| |
|
| |
|
| |
|
| |
|
|\ |
|
| |
| |
| |
| | |
Started allowing arbitrary types to have type parameters
|
|/ |
|
|\ |
|
| | |
|
|/
|
|
| |
Also add a test case for the different display expressions.
|
| |
|
| |
|
|\ |
|
| |
| |
| |
| | |
Cleaned up file to use some improved Dafny constructs.
|