Commit Graph

989 Commits

Author SHA1 Message Date
Michael Sullivan
a56902304d Make fixed length vecs implicitly copyable. Clean up some other kind code. Closes #2629 2012-06-15 15:31:19 -07:00
Tim Chevalier
093faaabe1 Handle index expressions' callee IDs correctly
Some code that handles unary and binary exprs' callee IDs was
    forgetting to handle the index expr case (since calls to
    user-defined index operators also have callee IDs). This was
    manifesting as an ICE in trans because when monomorphizing a
    function that had one of these operators in it (an index into a
    dvec, in the test case), the callee ID would be unbound to a type.

    Fixed it. Closes #2631.
2012-06-15 15:21:17 -07:00
Lindsey Kuper
7a253eabce Add an intermediate level of type/region variable resolution forcing
And change structurally_resolved_type() to force resolution of
non-region variables.
2012-06-15 12:54:44 -07:00
Paul Stansifer
1e36d216be Add the interner to parse_sess. 2012-06-15 12:41:41 -07:00
Michael Sullivan
68670f631c Make type_is_pod handle more types. 2012-06-15 11:48:04 -07:00
Patrick Walton
5151c08850 Issue #2591: Fix "upvar" jargon in borrowck error messages 2012-06-14 23:18:09 -07:00
Eric Holk
56bd689767 Merge branch 'incoming' of github.com:mozilla/rust into newsnap 2012-06-14 21:03:41 -07:00
Eric Holk
8ab15c0266 Merge branch 'incoming' into newsnap 2012-06-14 20:36:16 -07:00
Lindsey Kuper
77e6573929 Further work on integer literal suffix inference (#1425)
In this commit:

  * Change the lit_int_unsuffixed AST node to not carry a type, since
    it doesn't need one

  * Don't print "(unsuffixed)" when pretty-printing unsuffixed integer
    literals

  * Just print "I" instead of "(integral)" for integral type variables

  * Set up trans to use the information that will be gathered during
    typeck to construct the appropriate constants for unsuffixed int
    literals

  * Add logic for handling int_ty_sets in typeck::infer

  * Clean up unnecessary code in typeck::infer

  * Add missing mk_ functions to middle::ty

  * Add ty_var_integral to a few of the type utility functions it was
    missing from in middle::ty
2012-06-14 20:24:36 -07:00
Graydon Hoare
d953462d03 Complete a data visitor type that does proper pointer-walking. 2012-06-14 19:58:34 -07:00
Eric Holk
52c38ba886 Merge branch 'incoming' into newsnap 2012-06-14 19:36:22 -07:00
Patrick Walton
6969f0f2fc Issue #2572: (trans) Fix self-referential classes. 2012-06-14 18:51:31 -07:00
Tim Chevalier
dce5d6ab9c whitespace 2012-06-14 18:46:10 -07:00
Michael Sullivan
af60716281 Get an initial implementation of boxed vectors working. 2012-06-14 18:01:05 -07:00
Tim Chevalier
97bcb20244 Avoid some duplicated typechecking work
There was a FIXME noting that ty::enum_variants and typeck::check::
check_enum_variants both call eval_const_expr. I tried refactoring the
code so that check_enum_variants does all the work and enum_variants
just looks up cached results, but this turned out not to be easy because
several ty functions call enum_variants and it might get invoked on an
enum before that enum item has been typechecked. Instead, I just made
check_enum_variants update the enum_var_cache so that enum_variants
will never call eval_const_expr twice on the same const.
2012-06-14 16:21:53 -07:00
Graydon Hoare
aeb9a2b72c Add zero check/fail paths on div/mod paths. Close #944. 2012-06-14 15:39:24 -07:00
Tim Chevalier
c6462eec30 Comments only: annotate FIXMEs in reflect 2012-06-14 14:13:52 -07:00
Eric Holk
74d2f56f21 Adding move_val and move_val_init intrinsics. 2012-06-14 13:49:41 -07:00
Tim Chevalier
24f9f45ac6 Comments only: annotate FIXMEs in typeck::infer 2012-06-14 12:10:48 -07:00
Tim Chevalier
699b14b99d Comments only: annotate a FIXME and remove an obsolete one 2012-06-14 12:07:42 -07:00
Tim Chevalier
730381d936 Annotate and fix FIXMEs in typeck 2012-06-14 12:04:05 -07:00
Tim Chevalier
87af3f3cca Dead code elimination 2012-06-14 11:10:32 -07:00
Michael Sullivan
591b2802ff Make trans only generate calls to the _dyn malloc upcalls, so we can get rid of the non dyn ones. 2012-06-13 18:00:17 -07:00
Tim Chevalier
6f95c79b95 Traverse types in reachability
Issue 2526 showed a test case where a library exported only a type
that was a synonym for a class. Because the class's destructor wasn't
getting marked as reachable, its linkage was wrongly getting set to
"internal". The solution is for reachability to traverse types.

Closes #2526.
2012-06-13 11:57:01 -07:00
Brian Anderson
ce750a7dbc Box AST idents 2012-06-13 11:30:45 -07:00
Michael Sullivan
bdd2000066 Some cleanup in tvec. 2012-06-13 11:17:02 -07:00
Tim Chevalier
aa9d2d88d3 Handle class destructors correctly in metadata
This allows destructors to be inlined, which is necessary since
classes can have both ty params and destructors.
2012-06-12 17:37:04 -07:00
Michael Sullivan
35dd717352 Simplify a bunch of trans functions to not need the rust type. Remove some PointerCasts. 2012-06-12 17:01:13 -07:00
Michael Sullivan
ccf4e8cf9a Make vectors contain the right type descriptor. Closes #2536. 2012-06-12 17:01:13 -07:00
Michael Sullivan
4f61dcb026 Introduce an unboxed_vec type 2012-06-12 17:01:13 -07:00
Michael Sullivan
e67b5b25a6 Introduce a SHAPE_UNBOXED_VEC shape in order to seperate out vector logic. 2012-06-12 17:01:13 -07:00
Tim Chevalier
ebdf0c20cd Correct typo in comment 2012-06-12 14:56:26 -07:00
Tim Chevalier
72360970fc Change trans::common::block to be a class
And replace trans::common::block_parent with option<block>. To handle
the recursive self-reference in the block_ class, I had to add a
newtype-like enum "block" which is equivalent to @block_ -- which due
to an interaction with borrowck, resulted in having to change a few
functions in trans::base to take their block argument in ++ mode,
irritatingly enough (but not that irritatingly, since we're supposed to
get rid of modes).
2012-06-12 14:55:44 -07:00
Niko Matsakis
d1ec1d4abb Treat enums with one variant specially in borrowck: #2573 2012-06-12 14:30:14 -07:00
Michael Sullivan
d04ed0c493 Reorder things in hash_type_structure to make more sense. 2012-06-12 10:58:00 -07:00
Graydon Hoare
9f3b12b6c6 Change llsize_real to use LLVMSizeOfTypeInBits. Add comments. 2012-06-11 18:34:24 -07:00
Lindsey Kuper
8467279fac Add a new AST node for unsuffixed integer types. 2012-06-11 16:34:56 -07:00
Michael Sullivan
baf58a764b Stop emitting type parameters in shape.rs. 2012-06-11 12:52:49 -07:00
Michael Sullivan
665ba3531d Clean up tydesc declaration to make it clear what is unused. 2012-06-11 12:29:04 -07:00
Michael Sullivan
b22620624c Get rid of a bunch of dead shape code. Closes #2552. 2012-06-11 12:19:40 -07:00
Tim Chevalier
87d57e4919 Don't treat all class fields as mutable, except in trans
Closes #2550
2012-06-11 10:16:17 -07:00
Niko Matsakis
013fc92423 remove alias analysis and replace with borrowck
This reverts commit 7ef825bb60.
2012-06-08 20:39:11 -07:00
Niko Matsakis
1351117aa8 avoid rooting @ptrs that live in immutable, stable memory 2012-06-08 20:39:11 -07:00
Niko Matsakis
a628f7f47e make ccx/tcx/sess methods on bcx pure 2012-06-08 20:39:10 -07:00
Lindsey Kuper
0863ac25a7 Update READMEs and comments to reflect "rustsyntax" -> "syntax" change 2012-06-08 17:24:14 -07:00
Lindsey Kuper
7c0fd858db Get rid of little-used logging fns in util::common. Closes #2553.
Also got rid of a bunch of commented-out logging statements and
generally cleaned up the logging situation, mostly in typestate.
2012-06-08 17:22:19 -07:00
Graydon Hoare
7a699852cb Pass names of fields and variants when reflecting. 2012-06-08 16:41:38 -07:00
Graydon Hoare
d182c14247 Visit the substructure for classes and enums as well. 2012-06-08 15:36:02 -07:00
Lindsey Kuper
b8af02e219 WIP on issue #1425: mostly infrastructure changes. 2012-06-08 15:20:21 -07:00
Niko Matsakis
fc9eadf75b profile LLVM cleanup insns 2012-06-08 14:34:55 -07:00
Graydon Hoare
dc94ccc4a4 More work on reflect, only missing enum and class substructures. 2012-06-08 13:26:15 -07:00
Brian Anderson
7a74545e97 Convert reinterpret_cast + forget to 'transmute' 2012-06-08 10:58:46 -07:00
Brian Anderson
95b9d538b8 Use #[cfg(unix)] and #[cfg(windows)] everywhere 2012-06-07 22:28:00 -07:00
Brian Anderson
7ef825bb60 Revert "remove alias analysis and replace with borrowck"
18s perf regression compiling rustc with opts

This reverts commit 7f6ee0ce0d.
2012-06-07 19:42:27 -07:00
Michael Sullivan
45cc95fa22 Remove a bunch of old "remove after snapshot" code. 2012-06-07 18:05:12 -07:00
Michael Sullivan
bf0d6a77c5 Reorder the arms of sty. 2012-06-07 17:09:23 -07:00
Niko Matsakis
7f6ee0ce0d remove alias analysis and replace with borrowck
cc #2540
2012-06-07 16:46:57 -07:00
Tim Chevalier
8c6d439a81 Comments only: annotate remainder of FIXMEs in typestate 2012-06-07 16:29:41 -07:00
Tim Chevalier
64b5ae27ac Start annotating FIXMEs in typestate; also some minor refactoring 2012-06-07 16:01:45 -07:00
Tim Chevalier
6b2cfe793b Remove an irrelevant comment
Comment doesn't seem relevant anymore because the block comment at the
very beginning of the file says it's a bad idea.
2012-06-07 15:13:35 -07:00
Tim Chevalier
d68c5cc399 Use c_ulonglong now that it works in FFI, etc...
Annotate FIXMEs; remove obsolete FIXMEs; remove an unnecessary
PointerCast.
2012-06-07 15:13:35 -07:00
Tim Chevalier
dc77386494 Remove obsolete comment
This comment seems to be no longer relevant, since we do have
user-defined vector sizes now (and they don't use the T_vec type)
2012-06-07 15:13:35 -07:00
Tim Chevalier
88f03743b0 Comments only: annotate FIXMEs 2012-06-07 15:13:35 -07:00
Graydon Hoare
9ee0137018 Refactor reflect.rs, begin visiting type substructures. 2012-06-07 13:51:41 -07:00
Tim Chevalier
a494cc1598 Comments only: annotate FIXMEs 2012-06-07 13:49:01 -07:00
Tim Chevalier
b0f01727fe Annotate FIXMEs in resolve
And fix one FIXME (use fk_ctor to visit a constructor)
2012-06-07 13:48:35 -07:00
Brian Anderson
5f4837ad6a core: Start on a stack walker 2012-06-06 23:39:56 -07:00
Brian Anderson
125552fb19 rustc: Add frame_address intrinsic 2012-06-06 23:39:56 -07:00
Graydon Hoare
c56b8f8924 Remove unused middle::ty::sort_methods function. 2012-06-06 20:20:22 -07:00
Graydon Hoare
3251bd690e Fix some copy-paste bugs in visit glue, un-xfail reflect-visit-type. 2012-06-06 19:38:56 -07:00
Tim Chevalier
f4fb0f9eea Handle regions correctly in class ctors and dtors
Class ctors and dtors were always getting assigned the empty region
before, which meant a reference to the "self" region in a ctor argument
got resolved to a named region called "self" rather than the class's
self region, which led to a rather confusing error message as documented
in #2502.

Closes #2502
2012-06-06 19:23:26 -07:00
Niko Matsakis
3b4cfdeee2 Merge remote-tracking branch 'mozilla/incoming'
Conflicts:
	src/rustc/middle/tstate/auxiliary.rs
2012-06-06 19:00:34 -07:00
Niko Matsakis
ab8fa495d0 some (very little) work on commenting 2012-06-06 18:42:09 -07:00
Niko Matsakis
e8dfe179da move tstate to dvec 2012-06-06 18:37:55 -07:00
Niko Matsakis
9be612f7ee move resolve to dvec, remove unnecessary mut annotations 2012-06-06 18:37:52 -07:00
Niko Matsakis
594e01d007 add pure, copies to liveness 2012-06-06 18:37:46 -07:00
Niko Matsakis
7d17c2d87f move check_const to dvec 2012-06-06 18:37:43 -07:00
Niko Matsakis
08520a1697 move borrowck to dvec, insert a few minor copies 2012-06-06 18:37:35 -07:00
Niko Matsakis
3bc42d5661 distinguish by-val passes of pointer and non-pointer things 2012-06-06 18:36:47 -07:00
Niko Matsakis
64c7897187 exempt unsafe ptrs from by-val checks 2012-06-06 18:36:42 -07:00
Michael Sullivan
d542e67827 Do some cleanup of the allocation code. 2012-06-06 18:26:47 -07:00
Tim Chevalier
32e448e0da Change subtypes_require to handle class fields correctly 2012-06-06 15:45:49 -07:00
Tim Chevalier
5e8ef74e22 Revert "Revert "Forbid classes with no fields" due to test failures"
This reverts commit e56a6e8cb0.
2012-06-06 15:08:24 -07:00
Tim Chevalier
a6c92f0a17 Revert "Revert "Merge pull request #2516 from mozilla/incoming" due to failures"
This reverts commit 9fae95860de510f6874810cf43efb83f101246ef.
2012-06-06 15:08:24 -07:00
Tim Chevalier
fec3b91a3c In reachability, visit class ctors 2012-06-05 21:17:16 -07:00
Tim Chevalier
8972588583 Dereference classes with dtors only on a field access
A class with a dtor has a different representation (a pair of a bit field
and a pointer to the class itself), and previously, the trans code
was selecting out the second field on any reference to a variable whose
type was a class with a dtor. This turned out to be wrong in the case where
a closure captures a variable with such a type. Changed the code to only
insert the field selection on a class field access.
2012-06-05 15:11:33 -07:00
Tim Chevalier
ebde93861f Allow classes with dtors to be used before declaration
get_item_val could generate an internal compiler error if a class with
a dtor was used before the class itself got translated, because it was
assuming that the dtor's node ID was always in the item_symbols table. Fixed
it to create a new symbol if necessary, and use it subsequently.
2012-06-05 15:11:33 -07:00
Brian Anderson
d3c641678e rustc: Put uniques into addrspace 1 2012-06-05 14:03:25 -07:00
Michael Sullivan
e86214830a Make "no implicit copies" diagnostics controllable through lint settings. Closes #2503. 2012-06-04 20:44:58 -07:00
Michael Sullivan
01a6c713c3 Make vecs/strs not implicitly copyable by default, but make it configurable. Closes #2450. 2012-06-04 19:53:30 -07:00
Michael Sullivan
a405ff9bf6 Fix lint's handling of multiple warn attributes... 2012-06-04 19:53:30 -07:00
Eric Holk
1e8f501343 Machine types are different from int/uint, etc (Issue #2187) 2012-06-04 19:16:47 -07:00
Niko Matsakis
903033bb03 handle fixed-length vecs in borrowck categorization 2012-06-04 16:40:09 -07:00
Michael Sullivan
6d9dd055d1 Get rid of warnings from instantiating typarams with non-implicitly copyable types. 2012-06-04 16:35:32 -07:00
Michael Sullivan
4d5d43beae Warn when invoking polymorphic functions with non copyable types. Closes #2466. 2012-06-04 16:30:41 -07:00
Michael Sullivan
5a4e53487f Heavily rework lint infrastructure. Split it into two passes: one that builds the table and one that does the checks. Build the table early and make session know about it fo reasy use. 2012-06-04 16:08:07 -07:00
Niko Matsakis
3c4baf694e better support for classes with polymorphic methods 2012-06-04 11:46:23 -07:00
Michael Sullivan
7213274e57 Make how lint handles unknown warn directives configurable by lint (default to warn). Closes #2480. 2012-06-04 09:54:03 -07:00
Michael Sullivan
9be94f6650 Provide mechanisms to inspect warning settings from outside lint. 2012-06-04 09:54:03 -07:00
Niko Matsakis
01b5777c8b prohibit type parameters in native fns and other minor fixes
trans now can safely assert that it never sees a type param
2012-06-03 20:03:08 -07:00
Niko Matsakis
3f6e6532ac make vec fns/methods take imm slices.
this also repairs the unsoundness in typing of unpack_slice,
which was silently converting a const ptr to an imm one.
2012-06-02 19:14:57 -07:00
Lindsey Kuper
7d0755529e Add ty_var_integral (WIP on issue #1425). 2012-06-02 11:19:27 -07:00
Niko Matsakis
77c470d183 Allow rcvrs to be borrowed; check rcvrs in borrowck properly 2012-06-02 10:08:04 -07:00
Niko Matsakis
cfac9b6833 improve borrowck to handle some frankly rather tricky cases
- receivers of method calls are also borrowed
- by-val arguments are also borrowed (needs tests)
- assignment to components can interfere with loans
2012-06-02 10:08:04 -07:00
Tim Chevalier
14e3fdea9c Check that classes are instantiable
that is, check that there aren't any mutually recursive cycles between
classes and other types
2012-06-01 20:40:35 -07:00
Tim Chevalier
79787833bb Make sure classes with dtors are still sendable (but not copyable) 2012-06-01 20:40:35 -07:00
Tim Chevalier
475013fcb6 Comment only: fix typo 2012-06-01 20:40:35 -07:00
Tim Chevalier
facb5c08c6 Enforce rule that classes with dtors aren't copyable
The test for this is copy-a-resource.
2012-06-01 20:40:35 -07:00
Tim Chevalier
bc5cb4deb3 Change type_needs_drop to say that any class w/ a dtor needs a drop
This was preventing dtors from running for class types that didn't
have pointer fields.
2012-06-01 20:40:34 -07:00
Michael Sullivan
8f7364b26d Don't try to compute kinds of fictitious types. Indicate a bug instead. 2012-06-01 17:58:40 -07:00
Niko Matsakis
6c6ad229a3 break up borrowck into modules and begin to document how it works 2012-06-01 10:50:19 -07:00
Michael Sullivan
e47962f6a9 Have lint build up a table of the warning settings on a per item basis for later use. 2012-05-31 19:07:24 -07:00
Michael Sullivan
d1a65da835 Time lint in the driver like every other pass, instead of in lint. 2012-05-31 19:07:24 -07:00
Michael Sullivan
af228711e5 Make lint properly deal with nested items. Closes #2473. 2012-05-31 19:07:24 -07:00
Michael Sullivan
84adcb9806 Rework lint to copy lint mode maps when changing them. 2012-05-31 19:07:24 -07:00
Michael Sullivan
7b02f29d47 Switch lint over to using a smallintmap. 2012-05-31 18:38:42 -07:00
Michael Sullivan
3dfb174793 Remove some dead code from kind checking. 2012-05-31 18:38:42 -07:00
Brian Anderson
89aa28289b rustc: Use fewer boxes in typestate 2012-05-31 16:20:58 -07:00
Niko Matsakis
c2ce2741a7 allow mutable vectors and so forth to be used as immutable slices 2012-05-31 15:07:09 -07:00
Eric Holk
0470abe1d2 Allow some resources to be considered const. 2012-05-31 13:55:54 -07:00
Brian Anderson
41b02b7c57 Merge remote-tracking branch 'brson/self-describing-uniques'
Conflicts:
	src/snapshots.txt
2012-05-31 01:26:05 -07:00
Brian Anderson
151de909c1 rustc: Do less work still in typestate 2012-05-30 23:20:31 -07:00
Brian Anderson
4b7e40d817 rustc: Remove debug logging 2012-05-30 21:23:34 -07:00
Brian Anderson
a2bbdd3f52 rt: Remove upcall_shared_malloc/free/realloc 2012-05-30 21:23:34 -07:00
Brian Anderson
80dc2e11a1 rustc: Remove the last use of upcall_shared_malloc 2012-05-30 21:23:34 -07:00
Brian Anderson
54d42c4d74 rustc: Make trans handle self-describing strings 2012-05-30 21:23:34 -07:00
Brian Anderson
09a1b94907 Various changes for self-describing vecs 2012-05-30 21:23:34 -07:00
Brian Anderson
c6a23cddfb rustc: Make unique closures use the new unique allocator 2012-05-30 21:23:34 -07:00
Brian Anderson
654f7e3086 rustc: Make unique boxes self-describing 2012-05-30 21:23:34 -07:00
Brian Anderson
45933ca485 rustc: Add some methods for trans for mallocing uniques 2012-05-30 21:23:34 -07:00
Brian Anderson
6d37c90ce6 rustc: Remove tuplify_cbox_ty. Unused 2012-05-30 21:23:33 -07:00
Brian Anderson
02dde781eb rustc: Don't typestate fns that don't have constrained function calls 2012-05-30 17:48:05 -07:00
Michael Sullivan
ea8d4d7f17 Properly sign extend array indexes. Closes #2468. 2012-05-30 17:09:52 -07:00
Michael Sullivan
7fee392de5 Handle differing signedness in constant shifts. Closes #2426. 2012-05-30 15:03:24 -07:00
Eric Holk
f49b891ce5 Include capture clauses when generating metadata.
This may fix the bug that's blocking Issue #2441.
2012-05-30 12:03:51 -07:00
Niko Matsakis
1f4b3cfc36 zero out alloca for preserving values
conservatively do it always for now
2012-05-30 11:26:15 -07:00
Niko Matsakis
555492e427 port alt to dvec 2012-05-30 11:26:15 -07:00
Niko Matsakis
79b3dedac3 allow for loop bodies 2012-05-30 11:26:15 -07:00
Niko Matsakis
653a1f8781 integrate purity into type 2012-05-30 11:26:15 -07:00
Niko Matsakis
22a10f0e4a refactor region manip. to remove redundancy, get closer to fn subtyping
also: remove "auto-mode-matching" for implemented interfaces, as it
is complex and interacts poorly with classes

cc #2263
2012-05-30 11:04:12 -07:00
Niko Matsakis
e6b9db0884 refactor region manipulation routines to eliminate duplication
fn subtyping is starting to work, but it's exposing bugs in the
code which checks for iface conformance, which doesn't properly
skolemize the self region
2012-05-30 11:04:12 -07:00
Michael Sullivan
b744f52620 Make heap closures always require a capture clause to capture mutable variables. Closes #2446. 2012-05-30 10:46:22 -07:00
Tim Chevalier
3f3c9caf4d Handle poststates of breaking loops correctly in typestate
The poststate should be one where all predicates are assumed false,
rather than the unchanged prestate.

Closes #2374
2012-05-29 18:22:38 -07:00
Tim Chevalier
8d7765be82 Resolve bounds in iface types
Closes #2311
2012-05-29 16:50:21 -07:00
Niko Matsakis
f90228b8a8 make all arguments modes immutable
note: you can still move from copy/move mode args
2012-05-29 16:22:17 -07:00
Niko Matsakis
47375439ed remove useless invocations of universally_quantify_from_sty() in method lookup 2012-05-29 16:20:54 -07:00
Niko Matsakis
37b78b48e3 modify shape code to only emit monomorphized enums (#2444)
this is hacky, but shape code is going away anyway and I didn't
want to invest too much effort into it
2012-05-29 15:12:36 -07:00
Tim Chevalier
ccc7651b48 In reachability, don't ignore nested items
Reachability was considering nested items to be unreachable, which
was causing the bug in #2383. Once I fixed that, I also had to make
impl::make_impl_vtable instantiate methods where necessary, before
calling monomorphic_fn.

Closes #2383
2012-05-29 14:40:35 -07:00
Michael Sullivan
5d1c29912d Fix an error message to not refer to "block type". Closes #2423. 2012-05-29 12:18:59 -07:00
Eric Holk
aa2efc05ea Adding shared_arc to hide some of the tedium of sharing an arc between tasks.
Also added some asserts and logging to trans.

Modified graph500 to use the shared_arc, but this unfortunately doesn't work due to #2444.
2012-05-29 10:43:19 -07:00
Erick Tryzelaar
68e5d8daa3 Merge pull request #2455 from erickt/master
Fleshing out result methods
2012-05-28 18:27:30 -07:00
Graydon Hoare
e0f0c5c1ab Remove bad Load in make_visit_glue, un-xfail reflect-visit-type.rs. 2012-05-28 13:19:31 -07:00
Erick Tryzelaar
46173e98ef Rename result::{iter,map,map2} to add _vec suffix
The result module doesn't follow the standard iter/map pattern
that we use in the rest of the library. So to
2012-05-28 12:03:25 -07:00
Brian Anderson
432c6cbde9 core: Make range follow the for loop protocol 2012-05-26 02:28:00 -07:00
Lindsey Kuper
e11742de32 More refactoring on a quest to understand region types. 2012-05-25 17:55:55 -07:00
Niko Matsakis
269bc6fb5c fix warning 2012-05-25 17:14:17 -07:00
Niko Matsakis
98740a59da detect ambig. calls to iface bounds, use transactions
cc #2433
2012-05-25 17:04:05 -07:00
Michael Sullivan
93633ea734 Add an internal notion of 'implicit copyability' and use it to warn when implicitly copying mutable data and some unique data. Closes #2448. 2012-05-25 16:53:34 -07:00
Michael Sullivan
8668d06400 Get rid of many implicit copies as a preliminary to Issue #2448. 2012-05-25 16:39:35 -07:00
Michael Sullivan
174f789e0b Add hack to silence the annoying liveness warning in trans/base.rs. 2012-05-25 15:34:09 -07:00
Niko Matsakis
9e6a068034 replace last_use with liveness info 2012-05-25 14:37:30 -07:00
Niko Matsakis
62fe587f81 revisit error message; create spill map 2012-05-25 14:37:30 -07:00
Lindsey Kuper
123c5c4315 typeck: cleanup/refactoring 2012-05-25 11:35:42 -07:00
Lindsey Kuper
f7cb7b06d5 typeck: Minor cleanup 2012-05-25 11:35:42 -07:00
Lindsey Kuper
7e70412711 Some refactoring and WIP on issue #2263. 2012-05-24 16:48:44 -07:00
Lindsey Kuper
ef33c5c9bc Typo fixes in comments. 2012-05-24 16:48:44 -07:00
Eric Holk
8b12892ca2 Convert kinds to strings better for more usable error messages. 2012-05-24 15:06:56 -07:00
Eric Holk
4ffe34cace Updating the comments in kind.rs to better reflect the current state of things. 2012-05-24 15:06:56 -07:00
Eric Holk
8b6bfc96cb Const kind checking. The rules are almost certainly incomplete and unsound... 2012-05-24 15:06:56 -07:00
Eric Holk
d993df74c3 Teach parser and related things to understand const kind bounds. 2012-05-24 15:06:56 -07:00
Niko Matsakis
ccd8d5573e remove dead assignments 2012-05-24 13:35:57 -07:00
Niko Matsakis
f5c51b0a9c remove initedness checking from typestate, as best I could 2012-05-24 09:52:16 -07:00
Niko Matsakis
0d3811e275 improve liveness so it reports unused vars / dead assignments
doesn't warn about pattern bindings yet though
2012-05-24 09:52:16 -07:00
Niko Matsakis
30b47649ea new liveness pass to supercede last_use / initedness 2012-05-24 09:52:03 -07:00
Niko Matsakis
a3be0b1054 fix classes and parameterized ifaces; remove needless self check
ref #1726, #2434
2012-05-24 06:49:40 -07:00
Niko Matsakis
bd573becf5 change region scope of call arguments, old one was unsound
improve error message to describe kind of deref'd ptr using sigil
2012-05-24 05:19:44 -07:00
Niko Matsakis
c9eb9ee612 rewrite purity check to search through scope chain 2012-05-24 05:19:44 -07:00
Eric Holk
5f154770e2 Prevent capturing non-copyable things in closures. 2012-05-23 15:46:43 -07:00
Niko Matsakis
9773a22119 shuffle error messages in borrowck, and prevent it from spewing too many
also, fix a few minor issues it complains about
2012-05-23 12:01:27 -07:00
Eric Holk
8678baab12 Resources are once again not copyable. 2012-05-23 10:27:42 -07:00
Niko Matsakis
e0f59e835e modify borrowck to allow arbitrary borrows in pure scopes 2012-05-23 06:30:29 -07:00
Niko Matsakis
00849191ce refactor loan to not return result<> 2012-05-23 06:30:29 -07:00
Niko Matsakis
01a2e99639 prepare for gather to gather up multiple maps 2012-05-23 06:30:29 -07:00
Brian Anderson
f9d0cde19a syntax: Remove one of the two def_id hashers 2012-05-23 00:45:18 -07:00
Brian Anderson
4756556748 rustc: Move new_def_hash to ast_util 2012-05-23 00:43:02 -07:00
Tim Chevalier
ed357af980 Convert more resource tests to use classes with dtors
And monomorphize dtors correctly.
2012-05-22 22:12:18 -04:00
Brian Anderson
5b4ab93017 rustc: Add cstore to ty::ctxt so csearch can get at it 2012-05-22 18:07:36 -07:00
Brian Anderson
a32392d032 Merge pull request #2427 from msullivan/shifts
Get rid of the >>> operator and make >> logical or arithmetic depending ...
2012-05-22 17:50:04 -07:00
Michael Sullivan
15cef374b9 Get rid of the >>> operator and make >> logical or arithmetic depending on the signedness. Closes #2417. 2012-05-22 14:59:15 -07:00
Eric Holk
0b2f2cabbe Send is no longer a subkind of copy. This allows for sendable, but non-copyable resources. Closes #2420. 2012-05-22 14:10:32 -07:00
Eric Holk
f213c1f3a8 Represent kinds as a bitfield of capabilities. 2012-05-22 12:48:31 -07:00
Michael Sullivan
8d7f3bd1ca Disallow type parameters to self. Closes #2422. 2012-05-22 11:52:22 -07:00
Niko Matsakis
073f90cdc4 introduce some copies so we are not alting into mut state 2012-05-22 05:21:13 -07:00
Brian Anderson
9aa18c2852 rustc: Move ast_map to the syntax crate 2012-05-21 23:39:27 -07:00
Brian Anderson
47bb1185f2 rustc: Move walk_pat to ast_util
This will allow ast_map to move to the syntax crate
2012-05-21 23:22:08 -07:00
Brian Anderson
df532e7f1b rustc: Remove ast_map's session dependency 2012-05-21 23:22:06 -07:00
Brian Anderson
611890013f rustc: Remove unused import 2012-05-21 22:50:10 -07:00
Brian Anderson
85d67723ee rustc: Move path_to_ident to ast_util 2012-05-21 22:41:59 -07:00
Niko Matsakis
2fa5a66310 remove mutable cycle from ast_fold 2012-05-21 20:07:14 -07:00
Niko Matsakis
34b42eeb65 change list so that it must be used in a purely boxed fashion
The old way was inconsistent---the head was unboxed but the
tail was boxed.  This resulted in numerous needless copies and
also made the borrow check unhappy, because the head tended to be
stored in mutable memory.
2012-05-21 09:37:34 -07:00
Niko Matsakis
8e73bb6ea0 detect and report shadows in nested bindings 2012-05-21 09:37:22 -07:00
Niko Matsakis
28d0ce9a8b fix up handling of &x where x is an arg or &self (for now at least). 2012-05-19 10:33:14 -07:00
Niko Matsakis
774ea145ec make more code use dvec 2012-05-18 20:00:51 -07:00
Niko Matsakis
0f969da882 port some code to use dvec 2012-05-18 20:00:50 -07:00
Niko Matsakis
35f6f37453 avoid modifying the variable we are alting over 2012-05-18 20:00:50 -07:00
Niko Matsakis
c9edc0f0a1 introduce a few copies here and there 2012-05-18 20:00:50 -07:00
Niko Matsakis
f9aef928ca purge ufind 2012-05-18 20:00:50 -07:00
Niko Matsakis
44c100c28d try to improve handling of methods 2012-05-18 20:00:50 -07:00
Niko Matsakis
b79d717c91 fix borrowing pats---the id field of cmt was assoc with wrong pat 2012-05-18 19:07:20 -07:00
Niko Matsakis
19ec5a41ed allow region ptrs to be cast to uints 2012-05-18 19:07:19 -07:00
Niko Matsakis
f1a46914c4 add a new debugging aid--tracing 2012-05-18 19:07:19 -07:00
Eric Holk
0eed37da29 Using const vector slices for more vec functions. 2012-05-18 16:55:42 -07:00
Brian Anderson
e546c4820b rustc: Don't copy vecs in seq_preconds. Huge perf win on some tests
Compile time for the included test goes from 5min to 18s.
2012-05-18 15:59:00 -07:00
Niko Matsakis
67ca37ac61 workaround a horribly obscure resolve bug 2012-05-18 14:32:37 -07:00
Niko Matsakis
a559329692 test that we preserve boxes in patterns---still one bug 2012-05-18 14:32:37 -07:00
Brian Anderson
3f283bb168 rustc: Don't recurse in seq_preconds. Consumes too much stack 2012-05-18 14:28:39 -07:00
Niko Matsakis
5be8bf1de7 use -Z to distinguish internal debugging options 2012-05-18 10:38:18 -07:00
Tim Chevalier
cf2fc2c34e Annotate or fix FIXMEs in LLVM bindings and metadata code
Fixed up a few FIXMEs in lib/llvm to use more descriptive data
types. Covered FIXMEs in metadata::{creader, csearch, decoder} and
one in encoder.
2012-05-17 20:39:17 -07:00
Patrick Walton
37abcda42b rustc: Make type_is_pod class-aware 2012-05-17 17:20:58 -07:00
Lindsey Kuper
7f45ba4744 Move inference-related fields/methods from fn_ctxt to infer_ctxt. 2012-05-17 14:34:41 -07:00
Brian Anderson
322b20d14d rustc: Break another dependency between metadata and resolve 2012-05-16 22:28:17 -07:00
Brian Anderson
6a41eb0192 rustc: Break a dependency between metadata and resolve 2012-05-16 21:50:34 -07:00
Graydon Hoare
9752523f3a Include intrinsic module in all crates, emit visit glue, fn intrinsic::visit_ty. Not yet working. 2012-05-16 18:24:00 -07:00
Lindsey Kuper
9f8d2b97d3 Another typo fix. 2012-05-16 12:34:10 -07:00
Lindsey Kuper
76f49e497e Typo fixes. 2012-05-16 12:09:55 -07:00
Niko Matsakis
fa2ac66462 add a large comment on how infer works 2012-05-16 09:42:38 -07:00
Niko Matsakis
558be3a70f pull method lookup / region manip into their own modules 2012-05-16 08:51:16 -07:00
Niko Matsakis
564aa59a3f further reorganization 2012-05-16 08:02:43 -07:00
Niko Matsakis
63210ecddb correct preservation of explicit borrows like "let x = &*y;" 2012-05-16 07:19:19 -07:00
Niko Matsakis
5c8069d817 break out type checking of alts/patterns (again) 2012-05-16 06:57:13 -07:00
Niko Matsakis
da98e14c94 Revert "break out type checking of alts/patterns"
This reverts commit 8d1c1720e3.
2012-05-16 06:38:23 -07:00
Niko Matsakis
8d1c1720e3 break out type checking of alts/patterns 2012-05-16 06:37:53 -07:00
Niko Matsakis
fc8e1cb646 missing import 2012-05-16 06:16:55 -07:00
Niko Matsakis
7512284a94 further modularization of typeck, add comments 2012-05-16 06:06:42 -07:00
Niko Matsakis
9c7b74b025 check if the type of a local variable contains illegal region
also, try to suppress some of the duplicate errors---in general
more work is needed to make these error messages comprehensible
to ordinary humans
2012-05-15 21:20:37 -07:00
Tim Chevalier
8448711534 Add classes and class fields to the tcache
They were being added lazily, which prevented class types from being
used as an argument to a variant.
2012-05-15 20:35:57 -07:00
Tim Chevalier
bdef90730e Clarify a comment
...at least I think this is what was meant.
2012-05-15 20:35:57 -07:00
Tim Chevalier
e2d18c9a8a Remove an assertion from trans::base::iter_structural_ty
I had put in an assertion that if the ty is a class, it doesn't have a dtor,
but that doesn't make sense, since this gets used to make take glue and
not just drop glue.
2012-05-15 20:35:57 -07:00
Niko Matsakis
ab735320b4 move regionck into typeck, in the process fixing a bug or two 2012-05-15 19:05:03 -07:00
Tim Chevalier
fa5cc5bcd0 Generate drop glue correctly for classes with destructors 2012-05-15 18:00:41 -07:00
Patrick Walton
8fe0461f06 Remove the unused pairwise.rs 2012-05-15 15:08:52 -07:00
Niko Matsakis
250bbddb90 move infer into typeck module 2012-05-15 14:06:51 -07:00
Niko Matsakis
26dc48d67f break apart typeck a little (more to come) 2012-05-15 13:38:29 -07:00
Niko Matsakis
adb61e3e99 get preservation of boxes working, at least in simple cases 2012-05-15 13:38:16 -07:00
Niko Matsakis
4c7be32606 add node_ids to blocks 2012-05-15 11:49:11 -07:00
Niko Matsakis
e139793313 purge unused loop_cont field 2012-05-15 11:49:11 -07:00
Niko Matsakis
be48cd87dc make poison-on-free work, disable copying if borrowck is enabled 2012-05-15 11:49:08 -07:00
Lindsey Kuper
b8880e3254 Remove be keyword.
Closes #2227.
2012-05-15 10:41:14 -07:00
Brian Anderson
452fc46ffc rustc: Break some of metadata's dependencies on session 2012-05-14 20:41:33 -07:00
Brian Anderson
0f49928c2d rustc: Break metadata's dependency on link 2012-05-14 19:04:32 -07:00
Brian Anderson
fce6a474b1 rustc: Eliminate metadata's dependency on astencode 2012-05-14 19:04:32 -07:00
Brian Anderson
5c864e9de0 rustc: Eliminate encoder's dependency on astencode 2012-05-14 19:04:32 -07:00
Brian Anderson
32c4b6da5b rustc: Move astencode from metadata to middle 2012-05-14 19:04:31 -07:00
Graydon Hoare
e12b16cde7 Instantiate per-type iface-based visit_glue when intrinsic ifaces present. 2012-05-14 17:57:48 -07:00
Graydon Hoare
d899c3a579 More work on reflection, now calls iface visitors back as well. 2012-05-14 15:49:10 -07:00
Tim Chevalier
5428a22b95 First cut at dtors for classes
Classes with dtors should compile now. Haven't yet tested
whether they actually run correctly.

Beginnings of support for #2295, though that won't be done until
there's more test cases and resources are removed.
2012-05-14 14:26:10 -07:00
Tim Chevalier
89cd2f6bd0 Enforce that self doesn't escape from a class
Closes #2294
2012-05-14 14:26:10 -07:00
Brian Anderson
a2572fe77e rustc: Eliminate metadata's dependency on trans 2012-05-13 17:08:35 -07:00
Niko Matsakis
63eb8e0e87 move purity checking into borrowck, addresses #1422 2012-05-11 14:05:58 -07:00
Graydon Hoare
2585384c97 First working monomorphic type-reflection. 2012-05-11 13:10:07 -07:00
Niko Matsakis
b4d1f1b2c1 replace mutbl pass with borrowck 2012-05-10 21:14:43 -07:00
Graydon Hoare
c23d6a50d7 Preliminary groundwork for intrinsic module, reflection interface. 2012-05-10 17:18:04 -07:00
Paul Stansifer
13c924c049 Remove do { ... } while ... from the language. 2012-05-10 15:09:33 -07:00
Niko Matsakis
50a3dd40ae implement new borrow ck (disabled by default) 2012-05-09 17:00:19 -07:00
Niko Matsakis
5e7229b72c reduce self type to a special type parameter 2012-05-09 07:11:59 -07:00
Marijn Haverbeke
b619954457 Start parsing pub/priv on regular items
Issue #1893
2012-05-08 16:09:40 +02:00
Brian Anderson
b99038c2bf rustc: Put all boxes into addrspace 1 2012-05-07 15:24:32 -07:00
Tim Chevalier
0e43e8ccc8 That awkward moment when you forget to add your final changes
Fixes build breakage.
2012-05-07 15:15:13 -07:00
Tim Chevalier
4f105e4025 In resolve, visit the path in an iface ref
Necessary to resolve any type arguments in a ref to a parameterized
iface. This meant that, for example:

class A implements B<int> { ...

didn't work before, because the "int" in B's argument wasn't getting
visited, and thus wasn't getting resolved. Now it works.

Partially addresses Issue #2288, but I also want to check that class
ty params can appear as the type arguments to ifaces (for example,

class A<T> implements B<T> {...

should work.)
2012-05-07 14:43:31 -07:00
Niko Matsakis
8a9df5aa38 make it illegal to implicitly capture mutable variables
this is the final part of #1273
2012-05-07 13:22:42 -07:00
Niko Matsakis
50ec6bd2c3 new cap clause syntax 2012-05-04 12:33:08 -07:00
Tim Chevalier
8affc78e8a Turn constants in back::abi into uints, and propagate types
This means GEPi now takes a list of uints. Apologies in advance
if this is hard to rebase against, but it gets rid of many a cast :-)

Also modernized some for loops here and there.
2012-05-03 22:31:38 -07:00
Niko Matsakis
a7e0eb3581 allow enums that ref themselves via unsafe pointers 2012-05-03 17:08:18 -07:00
Tim Chevalier
29b807be2a Removed unused import of std::deque 2012-05-03 15:37:02 -07:00
Niko Matsakis
cfa09d35a3 Revert "allow fn exprs to omit arg types"
This reverts commit 1ba4ca4c4a.
2012-05-03 14:42:34 -07:00
Niko Matsakis
1ba4ca4c4a allow fn exprs to omit arg types
also, avoid using type variables for fn args with omitted types
unless necessary.  This will be important for bound regions in
fn types.

fixes #2093
2012-05-03 14:32:32 -07:00
Graydon Hoare
11a5d10bf2 Implement better shape code for evec, estr. 2012-05-03 13:09:02 -07:00
Tim Chevalier
d8f28be753 Check early on in typeck that types being implemented are actually iface types
Closes #2330.
2012-05-03 12:38:45 -07:00
Brian Anderson
74096a79d8 rustc: Fix comment about ABI in trans::native 2012-05-03 12:07:43 -07:00
Brian Anderson
af263e43c2 rustc: Link to original Clay x86 classification code 2012-05-03 11:42:25 -07:00
Jyun-Yan You
bdebe92400 add forgotten index and fix array type 2012-05-03 09:43:00 -07:00
Marijn Haverbeke
d0d71838cd Mention missing constructor when complaining about inexhaustive top-level pattern
It previously, uselessly, only pointed out the constructor when the
inexhaustive pattern was nested in some other pattern.

Closes #2337
2012-05-03 17:35:12 +02:00
Niko Matsakis
f1129635ee report ambig impl methods 2012-05-02 21:47:14 -07:00
Brian Anderson
11354963b3 rustc: Hack around some FFI bustage. Unbreak servo 2012-05-02 18:35:29 -07:00
Graydon Hoare
b12e27595e Error message reformatting, close #2309. 2012-05-02 14:47:33 -07:00
Tim Chevalier
3d4ef74c9b Encode the ifaces a class implements in metadata
This lets you use class A as if it had type B if A implements B,
and A and B are in different crates from your own.

Closes #2285
2012-05-02 13:38:56 -07:00
Graydon Hoare
79ed1f2df4 New lint pass for picking out uses of old-style vecs and str. 2012-05-01 12:58:07 -07:00
Tim Chevalier
46425af8a5 Remove code that was accidentally committed
This was a workaround for the bug that was actually fixed in
164039e867
2012-05-01 08:48:25 -07:00
Tim Chevalier
164039e867 Don't re-export a glob-imported ID when the same ID is defined within
a module

See the test case I added (issue-2316-c) for a concrete example.
issue-2316 also contains the originally reported test case. resolve
was using bitwise or instead of logical or when checking exports,
resulting in excessively eager evaluation. A one-line fix that took
six hours to isolate ;-)
2012-05-01 08:43:17 -07:00
Niko Matsakis
2db4259b35 Stop inferring bot/static when types/regions are unconstrained.
Also, some other changes that came up along the way:
- add a 'blk' region for the current block.
- detect unused type/region variables.
2012-04-30 19:53:02 -07:00
Brian Anderson
0be41ce02b rustc: Remove old align_of intrinsic 2012-04-27 15:40:43 -07:00
Brian Anderson
582c71731d rustc: Clean up some enum code 2012-04-27 11:24:43 -07:00
Brian Anderson
e4277472d2 core: Split sys::align_of into min_align_of, pref_align_of 2012-04-27 00:12:42 -07:00
Brian Anderson
f4f909b8b5 rustc: Add min_align_of, pref_align_of intrinsic, deprecate align_of 2012-04-27 00:12:39 -07:00
Brian Anderson
1c46ee34be rustc: Add llalign_of_min 2012-04-26 21:59:59 -07:00
Brian Anderson
43751e45d9 rustc: Rename llalign_of_real to llalign_of_pref
This alignment is the "preferred" alignment of a type, which is not
necessarily the alignment the compiler will use when packing the
type into structures - that is the "ABI" alignment (in LLVM terms).

On x86, 64-bit ints have 8-byte preferred alignment, but 4-byte
ABI alignment.
2012-04-26 21:44:29 -07:00
Graydon Hoare
1f92538e38 Add check for path-statements, close #400. 2012-04-26 14:43:43 -07:00
Graydon Hoare
33a296f2fc Lowercase warning message. 2012-04-26 14:43:43 -07:00
Niko Matsakis
825fd1808e lots of work to make iface/impls parameterized by regions
- paths can now take region parameters, replacing the dirty hack
  I was doing before of abusing vstores.  vstores are now a bit
  of a hack though.

- fix various small bugs:
  - we never checked that iface types were compatible when casting
    to an iface with `as`
  - we allowed nonsense like int<int>
  - and more! (actually that may be it)
2012-04-25 19:26:56 -07:00
Graydon Hoare
458d2ff067 Be a bit more cautious about marking things no-throw. 2012-04-25 18:53:54 -07:00
Graydon Hoare
90c1b4645f Set no-unwind on glue functions that don't drop resources. 2012-04-25 17:19:36 -07:00
Graydon Hoare
fa6c68a025 Set no-unwind attribute on all upcalls other than fail. 2012-04-25 17:19:36 -07:00
Brian Anderson
3a3a7fc426 rustc: Cache normalized types 2012-04-25 15:49:27 -07:00
Brian Anderson
df0ef528b9 rustc: Use LLVM named structs for enum types 2012-04-25 15:49:25 -07:00
Marijn Haverbeke
10120cce0f typeck: Take more care to pass down expected types
This helps with prototype inference and avoids some 'must be known
in this context' errors.
2012-04-25 17:45:29 +02:00
Marijn Haverbeke
9f99c3263b Rewrite exhaustiveness checker
Issue #2111
2012-04-25 09:15:17 +02:00
Brian Anderson
5a0c564817 Revert "rustc: Use LLVM named structs for enum types"
This reverts commit 6e909e387d.
2012-04-24 20:47:06 -07:00
Brian Anderson
b88ecec08c Revert "rustc: Cache normalized types"
This reverts commit 06afe21c03.
2012-04-24 20:47:00 -07:00
Brian Anderson
06afe21c03 rustc: Cache normalized types 2012-04-24 18:24:35 -07:00
Brian Anderson
6e909e387d rustc: Use LLVM named structs for enum types 2012-04-24 18:24:35 -07:00
Graydon Hoare
929c3dd710 Workarounds for bug #2280: add some temporaries for borrowing. 2012-04-24 15:19:01 -07:00
Brian Anderson
e7dbf42214 rustc: Fix type_need_unwind_cleanup. Closes #2272 2012-04-24 14:55:16 -07:00
Brian Anderson
5437a045fc rustc: Remove a bitcast. Issue #2276 2012-04-24 14:00:50 -07:00
Tim Chevalier
f7641286b2 Allow classes to be cast to ifaces that are in the same crate
I had to xfail one existing test case (class-implements-int) because,
I think, of the same bug described in #2272.
2012-04-23 21:15:03 -07:00
Tim Chevalier
1c39fda0ea Rename option::get_or_default to get_default, for consistency 2012-04-23 20:52:50 -07:00
Tim Chevalier
7d05bea7b9 Fix bug with * patterns in trans_alt
enter_opt was handling the (*) case wrong and causing a bounds check
    failure. Fixed it (the test case is one of the extracted ones from
    the reference manual)
2012-04-23 15:50:51 -07:00
Niko Matsakis
71128e75b0 moderate comment, remove some dead regions code 2012-04-23 08:02:59 -07:00
Niko Matsakis
7113a2c30b remove dead code 2012-04-23 08:02:59 -07:00
Niko Matsakis
4eb71c07c6 remove outdated comment 2012-04-23 08:02:59 -07:00
Niko Matsakis
30d563839e Various regions fixes. 2012-04-23 08:02:59 -07:00
Niko Matsakis
0d3658bb43 rewrite the resolution infrastructure; but it's still grody 2012-04-23 08:02:58 -07:00
Marijn Haverbeke
68f8812511 Guard against infinitely expanding generic/inline functions
Closes #2220

Test case disabled until a memory-leak issue is resolved.
2012-04-23 16:44:52 +02:00
Marijn Haverbeke
2782cfb783 Emit a more useful error when using an unsuitable function for a loop
Closes #2255
2012-04-23 15:43:29 +02:00
Marijn Haverbeke
9053f54498 Move map iface over to more for-friendly iteration methods 2012-04-23 15:18:19 +02:00
Marijn Haverbeke
a872a99bfe Simplify representation of ast::path 2012-04-23 13:04:46 +02:00
Marijn Haverbeke
587d8a5d4f Misc code cleanups using list::each for list iteration 2012-04-23 12:13:59 +02:00
Marijn Haverbeke
dfdca5d538 Fix broken determination of external method type param count
Closes #2185
2012-04-23 09:25:14 +02:00
Brian Anderson
734494a04d rustc: Cache constant C strings. Closes #2264 2012-04-21 14:26:13 -07:00
Tim Chevalier
734166f41c Print out return type correctly in typestate error message
In the "not all paths return" error message, typestate was printing
the AST type from the fn decl, not the ty::t type. This ended in tears
when the AST return type was "ty_infer". Now it looks up the function node
ID's type and uses util::ppaux::ty_to_str instead.

Closes #2163.
2012-04-20 18:48:08 -07:00
Graydon Hoare
90f82e171d Get borrowing working on fixed evecs. 2012-04-20 12:11:55 -07:00
Tim Chevalier
37b0549730 Add new syntax for patterns that match the head constructor only
Adds a new kind of pattern C(*) where C is a constructor that may
have any number of fields. This pattern matches any value
constructed with C, without binding names for any of the fields.

Closes #1701.
2012-04-20 00:56:46 -07:00
Niko Matsakis
3c995fb8f3 make nominal types optionally parameterized by a self region.
Issue #2201.
2012-04-19 21:01:11 -07:00
Niko Matsakis
f3f34bf09b correct universally_quantify to use structure_of, and introduce a test for this 2012-04-19 21:01:11 -07:00
Tim Chevalier
31ff64c62d Annotate FIXMEs in parser
Also, get rid of two FIXMEs by refactoring some code, and moving the
call_expr check for be expressions into typeck, where it seems to
make more sense.
2012-04-19 19:17:59 -07:00
Tim Chevalier
cdc8722f95 Add a lint pass to check for while true { ... } loops
And suggest changing them to loop { ... }. Had to fix the few
remaining while true loops (in core::io). Closes #1962.
2012-04-19 18:14:38 -07:00
Graydon Hoare
f641dce852 Get evec slices and unique-evec slice-borrowing working. 2012-04-19 16:51:37 -07:00
Tim Chevalier
b0074c5a92 Disallow rebinding / matching against consts in alts
As per Issue #1193. Closes #1193.

I had to rename a few variables ("info" and "epsilon") to avoid
clashing with in-scope constants, which is responsible for all the
changes other than resolve and issue-1193.rs.
2012-04-19 16:21:15 -07:00
Graydon Hoare
1e51196f33 Get fixed-size evecs working. 2012-04-19 15:52:50 -07:00
Graydon Hoare
956bc773c6 Fix [] on str to exclude the trailing null. 2012-04-18 17:50:58 -07:00
Marijn Haverbeke
aa4278a3f5 Require values to be copyable when cast
Closes #2222
2012-04-18 17:21:39 +02:00
Marijn Haverbeke
fda7bb6721 Fix oversight in type_use.rs
Closes #2053
2012-04-18 17:21:39 +02:00
Marijn Haverbeke
054a312a33 Stop duplicating non-generic resource destructors
Closes #2177
2012-04-18 17:21:39 +02:00
Marijn Haverbeke
a0fa099469 Add a needs_drop intrinsic
Closes #2055
2012-04-18 13:15:02 +02:00
Marijn Haverbeke
35b8f87b89 Fix use of wrong block context in return-from-loop code
Closes #2142
2012-04-18 13:00:18 +02:00
Graydon Hoare
70a9ce626d Implement slice-borrowing on estr-uniq and str values. 2012-04-17 15:15:20 -07:00
Niko Matsakis
4c26d70a0a new debug flag, new test 2012-04-17 12:02:36 -07:00
Niko Matsakis
6b549f9f14 repair LUB/GLB of free/scope regions, and enable test 2012-04-17 12:02:36 -07:00
Niko Matsakis
35a93e61d4 rewrite region resolution so it takes place in typeck 2012-04-16 19:48:00 -07:00
Graydon Hoare
82727b926f Get explicit unique estrs working. 2012-04-16 16:17:51 -07:00
Brian Anderson
4f576275be syntax: Cleanup attr module. Closes #1545 2012-04-15 01:43:38 -07:00
Tim Chevalier
4f4a468e84 Forbid deinitializing upvars in typestate
Closes #1965.
2012-04-15 01:05:41 -07:00
Niko Matsakis
cc16165e40 implement evec/estr subtyping/lub/glb/etc 2012-04-14 18:48:58 -07:00
Niko Matsakis
247db704a9 integrate simple notion of borrowing into trans 2012-04-13 21:06:57 -07:00
Niko Matsakis
378996092e store into the borrowings table 2012-04-13 21:06:57 -07:00
Niko Matsakis
b3f308bec5 add initial code re: slices to borrowing, improve ty_to_str 2012-04-13 21:06:56 -07:00
Niko Matsakis
27f1c2b742 first stab at type checking for borrow: not integrated into trans 2012-04-13 10:41:46 -07:00
Tim Chevalier
1adc26d5e7 Annotate FIXMEs in syntax::ast and syntax::ast_util
The main non-comment change was to change simple_path to path,
as per a FIXME in ast.
2012-04-13 01:46:56 -07:00
Brian Anderson
79e572ebbb rustc: Fix handling of - and _ in lint pass 2012-04-12 18:11:23 -07:00
Graydon Hoare
8a7fd4a04f Support general warnings and errors in lint pass via flags and attrs. Close #1543. 2012-04-12 17:31:49 -07:00
Brian Anderson
891dc84be2 rustc: Long lines 2012-04-11 21:32:05 -07:00
Brian Anderson
e7409859ce rustc: Fix typo in error message 2012-04-11 21:25:32 -07:00
Niko Matsakis
e712ad8f73 rewrite lookup_method(), lookup_method_inner(), and lookup_method_inner_() 2012-04-11 17:21:53 -07:00
Niko Matsakis
3e6943d820 refactor fixup_self 2012-04-11 17:21:53 -07:00
Niko Matsakis
c1c60c023e first attempt at an assignability check 2012-04-11 17:21:53 -07:00
Niko Matsakis
8967c4b409 simplify demand module 2012-04-11 17:21:53 -07:00
Tim Chevalier
5c12cd72f4 Allow classes to implement ifaces
Introduce syntax like:

iface animal { ... }
class cat implements animal { ... }

to allow classes to implement ifaces. Casting classes to ifaces
is *not* yet supported. ifaces that a class implements are not
yet included in metadata.

The syntax is subject to change, and may go away completely if we
decide to use duck typing to relate classes with ifaces (see
http://smallcultfollowing.com/babysteps/blog/2012/04/10/declared-vs-duckish-typing/ )
2012-04-11 16:20:01 -07:00
Graydon Hoare
f34eae8802 Translate slice-strings and make fixed-strings carry their null. 2012-04-11 12:07:19 -07:00
Graydon Hoare
c720ffdbc4 Improve region code surrounding slice types. 2012-04-11 12:07:19 -07:00
Graydon Hoare
7a3b290245 Add vstore/evec/estr to compiler. 2012-04-11 11:08:40 -07:00
Tim Chevalier
fd26743bed Generic classes and generic class methods work cross-crate
Classes can have ty params now. So can methods inside classes.
That was probably true before, but now it should still work if you
call methods in a class that's defined in a different crate. Yay!
2012-04-10 11:01:36 -07:00
Niko Matsakis
24e921f7d4 make anything used in a resource body always reachable
(they appear to be uncond. inlined)

Fixes #2170.
2012-04-09 16:36:59 -07:00
Haitao Li
46e4aaa0be rustc: External fns declared as fns not global variables
Issue #2167
2012-04-09 14:38:53 +08:00
Haitao Li
460b92a37f rustc: Declare rust_start as a function
Issue #2167
2012-04-09 12:02:16 +08:00
Brian Anderson
19b7a7d803 Revert "Mangle exported names using node IDs rather than types"
This reverts commit c83d61de93.
2012-04-07 17:29:06 -07:00
Niko Matsakis
1e42c9a367 Do not consider ty_bot to be a "resolved type".
Fixes #2149. Fixes #2150. Fixes #2151.
2012-04-07 17:12:48 -07:00
Niko Matsakis
5300662b4e Refactor inference so that subtyping/lub/glb share more code 2012-04-07 07:25:41 -07:00
Haitao Li
2f42b14b4f Use version and hash in crate_map name
Related issue #2137
2012-04-07 22:11:23 +08:00
Tim Chevalier
9d274ec5f2 Re-rename option functions
get_with_default (nee from_maybe) => get_default
with_option (nee maybe) => map_default
with_option_do (nee may) => iter

As per discussion of 21be1379d5
2012-04-06 12:20:13 -07:00
Marijn Haverbeke
fc202ca034 Remove support for old-style for
Closes #1619
2012-04-06 20:38:23 +02:00
Marijn Haverbeke
c902eafa14 Convert old-style for loops to new-style
Most could use the each method, but because of the hack used to
disambiguate old- and new-style loops, some had to use vec::each.

(This hack will go away soon.)

Issue #1619
2012-04-06 20:38:23 +02:00
Niko Matsakis
0255bf30ea continue refactoring to remove commutativity assumption
and introduce more indirection where it may be needed
2012-04-06 10:35:44 -07:00
Niko Matsakis
586b072eef Make tps invariant for now. Fixes #1973. 2012-04-06 08:31:12 -07:00
Niko Matsakis
9de288c35f further refactoring away from commutativity 2012-04-06 08:10:07 -07:00
Niko Matsakis
4856eab844 refactor to make combine less inherently commutative 2012-04-06 08:03:59 -07:00
Niko Matsakis
2c56ba7e43 improve error messages 2012-04-06 06:59:00 -07:00
Niko Matsakis
051f24da25 add static region and also fix regions to be contravariant 2012-04-05 21:16:28 -07:00
Tim Chevalier
c83d61de93 Mangle exported names using node IDs rather than types
Use node IDs rather than types to ensure exported names are unique.
duplicate symbol. Closes #2074.
2012-04-05 18:22:53 -07:00
Niko Matsakis
b91c9f803d simplify typing rule for vector addition: use mutability of LHS 2012-04-05 15:18:26 -07:00
Tim Chevalier
5a3875e998 Print "expected a record with field..." fields in the right order
Because terr_record_mismatch was getting called by infer::flds,
which takes types a and b where it's trying to prove a <: b, the
expected and actual fields were switched. Fixed it. Closes #2094
2012-04-05 15:16:12 -07:00
Niko Matsakis
c0d61795de wip: refactor repr of regions
- we now distinguish bound/free parameters (see region-param
  test case for why this is necessary)
- we also track bounds on region variables
- also, restructure fold_ty() to have multiple variants without
  duplication instead of one overloaded folder.  This also allows
  for using block functions.
2012-04-04 19:41:23 -07:00
Niko Matsakis
1956d11f84 refactor to condense common usage pattern 2012-04-04 19:17:06 -07:00
Graydon Hoare
ab4105d9e8 Make nonconstructable enums noncopyable, close #1907. 2012-04-04 19:07:52 -07:00
Brian Anderson
9aa7241f05 rustc: Don't allow recursive constants 2012-04-04 16:12:57 -07:00
Brian Anderson
38ed2ea096 rustc: Allow consts to refer to other consts 2012-04-04 15:03:39 -07:00
Erick Tryzelaar
2ad20df40b std: Rename result::methods to result::extensions 2012-04-03 22:43:09 -07:00
Erick Tryzelaar
4871f11439 std: change timeval to ns resolution timespec
This lets us use the more precise clock_gettime on posix
machines.
2012-04-03 22:43:08 -07:00
Erick Tryzelaar
7aae7320db std: change time::timeval to be {sec: i64, usec: i32}.
It's possible to have negative times if expressing time before 1970, so
we should use signed types. Other platforms can return times at a higher
resolution, so we should use 64 bits.
2012-04-03 22:43:08 -07:00
Tim Chevalier
1f892dcb01 Monomorphize class constructors, support generic classes and class methods
Allow class methods to have type parameters (this is a change from the
original classes proposal).

Add test cases for classes with type parameters, and classes with methods
that have their own type parameters.
2012-04-03 16:23:50 -07:00
Marijn Haverbeke
f65e26eeee Output type sizes in reinterpret_cast error message
Closes #2095
2012-04-03 16:37:54 +02:00
Marijn Haverbeke
90d3f0fb5e Ensure method names in iface and impl items are unique
Closes #2114
2012-04-03 16:37:28 +02:00