@@ -13,37 +13,97 @@ fn test_vec() {
13
13
check (
14
14
r#"
15
15
macro_rules! vec {
16
- ($($item:expr),*) => {{
17
- let mut v = Vec::new();
18
- $( v.push($item); )*
19
- v
20
- }};
16
+ () => (
17
+ $crate::__rust_force_expr!($crate::vec::Vec::new())
18
+ );
19
+ ($elem:expr; $n:expr) => (
20
+ $crate::__rust_force_expr!($crate::vec::from_elem($elem, $n))
21
+ );
22
+ ($($x:expr),+ $(,)?) => (
23
+ $crate::__rust_force_expr!(<[_]>::into_vec(
24
+ // This rustc_box is not required, but it produces a dramatic improvement in compile
25
+ // time when constructing arrays with many elements.
26
+ #[rustc_box]
27
+ $crate::boxed::Box::new([$($x),+])
28
+ ))
29
+ );
30
+ }
31
+
32
+ macro_rules! __rust_force_expr {
33
+ ($e:expr) => {
34
+ $e
35
+ };
21
36
}
37
+
22
38
fn main() {
23
39
vec!();
24
40
vec![1u32,2];
41
+ vec![a.];
25
42
}
26
43
"# ,
27
44
expect ! [ [ r#"
28
45
macro_rules! vec {
29
- ($($item:expr),*) => {{
30
- let mut v = Vec::new();
31
- $( v.push($item); )*
32
- v
33
- }};
46
+ () => (
47
+ $crate::__rust_force_expr!($crate::vec::Vec::new())
48
+ );
49
+ ($elem:expr; $n:expr) => (
50
+ $crate::__rust_force_expr!($crate::vec::from_elem($elem, $n))
51
+ );
52
+ ($($x:expr),+ $(,)?) => (
53
+ $crate::__rust_force_expr!(<[_]>::into_vec(
54
+ // This rustc_box is not required, but it produces a dramatic improvement in compile
55
+ // time when constructing arrays with many elements.
56
+ #[rustc_box]
57
+ $crate::boxed::Box::new([$($x),+])
58
+ ))
59
+ );
60
+ }
61
+
62
+ macro_rules! __rust_force_expr {
63
+ ($e:expr) => {
64
+ $e
65
+ };
34
66
}
67
+
35
68
fn main() {
36
- {
37
- let mut v = Vec::new();
38
- v
69
+ $crate::__rust_force_expr!($crate:: vec:: Vec:: new());
70
+ $crate::__rust_force_expr!(<[_]>:: into_vec(#[rustc_box]$crate:: boxed:: Box:: new([1u32, 2])));
71
+ /* error: expected Expr */$crate::__rust_force_expr!($crate:: vec:: from_elem((a.), $n));
72
+ }
73
+ "# ] ] ,
74
+ ) ;
75
+ // FIXME we should ahev testing infra for multi level expansion tests
76
+ check (
77
+ r#"
78
+ macro_rules! __rust_force_expr {
79
+ ($e:expr) => {
80
+ $e
39
81
};
40
- {
41
- let mut v = Vec::new();
42
- v.push(1u32);
43
- v.push(2);
44
- v
82
+ }
83
+
84
+ fn main() {
85
+ __rust_force_expr!(crate:: vec:: Vec:: new());
86
+ __rust_force_expr!(<[_]>:: into_vec(#[rustc_box] crate:: boxed:: Box:: new([1u32, 2])));
87
+ __rust_force_expr/*+errors*/!(crate:: vec:: from_elem((a.), $n));
88
+ }
89
+ "# ,
90
+ expect ! [ [ r#"
91
+ macro_rules! __rust_force_expr {
92
+ ($e:expr) => {
93
+ $e
45
94
};
46
95
}
96
+
97
+ fn main() {
98
+ (crate ::vec::Vec::new());
99
+ (<[_]>::into_vec(#[rustc_box] crate ::boxed::Box::new([1u32, 2])));
100
+ /* error: expected Expr *//* parse error: expected field name or number */
101
+ /* parse error: expected expression */
102
+ /* parse error: expected R_PAREN */
103
+ /* parse error: expected COMMA */
104
+ /* parse error: expected expression, item or let statement */
105
+ (crate ::vec::from_elem((a.), $n));
106
+ }
47
107
"# ] ] ,
48
108
) ;
49
109
}
0 commit comments