about summary refs log tree commit diff
path: root/src/comp/middle/tstate
AgeCommit message (Collapse)AuthorLines
2012-03-02Move src/comp to src/rustcGraydon Hoare-3870/+0
2012-03-02core: Remove _mut functions from vecBrian Anderson-1/+1
Instead, use vec::to_mut/from_mut to transform vectors in place as needed.
2012-03-01Use the correct prestate for callsTim Chevalier-2/+2
The prestate for calls was getting set incorrectly to the poststate for the operator in the call. This worked before since most of the time, operator expressions are pure. Issue 1895 shows how this breaks when the operator is a closure that has a move-in capture clause. (I had a several-day, multi-file patch for this that didn't work... and then it turned out to be a one-line fix. The joys of programming.) Closes #1895
2012-02-29optionally enforce local variable mutabilityNiko Matsakis-9/+9
2012-02-28change def's that are always local to use node_id, add --inline optNiko Matsakis-23/+20
2012-02-22Stop normalizing patternsMarijn Haverbeke-16/+17
The check for whether a pat_ident is a variant or a binding is simple and fast. Normalizing patterns again and again is slow and error-prone (several places were forgetting to do it).
2012-02-15make mut a keyword synonymous with mutableNiko Matsakis-2/+2
first step towards issue #1273
2012-02-15Support 'alt check' syntaxMarijn Haverbeke-2/+2
It is only a way to flag an alt as intentionally non-exhaustive right now. Issue #1679
2012-02-10Remove a vestige of return-by-referenceMarijn Haverbeke-12/+11
2012-02-09Remove some pointless importsMarijn Haverbeke-10/+0
2012-02-08Monomorphize resource and variant constructorsMarijn Haverbeke-4/+4
Issue #1736
2012-02-07Minor class-related tweaks to the ASTTim Chevalier-1/+1
2012-02-06Make ty::t type self-sufficientMarijn Haverbeke-8/+7
It is now no longer needed to have a ty::ctxt to get at the contents of a ty::t. The straight-forward approach of doing this, simply making ty::t a box type, unfortunately killed our compiler performance (~15% slower) through refcounting cost. Thus, this patch now represents ty::t as an unsafe pointer, assuming that the ty::ctxt, which holds these boxes alive, outlives any uses of the ty::t values. In the current compiler this trivially holds, but it is does of course add a new potential pitfall. ty::get takes a ty::t and returns a boxed representation of the type. I've changed calls to ty::struct(X) to do ty::get(X).struct. Type structs are full of vectors, and copying them every time we wanted to access them was a bit of a cost.
2012-02-05infer modes rather than overwriting with expected tyNiko Matsakis-8/+9
2012-02-03Beginnings of front-end support for classesTim Chevalier-0/+3
Added class support to the parser, prettyprinter, fold, and visit. (See Issue 1726.) This is WIP -- the test case is xfailed, and attempting to compile it will error out in resolve.
2012-01-31Change option::t to optionTim Chevalier-13/+13
Now that core exports "option" as a synonym for option::t, search-and- replace option::t with option. The only place that still refers to option::t are the modules in libcore that use option, because fixing this requires a new snapshot (forthcoming).
2012-01-31Don't compute pre- and postconditions for item_constsTim Chevalier-16/+1
Since item_consts can't refer to or modify local variables, they don't participate in typestate and thus get empty pre and postconditions by default. Closes #1660
2012-01-31Require alts to be exhaustiveTim Chevalier-52/+34
middle::check_alt does the work. Lots of changes to add default cases into alts that were previously inexhaustive.
2012-01-30Remove ternary operatorPaul Woolcock-4/+0
`expr_ternary`, `ternary_to_if`, and all parses & lexer definitions have been removed.
2012-01-26Remove ty_native_fnMarijn Haverbeke-1/+1
It was being used as a clumsy synonym of ty_fn.
2012-01-25Rename tag to enum throughout the compilerMarijn Haverbeke-1/+1
This should reduce confusion of people trying to read the code.
2012-01-23s/block()/fn()/gNiko Matsakis-1/+1
2012-01-21issue #1352: change param order on vec::init_elt, putting block in final ↵Graham Fawcett-6/+6
position. To match the init_fn() and init_fn_mut() changes.
2012-01-20Handle fail after return correctly in typestateTim Chevalier-4/+18
Previously, typestate would conclude that this function was correctly diverging: fn f() -> ! { ret; fail; } even though it always returns to the caller. It wasn't handling the i_diverge and i_return bits correctly in the fail case. Fixed it. Closes #897
2012-01-19Handle predicates that recurse in a check() expressionTim Chevalier-9/+10
typestate was using the enclosing function ID for the "this function returns" constraint, which meant confusion and panic in the case where a predicate p includes "check p()". Fixed it to use a fresh ID. Closes #933
2012-01-19rustc: ";" to "," in enumsPatrick Walton-11/+11
2012-01-19rustc: Remove trailing whitespacePatrick Walton-1/+1
2012-01-19Compute typestates for FRU exprs correctly, plus a bit of cleanupTim Chevalier-50/+36
The code in Issue 948 was causing typestate to diverge because it was using the prestate for the whole expression -- not the post- state for the fields list -- as the prestate for the record base expression. Fixed. Closes #948
2012-01-19rustc: "tag" -> "enum"Patrick Walton-5/+5
2012-01-18Remove '.' after nullary tags in patternsTim Chevalier-77/+77
Does what it says on the tin. The next commit will remove support for this syntax.
2012-01-17Allow omission of the '.' after nullary tag patternsTim Chevalier-43/+52
This commit allows patterns like: alt x { some(_) { ... } none { } } without the '.' after none. The parser suspends judgment about whether a bare ident is a tag or a new bound variable; instead, the resolver disambiguates. This means that any code after resolution that pattern-matches on patterns needs to call pat_util::normalize_pat, which consults an environment to do this disambiguation. In addition, local variables are no longer allowed to shadow tag names, so this required changing some code (e.g. renaming variables named "mut", and renaming ast::sub to subtract). The parser currently accepts patterns with and without the '.'. Once the compiler and libraries are changed, it will no longer accept the '.'.
2012-01-13deprecate fn exprs and the fn() type, preferring fn@ and native fnNiko Matsakis-4/+5
2012-01-13Obj system? What obj system?Marijn Haverbeke-16/+0
Removes the obj system from the compiler. Closes #1484
2012-01-12Make driver::session::session no longer an objectMarijn Haverbeke-4/+10
Rather, it is now a struct where properties like opts are accessed directly, and the error-reporting methods are part of a static impl (with the same name as the type).
2012-01-11Implement std::map as an iface/impl instead of an objMarijn Haverbeke-5/+5
2012-01-09Remove proto_sugar and 'lambda' as keyword, commit to fn@.Graydon Hoare-1/+1
2012-01-06Disallow variable names that shadow tags in scopeTim Chevalier-6/+6
Now, if you have a tag named "foo", a variable declaration like "let foo..." is illegal. This change makes it possible to eliminate the '.' after a nullary tag pattern in an alt (but I'll be doing that in a future commit) -- as now it's always obvious whether a name refers to a tag or a new declared variable. resolve implements this change -- all the other changes are just to get rid of existing code that declares variables that shadow tag names.
2012-01-05require a non-semi expr acting as a stmt to have unit return typeNiko Matsakis-11/+7
2012-01-04Reformat typestate error messages so as not to confuse emacs compilation modeTim Chevalier-3/+5
2011-12-29split proto from fn_decl, as not all fn_decls know the proto.Niko Matsakis-36/+30
this will address the (crashing) new test added.
2011-12-23Go back to a single visit_fn function in visit.rsMarijn Haverbeke-19/+22
2011-12-23Parse `iface` items and interface references in `impl` items.Marijn Haverbeke-3/+2
The (temporary) syntax is iface seq<T> { fn len() -> uint; fn iter(f: block(T)); } // The 'blah<T>' can be left of to default the name of the // impl to seq<T>. The 'of seq<T>' can be left off when // not implementing a named interface. impl blah<T> of seq<T> for [T] { fn len() -> uint { vec::len(self) } fn iter(f: block(T)) { for x in self { f(x); } } }
2011-12-23Use the same type of record in ty::ty_fn and ty::methodMarijn Haverbeke-3/+3
Removes some more code duplication.
2011-12-22Register new snapshots, purge log_err and log_full in favour of log(...).Graydon Hoare-22/+22
2011-12-22Merge all 3 log syntaxes, tidy up residual misuses.Graydon Hoare-10/+9
2011-12-22Merge branch 'master' of github.com:graydon/rustGraydon Hoare-14/+12
2011-12-22Register snapshots and switch logging over to use of log_full or #error / ↵Graydon Hoare-72/+78
#debug.
2011-12-22Unify some data structures in syntax::ast that were doing the same thingMarijn Haverbeke-14/+12
As a preparation to removing some duplication in typeck.
2011-12-21Switch log_expr to carrying a full expr:u32 for level. Add log_full variant ↵Graydon Hoare-5/+4
that parses that expr, prepare for snapshot.
2011-12-21Make { || ... } sugar for any type of closure, inferredNiko Matsakis-88/+114