rust/src/test/run-pass-fulldeps/qquote.rs

100 lines
2.6 KiB
Rust
Raw Normal View History

2012-02-01 14:41:01 -06:00
// xfail-pretty
use std;
use syntax;
2012-02-01 14:41:01 -06:00
import io::*;
2012-02-01 14:41:01 -06:00
import syntax::diagnostic;
import syntax::ast;
import syntax::codemap;
import syntax::parse;
import syntax::print::*;
2012-02-01 14:41:01 -06:00
trait fake_ext_ctxt {
fn cfg() -> ast::crate_cfg;
fn parse_sess() -> parse::parse_sess;
2012-02-01 14:41:01 -06:00
}
2012-07-18 18:18:02 -05:00
type fake_session = parse::parse_sess;
2012-02-01 14:41:01 -06:00
2012-08-07 20:10:06 -05:00
impl fake_session: fake_ext_ctxt {
fn cfg() -> ast::crate_cfg { ~[] }
2012-07-18 18:18:02 -05:00
fn parse_sess() -> parse::parse_sess { self }
2012-02-01 14:41:01 -06:00
}
fn mk_ctxt() -> fake_ext_ctxt {
2012-08-20 14:23:37 -05:00
parse::new_parse_sess(None) as fake_ext_ctxt
2012-02-01 14:41:01 -06:00
}
fn main() {
let ext_cx = mk_ctxt();
let abc = #ast{23};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, abc, pprust::print_expr, ~"23");
2012-02-01 14:41:01 -06:00
let expr3 = #ast{2 - $(abc) + 7};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, expr3, pprust::print_expr, ~"2 - 23 + 7");
2012-02-01 14:41:01 -06:00
let expr4 = #ast{2 - $(#ast{3}) + 9};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, expr4, pprust::print_expr, ~"2 - 3 + 9");
2012-02-01 14:41:01 -06:00
let ty = #ast[ty]{int};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, ty, pprust::print_type, ~"int");
2012-02-01 23:06:36 -06:00
let ty2 = #ast[ty]{option<$(ty)>};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, ty2, pprust::print_type, ~"option<int>");
2012-02-01 14:41:01 -06:00
let item = #ast[item]{const x : int = 10;};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, item, pprust::print_item, ~"const x: int = 10;");
2012-02-01 14:41:01 -06:00
let item2: @ast::item = #ast[item]{const x : int = $(abc);};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, item2, pprust::print_item, ~"const x: int = 23;");
let stmt = #ast[stmt]{let x = 20;};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, *stmt, pprust::print_stmt, ~"let x = 20;");
2012-02-01 14:41:01 -06:00
let stmt2 = #ast[stmt]{let x : $(ty) = $(abc);};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, *stmt2, pprust::print_stmt, ~"let x: int = 23;");
let pat = #ast[pat]{some(_)};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, pat, pprust::print_pat, ~"some(_)");
// issue #1785
let x = #ast{1};
let test1 = #ast{1+$(x)};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, test1, pprust::print_expr, ~"1 + 1");
let test2 = #ast{$(x)+1};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, test2, pprust::print_expr, ~"1 + 1");
let y = #ast{2};
let test3 = #ast{$(x) + $(y)};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, test3, pprust::print_expr, ~"1 + 2");
2012-02-21 17:34:26 -06:00
let crate = #ast[crate] { fn a() { } };
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, crate, pprust::print_crate_, ~"fn a() { }\n");
// issue #1926
let s = #ast[expr]{__s};
let e = #ast[expr]{__e};
let call = #ast[expr]{$(s).foo(|__e| $(e) )};
2012-07-18 18:18:02 -05:00
check_pp(ext_cx, call, pprust::print_expr, ~"__s.foo(|__e| __e)")
2012-02-01 14:41:01 -06:00
}
2012-07-18 18:18:02 -05:00
fn check_pp<T>(cx: fake_ext_ctxt,
expr: T, f: fn(pprust::ps, T), expect: ~str) {
let buf = mem_buffer();
2012-07-18 18:18:02 -05:00
let pp = pprust::rust_printer(buf as io::Writer,cx.parse_sess().interner);
2012-02-01 14:41:01 -06:00
f(pp, expr);
pp::eof(pp.s);
let str = mem_buffer_str(buf);
stdout().write_line(str);
if expect != ~"" {
2012-08-22 19:24:52 -05:00
error!("expect: '%s', got: '%s'", expect, str);
assert str == expect;
}
2012-02-01 14:41:01 -06:00
}