1241 Commits

Author SHA1 Message Date
Tim Chevalier
bb594a03a1 remove now-unused ts field from ann 2011-05-19 11:40:16 -07:00
Tim Chevalier
e16b097599 Rewrite tstate.annotate to use walk instead of fold
and various other tidying in typestate
2011-05-19 11:40:16 -07:00
Tim Chevalier
dc83c84662 Add visit_fn_pre and visit_fn_post fields to visitors
Added visit_fn_pre and visit_fn_post fields that get applied to
both regular functions and methods.
2011-05-19 11:40:16 -07:00
Tim Chevalier
8cbdaf4f93 Make trans use span_err for the dreaded "ty_var in trans::type_of" error
This required quite a bit of tiresome plumbing about of spans.
On the bright side, now other errors can be converted to span_err too.

Includes test cases.
2011-05-19 11:40:16 -07:00
Tim Chevalier
f909dd114d Remove dead file (typestate_check is now a bunch of modules under middle/tstate) 2011-05-19 11:40:16 -07:00
Tim Chevalier
b624b43e47 Beginning of Operation Eliminate Folds
Started by rewriting collect_locals to use walk instead of fold
2011-05-19 11:40:16 -07:00
Tim Chevalier
4964023c5e Fix an error message that reversed the expected and actual number of arguments in a pattern 2011-05-19 11:40:16 -07:00
Patrick Walton
6417610788 rustc: Generalize variable bindings so that we can use it for locals too 2011-05-19 11:14:44 -07:00
Patrick Walton
df90934bf7 rustc: Split write_* in typeck into versions that will record fixups 2011-05-18 19:19:20 -07:00
Patrick Walton
d2bdfe36cf rustc: Don't inline free glue 2011-05-18 18:48:57 -07:00
Graydon Hoare
6f8b9e176f Factor free paths out of drop glue, into free glue as in rustboot. 2011-05-18 17:28:08 -07:00
Patrick Walton
0aee8b3bd7 rustc: Thread statement contexts through unification 2011-05-18 15:36:14 -07:00
Rafael Ávila de Espíndola
bb7d4e15a8 Remove dead code. 2011-05-18 16:33:22 -04:00
Marijn Haverbeke
28c4a5586e Start checking name collisions in modules
(And remove a boatload of duplicate imports from the typestate files.)

