2467 Commits

Author SHA1 Message Date
Michael Sullivan
66a255ac92 Add a cleanup for copying closures. Closes #804. 2011-08-04 17:58:12 -07:00
Michael Sullivan
9a5e9806f3 Don't force resolution of type variables until there is no enclosing function scope. Closes #803. 2011-08-04 17:33:15 -07:00
Patrick Walton
6c0297cfe7 rustc: bzero in drop_slot 2011-08-04 16:47:20 -07:00
Lindsey Kuper
fcec628203 Enable creation of backwarding vtables (issue #702), but don't start
using them yet.  Also, refactor process_fwding_mthd into separate
functions to handle backwarding and forwarding, and refactor
create_vtbl to be more digestible.
2011-08-04 16:40:17 -07:00
Patrick Walton
4d180793f0 rustc: bzero in zero_alloca. Shaves off a second or three. 2011-08-04 16:33:38 -07:00
Michael Sullivan
cf9c0f9d93 Use lambdas in gather_locals in typeck. 2011-08-04 16:18:12 -07:00
Michael Sullivan
95680474e2 Use lambdas in the freevars pass. 2011-08-04 16:18:12 -07:00
Patrick Walton
ae3312002a rustc: Use memmove in copy_ty. 45% LLVM codegen speed improvement. 2011-08-04 16:14:28 -07:00
Tim Chevalier
e0985c1060 Handle alt on a _|_ - typed value
Return the result of the discriminant from trans_alt,
rather than nil, in the _|_ case. This was breaking the
enclosed test case (alt-bot-2) when optimization was disabled.

Closes #769
2011-08-04 16:07:26 -07:00
Tim Chevalier
5f03ca48d8 Add a fast path in ty::occurs_check_fails
Use type_contains_vars in occurs_check_fails to avoid doing
any work most of the time. This fixes a performance regression.
(No one else noticed yet that typechecking just got 4x slower, right?
Well, now it isn't anymore. :-})
2011-08-04 15:56:40 -07:00
Tim Chevalier
2baaeab784 Implement the occurs check
In the writeback phase, the typechecker now checks that it isn't
replacing a type variable T with a type that contains T. It
also does an occurs check in do_autoderef in order to avoid
getting into an infinite chain of derefs.

I'm a bit worried that there are more places where the occurs
check needs to happen where I'm not doing it now, though.

Closes #768
2011-08-04 15:30:09 -07:00
Lindsey Kuper
d7d4b4fc38 trans_args no longer needs llobj argument. 2011-08-04 11:34:06 -07:00
Patrick Walton
2a3235b58c rustc: Actually emit shapes 2011-08-04 11:25:46 -07:00
Patrick Walton
4061ca2bbd rustc: Generate shapes 2011-08-04 10:46:10 -07:00
Lindsey Kuper
1b1d8e7b91 Killing an obsolete comment. 2011-08-03 20:03:05 -07:00
Lindsey Kuper
6df7c041bc Pointer-ifying llenv. Step 1 of 2 steps to object system sanity. 2011-08-03 19:50:19 -07:00
Lindsey Kuper
29ec2503db Put comments on trans contexts back where they belong. :( 2011-08-03 19:49:29 -07:00
Michael Sullivan
5d5a3ca52d Fix trans_put to properly return (). Closes #773. 2011-08-03 18:10:54 -07:00
Michael Sullivan
5ea8d7f467 Make the pretty printer put trailing newlines at the end of files. 2011-08-03 17:52:25 -07:00
Michael Sullivan
e33de59e47 Clean up how we deal with dynamic size function arguments/returns. 2011-08-03 14:24:41 -07:00
Michael Sullivan
7bcde7270d Have trans_bind_thunk handle polymorphic but statically sized return values.
Closes #775.
2011-08-03 14:24:41 -07:00
Tim Chevalier
001df3f0ca Revert "Revert "Handle conditionals on _|_ - typed values correctly""
This reverts commit ea81c03960264bf590cd99ed2b662243e3db7a7c.

Changed the case in trans_if where the conditional is _|_ - typed
but the block is terminated to return the result of the cond,
instead of nil.

This passes "make check" with optimization disabled as well as
enabled.
2011-08-03 13:07:41 -07:00
Paul Stansifer
513276e595 Add #concat_idents[] and #ident_to_str[] 2011-08-03 12:42:35 -07:00
Michael Sullivan
c9ae548dae Reject programs that do a put outside of iterators.
Closes #774.
2011-08-03 11:43:50 -07:00
Michael Sullivan
8871462575 Do a bunch more typechecking for iters and for each loops.
Closes #771.
Closes #772.
Closes #796.
2011-08-03 11:07:53 -07:00
Michael Sullivan
3254fb9806 Code cleanup in check_expr. 2011-08-03 11:06:58 -07:00
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
e4da7c5bee parse_crate_from_source_str takes a parse_sess, not codemap
This was causing problems when reading from stdin for subsequent passes that
needed to generate node ids.
2011-08-03 10:55:59 -07:00
Brian Anderson
97a8784c98 Fix pretty-printer to read from files again
I accidentally made the pretty-printer always read from stdin
2011-08-03 10:55:59 -07:00
Brian Anderson
0b7a94a94c Pretty-print kinds of type params 2011-08-03 10:55:59 -07:00
Brian Anderson
843767a841 Disambiguate unop statements in pretty-printer. Closes #674 2011-08-03 10:55:59 -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
Brian Anderson
2911156820 Pretty-print fn constraints more correctish 2011-08-02 17:49:11 -07:00
Brian Anderson
3eef9993af Don't pp extra lines after block open when preserving whitespace. Closes #759 2011-08-02 17:49:11 -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
Paul Stansifer
ab4764520c Allow patterns of the form `[a, b, c ...] to be matched and transcribed. 2011-08-02 14:46:02 -07:00
Tim Chevalier
40c1b864c6 Use or-patterns in trans::trans_compare, eliminating a FIXME 2011-08-02 13:17:59 -07:00
Brian Anderson
35e9e02066 Use ioivec::read_whole_file_str in a few places 2011-08-02 10:39:14 -07:00
Brian Anderson
840a09c86e Add a --no-trans command line option
Runs all passes before translation. This will be used for pretty-printing
tests to verify that the results are still probably valid Rust code.
2011-08-02 10:39:12 -07:00
Brian Anderson
5f4b7e1ba7 Compiler accepts input from stdin when source file is called "-" 2011-08-02 10:39:09 -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