Skip to content

Commit ba7f57b

Browse files
ericktgraydon
authored andcommitted
---
yaml --- r: 30783 b: refs/heads/incoming c: b96af73 h: refs/heads/master i: 30781: 8b4ee84 30779: a479c43 30775: 81bb914 30767: 5e9c872 30751: c7a8bd1 30719: 6c92920 v: v3
1 parent ce4a363 commit ba7f57b

File tree

21 files changed

+155
-125
lines changed

21 files changed

+155
-125
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ refs/heads/try: d324a424d8f84b1eb049b12cf34182bda91b0024
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: d0c6ce338884ee21843f4b40bf6bf18d222ce5df
9-
refs/heads/incoming: c0b9986c8f11c85c74ee0ba64dccf4495027a645
9+
refs/heads/incoming: b96af7315951dcc69567c2f3432a46ff71ecddf3
1010
refs/heads/dist-snap: 2f32a1581f522e524009138b33b1c7049ced668d
1111
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1212
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/incoming/src/fuzzer/fuzzer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ fn check_variants_T<T: Copy>(
243243
filename: &Path,
244244
thing_label: ~str,
245245
things: ~[T],
246-
stringifier: fn@(@T, syntax::parse::token::ident_interner) -> ~str,
246+
stringifier: fn@(@T, @syntax::parse::token::ident_interner) -> ~str,
247247
replacer: fn@(ast::crate, uint, T, test_mode) -> ast::crate,
248248
cx: context
249249
) {

branches/incoming/src/libsyntax/ast.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ macro_rules! interner_key (
3838
(-3 as uint, 0u)))
3939
)
4040

