diff options
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/obsolete.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/parse/token.rs | 9 |
3 files changed, 14 insertions, 5 deletions
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 04c73ce71d0..46f1f33143e 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -44,6 +44,7 @@ pub enum ObsoleteSyntax { ObsoleteMultipleImport, ObsoleteExternModAttributesInParens, ObsoleteManagedPattern, + ObsoleteManagedString, } impl to_bytes::IterBytes for ObsoleteSyntax { @@ -149,6 +150,10 @@ impl ParserObsoleteMethods for Parser { "use a nested `match` expression instead of a managed box \ pattern" ), + ObsoleteManagedString => ( + "managed string", + "use `Rc<~str>` instead of a managed string" + ), }; self.report(sp, kind, kind_str, desc); diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index dc16f32b872..fb679fa0460 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2295,7 +2295,10 @@ impl Parser { ex = match e.node { ExprVec(..) | ExprRepeat(..) => ExprVstore(e, ExprVstoreBox), - ExprLit(lit) if lit_is_str(lit) => ExprVstore(e, ExprVstoreBox), + ExprLit(lit) if lit_is_str(lit) => { + self.obsolete(self.last_span, ObsoleteManagedString); + ExprVstore(e, ExprVstoreBox) + } _ => self.mk_unary(UnBox, e) }; } diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index eb2fa151f51..fa53f021cdb 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -544,8 +544,8 @@ pub fn get_ident_interner() -> @IdentInterner { /// interner lives for the life of the task, this can be safely treated as an /// immortal string, as long as it never crosses between tasks. /// -/// XXX(pcwalton): You must be careful about what you do in the destructors of -/// objects stored in TLS, because they may run after the interner is +/// FIXME(pcwalton): You must be careful about what you do in the destructors +/// of objects stored in TLS, because they may run after the interner is /// destroyed. In particular, they must not access string contents. This can /// be fixed in the future by just leaking all strings until task death /// somehow. @@ -585,8 +585,9 @@ impl InternedString { impl BytesContainer for InternedString { fn container_as_bytes<'a>(&'a self) -> &'a [u8] { - // XXX(pcwalton): This is a workaround for the incorrect signature of - // `BytesContainer`, which is itself a workaround for the lack of DST. + // FIXME(pcwalton): This is a workaround for the incorrect signature + // of `BytesContainer`, which is itself a workaround for the lack of + // DST. unsafe { let this = self.get(); cast::transmute(this.container_as_bytes()) |
