305 Commits

Author SHA1 Message Date
Niko Matsakis
b2b2a430df resolve capture clauses 2011-12-19 14:07:46 -08:00
Marijn Haverbeke
e4e2d6d1a1 Fix bug in type parameter handling for impl methods
The parameters of the impl weren't being combined in the right way
with the parameters of the methods. The test worked only by accident.

Issue #1227
2011-12-19 15:43:02 +01:00
Marijn Haverbeke
619d7c3f72 Associate names with types introduced by items
Issue #828

This is not a full solution yet. To really get sane error messages,
we'll also have to guess the name to apply to literals, which seems
non-trivial.
2011-12-19 13:52:58 +01:00
Marijn Haverbeke
60acae4df7 Add type argument field to expr_path
This way, you can explicitly provide type parameters when calling a
generic method.

Issue #1227
2011-12-19 10:43:23 +01:00
Marijn Haverbeke
b36ade1367 Improve efficienty of impl cache in resolve
And fix a bug where importing anything from an external module would
import all impls in the module.

Issue #1227
2011-12-18 19:07:26 +01:00
Marijn Haverbeke
b11268780e Fix arg order for vec::map call 2011-12-16 22:29:01 +01:00
Marijn Haverbeke
58a81a68ed Finish resolving and calling of crate-external impls
Issue #1227
2011-12-16 22:18:38 +01:00
Marijn Haverbeke
dd9693f211 Reserve node_id 0 for the crate top-level module
And define a const to refer to it.
2011-12-16 22:17:47 +01:00
Niko Matsakis
2833ca478c reorder args to the various vec, option fns so blk comes last 2011-12-16 07:17:23 -08:00
Marijn Haverbeke
d529757515 Make polymorphic impl methods work
Something will still have to be done to the AST to make it possible to
say `x.foo::<int>()`, since currently field access never allows type
parameters.

Issue #1227
2011-12-16 13:47:48 +01:00
Marijn Haverbeke
14fcb135a9 Improve resolution of impls
Issue #1227
2011-12-16 11:46:57 +01:00
Marijn Haverbeke
7efef98901 Make uses of self in impls compile
Get rid of expr_self_call, introduces def_self. `self` is now,
syntactically, simply a variable. A method implicitly brings a `self`
binding into scope.

Issue #1227
2011-12-16 11:46:57 +01:00
Marijn Haverbeke
6a16f57c0a Get a very primitive form of typechecking/resolving to work for impls
No conflict resolution or polymorphism yet.

Issue #1227
2011-12-16 11:46:57 +01:00
Marijn Haverbeke
888bc80025 Parse and resolve implementations.
Issue #1227
2011-12-16 11:46:57 +01:00
Haitao Li
9bb290c725 rustc: Implement non-renamed re-export across crates
First patch for issue #1115. Not yet ready for re-exported modules which
are renamed when importing them.
2011-12-16 17:16:00 +08:00
Marijn Haverbeke
2cd3d1ff59 Don't try to look up crate modules in ext_map in resolve
Closes #1305
2011-12-15 08:17:13 +01:00
Niko Matsakis
7fbca4e31c sendable functions now "work", meaning pass through trans/typestate
but they do not generate correct code
2011-12-14 14:32:19 -08:00
Graydon Hoare
fa9ad984fb Copy first batch of material from libstd to libcore. 2011-12-13 16:34:50 -08:00
Marijn Haverbeke
e47f8fc709 Handle external-crate case when printing full unresolved paths
Closes #1283
2011-12-12 13:36:29 +01:00
Brian Anderson
fd81fb6a24 rustc: Determine the crate type (lib/bin) in the session, not session opts
This is in preparation for adding a #[crate_type] attribute
2011-12-08 20:08:00 -08:00
Marijn Haverbeke
9a269a3aa8 Allow binding of nested patterns
See src/test/run-pass/nested-patterns.rs for some examples. The syntax is

    boundvar@subpattern

Which will match the subpattern as usual, but also bind boundvar to the
whole matched value.

Closes #838
2011-12-08 12:03:48 +01:00
Marijn Haverbeke
817c9f2a54 Include full module path in unresolved errors when looking in module
Closes #1228
2011-12-02 16:46:19 +01:00
Marijn Haverbeke
0f918ddd8b Make import ignore imports coming after them
This broke no code at all, so I guess people were already writing
imports in this style.

