Michael Sullivan
fcc458d4a0
Fix typechecking when spawning something type inferred.
...
Of course, we still don't *translate* it.
Closes #757 .
2011-08-03 11:06:58 -07:00
Brian Anderson
ea81c03960
Revert "Handle conditionals on _|_ - typed values correctly"
...
This reverts commit 13f8b3f2a67a4e3a7a26b0e238e1b6ce9e1f3573.
run-pass/if-ret.rs does not translate correctly when unoptimized. Issue #797
2011-08-03 10:48:52 -07:00
Marijn Haverbeke
d08c0f0ec1
Make ast::pat_bindings an iterator
...
And use it to get rid of some repetetive code
2011-08-03 10:26:41 +02:00
Tim Chevalier
948f8090ae
Handle _|_ - typed discriminants in alts correctly
...
Stop me, won't you, if you've heard this one before?
Closes #794
2011-08-02 19:02:38 -07:00
Tim Chevalier
13f8b3f2a6
Handle conditionals on _|_ - typed values correctly
...
Closes #776
2011-08-02 18:34:44 -07:00
Tim Chevalier
7c34550931
Make _|_ type binopable
...
But don't actually generate code that does the operation. That means
hoisting the check I added in my last commit from trans_compare
up into trans_eager_binop (don't generate any code if one operand
has type _|_ ).
Closes #777
2011-08-02 18:06:46 -07:00
Tim Chevalier
731797d075
In trans, don't assume both sides of a binop have the same type
...
This was at least partially responsible for Issue 777.
The only solution I can think of is for trans to just not generate
code for a comparison if one or both sides has type _|_. Since
that means evaluating that subexpression diverges, it should be ok
to never do the comparison. Actually generating code for the
comparison would trip an LLVM assertion failure.
2011-08-02 17:36:41 -07:00
Lindsey Kuper
430a28bb49
Refactor: a backwarding vtable can only have one kind of method.
2011-08-02 16:59:49 -07:00
Lindsey Kuper
48467c4faa
Comment tweaks and re-flows.
2011-08-02 16:53:31 -07:00
Michael Sullivan
f371482593
Consolidate environment building/loading between closure types.
2011-08-02 16:30:56 -07:00
Michael Sullivan
4cf4e17e1d
Track the node_id of the function in trans_common::fn_ctxt.
2011-08-02 16:30:56 -07:00
Michael Sullivan
f8b0d3d7d2
Use GEPi a bunch.
2011-08-02 16:26:00 -07:00
Tim Chevalier
40c1b864c6
Use or-patterns in trans::trans_compare, eliminating a FIXME
2011-08-02 13:17:59 -07:00
Marijn Haverbeke
2d5b651f49
Assign collection element ty to loop local tvar when checking loops
...
This makes the type declarationg for the loop variable optional in
most cases.
Closes #790
2011-08-02 15:09:29 +02:00
Marijn Haverbeke
78a0d380cc
Do not try to save block result when the block is an iter body
...
Closes #791
2011-08-02 14:28:32 +02:00
Marijn Haverbeke
6c9b90d06a
Be a little more clever about picking columns to match on in trans_alt
...
This should result in slightly more efficient matching of 'complex'
patterns with multiple discriminants in them.
2011-08-02 12:57:27 +02:00
Marijn Haverbeke
f8fa574864
Copy locals created by destructuring on the content of a box
...
This is required so that assigning to these locals doesn't clobber
the content of the box.
(A possible optimization would be to only do this copying for
locals that actually are assigned to.)
2011-08-02 12:09:15 +02:00
Marijn Haverbeke
8d8ff16dfe
Improve handling of bottom type in alt arms
2011-08-02 10:24:06 +02:00
Tim Chevalier
5cf5f5024d
Handle bang functions correctly in typestate
...
The logic for how the "returns" constraint was handled was always
dodgy, for reasons explained in the comments I added to
auxiliary::fn_info in this commit. Fixed it by adding distinct
"returns" and "diverges" constraints for each function, which
are both handled positively (that is: for a ! function, the
"diverges" constraint must be true on every exit path; for
any other function, the "returns" constraint must be true
on every exit path).
Closes #779
2011-08-01 20:58:16 -07:00
Paul Stansifer
fcc32797de
Fix incorrect uses of str::buf()
2011-08-01 18:51:56 -07:00
Michael Sullivan
7a05f1db7c
Fix closures over dynamically-sized polymorphic values.
2011-08-01 15:19:55 -07:00
Michael Sullivan
601c299d52
Fix closures over known-size polymorphic values.
2011-08-01 15:18:44 -07:00
Michael Sullivan
a32f287c8a
Add a GEPi function that wraps GEP with integer arguments.
2011-08-01 15:18:44 -07:00
Marijn Haverbeke
92240eb25b
Add check for irrefutable patterns in destructuring locals
2011-08-01 17:52:43 +02:00
Marijn Haverbeke
985c32ef4c
Partially implement destructuring locals
...
You can now say
let {bcx, val} = some_result_returner();
Similar for loop variables. Assigning to such variables is not safe
yet. Function arguments also remain a TODO.
2011-08-01 17:51:37 +02:00
Tim Chevalier
2971cfb145
Remove unused imports
2011-07-31 00:06:25 -07:00
Tim Chevalier
28f7c6af24
Change bitvectors::relax_precond_block to use visit instead of walk
2011-07-31 00:06:25 -07:00
Graydon Hoare
bc4e9afe25
Fix bug in typechecker counting occurrences of typarams in instantiation rather than checking formals list.
2011-07-29 18:48:15 -07:00
Graydon Hoare
0c9b749d20
Enable kind checking on typarams, fix kind constraints in library and comp.
2011-07-29 18:48:15 -07:00
Michael Sullivan
a34f7c8cb3
Switch the heap build and load environment functions to use GEP_tup_like.
2011-07-29 18:22:41 -07:00
Michael Sullivan
56f0fbeafc
Initial trans of lambdas. Doesn't work with polymorphism yet.
2011-07-29 18:22:41 -07:00
Tim Chevalier
126cd44c38
Refactor typestate code involving stmt_decls
...
To handle multiple-LHS declarations with initializers properly,
I changed seq_states to take a list of expressions paired with optional
names, not just a list of expressions. Then, the same logic that handles
ordered lists of subexpressions everywhere else can handle multi-
declarations.
2011-07-29 18:00:10 -07:00
Graydon Hoare
59c441a66a
Encode, decode, and thread through typechecking all the param kinds, not just the counts.
2011-07-29 16:40:30 -07:00
Michael Sullivan
a684f6078f
Do some cleanup in load_environment.
2011-07-29 15:29:38 -07:00
Michael Sullivan
6a4d0ce829
Add in some missing cases for typestate with closures.
2011-07-29 15:29:38 -07:00
Lindsey Kuper
7efbad674a
Don't confuse backwards and forwards.
...
Oops. If we already have a backwarding vtable, that means that we are
currently building a forwarding fn. (Progress toward issue #702.)
2011-07-29 15:21:40 -07:00
Lindsey Kuper
6423cc7b52
Comments and cleanup, in preparation for more work on issue #702 .
2011-07-29 15:21:40 -07:00
Lindsey Kuper
f4eacbb3b4
Get rid of an obsolete comment now that obj dtors are gone.
2011-07-29 15:21:40 -07:00
Lindsey Kuper
3595f1f966
Disallow overloading a method with one of different type. Closes #703 .
2011-07-29 13:44:34 -07:00
Graydon Hoare
f3c05b9fae
Turn on kind propagation for typarams. Annotate a bunch of typarams in rustc and libstd.
2011-07-29 12:58:52 -07:00
Marijn Haverbeke
c34d74315f
Remove unreachable statements
2011-07-29 20:54:44 +02:00
Marijn Haverbeke
aa3b89610e
Track failures in typeck, assign proper type to failing blocks
...
(and warn for unreachable statements)
Closes #727
2011-07-29 20:54:44 +02:00
Lindsey Kuper
9705f97ead
Typechecking bugfix for anon objs. Removes duplicate methods in outer
...
object types.
2011-07-29 10:33:00 -07:00
Lindsey Kuper
a6151aa9a8
Formatting tweaks.
2011-07-29 10:33:00 -07:00
Marijn Haverbeke
451ec03c2d
Clean up old FIXME regarding or-patterns
2011-07-29 14:03:52 +02:00
Marijn Haverbeke
b1d2a00b4a
Remove support for obj dtors
2011-07-29 14:03:24 +02:00
Marijn Haverbeke
30d2e358be
Replace obj dtors with resources in stdlib and rustc
2011-07-29 14:03:24 +02:00
Marijn Haverbeke
ae46c154f0
Make sure resources always have their drop glue called
...
Even when their content does not contain pointers
2011-07-29 12:53:58 +02:00
Marijn Haverbeke
4c09d4a770
Missed another instance of walk in typeck
2011-07-29 12:18:26 +02:00
Marijn Haverbeke
5adf87a2c6
Fix iter_structural_ty_full for resource types
...
The compiler would blow up when compiling a structural type
containing a resource.
2011-07-29 11:44:29 +02:00