}
}
+
// return a fresh interner, preloaded with special identifiers.
+#[cfg(stage0)]
fn mk_fresh_ident_interner() -> @ident_interner {
// the indices here must correspond to the numbers in
// special_idents.
}
}
+// return a fresh interner, preloaded with special identifiers.
+#[cfg(not(stage0))]
+fn mk_fresh_ident_interner() -> @ident_interner {
+ // the indices here must correspond to the numbers in
+ // special_idents.
+ let init_vec = ~[
+ "_", // 0
+ "anon", // 1
+ "", // 2
+ "unary", // 3
+ "!", // 4
+ "[]", // 5
+ "unary-", // 6
+ "__extensions__", // 7
+ "self", // 8
+ "item", // 9
+ "block", // 10
+ "stmt", // 11
+ "pat", // 12
+ "expr", // 13
+ "ty", // 14
+ "ident", // 15
+ "path", // 16
+ "tt", // 17
+ "matchers", // 18
+ "str", // 19
+ "TyVisitor", // 20
+ "arg", // 21
+ "descrim", // 22
+ "__rust_abi", // 23
+ "__rust_stack_shim", // 24
+ "TyDesc", // 25
+ "main", // 26
+ "<opaque>", // 27
+ "blk", // 28
+ "static", // 29
+ "intrinsic", // 30
+ "__foreign_mod__", // 31
+ "__field__", // 32
+ "C", // 33
+ "Self", // 34
+
+ "as", // 35
+ "break", // 36
+ "const", // 37
+ "copy", // 38
+ "do", // 39
+ "else", // 40
+ "enum", // 41
+ "extern", // 42
+ "false", // 43
+ "fn", // 44
+ "for", // 45
+ "if", // 46
+ "impl", // 47
+ "let", // 48
+ "__log", // 49
+ "loop", // 50
+ "match", // 51
+ "mod", // 52
+ "mut", // 53
+ "once", // 54
+ "priv", // 55
+ "pub", // 56
+ "pure", // 57
+ "ref", // 58
+ "return", // 59
+ "static", // 29 -- also a special ident
+ "self", // 8 -- also a special ident
+ "struct", // 60
+ "super", // 61
+ "true", // 62
+ "trait", // 63
+ "type", // 64
+ "unsafe", // 65
+ "use", // 66
+ "while", // 67
+
+ "be", // 68
+ ];
+
+ @ident_interner {
+ interner: interner::StrInterner::prefill(init_vec)
+ }
+}
+
// if an interner exists in TLS, return it. Otherwise, prepare a
// fresh one.
pub fn get_ident_interner() -> @ident_interner {
}
impl Keyword {
+ #[cfg(stage0)]
pub fn to_ident(&self) -> ident {
match *self {
As => ident { name: 35, ctxt: 0 },
- Break => ident { name: 36, ctxt: 0 },
- Const => ident { name: 37, ctxt: 0 },
- Copy => ident { name: 38, ctxt: 0 },
- Do => ident { name: 39, ctxt: 0 },
- Else => ident { name: 41, ctxt: 0 },
- Enum => ident { name: 42, ctxt: 0 },
- Extern => ident { name: 43, ctxt: 0 },
- False => ident { name: 44, ctxt: 0 },
- Fn => ident { name: 45, ctxt: 0 },
- For => ident { name: 46, ctxt: 0 },
- If => ident { name: 47, ctxt: 0 },
- Impl => ident { name: 48, ctxt: 0 },
- Let => ident { name: 49, ctxt: 0 },
- __Log => ident { name: 50, ctxt: 0 },
- Loop => ident { name: 51, ctxt: 0 },
- Match => ident { name: 52, ctxt: 0 },
- Mod => ident { name: 53, ctxt: 0 },
- Mut => ident { name: 54, ctxt: 0 },
- Once => ident { name: 55, ctxt: 0 },
- Priv => ident { name: 56, ctxt: 0 },
- Pub => ident { name: 57, ctxt: 0 },
- Pure => ident { name: 58, ctxt: 0 },
- Ref => ident { name: 59, ctxt: 0 },
- Return => ident { name: 60, ctxt: 0 },
- Static => ident { name: 29, ctxt: 0 },
- Self => ident { name: 8, ctxt: 0 },
- Struct => ident { name: 61, ctxt: 0 },
- Super => ident { name: 62, ctxt: 0 },
- True => ident { name: 63, ctxt: 0 },
- Trait => ident { name: 64, ctxt: 0 },
- Type => ident { name: 65, ctxt: 0 },
- Unsafe => ident { name: 66, ctxt: 0 },
- Use => ident { name: 67, ctxt: 0 },
- While => ident { name: 68, ctxt: 0 },
- Be => ident { name: 69, ctxt: 0 },
+ Break => ident { name: 36, ctxt: 0 },
+ Const => ident { name: 37, ctxt: 0 },
+ Copy => ident { name: 38, ctxt: 0 },
+ Do => ident { name: 39, ctxt: 0 },
+ Else => ident { name: 41, ctxt: 0 },
+ Enum => ident { name: 42, ctxt: 0 },
+ Extern => ident { name: 43, ctxt: 0 },
+ False => ident { name: 44, ctxt: 0 },
+ Fn => ident { name: 45, ctxt: 0 },
+ For => ident { name: 46, ctxt: 0 },
+ If => ident { name: 47, ctxt: 0 },
+ Impl => ident { name: 48, ctxt: 0 },
+ Let => ident { name: 49, ctxt: 0 },
+ __Log => ident { name: 50, ctxt: 0 },
+ Loop => ident { name: 51, ctxt: 0 },
+ Match => ident { name: 52, ctxt: 0 },
+ Mod => ident { name: 53, ctxt: 0 },
+ Mut => ident { name: 54, ctxt: 0 },
+ Once => ident { name: 55, ctxt: 0 },
+ Priv => ident { name: 56, ctxt: 0 },
+ Pub => ident { name: 57, ctxt: 0 },
+ Pure => ident { name: 58, ctxt: 0 },
+ Ref => ident { name: 59, ctxt: 0 },
+ Return => ident { name: 60, ctxt: 0 },
+ Static => ident { name: 29, ctxt: 0 },
+ Self => ident { name: 8, ctxt: 0 },
+ Struct => ident { name: 61, ctxt: 0 },
+ Super => ident { name: 62, ctxt: 0 },
+ True => ident { name: 63, ctxt: 0 },
+ Trait => ident { name: 64, ctxt: 0 },
+ Type => ident { name: 65, ctxt: 0 },
+ Unsafe => ident { name: 66, ctxt: 0 },
+ Use => ident { name: 67, ctxt: 0 },
+ While => ident { name: 68, ctxt: 0 },
+ Be => ident { name: 69, ctxt: 0 },
+ }
+ }
+ #[cfg(not(stage0))]
+ pub fn to_ident(&self) -> ident {
+ match *self {
+ As => ident { name: 35, ctxt: 0 },
+ Break => ident { name: 36, ctxt: 0 },
+ Const => ident { name: 37, ctxt: 0 },
+ Copy => ident { name: 38, ctxt: 0 },
+ Do => ident { name: 39, ctxt: 0 },
+ Else => ident { name: 40, ctxt: 0 },
+ Enum => ident { name: 41, ctxt: 0 },
+ Extern => ident { name: 42, ctxt: 0 },
+ False => ident { name: 43, ctxt: 0 },
+ Fn => ident { name: 44, ctxt: 0 },
+ For => ident { name: 45, ctxt: 0 },
+ If => ident { name: 46, ctxt: 0 },
+ Impl => ident { name: 47, ctxt: 0 },
+ Let => ident { name: 48, ctxt: 0 },
+ __Log => ident { name: 49, ctxt: 0 },
+ Loop => ident { name: 50, ctxt: 0 },
+ Match => ident { name: 51, ctxt: 0 },
+ Mod => ident { name: 52, ctxt: 0 },
+ Mut => ident { name: 53, ctxt: 0 },
+ Once => ident { name: 54, ctxt: 0 },
+ Priv => ident { name: 55, ctxt: 0 },
+ Pub => ident { name: 56, ctxt: 0 },
+ Pure => ident { name: 57, ctxt: 0 },
+ Ref => ident { name: 58, ctxt: 0 },
+ Return => ident { name: 59, ctxt: 0 },
+ Static => ident { name: 29, ctxt: 0 },
+ Self => ident { name: 8, ctxt: 0 },
+ Struct => ident { name: 60, ctxt: 0 },
+ Super => ident { name: 61, ctxt: 0 },
+ True => ident { name: 62, ctxt: 0 },
+ Trait => ident { name: 63, ctxt: 0 },
+ Type => ident { name: 64, ctxt: 0 },
+ Unsafe => ident { name: 65, ctxt: 0 },
+ Use => ident { name: 66, ctxt: 0 },
+ While => ident { name: 67, ctxt: 0 },
+ Be => ident { name: 68, ctxt: 0 },
}
}
}
}
}
+#[cfg(stage0)]
pub fn is_any_keyword(tok: &Token) -> bool {
match *tok {
token::IDENT(sid, false) => match sid.name {
}
}
+#[cfg(not(stage0))]
+pub fn is_any_keyword(tok: &Token) -> bool {
+ match *tok {
+ token::IDENT(sid, false) => match sid.name {
+ 8 | 29 | 35 .. 68 => true,
+ _ => false,
+ },
+ _ => false
+ }
+}
+
+#[cfg(stage0)]
pub fn is_strict_keyword(tok: &Token) -> bool {
match *tok {
token::IDENT(sid, false) => match sid.name {
}
}
+#[cfg(not(stage0))]
+pub fn is_strict_keyword(tok: &Token) -> bool {
+ match *tok {
+ token::IDENT(sid, false) => match sid.name {
+ 8 | 29 | 35 .. 67 => true,
+ _ => false,
+ },
+ _ => false,
+ }
+}
+
+#[cfg(stage0)]
pub fn is_reserved_keyword(tok: &Token) -> bool {
match *tok {
token::IDENT(sid, false) => match sid.name {
}
}
+#[cfg(not(stage0))]
+pub fn is_reserved_keyword(tok: &Token) -> bool {
+ match *tok {
+ token::IDENT(sid, false) => match sid.name {
+ 68 => true,
+ _ => false,
+ },
+ _ => false,
+ }
+}
+
+
#[cfg(test)]
mod test {
use super::*;