about summary refs log tree commit diff
path: root/src/libsyntax/lib.rs
diff options
context:
space:
mode:
authorMark Rousskov <mark.simulacrum@gmail.com>2018-07-30 08:39:03 -0600
committerMark Rousskov <mark.simulacrum@gmail.com>2018-08-01 06:48:42 -0600
commit1d64b241cdca1477cc4c87b3751326212ebf78f6 (patch)
tree2a77cf6735bd3bac9ae6b21ff6c5ff2d0366ff17 /src/libsyntax/lib.rs
parent8c069ceba81a0fffc1ce95aaf7e8339e11bf2796 (diff)
downloadrust-1d64b241cdca1477cc4c87b3751326212ebf78f6.tar.gz
rust-1d64b241cdca1477cc4c87b3751326212ebf78f6.zip
Switch syntax attribute tracking to BitVector
Diffstat (limited to 'src/libsyntax/lib.rs')
-rw-r--r--src/libsyntax/lib.rs12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs
index 60de94821bb..16507ec5a5d 100644
--- a/src/libsyntax/lib.rs
+++ b/src/libsyntax/lib.rs
@@ -43,6 +43,8 @@ extern crate rustc_target;
 extern crate serialize as rustc_serialize; // used by deriving
 
 use rustc_data_structures::sync::Lock;
+use rustc_data_structures::bitvec::BitVector;
+use ast::AttrId;
 
 // A variant of 'try!' that panics on an Err. This is used as a crutch on the
 // way towards a non-panic!-prone parser. It should be used for fatal parsing
@@ -75,16 +77,18 @@ macro_rules! unwrap_or {
 }
 
 pub struct Globals {
-    used_attrs: Lock<Vec<u64>>,
-    known_attrs: Lock<Vec<u64>>,
+    used_attrs: Lock<BitVector<AttrId>>,
+    known_attrs: Lock<BitVector<AttrId>>,
     syntax_pos_globals: syntax_pos::Globals,
 }
 
 impl Globals {
     fn new() -> Globals {
         Globals {
-            used_attrs: Lock::new(Vec::new()),
-            known_attrs: Lock::new(Vec::new()),
+            // We have no idea how many attributes their will be, so just
+            // initiate the vectors with 0 bits. We'll grow them as necessary.
+            used_attrs: Lock::new(BitVector::new(0)),
+            known_attrs: Lock::new(BitVector::new(0)),
             syntax_pos_globals: syntax_pos::Globals::new(),
         }
     }