1884 Commits

Author SHA1 Message Date
Brian Anderson
119f43e0c7 Rename str::connect_ivec to str::connect 2011-08-12 12:08:27 -07:00
Brian Anderson
740196987e Rename std::str::unsafe_from_bytes_ivec to unsafe_from_bytes 2011-08-12 12:08:27 -07:00
Brian Anderson
a9ce342fa3 Convert all uses of unsafe_from_bytes to unsafe_from_bytes_ivec 2011-08-12 12:08:26 -07:00
Brian Anderson
49b80f9bf7 Remove str::from_bytes
This is exactly the same as str::unsafe_from_bytes
2011-08-12 12:08:26 -07:00
Marijn Haverbeke
de4b383a0f Properly typecheck unary minus
Closes #813
2011-08-12 16:05:56 +02:00
Tim Chevalier
051b401051 Handle _|_ - typed things in the bodies of do-while loops
The resulting code is strange, but perhaps someone else can
fix it. The obvious things, like returning body_res, all resulted
in completely incomprehensible LLVM errors.

Closes #814
2011-08-11 17:23:47 -07:00
Patrick Walton
5079f51386 rustc: Associate type descriptors with allocas as metadata 2011-08-11 14:35:33 -07:00
Brian Anderson
4ff6763b60 rustc: Lowercase "main function not found" error 2011-08-11 10:09:02 -07:00
Brian Anderson
0cddcac016 rustc: Use spans in some main typeck errors 2011-08-11 10:09:02 -07:00
Brian Anderson
612fe3d2d6 Add ast_map::node_span function 2011-08-11 10:09:02 -07:00
Brian Anderson
14b3ad194a Switch a check for main type from an error to an ICE
This code path doesn't look possible, so I think it indicates a bug. Also,
make the message lowercase.
2011-08-11 10:09:02 -07:00
Brian Anderson
0f8e58e3ce Lowercase the "wrong type in main fn" error 2011-08-11 10:09:02 -07:00
Patrick Walton
7b337e3581 rustc: Don't free shared memory when --gc is on 2011-08-10 22:47:18 -07:00
Michael Sullivan
c5c8258937 Rework check_expr substantially.
The bulk of check_expr is now check_expr_with_unifier, which takes an
expected type and a unification function and will perform the
unification on the type it produces. check_expr calls
check_expr_with_unifier with a dummy unifier and a new function,
check_expr_with, takes an expected type and uses the simple unifier.

I think this generally makes thing cleaner, but the purpose for doing
this is to enable type inferred lambda-blocks to be useful by allowing
the argument types to be unified before the body of the lambda is
checked.
2011-08-10 20:18:07 -07:00
Michael Sullivan
67e361a940 Introduce a ty_infer ast node and use it instead of option::t[ty].
This actually basically makes things worse, since we get less nice
type system guarentees but it will make doing type inferred blocks a
fair deal less painful. I'm not /really/ happy about this...
2011-08-10 20:18:07 -07:00
Patrick Walton
1e6074ca73 rustc: Mark functions as "rust" GC 2011-08-10 20:12:30 -07:00
Michael Sullivan
43c9fe65bd Eliminate the last vestiges of init_recv. 2011-08-10 19:21:29 -07:00
Michael Sullivan
00b781e495 Some cleanup in check_expr. 2011-08-10 19:20:00 -07:00
Patrick Walton
ba7c8f18d4 rustc: Remove unused "trace" upcalls 2011-08-10 18:09:52 -07:00
Patrick Walton
d1494901d0 rustc: Declare GC-related intrinsics 2011-08-10 17:59:33 -07:00
Patrick Walton
19424dfab6 rustc: Add unique pointers to the set of types we support 2011-08-10 17:24:22 -07:00
Tim Chevalier
a8a4d4ec05 Use actual type, not declared type, when zeroing move arguments
trans was failing with a bounds check error because the caller
was using the declared type (an out-of-scope ty param) and not
the actual type in a list of argument types to zero.

