summary refs log tree commit diff
path: root/src/libsyntax
AgeCommit message (Collapse)AuthorLines
2015-01-05rollup merge of #20099: P1start/parse-more-macro-opsAlex Crichton-5/+10
Closes #20093.
2015-01-05Un-gate macro_rulesKeegan McAllister-7/+2
2015-01-05Modernize macro_rules! invocationsKeegan McAllister-9/+11
macro_rules! is like an item that defines a macro. Other items don't have a trailing semicolon, or use a paren-delimited body. If there's an argument for matching the invocation syntax, e.g. parentheses for an expr macro, then I think that applies more strongly to the *inner* delimiters on the LHS, wrapping the individual argument patterns.
2015-01-05Reserve the keyword 'macro'Keegan McAllister-23/+24
2015-01-05Allow selective macro importKeegan McAllister-2/+6
2015-01-05Move #[macro_reexport] to extern crateKeegan McAllister-60/+15
2015-01-05Replace #[phase] with #[plugin] / #[macro_use] / #[no_link]Keegan McAllister-38/+17
2015-01-06Fix the obsolete messageNick Cameron-1/+1
2015-01-06FalloutNick Cameron-3/+3
2015-01-06Obsolete `Sized? T`Nick Cameron-3/+9
[breaking-change] Use `T: ?Sized`
2015-01-06Remove the prefix in ObsoleteSyntax variantsNick Cameron-34/+34
2015-01-05syntax: remove dead codeJorge Aparicio-2/+1
2015-01-05syntax: make the closure type `f: |uint| -> bool` syntax obsoleteJorge Aparicio-16/+18
2015-01-05remove TyClosureJorge Aparicio-57/+2
2015-01-05syntax: remove remaining boxed closuresJorge Aparicio-33/+29
2015-01-05Implement new orphan rule that requires that impls of remote traits meet the ↵Niko Matsakis-0/+8
following two criteria: - the self type includes some local type; and, - type parameters in the self type must be constrained by a local type. A type parameter is called *constrained* if it appears in some type-parameter of a local type. Here are some examples that are accepted. In all of these examples, I assume that `Foo` is a trait defined in another crate. If `Foo` were defined in the local crate, then all the examples would be legal. - `impl Foo for LocalType` - `impl<T> Foo<T> for LocalType` -- T does not appear in Self, so it is OK - `impl<T> Foo<T> for LocalType<T>` -- T here is constrained by LocalType - `impl<T> Foo<T> for (LocalType<T>, T)` -- T here is constrained by LocalType Here are some illegal examples (again, these examples assume that `Foo` is not local to the current crate): - `impl Foo for int` -- the Self type is not local - `impl<T> Foo for T` -- T appears in Self unconstrained by a local type - `impl<T> Foo for (LocalType, T)` -- T appears in Self unconstrained by a local type This is a [breaking-change]. For the time being, you can opt out of the new rules by placing `#[old_orphan_check]` on the trait (and enabling the feature gate where the trait is defined). Longer term, you should restructure your traits to avoid the problem. Usually this means changing the order of parameters so that the "central" type parameter is in the `Self` position. As an example of that refactoring, consider the `BorrowFrom` trait: ```rust pub trait BorrowFrom<Sized? Owned> for Sized? { fn borrow_from(owned: &Owned) -> &Self; } ``` As defined, this trait is commonly implemented for custom pointer types, such as `Arc`. Those impls follow the pattern: ```rust impl<T> BorrowFrom<Arc<T>> for T {...} ``` Unfortunately, this impl is illegal because the self type `T` is not local to the current crate. Therefore, we are going to change the order of the parameters, so that `BorrowFrom` becomes `Borrow`: ```rust pub trait Borrow<Sized? Borrowed> for Sized? { fn borrow_from(owned: &Self) -> &Borrowed; } ``` Now the `Arc` impl is written: ```rust impl<T> Borrow<T> for Arc<T> { ... } ``` This impl is legal because the self type (`Arc<T>`) is local.
2015-01-05tweak the obsolete syntax messageJorge Aparicio-2/+2
2015-01-05Reformat metadata for exported macrosKeegan McAllister-74/+57
Instead of copy-pasting the whole macro_rules! item from the original .rs file, we serialize a separate name, attributes list, and body, the latter as pretty-printed TTs. The compilation of macro_rules! macros is decoupled somewhat from the expansion of macros in item position. This filters out comments, and facilitates selective imports.
2015-01-05Rename macro_escape to macro_useKeegan McAllister-19/+29
In the future we want to support #[macro_use(foo, bar)] mod macros; but it's not an essential part of macro reform. Reserve the syntax for now.
2015-01-05Stop using macro_escape as an inner attributeKeegan McAllister-5/+3
In preparation for the rename.
2015-01-05syntax: obsolete the `for Sized?` syntaxJorge Aparicio-2/+12
2015-01-05sed -i -s 's/ for Sized?//g' **/*.rsJorge Aparicio-2/+2
2015-01-05Implement macro re-exportKeegan McAllister-1/+50
Fixes #17103.
2015-01-05Allow leading :: in use itemsKeegan McAllister-0/+4
2015-01-05Add a special macro nonterminal $crateKeegan McAllister-9/+82
2015-01-05Replace LetSyntaxTT with MacroRulesTTKeegan McAllister-57/+30
The implementation of LetSyntaxTT was specialized to macro_rules! in various ways. This gets rid of the false generality and simplifies the code.
2015-01-05Ungate default type parameters.Huon Wilson-33/+8
These are in scope for 1.0, and this is good to e.g. find as many bugs as possible.
2015-01-05Ungate globs.Huon Wilson-8/+2
These are in scope for 1.0, so this is good to e.g. make it easier find bugs.
2015-01-05Ungate associated types.Huon Wilson-24/+1
They work pretty well now, and the stdlib is using them everywhere so they're impossible to avoid anyway.
2015-01-05Refactor struct parsing and add testsJared Roesch-46/+78
2015-01-04serialize: Use assoc types + less old_orphan_checkAlex Crichton-52/+119
This commit moves the libserialize crate (and will force the hand of the rustc-serialize crate) to not require the `old_orphan_check` feature gate as well as using associated types wherever possible. Concretely, the following changes were made: * The error type of `Encoder` and `Decoder` is now an associated type, meaning that these traits have no type parameters. * The `Encoder` and `Decoder` type parameters on the `Encodable` and `Decodable` traits have moved to the corresponding method of the trait. This movement alleviates the dependency on `old_orphan_check` but implies that implementations can no longer be specialized for the type of encoder/decoder being implemented. Due to the trait definitions changing, this is a: [breaking-change]
2015-01-05Change `&` pat to only work with &T, and `&mut` with &mut T.Huon Wilson-8/+16
This implements RFC 179 by making the pattern `&<pat>` require matching against a variable of type `&T`, and introducing the pattern `&mut <pat>` which only works with variables of type `&mut T`. The pattern `&mut x` currently parses as `&(mut x)` i.e. a pattern match through a `&T` or a `&mut T` that binds the variable `x` to have type `T` and to be mutable. This should be rewritten as follows, for example, for &mut x in slice.iter() { becomes for &x in slice.iter() { let mut x = x; Due to this, this is a [breaking-change] Closes #20496.
2015-01-05auto merge of #20285 : FlaPer87/rust/oibit-send-and-friends, r=nikomatsakisbors-9/+66
This commit introduces the syntax for negative implementations of traits as shown below: `impl !Trait for Type {}` cc #13231 Part of RFC rust-lang/rfcs#127 r? @nikomatsakis
2015-01-04Fix the parsing of where-clauses for structsJared Roesch-3/+21
2015-01-05auto merge of #20163 : bfops/rust/master, r=Gankrobors-11/+8
TODOs: - ~~Entry is still `<'a, K, V>` instead of `<'a, O, V>`~~ - ~~BTreeMap is still outstanding~~. - ~~Transform appropriate things into `.entry(...).get().or_else(|e| ...)`~~ Things that make me frowny face: - I'm not happy about the fact that this `clone`s the key even when it's already owned. - With small keys (e.g. `int`s), taking a reference seems wasteful. r? @Gankro cc: @cgaebel
2015-01-04Put negative trait implemtations behind a feature gateFlavio Percoco-1/+14
2015-01-04Add syntax for negative implementations of traitsFlavio Percoco-9/+53
This commit introduces the syntax for negative implmenetations of traits as shown below: `impl !Trait for Type {}` cc #13231 Part of RFC #3
2015-01-04Merge pull request #20452 from brson/rustupbors-1/+1
Move rustup to the combined installer Reviewed-by: brson
2015-01-04[breaking change] Update entry API as part of RFC 509.Ben Foppa-11/+8
2015-01-03Remove deprecated functionalityAlex Crichton-114/+2
This removes a large array of deprecated functionality, regardless of how recently it was deprecated. The purpose of this commit is to clean out the standard libraries and compiler for the upcoming alpha release. Some notable compiler changes were to enable warnings for all now-deprecated command line arguments (previously the deprecated versions were silently accepted) as well as removing deriving(Zero) entirely (the trait was removed). The distribution no longer contains the libtime or libregex_macros crates. Both of these have been deprecated for some time and are available externally.
2015-01-03sed -i -s 's/#\[deriving(/#\[derive(/g' **/*.rsJorge Aparicio-193/+193
2015-01-03sed -i -s 's/\bmod}/self}/g' **/*.rsJorge Aparicio-1/+1
2015-01-03sed -i -s 's/\bmod,/self,/g' **/*.rsJorge Aparicio-12/+12
2015-01-03use assoc types in binop traitsJorge Aparicio-5/+15
2015-01-03syntax: fix falloutJorge Aparicio-11/+19
2015-01-03auto merge of #20154 : P1start/rust/qualified-assoc-type-generics, ↵bors-34/+10
r=nikomatsakis This modifies `Parser::eat_lt` to always split up `<<`s, instead of doing so only when a lifetime name followed or the `force` parameter (now removed) was `true`. This is because `Foo<<TYPE` is now a valid start to a type, whereas previously only `Foo<<LIFETIME` was valid. This is a [breaking-change]. Change code that looks like this: ```rust let x = foo as bar << 13; ``` to use parentheses, like this: ```rust let x = (foo as bar) << 13; ``` Closes #17362.
2015-01-02rollup merge of #20410: japaric/assoc-typesAlex Crichton-4/+13
Conflicts: src/liballoc/lib.rs src/libcollections/lib.rs src/libcollections/slice.rs src/libcore/ops.rs src/libcore/prelude.rs src/libcore/ptr.rs src/librustc/middle/traits/project.rs src/libstd/c_str.rs src/libstd/io/mem.rs src/libstd/io/mod.rs src/libstd/lib.rs src/libstd/path/posix.rs src/libstd/path/windows.rs src/libstd/prelude.rs src/libstd/rt/exclusive.rs src/libsyntax/lib.rs src/test/compile-fail/issue-18566.rs src/test/run-pass/deref-mut-on-ref.rs src/test/run-pass/deref-on-ref.rs src/test/run-pass/dst-deref-mut.rs src/test/run-pass/dst-deref.rs src/test/run-pass/fixup-deref-mut.rs src/test/run-pass/issue-13264.rs src/test/run-pass/overloaded-autoderef-indexing.rs
2015-01-02Merge remote-tracking branch 'erickt/rustup'Brian Anderson-1/+1
2015-01-02rollup merge of #20341: nikomatsakis/impl-trait-for-trait-2Alex Crichton-3/+2
Conflicts: src/librustc/middle/traits/mod.rs src/libstd/io/mod.rs src/test/run-pass/builtin-superkinds-self-type.rs
2015-01-02Merge remote-tracking branch 'origin/master' into rollupAlex Crichton-23/+39
Conflicts: src/test/compile-fail/borrowck-loan-rcvr-overloaded-op.rs