about summary refs log tree commit diff
path: root/src/comp/middle
AgeCommit message (Collapse)AuthorLines
2011-06-24Use visit_fn_{pre,post} to avoid going past lambdas during writeback instead ↵Michael Sullivan-10/+13
of explicitly casing.
2011-06-24Have walk call visit_fn_pre and visit_fn_post on fn expressions.Michael Sullivan-2/+1
As a side effect, this fixes a bug where typestate would not properly be checked inside of fn expressions.
2011-06-24Modify the fn vistors in walk so that they can handle functions without ↵Michael Sullivan-25/+33
names. Update the typestate code to understand this.
2011-06-24rustc: Increment by the unit size in iter_structural_ty when iterating over ↵Patrick Walton-2/+10
interior vectors if the unit size is dynamic
2011-06-24Sanitize use of ids for obj constructors.Marijn Haverbeke-14/+12
Typeck and trans used to, by historical coincidence, use the item_obj node id, which was used to identify the obj type by the rest of the system, for the constructor function. This is now identified by the ctor id stored in the tag throughout.
2011-06-24Remove uses of variable name 'res' from rustcMarijn Haverbeke-309/+300
This in preparation of making 'res' a keyword for defining resources. Please don't introduce too many new ones in the meantime...
2011-06-24Remove def_objMarijn Haverbeke-18/+5
Since obj constructors and types have different def_ids now, their def can simply be a def_fn and a def_ty.
2011-06-24rustc: If needed, duplicate types' heap parts recursively through structural ↵Patrick Walton-32/+65
types
2011-06-23rustc: Cleanup trans_if, trans_altBrian Anderson-36/+6
2011-06-23rustc: Add ternary operator. Closes #565Brian Anderson-1/+22
The implementation is so simple it might be considered cheating: at almost every step the expr_ternary is just converted to expr_if.
2011-06-23Fix type inference inside of anonymous functions.Michael Sullivan-2/+11
2011-06-23rustc: Load immediate types when iterating over interior vectorsPatrick Walton-2/+30
2011-06-23Correct error message for argument mode mismatchTim Chevalier-3/+9
If you use a function expecting an alias argument in a context that expects a function expecting a value argument, or vice versa, the previous error message complained that the number of arguments was wrong. Fixed the error message to be accurate.
2011-06-22Compute typestate properly for moveTim Chevalier-219/+609
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-22rustc: Convert field access on invalid types from an ICE to a fatal errorBrian Anderson-5/+4
Closes #367
2011-06-22Some work on supporting forwarding slots in vtables (issue #539).Lindsey Kuper-42/+70
2011-06-22rustc: Use the rhs span when unifying binopsBrian Anderson-1/+1
This makes the error message correctly identify the term that wasn't the expected type. Issue #516.
2011-06-22rustc: Remove some unneeded type annotationsBrian Anderson-9/+9
2011-06-22rustc: Don't commit unification changes until unify succeedsBrian Anderson-8/+16
This is so that subsequent reports about type mismatches get the types correct. Issue #516
2011-06-22rustc: Downcase metadata::EncodeBrian Anderson-2/+2
2011-06-22Fix bug: globbed imports were importing everything visible from the otherPaul Stansifer-4/+8
module, not just everything exported.
2011-06-22rustc: Introduce and parse additional meta_item formsBrian Anderson-6/+14
Examples: #[test], #[link(name = "vers")] Issue #487
2011-06-22Pull environment loading out into a function.Michael Sullivan-36/+50
2011-06-22Pull building the environment for for_each into a seperate function.Michael Sullivan-47/+61
2011-06-22Removing out-of-date comment.Michael Sullivan-1/+1
2011-06-21Emit a better error message for unbound type parameters in nested functionsTim Chevalier-7/+12
This code was causing a bounds check failure: fn hd[U](&vec[U] v) -> U { fn hd1(&vec[U] w) -> U { ret w.(0); } ret hd1(v); } because in hd1, U was being treated as if it referred to a type parameter of hd1, rather than referring to the lexically enclosing binding for U that's part of hd. I'm actually not sure whether this is a legit program or not. But I wanted to get rid of the bounds check error, so I assumed that program shouldn't compile and made it a proper error message.
2011-06-21Serialize constraints in types (literal arguments still not supported)Tim Chevalier-79/+44
This involved, in part, changing the ast::def type so that a def_fn has a "purity" field. This lets the typechecker determine whether functions defined in other crates are pure. It also required updating some error messages in tests. As a test for cross-crate constrained functions, I added a safe_slice function to std::str (slice(), with one of the asserts replaced with a function precondition) and some test cases (various versions of fn-constraint.rs) that call it. Also, I changed "fn" to "pred" for some of the boolean functions in std::uint.
2011-06-21Move names and ids of native items into their recs, rather than their tagsMarijn Haverbeke-57/+37
2011-06-21Puts out burning tinderbox (oops, AST nodes don't have def_ids/anns).Lindsey Kuper-3/+3
2011-06-21Some progress on support for extending objects with new fields (issueLindsey Kuper-48/+198
into four separate issues (#538, #539, #540, #543) with corresponding tests.
2011-06-21Move expr ids into the expr record typeMarijn Haverbeke-683/+579
This simplifies the tag variants a bit and makes expr_node_id obsolete.
2011-06-21rustc: Output an unimplemented message when alias encounters an unknown ↵Patrick Walton-0/+4
sequence type
2011-06-21rustc: Implement "for" over interior vectorsPatrick Walton-15/+41
2011-06-20Fix some uses of span_warn in alias.rs that should be span_fatalMarijn Haverbeke-2/+2
2011-06-20Make trans use the new ast_map instead of building its ownMarijn Haverbeke-26/+22
2011-06-20Use ast_map in typeck, instead of building another indexMarijn Haverbeke-47/+10
2011-06-20Add a separate AST mapping phaseMarijn Haverbeke-20/+10
This will replace the various node_id-to-node mappings done in several other passes. This commit already uses the new map in resolve, dropping the ast_map that was built there before.
2011-06-20Reduce confusing variable naming in resolveMarijn Haverbeke-51/+55
'id' is now used for node_ids, 'name' for idents
2011-06-20Get rid of def_ids and anns in AST nodes, use single node_idMarijn Haverbeke-1233/+1319
This reduces some redundancy in the AST data structures and cruft in the code that works with them. To get a def_id from a node_id, apply ast::local_def, which adds the local crate_num to the given node_id. Most code only deals with crate-local node_ids, and won't have to create def_ids at all.
2011-06-20Added string duplication to deep_copy. Closes #520.Eric Holk-22/+15
2011-06-20Removed duplicated ret_ty_of_fn. This also means the native function branch ↵Eric Holk-21/+12
is working now, so this commit closes #506.
2011-06-20Teach ret_ty_of_fn_ty to understand native functions. Closes #506.Eric Holk-0/+1
2011-06-20Fix pp blank-lines insertion at beginning of file and before 'let' decls.Graydon Hoare-2/+0
2011-06-19Remove various rustboot workaroundsBrian Anderson-15/+8
2011-06-19rustc: Change smallintmap to use an ivec and use it for the node type table. ↵Patrick Walton-18/+6
3x typechecking speedup.
2011-06-19rustc: Make name resolution errors less fatalBrian Anderson-51/+80
Failure happens at the end of name resolution Issue #440
2011-06-19rustc: Make import resolution errors less fatalBrian Anderson-12/+57
Failure happens at the end of import resolution Issue #440
2011-06-19rustc: Export only what's needed from middle::tyBrian Anderson-3/+164
The list is formidable.
2011-06-19rustc: Export only what's used from middle::resolveBrian Anderson-0/+3
2011-06-19rustc: Rename session.span_err -> span_fatal, err -> fatalBrian Anderson-79/+80
Issue #440