Commit Graph

685 Commits

Author SHA1 Message Date
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
Brian Anderson
9a8a04629e syntax: Put the main parser interface in mod parse 2012-04-18 10:50:50 -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
58f8cb343d change printout to be what users will expect 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
dea8ae4e6f rustc: Resolve external impls defined in yet other crates. Issue #2196 2012-04-16 14:58:58 -07:00
Brian Anderson
f466a2fa8f rustc: -L also indicates the location of native libraries
-L currently specifies paths to search for Rust crates

Building crates that use native libraries is difficult. When the
library is located somewhere unexpected there is no way
to tell rustc additional paths to look in.

If libclang is located at `.` then rustc is not going to
know that and linking will fail.

To get around that I often end up inserting

    #[link_args = "-L."] native mod m { }

into other crates to get them to build.

Now you just `rustc -L .` and it builds.

This doesn't do any rpathing so it's still up to somebody else
to put the library somewhere it will be found or use LD_LIBRARY_PATH

This feature comes with a single, XFAILed test, because I could
not think of a way to test it. Odd.
2012-04-16 12:33:21 -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
Brian Anderson
979a225598 rustc: Don't hardcode -lm
It does not appear to serve a purpose
2012-04-13 22:35:01 -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
d2482fd763 use find not echo; this also brings fuzzer under the iron fist of tidy.py! 2012-04-13 11:59:17 -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
9d7e4aefee Add enough tyencode stuff to stop faulting when we hit error messages. 2012-04-11 11:08:40 -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
Brian Anderson
a1d59704ed rustc: Add more creader logging 2012-04-09 15:06:38 -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
Haitao Li
7d227f21f7 Check metadata hash when loading transitive dependent crates
Fix issue #2138
2012-04-08 21:19:15 +08:00
Haitao Li
18597b22b5 Remove a FIXME note about closed issue #1001 2012-04-08 18:24:32 +08:00
Brian Anderson
a6e748a1d9 rustc: Hash the CMH into symbol names 2012-04-07 17:50:49 -07:00
Brian Anderson
d9070b4751 rustc: Append the crate version to symbols 2012-04-07 17:39:55 -07: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
Haitao Li
7aaa120bcc Check version when resolving transitive dependent crates
Issue #2138
2012-04-08 02:05:09 +08:00
Haitao Li
5aa5220f8a Encode crate dependencies' hash and version data 2012-04-08 02:00:58 +08: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
Haitao Li
13686b6778 Use real crate name in crate_map name
`use` statement may introduce an crate name alias. This patch always
uses the link attrbute "name" as the crate's name when building the
crate map.

Closes #1706
2012-04-07 22:08:54 +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
Brian Anderson
5dd1677b0a rustc: Warn when linking to multiple versions of the same crate
This is not something most people want to be doing and may
be a source of error.
2012-04-06 10:58:03 -07:00
Brian Anderson
de3528846f rustc: Fail when there are multiple matches for 'use' 2012-04-06 10:58:03 -07: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
Niko Matsakis
f1afb0b3e2 utilities for indented logs 2012-04-05 21:16:28 -07:00
Brian Anderson
2577bd9df3 rustc: Don't assume that all crates with the same name are the same 2012-04-05 20:53:16 -07:00
Brian Anderson
d13c0c77a2 Explicitly use version 0.2 of crates 2012-04-05 20:29:42 -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
Graydon Hoare
28a0e9c999 Construct new strings through upcalls. 2012-04-02 17:38:06 -07:00
Tim Chevalier
21be1379d5 Rename some core::option functions
from_maybe => get_with_default
maybe => with_option
may => with_option_do