Closes #811
2011-08-10 17:22:57 -07:00
Lindsey Kuper
bf81a05223 Factor out creation of object body types. 2011-08-10 16:53:32 -07:00
Michael Sullivan
bcc30cb4f6 Rename unify::simple to unify::unify. 2011-08-10 16:43:03 -07:00
Michael Sullivan
7d5092ee7b Some trivial cleanup. 2011-08-10 16:28:34 -07:00
Lindsey Kuper
007af36bb3 Comments, cleanup, whitespace, refactoring. 2011-08-10 15:11:32 -07:00
Patrick Walton
adce35acd4 rustc: Use polymorphic logging 2011-08-10 14:35:12 -07:00
Patrick Walton
8e6e6f5f89 rustc: Make iter_structural_ty_full and friends take one value, not two. Shaves a second off codegen. 2011-08-09 18:31:14 -07:00
Patrick Walton
044b16ad68 rustc: Remove the code to generate cmp glue 2011-08-09 18:31:13 -07:00
Graydon Hoare
a5997f2eb2 Actually perform handoff from caller to callee on move-mode args. 2011-08-09 17:56:26 -07:00
Patrick Walton
865ca749dc rustc: Use shapes instead of codegen'd cmp glue 2011-08-09 17:02:17 -07:00
Lindsey Kuper
5d9680fc7e Move object-system-related trans stuff to its own file. 2011-08-09 16:42:55 -07:00
Brian Anderson
61425c8d13 Convert remaning ivec decls to new syntax
These snuck in during rebasing
2011-08-09 15:53:26 -07:00
Erick Tryzelaar
00ccd6ba42 Remove support for the ivec T[] syntax. 2011-08-09 15:53:26 -07:00
Erick Tryzelaar
8b15045224 Port the compiler to the ivec type [T] syntax. 2011-08-09 15:53:26 -07:00
Lindsey Kuper
d5c8bb9d86 A little backwarding cleanup/refactoring. 2011-08-09 11:19:24 -07:00
Lindsey Kuper
a334adaab9 Thread "self" through the stack. Backwarding! Closes #702. 2011-08-09 10:59:13 -07:00
Graydon Hoare
b2cac5afa3 Implement typestate checking for move-mode args. Un-XFAIL compile-fail/move-arg.rs. 2011-08-08 19:41:54 -07:00
Patrick Walton
72fdb1a3bf rustc: Emit the shape of "float" as f64, not f32 2011-08-08 16:52:10 -07:00
Michael Sullivan
059c66b9f7 Don't bother zeroing out slots in cleanups. 2011-08-08 16:17:09 -07:00
Graydon Hoare
b54e7e4506 Add new arg-passing mode 'move' denoted with '-T'. Translate as pass-by-value, doesn't deinit source yet nor get proper analysis in typestate, alias passes. 2011-08-08 15:53:41 -07:00
Paul Stansifer
a9471d8296 Revert "rustc: bzero in zero_alloca. Shaves off a second or three."
This causes trouble in Valgrind in drop glue in parsing.

This reverts commit 4d180793f04ece462d2053c1a04ea2b0d73b4ee2.
2011-08-05 16:38:49 -07:00
Eric Holk
b62e80c1f0 Atomic ref counting for chans. 2011-08-05 15:27:28 -07:00
Tim Chevalier
1c786bcc82 Initialize all constraints to False
Previously, typestate was initializing the init constraint for
a declared-but-not-initialized variable (like x in "let x;") to False,
but other constraints to Don't-know. This led to over-lenient results
when a variable was used before declaration (see the included test
case). Now, everything gets initialized to False in the prestate/poststate-
finding phase, and Don't-know should only be used in pre/postconditions.

This aspect of the algorithm really needs formalization (just on paper),
but for now, this closes #700
2011-08-05 15:25:52 -07:00
Patrick Walton
59e9b629c0 Revert "rustc: Introduce the concept of inline to the AST"
This reverts commit 9b9170f9fe2e4701255a5bd0630c203409d8e934.
2011-08-05 11:38:06 -07:00
Patrick Walton
9b9170f9fe rustc: Introduce the concept of inline to the AST 2011-08-05 11:33:48 -07:00
Tim Chevalier
d7ee55bfd0 (Almost) Always unify a function tail expr with the function result type
typeck::check_fn had an exception for the case where the tail expr
was compatible with type nil -- in that case, it doesn't unify the
tail expr's type with the enclosing function's result type. This
seems wrong to me. There are several test cases in Issue #719
that illustrate why. If the tail expr has type T, for some type
variable T that isn't resolved when this check happens, then T
never gets unified with anything, which is incorrect -- T should
be unified with the result type of the enclosing function. (The
bug was occurring because an unconstrained type variable is
compatible with type nil.)

Instead, I removed the check for type nil and added a check that
the function isn't an iterator -- if it's an iterator, I don't
check the tail expr's type against the function result type,
as that wouldn't make sense.

However, this broke two test cases, and after discussion with
brson, I understood that the purpose of the check was to allow
semicolons to be omitted in some cases. The whole thing seems
rather ad hoc. But I came up with a hacky compromise solution:
instead of checking whether the tailexpr type is *compatible*
with nil, we now just check whether it *is* nil. This also
necessitates calling resolve_type_vars_if_possible before
the check happens, which worries me. But, this fixes the bug
from Issue #719 without requiring changes to any test cases.

Closes #719 but I didn't try every variation -- so reopen the bug
if one of the variations still doesn't work.
2011-08-05 02:21:58 -07:00
Michael Sullivan
c5d55ef918 Prohibit assignment to upvars in lambdas. Closes #805. 2011-08-04 19:35:44 -07:00
Patrick Walton
a26c027731 Revert "rustc: Don't emit memset for non-structural types" due to crashes
This reverts commit 3d5a777fe19ab210aedf473678687a98023ff586.
2011-08-04 19:06:13 -07:00
Patrick Walton
3d5a777fe1 rustc: Don't emit memset for non-structural types 2011-08-04 18:24:57 -07:00