2667 Commits

Author SHA1 Message Date
Marijn Haverbeke
d6996c0210 Fix bug where resolve didn't descend method ty params
Closes #1700
2012-01-29 19:46:36 +01:00
Josh Matthews
a831e7ce13 Merge remote-tracking branch 'mozilla/master' 2012-01-28 11:50:48 -05:00
Josh Matthews
fcb381410d Disable lexical block and function debug info caches to improve compilation time while #1694 is unfixed, and fix stack-exhaustion bug in block parent generation. 2012-01-28 11:50:26 -05:00
Brian Anderson
53dbde6cc2 rustc: Make 'attempted access of field' error non-fatal 2012-01-27 16:58:27 -08:00
Brian Anderson
3321880f13 Merge remote-tracking branch 'killerswan/fixing_strings_2'
Conflicts:
	src/comp/driver/driver.rs
	src/comp/middle/trans/base.rs
	src/comp/syntax/parse/lexer.rs
2012-01-27 16:44:40 -08:00
Marijn Haverbeke
e48bf6f3f4 Make occurs check in ty::fixup_vars more reliable
It wouldn't detect cycles that went through several type vars before.

Closes #1464
2012-01-27 18:58:52 +01:00
Marijn Haverbeke
362625008a Allow moving out of mutable unsafe pointers
This makes it possible to de-initialize values anywhere in
memory, which is needed, for example, for a fast imlementation
of vec::pop.
2012-01-27 17:15:40 +01:00
Marijn Haverbeke
dc55c06aa3 Properly check enum types for recursion
Closes #742
2012-01-27 16:03:43 +01:00
Marijn Haverbeke
03e9dac09a Move various trans_ modules under a trans:: umbrella module
Closes #1304
2012-01-27 13:20:36 +01:00
Marijn Haverbeke
b3f06c7d54 Stop passing spans to middle::trans functions that don't need them
Removes a bunch of (eventually) unused arguments. Makes span passing to debuginfo
explicit, instead of relying on the (usually incorrect) spans held in the contexts.

Closes #1439
2012-01-27 13:20:36 +01:00
Marijn Haverbeke
b80f0a3c9f Use the method name 'unary-' for overloading negation
It's less likely to clash with something than 'neg'.

Issue #1520
2012-01-27 10:06:53 +01:00
Marijn Haverbeke
c590bdeea4 Make re-exporting of impls work
Closes #1438
2012-01-26 18:58:35 +01:00
Marijn Haverbeke
6bead0e4cc Use operator names for operator methods
The methods used to implement operators now simply use
the name of the operator itself, except for unary -, which is called
min to not clash with binary -. Index is called [].

Closes #1520
2012-01-26 15:52:28 +01:00
Marijn Haverbeke
305b1c8701 Fix small bug in iface self types
Issue #1661
2012-01-26 15:24:52 +01:00
Marijn Haverbeke
888262b337 Allow operator overloading of the indexing operator
The method `op_index` (which takes a single argument) is used for
this.

Issue #1520
2012-01-26 15:23:11 +01:00
Marijn Haverbeke
87b064b249 First stab at operator overloading
When no built-in interpretation is found for one of the operators
mentioned below, the typechecker will try to turn it into a method
call with the name written next to it. For binary operators, the
method will be called on the LHS with the RHS as only parameter.

Binary:

    +   op_add
    -   op_sub
    *   op_mul
    /   op_div
    %   op_rem
    &   op_and
    |   op_or
    ^   op_xor
    <<  op_shift_left
    >>  op_shift_right
    >>> op_ashift_right

Unary:

    -   op_neg
    !   op_not

Overloading of the indexing ([]) operator isn't finished yet.

Issue #1520
2012-01-26 14:25:06 +01:00
Marijn Haverbeke
ec4d05de3b Remove ty_native_fn
It was being used as a clumsy synonym of ty_fn.
2012-01-26 10:37:50 +01:00
Kevin Cantu
4d7c297bea (FIX) Change encoder::encode_metadata to return a [u8] (which will become an LLVM string) 2012-01-25 22:27:29 -08:00
Marijn Haverbeke
2d4d8e8bdb Implement implicit self type parameters for ifaces
Closes #1661
2012-01-25 20:47:11 +01:00
Marijn Haverbeke
76aabbe99d Rename tag to enum throughout the compiler
This should reduce confusion of people trying to read the code.
2012-01-25 14:34:31 +01:00
Kevin Cantu
eaa4befd6d Replacing str::unsafe_from_bytes with str::from_bytes (part 3) 2012-01-25 01:07:05 -08:00
Niko Matsakis
5e13d19cc0 s/block()/fn()/g 2012-01-23 19:06:33 -08:00
Tim Chevalier
6db688e893 Check that the names mentioned in tag exports are actually types (or variants)
Check that in export foo{}, foo is an enum type, and that in export
foo{bar, quux}, foo is an enum type and bar and quux are variants belonging
to foo.
2012-01-23 15:48:08 -08:00
Tim Chevalier
9dc59e1506 Export all enum variants by default; new syntax for selectively exporting variants
See issue 1426 for details. Now, the semantics of "export t;" where t is a tag are
to export all of t's variants as well. "export t{};" exports t but not its
variants, while "export t{a, b, c};" exports only variants a, b, c of t.

To do:
- documentation
- there's currently no checking that a, b, c are actually variants of t in the
 above example
- there's also no checking that t is an enum type, in the second two examples above
- change the modules listed in issue 1426 that should have the old export
semantics to use the t{} syntax

