From 604af3f6c0be6ea428a55cfcb303fa1cd1c7958d Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 11 Aug 2014 09:32:26 -0700 Subject: librustc: Implement simple `where` clauses. These `where` clauses are accepted everywhere generics are currently accepted and desugar during type collection to the type parameter bounds we have today. A new keyword, `where`, has been added. Therefore, this is a breaking change. Change uses of `where` to other identifiers. [breaking-change] --- src/libsyntax/fold.rs | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) (limited to 'src/libsyntax/fold.rs') diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 4ed2a3ed4c2..9ad28f02e80 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -244,6 +244,16 @@ pub trait Folder { noop_fold_field(field, self) } + fn fold_where_clause(&mut self, where_clause: &WhereClause) + -> WhereClause { + noop_fold_where_clause(where_clause, self) + } + + fn fold_where_predicate(&mut self, where_predicate: &WherePredicate) + -> WherePredicate { + noop_fold_where_predicate(where_predicate, self) + } + // Helper methods: fn map_exprs(&self, f: |Gc| -> Gc, @@ -698,8 +708,37 @@ pub fn noop_fold_opt_lifetime(o_lt: &Option, fld: &mut T) } pub fn noop_fold_generics(generics: &Generics, fld: &mut T) -> Generics { - Generics {ty_params: fld.fold_ty_params(generics.ty_params.as_slice()), - lifetimes: fld.fold_lifetime_defs(generics.lifetimes.as_slice())} + Generics { + ty_params: fld.fold_ty_params(generics.ty_params.as_slice()), + lifetimes: fld.fold_lifetime_defs(generics.lifetimes.as_slice()), + where_clause: fld.fold_where_clause(&generics.where_clause), + } +} + +pub fn noop_fold_where_clause( + where_clause: &WhereClause, + fld: &mut T) + -> WhereClause { + WhereClause { + id: fld.new_id(where_clause.id), + predicates: where_clause.predicates.iter().map(|predicate| { + fld.fold_where_predicate(predicate) + }).collect(), + } +} + +pub fn noop_fold_where_predicate( + predicate: &WherePredicate, + fld: &mut T) + -> WherePredicate { + WherePredicate { + id: fld.new_id(predicate.id), + span: fld.new_span(predicate.span), + ident: fld.fold_ident(predicate.ident), + bounds: predicate.bounds.map(|x| { + fld.fold_ty_param_bound(x) + }), + } } pub fn noop_fold_struct_def(struct_def: Gc, -- cgit 1.4.1-3-g733a5