Skip to content

Commit 15d8457

Browse files
committed
Merge pull request #3700 from erickt/cargo-interner
allow interner cache to be shared across parsers (#3699)
2 parents 0aa42bc + 1ac75d2 commit 15d8457

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

src/libsyntax/parse/token.rs

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -343,28 +343,33 @@ macro_rules! interner_key (
343343
)
344344

345345
fn mk_ident_interner() -> @ident_interner {
346-
/* the indices here must correspond to the numbers in special_idents */
347-
let init_vec = ~[@~"_", @~"anon", @~"drop", @~"", @~"unary", @~"!",
348-
@~"[]", @~"unary-", @~"__extensions__", @~"self",
349-
@~"item", @~"block", @~"stmt", @~"pat", @~"expr",
350-
@~"ty", @~"ident", @~"path", @~"tt", @~"matchers",
351-
@~"str", @~"TyVisitor", @~"arg", @~"descrim",
352-
@~"__rust_abi", @~"__rust_stack_shim", @~"TyDesc",
353-
@~"dtor", @~"main", @~"<opaque>", @~"blk", @~"static",
354-
@~"intrinsic", @~"__foreign_mod__"];
355-
356-
let rv = @ident_interner {
357-
interner: interner::mk_prefill::<@~str>(init_vec)
358-
};
359-
360-
/* having multiple interners will just confuse the serializer */
361346
unsafe {
362-
assert task::local_data::local_data_get(interner_key!()).is_none()
363-
};
364-
unsafe {
365-
task::local_data::local_data_set(interner_key!(), @rv)
366-
};
367-
rv
347+
match task::local_data::local_data_get(interner_key!()) {
348+
Some(interner) => *interner,
349+
None => {
350+
// the indices here must correspond to the numbers in
351+
// special_idents.
352+
let init_vec = ~[
353+
@~"_", @~"anon", @~"drop", @~"", @~"unary", @~"!",
354+
@~"[]", @~"unary-", @~"__extensions__", @~"self",
355+
@~"item", @~"block", @~"stmt", @~"pat", @~"expr",
356+
@~"ty", @~"ident", @~"path", @~"tt", @~"matchers",
357+
@~"str", @~"TyVisitor", @~"arg", @~"descrim",
358+
@~"__rust_abi", @~"__rust_stack_shim", @~"TyDesc",
359+
@~"dtor", @~"main", @~"<opaque>", @~"blk", @~"static",
360+
@~"intrinsic", @~"__foreign_mod__"
361+
];
362+
363+
let rv = @ident_interner {
364+
interner: interner::mk_prefill(init_vec)
365+
};
366+
367+
task::local_data::local_data_set(interner_key!(), @rv);
368+
369+
rv
370+
}
371+
}
372+
}
368373
}
369374

370375
/* for when we don't care about the contents; doesn't interact with TLD or

0 commit comments

Comments
 (0)