diff options
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/diagnostic.rs | 63 | ||||
| -rw-r--r-- | src/libsyntax/ext/base.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/ext/build.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/encodable.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/ty.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 140 | ||||
| -rw-r--r-- | src/libsyntax/ext/trace_macros.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/macro_parser.rs | 20 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 14 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/transcribe.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/fold.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/parse/comments.rs | 36 | ||||
| -rw-r--r-- | src/libsyntax/parse/lexer.rs | 100 | ||||
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 31 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 35 | ||||
| -rw-r--r-- | src/libsyntax/util/parser_testing.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 2 |
19 files changed, 181 insertions, 310 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 69c886e79ce..ca876054fa8 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -964,7 +964,6 @@ pub enum ExplicitSelf_ { SelfStatic, // no self SelfValue, // `self` SelfRegion(Option<Lifetime>, Mutability), // `&'lt self`, `&'lt mut self` - SelfBox, // `@self` SelfUniq // `~self` } @@ -1231,6 +1230,6 @@ mod test { }, }; // doesn't matter which encoder we use.... - let _f = (@e as @serialize::Encodable<extra::json::Encoder>); + let _f = (&e as &serialize::Encodable<extra::json::Encoder>); } } diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index 5b3b436a6fc..3f6540570b0 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -24,10 +24,8 @@ static BUG_REPORT_URL: &'static str = static MAX_LINES: uint = 6u; pub trait Emitter { - fn emit(&self, - cmsp: Option<(&codemap::CodeMap, Span)>, - msg: &str, - lvl: Level); + fn emit(&self, cmsp: Option<(&codemap::CodeMap, Span)>, + msg: &str, lvl: Level); fn custom_emit(&self, cm: &codemap::CodeMap, sp: Span, msg: &str, lvl: Level); } @@ -46,30 +44,30 @@ pub struct SpanHandler { } impl SpanHandler { - pub fn span_fatal(@self, sp: Span, msg: &str) -> ! { + pub fn span_fatal(&self, sp: Span, msg: &str) -> ! { self.handler.emit(Some((&*self.cm, sp)), msg, Fatal); fail!(FatalError); } - pub fn span_err(@self, sp: Span, msg: &str) { + pub fn span_err(&self, sp: Span, msg: &str) { self.handler.emit(Some((&*self.cm, sp)), msg, Error); self.handler.bump_err_count(); } - pub fn span_warn(@self, sp: Span, msg: &str) { + pub fn span_warn(&self, sp: Span, msg: &str) { self.handler.emit(Some((&*self.cm, sp)), msg, Warning); } - pub fn span_note(@self, sp: Span, msg: &str) { + pub fn span_note(&self, sp: Span, msg: &str) { self.handler.emit(Some((&*self.cm, sp)), msg, Note); } - pub fn span_end_note(@self, sp: Span, msg: &str) { + pub fn span_end_note(&self, sp: Span, msg: &str) { self.handler.custom_emit(&*self.cm, sp, msg, Note); } - pub fn span_bug(@self, sp: Span, msg: &str) -> ! { + pub fn span_bug(&self, sp: Span, msg: &str) -> ! { self.span_fatal(sp, ice_msg(msg)); } - pub fn span_unimpl(@self, sp: Span, msg: &str) -> ! { + pub fn span_unimpl(&self, sp: Span, msg: &str) -> ! { self.span_bug(sp, ~"unimplemented " + msg); } - pub fn handler(@self) -> @Handler { + pub fn handler(&self) -> @Handler { self.handler } } @@ -79,28 +77,28 @@ impl SpanHandler { // others log errors for later reporting. pub struct Handler { err_count: Cell<uint>, - emit: @Emitter, + emit: DefaultEmitter, } impl Handler { - pub fn fatal(@self, msg: &str) -> ! { + pub fn fatal(&self, msg: &str) -> ! { self.emit.emit(None, msg, Fatal); fail!(FatalError); } - pub fn err(@self, msg: &str) { + pub fn err(&self, msg: &str) { self.emit.emit(None, msg, Error); self.bump_err_count(); } - pub fn bump_err_count(@self) { + pub fn bump_err_count(&self) { self.err_count.set(self.err_count.get() + 1u); } - pub fn err_count(@self) -> uint { + pub fn err_count(&self) -> uint { self.err_count.get() } - pub fn has_errors(@self) -> bool { + pub fn has_errors(&self) -> bool { self.err_count.get()> 0u } - pub fn abort_if_errors(@self) { + pub fn abort_if_errors(&self) { let s; match self.err_count.get() { 0u => return, @@ -112,25 +110,25 @@ impl Handler { } self.fatal(s); } - pub fn warn(@self, msg: &str) { + pub fn warn(&self, msg: &str) { self.emit.emit(None, msg, Warning); } - pub fn note(@self, msg: &str) { + pub fn note(&self, msg: &str) { self.emit.emit(None, msg, Note); } - pub fn bug(@self, msg: &str) -> ! { + pub fn bug(&self, msg: &str) -> ! { self.fatal(ice_msg(msg)); } - pub fn unimpl(@self, msg: &str) -> ! { + pub fn unimpl(&self, msg: &str) -> ! { self.bug(~"unimplemented " + msg); } - pub fn emit(@self, - cmsp: Option<(&codemap::CodeMap, Span)>, - msg: &str, - lvl: Level) { + pub fn emit(&self, + cmsp: Option<(&codemap::CodeMap, Span)>, + msg: &str, + lvl: Level) { self.emit.emit(cmsp, msg, lvl); } - pub fn custom_emit(@self, cm: &codemap::CodeMap, + pub fn custom_emit(&self, cm: &codemap::CodeMap, sp: Span, msg: &str, lvl: Level) { self.emit.custom_emit(cm, sp, msg, lvl); } @@ -149,15 +147,10 @@ pub fn mk_span_handler(handler: @Handler, cm: @codemap::CodeMap) } } -pub fn mk_handler(emitter: Option<@Emitter>) -> @Handler { - let emit: @Emitter = match emitter { - Some(e) => e, - None => @DefaultEmitter as @Emitter - }; - +pub fn mk_handler() -> @Handler { @Handler { err_count: Cell::new(0), - emit: emit, + emit: DefaultEmitter, } } diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index 08098b71ce4..800eda64d51 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -105,7 +105,7 @@ pub trait AnyMacro { pub enum MacResult { MRExpr(@ast::Expr), MRItem(@ast::Item), - MRAny(@AnyMacro), + MRAny(~AnyMacro:), MRDef(MacroDef), } impl MacResult { diff --git a/src/libsyntax/ext/build.rs b/src/libsyntax/ext/build.rs index c5ee1948466..e41decbd8ef 100644 --- a/src/libsyntax/ext/build.rs +++ b/src/libsyntax/ext/build.rs @@ -56,7 +56,6 @@ pub trait AstBuilder { lifetime: Option<ast::Lifetime>, mutbl: ast::Mutability) -> P<ast::Ty>; fn ty_uniq(&self, span: Span, ty: P<ast::Ty>) -> P<ast::Ty>; - fn ty_box(&self, span: Span, ty: P<ast::Ty>) -> P<ast::Ty>; fn ty_option(&self, ty: P<ast::Ty>) -> P<ast::Ty>; fn ty_infer(&self, sp: Span) -> P<ast::Ty>; @@ -329,10 +328,6 @@ impl<'a> AstBuilder for ExtCtxt<'a> { self.ty(span, ast::TyUniq(ty)) } - fn ty_box(&self, span: Span, ty: P<ast::Ty>) -> P<ast::Ty> { - self.ty(span, ast::TyBox(ty)) - } - fn ty_option(&self, ty: P<ast::Ty>) -> P<ast::Ty> { self.ty_path( self.path_all(DUMMY_SP, diff --git a/src/libsyntax/ext/deriving/encodable.rs b/src/libsyntax/ext/deriving/encodable.rs index 66b744ecbcb..a44e4af5b6b 100644 --- a/src/libsyntax/ext/deriving/encodable.rs +++ b/src/libsyntax/ext/deriving/encodable.rs @@ -75,7 +75,7 @@ would yield functions like: } */ -use ast::{MetaItem, Item, Expr, MutImmutable, MutMutable}; +use ast::{MetaItem, Item, Expr, MutMutable}; use codemap::Span; use ext::base::ExtCtxt; use ext::build::AstBuilder; @@ -100,7 +100,7 @@ pub fn expand_deriving_encodable(cx: &ExtCtxt, MethodDef { name: "encode", generics: LifetimeBounds::empty(), - explicit_self: Some(Some(Borrowed(None, MutImmutable))), + explicit_self: borrowed_explicit_self(), args: ~[Ptr(~Literal(Path::new_local("__E")), Borrowed(None, MutMutable))], ret_ty: nil_ty(), diff --git a/src/libsyntax/ext/deriving/ty.rs b/src/libsyntax/ext/deriving/ty.rs index 893a1c68426..f37abbe1ef4 100644 --- a/src/libsyntax/ext/deriving/ty.rs +++ b/src/libsyntax/ext/deriving/ty.rs @@ -24,7 +24,6 @@ use opt_vec::OptVec; /// The types of pointers pub enum PtrTy<'a> { Send, // ~ - Managed, // @ Borrowed(Option<&'a str>, ast::Mutability), // &['lifetime] [mut] } @@ -138,9 +137,6 @@ impl<'a> Ty<'a> { Send => { cx.ty_uniq(span, raw_ty) } - Managed => { - cx.ty_box(span, raw_ty) - } Borrowed(ref lt, mutbl) => { let lt = mk_lifetime(cx, span, lt); cx.ty_rptr(span, raw_ty, lt, mutbl) @@ -251,7 +247,6 @@ pub fn get_explicit_self(cx: &ExtCtxt, span: Span, self_ptr: &Option<PtrTy>) span, match *ptr { Send => ast::SelfUniq, - Managed => ast::SelfBox, Borrowed(ref lt, mutbl) => { let lt = lt.map(|s| cx.lifetime(span, cx.ident_of(s))); ast::SelfRegion(lt, mutbl) diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 76aa0e981bd..5dc16b9b6b6 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use ast::{P, Block, Crate, DeclLocal, ExprMac, SyntaxContext}; +use ast::{P, Block, Crate, DeclLocal, ExprMac}; use ast::{Local, Ident, MacInvocTT}; use ast::{ItemMac, Mrk, Stmt, StmtDecl, StmtMac, StmtExpr, StmtSemi}; use ast::{TokenTree}; @@ -134,7 +134,7 @@ pub fn expand_expr(e: @ast::Expr, fld: &mut MacroExpander) -> @ast::Expr { // Desugar expr_for_loop // From: `['<ident>:] for <src_pat> in <src_expr> <src_loop_block>` - // FIXME #6993 : change type of opt_ident to Option<Name> + // FIXME #6993: change type of opt_ident to Option<Name> ast::ExprForLoop(src_pat, src_expr, src_loop_block, opt_ident) => { // Expand any interior macros etc. // NB: we don't fold pats yet. Curious. @@ -818,59 +818,16 @@ pub fn expand_crate(parse_sess: @parse::ParseSess, // element that has one. a CtxtFn is a trait-ified // version of a closure in (SyntaxContext -> SyntaxContext). // the ones defined here include: -// Renamer - add a rename to a context -// MultiRenamer - add a set of renames to a context // Marker - add a mark to a context -// Repainter - replace a context (maybe Replacer would be a better name?) -// a function in SyntaxContext -> SyntaxContext -pub trait CtxtFn{ - fn f(&self, ast::SyntaxContext) -> ast::SyntaxContext; -} - -// a renamer adds a rename to the syntax context -pub struct Renamer { - from : ast::Ident, - to : ast::Name -} +// A Marker adds the given mark to the syntax context +struct Marker { mark: Mrk } -impl CtxtFn for Renamer { - fn f(&self, ctxt : ast::SyntaxContext) -> ast::SyntaxContext { - new_rename(self.from,self.to,ctxt) - } -} - -// a marker adds the given mark to the syntax context -pub struct Marker { mark : Mrk } - -impl CtxtFn for Marker { - fn f(&self, ctxt : ast::SyntaxContext) -> ast::SyntaxContext { - new_mark(self.mark,ctxt) - } -} - -// a repainter just replaces the given context with the one it's closed over -pub struct Repainter { ctxt : SyntaxContext } - -impl CtxtFn for Repainter { - fn f(&self, _ctxt : ast::SyntaxContext) -> ast::SyntaxContext { - self.ctxt - } -} - -pub struct ContextWrapper { - context_function: @CtxtFn, -} - -impl Folder for ContextWrapper { +impl Folder for Marker { fn fold_ident(&mut self, id: ast::Ident) -> ast::Ident { - let ast::Ident { - name, - ctxt - } = id; ast::Ident { - name: name, - ctxt: self.context_function.f(ctxt), + name: id.name, + ctxt: new_mark(self.mark, id.ctxt) } } fn fold_mac(&mut self, m: &ast::Mac) -> ast::Mac { @@ -878,7 +835,7 @@ impl Folder for ContextWrapper { MacInvocTT(ref path, ref tts, ctxt) => { MacInvocTT(self.fold_path(path), fold_tts(*tts, self), - self.context_function.f(ctxt)) + new_mark(self.mark, ctxt)) } }; Spanned { @@ -888,50 +845,32 @@ impl Folder for ContextWrapper { } } -// given a function from ctxts to ctxts, produce -// a Folder that applies that function to all ctxts: -pub fn fun_to_ctxt_folder<T : 'static + CtxtFn>(cf: @T) -> ContextWrapper { - ContextWrapper { - context_function: cf as @CtxtFn, - } -} - // just a convenience: -pub fn new_mark_folder(m: Mrk) -> ContextWrapper { - fun_to_ctxt_folder(@Marker{mark:m}) -} - -pub fn new_rename_folder(from: ast::Ident, to: ast::Name) -> ContextWrapper { - fun_to_ctxt_folder(@Renamer{from:from,to:to}) +fn new_mark_folder(m: Mrk) -> Marker { + Marker {mark: m} } // apply a given mark to the given token trees. Used prior to expansion of a macro. -fn mark_tts(tts : &[TokenTree], m : Mrk) -> ~[TokenTree] { +fn mark_tts(tts: &[TokenTree], m: Mrk) -> ~[TokenTree] { fold_tts(tts, &mut new_mark_folder(m)) } // apply a given mark to the given expr. Used following the expansion of a macro. -fn mark_expr(expr : @ast::Expr, m : Mrk) -> @ast::Expr { +fn mark_expr(expr: @ast::Expr, m: Mrk) -> @ast::Expr { new_mark_folder(m).fold_expr(expr) } // apply a given mark to the given stmt. Used following the expansion of a macro. -fn mark_stmt(expr : &ast::Stmt, m : Mrk) -> @ast::Stmt { +fn mark_stmt(expr: &ast::Stmt, m: Mrk) -> @ast::Stmt { new_mark_folder(m).fold_stmt(expr) .expect_one("marking a stmt didn't return a stmt") } // apply a given mark to the given item. Used following the expansion of a macro. -fn mark_item(expr : @ast::Item, m : Mrk) -> SmallVector<@ast::Item> { +fn mark_item(expr: @ast::Item, m: Mrk) -> SmallVector<@ast::Item> { new_mark_folder(m).fold_item(expr) } -// replace all contexts in a given expr with the given mark. Used -// for capturing macros -pub fn replace_ctxts(expr : @ast::Expr, ctxt : SyntaxContext) -> @ast::Expr { - fun_to_ctxt_folder(@Repainter{ctxt:ctxt}).fold_expr(expr) -} - fn original_span(cx: &ExtCtxt) -> @codemap::ExpnInfo { let mut relevant_info = cx.backtrace(); let mut einfo = relevant_info.unwrap(); @@ -1025,7 +964,7 @@ mod test { #[test] fn macros_cant_escape_fns_test () { let src = ~"fn bogus() {macro_rules! z (() => (3+4))}\ fn inty() -> int { z!() }"; - let sess = parse::new_parse_sess(None); + let sess = parse::new_parse_sess(); let crate_ast = parse::parse_crate_from_source_str( ~"<test>", src, @@ -1040,7 +979,7 @@ mod test { #[test] fn macros_cant_escape_mods_test () { let src = ~"mod foo {macro_rules! z (() => (3+4))}\ fn inty() -> int { z!() }"; - let sess = parse::new_parse_sess(None); + let sess = parse::new_parse_sess(); let crate_ast = parse::parse_crate_from_source_str( ~"<test>", src, @@ -1054,7 +993,7 @@ mod test { #[test] fn macros_can_escape_flattened_mods_test () { let src = ~"#[macro_escape] mod foo {macro_rules! z (() => (3+4))}\ fn inty() -> int { z!() }"; - let sess = parse::new_parse_sess(None); + let sess = parse::new_parse_sess(); let crate_ast = parse::parse_crate_from_source_str( ~"<test>", src, @@ -1089,41 +1028,6 @@ mod test { } } - #[test] - fn renaming () { - let item_ast = string_to_crate(~"fn f() -> int { a }"); - let a_name = intern("a"); - let a2_name = gensym("a2"); - let mut renamer = new_rename_folder(ast::Ident{name:a_name,ctxt:EMPTY_CTXT}, - a2_name); - let renamed_ast = renamer.fold_crate(item_ast.clone()); - let mut path_finder = new_path_finder(~[]); - visit::walk_crate(&mut path_finder, &renamed_ast, ()); - - match path_finder.path_accumulator { - [ast::Path{segments:[ref seg],..}] => - assert_eq!(mtwt_resolve(seg.identifier),a2_name), - _ => assert_eq!(0,1) - } - - // try a double-rename, with pending_renames. - let a3_name = gensym("a3"); - // a context that renames from ("a",empty) to "a2" : - let ctxt2 = new_rename(ast::Ident::new(a_name),a2_name,EMPTY_CTXT); - let mut pending_renames = ~[ - (ast::Ident::new(a_name),a2_name), - (ast::Ident{name:a_name,ctxt:ctxt2},a3_name) - ]; - let double_renamed = renames_to_fold(&mut pending_renames).fold_crate(item_ast); - let mut path_finder = new_path_finder(~[]); - visit::walk_crate(&mut path_finder, &double_renamed, ()); - match path_finder.path_accumulator { - [ast::Path{segments:[ref seg],..}] => - assert_eq!(mtwt_resolve(seg.identifier),a3_name), - _ => assert_eq!(0,1) - } - } - //fn fake_print_crate(crate: &ast::Crate) { // let mut out = ~std::io::stderr() as ~std::io::Writer; // let mut s = pprust::rust_printer(out, get_ident_interner()); @@ -1142,7 +1046,7 @@ 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) -> ~str { //let resolved_ast = expand_and_resolve(crate_str); //pprust::to_str(&resolved_ast,fake_print_crate,get_ident_interner()) //} @@ -1175,12 +1079,12 @@ mod test { #[test] fn automatic_renaming () { - let tests : ~[RenamingTest] = + let tests: ~[RenamingTest] = ~[// b & c should get new names throughout, in the expr too: ("fn a() -> int { let b = 13; let c = b; b+c }", ~[~[0,1],~[2]], false), // both x's should be renamed (how is this causing a bug?) - ("fn main () {let x : int = 13;x;}", + ("fn main () {let x: int = 13;x;}", ~[~[0]], false), // the use of b after the + should be renamed, the other one not: ("macro_rules! f (($x:ident) => (b + $x)) fn a() -> int { let b = 13; f!(b)}", @@ -1300,7 +1204,7 @@ foo_module!() visit::walk_crate(&mut name_finder, &cr, ()); let bindings = name_finder.ident_accumulator; - let cxbinds : ~[&ast::Ident] = + let cxbinds: ~[&ast::Ident] = bindings.iter().filter(|b| { let string = token::get_ident(b.name); "xx" == string.get() @@ -1337,7 +1241,7 @@ foo_module!() { let table = table.table.borrow(); for (idx,val) in table.get().iter().enumerate() { - println!("{:4u} : {:?}",idx,val); + println!("{:4u}: {:?}",idx,val); } } } diff --git a/src/libsyntax/ext/trace_macros.rs b/src/libsyntax/ext/trace_macros.rs index 83c6c6a1762..4189ea6a967 100644 --- a/src/libsyntax/ext/trace_macros.rs +++ b/src/libsyntax/ext/trace_macros.rs @@ -25,8 +25,7 @@ pub fn expand_trace_macros(cx: &mut ExtCtxt, let tt_rdr = new_tt_reader(cx.parse_sess().span_diagnostic, None, tt.to_owned()); - let rdr = tt_rdr as @Reader; - let mut rust_parser = Parser(sess, cfg.clone(), rdr.dup()); + let mut rust_parser = Parser(sess, cfg.clone(), tt_rdr.dup()); if rust_parser.is_keyword(keywords::True) { cx.set_trace_macros(true); @@ -39,7 +38,7 @@ pub fn expand_trace_macros(cx: &mut ExtCtxt, rust_parser.bump(); - let mut rust_parser = Parser(sess, cfg, rdr.dup()); + let mut rust_parser = Parser(sess, cfg, tt_rdr.dup()); let result = rust_parser.parse_expr(); base::MRExpr(result) } diff --git a/src/libsyntax/ext/tt/macro_parser.rs b/src/libsyntax/ext/tt/macro_parser.rs index 6d1b8dd2358..a18f80ad4c9 100644 --- a/src/libsyntax/ext/tt/macro_parser.rs +++ b/src/libsyntax/ext/tt/macro_parser.rs @@ -202,11 +202,11 @@ pub enum ParseResult { Error(codemap::Span, ~str) } -pub fn parse_or_else(sess: @ParseSess, - cfg: ast::CrateConfig, - rdr: @Reader, - ms: ~[Matcher]) - -> HashMap<Ident, @NamedMatch> { +pub fn parse_or_else<R: Reader>(sess: @ParseSess, + cfg: ast::CrateConfig, + rdr: R, + ms: ~[Matcher]) + -> HashMap<Ident, @NamedMatch> { match parse(sess, cfg, rdr, ms) { Success(m) => m, Failure(sp, str) => sess.span_diagnostic.span_fatal(sp, str), @@ -223,11 +223,11 @@ pub fn token_name_eq(t1 : &Token, t2 : &Token) -> bool { } } -pub fn parse(sess: @ParseSess, - cfg: ast::CrateConfig, - rdr: @Reader, - ms: &[Matcher]) - -> ParseResult { +pub fn parse<R: Reader>(sess: @ParseSess, + cfg: ast::CrateConfig, + rdr: R, + ms: &[Matcher]) + -> ParseResult { let mut cur_eis = ~[]; cur_eis.push(initial_matcher_pos(ms.to_owned(), None, rdr.peek().sp.lo)); diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index c179e9959e0..e196bdccfe3 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -18,7 +18,7 @@ use ext::base; use ext::tt::macro_parser::{Success, Error, Failure}; use ext::tt::macro_parser::{NamedMatch, MatchedSeq, MatchedNonterminal}; use ext::tt::macro_parser::{parse, parse_or_else}; -use parse::lexer::{new_tt_reader, Reader}; +use parse::lexer::new_tt_reader; use parse::parser::Parser; use parse::attr::ParserAttr; use parse::token::{get_ident_interner, special_idents, gensym_ident}; @@ -129,8 +129,8 @@ fn generic_extension(cx: &ExtCtxt, for (i, lhs) in lhses.iter().enumerate() { // try each arm's matchers match **lhs { MatchedNonterminal(NtMatchers(ref mtcs)) => { - // `none` is because we're not interpolating - let arg_rdr = new_tt_reader(s_d, None, arg.to_owned()) as @Reader; + // `None` is because we're not interpolating + let arg_rdr = new_tt_reader(s_d, None, arg.to_owned()); match parse(cx.parse_sess(), cx.cfg(), arg_rdr, *mtcs) { Success(named_matches) => { let rhs = match *rhses[i] { @@ -150,12 +150,12 @@ fn generic_extension(cx: &ExtCtxt, // rhs has holes ( `$id` and `$(...)` that need filled) let trncbr = new_tt_reader(s_d, Some(named_matches), rhs); - let p = Parser(cx.parse_sess(), cx.cfg(), trncbr as @Reader); + let p = Parser(cx.parse_sess(), cx.cfg(), ~trncbr); // Let the context choose how to interpret the result. // Weird, but useful for X-macros. - return MRAny(@ParserAnyMacro { + return MRAny(~ParserAnyMacro { parser: RefCell::new(p), - } as @AnyMacro) + }) } Failure(sp, ref msg) => if sp.lo >= best_fail_spot.lo { best_fail_spot = sp; @@ -210,7 +210,7 @@ pub fn add_new_extension(cx: &mut ExtCtxt, arg.clone()); let argument_map = parse_or_else(cx.parse_sess(), cx.cfg(), - arg_reader as @Reader, + arg_reader, argument_gram); // Extract the arguments: diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs index d2fa24b1cfe..430bd02119a 100644 --- a/src/libsyntax/ext/tt/transcribe.rs +++ b/src/libsyntax/ext/tt/transcribe.rs @@ -49,8 +49,8 @@ pub struct TtReader { pub fn new_tt_reader(sp_diag: @SpanHandler, interp: Option<HashMap<Ident, @NamedMatch>>, src: ~[ast::TokenTree]) - -> @TtReader { - let r = @TtReader { + -> TtReader { + let r = TtReader { sp_diag: sp_diag, stack: RefCell::new(@TtFrame { forest: @src, @@ -69,7 +69,7 @@ pub fn new_tt_reader(sp_diag: @SpanHandler, cur_tok: RefCell::new(EOF), cur_span: RefCell::new(DUMMY_SP), }; - tt_next_token(r); /* get cur_tok and cur_span set up */ + tt_next_token(&r); /* get cur_tok and cur_span set up */ return r; } @@ -86,8 +86,8 @@ fn dup_tt_frame(f: @TtFrame) -> @TtFrame { } } -pub fn dup_tt_reader(r: @TtReader) -> @TtReader { - @TtReader { +pub fn dup_tt_reader(r: &TtReader) -> TtReader { + TtReader { sp_diag: r.sp_diag, stack: RefCell::new(dup_tt_frame(r.stack.get())), repeat_idx: r.repeat_idx.clone(), diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 297ec6acf51..8fbaea7ac1e 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -306,7 +306,7 @@ pub trait Folder { fn fold_explicit_self_(&mut self, es: &ExplicitSelf_) -> ExplicitSelf_ { match *es { - SelfStatic | SelfValue | SelfUniq | SelfBox => *es, + SelfStatic | SelfValue | SelfUniq => *es, SelfRegion(ref lifetime, m) => { SelfRegion(fold_opt_lifetime(lifetime, self), m) } diff --git a/src/libsyntax/parse/comments.rs b/src/libsyntax/parse/comments.rs index f65bc3ad7a3..77b047a63c3 100644 --- a/src/libsyntax/parse/comments.rs +++ b/src/libsyntax/parse/comments.rs @@ -134,7 +134,7 @@ pub fn strip_doc_comment_decoration(comment: &str) -> ~str { fail!("not a doc-comment: {}", comment); } -fn read_to_eol(rdr: @StringReader) -> ~str { +fn read_to_eol(rdr: &StringReader) -> ~str { let mut val = ~""; while rdr.curr.get() != '\n' && !is_eof(rdr) { val.push_char(rdr.curr.get()); @@ -144,21 +144,21 @@ fn read_to_eol(rdr: @StringReader) -> ~str { return val; } -fn read_one_line_comment(rdr: @StringReader) -> ~str { +fn read_one_line_comment(rdr: &StringReader) -> ~str { let val = read_to_eol(rdr); assert!((val[0] == '/' as u8 && val[1] == '/' as u8) || (val[0] == '#' as u8 && val[1] == '!' as u8)); return val; } -fn consume_non_eol_whitespace(rdr: @StringReader) { +fn consume_non_eol_whitespace(rdr: &StringReader) { while is_whitespace(rdr.curr.get()) && rdr.curr.get() != '\n' && !is_eof(rdr) { bump(rdr); } } -fn push_blank_line_comment(rdr: @StringReader, comments: &mut ~[Comment]) { +fn push_blank_line_comment(rdr: &StringReader, comments: &mut ~[Comment]) { debug!(">>> blank-line comment"); let v: ~[~str] = ~[]; comments.push(Comment { @@ -168,7 +168,7 @@ fn push_blank_line_comment(rdr: @StringReader, comments: &mut ~[Comment]) { }); } -fn consume_whitespace_counting_blank_lines(rdr: @StringReader, +fn consume_whitespace_counting_blank_lines(rdr: &StringReader, comments: &mut ~[Comment]) { while is_whitespace(rdr.curr.get()) && !is_eof(rdr) { if rdr.col.get() == CharPos(0u) && rdr.curr.get() == '\n' { @@ -179,7 +179,7 @@ fn consume_whitespace_counting_blank_lines(rdr: @StringReader, } -fn read_shebang_comment(rdr: @StringReader, code_to_the_left: bool, +fn read_shebang_comment(rdr: &StringReader, code_to_the_left: bool, comments: &mut ~[Comment]) { debug!(">>> shebang comment"); let p = rdr.last_pos.get(); @@ -191,7 +191,7 @@ fn read_shebang_comment(rdr: @StringReader, code_to_the_left: bool, }); } -fn read_line_comments(rdr: @StringReader, code_to_the_left: bool, +fn read_line_comments(rdr: &StringReader, code_to_the_left: bool, comments: &mut ~[Comment]) { debug!(">>> line comments"); let p = rdr.last_pos.get(); @@ -248,7 +248,7 @@ fn trim_whitespace_prefix_and_push_line(lines: &mut ~[~str], lines.push(s1); } -fn read_block_comment(rdr: @StringReader, +fn read_block_comment(rdr: &StringReader, code_to_the_left: bool, comments: &mut ~[Comment]) { debug!(">>> block comment"); @@ -279,7 +279,7 @@ fn read_block_comment(rdr: @StringReader, while level > 0 { debug!("=== block comment level {}", level); if is_eof(rdr) { - (rdr as @Reader).fatal(~"unterminated block comment"); + rdr.fatal(~"unterminated block comment"); } if rdr.curr.get() == '\n' { trim_whitespace_prefix_and_push_line(&mut lines, curr_line, @@ -317,13 +317,13 @@ fn read_block_comment(rdr: @StringReader, comments.push(Comment {style: style, lines: lines, pos: p}); } -fn peeking_at_comment(rdr: @StringReader) -> bool { +fn peeking_at_comment(rdr: &StringReader) -> bool { return ((rdr.curr.get() == '/' && nextch(rdr) == '/') || (rdr.curr.get() == '/' && nextch(rdr) == '*')) || (rdr.curr.get() == '#' && nextch(rdr) == '!'); } -fn consume_comment(rdr: @StringReader, +fn consume_comment(rdr: &StringReader, code_to_the_left: bool, comments: &mut ~[Comment]) { debug!(">>> consume comment"); @@ -359,17 +359,17 @@ pub fn gather_comments_and_literals(span_diagnostic: let mut comments: ~[Comment] = ~[]; let mut literals: ~[Literal] = ~[]; let mut first_read: bool = true; - while !is_eof(rdr) { + while !is_eof(&rdr) { loop { let mut code_to_the_left = !first_read; - consume_non_eol_whitespace(rdr); + consume_non_eol_whitespace(&rdr); if rdr.curr.get() == '\n' { code_to_the_left = false; - consume_whitespace_counting_blank_lines(rdr, &mut comments); + consume_whitespace_counting_blank_lines(&rdr, &mut comments); } - while peeking_at_comment(rdr) { - consume_comment(rdr, code_to_the_left, &mut comments); - consume_whitespace_counting_blank_lines(rdr, &mut comments); + while peeking_at_comment(&rdr) { + consume_comment(&rdr, code_to_the_left, &mut comments); + consume_whitespace_counting_blank_lines(&rdr, &mut comments); } break; } @@ -380,7 +380,7 @@ pub fn gather_comments_and_literals(span_diagnostic: //discard, and look ahead; we're working with internal state let TokenAndSpan {tok: tok, sp: sp} = rdr.peek(); if token::is_lit(&tok) { - with_str_from(rdr, bstart, |s| { + with_str_from(&rdr, bstart, |s| { debug!("tok lit: {}", s); literals.push(Literal {lit: s.to_owned(), pos: sp.lo}); }) diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index 8c55990289a..1bcff324e08 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -12,8 +12,7 @@ use ast; use codemap::{BytePos, CharPos, CodeMap, Pos, Span}; use codemap; use diagnostic::SpanHandler; -use ext::tt::transcribe::{tt_next_token}; -use ext::tt::transcribe::{dup_tt_reader}; +use ext::tt::transcribe::{dup_tt_reader, tt_next_token}; use parse::token; use parse::token::{str_to_ident}; @@ -26,12 +25,12 @@ use std::util; pub use ext::tt::transcribe::{TtReader, new_tt_reader}; pub trait Reader { - fn is_eof(@self) -> bool; - fn next_token(@self) -> TokenAndSpan; - fn fatal(@self, ~str) -> !; - fn span_diag(@self) -> @SpanHandler; - fn peek(@self) -> TokenAndSpan; - fn dup(@self) -> @Reader; + fn is_eof(&self) -> bool; + fn next_token(&self) -> TokenAndSpan; + fn fatal(&self, ~str) -> !; + fn span_diag(&self) -> @SpanHandler; + fn peek(&self) -> TokenAndSpan; + fn dup(&self) -> ~Reader:; } #[deriving(Clone, Eq)] @@ -58,19 +57,19 @@ pub struct StringReader { pub fn new_string_reader(span_diagnostic: @SpanHandler, filemap: @codemap::FileMap) - -> @StringReader { + -> StringReader { let r = new_low_level_string_reader(span_diagnostic, filemap); - string_advance_token(r); /* fill in peek_* */ - return r; + string_advance_token(&r); /* fill in peek_* */ + r } /* For comments.rs, which hackily pokes into 'pos' and 'curr' */ pub fn new_low_level_string_reader(span_diagnostic: @SpanHandler, filemap: @codemap::FileMap) - -> @StringReader { + -> StringReader { // Force the initial reader bump to start on a fresh line let initial_char = '\n'; - let r = @StringReader { + let r = StringReader { span_diagnostic: span_diagnostic, pos: Cell::new(filemap.start_pos), last_pos: Cell::new(filemap.start_pos), @@ -81,15 +80,15 @@ pub fn new_low_level_string_reader(span_diagnostic: @SpanHandler, peek_tok: RefCell::new(token::EOF), peek_span: RefCell::new(codemap::DUMMY_SP), }; - bump(r); - return r; + bump(&r); + r } // duplicating the string reader is probably a bad idea, in // that using them will cause interleaved pushes of line // offsets to the underlying filemap... -fn dup_string_reader(r: @StringReader) -> @StringReader { - @StringReader { +fn dup_string_reader(r: &StringReader) -> StringReader { + StringReader { span_diagnostic: r.span_diagnostic, pos: Cell::new(r.pos.get()), last_pos: Cell::new(r.last_pos.get()), @@ -102,9 +101,9 @@ fn dup_string_reader(r: @StringReader) -> @StringReader { } impl Reader for StringReader { - fn is_eof(@self) -> bool { is_eof(self) } + fn is_eof(&self) -> bool { is_eof(self) } // return the next token. EFFECT: advances the string_reader. - fn next_token(@self) -> TokenAndSpan { + fn next_token(&self) -> TokenAndSpan { let ret_val = { let mut peek_tok = self.peek_tok.borrow_mut(); TokenAndSpan { @@ -115,45 +114,45 @@ impl Reader for StringReader { string_advance_token(self); ret_val } - fn fatal(@self, m: ~str) -> ! { + fn fatal(&self, m: ~str) -> ! { self.span_diagnostic.span_fatal(self.peek_span.get(), m) } - fn span_diag(@self) -> @SpanHandler { self.span_diagnostic } - fn peek(@self) -> TokenAndSpan { + fn span_diag(&self) -> @SpanHandler { self.span_diagnostic } + fn peek(&self) -> TokenAndSpan { // FIXME(pcwalton): Bad copy! TokenAndSpan { tok: self.peek_tok.get(), sp: self.peek_span.get(), } } - fn dup(@self) -> @Reader { dup_string_reader(self) as @Reader } + fn dup(&self) -> ~Reader: { ~dup_string_reader(self) as ~Reader: } } impl Reader for TtReader { - fn is_eof(@self) -> bool { + fn is_eof(&self) -> bool { let cur_tok = self.cur_tok.borrow(); *cur_tok.get() == token::EOF } - fn next_token(@self) -> TokenAndSpan { + fn next_token(&self) -> TokenAndSpan { let r = tt_next_token(self); debug!("TtReader: r={:?}", r); return r; } - fn fatal(@self, m: ~str) -> ! { + fn fatal(&self, m: ~str) -> ! { self.sp_diag.span_fatal(self.cur_span.get(), m); } - fn span_diag(@self) -> @SpanHandler { self.sp_diag } - fn peek(@self) -> TokenAndSpan { + fn span_diag(&self) -> @SpanHandler { self.sp_diag } + fn peek(&self) -> TokenAndSpan { TokenAndSpan { tok: self.cur_tok.get(), sp: self.cur_span.get(), } } - fn dup(@self) -> @Reader { dup_tt_reader(self) as @Reader } + fn dup(&self) -> ~Reader: { ~dup_tt_reader(self) as ~Reader: } } // report a lexical error spanning [`from_pos`, `to_pos`) -fn fatal_span(rdr: @StringReader, +fn fatal_span(rdr: &StringReader, from_pos: BytePos, to_pos: BytePos, m: ~str) @@ -164,7 +163,7 @@ fn fatal_span(rdr: @StringReader, // report a lexical error spanning [`from_pos`, `to_pos`), appending an // escaped character to the error message -fn fatal_span_char(rdr: @StringReader, +fn fatal_span_char(rdr: &StringReader, from_pos: BytePos, to_pos: BytePos, m: ~str, @@ -178,7 +177,7 @@ fn fatal_span_char(rdr: @StringReader, // report a lexical error spanning [`from_pos`, `to_pos`), appending the // offending string to the error message -fn fatal_span_verbose(rdr: @StringReader, +fn fatal_span_verbose(rdr: &StringReader, from_pos: BytePos, to_pos: BytePos, m: ~str) @@ -194,7 +193,7 @@ fn fatal_span_verbose(rdr: @StringReader, // EFFECT: advance peek_tok and peek_span to refer to the next token. // EFFECT: update the interner, maybe. -fn string_advance_token(r: @StringReader) { +fn string_advance_token(r: &StringReader) { match consume_whitespace_and_comments(r) { Some(comment) => { r.peek_span.set(comment.sp); @@ -221,7 +220,7 @@ fn byte_offset(rdr: &StringReader, pos: BytePos) -> BytePos { /// up to but excluding `rdr.last_pos`, meaning the slice does not include /// the character `rdr.curr`. pub fn with_str_from<T>( - rdr: @StringReader, + rdr: &StringReader, start: BytePos, f: |s: &str| -> T) -> T { @@ -231,7 +230,7 @@ pub fn with_str_from<T>( /// Calls `f` with astring slice of the source text spanning from `start` /// up to but excluding `end`. fn with_str_from_to<T>( - rdr: @StringReader, + rdr: &StringReader, start: BytePos, end: BytePos, f: |s: &str| -> T) @@ -269,10 +268,10 @@ pub fn bump(rdr: &StringReader) { rdr.curr.set(unsafe { transmute(-1u32) }); // FIXME: #8971: unsound } } -pub fn is_eof(rdr: @StringReader) -> bool { +pub fn is_eof(rdr: &StringReader) -> bool { rdr.curr.get() == unsafe { transmute(-1u32) } // FIXME: #8971: unsound } -pub fn nextch(rdr: @StringReader) -> char { +pub fn nextch(rdr: &StringReader) -> char { let offset = byte_offset(rdr, rdr.pos.get()).to_uint(); if offset < (rdr.filemap.src).len() { return rdr.filemap.src.char_at(offset); @@ -303,7 +302,7 @@ fn is_hex_digit(c: char) -> bool { // EFFECT: eats whitespace and comments. // returns a Some(sugared-doc-attr) if one exists, None otherwise. -fn consume_whitespace_and_comments(rdr: @StringReader) +fn consume_whitespace_and_comments(rdr: &StringReader) -> Option<TokenAndSpan> { while is_whitespace(rdr.curr.get()) { bump(rdr); } return consume_any_line_comment(rdr); @@ -316,7 +315,7 @@ pub fn is_line_non_doc_comment(s: &str) -> bool { // PRECONDITION: rdr.curr is not whitespace // EFFECT: eats any kind of comment. // returns a Some(sugared-doc-attr) if one exists, None otherwise -fn consume_any_line_comment(rdr: @StringReader) +fn consume_any_line_comment(rdr: &StringReader) -> Option<TokenAndSpan> { if rdr.curr.get() == '/' { match nextch(rdr) { @@ -377,7 +376,7 @@ pub fn is_block_non_doc_comment(s: &str) -> bool { } // might return a sugared-doc-attr -fn consume_block_comment(rdr: @StringReader) -> Option<TokenAndSpan> { +fn consume_block_comment(rdr: &StringReader) -> Option<TokenAndSpan> { // block comments starting with "/**" or "/*!" are doc-comments let is_doc_comment = rdr.curr.get() == '*' || rdr.curr.get() == '!'; let start_bpos = rdr.pos.get() - BytePos(if is_doc_comment {3} else {2}); @@ -424,7 +423,7 @@ fn consume_block_comment(rdr: @StringReader) -> Option<TokenAndSpan> { if res.is_some() { res } else { consume_whitespace_and_comments(rdr) } } -fn scan_exponent(rdr: @StringReader, start_bpos: BytePos) -> Option<~str> { +fn scan_exponent(rdr: &StringReader, start_bpos: BytePos) -> Option<~str> { let mut c = rdr.curr.get(); let mut rslt = ~""; if c == 'e' || c == 'E' { @@ -445,7 +444,7 @@ fn scan_exponent(rdr: @StringReader, start_bpos: BytePos) -> Option<~str> { } else { return None::<~str>; } } -fn scan_digits(rdr: @StringReader, radix: uint) -> ~str { +fn scan_digits(rdr: &StringReader, radix: uint) -> ~str { let mut rslt = ~""; loop { let c = rdr.curr.get(); @@ -460,7 +459,7 @@ fn scan_digits(rdr: @StringReader, radix: uint) -> ~str { }; } -fn check_float_base(rdr: @StringReader, start_bpos: BytePos, last_bpos: BytePos, +fn check_float_base(rdr: &StringReader, start_bpos: BytePos, last_bpos: BytePos, base: uint) { match base { 16u => fatal_span(rdr, start_bpos, last_bpos, @@ -473,7 +472,7 @@ fn check_float_base(rdr: @StringReader, start_bpos: BytePos, last_bpos: BytePos, } } -fn scan_number(c: char, rdr: @StringReader) -> token::Token { +fn scan_number(c: char, rdr: &StringReader) -> token::Token { let mut num_str; let mut base = 10u; let mut c = c; @@ -599,7 +598,7 @@ fn scan_number(c: char, rdr: @StringReader) -> token::Token { } } -fn scan_numeric_escape(rdr: @StringReader, n_hex_digits: uint) -> char { +fn scan_numeric_escape(rdr: &StringReader, n_hex_digits: uint) -> char { let mut accum_int = 0; let mut i = n_hex_digits; let start_bpos = rdr.last_pos.get(); @@ -640,7 +639,7 @@ fn ident_continue(c: char) -> bool { // return the next token from the string // EFFECT: advances the input past that token // EFFECT: updates the interner -fn next_token_inner(rdr: @StringReader) -> token::Token { +fn next_token_inner(rdr: &StringReader) -> token::Token { let c = rdr.curr.get(); if ident_start(c) && nextch(rdr) != '"' && nextch(rdr) != '#' { // Note: r as in r" or r#" is part of a raw string literal, @@ -665,7 +664,7 @@ fn next_token_inner(rdr: @StringReader) -> token::Token { if is_dec_digit(c) { return scan_number(c, rdr); } - fn binop(rdr: @StringReader, op: token::BinOp) -> token::Token { + fn binop(rdr: &StringReader, op: token::BinOp) -> token::Token { bump(rdr); if rdr.curr.get() == '=' { bump(rdr); @@ -953,7 +952,7 @@ fn next_token_inner(rdr: @StringReader) -> token::Token { } } -fn consume_whitespace(rdr: @StringReader) { +fn consume_whitespace(rdr: &StringReader) { while is_whitespace(rdr.curr.get()) && !is_eof(rdr) { bump(rdr); } } @@ -968,15 +967,14 @@ mod test { // represents a testing reader (incl. both reader and interner) struct Env { - string_reader: @StringReader + string_reader: StringReader } // open a string reader for the given string fn setup(teststr: ~str) -> Env { let cm = CodeMap::new(); let fm = cm.new_filemap(~"zebra.rs", teststr); - let span_handler = - diagnostic::mk_span_handler(diagnostic::mk_handler(None),@cm); + let span_handler = diagnostic::mk_span_handler(diagnostic::mk_handler(), @cm); Env { string_reader: new_string_reader(span_handler,fm) } diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 050ff5cef32..6ddb4bbc11f 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -14,7 +14,7 @@ use ast; use codemap::{Span, CodeMap, FileMap}; use codemap; -use diagnostic::{SpanHandler, mk_span_handler, mk_handler, Emitter}; +use diagnostic::{SpanHandler, mk_span_handler, mk_handler}; use parse::attr::ParserAttr; use parse::parser::Parser; @@ -45,11 +45,11 @@ pub struct ParseSess { included_mod_stack: RefCell<~[Path]>, } -pub fn new_parse_sess(demitter: Option<@Emitter>) -> @ParseSess { +pub fn new_parse_sess() -> @ParseSess { let cm = @CodeMap::new(); @ParseSess { cm: cm, - span_diagnostic: mk_span_handler(mk_handler(demitter), cm), + span_diagnostic: mk_span_handler(mk_handler(), cm), included_mod_stack: RefCell::new(~[]), } } @@ -261,7 +261,7 @@ pub fn filemap_to_tts(sess: @ParseSess, filemap: @FileMap) // parsing tt's probably shouldn't require a parser at all. let cfg = ~[]; let srdr = lexer::new_string_reader(sess.span_diagnostic, filemap); - let mut p1 = Parser(sess, cfg, srdr as @lexer::Reader); + let mut p1 = Parser(sess, cfg, ~srdr); p1.parse_all_token_trees() } @@ -270,7 +270,7 @@ pub fn tts_to_parser(sess: @ParseSess, tts: ~[ast::TokenTree], cfg: ast::CrateConfig) -> Parser { let trdr = lexer::new_tt_reader(sess.span_diagnostic, None, tts); - Parser(sess, cfg, trdr as @lexer::Reader) + Parser(sess, cfg, ~trdr) } // abort if necessary diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index b80c222d4dc..e1cbdd12bd3 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -48,7 +48,7 @@ use ast::{RetStyle, Return, BiShl, BiShr, Stmt, StmtDecl}; use ast::{StmtExpr, StmtSemi, StmtMac, StructDef, StructField}; use ast::{StructVariantKind, BiSub}; use ast::StrStyle; -use ast::{SelfBox, SelfRegion, SelfStatic, SelfUniq, SelfValue}; +use ast::{SelfRegion, SelfStatic, SelfUniq, SelfValue}; use ast::{TokenTree, TraitMethod, TraitRef, TTDelim, TTSeq, TTTok}; use ast::{TTNonterminal, TupleVariantKind, Ty, Ty_, TyBot, TyBox}; use ast::{TypeField, TyFixedLengthVec, TyClosure, TyBareFn, TyTypeof}; @@ -285,7 +285,7 @@ struct ParsedItemsAndViewItems { /* ident is handled by common.rs */ -pub fn Parser(sess: @ParseSess, cfg: ast::CrateConfig, rdr: @Reader) +pub fn Parser(sess: @ParseSess, cfg: ast::CrateConfig, rdr: ~Reader:) -> Parser { let tok0 = rdr.next_token(); let interner = get_ident_interner(); @@ -339,7 +339,7 @@ pub struct Parser { tokens_consumed: uint, restriction: restriction, quote_depth: uint, // not (yet) related to the quasiquoter - reader: @Reader, + reader: ~Reader:, interner: @token::IdentInterner, /// The set of seen errors about obsolete syntax. Used to suppress /// extra detail when the same error is seen twice @@ -3580,19 +3580,6 @@ impl Parser { // that may have a self type. fn parse_fn_decl_with_self(&mut self, parse_arg_fn: |&mut Parser| -> Arg) -> (ExplicitSelf, P<FnDecl>) { - fn maybe_parse_explicit_self(explicit_self: ast::ExplicitSelf_, - p: &mut Parser) - -> ast::ExplicitSelf_ { - // We need to make sure it isn't a type - if p.look_ahead(1, |t| token::is_keyword(keywords::Self, t)) { - p.bump(); - p.expect_self_ident(); - explicit_self - } else { - SelfStatic - } - } - fn maybe_parse_borrowed_explicit_self(this: &mut Parser) -> ast::ExplicitSelf_ { // The following things are possible to see here: @@ -3650,11 +3637,15 @@ impl Parser { token::BINOP(token::AND) => { maybe_parse_borrowed_explicit_self(self) } - token::AT => { - maybe_parse_explicit_self(SelfBox, self) - } token::TILDE => { - maybe_parse_explicit_self(SelfUniq, self) + // We need to make sure it isn't a type + if self.look_ahead(1, |t| token::is_keyword(keywords::Self, t)) { + self.bump(); + self.expect_self_ident(); + SelfUniq + } else { + SelfStatic + } } token::IDENT(..) if self.is_self_ident() => { self.bump(); diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index e291583d121..7f7f57b13a9 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -35,11 +35,11 @@ use std::io; use std::io::MemWriter; // The &mut State is stored here to prevent recursive type. -pub enum AnnNode<'a,'b> { - NodeBlock(&'b mut State, &'a ast::Block), - NodeItem(&'b mut State, &'a ast::Item), - NodeExpr(&'b mut State, &'a ast::Expr), - NodePat(&'b mut State, &'a ast::Pat), +pub enum AnnNode<'a, 'b> { + NodeBlock(&'a mut State<'a>, &'b ast::Block), + NodeItem(&'a mut State<'a>, &'b ast::Item), + NodeExpr(&'a mut State<'a>, &'b ast::Expr), + NodePat(&'a mut State<'a>, &'b ast::Pat), } pub trait PpAnn { @@ -56,7 +56,7 @@ pub struct CurrentCommentAndLiteral { cur_lit: uint, } -pub struct State { +pub struct State<'a> { s: pp::Printer, cm: Option<@CodeMap>, intr: @token::IdentInterner, @@ -64,7 +64,7 @@ pub struct State { literals: Option<~[comments::Literal]>, cur_cmnt_and_lit: CurrentCommentAndLiteral, boxes: RefCell<~[pp::Breaks]>, - ann: @PpAnn + ann: &'a PpAnn } pub fn ibox(s: &mut State, u: uint) -> io::IoResult<()> { @@ -83,15 +83,15 @@ pub fn end(s: &mut State) -> io::IoResult<()> { pp::end(&mut s.s) } -pub fn rust_printer(writer: ~io::Writer, intr: @IdentInterner) -> State { - return rust_printer_annotated(writer, intr, @NoAnn as @PpAnn); +pub fn rust_printer(writer: ~io::Writer, intr: @IdentInterner) -> State<'static> { + rust_printer_annotated(writer, intr, &NoAnn) } -pub fn rust_printer_annotated(writer: ~io::Writer, - intr: @IdentInterner, - ann: @PpAnn) - -> State { - return State { +pub fn rust_printer_annotated<'a>(writer: ~io::Writer, + intr: @IdentInterner, + ann: &'a PpAnn) + -> State<'a> { + State { s: pp::mk_printer(writer, default_columns), cm: None, intr: intr, @@ -103,7 +103,7 @@ pub fn rust_printer_annotated(writer: ~io::Writer, }, boxes: RefCell::new(~[]), ann: ann - }; + } } pub static indent_unit: uint = 4u; @@ -120,7 +120,7 @@ pub fn print_crate(cm: @CodeMap, filename: ~str, input: &mut io::Reader, out: ~io::Writer, - ann: @PpAnn, + ann: &PpAnn, is_expanded: bool) -> io::IoResult<()> { let (cmnts, lits) = comments::gather_comments_and_literals( span_diagnostic, @@ -1844,9 +1844,6 @@ fn print_explicit_self(s: &mut State, if_ok!(print_mutability(s, m)); if_ok!(word(&mut s.s, "self")); } - ast::SelfBox => { - if_ok!(word(&mut s.s, "@self")); - } } return Ok(true); } diff --git a/src/libsyntax/util/parser_testing.rs b/src/libsyntax/util/parser_testing.rs index aa22f47221b..8c7ad028a8e 100644 --- a/src/libsyntax/util/parser_testing.rs +++ b/src/libsyntax/util/parser_testing.rs @@ -18,7 +18,7 @@ use parse::token; // map a string to tts, using a made-up filename: return both the TokenTree's // and the ParseSess pub fn string_to_tts_and_sess (source_str : ~str) -> (~[ast::TokenTree], @ParseSess) { - let ps = new_parse_sess(None); + let ps = new_parse_sess(); (filemap_to_tts(ps,string_to_filemap(ps,source_str,~"bogofile")),ps) } @@ -29,7 +29,7 @@ pub fn string_to_tts(source_str : ~str) -> ~[ast::TokenTree] { } pub fn string_to_parser_and_sess(source_str: ~str) -> (Parser,@ParseSess) { - let ps = new_parse_sess(None); + let ps = new_parse_sess(); (new_parser_from_source_str(ps,~[],~"bogofile",source_str),ps) } diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 2a6c14f0eae..0c6ecf73f6a 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -186,7 +186,7 @@ fn walk_explicit_self<E: Clone, V: Visitor<E>>(visitor: &mut V, explicit_self: &ExplicitSelf, env: E) { match explicit_self.node { - SelfStatic | SelfValue | SelfBox | SelfUniq => {} + SelfStatic | SelfValue | SelfUniq => {} SelfRegion(ref lifetime, _) => { visitor.visit_opt_lifetime_ref(explicit_self.span, lifetime, env) } |