41+
// FIXME(#3534): Replace with the struct-based newtype when it's been
42+
// implemented.
43+
struct ident { repr: uint }
44+
4145
fn serialize_ident<S: Serializer>(s: S, i: ident) {
4246
let intr = match unsafe{
4347
task::local_data::local_data_get(interner_key!())
@@ -59,7 +63,16 @@ fn deserialize_ident<D: Deserializer>(d: D) -> ident {
5963
(*intr).intern(@d.read_str())
6064
}
6165

62-
type ident = token::str_num;
66+
impl ident: cmp::Eq {
67+
pure fn eq(other: &ident) -> bool { self.repr == other.repr }
68+
pure fn ne(other: &ident) -> bool { !self.eq(other) }
69+
}
70+
71+
impl ident: to_bytes::IterBytes {
72+
pure fn iter_bytes(lsb0: bool, f: to_bytes::Cb) {
73+
self.repr.iter_bytes(lsb0, f)
74+
}
75+
}
6376

6477
// Functions may or may not have names.
6578
#[auto_serialize]

branches/incoming/src/libsyntax/ast_map.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl path_elt : cmp::Eq {
3434
type path = ~[path_elt];
3535

3636
/* FIXMEs that say "bad" are as per #2543 */
37-
fn path_to_str_with_sep(p: path, sep: ~str, itr: ident_interner) -> ~str {
37+
fn path_to_str_with_sep(p: path, sep: ~str, itr: @ident_interner) -> ~str {
3838
let strs = do vec::map(p) |e| {
3939
match *e {
4040
path_mod(s) => *itr.get(s),
@@ -44,7 +44,7 @@ fn path_to_str_with_sep(p: path, sep: ~str, itr: ident_interner) -> ~str {
4444
str::connect(strs, sep)
4545
}
4646

47-
fn path_ident_to_str(p: path, i: ident, itr: ident_interner) -> ~str {
47+
fn path_ident_to_str(p: path, i: ident, itr: @ident_interner) -> ~str {
4848
if vec::is_empty(p) {
4949
//FIXME /* FIXME (#2543) */ copy *i
5050
*itr.get(i)
@@ -53,7 +53,7 @@ fn path_ident_to_str(p: path, i: ident, itr: ident_interner) -> ~str {
5353
}
5454
}
5555

56-
fn path_to_str(p: path, itr: ident_interner) -> ~str {
56+
fn path_to_str(p: path, itr: @ident_interner) -> ~str {
5757
path_to_str_with_sep(p, ~"::", itr)
5858
}
5959

@@ -326,7 +326,7 @@ fn map_stmt(stmt: @stmt, cx: ctx, v: vt) {
326326
visit::visit_stmt(stmt, cx, v);
327327
}
328328

329-
fn node_id_to_str(map: map, id: node_id, itr: ident_interner) -> ~str {
329+
fn node_id_to_str(map: map, id: node_id, itr: @ident_interner) -> ~str {
330330
match map.find(id) {
331331
None => {
332332
fmt!("unknown node (id=%d)", id)

branches/incoming/src/libsyntax/ast_util.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pure fn dummy_sp() -> span { return mk_sp(0u, 0u); }
2323

2424

2525

26-
pure fn path_name_i(idents: ~[ident], intr: token::ident_interner) -> ~str {
26+
pure fn path_name_i(idents: ~[ident], intr: @token::ident_interner) -> ~str {
2727
// FIXME: Bad copies (#2543 -- same for everything else that says "bad")
2828
str::connect(idents.map(|i| *intr.get(*i)), ~"::")
2929
}

branches/incoming/src/libsyntax/ext/tt/transcribe.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type tt_frame = @{
2525

2626
type tt_reader = @{
2727
sp_diag: span_handler,
28-
interner: ident_interner,
28+
interner: @ident_interner,
2929
mut cur: tt_frame,
3030
/* for MBE-style macro transcription */
3131
interpolations: std::map::HashMap<ident, @named_match>,
@@ -39,7 +39,7 @@ type tt_reader = @{
3939
/** This can do Macro-By-Example transcription. On the other hand, if
4040
* `src` contains no `tt_seq`s and `tt_nonterminal`s, `interp` can (and
4141
* should) be none. */
42-
fn new_tt_reader(sp_diag: span_handler, itr: ident_interner,
42+
fn new_tt_reader(sp_diag: span_handler, itr: @ident_interner,
4343
interp: Option<std::map::HashMap<ident,@named_match>>,
4444
src: ~[ast::token_tree])
4545
-> tt_reader {

branches/incoming/src/libsyntax/parse.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type parse_sess = @{
2525
cm: codemap::codemap,
2626
mut next_id: node_id,
2727
span_diagnostic: span_handler,
28-
interner: ident_interner,
28+
interner: @ident_interner,
2929
// these two must be kept up to date
3030
mut chpos: uint,
3131
mut byte_pos: uint

branches/incoming/src/libsyntax/parse/lexer.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ trait reader {
1313
fn next_token() -> {tok: token::token, sp: span};
1414
fn fatal(~str) -> !;
1515
fn span_diag() -> span_handler;
16-
pure fn interner() -> token::ident_interner;
16+
pure fn interner() -> @token::ident_interner;
1717
fn peek() -> {tok: token::token, sp: span};
1818
fn dup() -> reader;
1919
}
@@ -26,15 +26,15 @@ type string_reader = @{
2626
mut curr: char,
2727
mut chpos: uint,
2828
filemap: codemap::filemap,
29-
interner: token::ident_interner,
29+
interner: @token::ident_interner,
3030
/* cached: */
3131
mut peek_tok: token::token,
3232
mut peek_span: span
3333
};
3434

3535
fn new_string_reader(span_diagnostic: span_handler,
3636
filemap: codemap::filemap,
37-
itr: token::ident_interner) -> string_reader {
37+
itr: @token::ident_interner) -> string_reader {
3838
let r = new_low_level_string_reader(span_diagnostic, filemap, itr);
3939
string_advance_token(r); /* fill in peek_* */
4040
return r;
@@ -43,7 +43,7 @@ fn new_string_reader(span_diagnostic: span_handler,
4343
/* For comments.rs, which hackily pokes into 'pos' and 'curr' */
4444
fn new_low_level_string_reader(span_diagnostic: span_handler,
4545
filemap: codemap::filemap,
46-
itr: token::ident_interner)
46+
itr: @token::ident_interner)
4747
-> string_reader {
4848
let r = @{span_diagnostic: span_diagnostic, src: filemap.src,
4949
mut col: 0u, mut pos: 0u, mut curr: -1 as char,
@@ -78,7 +78,7 @@ impl string_reader: reader {
7878
self.span_diagnostic.span_fatal(copy self.peek_span, m)
7979
}
8080
fn span_diag() -> span_handler { self.span_diagnostic }
81-
pure fn interner() -> token::ident_interner { self.interner }
81+
pure fn interner() -> @token::ident_interner { self.interner }
8282
fn peek() -> {tok: token::token, sp: span} {
8383
{tok: self.peek_tok, sp: self.peek_span}
8484
}
@@ -100,7 +100,7 @@ impl tt_reader: reader {
100100
self.sp_diag.span_fatal(copy self.cur_span, m);
101101
}
102102
fn span_diag() -> span_handler { self.sp_diag }
103-
pure fn interner() -> token::ident_interner { self.interner }
103+
pure fn interner() -> @token::ident_interner { self.interner }
104104
fn peek() -> {tok: token::token, sp: span} {
105105
{ tok: self.cur_tok, sp: self.cur_span }
106106
}

branches/incoming/src/libsyntax/parse/parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ struct parser {
237237
mut restriction: restriction,
238238
mut quote_depth: uint, // not (yet) related to the quasiquoter
239239
reader: reader,
240-
interner: interner<@~str>,
240+
interner: @token::ident_interner,
241241
keywords: HashMap<~str, ()>,
242242
strict_keywords: HashMap<~str, ()>,
243243
reserved_keywords: HashMap<~str, ()>,

branches/incoming/src/libsyntax/parse/token.rs

Lines changed: 67 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ use std::serialization::{Serializer,
1212
serialize_bool,
1313
deserialize_bool};
1414

15-
#[auto_serialize]
16-
type str_num = uint;
17-
1815
#[auto_serialize]
1916
enum binop {
2017
PLUS,
@@ -72,17 +69,17 @@ enum token {
7269
LIT_INT(i64, ast::int_ty),
7370
LIT_UINT(u64, ast::uint_ty),
7471
LIT_INT_UNSUFFIXED(i64),
75-
LIT_FLOAT(str_num, ast::float_ty),
76-
LIT_STR(str_num),
72+
LIT_FLOAT(ast::ident, ast::float_ty),
73+
LIT_STR(ast::ident),
7774

7875
/* Name components */
79-
IDENT(str_num, bool),
76+
IDENT(ast::ident, bool),
8077
UNDERSCORE,
8178

8279
/* For interpolation */
8380
INTERPOLATED(nonterminal),
8481

85-
DOC_COMMENT(str_num),
82+
DOC_COMMENT(ast::ident),
8683
EOF,
8784
}
8885

@@ -95,7 +92,7 @@ enum nonterminal {
9592
nt_pat( @ast::pat),
9693
nt_expr(@ast::expr),
9794
nt_ty( @ast::ty),
98-
nt_ident(str_num, bool),
95+
nt_ident(ast::ident, bool),
9996
nt_path(@ast::path),
10097
nt_tt( @ast::token_tree), //needs @ed to break a circularity
10198
nt_matchers(~[ast::matcher])
@@ -116,7 +113,7 @@ fn binop_to_str(o: binop) -> ~str {
116113
}
117114
}
118115
119-
fn to_str(in: interner<@~str>, t: token) -> ~str {
116+
fn to_str(in: @ident_interner, t: token) -> ~str {
120117
match t {
121118
EQ => ~"=",
122119
LT => ~"<",
@@ -174,7 +171,7 @@ fn to_str(in: interner<@~str>, t: token) -> ~str {
174171
}
175172
body + ast_util::float_ty_to_str(t)
176173
}
177-
LIT_STR(s) => { ~"\"" + str::escape_default( *in.get(s)) + ~"\"" }
174+
LIT_STR(s) => { ~"\"" + str::escape_default(*in.get(s)) + ~"\"" }
178175

179176
/* Name components */
180177
IDENT(s, _) => *in.get(s),
@@ -281,49 +278,66 @@ pure fn is_bar(t: token) -> bool {
281278
mod special_idents {
282279
#[legacy_exports];
283280
use ast::ident;
284-
const underscore : ident = 0u;
285-
const anon : ident = 1u;
286-
const dtor : ident = 2u; // 'drop', but that's reserved
287-
const invalid : ident = 3u; // ''
288-
const unary : ident = 4u;
289-
const not_fn : ident = 5u;
290-
const idx_fn : ident = 6u;
291-
const unary_minus_fn : ident = 7u;
292-
const clownshoes_extensions : ident = 8u;
293-
294-
const self_ : ident = 9u; // 'self'
281+
const underscore : ident = ident { repr: 0u };
282+
const anon : ident = ident { repr: 1u };
283+
const dtor : ident = ident { repr: 2u }; // 'drop', but that's reserved
284+
const invalid : ident = ident { repr: 3u }; // ''
285+
const unary : ident = ident { repr: 4u };
286+
const not_fn : ident = ident { repr: 5u };
287+
const idx_fn : ident = ident { repr: 6u };
288+
const unary_minus_fn : ident = ident { repr: 7u };
289+
const clownshoes_extensions : ident = ident { repr: 8u };
290+
291+
const self_ : ident = ident { repr: 9u }; // 'self'
295292

296293
/* for matcher NTs */
297-
const item : ident = 10u;
298-
const block : ident = 11u;
299-
const stmt : ident = 12u;
300-
const pat : ident = 13u;
301-
const expr : ident = 14u;
302-
const ty : ident = 15u;
303-
const ident : ident = 16u;
304-
const path : ident = 17u;
305-
const tt : ident = 18u;
306-
const matchers : ident = 19u;
307-
308-
const str : ident = 20u; // for the type
294+
const item : ident = ident { repr: 10u };
295+
const block : ident = ident { repr: 11u };
296+
const stmt : ident = ident { repr: 12u };
297+
const pat : ident = ident { repr: 13u };
298+
const expr : ident = ident { repr: 14u };
299+
const ty : ident = ident { repr: 15u };
300+
const ident : ident = ident { repr: 16u };
301+
const path : ident = ident { repr: 17u };
302+
const tt : ident = ident { repr: 18u };
303+
const matchers : ident = ident { repr: 19u };
304+
305+
const str : ident = ident { repr: 20u }; // for the type
309306

310307
/* outside of libsyntax */
311-
const ty_visitor : ident = 21u;
312-
const arg : ident = 22u;
313-
const descrim : ident = 23u;
314-
const clownshoe_abi : ident = 24u;
315-
const clownshoe_stack_shim : ident = 25u;
316-
const tydesc : ident = 26u;
317-
const literally_dtor : ident = 27u;
318-
const main : ident = 28u;
319-
const opaque : ident = 29u;
320-
const blk : ident = 30u;
321-
const static : ident = 31u;
322-
const intrinsic : ident = 32u;
323-
const clownshoes_foreign_mod: ident = 33;
308+
const ty_visitor : ident = ident { repr: 21u };
309+
const arg : ident = ident { repr: 22u };
310+
const descrim : ident = ident { repr: 23u };
311+
const clownshoe_abi : ident = ident { repr: 24u };
312+
const clownshoe_stack_shim : ident = ident { repr: 25u };
313+
const tydesc : ident = ident { repr: 26u };
314+
const literally_dtor : ident = ident { repr: 27u };
315+
const main : ident = ident { repr: 28u };
316+
const opaque : ident = ident { repr: 29u };
317+
const blk : ident = ident { repr: 30u };
318+
const static : ident = ident { repr: 31u };
319+
const intrinsic : ident = ident { repr: 32u };
320+
const clownshoes_foreign_mod: ident = ident { repr: 33 };
324321
}
325322

326-
type ident_interner = util::interner::interner<@~str>;
323+
struct ident_interner {
324+
priv interner: util::interner::interner<@~str>,
325+
}
326+
327+
impl ident_interner {
328+
fn intern(val: @~str) -> ast::ident {
329+
ast::ident { repr: self.interner.intern(val) }
330+
}
331+
fn gensym(val: @~str) -> ast::ident {
332+
ast::ident { repr: self.interner.gensym(val) }
333+
}
334+
pure fn get(idx: ast::ident) -> @~str {
335+
self.interner.get(idx.repr)
336+
}
337+
fn len() -> uint {
338+
self.interner.len()
339+
}
340+
}
327341

328342
/** Key for thread-local data for sneaking interner information to the
329343
* serializer/deserializer. It sounds like a hack because it is one.
@@ -335,7 +349,7 @@ macro_rules! interner_key (
335349
(-3 as uint, 0u)))
336350
)
337351

338-
fn mk_ident_interner() -> ident_interner {
352+
fn mk_ident_interner() -> @ident_interner {
339353
/* the indices here must correspond to the numbers in special_idents */
340354
let init_vec = ~[@~"_", @~"anon", @~"drop", @~"", @~"unary", @~"!",
341355
@~"[]", @~"unary-", @~"__extensions__", @~"self",
@@ -346,7 +360,9 @@ fn mk_ident_interner() -> ident_interner {
346360
@~"dtor", @~"main", @~"<opaque>", @~"blk", @~"static",
347361
@~"intrinsic", @~"__foreign_mod__"];
348362

349-
let rv = interner::mk_prefill::<@~str>(init_vec);
363+
let rv = @ident_interner {
364+
interner: interner::mk_prefill::<@~str>(init_vec)
365+
};
350366

351367
/* having multiple interners will just confuse the serializer */
352368
unsafe {
@@ -360,8 +376,8 @@ fn mk_ident_interner() -> ident_interner {
360376

361377
/* for when we don't care about the contents; doesn't interact with TLD or
362378
serialization */
363-
fn mk_fake_ident_interner() -> ident_interner {
364-
interner::mk::<@~str>()
379+
fn mk_fake_ident_interner() -> @ident_interner {
380+
@ident_interner { interner: interner::mk::<@~str>() }
365381
}
366382

367383
/**

0 commit comments

Comments
 (0)