I know these names are kind of ridiculous, but it's the best I could think of.
Feel free to bikeshed. Closes #2081
2012-04-02 16:12:49 -07:00
Graydon Hoare
987bc23629 Remove redundant **tydesc gepi/load pair in call_tydesc_glue_full. 2012-04-02 15:26:12 -07:00
Jonathan Sternberg
3a0477c398 Fixing issue 1919. list_dir is the more general version that returns a vector with the contents of the directory. list_dir_path contains the old behavior (as a convenience function). 2012-04-01 11:39:17 -04:00
Brian Anderson
0904f25507 rustc: Convert some error logs to debug 2012-03-30 17:31:40 -07:00
Marijn Haverbeke
a4906b81f7 Change a span_err back to span_fatal
Closes #2073
2012-03-30 08:25:45 +02:00
Niko Matsakis
35a3fa0999 add some comments explaining how the tables work 2012-03-29 19:41:09 -07:00
Niko Matsakis
2b45da8a33 refactor to store the types during inference in tables in the fcx
this is a step towards separating out the repr. of
types during inference from the repr. in later stages.
2012-03-29 19:41:09 -07:00
Niko Matsakis
f682b99e36 generate correct constraints for assignments 2012-03-29 19:41:09 -07:00
Niko Matsakis
76d0a13ae5 resolve type variables with no constraints to bot 2012-03-29 19:41:09 -07:00
Brian Anderson
ad26b00696 rustc: Generate fewer landing pads 2012-03-29 16:43:18 -07:00
Brian Anderson
7f9ed39040 rustc: Only invoke when there are cleanups 2012-03-29 16:43:18 -07:00
Brian Anderson
8780db2e0b rustc: Delete some unused invoke code 2012-03-29 16:43:18 -07:00
Brian Anderson
b420f46f03 rustc: Don't generate landing pad cleanups for boxy things 2012-03-29 16:43:18 -07:00
Brian Anderson
106c9faa59 rustc: Move ext to librustsyntax 2012-03-29 14:42:31 -07:00
Brian Anderson
0e87039348 rustc: Remove the rustsyntax::attr wrapper in front 2012-03-29 14:42:31 -07:00
Brian Anderson
ba69a738c7 rustc: Cleanup 2012-03-29 14:42:31 -07:00
Brian Anderson
442d0a783a rustc: Move attr, parse, print to rustsyntax 2012-03-29 14:42:31 -07:00
Brian Anderson
15947f8b19 rustc: Move lexer and token to rustsyntax 2012-03-29 14:42:30 -07:00
Brian Anderson
ce216a5533 rustc: Remove the session dependency from front::attr 2012-03-29 14:42:30 -07:00
Brian Anderson
cb2840bcaf rustc: Add an accessor to get the diagnostic handler from the session 2012-03-29 14:42:30 -07:00
Brian Anderson
8f809f89d9 rustc: Move diagnostic to rustsyntax 2012-03-29 14:42:30 -07:00
Brian Anderson
5c25e78b27 rustc: Move fold to rustsyntax 2012-03-29 14:42:30 -07:00
Brian Anderson
454df53464 rustc: Move interner to rustsyntax 2012-03-29 14:42:30 -07:00
Brian Anderson
9e299f53f4 rustc: Move ast, ast_util, visit to rustsyntax 2012-03-29 14:42:30 -07:00
Brian Anderson
140151f3f9 rustc: Move codemap to rustsyntax 2012-03-29 14:42:30 -07:00
Brian Anderson
a0ed1fb20b build: Introduce rustsyntax crate 2012-03-29 14:42:30 -07:00
Tim Chevalier
c7082ce8e8 Require "self" as base expression for intra-class method or field references
All field or method references within a class must begin with "self." now.
A bare reference to a field or method in the same class will no longer
typecheck.
2012-03-29 12:22:01 -07:00
Patrick Walton
2663018792 rustc: Fix an infinite loop during size calculations for recursive region pointer types 2012-03-29 08:41:25 -07:00
Tim Chevalier
f7bbe537c1 Allow explicit self-calls within classes
Allow writing self.f() within a class that has a method f. In a future
commit, this syntax will be required. For now, you can write either
self.f() or f().

