about summary refs log tree commit diff
path: root/src/comp/util
AgeCommit message (Collapse)AuthorLines
2011-05-06Rename std modules to be camelcasedMarijn Haverbeke-55/+55
(Have fun mergining your stuff with this.)
2011-05-05Consolidating expr_to_str functions.Lindsey Kuper-4/+4
2011-05-02Un-revert "Use different syntax for checks that matter to typestate", fixing ↵Patrick Walton-2/+2
the problem. This reverts commit d08b443fffb1181d8d45ae5d061412f202dd4118.
2011-05-02Revert "Use different syntax for checks that matter to typestate"Graydon Hoare-2/+2
This reverts commit aa25f22f197682de3b18fc4c8ba068d1feda220f. It broke stage2, not sure why yet.
2011-05-02Use different syntax for checks that matter to typestateTim Chevalier-2/+2
This giant commit changes the syntax of Rust to use "assert" for "check" expressions that didn't mean anything to the typestate system, and continue using "check" for checks that are used as part of typestate checking. Most of the changes are just replacing "check" with "assert" in test cases and rustc.
2011-04-28Fixed bug in typeck that wasn't filling in anns for stmtsTim Chevalier-0/+20
(needed for typestate_check). Also changed a (log; fail) to (log_err; fail) in typestate_check, and added some more logging funs in util.common.
2011-04-28Support all expression forms in typestateTim Chevalier-0/+32
Added support for self_method, cont, chan, port, recv, send, be, do_while, spawn, and ext; handled break and cont correctly. (However, there are no non-xfailed test cases for ext or spawn in stage0 currently.) Although the standard library compiles and all test cases pass with typestate enabled, I left typestate checking disabled as rustc terminates abnormally when building the standard library if so, even though it does generate code correctly.
2011-04-28Further work on typestate_checkTim Chevalier-12/+83
Lots of work on typestate_check, seems to get a lot of the way through checking the standard library. * Added for, for_each, assign_op, bind, cast, put, check, break, and cont. (I'm not sure break and cont are actually handled correctly.) * Fixed side-effect bug in seq_preconds so that unioning the preconditions of a sequence of statements or expressions is handled correctly. * Pass poststate correctly through a stmt_decl. * Handle expr_ret and expr_fail properly (after execution of a ret or fail, everything is true -- this is needed to handle ifs and alts where one branch is a ret or fail) * Fixed bug in set_prestate_ann where a thing that needed to be mutated wasn't getting passed as an alias * Fixed bug in how expr_alt was treated (zero is not the identity for intersect, who knew, right?) * Update logging to reflect log_err vs. log * Fixed find_locals so as to return all local decls and exclude function arguments. * Make union_postconds work on an empty vector (needed to handle empty blocks correctly) * Added _vec.cat_options, which takes a list of option[T] to a list of T, ignoring any Nones * Added two test cases.
2011-04-25rustc: Pass a "type context" around instead of directly passing the type ↵Patrick Walton-2/+2
store; prep for removing type annotations
2011-04-22rustc: Switch @ty.t to ty.t so that we can change it to a uintPatrick Walton-1/+1
2011-04-21rustc: Pass a type store around, which does nothing yetPatrick Walton-2/+2
2011-04-20rustc: Remove all uses of plain_ty() and friends from outside of ty.rsPatrick Walton-1/+1
2011-04-19Handle nested items correctly in typestate_checkTim Chevalier-0/+45
Summary says it all. Actually, only nested objects and functions are handled, but that's better than before. The fold that I was using before to traverse a crate wasn't working correctly, because annotations have to reflect the number of local variables of the nearest enclosing function (in turn, because annotations are represented as bit vectors). The fold was traversing the AST in the wrong order, first filling in the annotations correctly, but then re-traversing them with the bit vector length for any outer nested functions, and so on. Remedying this required writing a lot of tedious boilerplate code because I scrapped the idea of using a fold altogether. I also made typestate_check handle unary, field, alt, and fail. Also, some miscellaneous changes: * added annotations to blocks in typeck * fix pprust so it can handle spawn * added more logging functions in util.common * fixed _vec.or * added maybe and from_maybe in option * removed fold_block field from ast_fold, since it was never used
2011-04-19Remove effect system from src.Graydon Hoare-10/+10
2011-04-13Make expr_while work in typestate_checkTim Chevalier-2/+2
Also did some refactoring in typestate_check. All test cases in compile-fail that involve uninitialized vars now fail correctly! (All eight of them, that is.)
2011-04-12typestate_check can now handle expr_block, expr_if, and expr_binaryTim Chevalier-0/+4
(caveat for the latter: it assumes that binary operations are strict; a TODO is to detect or and and and correctly reflect that they're lazy in the second argument). I had to add an ann field to ast.block, resulting in the usual boilerplate changes. Test cases that currently work (if you uncomment the typestate pass in the driver) (all these are under test/compile-fail): fru-typestate ret-uninit use-uninit use-uninit-2 use-uninit-3
2011-04-12Further work on typestate. Handles expr_rec and expr_assign now.Tim Chevalier-12/+73
Also changed the ts_ann field on statements to be an ann instead, which explains most of the changes. As well, got rid of the "warning: no type for expression" error by filling in annotations for local decls in typeck (not sure whether this was my fault or not). Finally, in bitv, added a clone() function to copy a bit vector, and fixed is_true, is_false, and to_str to not be nonsense.
2011-04-11rustc: Add a uint hash functionPatrick Walton-0/+8
2011-04-09Move to single-uint file-position representation.Marijn Haverbeke-2/+1
This makes passing them around cheaper. There is now a table (see front/codemap.rs) that is needed to transform such an uint into an actual filename/line/col location. Also cleans up the span building in the parser a bit.
2011-04-08Implemented computing prestates and poststates for a few expression forms.Tim Chevalier-1/+25
The typestate checker (if it's uncommented) now correctly rejects a trivial example program that has an uninitialized variable.
2011-04-06Continued sketching out code for checking states against preconditions.Tim Chevalier-4/+47
It's still sketchy. I added a typestate annotation field to statements tagged stmt_decl or stmt_expr, because a stmt_decl statement has a typestate that's different from that of its child node. This necessitated trivial changes to a bunch of other files all over to the compiler. I also added a few small standard library functions, some of which I didn't actually end up using but which I thought might be useful anyway.
2011-04-06More work on typestate. Sketched out code for computing and checking ↵Tim Chevalier-5/+24
prestates and poststates. Still a long ways away.
2011-04-01Started adding support for typestate checking.Tim Chevalier-0/+61
I added a new field to the ast "ann" type for typestate information. Currently, the field contains a record of a precondition bit vector and postcondition vector, but I tried to structure things so as to make it easy to change the representation of the typestate annotation type. I also had to add annotations to some syntactic forms that didn't have them before (fail, ret, be...), with all the boilerplate changes that that would imply. The main call to the typestate_check entry point is commented out and the actual pre-postcondition algorithm only has a few cases implemented, though the overall AST traversal is there. The rest of the typestate algorithm isn't implemented yet.
2011-03-31rustc: Mix the bits more when hashing def idsPatrick Walton-9/+8
2011-03-25Another go at changing compile-command, this time using RBUILD env var.Graydon Hoare-1/+1
2011-03-25Revert "Bulk-edit compile commands in emacs chatter to point to assumed ↵Graydon Hoare-1/+1
build/ dir off src root." This reverts commit 846f2e2ba994268725f38c36fa12f1a09f21615c.
2011-03-25Bulk-edit compile commands in emacs chatter to point to assumed build/ dir ↵Graydon Hoare-1/+1
off src root.
2011-03-25rustc: Create a crate metadata cachePatrick Walton-0/+8
2011-03-16Switch all vases of vec += elt to vec += vec. Prohibit former in rustboot. ↵Graydon Hoare-9/+0
Tweak std lib vec fns in process.
2011-03-08rustc: Expose common.def_eq().Patrick Walton-5/+5
2011-02-23Add a type for crate directives, to support intermixing with exprs in crate ↵Graydon Hoare-1/+3
files.
2010-10-22Make append take a mutable &. Not even checked at present, tsk tsk.Graydon Hoare-1/+1
2010-10-21line length police; moved comp.util.bits to std.bitvDave Herman-463/+0
2010-10-21tests and bugfixes: fns take aliases, fixed binary arithmetic in create, ↵Dave Herman-29/+318
eliminated wasted bit per uint
2010-10-20simpler computation of uint_bits(), plus whitespace policeDave Herman-13/+2
2010-10-20created a first draft of the bit-set library needed for typestateDave Herman-0/+185
2010-10-19Teach trans to allocate, initialize and load from local variables.Graydon Hoare-0/+19
2010-10-18Store items and decls in vecs to preserve input order, index externally. ↵Graydon Hoare-0/+9
Implement block-local name lookup.
2010-10-15Encode and decode tag types in dwarf properly. Add list module to std. Shift ↵Graydon Hoare-8/+0
rustc to use std.util.option. Fix various dependent bugs. Closes #73.
2010-10-05Add input coordinate tracking to all major rustc ast nodes.Graydon Hoare-0/+1
2010-10-04Teach rustc about phi nodes, block relationships. Translate if- and ↵Graydon Hoare-0/+8
block-expressions.
2010-09-23Declare the global and upcall glues as ValueRefs in rustc's trans.Graydon Hoare-0/+5
2010-09-21Begin teaching rustc to parse literals, atoms, stmts, blocks, items, ↵Graydon Hoare-0/+6
modules, crates.
2010-09-20Bind pattern slots with ?, drop parens from 0-ary tag constructors, ↵Graydon Hoare-24/+24
translate 0-ary constructors as constants. Rustc loses ~300kb.
2010-09-09Switch tags to purely nominal, removing TY_iso and TY_idx. Seems to mostly ↵Graydon Hoare-3/+14
work, possibly a little bumpy. Changes a lot.
2010-09-01Add session, span tracking, error reporting, beginning of a function to ↵Graydon Hoare-0/+4
parse an item to rustc.
2010-08-31Reinstate commit 9f0eaa65817303b8768c80454734144c176fda43 with sufficient ↵Graydon Hoare-4/+8
fixes to hopefully not break tinderboxes.
2010-08-27Revert "More work on lexer.rs: start using keyword hashtable, handle more ↵Patrick Walton-8/+4
lexemes." due to tinderbox bustage This reverts commit 9f0eaa65817303b8768c80454734144c176fda43.
2010-08-27More work on lexer.rs: start using keyword hashtable, handle more lexemes.Graydon Hoare-4/+8
2010-08-20Expand rustc lexer to do almost-nearly-nontrivial stuff.Graydon Hoare-0/+13