librustc: Always parse macro!()/macro![] as expressions if not
followed by a semicolon.
This allows code like `vec![1i, 2, 3].len();` to work.
This breaks code that uses macros as statements without putting
semicolons after them, such as:
fn main() {
...
assert!(a == b)
assert!(c == d)
println(...);
}
It also breaks code that uses macros as items without semicolons:
local_data_key!(foo)
fn main() {
println("hello world")
}
Add semicolons to fix this code. Those two examples can be fixed as
follows:
fn main() {
...
assert!(a == b);
assert!(c == d);
println(...);
}
local_data_key!(foo);
fn main() {
println("hello world")
}
RFC #378.
Closes #18635.
[breaking-change]
This commit is contained in:
committed by
Jorge Aparicio
parent
c0b2885ee1
commit
ddb2466f6a
@@ -296,7 +296,7 @@ mod impls {
|
||||
use option::Option;
|
||||
use option::Option::{Some, None};
|
||||
|
||||
macro_rules! partial_eq_impl(
|
||||
macro_rules! partial_eq_impl {
|
||||
($($t:ty)*) => ($(
|
||||
#[unstable = "Trait is unstable."]
|
||||
impl PartialEq for $t {
|
||||
@@ -306,7 +306,7 @@ mod impls {
|
||||
fn ne(&self, other: &$t) -> bool { (*self) != (*other) }
|
||||
}
|
||||
)*)
|
||||
)
|
||||
}
|
||||
|
||||
#[unstable = "Trait is unstable."]
|
||||
impl PartialEq for () {
|
||||
@@ -316,18 +316,20 @@ mod impls {
|
||||
fn ne(&self, _other: &()) -> bool { false }
|
||||
}
|
||||
|
||||
partial_eq_impl!(bool char uint u8 u16 u32 u64 int i8 i16 i32 i64 f32 f64)
|
||||
partial_eq_impl! {
|
||||
bool char uint u8 u16 u32 u64 int i8 i16 i32 i64 f32 f64
|
||||
}
|
||||
|
||||
macro_rules! eq_impl(
|
||||
macro_rules! eq_impl {
|
||||
($($t:ty)*) => ($(
|
||||
#[unstable = "Trait is unstable."]
|
||||
impl Eq for $t {}
|
||||
)*)
|
||||
)
|
||||
}
|
||||
|
||||
eq_impl!(() bool char uint u8 u16 u32 u64 int i8 i16 i32 i64)
|
||||
eq_impl! { () bool char uint u8 u16 u32 u64 int i8 i16 i32 i64 }
|
||||
|
||||
macro_rules! partial_ord_impl(
|
||||
macro_rules! partial_ord_impl {
|
||||
($($t:ty)*) => ($(
|
||||
#[unstable = "Trait is unstable."]
|
||||
impl PartialOrd for $t {
|
||||
@@ -350,7 +352,7 @@ mod impls {
|
||||
fn gt(&self, other: &$t) -> bool { (*self) > (*other) }
|
||||
}
|
||||
)*)
|
||||
)
|
||||
}
|
||||
|
||||
#[unstable = "Trait is unstable."]
|
||||
impl PartialOrd for () {
|
||||
@@ -368,9 +370,9 @@ mod impls {
|
||||
}
|
||||
}
|
||||
|
||||
partial_ord_impl!(char uint u8 u16 u32 u64 int i8 i16 i32 i64 f32 f64)
|
||||
partial_ord_impl! { char uint u8 u16 u32 u64 int i8 i16 i32 i64 f32 f64 }
|
||||
|
||||
macro_rules! ord_impl(
|
||||
macro_rules! ord_impl {
|
||||
($($t:ty)*) => ($(
|
||||
#[unstable = "Trait is unstable."]
|
||||
impl Ord for $t {
|
||||
@@ -382,7 +384,7 @@ mod impls {
|
||||
}
|
||||
}
|
||||
)*)
|
||||
)
|
||||
}
|
||||
|
||||
#[unstable = "Trait is unstable."]
|
||||
impl Ord for () {
|
||||
@@ -398,7 +400,7 @@ mod impls {
|
||||
}
|
||||
}
|
||||
|
||||
ord_impl!(char uint u8 u16 u32 u64 int i8 i16 i32 i64)
|
||||
ord_impl! { char uint u8 u16 u32 u64 int i8 i16 i32 i64 }
|
||||
|
||||
// & pointers
|
||||
|
||||
|
||||
Reference in New Issue
Block a user