I deleted the test export-no-tag-variants since we're doing the opposite now,
and other tests cover the same behavior.
2012-01-23 15:48:08 -08:00
Niko Matsakis
556947c47a wrap line 2012-01-21 19:31:52 -08:00
Niko Matsakis
85a3298229 unify size_of, align_of into one call (metrics)
create some new (xfail'd) tests looking at tag variant alignment
2012-01-21 19:31:52 -08:00
Niko Matsakis
cd1056df78 migrate size_of() and related funcs from trans into shape 2012-01-21 19:31:51 -08:00
Graham Fawcett
7763b40c71 issue #1352: change param order on vec::init_elt, putting block in final position.
To match the init_fn() and init_fn_mut() changes.
2012-01-21 13:33:16 -08:00
Graham Fawcett
35d12be2ce fix #1352: change param order on vec::init_fn (and vec::init_fn_mut), putting block in final position. 2012-01-21 13:31:12 -08:00
Haitao Li
2a59ab8fa5 rustc: Specify lint checks via crate attributes
A crate attribute like `#[lint(no_ctypes)]` can now be used to turn off
ctypes checking.

Issue #1543
2012-01-22 01:33:37 +08:00
Haitao Li
635e8200e1 rustc: Always resolve reexported names from original def
Issue #1501
2012-01-21 18:03:09 +08:00
Tim Chevalier
e36df0f6c8 Handle fail after return correctly in typestate
Previously, typestate would conclude that this function was
correctly diverging:

fn f() -> ! { ret; fail; }

even though it always returns to the caller. It wasn't handling the
i_diverge and i_return bits correctly in the fail case. Fixed it.

Closes #897
2012-01-20 17:26:31 -08:00
Tim Chevalier
d242edb57b Handle predicates that recurse in a check() expression
typestate was using the enclosing function ID for the "this function
returns" constraint, which meant confusion and panic in the case
where a predicate p includes "check p()". Fixed it to use a fresh
ID.

Closes #933
2012-01-19 22:53:22 -08:00
Graydon Hoare
7b1a8f0a91 Additional ; to , changes, disable "tag" and ";" in parser. Close #1430. Close #1428. 2012-01-19 19:29:21 -08:00
Patrick Walton
c267821742 rustc: ";" to "," in enums 2012-01-19 18:04:25 -08:00
Patrick Walton
7a663032fb rustc: Remove trailing whitespace 2012-01-19 17:49:23 -08:00
Tim Chevalier
c7592803d9 Compute typestates for FRU exprs correctly, plus a bit of cleanup
The code in Issue 948 was causing typestate to diverge because
it was using the prestate for the whole expression -- not the post-
state for the fields list -- as the prestate for the record base
expression. Fixed.

Closes #948
2012-01-19 17:24:27 -08:00
Tim Chevalier
94d2063577 Handle log expressions with a _|_-typed level
If we have log(foo, quux) where foo:_|_, just translate foo and
ignore the rest of the expression.

Closes #1459
2012-01-19 14:44:40 -08:00
Patrick Walton
daaeac56b1 rustc: Fix long lines 2012-01-19 14:34:23 -08:00
Patrick Walton
bdb8f6cf52 rustc: "tag" -> "enum" 2012-01-19 14:24:03 -08:00
Tim Chevalier
3e25444e51 In trans, allow _|_-typed things to be the argument to fail
Rationale: _|_-typed things diverge, so it's safe to use them in
any context.

Closes #1465
2012-01-19 13:30:31 -08:00
Niko Matsakis
1f0b3d2247 treat fn*() as fn&()
This is not my ideal way of going about things.  I'd prefer not
to have expressions typed as fn*(), for example, but I couldn't
get that to work together with inferring the modes of arguments
and other corner cases.
2012-01-19 07:10:59 -08:00
Haitao Li
d699db699a rustc: Refactor lint check and avoid a segv fault
The segv fault issue is #1566
2012-01-19 20:31:43 +08:00
Haitao Li
7ffb2cb7e8 rustc: Name the lint-style check module lint
Issue #1543
2012-01-19 17:54:38 +08:00
Haitao Li
327a15d58c rustc: Add a usage pass to collect one-off analyses
This patch starts from move the analysis which checkes of probably
incorrectly usage of `int|uint` in native fn.

Issue #1543
2012-01-19 17:27:44 +08:00
Tim Chevalier
5b028f527f Remove support for the '.' after a nullary tag in a pattern
(Commit also includes lots of changes to remove '.'s that a git
merge messed up, or else it was monkeys.)
2012-01-19 01:04:59 -08:00
Tim Chevalier
04a2887f87 Remove '.' after nullary tags in patterns
Does what it says on the tin.

The next commit will remove support for this syntax.
2012-01-18 23:17:34 -08:00
Niko Matsakis
54f6bf57e6 remove align_mode and rewrite GEP_tup_like to align correctly
Although the old version of GEP_tup_like was incorrect in some
cases, I do not believe we ever used it in an incorrect fashion.
In particular, it could go wrong with extended index sequences
like [0, 1, 3], but as near as I can tell we only ever use it
with short sequences like [0, i].
2012-01-18 17:20:46 -08:00
Niko Matsakis
da828747e6 correct use of GEP_tup_like in closure constr
also, streamline type_is_tup_like() to the cases which
actually work
2012-01-18 17:20:46 -08:00
Haitao Li
04882d7c43 rustc: Use integer from ctypes consistently 2012-01-19 02:10:36 +08:00