* [TRLC] Add new option `--lint --verify`. This option requires
[PyVCG](https://pypi.org/project/PyVCG) to be installed (which is
only available on GNU/Linux or OSX). This option attempts to
statically verify all checks for freedom of run-time errors (no null
dereferences, no division by zero, and no array out of bounds
access). For example with this `.rsl`:
type T1 {
x optional Integer
y optional Integer
z Integer
}
checks T1 {
x != null implies y == x, fatal "potato"
y != null implies x > 1, warning "potato"
}
The `--lint --verify` option might say:
y != null implies x > 1, warning "potato"
^ test1.rsl:11: warning: expression could be null [vcg-evaluation-of-null]
| example record_type triggering error:
| T1 bad_potato {
| /* x is null */
| y = 0
| z = 0
| }
* [Package] Provide Linux and OSX packages, along with the default
package, which should automatically install PyVCG where it is
available. On Windows, `pip` should fall back to the platform
agnostic package.
* [TRLC] Add new option `--no-user-warnings` to suppress any warning
generated from a user-defined check.
* [TRLC] Fix missing static check on exponents (they must not be
negative).
* [TRLC] Fix missing static check for Boolean types on check
expressions (tools would crash without error message).
* [TRLC, LRM] Fix several tool crashes when the `null` literal
appeared in expressions outside equality. Re-worded the section on
null values in the LRM to be much stricter. We consider this to be a
bug-fix and not a change of semantics.
* [LRM] Clarify equality semantics for arrays, tuples, and record
references. Moved the definition of null equality into the same
place.