diff options
| author | Brian Anderson <banderson@mozilla.com> | 2015-01-26 14:02:23 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2015-01-26 15:42:32 -0800 |
| commit | 5a6fb8eb98f1e8d7188100ef83f25d01f30fff9f (patch) | |
| tree | b258f900721206035f33e5fcc229474d19448569 /src/libsyntax/ext | |
| parent | d179ba3b8eb65c951b68f6c52da3aba82806a3a1 (diff) | |
| parent | 16286f5cf921a9de463d8a744c33f49837698c3d (diff) | |
| download | rust-5a6fb8eb98f1e8d7188100ef83f25d01f30fff9f.tar.gz rust-5a6fb8eb98f1e8d7188100ef83f25d01f30fff9f.zip | |
Merge remote-tracking branch 'rust-lang/master'
Conflicts: src/librustc/lint/builtin.rs src/librustc/lint/context.rs
Diffstat (limited to 'src/libsyntax/ext')
| -rw-r--r-- | src/libsyntax/ext/base.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/bounds.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/clone.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/cmp/eq.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/cmp/ord.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/cmp/totaleq.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/cmp/totalord.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/decodable.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/default.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/encodable.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/generic/mod.rs | 24 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/hash.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/mod.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/primitive.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/rand.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/show.rs | 7 |
16 files changed, 65 insertions, 16 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 9cfdc942c21..dd89153d497 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -467,6 +467,8 @@ fn initial_syntax_expander_table(ecfg: &expand::ExpansionConfig) -> SyntaxEnv { ext::log_syntax::expand_syntax_ext)); syntax_expanders.insert(intern("derive"), Decorator(box ext::deriving::expand_meta_derive)); + syntax_expanders.insert(intern("deriving"), + Decorator(box ext::deriving::expand_deprecated_deriving)); if ecfg.enable_quotes { // Quasi-quoting expanders diff --git a/src/libsyntax/ext/deriving/bounds.rs b/src/libsyntax/ext/deriving/bounds.rs index 8ac7e57bb81..9c85d3d28a7 100644 --- a/src/libsyntax/ext/deriving/bounds.rs +++ b/src/libsyntax/ext/deriving/bounds.rs @@ -51,7 +51,8 @@ pub fn expand_deriving_bound<F>(cx: &mut ExtCtxt, path: Path::new(vec!("std", "marker", name)), additional_bounds: Vec::new(), generics: LifetimeBounds::empty(), - methods: vec!() + methods: Vec::new(), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) diff --git a/src/libsyntax/ext/deriving/clone.rs b/src/libsyntax/ext/deriving/clone.rs index 6498e8d2d58..e1dcc887778 100644 --- a/src/libsyntax/ext/deriving/clone.rs +++ b/src/libsyntax/ext/deriving/clone.rs @@ -44,7 +44,8 @@ pub fn expand_deriving_clone<F>(cx: &mut ExtCtxt, cs_clone("Clone", c, s, sub) }), } - ) + ), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) diff --git a/src/libsyntax/ext/deriving/cmp/eq.rs b/src/libsyntax/ext/deriving/cmp/eq.rs index c550c26c745..00971b96e92 100644 --- a/src/libsyntax/ext/deriving/cmp/eq.rs +++ b/src/libsyntax/ext/deriving/cmp/eq.rs @@ -88,7 +88,8 @@ pub fn expand_deriving_eq<F>(cx: &mut ExtCtxt, methods: vec!( md!("eq", cs_eq), md!("ne", cs_ne) - ) + ), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) } diff --git a/src/libsyntax/ext/deriving/cmp/ord.rs b/src/libsyntax/ext/deriving/cmp/ord.rs index 9f1850145b6..1f92f8d7b37 100644 --- a/src/libsyntax/ext/deriving/cmp/ord.rs +++ b/src/libsyntax/ext/deriving/cmp/ord.rs @@ -78,7 +78,8 @@ pub fn expand_deriving_ord<F>(cx: &mut ExtCtxt, md!("le", true, true), md!("gt", false, false), md!("ge", false, true) - ] + ], + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) } diff --git a/src/libsyntax/ext/deriving/cmp/totaleq.rs b/src/libsyntax/ext/deriving/cmp/totaleq.rs index 9a2af6a3e0b..0429db3643b 100644 --- a/src/libsyntax/ext/deriving/cmp/totaleq.rs +++ b/src/libsyntax/ext/deriving/cmp/totaleq.rs @@ -61,7 +61,8 @@ pub fn expand_deriving_totaleq<F>(cx: &mut ExtCtxt, cs_total_eq_assert(a, b, c) }) } - ) + ), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) } diff --git a/src/libsyntax/ext/deriving/cmp/totalord.rs b/src/libsyntax/ext/deriving/cmp/totalord.rs index 29d327142a6..e90c1aa6fce 100644 --- a/src/libsyntax/ext/deriving/cmp/totalord.rs +++ b/src/libsyntax/ext/deriving/cmp/totalord.rs @@ -45,7 +45,8 @@ pub fn expand_deriving_totalord<F>(cx: &mut ExtCtxt, cs_cmp(a, b, c) }), } - ) + ), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) diff --git a/src/libsyntax/ext/deriving/decodable.rs b/src/libsyntax/ext/deriving/decodable.rs index e458bd58e8b..9552dff941d 100644 --- a/src/libsyntax/ext/deriving/decodable.rs +++ b/src/libsyntax/ext/deriving/decodable.rs @@ -79,7 +79,9 @@ fn expand_deriving_decodable_imp<F>(cx: &mut ExtCtxt, combine_substructure: combine_substructure(box |a, b, c| { decodable_substructure(a, b, c, krate) }), - }) + } + ), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) diff --git a/src/libsyntax/ext/deriving/default.rs b/src/libsyntax/ext/deriving/default.rs index f8fdd8575bd..27f3c46c48f 100644 --- a/src/libsyntax/ext/deriving/default.rs +++ b/src/libsyntax/ext/deriving/default.rs @@ -43,7 +43,9 @@ pub fn expand_deriving_default<F>(cx: &mut ExtCtxt, combine_substructure: combine_substructure(box |a, b, c| { default_substructure(a, b, c) }) - }) + } + ), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) } diff --git a/src/libsyntax/ext/deriving/encodable.rs b/src/libsyntax/ext/deriving/encodable.rs index 4c78a7b6a0c..d0b2c2faf37 100644 --- a/src/libsyntax/ext/deriving/encodable.rs +++ b/src/libsyntax/ext/deriving/encodable.rs @@ -155,7 +155,9 @@ fn expand_deriving_encodable_imp<F>(cx: &mut ExtCtxt, combine_substructure: combine_substructure(box |a, b, c| { encodable_substructure(a, b, c) }), - }) + } + ), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) diff --git a/src/libsyntax/ext/deriving/generic/mod.rs b/src/libsyntax/ext/deriving/generic/mod.rs index f8812f4d28d..56ff455a02b 100644 --- a/src/libsyntax/ext/deriving/generic/mod.rs +++ b/src/libsyntax/ext/deriving/generic/mod.rs @@ -228,6 +228,8 @@ pub struct TraitDef<'a> { pub generics: LifetimeBounds<'a>, pub methods: Vec<MethodDef<'a>>, + + pub associated_types: Vec<(ast::Ident, Ty<'a>)>, } @@ -387,6 +389,22 @@ impl<'a> TraitDef<'a> { methods: Vec<P<ast::Method>>) -> P<ast::Item> { let trait_path = self.path.to_path(cx, self.span, type_ident, generics); + // Transform associated types from `deriving::ty::Ty` into `ast::Typedef` + let associated_types = self.associated_types.iter().map(|&(ident, ref type_def)| { + P(ast::Typedef { + id: ast::DUMMY_NODE_ID, + span: self.span, + ident: ident, + vis: ast::Inherited, + attrs: Vec::new(), + typ: type_def.to_ty(cx, + self.span, + type_ident, + generics + ), + }) + }); + let Generics { mut lifetimes, ty_params, mut where_clause } = self.generics.to_generics(cx, self.span, type_ident, generics); let mut ty_params = ty_params.into_vec(); @@ -494,7 +512,11 @@ impl<'a> TraitDef<'a> { methods.into_iter() .map(|method| { ast::MethodImplItem(method) - }).collect())) + }).chain( + associated_types.map(|type_| { + ast::TypeImplItem(type_) + }) + ).collect())) } fn expand_struct_def(&self, diff --git a/src/libsyntax/ext/deriving/hash.rs b/src/libsyntax/ext/deriving/hash.rs index 8dac864c2ae..e7f546b2691 100644 --- a/src/libsyntax/ext/deriving/hash.rs +++ b/src/libsyntax/ext/deriving/hash.rs @@ -54,7 +54,8 @@ pub fn expand_deriving_hash<F>(cx: &mut ExtCtxt, hash_substructure(a, b, c) }) } - ) + ), + associated_types: Vec::new(), }; hash_trait_def.expand(cx, mitem, item, push); diff --git a/src/libsyntax/ext/deriving/mod.rs b/src/libsyntax/ext/deriving/mod.rs index e52a2b513ce..ddec517a78e 100644 --- a/src/libsyntax/ext/deriving/mod.rs +++ b/src/libsyntax/ext/deriving/mod.rs @@ -40,6 +40,14 @@ pub mod totalord; pub mod generic; +pub fn expand_deprecated_deriving(cx: &mut ExtCtxt, + span: Span, + _: &MetaItem, + _: &Item, + _: Box<FnMut(P<Item>)>) { + cx.span_err(span, "`deriving` has been renamed to `derive`"); +} + pub fn expand_meta_derive(cx: &mut ExtCtxt, _span: Span, mitem: &MetaItem, diff --git a/src/libsyntax/ext/deriving/primitive.rs b/src/libsyntax/ext/deriving/primitive.rs index c45fe1ceb20..c694b054ba3 100644 --- a/src/libsyntax/ext/deriving/primitive.rs +++ b/src/libsyntax/ext/deriving/primitive.rs @@ -65,7 +65,9 @@ pub fn expand_deriving_from_primitive<F>(cx: &mut ExtCtxt, combine_substructure: combine_substructure(box |c, s, sub| { cs_from("u64", c, s, sub) }), - }) + } + ), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) diff --git a/src/libsyntax/ext/deriving/rand.rs b/src/libsyntax/ext/deriving/rand.rs index bb902d7059c..9fd5091e194 100644 --- a/src/libsyntax/ext/deriving/rand.rs +++ b/src/libsyntax/ext/deriving/rand.rs @@ -49,7 +49,8 @@ pub fn expand_deriving_rand<F>(cx: &mut ExtCtxt, rand_substructure(a, b, c) }) } - ) + ), + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) } diff --git a/src/libsyntax/ext/deriving/show.rs b/src/libsyntax/ext/deriving/show.rs index f5b5d4dda19..ec5941f58f3 100644 --- a/src/libsyntax/ext/deriving/show.rs +++ b/src/libsyntax/ext/deriving/show.rs @@ -35,10 +35,10 @@ pub fn expand_deriving_show<F>(cx: &mut ExtCtxt, let trait_def = TraitDef { span: span, attributes: Vec::new(), - path: Path::new(vec!("std", "fmt", "Debug")), + path: Path::new(vec!["std", "fmt", "Debug"]), additional_bounds: Vec::new(), generics: LifetimeBounds::empty(), - methods: vec!( + methods: vec![ MethodDef { name: "fmt", generics: LifetimeBounds::empty(), @@ -50,7 +50,8 @@ pub fn expand_deriving_show<F>(cx: &mut ExtCtxt, show_substructure(a, b, c) }) } - ) + ], + associated_types: Vec::new(), }; trait_def.expand(cx, mitem, item, push) } |
