From 4e9c475527b0a4cbf43b14c028370b0f784fd99f Mon Sep 17 00:00:00 2001 From: Paul Stansifer Date: Tue, 17 Jul 2012 17:05:38 -0700 Subject: [PATCH] Work around bug #2935 by unautounboxing. --- src/libsyntax/parse/lexer.rs | 16 +++++++++------- src/libsyntax/util/interner.rs | 1 + 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/libsyntax/parse/lexer.rs b/src/libsyntax/parse/lexer.rs index f70a1fae59d..3c08fec743c 100644 --- a/src/libsyntax/parse/lexer.rs +++ b/src/libsyntax/parse/lexer.rs @@ -217,7 +217,7 @@ fn consume_any_line_comment(rdr: string_reader) bump(rdr); } ret some({ - tok: token::DOC_COMMENT(rdr.interner.intern(@acc)), + tok: token::DOC_COMMENT((*rdr.interner).intern(@acc)), sp: ast_util::mk_sp(start_chpos, rdr.chpos) }); } else { @@ -262,7 +262,7 @@ fn consume_block_comment(rdr: string_reader) bump(rdr); bump(rdr); ret some({ - tok: token::DOC_COMMENT(rdr.interner.intern(@acc)), + tok: token::DOC_COMMENT((*rdr.interner).intern(@acc)), sp: ast_util::mk_sp(start_chpos, rdr.chpos) }); } @@ -395,11 +395,13 @@ fn scan_number(c: char, rdr: string_reader) -> token::token { if c == '3' && n == '2' { bump(rdr); bump(rdr); - ret token::LIT_FLOAT(rdr.interner.intern(@num_str), ast::ty_f32); + ret token::LIT_FLOAT((*rdr.interner).intern(@num_str), + ast::ty_f32); } else if c == '6' && n == '4' { bump(rdr); bump(rdr); - ret token::LIT_FLOAT(rdr.interner.intern(@num_str), ast::ty_f64); + ret token::LIT_FLOAT((*rdr.interner).intern(@num_str), + ast::ty_f64); /* FIXME (#2252): if this is out of range for either a 32-bit or 64-bit float, it won't be noticed till the back-end. */ @@ -408,7 +410,7 @@ fn scan_number(c: char, rdr: string_reader) -> token::token { } } if is_float { - ret token::LIT_FLOAT(rdr.interner.intern(@num_str), ast::ty_f); + ret token::LIT_FLOAT((*rdr.interner).intern(@num_str), ast::ty_f); } else { if str::len(num_str) == 0u { rdr.fatal(~"no valid digits found for number"); @@ -456,7 +458,7 @@ fn next_token_inner(rdr: string_reader) -> token::token { let is_mod_name = c == ':' && nextch(rdr) == ':'; // FIXME: perform NFKC normalization here. (Issue #2253) - ret token::IDENT(rdr.interner.intern(@accum_str), is_mod_name); + ret token::IDENT((*rdr.interner).intern(@accum_str), is_mod_name); } if is_dec_digit(c) { ret scan_number(c, rdr); @@ -620,7 +622,7 @@ fn next_token_inner(rdr: string_reader) -> token::token { } } bump(rdr); - ret token::LIT_STR(rdr.interner.intern(@accum_str)); + ret token::LIT_STR((*rdr.interner).intern(@accum_str)); } '-' { if nextch(rdr) == '>' { diff --git a/src/libsyntax/util/interner.rs b/src/libsyntax/util/interner.rs index f25604ab991..b6320b4f9cb 100644 --- a/src/libsyntax/util/interner.rs +++ b/src/libsyntax/util/interner.rs @@ -42,5 +42,6 @@ impl of interner for hash_interner { // failing to returning a value as items are interned. But for typestate, // where we first check a pred and then rely on it, ceasing to fail is ok. pure fn get(idx: uint) -> T { self.vect.get_elt(idx) } + fn len() -> uint { ret self.vect.len(); } } \ No newline at end of file