Issue #1228
2011-12-02 16:06:55 +01:00
Marijn Haverbeke
8a1cc738fa Finally make the -1 crate id in resolve.rs a const 2011-12-02 14:00:45 +01:00
Marijn Haverbeke
b40c6773c2 Box ast::path values
It seems inefficient to copy them around. Let's measure whether that's actually
> the case
2011-11-30 13:38:38 +01:00
Marijn Haverbeke
8746ebe2e6 Add some changes that *should* have been in e98286b594
Forgot to amend the commit after fixing the failure.
2011-11-23 21:22:56 +01:00
Marijn Haverbeke
e98286b594 Allow import directives in any block
Closes #49
2011-11-23 20:57:34 +01:00
Niko Matsakis
adc79e2f44 remove compile-command from local variable blocks 2011-11-17 11:46:13 -08:00
Haitao Li
388eed383f rustc: Add a flag '--warn-unused-imports'
Followup of issue #889
2011-11-17 09:28:30 +01:00
Haitao Li
fe6484d3e6 rustc: Fix warn on unused import bug
rustc generates incorrect warning for cascaded import declarations like:

  use std;
  import std::io;
  import io::println;
  fn main() { println("hello"); }

  warning: unused import io

A followup of issue #889
2011-11-17 09:27:17 +01:00
Haitao Li
3b683f5205 rustc: Use link_name attribute for native function
Fixes issue #906
2011-11-16 23:45:07 +08:00
Haitao Li
5a7249c935 Cleanup unused imports 2011-11-10 19:19:40 -08:00
Haitao Li
9bc2f1800d rustc: Add support of warning on unused imports
Fixes issue #889
2011-11-10 19:19:10 -08:00
Marijn Haverbeke
1a68a98824 Disallow writing to function arguments again
Remove implicit copying hack.

Closes #1118
2011-11-03 10:57:54 +01:00
Marijn Haverbeke
d8d35e7c40 Rename car/cdr to head/tail in std::list
Closes #1086
2011-11-02 14:23:49 +01:00
Marijn Haverbeke
4e9b8a28f7 Make resolving of imports behave more sanely
An import now ignores itself when resolving its target. This gets rid of
the previously existing (problematic) behaviour where the import would start
looking one scope up when its name was the same as its target's first
component.

Closes #1114
2011-11-02 12:20:11 +01:00
Marijn Haverbeke
7dacccde94 Make shared kind the default only for generic functions
You almost never want a function with pinned type params. For
types, objects, resources, and tags, pinned types are actually often
more sane. For most of these, shared rarely makes sense. Only tricky
case is objs -- you'll have to think about the kinds you want there.

Issue #1076
2011-10-28 17:00:14 +02:00
Marijn Haverbeke
0ce40f60e7 Drop support for iter, put, and for-each
Closes #1056
2011-10-21 13:47:24 +02:00
Marijn Haverbeke
fd5a08384d Move ast_util::pat_bindings over to new iter system.
Issue #1056
2011-10-21 12:41:42 +02:00
Marijn Haverbeke
4ebbbe597e Move hash table iteration over to block-taking functions
Issue #1056
2011-10-21 12:21:27 +02:00
Brian Anderson
9efdd0f326 Merge ast::proto_shared and ast::proto_closure
Now they are both just proto_shared and proto_shared takes an
argument indicating that it is sugared as 'lambda'
2011-10-20 18:23:48 -07:00
Brian Anderson
4b30a06abe Rename ast::proto_fn to ast::proto_shared 2011-10-20 18:23:48 -07:00
Brian Anderson
29ad3bdb10 Make fn denote a bare function. Convert fn to fn@ as needed 2011-10-20 18:23:48 -07:00
Marijn Haverbeke
06257d66e7 Don't crash when reporting an unresolved import in the nil scope
Closes #1027
2011-10-14 11:25:14 +02:00
Niko Matsakis
212707ce84 make native functions markable as unsafe and incorporate that
into the type check
2011-10-12 14:39:34 -07:00
Marijn Haverbeke
33167f7dec Adjust function signatures to allow for vecs being immediate
Some code was relying on vectors being implicitly by-reference (as
non-immediate value). This adds the necessary &&-sigils.

Closes #1021
2011-10-10 16:01:51 +02:00
Marijn Haverbeke
f9fbd86f52 Parse and typecheck by-value and by-ref arg specs
Add sprinkle && throughout the compiler to make it typecheck again.

Issue #1008
2011-10-07 09:09:50 +02:00
Marijn Haverbeke
133d36f452 Require body of else-less if expressions to be a value-less block
For consistency with other constructs that could not possibly return a
value (say, loops).
2011-09-16 18:21:06 +02:00
Marijn Haverbeke
25787bd2b8 Forbid assignment to by-reference bindings
Issue #918
2011-09-15 14:08:54 +02:00
Marijn Haverbeke
1cda74deee Add representation for by-ref let bindings
Issue #918
2011-09-15 11:42:56 +02:00