diff options
| author | Arthur Cohen <arthur.cohen@embecosm.com> | 2022-07-20 13:49:53 +0200 |
|---|---|---|
| committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2022-07-20 15:08:51 +0200 |
| commit | 09855d5c0eb14a9b976a98ae4ec9ab012eebaa51 (patch) | |
| tree | d3cb79c22ffa2c662d29394c84111771f032a26a /gcc/rust/parse/rust-parse.h | |
| parent | 3f5fc214f4a53ac6c90e421814fcf049e56d3dc9 (diff) | |
| download | gcc-09855d5c0eb14a9b976a98ae4ec9ab012eebaa51.zip gcc-09855d5c0eb14a9b976a98ae4ec9ab012eebaa51.tar.gz gcc-09855d5c0eb14a9b976a98ae4ec9ab012eebaa51.tar.bz2 | |
macro: Allow the repetition of metavars when expanding repetitions
When expanding repeating metavars, we have to allow the repetition of non-repeating metavars as well:
```
macro_rules! foo {
( ( $( $Trait: ident ),+ ) for $Ty: ident ) => {
$(
impl $Trait for $Ty {
fn bar() -> i32 {
14
}
}
)+
}
}
trait Foo {
fn bar() -> i32;
}
trait Bar {
fn bar() -> i32;
}
trait Baz {
fn bar() -> i32;
}
trait Qux {
fn bar() -> i32;
}
struct S;
foo!{(Foo, Bar, Baz, Qux) for S}
```
This is valid, as the $Ty metavar is not a repetition. However, this should fail to compile:
```
macro_rules! foo {
// note the repetition here now
( ( $( $Trait: ident ),+ ) for $($Ty: ident)+ ) => {
$(
impl $Trait for $Ty {
fn bar() -> i32 {
14
}
}
)+
}
}
trait Foo {
fn bar() -> i32;
}
trait Bar {
fn bar() -> i32;
}
trait Baz {
fn bar() -> i32;
}
trait Qux {
fn bar() -> i32;
}
struct S;
foo!{(Foo, Bar, Baz, Qux) for S}
```
Obviously, if we were to specify as many $Ty as $Trait then there would be no issue, but that behavior is already handled.
Diffstat (limited to 'gcc/rust/parse/rust-parse.h')
0 files changed, 0 insertions, 0 deletions
