diff options
| author | Alexander Regueiro <alexreg@me.com> | 2019-02-28 22:43:53 +0000 |
|---|---|---|
| committer | Alexander Regueiro <alexreg@me.com> | 2019-06-05 21:09:26 +0100 |
| commit | 3816958f18ea6c8990d64d03da839e5a180b0b9b (patch) | |
| tree | 1bf9dca622038936fb05d803c5cd441b7e95885e /src/libsyntax/ast.rs | |
| parent | dce27cba78ebda2c5adfe149d33af5a88a28d08d (diff) | |
| download | rust-3816958f18ea6c8990d64d03da839e5a180b0b9b.tar.gz rust-3816958f18ea6c8990d64d03da839e5a180b0b9b.zip | |
Implemented for function bounds, type bounds, and named existential types.
Diffstat (limited to 'src/libsyntax/ast.rs')
| -rw-r--r-- | src/libsyntax/ast.rs | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 31e89804800..598232f9f8f 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -190,9 +190,9 @@ pub struct AngleBracketedArgs { pub span: Span, /// The arguments for this path segment. pub args: Vec<GenericArg>, - /// Bindings (equality constraints) on associated types, if present. - /// E.g., `Foo<A = Bar>`. - pub bindings: Vec<TypeBinding>, + /// Constraints on associated types, if any. + /// E.g., `Foo<A = Bar, B: Baz>`. + pub constraints: Vec<AssocTyConstraint>, } impl Into<Option<P<GenericArgs>>> for AngleBracketedArgs { @@ -225,7 +225,7 @@ impl ParenthesizedArgs { AngleBracketedArgs { span: self.span, args: self.inputs.iter().cloned().map(|input| GenericArg::Type(input)).collect(), - bindings: vec![], + constraints: vec![], } } } @@ -1611,15 +1611,29 @@ impl fmt::Display for UintTy { } } -// Bind a type to an associated type: `A = Foo`. +/// A constraint on an associated type (e.g., `A = Bar` in `Foo<A = Bar>` or +/// `A: TraitA + TraitB` in `Foo<A: TraitA + TraitB>`). #[derive(Clone, RustcEncodable, RustcDecodable, Debug)] -pub struct TypeBinding { +pub struct AssocTyConstraint { pub id: NodeId, pub ident: Ident, - pub ty: P<Ty>, + pub kind: AssocTyConstraintKind, pub span: Span, } +/// The kinds of an `AssocTyConstraint`. +#[derive(Clone, RustcEncodable, RustcDecodable, Debug)] +pub enum AssocTyConstraintKind { + /// E.g., `A = Bar` in `Foo<A = Bar>`. + Equality { + ty: P<Ty>, + }, + /// E.g. `A: TraitA + TraitB` in `Foo<A: TraitA + TraitB>`. + Bound { + bounds: GenericBounds, + }, +} + #[derive(Clone, RustcEncodable, RustcDecodable)] pub struct Ty { pub id: NodeId, |
