diff --git a/src/test/compile-fail-fulldeps/qquote.rs b/src/test/compile-fail-fulldeps/qquote.rs new file mode 100644 index 0000000000000..8b410dc257249 --- /dev/null +++ b/src/test/compile-fail-fulldeps/qquote.rs @@ -0,0 +1,55 @@ +// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-cross-compile + +#![feature(quote, rustc_private)] + +extern crate syntax; + +use syntax::ast; +use syntax::codemap; +use syntax::parse; +use syntax::print::pprust; + +trait FakeExtCtxt { + fn call_site(&self) -> codemap::Span; + fn cfg(&self) -> ast::CrateConfig; + fn ident_of(&self, st: &str) -> ast::Ident; + fn name_of(&self, st: &str) -> ast::Name; + fn parse_sess(&self) -> &parse::ParseSess; +} + +impl FakeExtCtxt for parse::ParseSess { + fn call_site(&self) -> codemap::Span { + codemap::Span { + lo: codemap::BytePos(0), + hi: codemap::BytePos(0), + expn_id: codemap::NO_EXPANSION, + } + } + fn cfg(&self) -> ast::CrateConfig { Vec::new() } + fn ident_of(&self, st: &str) -> ast::Ident { + parse::token::str_to_ident(st) + } + fn name_of(&self, st: &str) -> ast::Name { + parse::token::intern(st) + } + fn parse_sess(&self) -> &parse::ParseSess { self } +} + +fn main() { + let cx = parse::new_parse_sess(); + + assert_eq!(pprust::expr_to_string(&*quote_expr!(&cx, 23)), "23"); + + let expr = quote_expr!(&cx, 2 - $abcd + 7); //~ ERROR unresolved name `abcd` + assert_eq!(pprust::expr_to_string(&*expr), "2 - $abcd + 7"); +} diff --git a/src/test/parse-fail/qquote-1.rs b/src/test/parse-fail/qquote-1.rs deleted file mode 100644 index e30308b295a37..0000000000000 --- a/src/test/parse-fail/qquote-1.rs +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// compile-flags: -Z parse-only - -// ignore-test Can't use syntax crate here - -#![feature(quote)] - -extern crate syntax; - -use io::*; - -use syntax::diagnostic; -use syntax::ast; -use syntax::codemap; -use syntax::parse; -use syntax::print::*; - - -trait fake_ext_ctxt { - fn cfg() -> ast::CrateConfig; - fn parse_sess() -> parse::parse_sess; - fn call_site() -> span; - fn ident_of(st: &str) -> ast::ident; -} - -type fake_session = parse::parse_sess; - -impl fake_ext_ctxt for fake_session { - fn cfg() -> ast::CrateConfig { Vec::new() } - fn parse_sess() -> parse::parse_sess { self } - fn call_site() -> span { - codemap::span { - lo: codemap::BytePos(0), - hi: codemap::BytePos(0), - expn_id: NO_EXPANSION - } - } - fn ident_of(st: &str) -> ast::ident { - self.interner.intern(st) - } -} - -fn mk_ctxt() -> fake_ext_ctxt { - parse::new_parse_sess(None) as fake_ext_ctxt -} - - - -fn main() { - let cx = mk_ctxt(); - - let abc = quote_expr!(cx, 23); - check_pp(abc, pprust::print_expr, "23"); - - let expr3 = quote_expr!(cx, 2 - $abcd + 7); //~ ERROR unresolved name: abcd - check_pp(expr3, pprust::print_expr, "2 - 23 + 7"); -} - -fn check_pp(expr: T, f: |pprust::ps, T|, expect: str) { - panic!(); -}