Auto merge of #59227 - Zoxc:fix-get, r=eddyb

Fix lifetime on LocalInternedString::get function

cc @eddyb @nnethercote
This commit is contained in:
bors 2019-04-11 23:36:13 +00:00
commit cd8b437362
5 changed files with 23 additions and 17 deletions

View File

@ -622,7 +622,7 @@ impl<'a> State<'a> {
}
hir::ItemKind::GlobalAsm(ref ga) => {
self.head(visibility_qualified(&item.vis, "global asm"))?;
self.s.word(ga.asm.as_str().get())?;
self.s.word(ga.asm.as_str().to_string())?;
self.end()?
}
hir::ItemKind::Ty(ref ty, ref generics) => {
@ -1591,7 +1591,7 @@ impl<'a> State<'a> {
if ident.is_raw_guess() {
self.s.word(format!("r#{}", ident.name))?;
} else {
self.s.word(ident.as_str().get())?;
self.s.word(ident.as_str().to_string())?;
}
self.ann.post(self, AnnNode::Name(&ident.name))
}
@ -1998,7 +1998,7 @@ impl<'a> State<'a> {
self.commasep(Inconsistent, &decl.inputs, |s, ty| {
s.ibox(indent_unit)?;
if let Some(arg_name) = arg_names.get(i) {
s.s.word(arg_name.as_str().get())?;
s.s.word(arg_name.as_str().to_string())?;
s.s.word(":")?;
s.s.space()?;
} else if let Some(body_id) = body_id {

View File

@ -2165,9 +2165,11 @@ impl<'a> Parser<'a> {
suffix,
) = self.token {
let suffix = suffix.and_then(|s| {
let s = s.as_str().get();
if ["f32", "f64"].contains(&s) {
Some(s)
let s = s.as_str();
if s == "f32" {
Some("f32")
} else if s == "f64" {
Some("f64")
} else {
None
}

View File

@ -645,7 +645,7 @@ pub trait PrintState<'a> {
ast::LitKind::Float(ref f, t) => {
self.writer().word(format!("{}{}", &f, t.ty_to_string()))
}
ast::LitKind::FloatUnsuffixed(ref f) => self.writer().word(f.as_str().get()),
ast::LitKind::FloatUnsuffixed(ref f) => self.writer().word(f.as_str().to_string()),
ast::LitKind::Bool(val) => {
if val { self.writer().word("true") } else { self.writer().word("false") }
}
@ -731,7 +731,7 @@ pub trait PrintState<'a> {
if segment.ident.name == keywords::DollarCrate.name() {
self.print_dollar_crate(segment.ident)?;
} else {
self.writer().word(segment.ident.as_str().get())?;
self.writer().word(segment.ident.as_str().to_string())?;
}
}
}
@ -749,7 +749,7 @@ pub trait PrintState<'a> {
}
self.maybe_print_comment(attr.span.lo())?;
if attr.is_sugared_doc {
self.writer().word(attr.value_str().unwrap().as_str().get())?;
self.writer().word(attr.value_str().unwrap().as_str().to_string())?;
self.writer().hardbreak()
} else {
match attr.style {
@ -858,7 +858,7 @@ pub trait PrintState<'a> {
if !ast::Ident::with_empty_ctxt(name).is_path_segment_keyword() {
self.writer().word("::")?;
}
self.writer().word(name.as_str().get())
self.writer().word(name.as_str().to_string())
}
}
@ -1300,7 +1300,7 @@ impl<'a> State<'a> {
}
ast::ItemKind::GlobalAsm(ref ga) => {
self.head(visibility_qualified(&item.vis, "global_asm!"))?;
self.s.word(ga.asm.as_str().get())?;
self.s.word(ga.asm.as_str().to_string())?;
self.end()?;
}
ast::ItemKind::Ty(ref ty, ref generics) => {
@ -2437,7 +2437,7 @@ impl<'a> State<'a> {
if ident.is_raw_guess() {
self.s.word(format!("r#{}", ident))?;
} else {
self.s.word(ident.as_str().get())?;
self.s.word(ident.as_str().to_string())?;
}
self.ann.post(self, AnnNode::Ident(&ident))
}
@ -2447,7 +2447,7 @@ impl<'a> State<'a> {
}
pub fn print_name(&mut self, name: ast::Name) -> io::Result<()> {
self.s.word(name.as_str().get())?;
self.s.word(name.as_str().to_string())?;
self.ann.post(self, AnnNode::Name(&name))
}

View File

@ -336,11 +336,11 @@ impl Ident {
}
}
fn new(sym: Symbol, is_raw: bool, span: Span) -> Ident {
let string = sym.as_str().get();
if !Self::is_valid(string) {
let string = sym.as_str();
if !Self::is_valid(&string) {
panic!("`{:?}` is not a valid identifier", string)
}
if is_raw && !ast::Ident::from_str(string).can_be_raw() {
if is_raw && !ast::Ident::from_interned_str(sym.as_interned_str()).can_be_raw() {
panic!("`{}` cannot be a raw identifier", string);
}
Ident { sym, is_raw, span }

View File

@ -524,7 +524,11 @@ impl LocalInternedString {
}
}
pub fn get(&self) -> &'static str {
pub fn get(&self) -> &str {
// This returns a valid string since we ensure that `self` outlives the interner
// by creating the interner on a thread which outlives threads which can access it.
// This type cannot move to a thread which outlives the interner since it does
// not implement Send.
self.string
}
}