Skip to content

Commit 2eab3fe

Browse files
committed
---
yaml --- r: 22847 b: refs/heads/master c: e040ab8 h: refs/heads/master i: 22845: 08a9dfa 22843: 78c9229 22839: 030be81 22831: fbdae07 22815: 243d1cf 22783: 26c4b42 v: v3
1 parent 60e30e8 commit 2eab3fe

File tree

8 files changed

+51
-53
lines changed

8 files changed

+51
-53
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: a7125971c652393af33fbc7121edfd4ecb7307eb
2+
refs/heads/master: e040ab8423b7ae74eeb2ee5d9b1f1da5256f59fd
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: cd6f24f9d14ac90d167386a56e7a6ac1f0318195
55
refs/heads/try: ffbe0e0e00374358b789b0037bcb3a577cd218be

trunk/src/libsyntax/ext/pipes/pipec.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import tuple::extensions;
99

1010
import ast::ident;
1111
import util::interner;
12-
import interner::{intern, get};
1312
import print::pprust;
1413
import pprust::{item_to_str, ty_to_str};
1514
import ext::base::{mk_ctxt, ext_ctxt};

trunk/src/libsyntax/parse/lexer.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import util::interner::{interner,intern};
1+
import util::interner::interner;
22
import diagnostic::span_handler;
33
import codemap::span;
44
import ext::tt::transcribe::{tt_reader, new_tt_reader, dup_tt_reader,
@@ -217,7 +217,7 @@ fn consume_any_line_comment(rdr: string_reader)
217217
bump(rdr);
218218
}
219219
ret some({
220-
tok: token::DOC_COMMENT(intern(*rdr.interner, @acc)),
220+
tok: token::DOC_COMMENT(rdr.interner.intern(@acc)),
221221
sp: ast_util::mk_sp(start_chpos, rdr.chpos)
222222
});
223223
} else {
@@ -262,7 +262,7 @@ fn consume_block_comment(rdr: string_reader)
262262
bump(rdr);
263263
bump(rdr);
264264
ret some({
265-
tok: token::DOC_COMMENT(intern(*rdr.interner, @acc)),
265+
tok: token::DOC_COMMENT(rdr.interner.intern(@acc)),
266266
sp: ast_util::mk_sp(start_chpos, rdr.chpos)
267267
});
268268
}
@@ -395,13 +395,11 @@ fn scan_number(c: char, rdr: string_reader) -> token::token {
395395
if c == '3' && n == '2' {
396396
bump(rdr);
397397
bump(rdr);
398-
ret token::LIT_FLOAT(intern(*rdr.interner, @num_str),
399-
ast::ty_f32);
398+
ret token::LIT_FLOAT(rdr.interner.intern(@num_str), ast::ty_f32);
400399
} else if c == '6' && n == '4' {
401400
bump(rdr);
402401
bump(rdr);
403-
ret token::LIT_FLOAT(intern(*rdr.interner, @num_str),
404-
ast::ty_f64);
402+
ret token::LIT_FLOAT(rdr.interner.intern(@num_str), ast::ty_f64);
405403
/* FIXME (#2252): if this is out of range for either a
406404
32-bit or 64-bit float, it won't be noticed till the
407405
back-end. */
@@ -410,8 +408,7 @@ fn scan_number(c: char, rdr: string_reader) -> token::token {
410408
}
411409
}
412410
if is_float {
413-
ret token::LIT_FLOAT(intern(*rdr.interner, @num_str),
414-
ast::ty_f);
411+
ret token::LIT_FLOAT(rdr.interner.intern(@num_str), ast::ty_f);
415412
} else {
416413
if str::len(num_str) == 0u {
417414
rdr.fatal(~"no valid digits found for number");
@@ -459,7 +456,7 @@ fn next_token_inner(rdr: string_reader) -> token::token {
459456
let is_mod_name = c == ':' && nextch(rdr) == ':';
460457

461458
// FIXME: perform NFKC normalization here. (Issue #2253)
462-
ret token::IDENT(intern(*rdr.interner, @accum_str), is_mod_name);
459+
ret token::IDENT(rdr.interner.intern(@accum_str), is_mod_name);
463460
}
464461
if is_dec_digit(c) {
465462
ret scan_number(c, rdr);
@@ -623,7 +620,7 @@ fn next_token_inner(rdr: string_reader) -> token::token {
623620
}
624621
}
625622
bump(rdr);
626-
ret token::LIT_STR(intern(*rdr.interner, @accum_str));
623+
ret token::LIT_STR(rdr.interner.intern(@accum_str));
627624
}
628625
'-' {
629626
if nextch(rdr) == '>' {

trunk/src/libsyntax/parse/parser.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ class parser {
224224
self.sess.span_diagnostic.span_warn(copy self.span, m)
225225
}
226226
pure fn get_str(i: token::str_num) -> @~str {
227-
interner::get(*self.reader.interner(), i)
227+
(*self.reader.interner()).get(i)
228228
}
229229
fn get_id() -> node_id { next_node_id(self.sess) }
230230

@@ -2121,8 +2121,7 @@ class parser {
21212121
}
21222122

21232123
if self.eat_keyword(~"of") {
2124-
let for_atom = interner::intern(*self.reader.interner(),
2125-
@~"for");
2124+
let for_atom = (*self.reader.interner()).intern(@~"for");
21262125
traits = self.parse_trait_ref_list
21272126
(token::IDENT(for_atom, false));
21282127
if traits.len() >= 1 && option::is_none(ident_old) {

trunk/src/libsyntax/parse/token.rs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -165,24 +165,16 @@ fn to_str(in: interner<@~str>, t: token) -> ~str {
165165
LIT_INT_UNSUFFIXED(i) {
166166
int::to_str(i as int, 10u)
167167
}
168-
LIT_FLOAT(s, t) {
169-
*interner::get(in, s) +
170-
ast_util::float_ty_to_str(t)
171-
}
172-
LIT_STR(s) {
173-
~"\""
174-
+ str::escape_default(*interner::get(in, s))
175-
+ ~"\""
176-
}
168+
LIT_FLOAT(s, t) { *in.get(s) + ast_util::float_ty_to_str(t) }
169+
LIT_STR(s) { ~"\"" + str::escape_default( *in.get(s)) + ~"\"" }
177170

178171
/* Name components */
179-
IDENT(s, _) {
180-
*interner::get(in, s)
181-
}
172+
IDENT(s, _) { *in.get(s) }
173+
182174
UNDERSCORE { ~"_" }
183175

184176
/* Other */
185-
DOC_COMMENT(s) { *interner::get(in, s) }
177+
DOC_COMMENT(s) { *in.get(s) }
186178
EOF { ~"<eof>" }
187179
INTERPOLATED(nt) {
188180
~"an interpolated " +

trunk/src/libsyntax/print/pprust.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import ast::{required, provided};
99
import ast_util::operator_prec;
1010
import dvec::{dvec, extensions};
1111
import parse::classify::*;
12+
import util::interner;
1213

1314
// The ps is stored here to prevent recursive type.
1415
enum ann_node {
@@ -27,6 +28,7 @@ fn no_ann() -> pp_ann {
2728
type ps =
2829
@{s: pp::printer,
2930
cm: option<codemap>,
31+
//in: interner::interner<@~str>,
3032
comments: option<~[comments::cmnt]>,
3133
literals: option<~[comments::lit]>,
3234
mut cur_cmnt: uint,
@@ -47,6 +49,7 @@ fn end(s: ps) {
4749
fn rust_printer(writer: io::writer) -> ps {
4850
ret @{s: pp::mk_printer(writer, default_columns),
4951
cm: none::<codemap>,
52+
//in: interner::mk::<@~str>(|x| str::hash(*x), |x,y| str::eq(*x, *y)),
5053
comments: none::<~[comments::cmnt]>,
5154
literals: none::<~[comments::lit]>,
5255
mut cur_cmnt: 0u,
@@ -63,14 +66,16 @@ const default_columns: uint = 78u;
6366
// Requires you to pass an input filename and reader so that
6467
// it can scan the input text for comments and literals to
6568
// copy forward.
66-
fn print_crate(cm: codemap, span_diagnostic: diagnostic::span_handler,
69+
fn print_crate(cm: codemap, //in: interner::interner<@~str>,
70+
span_diagnostic: diagnostic::span_handler,
6771
crate: @ast::crate, filename: ~str, in: io::reader,
6872
out: io::writer, ann: pp_ann, is_expanded: bool) {
6973
let r = comments::gather_comments_and_literals(span_diagnostic,
7074
filename, in);
7175
let s =
7276
@{s: pp::mk_printer(out, default_columns),
7377
cm: some(cm),
78+
//in: in,
7479
comments: some(r.cmnts),
7580
// If the code is post expansion, don't use the table of
7681
// literals, since it doesn't correspond with the literals

trunk/src/libsyntax/util/interner.rs

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,36 +5,42 @@ import std::map;
55
import std::map::{hashmap, hashfn, eqfn};
66
import dvec::{dvec, extensions};
77

8-
type interner<T: const> =
8+
type hash_interner<T: const> =
99
{map: hashmap<T, uint>,
1010
vect: dvec<T>,
1111
hasher: hashfn<T>,
1212
eqer: eqfn<T>};
1313

1414
fn mk<T: const copy>(hasher: hashfn<T>, eqer: eqfn<T>) -> interner<T> {
1515
let m = map::hashmap::<T, uint>(hasher, eqer);
16-
ret {map: m, vect: dvec(), hasher: hasher, eqer: eqer};
16+
let hi: hash_interner<T> =
17+
{map: m, vect: dvec(), hasher: hasher, eqer: eqer};
18+
ret hi as interner::<T>;
1719
}
1820

19-
fn intern<T: const copy>(itr: interner<T>, val: T) -> uint {
20-
alt itr.map.find(val) {
21-
some(idx) { ret idx; }
22-
none {
23-
let new_idx = itr.vect.len();
24-
itr.map.insert(val, new_idx);
25-
itr.vect.push(val);
26-
ret new_idx;
27-
}
28-
}
21+
/* when traits can extend traits, we should extend index<uint,T> to get [] */
22+
iface interner<T: const copy> {
23+
fn intern(T) -> uint;
24+
pure fn get(uint) -> T;
25+
fn len() -> uint;
2926
}
3027

31-
// |get| isn't "pure" in the traditional sense, because it can go from
32-
// failing to returning a value as items are interned. But for typestate,
33-
// where we first check a pred and then rely on it, ceasing to fail is ok.
34-
pure fn get<T: const copy>(itr: interner<T>, idx: uint) -> T {
35-
unchecked {
36-
itr.vect.get_elt(idx)
28+
impl <T: const copy> of interner<T> for hash_interner<T> {
29+
fn intern(val: T) -> uint {
30+
alt self.map.find(val) {
31+
some(idx) { ret idx; }
32+
none {
33+
let new_idx = self.vect.len();
34+
self.map.insert(val, new_idx);
35+
self.vect.push(val);
36+
ret new_idx;
37+
}
38+
}
3739
}
38-
}
3940

40-
fn len<T: const>(itr: interner<T>) -> uint { ret itr.vect.len(); }
41+
// this isn't "pure" in the traditional sense, because it can go from
42+
// failing to returning a value as items are interned. But for typestate,
43+
// where we first check a pred and then rely on it, ceasing to fail is ok.
44+
pure fn get(idx: uint) -> T { self.vect.get_elt(idx) }
45+
fn len() -> uint { ret self.vect.len(); }
46+
}

trunk/src/rustc/middle/trans/shape.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ fn shape_of(ccx: @crate_ctxt, t: ty::t) -> ~[u8] {
335335
else { ~[shape_struct] }, sub = ~[];
336336
do option::iter(m_dtor_did) |dtor_did| {
337337
let ri = @{did: dtor_did, parent_id: some(did), tps: tps};
338-
let id = interner::intern(ccx.shape_cx.resources, ri);
338+
let id = ccx.shape_cx.resources.intern(ri);
339339
add_u16(s, id as u16);
340340
};
341341
for ty::class_items_as_mutable_fields(ccx.tcx, did, substs).each |f| {
@@ -569,9 +569,9 @@ fn gen_enum_shapes(ccx: @crate_ctxt) -> ValueRef {
569569

570570
fn gen_resource_shapes(ccx: @crate_ctxt) -> ValueRef {
571571
let mut dtors = ~[];
572-
let len = interner::len(ccx.shape_cx.resources);
572+
let len = ccx.shape_cx.resources.len();
573573
for uint::range(0u, len) |i| {
574-
let ri = interner::get(ccx.shape_cx.resources, i);
574+
let ri = ccx.shape_cx.resources.get(i);
575575
for ri.tps.each() |s| { assert !ty::type_has_params(s); }
576576
do option::iter(ri.parent_id) |id| {
577577
dtors += ~[trans::base::get_res_dtor(ccx, ri.did, id, ri.tps)];

0 commit comments

Comments
 (0)