I added a "privacy" field to all methods (whether class methods or not),
which allowed me to refactor the AST somewhat (getting rid of the
class_item type; now there's just class_member).
2012-03-28 20:30:07 -07:00
Niko Matsakis
fe610f04d8 use fresh vars in place of _|_ when incorrect # of params supplied 2012-03-28 17:02:54 -07:00
Niko Matsakis
23f92ea370 Detect and report types which could never be instantiated.
Fixes #2063.
2012-03-28 17:02:54 -07:00
Patrick Walton
3c398d28a4 rustc: Universally quantify regions when calling functions. Un-XFAIL regions-addr-of-ret.rs. 2012-03-28 14:24:18 -07:00
Tim Chevalier
ca6636d6b6 Allow references to "self" within classes
Allow writing self.f within a class that has a field f. Currently,
the compiler accepts either self.f or f. In a future commit I'll
require writing self.f and not f.

Not sure whether self.f() works if f is a method (making sure that
works next).
2012-03-28 14:19:00 -07:00
Graydon Hoare
b37d7e26fe Update crate URLs to point to interesting things. 2012-03-28 13:52:47 -07:00
Marijn Haverbeke
90cf9e0d6f Make sure type_use.rs doesn't get lost in recursive enums
Closes #2059
2012-03-28 10:35:16 +02:00
Tim Chevalier
edb747ceed Enforce mutability declarations in classes; correct shapes for classes
1. Enforce mutability declarations on class fields. Don't allow any
mutation of class fields not declared as mutable (except inside the
constructor).

2. Handle classes correctly in shape (treat classes like records).
2012-03-27 22:11:58 -07:00
Niko Matsakis
c9102ee7a1 make type_kind exhaustive, add an entry for type_self (in particular) 2012-03-27 15:44:36 -07:00
Brian Anderson
ba3292d3be rust: Remove extensions' dependency on the session 2012-03-27 14:16:46 -07:00
Marijn Haverbeke
73d6df32cd Emergency safe-ref-checker maintenance
It still has some big problems, but at least it more or less
understands block arguments now.

Closes #1925
2012-03-27 17:22:57 +02:00
Marijn Haverbeke
b5a4fa9456 Move some code over to iterator-for to see how it performs. 2012-03-27 15:46:33 +02:00
Marijn Haverbeke
064f82d68d Support returning from loop blocks
The code is somewhat invasive, but it seems hard to do this in a
clean way, since the design itself involves a bunch of 'action
at a distance'.

Issue #1819
2012-03-27 12:33:13 +02:00
Marijn Haverbeke
f6e3738b9c Support an alternate for syntax that calls a higher-order function
The last argument of the call must be a block, and the type of this
argument must a function returning bool. `break` and `cont` are
supported in the body of the block, and return `false` or `true` from
the function. When the end of the function is reached, `true` is
implicitly returned.

    for vec::all([1, 2, 3]) {|elt|
        if elt == 2 { break; }
        log(error, elt);
    }

Issue #1619
2012-03-27 09:27:31 +02:00
Graydon Hoare
6e6798c4e1 Bulk-edit mutable -> mut. 2012-03-26 18:35:18 -07:00
Brian Anderson
45a709766c rustc: Begin eliminating ext's dependency on the session 2012-03-26 17:16:26 -07:00
Brian Anderson
a477aaba08 rustc: Move eval_const_expr to its own mod 2012-03-26 17:16:26 -07:00
Patrick Walton
b7a741b5d0 rustc: Combine and unify regions 2012-03-26 15:07:15 -07:00
Patrick Walton
03086c5304 rustc: "unkown" -> "unknown" 2012-03-26 12:53:06 -07:00
Patrick Walton
b86c603bdf rustc: Fix typo in infer 2012-03-26 12:52:31 -07:00
Patrick Walton
d877ebdd05 rustc: Remove obsolete FIXME in infer 2012-03-26 12:49:14 -07:00
Patrick Walton
407be52036 rustc: Generalize resolve_var to work with regions too 2012-03-26 12:42:38 -07:00
Tim Chevalier
11610f9ca1 In typeck, don't call ty::store_iface_methods on private methods
This was resulting in a different error message depending on whether
the private method you were trying to call was in the same crate
or a different one.
2012-03-26 10:46:37 -07:00
Niko Matsakis
21111660ca Improve type inference to compute LUB/GLB 2012-03-26 10:34:58 -07:00
Tim Chevalier
c282810ab0 Enforce privacy declarations for class fields and methods 2012-03-26 10:00:33 -07:00
Marijn Haverbeke
b89a5af2ab Check in a forgotten new file 2012-03-26 12:54:06 +02:00
Marijn Haverbeke
87e097a853 Disallow ret inside of block functions
Also adds proper checking for cont/break being inside a loop.

Closes #1854
Issue #1619
2012-03-26 12:45:47 +02:00
Marijn Haverbeke
e4c141a331 Fix bug in generation of non-generic resource dtors
Issue #1944
2012-03-26 11:31:17 +02:00
Niko Matsakis
763142816e repair the build---also, make try/commit work over both ty/region vars 2012-03-25 13:32:13 -07:00
Patrick Walton
8462c6c831 rustc: Generalize several parts of infer in preparation for using them for region bounds as well 2012-03-24 23:14:45 -07:00
Niko Matsakis
bf9d714d46 Avoid unifying vars when possible; handle bot (more) correctly 2012-03-24 21:38:43 -07:00
Patrick Walton
bd6e6e349b rustc: Stub some region resolution stuff in infer 2012-03-24 21:30:57 -07:00
Patrick Walton
7c27ec72d1 rustc: Add some simple region checking (no region vars yet)
Amazingly, this causes no test cases to fail!
2012-03-24 18:44:05 -07:00
Niko Matsakis
3e385a80d4 prune unused unification code; leave region code that still needs to be ported 2012-03-24 09:22:09 -07:00
Tim Chevalier
aae14e352a Allow methods to call other methods in the same class 2012-03-23 23:10:45 -07:00
Niko Matsakis
6b84cee5d3 add a few measly comments, remove some dead code 2012-03-23 22:36:37 -07:00
Niko Matsakis
f5edb5ee18 xfail-test regions tests 2012-03-23 22:06:39 -07:00
Niko Matsakis
042c532a08 Implement new inference algorithm. 2012-03-23 21:47:28 -07:00
Tim Chevalier
40443768b1 Fix breakage 2012-03-23 20:53:38 -07:00
Tim Chevalier
8bbd78075f Handle self correctly when translating classes
This change uses the same code for handling the "self" reference for
classes as is already used for impls/ifaces. This allows removing the
extra maybe_self_id argument (which was just for classes) to trans_closure
that I added before. I also rewrote the translation for class ctors so
that it doesn't generate new AST nodes (instead translating directly).

Also changed visit so that it visits class ctors correctly with visit_fn,
and changed typestate to not do return-checking when visiting a class ctor.
2012-03-23 20:37:50 -07:00
Patrick Walton
713b3585c6 rustc: Remove // */ sequence from trans/base.rs; it breaks vi syntax highlighting 2012-03-23 18:21:23 -07:00
Patrick Walton
0eae490669 rustc: Stub a table of borrowings 2012-03-23 17:28:24 -07:00
Patrick Walton
c56910fc9a rustc: Make region folding not descend into function types
Since region parameters are always universally quantified at the function
level, this would be incorrect.
2012-03-23 17:06:24 -07:00
Patrick Walton
cba007e6c8 rustc: Fix parsing of ret &EXPR
The parser didn't think that `&` could start an expression.
2012-03-23 16:15:58 -07:00
Patrick Walton
7931a61ebb rustc: Redo region inference to be a bit less broken 2012-03-23 12:22:58 -07:00
Marijn Haverbeke
84019aa0dc Keep an explicit map of things that have to be spilled
This prevents us from spilling locals more than once.

Closes #2040
2012-03-23 16:08:01 +01:00
Marijn Haverbeke
1b81c5112a Remove last vestiges of old-style intrinsics
Closes #2048
2012-03-23 16:08:01 +01:00
Marijn Haverbeke
a84b56bc70 Remove more needless context threading in trans 2012-03-23 14:45:47 +01:00
Marijn Haverbeke
5cfbbbc9ed Revert resolve kludge that was working around #2049 2012-03-23 13:32:00 +01:00
Marijn Haverbeke
683085b3f0 Stop trying to link intrinsics.bc 2012-03-23 12:57:37 +01:00
Marijn Haverbeke
ca71e01bce Interpret native mods with ABI rust-intrinsic as builtins 2012-03-23 12:52:53 +01:00
Marijn Haverbeke
52d618a99a Revert removal of intrinsics
Oops. We can't do this yet until the next snapshot.
2012-03-23 12:51:20 +01:00
Marijn Haverbeke
c704d5a5d3 Clean up some confused shuffling of def_ids in resolve.rs 2012-03-23 12:38:36 +01:00
Marijn Haverbeke
562afef216 Rename builtin back to intrinsic
As per Graydon's request

Issue #1981
2012-03-23 12:21:56 +01:00
Marijn Haverbeke
f5024692d4 Remove support for the old-style intrinsics
Closes #2042
Closes #1981
2012-03-23 12:21:55 +01:00
Marijn Haverbeke
6374ffc5f3 Kludge in resolve to be able to land builtins
Something strange is happening to hash maps. I'm still investigating but
want to get my snapshot built in the meantime. (Problem only happened on
OS X.)
2012-03-23 11:09:19 +01:00
Marijn Haverbeke
cdb93d70a1 Fix bug in function-instance reuse
You can't safely reuse functions that pass a T by move, since they might
zero it out, which will not end well when it doesn't know its precise
size.
2012-03-23 10:49:47 +01:00
Marijn Haverbeke
16ca6e8d7f Change vector append to no longer rely on an intrinsic
Issue #1981
2012-03-23 10:49:47 +01:00
Marijn Haverbeke
0545e4a920 Support [rust_stack] annotation on native functions (crudely) 2012-03-23 10:49:47 +01:00
Marijn Haverbeke
ea2e379e4f Implement built-in native modules as an alternative to intrinsics
Issue #1981
2012-03-23 10:49:47 +01:00
Tim Chevalier
73a0c17d77 Make cross-crate calls to class methods work 2012-03-22 20:32:47 -07:00
Brian Anderson
f3fe85dad7 Bump version numbers to 0.2 2012-03-22 15:25:02 -07:00
Graydon Hoare
b224bcf6e1 Add an LLVM-instruction-counting mode to trans.
Pipe to xdu to see a trans call graph of generated insns.
2012-03-22 13:44:20 -07:00
Niko Matsakis
dc07280b08 make --enforce-mut-vars always on, add mut annotations to remaining files 2012-03-22 09:58:19 -07:00
Niko Matsakis
b653a18416 add mut decls to rustc and make them mandatory 2012-03-21 21:04:14 -07:00
Patrick Walton
44bd8da7fd rustc: Use the right "nxt" function in unify_regions 2012-03-21 16:13:34 -07:00
Brian Anderson
75ee4633eb rustc: Long lines 2012-03-21 16:10:39 -07:00
Josh Matthews
5835a4cc8e Merge remote-tracking branch 'mozilla/master' 2012-03-21 19:01:04 -04:00
Patrick Walton
b0f6dad5e3 rustc: Add a function to record region bindings 2012-03-21 15:59:57 -07:00
Josh Matthews
8142438938 Avoid mangling names differently in debug builds to work around a build error. Fix up file name and path debug information, and build one compilation unit for a crate instead of one per source file. 2012-03-21 18:56:36 -04:00
Patrick Walton
c8ab0c1b3b rustc: Replace region parameters in function return values 2012-03-21 15:22:12 -07:00
Patrick Walton
324f57a180 rustc: Check call and bind expressions using a set of region bindings 2012-03-21 14:47:57 -07:00
Patrick Walton
bdf968c9d9 rustc: Add a version of demand that takes in a set of region variable bindings 2012-03-21 14:15:43 -07:00
Tim Chevalier
30c272cb3a methods work
Cross-crate method calls don't work yet. Added
run-pass/class-method-cross-crate to test that, but it's xfailed

References to fields within methods don't work yet. Added
run-pass/class-methods to test that, but it's also xfailed
2012-03-21 13:53:21 -07:00
Patrick Walton
3e47442471 rustc: Add region unification functions 2012-03-21 13:28:50 -07:00
Patrick Walton
68e364b54d rustc: Introduce re_params into the typechecker
This is the first step of the region refactoring I need to do in order to handle named regions properly.
2012-03-21 12:21:53 -07:00
Marijn Haverbeke
9502fb99e0 Fix bug in vtable resolution 2012-03-21 15:57:23 +01:00
Niko Matsakis
cfcbec3cc3 Implement an initial version of placement new. 2012-03-20 20:39:40 -07:00
Patrick Walton
ba39e277e2 stdlib: Implement arenas 2012-03-20 19:08:17 -07:00
Patrick Walton
237cd4455c rustc: Fix a few more instances of node ID stomping, due to AST folding incorrectly passing stuff through unchanged 2012-03-20 18:37:09 -07:00
Patrick Walton
86ebde575c rustc: Make the quasiquote operator stop reusing nodes (and therefore stop reusing node IDs). Should fix issue #1947 for real. 2012-03-20 17:23:46 -07:00
Tim Chevalier
b06dc884e5 Class methods WIP
In particular, use the ast::method type to represent a class method,
and try to reuse as much iface code as possible. (This makes sense now
since I'll be allowing polymorphic class methods.)
2012-03-20 17:07:07 -07:00
Brian Anderson
b181ea415e core: Rename unsafe::leak to unsafe::forget. Closes #2031 2012-03-20 15:20:37 -07:00
Graydon Hoare
56828d49fd Remove unused "flav" parameter from function registration paths. 2012-03-20 15:16:12 -07:00
Graydon Hoare
d282481c12 Fix naughty mangling-breakage from stringifying a node ID. Close #1344. 2012-03-20 15:16:12 -07:00
Graydon Hoare
8e911cbd65 Work on fixing name mangling. 2012-03-20 15:16:12 -07:00
Brian Anderson
f3ed738399 rustdoc: Run the entire resolve pass 2012-03-20 14:54:40 -07:00
Graydon Hoare
b994b17be8 Remove object file directly rather than running "rm". Close #1778 also. 2012-03-20 12:39:40 -07:00
Jyun-Yan You
d3712a287d make native and crust functions conform to x86-64 ABI 2012-03-20 11:59:24 -07:00
Marijn Haverbeke
1a20f8e7cc rustc: Be more careful about spans in 'unexpected token' errors
Closes #2017
2012-03-20 15:05:14 +01:00
Marijn Haverbeke
7a34ac5890 Revert order of arguments to option::maybe and from_maybe
Closes #2019
2012-03-20 14:55:07 +01:00
Marijn Haverbeke
1547c27926 Fix caching bug in resolve, get rid of enumness kludge
Closes #1911
2012-03-20 14:33:04 +01:00
Marijn Haverbeke
928364b98b Only make symbols external when they are actually externally accessible
Closes #2030
2012-03-20 13:19:33 +01:00
Marijn Haverbeke
ade1207ba3 Move external-reachability checker to trans
Preparation for a fix for issue #2020
2012-03-20 12:28:46 +01:00
Patrick Walton
bf13fb7921 rustc: Fix handling of the self region in method return types. Also stub some code to allow the regions of simple field access expressions to be determined. 2012-03-19 18:52:18 -07:00
Patrick Walton
b12588a197 rustc: Fix mutability checking when dereferencing a region-annotated pointer 2012-03-19 17:28:00 -07:00
Brian Anderson
20417ebf31 core: Move unsafe conversions to str::unsafe 2012-03-19 15:47:52 -07:00
Graydon Hoare
869b2d7064 Send string concatenation to specialized upcall, shave 17s off librustc compile time. 2012-03-19 14:29:39 -07:00
Brian Anderson
bbfa08d947 rustc: Stop generating the flag_none #fmt flag. Issue #1993 2012-03-19 14:28:42 -07:00
Marijn Haverbeke
cec1a9b859 Properly check kinds when instantiating types
Closes #2011
2012-03-19 10:45:29 +01:00
Brian Anderson
13bcc73625 core: Rename vec::position_elt to position_elem 2012-03-18 17:40:49 -07:00
Damien Grassart
38ac87f0ff rustc: Fix typo in error message 2012-03-18 04:45:03 +01:00
Tim Chevalier
e3a1c5c96a Encode both private and public class fields in metadata
This is necessary to calculate the correct offsets for field references.

Simple cross-crate class tests (still with fields only) now pass.
2012-03-16 20:36:07 -07:00
Tim Chevalier
16dd6c4756 Fix encoding of class ctors
Class tests still fail at runtime
2012-03-16 19:20:36 -07:00
Josh Matthews
d958123d8a Don't break -g in the presence of monomorphization. 2012-03-16 20:19:52 -04:00
Brian Anderson
154a3fdf44 rustc: Unify impl self types in the opposite order so variance is correct 2012-03-16 17:06:15 -07:00
Tim Chevalier
1680ccce1e Classes WIP
Cross-crate metadata for classes works well enough that programs with
classes in other crates compile successfully, but output wrong results.
Checking in work so far to avoid merge hassles. (Tests are xfailed.)
2012-03-16 15:28:05 -07:00
Brian Anderson
47d468f08c core: Store reexporting result and either. Closes #1997 2012-03-16 15:14:37 -07:00
Niko Matsakis
e399ddbf17 allow binding of fn~, make result fn@. fixes 1899. 2012-03-16 17:48:53 -04:00
Patrick Walton
f6a792585b rustc: Give a better error message when references involving the caller region fail to unify 2012-03-16 14:02:02 -07:00
Marijn Haverbeke
35fc4a4291 Check kind bounds when calling methods
Closes #1915
2012-03-16 17:05:29 +01:00
Marijn Haverbeke
25c2be0ff4 Forbid boxed ifaces with self types or generic methods in bounded params
They are a soundness hole.

Closes #1994
2012-03-16 15:39:07 +01:00
Marijn Haverbeke
22bef74b55 Remove shared tydescs
All tydescs are static now, there's no need to worry about
marshalling them between threads anymore.
2012-03-16 15:38:42 +01:00
Marijn Haverbeke
15a325f267 Support binding of methods off boxed iface values
Closes #435
2012-03-16 12:58:26 +01:00
Patrick Walton
e464e2ba56 rustc: Describe why regions failed to unify as part of the type error message 2012-03-15 19:19:32 -07:00
Patrick Walton
4ea3b0b89c rustc: Fix the AST map to actually map blocks. Also improve region error messages involving blocks. 2012-03-15 19:06:38 -07:00
Patrick Walton
e0edcfc21c rustc: Index blocks 2012-03-15 18:46:57 -07:00
Tim Chevalier
e3222e9905 Improve error message for passing mutable argument by reference 2012-03-15 17:50:22 -07:00
Patrick Walton
95ce42b346 rustc: Instantiate self regions in impls 2012-03-15 17:14:02 -07:00
Patrick Walton
0095e6d85b rustc: Have the typechecker pick up the resolved self region 2012-03-15 16:48:53 -07:00
Marijn Haverbeke
146b61189a Get rid of rust_crate_cache in the runtime
We are no longer generating dynamic tydescs or dicts.

Issue #1982
2012-03-16 00:44:06 +01:00
Patrick Walton
bc21a5ddbe rustc: Create self region bindings, and forbid the self region from being used in places it shouldn't be 2012-03-15 16:38:08 -07:00
Niko Matsakis
d365ec5c7d kill old serialization code 2012-03-15 18:30:10 -04:00
Niko Matsakis
3dca3393fa switch over to using new serialize/deserialize code 2012-03-15 18:30:08 -04:00
Brian Anderson
5e8004d493 std: Follow conventions in bitv 2012-03-15 14:08:47 -07:00
Marijn Haverbeke
337d860a87 Make last-use finder treat referenced function arguments properly
Closes #1964
2012-03-15 17:04:35 +01:00
Marijn Haverbeke
1745ac9c61 Remove tests from astencode.rs
They mysteriously fail on Windows, and Niko assures me this code is about
be replaced anyway.
2012-03-15 15:44:19 +01:00
Marijn Haverbeke
2e3f1096bb Fix bug in vtable builder
Closes #1947 , which I completely misdiagnosed.
2012-03-15 15:08:31 +01:00
Marijn Haverbeke
24ed441a05 Reuse monomorphized functions more aggressively
Adds a trans::type_use pass that, given a function body, detects how
dependant that function is on properties of its type parameters.
2012-03-15 15:08:31 +01:00
Marijn Haverbeke
3ab9978b9b Remove support for dynamically-sized types from translation code 2012-03-15 15:08:31 +01:00
Marijn Haverbeke
a4d75a4ed1 Remove GEP_tup_like 2012-03-15 15:08:31 +01:00
Marijn Haverbeke
c3a93ecd3f Remove dynastack code from compiler 2012-03-15 15:08:30 +01:00
Marijn Haverbeke
bc8a43a776 Remove lltyparams field in trans::common::fn_ctxt 2012-03-15 15:08:30 +01:00
Marijn Haverbeke
332329f161 Don't pass an undef retptr to generic intrinsics
It leads to segfaults
2012-03-15 10:22:46 +01:00
Marijn Haverbeke
b6ad34bef4 Properly recognize external intrinsics 2012-03-15 10:22:46 +01:00
Marijn Haverbeke
e4cbd43c43 Huge kludge to get intrinsics' type parameters passed 2012-03-15 09:41:21 +01:00
Marijn Haverbeke
9aa78e34e4 Never pass tydesc to functions
My assumption that native generics needed them was wrong, so tydescs
can be eliminated from function signatures completely.
2012-03-15 09:40:52 +01:00
Marijn Haverbeke
47f35c9d34 Properly replace iface tps with impl tps in static method calls
Un-xfail iface-generic.rs
2012-03-15 09:32:53 +01:00
Marijn Haverbeke
fe90c189f4 Only write metadata for items that actually appear in the root AST
Not for imported ASTs from inlined items.
2012-03-15 09:32:53 +01:00
Marijn Haverbeke
2c8c50d6cb Make sure enum and resource constructors are inlined properly 2012-03-15 09:32:53 +01:00
Marijn Haverbeke
4650e8bcf4 Make sure resource destructors are properly monomorphized 2012-03-15 09:32:53 +01:00
Marijn Haverbeke
8f84d4c8b6 Remove a large part of the tydesc-passing code 2012-03-15 09:31:34 +01:00
Marijn Haverbeke
83c9f58534 Rename dict to vtable throughout the compiler
The difference went away.
2012-03-15 09:28:50 +01:00
Marijn Haverbeke
4511f936b1 Hugely simplify iface handling
With the assumption of monomorphization
2012-03-15 09:26:54 +01:00
Marijn Haverbeke
168398bb3d Stop generating generic versions of generic functions
Monomorphic instances are generated on demand.
2012-03-15 09:00:21 +01:00
Marijn Haverbeke
47e65403b7 Disallow calling generic methods through a boxed iface 2012-03-15 08:59:29 +01:00
Marijn Haverbeke
5e647d799e Fix assumption that monomorphized method's impls are crate-local 2012-03-15 08:59:29 +01:00
Marijn Haverbeke
75e6fb4feb Fix monomorphization of resource constructors 2012-03-15 08:59:29 +01:00
Marijn Haverbeke
0e5da379dd Turn on monomorphization by default 2012-03-15 08:59:29 +01:00
Marijn Haverbeke
c67679ea03 Write out the AST for all externally-reachable generics 2012-03-15 08:59:29 +01:00
Brian Anderson
2a293ed8b8 Convert *u8 native string users to *c_char 2012-03-14 18:20:14 -07:00
Brian Anderson
3a2df84d89 core: Rename str::from_cstr et. al to from_buf 2012-03-14 18:19:08 -07:00
Brian Anderson
9e480708a2 core:: Eliminate str::sbuf. Replace with *u8 2012-03-14 18:19:08 -07:00
Brian Anderson
3864d6d845 std: Rename the hashmap constructors to conform to new standards
Instead of using the new_ prefix just name them after their type
2012-03-14 18:19:08 -07:00
Patrick Walton
383a801993 rustc: Universally quantify regions when looking up typeclass implementations 2012-03-14 18:17:40 -07:00
Niko Matsakis
a3d2882ffd fixup auto_serialize's treatment of nullary variants 2012-03-14 21:05:06 -04:00
Niko Matsakis
e702d20191 allow immut vars to be moved. enforce mut vars after stage0 in std. 2012-03-14 20:46:36 -04:00
Patrick Walton
273c5e5f11 rustc: Lift the @ from the type definition of crate_ctxt into its uses
This will make it easier to convert crate_ctxt into a region pointer, since
there are functions that return crate contexts. There would be no way to type
these functions if crate_ctxt had to be an inferred region pointer.
2012-03-14 17:31:16 -07:00
Patrick Walton
1e0e089185 rustc: Fix a couple of bugs that prevented taking addresses of rvalues 2012-03-14 16:50:20 -07:00
Patrick Walton
fd9c9ac912 rustc: Make region dereference no longer require an unsafe block 2012-03-14 16:17:45 -07:00
Patrick Walton
0cd72d24dc rustc: Autoderef through region pointers 2012-03-14 16:13:05 -07:00
Patrick Walton
45d0b5f0b9 rustc: Reword field/method-not-found error message to mention the possibility that a field wasn't found 2012-03-14 16:02:59 -07:00
Patrick Walton
1ed768bc3b rustc: Determine the region of pointer dereference expressions 2012-03-14 15:13:04 -07:00
Niko Matsakis
1600be2c3b fix auto_serialize for enums with type parameters 2012-03-14 17:19:33 -04:00
Patrick Walton
715d1995d7 rustc: Make the self region work properly in enums 2012-03-14 14:05:57 -07:00
Patrick Walton
3a45f87620 rustc: Record the parent blocks of locals 2012-03-14 11:41:50 -07:00
Marijn Haverbeke
de79caa97e Add crude support for casts in constant expressions
Only casts to integral and float types are supported

Closes #1975
2012-03-14 18:05:28 +01:00
Marijn Haverbeke
c988800cf5 Properly walk pat_lit and pat_range in visit.rs
Issue #1975
2012-03-14 18:04:31 +01:00
Niko Matsakis
ffa187db25 adjust auto_serialize to generate fns named serialize_T()
We used to generate a module T with a serialize() and deserialize() fn,
but this was suboptimal for a number of reasons:

- it required moving serialization into core so that uint etc worked
- it was harder to override the serialization behavior locally
  (this is now trivial)
2012-03-14 11:49:28 -04:00
Niko Matsakis
7c70d35a10 rewrite unify in a modal style, extend result module 2012-03-13 21:53:14 -04:00
Niko Matsakis
b30cb8e43a implement deserialization, rename mk_mem_buffer() to mem_buffer() 2012-03-13 21:30:07 -04:00
Niko Matsakis
d91742294f first (functional) version of the auto_serialize syntax ext 2012-03-13 21:30:07 -04:00
Niko Matsakis
06c8acdd31 fixup serialize_variant 2012-03-13 21:30:07 -04:00
Niko Matsakis
bdd0c9387b get new decorator extensions working 2012-03-13 21:30:06 -04:00
Patrick Walton
c3516f091b rustc: Allow the addresses of rvalues to be taken 2012-03-13 18:24:14 -07:00
Patrick Walton
fc50abe6c5 rustc: Instantiate "caller" regions when calling functions 2012-03-13 17:31:34 -07:00
Brian Anderson
aeb445b2ea rustc: Don't make the while loop body's basic block a child of the condition
As a child of the condition, when the body encounters a ret or break it
incorrectly re-runs the cleanups of the condition.
2012-03-13 17:27:17 -07:00
Patrick Walton
b87cdd8572 rustc: Infer regions of variant arguments to the caller region 2012-03-13 16:16:27 -07:00
Patrick Walton
8cbaebbb49 rustc: Get reference typedefs working 2012-03-13 15:53:16 -07:00
Brian Anderson
b968c8e6cd Name types after their modules instead of 't' 2012-03-13 15:14:17 -07:00
Patrick Walton
a38ccf1254 rustc: Thread the use site around in ast_ty_to_ty 2012-03-13 14:41:18 -07:00
Patrick Walton
0837a6ba04 rustc: Don't cache ast_ty_to_ty results for types that have references 2012-03-13 14:13:13 -07:00
Patrick Walton
107767731a rustc: Use only ast_ty_to_ty for region inference 2012-03-13 12:01:34 -07:00
Patrick Walton
014dd547a0 rustc: Use the inferred region as the self region in ast_ty_to_ty as well 2012-03-13 11:34:48 -07:00
Patrick Walton
ec340c8f40 rustc: Look up inferred regions in ast_ty_to_ty 2012-03-13 11:26:55 -07:00
Brian Anderson
cd72b1f848 Overhaul constructor naming in libs 2012-03-13 11:07:22 -07:00
Patrick Walton
aea8736129 rustc: Fix long line 2012-03-13 11:04:02 -07:00
Patrick Walton
07b4c80c68 rustc: Record what & would resolve to for every AST type 2012-03-13 10:44:37 -07:00
Marijn Haverbeke
e54cde5215 Use type size/alignment of target, rather than host, in debuginfo 2012-03-13 16:20:31 +01:00
Marijn Haverbeke
463cf837eb rustc: Teach trans::alt.rs about exhaustive alts
Closes #1971
2012-03-13 16:20:31 +01:00
Kevin Atkinson
15985277b9 Fix Issue #1926 by sorting the gather list. 2012-03-13 07:40:41 -04:00
Graydon Hoare
6f5853f5a1 Libc/os/run/rand/io reorganization. Close #1373. Close #1638.
- Move io, run and rand to core.
 - Remove incorrect ctypes module (use libc).
 - Remove os-specific modules for os and fs.
 - Split fs between core::path and core::os.
2012-03-12 20:08:29 -07:00
Patrick Walton
ac57bb3856 rustc: Word a comment more clearly in region.rs 2012-03-12 18:56:13 -07:00
Patrick Walton
afa046a56b rustc: Use linked lists instead of hash tables for region binding scopes
Hash tables are overkill.
2012-03-12 18:47:18 -07:00
Patrick Walton
4571175568 stdlib: Make list::find do what the docs say it does.
Talked on #rust about this change, got approval from graydon and brson. Will bring up tomorrow at meeting to verify.
2012-03-12 18:28:16 -07:00
Patrick Walton
dd610a151b rustc: Add node IDs to AST types so we can associate them with region environments 2012-03-12 17:34:37 -07:00
Patrick Walton
59a56ad043 Revert "rustc: Add node IDs to AST types so we can associate them with region environments"
This reverts commit 96e1bbd4a0.
2012-03-12 16:33:55 -07:00
Patrick Walton
96e1bbd4a0 rustc: Add node IDs to AST types so we can associate them with region environments 2012-03-12 16:28:15 -07:00
Patrick Walton
db77c38fc9 rustc: Use the name map to resolve region names 2012-03-12 13:58:08 -07:00
Patrick Walton
864ff4707e rustc: Map region names to their functions. Also speed up region checking by 17x. 2012-03-12 13:25:10 -07:00
Patrick Walton
47bfd4f4e9 rustc: Refactor regions to handle nested functions properly and fix the subtyping relation 2012-03-12 12:43:47 -07:00
Tim Chevalier
664d71f1f0 Improve a typechecker error message (wrong type for main())
As per #1903, state what type is expected for main().

Closes #1903
2012-03-11 20:55:19 -07:00
Patrick Walton
46aec2c960 rustc: Record the parent function of each function 2012-03-11 17:02:16 -07:00
Patrick Walton
cb1efb0092 rustc: Fix long lines 2012-03-11 16:18:52 -07:00
Patrick Walton
8f9afec5a3 rustc: Turn on errors for region checking 2012-03-11 13:29:23 -07:00
Patrick Walton
3e8bb22af1 rustc: Unify regions in most cases. (Nested functions aren't properly handled yet.) 2012-03-11 13:28:43 -07:00
Patrick Walton
f7efc29b38 rustc: Determine regions for locals 2012-03-11 12:36:56 -07:00
Patrick Walton
e968672ac7 rustc: Map local variables to their containing blocks so we know their regions 2012-03-11 12:05:17 -07:00
Tim Chevalier
8ab075ee45 Clean up occurs check code and give non-breaking loop {..}s _|_ type
The latter change is so that code dominated by a loop{ } without a
break gets considered unreachable.

The former change is just cosmetic (occurs_check_fails was a predicate
when it should be a unit-typed function that can fail).
2012-03-10 20:35:41 -08:00
Tim Chevalier
205cefdc6e In typestate, consider infinite loops w/ conts to be infinite
If a loop { } contains a cont, that doesn't affect whether the entire
loop diverges. Only breaks affect that. Fix that in typestate.
2012-03-10 20:34:57 -08:00
Tim Chevalier
35400e13ad Use loop instead of while(true) in libraries and compiler itself
And remove spurious fails/unreachable() calls.
2012-03-10 20:34:17 -08:00
Tim Chevalier
98260a2a22 Handle infinite-loop poststate correctly in typestate
If control passes an infinite loop (that doesn't have non-local
exits), then everything is true.
2012-03-10 20:15:27 -08:00
Brian Anderson
91e5a1c8b3 core: Remove the nearly empty math module
This mod only had two functions, all of whose users have been changed
to use the uint module.
2012-03-10 17:43:19 -08:00
Brian Anderson
e4bb2d707f core: Rename vec::tail_n to vec::tailn to match other fns 2012-03-10 00:44:13 -08:00
Tim Chevalier
a0521971b1 Merge branch 'master' into floop-for-snapshot 2012-03-09 22:16:52 -08:00
Patrick Walton
e8c7b5347d rustc: Add a region checking pass
Errors aren't reported yet, because the regions aren't properly inferred from the & operator at the moment and that would break the tests.
2012-03-09 17:39:32 -08:00
Tim Chevalier
321fd80219 Add an infinite loop construct
Add a loop {} construct for infinite loops, and use it in test
cases. See #1906 for details.
2012-03-09 16:40:58 -08:00
Patrick Walton
4ffcb95974 rustc: Perform region inference 2012-03-09 16:40:37 -08:00
Patrick Walton
b7d3874349 rustc: Wrap regions in a node ID 2012-03-09 16:10:11 -08:00
Patrick Walton
7b938d8903 rustc: Add region def ids to the AST 2012-03-09 15:55:13 -08:00
Patrick Walton
e2f6052c6d Revert "rustc: Create def IDs for region parameters"
This reverts commit 0d4cb75949.
2012-03-09 14:40:36 -08:00
Patrick Walton
0d4cb75949 rustc: Create def IDs for region parameters 2012-03-09 14:06:43 -08:00
Patrick Walton
2975bcdd7d rustc: Stub a to-string implementation for region types
Not too useful without region resolution yet, but there it is.
2012-03-08 18:24:17 -08:00
Patrick Walton
92ed73d0bd rustc: Add pretty printing support for the address-of operator. Un-XFAIL-pretty simple-regions.rs. 2012-03-08 18:10:07 -08:00
Patrick Walton
8ce6b0dd21 rustc: Add appropriate type predicates for references. Simple uses of references/region pointers now work. 2012-03-08 17:22:43 -08:00
Patrick Walton
71799cff2b rustc: Actually write the type back 2012-03-08 16:44:33 -08:00
Patrick Walton
ddeaea2287 rustc: Change the address-of operator to an explicit production so that we can parse the mutability 2012-03-08 16:34:36 -08:00
Patrick Walton
0722786664 rustc: Add some missing cases in various folds for reference types and some broken trans code for the address-of operator 2012-03-08 15:55:28 -08:00
Tim Chevalier
0c5fdc8745 Rename last to last_opt, last_unsafe to last
As per discussion on IRC. I am about to file an RFC for further
discussion about the more general issue of whether to enforce
invariants through types, typestate, or dynamic checks, but for now,
removing the misleading name "last_unsafe".
2012-03-08 15:25:56 -08:00
Patrick Walton
8047c0cd68 rustc: Typecheck dereference operations on safe references.
They require unsafe blocks for now. This will be removed once they typecheck properly.
2012-03-08 15:08:26 -08:00
Patrick Walton
fcde161f4f rustc: Stub typechecking for the address-of operator 2012-03-08 14:55:51 -08:00
Tim Chevalier
d048a00cf3 Change util::unreachable to core::unreachable
Closes #1931
2012-03-08 14:30:01 -08:00
Patrick Walton
0824d1501b rustc: Add ty_rptr support to the visitor 2012-03-08 14:23:22 -08:00