From 54b2cad8b341434c7c0edb153a0fa662fb2981f1 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Wed, 23 Jan 2013 11:43:58 -0800 Subject: libsyntax: Remove `fn() unsafe { ... }`. r=graydon --- src/libsyntax/parse/lexer.rs | 12 +++++++----- src/libsyntax/parse/obsolete.rs | 7 ++++++- src/libsyntax/parse/parser.rs | 8 +++++--- 3 files changed, 18 insertions(+), 9 deletions(-) (limited to 'src/libsyntax/parse') diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index 573c36e619b..1574a037a46 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -157,11 +157,13 @@ fn byte_offset(rdr: string_reader) -> BytePos { (rdr.pos - rdr.filemap.start_pos) } -fn get_str_from(rdr: string_reader, start: BytePos) -> ~str unsafe { - // I'm pretty skeptical about this subtraction. What if there's a - // multi-byte character before the mark? - return str::slice(*rdr.src, start.to_uint() - 1u, - byte_offset(rdr).to_uint() - 1u); +fn get_str_from(rdr: string_reader, start: BytePos) -> ~str { + unsafe { + // I'm pretty skeptical about this subtraction. What if there's a + // multi-byte character before the mark? + return str::slice(*rdr.src, start.to_uint() - 1u, + byte_offset(rdr).to_uint() - 1u); + } } fn bump(rdr: string_reader) { diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs index 15905c090db..67f6c4bed3f 100644 --- a/src/libsyntax/parse/obsolete.rs +++ b/src/libsyntax/parse/obsolete.rs @@ -44,7 +44,8 @@ pub enum ObsoleteSyntax { ObsoletePrivSection, ObsoleteModeInFnType, ObsoleteMoveInit, - ObsoleteBinaryMove + ObsoleteBinaryMove, + ObsoleteUnsafeBlock } impl ObsoleteSyntax : cmp::Eq { @@ -118,6 +119,10 @@ impl Parser { ObsoleteBinaryMove => ( "binary move", "Write `foo = move bar` instead" + ), + ObsoleteUnsafeBlock => ( + "non-standalone unsafe block", + "use an inner `unsafe { ... }` block instead" ) }; diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index e1fc23276bc..4b8aa5c3f31 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -69,6 +69,7 @@ use parse::obsolete::{ObsoleteLet, ObsoleteFieldTerminator}; use parse::obsolete::{ObsoleteMoveInit, ObsoleteBinaryMove}; use parse::obsolete::{ObsoleteStructCtor, ObsoleteWith, ObsoleteClassMethod}; use parse::obsolete::{ObsoleteSyntax, ObsoleteLowerCaseKindBounds}; +use parse::obsolete::{ObsoleteUnsafeBlock}; use parse::prec::{as_prec, token_to_binop}; use parse::token::{can_begin_expr, is_ident, is_ident_or_path}; use parse::token::{is_plain_ident, INTERPOLATED, special_idents}; @@ -2336,12 +2337,13 @@ impl Parser { } let lo = self.span.lo; - let us = self.eat_keyword(~"unsafe"); + if self.eat_keyword(~"unsafe") { + self.obsolete(copy self.span, ObsoleteUnsafeBlock); + } self.expect(token::LBRACE); let {inner: move inner, next: move next} = maybe_parse_inner_attrs_and_next(self, parse_attrs); - let blk_check_mode = if us { unsafe_blk } else { default_blk }; - return (inner, self.parse_block_tail_(lo, blk_check_mode, next)); + return (inner, self.parse_block_tail_(lo, default_blk, next)); } fn parse_block_no_value() -> blk { -- cgit 1.4.1-3-g733a5