diff options
| author | bors <bors@rust-lang.org> | 2014-05-08 09:06:42 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-05-08 09:06:42 -0700 |
| commit | aa6725407ae0a2cb88458e147e76adf8bcae0961 (patch) | |
| tree | c09983e00886791c40b9304d99dd8d05e2d613c2 /src/libsyntax/ext | |
| parent | e45485181338137136ea2816d78ed108440f7d50 (diff) | |
| parent | 7f8f3dcf179d7b771f8e9c588ab081ab5eb9c394 (diff) | |
| download | rust-aa6725407ae0a2cb88458e147e76adf8bcae0961.tar.gz rust-aa6725407ae0a2cb88458e147e76adf8bcae0961.zip | |
auto merge of #14032 : pcwalton/rust/detildestr, r=alexcrichton
r? @brson
Diffstat (limited to 'src/libsyntax/ext')
| -rw-r--r-- | src/libsyntax/ext/base.rs | 12 | ||||
| -rw-r--r-- | src/libsyntax/ext/build.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/generic.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/ext/env.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 52 | ||||
| -rw-r--r-- | src/libsyntax/ext/format.rs | 32 | ||||
| -rw-r--r-- | src/libsyntax/ext/quote.rs | 102 | ||||
| -rw-r--r-- | src/libsyntax/ext/source_util.rs | 15 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/macro_parser.rs | 29 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/transcribe.rs | 6 |
11 files changed, 142 insertions, 122 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 01ec4c84b68..f4330960aca 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -30,7 +30,7 @@ use collections::HashMap; // ast::MacInvocTT. pub struct MacroDef { - pub name: ~str, + pub name: StrBuf, pub ext: SyntaxExtension } @@ -361,8 +361,8 @@ pub fn syntax_expander_table() -> SyntaxEnv { pub struct MacroCrate { pub lib: Option<Path>, - pub macros: Vec<~str>, - pub registrar_symbol: Option<~str>, + pub macros: Vec<StrBuf>, + pub registrar_symbol: Option<StrBuf>, } pub trait CrateLoader { @@ -425,7 +425,7 @@ impl<'a> ExtCtxt<'a> { pub fn mod_pop(&mut self) { self.mod_path.pop().unwrap(); } pub fn mod_path(&self) -> Vec<ast::Ident> { let mut v = Vec::new(); - v.push(token::str_to_ident(self.ecfg.crate_id.name)); + v.push(token::str_to_ident(self.ecfg.crate_id.name.as_slice())); v.extend(self.mod_path.iter().map(|a| *a)); return v; } @@ -540,14 +540,14 @@ pub fn get_single_str_from_tts(cx: &ExtCtxt, sp: Span, tts: &[ast::TokenTree], name: &str) - -> Option<~str> { + -> Option<StrBuf> { if tts.len() != 1 { cx.span_err(sp, format!("{} takes 1 argument.", name)); } else { match tts[0] { ast::TTTok(_, token::LIT_STR(ident)) | ast::TTTok(_, token::LIT_STR_RAW(ident, _)) => { - return Some(token::get_ident(ident).get().to_str()) + return Some(token::get_ident(ident).get().to_strbuf()) } _ => cx.span_err(sp, format!("{} requires a string.", name)), } diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index 457cb4b79bf..3c7415ae0e9 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -639,7 +639,9 @@ impl<'a> AstBuilder for ExtCtxt<'a> { vec!( self.expr_str(span, msg), self.expr_str(span, - token::intern_and_get_ident(loc.file.name)), + token::intern_and_get_ident(loc.file + .name + .as_slice())), self.expr_uint(span, loc.line))) } diff --git a/src/libsyntax/ext/deriving/generic.rs b/src/libsyntax/ext/deriving/generic.rs index a3f9eaee892..9c967cfb4ee 100644 --- a/src/libsyntax/ext/deriving/generic.rs +++ b/src/libsyntax/ext/deriving/generic.rs @@ -987,7 +987,7 @@ impl<'a> TraitDef<'a> { to_set.expn_info = Some(@codemap::ExpnInfo { call_site: to_set, callee: codemap::NameAndSpan { - name: format!("deriving({})", trait_name), + name: format!("deriving({})", trait_name).to_strbuf(), format: codemap::MacroAttribute, span: Some(self.span) } diff --git a/src/libsyntax/ext/env.rs b/src/libsyntax/ext/env.rs index ea3fef352be..8dbfbc53cec 100644 --- a/src/libsyntax/ext/env.rs +++ b/src/libsyntax/ext/env.rs @@ -30,7 +30,7 @@ pub fn expand_option_env(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) Some(v) => v }; - let e = match os::getenv(var) { + let e = match os::getenv(var.as_slice()) { None => { cx.expr_path(cx.path_all(sp, true, diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 0dc62728e5c..0f3b96c2132 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -71,7 +71,7 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr { fld.cx.bt_push(ExpnInfo { call_site: e.span, callee: NameAndSpan { - name: extnamestr.get().to_str(), + name: extnamestr.get().to_strbuf(), format: MacroBang, span: exp_span, }, @@ -270,7 +270,7 @@ pub fn expand_item(it: @ast::Item, fld: &mut MacroExpander) fld.cx.bt_push(ExpnInfo { call_site: attr.span, callee: NameAndSpan { - name: mname.get().to_str(), + name: mname.get().to_strbuf(), format: MacroAttribute, span: None } @@ -334,7 +334,7 @@ fn expand_item_modifiers(mut it: @ast::Item, fld: &mut MacroExpander) fld.cx.bt_push(ExpnInfo { call_site: attr.span, callee: NameAndSpan { - name: mname.get().to_str(), + name: mname.get().to_strbuf(), format: MacroAttribute, span: None, } @@ -393,7 +393,7 @@ pub fn expand_item_mac(it: @ast::Item, fld: &mut MacroExpander) fld.cx.bt_push(ExpnInfo { call_site: it.span, callee: NameAndSpan { - name: extnamestr.get().to_str(), + name: extnamestr.get().to_strbuf(), format: MacroBang, span: span } @@ -412,7 +412,7 @@ pub fn expand_item_mac(it: @ast::Item, fld: &mut MacroExpander) fld.cx.bt_push(ExpnInfo { call_site: it.span, callee: NameAndSpan { - name: extnamestr.get().to_str(), + name: extnamestr.get().to_strbuf(), format: MacroBang, span: span } @@ -433,7 +433,7 @@ pub fn expand_item_mac(it: @ast::Item, fld: &mut MacroExpander) Some(MacroDef { name, ext }) => { // yikes... no idea how to apply the mark to this. I'm afraid // we're going to have to wait-and-see on this one. - fld.extsbox.insert(intern(name), ext); + fld.extsbox.insert(intern(name.as_slice()), ext); if attr::contains_name(it.attrs.as_slice(), "macro_export") { SmallVector::one(it) } else { @@ -493,6 +493,7 @@ fn load_extern_macros(krate: &ast::ViewItem, fld: &mut MacroExpander) { _ => unreachable!() }; let name = format!("<{} macros>", token::get_ident(crate_name)); + let name = name.to_strbuf(); for source in macros.iter() { let item = parse::parse_item_from_source_str(name.clone(), @@ -524,11 +525,12 @@ fn load_extern_macros(krate: &ast::ViewItem, fld: &mut MacroExpander) { }; unsafe { - let registrar: MacroCrateRegistrationFun = match lib.symbol(registrar) { - Ok(registrar) => registrar, - // again fatal if we can't register macros - Err(err) => fld.cx.span_fatal(krate.span, err) - }; + let registrar: MacroCrateRegistrationFun = + match lib.symbol(registrar.as_slice()) { + Ok(registrar) => registrar, + // again fatal if we can't register macros + Err(err) => fld.cx.span_fatal(krate.span, err) + }; registrar(|name, extension| { let extension = match extension { NormalTT(ext, _) => NormalTT(ext, Some(krate.span)), @@ -576,7 +578,7 @@ pub fn expand_stmt(s: &Stmt, fld: &mut MacroExpander) -> SmallVector<@Stmt> { fld.cx.bt_push(ExpnInfo { call_site: s.span, callee: NameAndSpan { - name: extnamestr.get().to_str(), + name: extnamestr.get().to_strbuf(), format: MacroBang, span: exp_span, } @@ -1020,10 +1022,10 @@ mod test { #[should_fail] #[test] fn macros_cant_escape_fns_test () { let src = "fn bogus() {macro_rules! z (() => (3+4))}\ - fn inty() -> int { z!() }".to_owned(); + fn inty() -> int { z!() }".to_strbuf(); let sess = parse::new_parse_sess(); let crate_ast = parse::parse_crate_from_source_str( - "<test>".to_owned(), + "<test>".to_strbuf(), src, Vec::new(), &sess); // should fail: @@ -1040,10 +1042,10 @@ mod test { #[should_fail] #[test] fn macros_cant_escape_mods_test () { let src = "mod foo {macro_rules! z (() => (3+4))}\ - fn inty() -> int { z!() }".to_owned(); + fn inty() -> int { z!() }".to_strbuf(); let sess = parse::new_parse_sess(); let crate_ast = parse::parse_crate_from_source_str( - "<test>".to_owned(), + "<test>".to_strbuf(), src, Vec::new(), &sess); // should fail: @@ -1059,10 +1061,10 @@ mod test { // macro_escape modules shouldn't cause macros to leave scope #[test] fn macros_can_escape_flattened_mods_test () { let src = "#[macro_escape] mod foo {macro_rules! z (() => (3+4))}\ - fn inty() -> int { z!() }".to_owned(); + fn inty() -> int { z!() }".to_strbuf(); let sess = parse::new_parse_sess(); let crate_ast = parse::parse_crate_from_source_str( - "<test>".to_owned(), + "<test>".to_strbuf(), src, Vec::new(), &sess); // should fail: @@ -1100,7 +1102,7 @@ mod test { } } - fn expand_crate_str(crate_str: ~str) -> ast::Crate { + fn expand_crate_str(crate_str: StrBuf) -> ast::Crate { let ps = parse::new_parse_sess(); let crate_ast = string_to_parser(&ps, crate_str).parse_crate_mod(); // the cfg argument actually does matter, here... @@ -1118,13 +1120,14 @@ mod test { // println!("expanded: {:?}\n",expanded_ast); //mtwt_resolve_crate(expanded_ast) //} - //fn expand_and_resolve_and_pretty_print (crate_str: @str) -> ~str { + //fn expand_and_resolve_and_pretty_print (crate_str: @str) -> StrBuf { //let resolved_ast = expand_and_resolve(crate_str); //pprust::to_str(&resolved_ast,fake_print_crate,get_ident_interner()) //} #[test] fn macro_tokens_should_match(){ - expand_crate_str("macro_rules! m((a)=>(13)) fn main(){m!(a);}".to_owned()); + expand_crate_str( + "macro_rules! m((a)=>(13)) fn main(){m!(a);}".to_strbuf()); } // renaming tests expand a crate and then check that the bindings match @@ -1182,7 +1185,7 @@ mod test { let (teststr, bound_connections, bound_ident_check) = match *t { (ref str,ref conns, bic) => (str.to_owned(), conns.clone(), bic) }; - let cr = expand_crate_str(teststr.to_owned()); + let cr = expand_crate_str(teststr.to_strbuf()); // find the bindings: let mut name_finder = new_name_finder(Vec::new()); visit::walk_crate(&mut name_finder,&cr,()); @@ -1257,7 +1260,7 @@ mod test { let crate_str = "macro_rules! fmt_wrap(($b:expr)=>($b.to_str())) macro_rules! foo_module (() => (mod generated { fn a() { let xx = 147; fmt_wrap!(xx);}})) foo_module!() -".to_owned(); +".to_strbuf(); let cr = expand_crate_str(crate_str); // find the xx binding let mut name_finder = new_name_finder(Vec::new()); @@ -1303,7 +1306,8 @@ foo_module!() #[test] fn pat_idents(){ - let pat = string_to_pat("(a,Foo{x:c @ (b,9),y:Bar(4,d)})".to_owned()); + let pat = string_to_pat( + "(a,Foo{x:c @ (b,9),y:Bar(4,d)})".to_strbuf()); let mut pat_idents = new_name_finder(Vec::new()); pat_idents.visit_pat(pat, ()); assert_eq!(pat_idents.ident_accumulator, diff --git a/src/libsyntax/ext/format.rs b/src/libsyntax/ext/format.rs index fc3136996ae..79f49b908d1 100644 --- a/src/libsyntax/ext/format.rs +++ b/src/libsyntax/ext/format.rs @@ -23,14 +23,14 @@ use collections::{HashMap, HashSet}; #[deriving(Eq)] enum ArgumentType { - Known(~str), + Known(StrBuf), Unsigned, String, } enum Position { Exact(uint), - Named(~str), + Named(StrBuf), } struct Context<'a, 'b> { @@ -45,13 +45,13 @@ struct Context<'a, 'b> { // Note that we keep a side-array of the ordering of the named arguments // found to be sure that we can translate them in the same order that they // were declared in. - names: HashMap<~str, @ast::Expr>, - name_types: HashMap<~str, ArgumentType>, - name_ordering: Vec<~str>, + names: HashMap<StrBuf, @ast::Expr>, + name_types: HashMap<StrBuf, ArgumentType>, + name_ordering: Vec<StrBuf>, // Collection of the compiled `rt::Piece` structures pieces: Vec<@ast::Expr> , - name_positions: HashMap<~str, uint>, + name_positions: HashMap<StrBuf, uint>, method_statics: Vec<@ast::Item> , // Updated as arguments are consumed or methods are entered @@ -68,10 +68,10 @@ struct Context<'a, 'b> { /// Some((fmtstr, unnamed arguments, ordering of named arguments, /// named arguments)) fn parse_args(ecx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) - -> (@ast::Expr, Option<(@ast::Expr, Vec<@ast::Expr>, Vec<~str>, - HashMap<~str, @ast::Expr>)>) { + -> (@ast::Expr, Option<(@ast::Expr, Vec<@ast::Expr>, Vec<StrBuf>, + HashMap<StrBuf, @ast::Expr>)>) { let mut args = Vec::new(); - let mut names = HashMap::<~str, @ast::Expr>::new(); + let mut names = HashMap::<StrBuf, @ast::Expr>::new(); let mut order = Vec::new(); let mut p = rsparse::new_parser_from_tts(ecx.parse_sess(), @@ -131,8 +131,8 @@ fn parse_args(ecx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) continue } } - order.push(name.to_str()); - names.insert(name.to_str(), e); + order.push(name.to_strbuf()); + names.insert(name.to_strbuf(), e); } else { args.push(p.parse_expr()); } @@ -171,13 +171,13 @@ impl<'a, 'b> Context<'a, 'b> { Exact(i) } parse::ArgumentIs(i) => Exact(i), - parse::ArgumentNamed(s) => Named(s.to_str()), + parse::ArgumentNamed(s) => Named(s.to_strbuf()), }; // and finally the method being applied match arg.method { None => { - let ty = Known(arg.format.ty.to_str()); + let ty = Known(arg.format.ty.to_strbuf()); self.verify_arg_type(pos, ty); } Some(ref method) => { self.verify_method(pos, *method); } @@ -199,7 +199,7 @@ impl<'a, 'b> Context<'a, 'b> { self.verify_arg_type(Exact(i), Unsigned); } parse::CountIsName(s) => { - self.verify_arg_type(Named(s.to_str()), Unsigned); + self.verify_arg_type(Named(s.to_strbuf()), Unsigned); } parse::CountIsNextParam => { if self.check_positional_ok() { @@ -822,8 +822,8 @@ pub fn expand_args(ecx: &mut ExtCtxt, sp: Span, pub fn expand_preparsed_format_args(ecx: &mut ExtCtxt, sp: Span, extra: @ast::Expr, efmt: @ast::Expr, args: Vec<@ast::Expr>, - name_ordering: Vec<~str>, - names: HashMap<~str, @ast::Expr>) -> @ast::Expr { + name_ordering: Vec<StrBuf>, + names: HashMap<StrBuf, @ast::Expr>) -> @ast::Expr { let arg_types = Vec::from_fn(args.len(), |_| None); let mut cx = Context { ecx: ecx, diff --git a/src/libsyntax/ext/quote.rs b/src/libsyntax/ext/quote.rs index 4d8be9bab76..b3eec136c7d 100644 --- a/src/libsyntax/ext/quote.rs +++ b/src/libsyntax/ext/quote.rs @@ -55,7 +55,7 @@ pub mod rt { trait ToSource : ToTokens { // Takes a thing and generates a string containing rust code for it. - pub fn to_source() -> ~str; + pub fn to_source() -> StrBuf; // If you can make source, you can definitely make tokens. pub fn to_tokens(cx: &ExtCtxt) -> ~[TokenTree] { @@ -67,59 +67,67 @@ pub mod rt { pub trait ToSource { // Takes a thing and generates a string containing rust code for it. - fn to_source(&self) -> ~str; + fn to_source(&self) -> StrBuf; } impl ToSource for ast::Ident { - fn to_source(&self) -> ~str { - get_ident(*self).get().to_str() + fn to_source(&self) -> StrBuf { + get_ident(*self).get().to_strbuf() } } impl ToSource for @ast::Item { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { pprust::item_to_str(*self) } } impl<'a> ToSource for &'a [@ast::Item] { - fn to_source(&self) -> ~str { - self.iter().map(|i| i.to_source()).collect::<Vec<~str>>().connect("\n\n") + fn to_source(&self) -> StrBuf { + self.iter() + .map(|i| i.to_source()) + .collect::<Vec<StrBuf>>() + .connect("\n\n") + .to_strbuf() } } impl ToSource for ast::Ty { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { pprust::ty_to_str(self) } } impl<'a> ToSource for &'a [ast::Ty] { - fn to_source(&self) -> ~str { - self.iter().map(|i| i.to_source()).collect::<Vec<~str>>().connect(", ") + fn to_source(&self) -> StrBuf { + self.iter() + .map(|i| i.to_source()) + .collect::<Vec<StrBuf>>() + .connect(", ") + .to_strbuf() } } impl ToSource for Generics { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { pprust::generics_to_str(self) } } impl ToSource for @ast::Expr { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { pprust::expr_to_str(*self) } } impl ToSource for ast::Block { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { pprust::block_to_str(self) } } impl<'a> ToSource for &'a str { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitStr( token::intern_and_get_ident(*self), ast::CookedStr)); pprust::lit_to_str(&lit) @@ -127,41 +135,41 @@ pub mod rt { } impl ToSource for () { - fn to_source(&self) -> ~str { - "()".to_owned() + fn to_source(&self) -> StrBuf { + "()".to_strbuf() } } impl ToSource for bool { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitBool(*self)); pprust::lit_to_str(&lit) } } impl ToSource for char { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitChar(*self)); pprust::lit_to_str(&lit) } } impl ToSource for int { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI)); pprust::lit_to_str(&lit) } } impl ToSource for i8 { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI8)); pprust::lit_to_str(&lit) } } impl ToSource for i16 { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI16)); pprust::lit_to_str(&lit) } @@ -169,49 +177,49 @@ pub mod rt { impl ToSource for i32 { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI32)); pprust::lit_to_str(&lit) } } impl ToSource for i64 { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitInt(*self as i64, ast::TyI64)); pprust::lit_to_str(&lit) } } impl ToSource for uint { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU)); pprust::lit_to_str(&lit) } } impl ToSource for u8 { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU8)); pprust::lit_to_str(&lit) } } impl ToSource for u16 { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU16)); pprust::lit_to_str(&lit) } } impl ToSource for u32 { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU32)); pprust::lit_to_str(&lit) } } impl ToSource for u64 { - fn to_source(&self) -> ~str { + fn to_source(&self) -> StrBuf { let lit = dummy_spanned(ast::LitUint(*self as u64, ast::TyU64)); pprust::lit_to_str(&lit) } @@ -263,17 +271,17 @@ pub mod rt { impl_to_tokens!(u64) pub trait ExtParseUtils { - fn parse_item(&self, s: ~str) -> @ast::Item; - fn parse_expr(&self, s: ~str) -> @ast::Expr; - fn parse_stmt(&self, s: ~str) -> @ast::Stmt; - fn parse_tts(&self, s: ~str) -> Vec<ast::TokenTree> ; + fn parse_item(&self, s: StrBuf) -> @ast::Item; + fn parse_expr(&self, s: StrBuf) -> @ast::Expr; + fn parse_stmt(&self, s: StrBuf) -> @ast::Stmt; + fn parse_tts(&self, s: StrBuf) -> Vec<ast::TokenTree> ; } impl<'a> ExtParseUtils for ExtCtxt<'a> { - fn parse_item(&self, s: ~str) -> @ast::Item { + fn parse_item(&self, s: StrBuf) -> @ast::Item { let res = parse::parse_item_from_source_str( - "<quote expansion>".to_str(), + "<quote expansion>".to_strbuf(), s, self.cfg(), self.parse_sess()); @@ -286,23 +294,23 @@ pub mod rt { } } - fn parse_stmt(&self, s: ~str) -> @ast::Stmt { - parse::parse_stmt_from_source_str("<quote expansion>".to_str(), + fn parse_stmt(&self, s: StrBuf) -> @ast::Stmt { + parse::parse_stmt_from_source_str("<quote expansion>".to_strbuf(), s, self.cfg(), Vec::new(), self.parse_sess()) } - fn parse_expr(&self, s: ~str) -> @ast::Expr { - parse::parse_expr_from_source_str("<quote expansion>".to_str(), + fn parse_expr(&self, s: StrBuf) -> @ast::Expr { + parse::parse_expr_from_source_str("<quote expansion>".to_strbuf(), s, self.cfg(), self.parse_sess()) } - fn parse_tts(&self, s: ~str) -> Vec<ast::TokenTree> { - parse::parse_tts_from_source_str("<quote expansion>".to_str(), + fn parse_tts(&self, s: StrBuf) -> Vec<ast::TokenTree> { + parse::parse_tts_from_source_str("<quote expansion>".to_strbuf(), s, self.cfg(), self.parse_sess()) @@ -367,8 +375,8 @@ pub fn expand_quote_stmt(cx: &mut ExtCtxt, base::MacExpr::new(expanded) } -fn ids_ext(strs: Vec<~str> ) -> Vec<ast::Ident> { - strs.iter().map(|str| str_to_ident(*str)).collect() +fn ids_ext(strs: Vec<StrBuf> ) -> Vec<ast::Ident> { + strs.iter().map(|str| str_to_ident((*str).as_slice())).collect() } fn id_ext(str: &str) -> ast::Ident { @@ -678,11 +686,11 @@ fn expand_wrapper(cx: &ExtCtxt, sp: Span, cx_expr: @ast::Expr, expr: @ast::Expr) -> @ast::Expr { - let uses = vec!( cx.view_use_glob(sp, ast::Inherited, - ids_ext(vec!("syntax".to_owned(), - "ext".to_owned(), - "quote".to_owned(), - "rt".to_owned()))) ); + let uses = vec![ cx.view_use_glob(sp, ast::Inherited, + ids_ext(vec!["syntax".to_strbuf(), + "ext".to_strbuf(), + "quote".to_strbuf(), + "rt".to_strbuf()])) ]; let stmt_let_ext_cx = cx.stmt_let(sp, false, id_ext("ext_cx"), cx_expr); diff --git a/src/libsyntax/ext/source_util.rs b/src/libsyntax/ext/source_util.rs index e221ab80d7b..6e7e72bd2e8 100644 --- a/src/libsyntax/ext/source_util.rs +++ b/src/libsyntax/ext/source_util.rs @@ -57,14 +57,15 @@ pub fn expand_file(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) let topmost = topmost_expn_info(cx.backtrace().unwrap()); let loc = cx.codemap().lookup_char_pos(topmost.call_site.lo); - let filename = token::intern_and_get_ident(loc.file.name); + let filename = token::intern_and_get_ident(loc.file.name.as_slice()); base::MacExpr::new(cx.expr_str(topmost.call_site, filename)) } pub fn expand_stringify(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) -> Box<base::MacResult> { let s = pprust::tts_to_str(tts); - base::MacExpr::new(cx.expr_str(sp, token::intern_and_get_ident(s))) + base::MacExpr::new(cx.expr_str(sp, + token::intern_and_get_ident(s.as_slice()))) } pub fn expand_mod(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) @@ -72,8 +73,8 @@ pub fn expand_mod(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) base::check_zero_tts(cx, sp, tts, "module_path!"); let string = cx.mod_path() .iter() - .map(|x| token::get_ident(*x).get().to_str()) - .collect::<Vec<~str>>() + .map(|x| token::get_ident(*x).get().to_strbuf()) + .collect::<Vec<StrBuf>>() .connect("::"); base::MacExpr::new(cx.expr_str(sp, token::intern_and_get_ident(string))) } @@ -117,9 +118,9 @@ pub fn expand_include_str(cx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree]) Some(src) => { // Add this input file to the code map to make it available as // dependency information - let filename = file.display().to_str(); + let filename = file.display().to_str().to_strbuf(); let interned = token::intern_and_get_ident(src); - cx.codemap().new_filemap(filename, src.to_owned()); + cx.codemap().new_filemap(filename, src.to_strbuf()); base::MacExpr::new(cx.expr_str(sp, interned)) } @@ -161,7 +162,7 @@ fn topmost_expn_info(expn_info: @codemap::ExpnInfo) -> @codemap::ExpnInfo { .. } => { // Don't recurse into file using "include!" - if "include" == *name { + if "include" == name.as_slice() { expn_info } else { topmost_expn_info(next_expn_info) diff --git a/src/libsyntax/ext/tt/macro_parser.rs b/src/libsyntax/ext/tt/macro_parser.rs index ee3ff0c389e..89e8d48425f 100644 --- a/src/libsyntax/ext/tt/macro_parser.rs +++ b/src/libsyntax/ext/tt/macro_parser.rs @@ -201,8 +201,8 @@ pub fn nameize(p_s: &ParseSess, ms: &[Matcher], res: &[Rc<NamedMatch>]) pub enum ParseResult { Success(HashMap<Ident, Rc<NamedMatch>>), - Failure(codemap::Span, ~str), - Error(codemap::Span, ~str) + Failure(codemap::Span, StrBuf), + Error(codemap::Span, StrBuf) } pub fn parse_or_else(sess: &ParseSess, @@ -212,8 +212,12 @@ pub fn parse_or_else(sess: &ParseSess, -> HashMap<Ident, Rc<NamedMatch>> { match parse(sess, cfg, rdr, ms.as_slice()) { Success(m) => m, - Failure(sp, str) => sess.span_diagnostic.span_fatal(sp, str), - Error(sp, str) => sess.span_diagnostic.span_fatal(sp, str) + Failure(sp, str) => { + sess.span_diagnostic.span_fatal(sp, str.as_slice()) + } + Error(sp, str) => { + sess.span_diagnostic.span_fatal(sp, str.as_slice()) + } } } @@ -366,9 +370,9 @@ pub fn parse(sess: &ParseSess, } return Success(nameize(sess, ms, v.as_slice())); } else if eof_eis.len() > 1u { - return Error(sp, "ambiguity: multiple successful parses".to_owned()); + return Error(sp, "ambiguity: multiple successful parses".to_strbuf()); } else { - return Failure(sp, "unexpected end of macro invocation".to_owned()); + return Failure(sp, "unexpected end of macro invocation".to_strbuf()); } } else { if (bb_eis.len() > 0u && next_eis.len() > 0u) @@ -376,19 +380,19 @@ pub fn parse(sess: &ParseSess, let nts = bb_eis.iter().map(|ei| { match ei.elts.get(ei.idx).node { MatchNonterminal(bind, name, _) => { - format!("{} ('{}')", + (format!("{} ('{}')", token::get_ident(name), - token::get_ident(bind)) + token::get_ident(bind))).to_strbuf() } _ => fail!() - } }).collect::<Vec<~str>>().connect(" or "); + } }).collect::<Vec<StrBuf>>().connect(" or "); return Error(sp, format!( "local ambiguity: multiple parsing options: \ built-in NTs {} or {} other options.", - nts, next_eis.len())); + nts, next_eis.len()).to_strbuf()); } else if bb_eis.len() == 0u && next_eis.len() == 0u { return Failure(sp, format!("no rules expected the token `{}`", - token::to_str(&tok))); + token::to_str(&tok)).to_strbuf()); } else if next_eis.len() > 0u { /* Now process the next token */ while next_eis.len() > 0u { @@ -436,7 +440,8 @@ pub fn parse_nt(p: &mut Parser, name: &str) -> Nonterminal { token::IDENT(sn,b) => { p.bump(); token::NtIdent(box sn,b) } _ => { let token_str = token::to_str(&p.token); - p.fatal("expected ident, found ".to_owned() + token_str) + p.fatal((format!("expected ident, found {}", + token_str.as_slice())).as_slice()) } }, "path" => { diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 5a02acdae1c..7ff690582d6 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -132,7 +132,7 @@ fn generic_extension(cx: &ExtCtxt, // Which arm's failure should we report? (the one furthest along) let mut best_fail_spot = DUMMY_SP; - let mut best_fail_msg = "internal error: ran no matchers".to_owned(); + let mut best_fail_msg = "internal error: ran no matchers".to_strbuf(); for (i, lhs) in lhses.iter().enumerate() { // try each arm's matchers match **lhs { @@ -177,13 +177,13 @@ fn generic_extension(cx: &ExtCtxt, best_fail_spot = sp; best_fail_msg = (*msg).clone(); }, - Error(sp, ref msg) => cx.span_fatal(sp, (*msg)) + Error(sp, ref msg) => cx.span_fatal(sp, msg.as_slice()) } } _ => cx.bug("non-matcher found in parsed lhses") } } - cx.span_fatal(best_fail_spot, best_fail_msg); + cx.span_fatal(best_fail_spot, best_fail_msg.as_slice()); } // this procedure performs the expansion of the @@ -247,7 +247,7 @@ pub fn add_new_extension(cx: &mut ExtCtxt, box MacroRulesDefiner { def: RefCell::new(Some(MacroDef { - name: token::get_ident(name).to_str(), + name: token::get_ident(name).to_str().to_strbuf(), ext: NormalTT(exp, Some(sp)) })) } as Box<MacResult> diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs index f6bee033553..1f264e73d4a 100644 --- a/src/libsyntax/ext/tt/transcribe.rs +++ b/src/libsyntax/ext/tt/transcribe.rs @@ -100,7 +100,7 @@ fn lookup_cur_matched(r: &TtReader, name: Ident) -> Rc<NamedMatch> { enum LockstepIterSize { LisUnconstrained, LisConstraint(uint, Ident), - LisContradiction(~str), + LisContradiction(StrBuf), } fn lis_merge(lhs: LockstepIterSize, rhs: LockstepIterSize) -> LockstepIterSize { @@ -116,7 +116,7 @@ fn lis_merge(lhs: LockstepIterSize, rhs: LockstepIterSize) -> LockstepIterSize { let r_n = token::get_ident(r_id); LisContradiction(format!("inconsistent lockstep iteration: \ '{}' has {} items, but '{}' has {}", - l_n, l_len, r_n, r_len)) + l_n, l_len, r_n, r_len).to_strbuf()) } } } @@ -223,7 +223,7 @@ pub fn tt_next_token(r: &mut TtReader) -> TokenAndSpan { } LisContradiction(ref msg) => { // FIXME #2887 blame macro invoker instead - r.sp_diag.span_fatal(sp.clone(), *msg); + r.sp_diag.span_fatal(sp.clone(), msg.as_slice()); } LisConstraint(len, _) => { if len == 0 { |
