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
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
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
0e87039348
rustc: Remove the rustsyntax::attr wrapper in front
2012-03-29 14:42:31 -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
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
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
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
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
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
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
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
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
Jyun-Yan You
d3712a287d
make native and crust functions conform to x86-64 ABI
2012-03-20 11:59:24 -07: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
Graydon Hoare
869b2d7064
Send string concatenation to specialized upcall, shave 17s off librustc compile time.
2012-03-19 14:29:39 -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
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
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
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
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
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
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
Brian Anderson
2a293ed8b8
Convert *u8 native string users to *c_char
2012-03-14 18:20:14 -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
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
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
Niko Matsakis
7c70d35a10
rewrite unify in a modal style, extend result module
2012-03-13 21:53:14 -04:00
Niko Matsakis
d91742294f
first (functional) version of the auto_serialize syntax ext
2012-03-13 21:30:07 -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
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
7b938d8903
rustc: Add region def ids to the AST
2012-03-09 15:55:13 -08:00