Name collision checking in local scopes will follow soon.
2011-05-18 22:24:20 +02:00
Patrick Walton
13d9f6a264 rustc: Split out type variable fixups from unification 2011-05-18 13:08:54 -07:00
Patrick Walton
37d5dd9471 rustc: Group the variable binding machinery into a separate data structure during unification 2011-05-18 11:54:12 -07:00
Rafael Ávila de Espíndola
a795d0e5b2 And yet more dead code. 2011-05-18 14:28:08 -04:00
Patrick Walton
f4e049c415 rustc: Thread a statement context through the typechecker; use it for generating variable IDs. 40% typechecking speedup. 2011-05-17 22:21:31 -07:00
Patrick Walton
fdf8c49882 rustc: Don't rebuild the AST when typechecking statements 2011-05-17 21:09:34 -07:00
Patrick Walton
ace8058277 rustc: Have typechecking no longer rebuild the AST 2011-05-17 20:13:04 -07:00
Brian Anderson
a98ea4f3ef rustc: Run block cleanups on else if blocks
With the scheme used to translate 'else if' currently the if expression is
translated in a new (else) scope context. If that if expression wants to
result in a value that requires refcounting then it will need to drop the
refcount in the cleanups of the else block.
2011-05-17 22:25:24 -04:00
Patrick Walton
e840a37f33 rustc: Remove typeck::check_item_fn(); it's entirely superfluous! 2011-05-17 19:20:24 -07:00
Patrick Walton
87288a186d rustc: Make check_const() not rebuild the AST (although it's not called at the moment!) 2011-05-17 19:13:16 -07:00
Patrick Walton
d21741843c rustc: Make check_block not rebuild the AST 2011-05-17 19:10:24 -07:00
Patrick Walton
10503a4a02 rustc: Don't rebuild the AST when writing back locals 2011-05-17 19:00:29 -07:00
Patrick Walton
8637a4eaf3 rustc: Pull the type out of the correct expression when typechecking channel types. Puts out burning tinderbox. 2011-05-17 18:19:45 -07:00
Patrick Walton
83e1dc63c2 rustc: Fix return value of expr_spawn case in pushdown_expr. Should put out soon-to-be-burning tinderbox. 2011-05-17 17:44:30 -07:00
Patrick Walton
c6d4c31ee4 rustc: Don't rebuild the AST when typechecking expressions 2011-05-17 17:43:06 -07:00
Eric Holk
cff9a3cc2a Fixing compile problems from recent changes. 2011-05-17 14:38:32 -07:00
Eric Holk
cf02c67137 Removing the TODO comment. 2011-05-17 14:38:32 -07:00
Eric Holk
8d10594ed5 Added a few more expr_spawn cases so the spawn.rs test case gets a little further before failing. 2011-05-17 14:38:32 -07:00
Patrick Walton
37768cba92 rustc: Don't rebuild call or bind expressions during typechecking 2011-05-17 14:37:23 -07:00
Patrick Walton
f300de2963 rustc: Make return value checking warnings a little prettier. Also introduce a new "note" diagnostic level. 2011-05-17 14:12:49 -07:00
Patrick Walton
5047ab0b0c rustc: Flatten annotations 2011-05-17 13:55:32 -07:00
Marijn Haverbeke
09d8ef8d51 Finally rename std::_xxx to std::xxx
Except for _task, which is still a keyword.
2011-05-17 20:41:41 +02:00
Brian Anderson
fbfd8552ab Return a better result from blocks. Closes issue #377
Blocks return in a copy of the result of their ending expression, not the
direct result of the ending expression, as that may be a local variable which
gets zeroed by drop_slot.
2011-05-17 00:46:56 -04:00
Graydon Hoare
4c5e315843 Rename aux.rs to auxiliary.rs since win32 doesn't like files named "aux". Really. 2011-05-16 19:21:29 -07:00
Graydon Hoare
a2e2e78103 Merge remote branch 'origin/master' into HEAD
Conflicts:
	src/comp/middle/trans.rs
2011-05-16 19:04:45 -07:00
Graydon Hoare
fbbc1a77d2 Rewrite everything to use [] instead of vec() in value position. 2011-05-16 18:21:22 -07:00
Tim Chevalier
971b5d5151 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.
2011-05-16 16:59:25 -07:00
Tim Chevalier
c75125fcce Noticed that metadata::Encode::enc_sty didn't have a case for ty_task, so I added one (though this wasn't causing the problem I was seeing... 2011-05-16 16:13:11 -07:00
Patrick Walton
f74298215c rustc: Fix indentation in typeck::check_lit() 2011-05-16 15:24:32 -07:00
Patrick Walton
1fc1ad91ce rustc: Don't rebuild the call expression in typeck::replace_expr_type() 2011-05-16 15:20:11 -07:00
Patrick Walton
278d64dafc rustc: Don't unpack annotations in trans::lval_generic_fn() 2011-05-16 15:20:11 -07:00
Patrick Walton
32b8dcb97c rustc: Factor out the code that interns types into an "interner" data structure 2011-05-16 13:58:13 -07:00
Patrick Walton
3760bfab87 rustc: Don't rebuild AST patterns during typechecking 2011-05-16 11:45:00 -07:00
Patrick Walton
ca51b49c0a rustc: Replace the redundant typeck::node_ann_ty_params() with ty::ann_to_type_params() 2011-05-16 11:43:50 -07:00
Patrick Walton
3aaf02b907 rustc: Make the type collection pass no longer rebuild the AST 2011-05-16 10:34:32 -07:00
Patrick Walton
525a5c582f rustc: Fix indentation in ty_param_count_and_ty_for_def() 2011-05-16 10:32:38 -07:00
Patrick Walton
594c70f788 rustc: Add an item_ann() accessor function 2011-05-16 10:32:38 -07:00