diff options
| author | Niv Kaminer <nivkner@zoho.com> | 2018-03-17 17:28:44 +0200 |
|---|---|---|
| committer | Niv Kaminer <nivkner@zoho.com> | 2018-03-17 20:24:49 +0200 |
| commit | 2c6b7b93230d4dcc99608538b43530e9e520215b (patch) | |
| tree | 9bf2cd58f3d628e001f22400c752d76664773257 /src/libsyntax | |
| parent | fd007559dbb9b149244cfb1184002971ea04a6cd (diff) | |
| download | rust-2c6b7b93230d4dcc99608538b43530e9e520215b.tar.gz rust-2c6b7b93230d4dcc99608538b43530e9e520215b.zip | |
remove FIXME(#2543) and avoid bad copies
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/test.rs | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/libsyntax/test.rs b/src/libsyntax/test.rs index 39306229c82..69213f236e1 100644 --- a/src/libsyntax/test.rs +++ b/src/libsyntax/test.rs @@ -627,8 +627,15 @@ fn path_node(ids: Vec<Ident>) -> ast::Path { } fn path_name_i(idents: &[Ident]) -> String { - // FIXME: Bad copies (#2543 -- same for everything else that says "bad") - idents.iter().map(|i| i.to_string()).collect::<Vec<String>>().join("::") + let mut path_name = "".to_string(); + let mut idents_iter = idents.iter().peekable(); + while let Some(ident) = idents_iter.next() { + path_name.push_str(&ident.name.as_str()); + if let Some(_) = idents_iter.peek() { + path_name.push_str("::") + } + } + path_name } fn mk_tests(cx: &TestCtxt) -> P<ast::Item> { @@ -681,7 +688,6 @@ fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> P<ast::Expr> { // gensym information. let span = ignored_span(cx, test.span); - let path = test.path.clone(); let ecx = &cx.ext_cx; let self_id = ecx.ident_of("self"); let test_id = ecx.ident_of("test"); @@ -693,10 +699,11 @@ fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> P<ast::Expr> { // creates $name: $expr let field = |name, expr| ecx.field_imm(span, ecx.ident_of(name), expr); - debug!("encoding {}", path_name_i(&path[..])); - // path to the #[test] function: "foo::bar::baz" - let path_string = path_name_i(&path[..]); + let path_string = path_name_i(&test.path[..]); + + debug!("encoding {}", path_string); + let name_expr = ecx.expr_str(span, Symbol::intern(&path_string)); // self::test::StaticTestName($name_expr) @@ -743,7 +750,7 @@ fn mk_test_desc_and_fn_rec(cx: &TestCtxt, test: &Test) -> P<ast::Expr> { diag.bug("expected to find top-level re-export name, but found None"); } }; - visible_path.extend(path); + visible_path.extend_from_slice(&test.path[..]); // Rather than directly give the test function to the test // harness, we create a wrapper like one of the following: |
