Empowering everyone to build reliable and efficient software.
Go to file
Tim Chevalier 9a48bd2f21 Compute typestate properly for move
typestate now drops constraints correctly in the post-state of
a move expression or a declaration whose op is a move. It doesn't
yet drop constraints mentioning variables that get updated.

To do this, I had to change typestate to use trit-vectors instead
of bit-vectors, because for every constraint, there are three
possible values: known-to-be-false (e.g. after x <- y, init(y) is
known-to-be-false), known-to-be-true, and unknown. Before, we
conflated known-to-be-false with unknown. But move requires them
to be treated differently. Consider:

(program a)
(a1) x = 1;
(a2) y <- x;
(a3) log x;

(program b)
(b1) x = 1;
(b2) y <- z;
(b3) log x;

With only two values, the postcondition of statement a2 for
constraint init(x) is the same as that of b2: 0. But in (a2)'s
postcondition, init(x) *must* be false, but in (b2)'s condition,
it's just whatever it was in the postcondition of the preceding statement.
2011-06-22 22:13:42 -07:00
doc Turn doc FIXMEs into comments 2011-06-21 06:17:54 -07:00
mk Setting rt optimization on OS X to -O0 when using clang, like we already do with gcc. Tail-call elimination was causing valgrind errors with stack switching. Closes #494. 2011-06-21 13:13:33 -07:00
src Compute typestate properly for move 2011-06-22 22:13:42 -07:00
.gitignore Ignore files generated by Doxygen. 2011-06-01 10:37:48 -07:00
AUTHORS.txt authors: Add Josh Matthews to AUTHORS 2011-06-08 09:09:50 -07:00
configure Move creation of stageN/lib directories to the configure script 2011-06-17 18:36:44 -07:00
LICENSE.txt Update copyrights for completeness. 2011-05-03 12:10:03 -07:00
Makefile.in Finish the transition to having the std library in stageN/lib. 2011-06-20 13:38:11 -04:00
README Update README to point to github, test email notification. 2010-06-23 21:11:10 -07:00

This is a compiler and suite of associated libraries and documentation for the
Rust programming language.

See LICENSE.txt for terms of copyright and redistribution.

See http://github.com/graydon/rust for current development page.