Started adding support for return checking and non-returning function annotations
* Reorganized typestate into several modules.
* Made typestate check that any function with a non-nil return type
returns a value. For now, the check is a warning and not an error
(see next item).
* Added a "bot" type (prettyprinted as _|_), for constructs like be, ret, break, cont, and
fail that don't locally return a value that can be inspected. "bot"
is distinct from "nil". There is no concrete syntax for _|_, while
the concrete syntax for the nil type is ().
* Added support to the parser for a ! annotation on functions whose
result type is _|_. Such a function is required to have either a
fail or a call to another ! function that is reached in all control
flow paths. The point of this annotation is to mark functions like
unimpl() and span_err(), so that an alt with a call to err() in one
case isn't a false positive for the return-value checker. I haven't
actually annotated anything with it yet.
* Random bugfixes:
* * Fixed bug in trans::trans_binary that was throwing away the
cleanups for nested subexpressions of an and or or
(tests: box-inside-if and box-inside-if2).
** In typeck, unify the expected type arguments of a tag with the
actual specified arguments.
This commit is contained in:
parent
c75125fcce
commit
971b5d5151
22 changed files with 3276 additions and 51 deletions
|
|
@ -9,7 +9,7 @@ import middle::trans;
|
|||
import middle::resolve;
|
||||
import middle::ty;
|
||||
import middle::typeck;
|
||||
import middle::typestate_check;
|
||||
import middle::tstate::ck;
|
||||
import back::link;
|
||||
import lib::llvm;
|
||||
import util::common;
|
||||
|
|
@ -105,7 +105,8 @@ fn compile_input(session::session sess,
|
|||
|
||||
if (sess.get_opts().run_typestate) {
|
||||
crate = time(time_passes, "typestate checking",
|
||||
bind typestate_check::check_crate(crate, def_map));
|
||||
bind middle::tstate::ck::check_crate(node_type_table,
|
||||
ty_cx, crate));
|
||||
}
|
||||
|
||||
auto llmod = time[llvm::ModuleRef](time_passes, "translation",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue