Skip to content

Commit 295d290

Browse files
committed
---
yaml --- r: 147930 b: refs/heads/try2 c: be17a1b h: refs/heads/master v: v3
1 parent 94373cf commit 295d290

File tree

4 files changed

+45
-17
lines changed

4 files changed

+45
-17
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 96f807def6abb5da33618712dbdd4a8cc7cb81cf
8+
refs/heads/try2: be17a1b08c17b3381e86e3bea828a63ab69e67a9
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/src/libsyntax/ast.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use abi::AbiSet;
1515
use opt_vec::OptVec;
1616
use parse::token::{interner_get, str_to_ident};
1717

18+
use std::cell::RefCell;
1819
use std::hashmap::HashMap;
1920
use std::option::Option;
2021
use std::to_str::ToStr;
@@ -88,7 +89,7 @@ pub type SyntaxContext = u32;
8889
// it should cut down on memory use *a lot*; applying a mark
8990
// to a tree containing 50 identifiers would otherwise generate
9091
pub struct SCTable {
91-
table : ~[SyntaxContext_],
92+
table : RefCell<~[SyntaxContext_]>,
9293
mark_memo : HashMap<(SyntaxContext,Mrk),SyntaxContext>,
9394
rename_memo : HashMap<(SyntaxContext,Ident,Name),SyntaxContext>
9495
}

branches/try2/src/libsyntax/ast_util.rs

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,10 @@ pub fn new_mark_internal(m:Mrk, tail:SyntaxContext,table:&mut SCTable)
719719
// let try_lookup = table.mark_memo.find(&key);
720720
match table.mark_memo.contains_key(&key) {
721721
false => {
722-
let new_idx = idx_push(&mut table.table,Mark(m,tail));
722+
let new_idx = {
723+
let mut table = table.table.borrow_mut();
724+
idx_push(table.get(), Mark(m,tail))
725+
};
723726
table.mark_memo.insert(key,new_idx);
724727
new_idx
725728
}
@@ -746,7 +749,10 @@ pub fn new_rename_internal(id:Ident, to:Name, tail:SyntaxContext, table: &mut SC
746749
//let try_lookup = table.rename_memo.find(&key);
747750
match table.rename_memo.contains_key(&key) {
748751
false => {
749-
let new_idx = idx_push(&mut table.table,Rename(id,to,tail));
752+
let new_idx = {
753+
let mut table = table.table.borrow_mut();
754+
idx_push(table.get(), Rename(id,to,tail))
755+
};
750756
table.rename_memo.insert(key,new_idx);
751757
new_idx
752758
}
@@ -764,7 +770,7 @@ pub fn new_rename_internal(id:Ident, to:Name, tail:SyntaxContext, table: &mut SC
764770
// FIXME #8215 : currently pub to allow testing
765771
pub fn new_sctable_internal() -> SCTable {
766772
SCTable {
767-
table: ~[EmptyCtxt,IllegalCtxt],
773+
table: RefCell::new(~[EmptyCtxt,IllegalCtxt]),
768774
mark_memo: HashMap::new(),
769775
rename_memo: HashMap::new()
770776
}
@@ -786,7 +792,8 @@ pub fn get_sctable() -> @mut SCTable {
786792
/// print out an SCTable for debugging
787793
pub fn display_sctable(table : &SCTable) {
788794
error!("SC table:");
789-
for (idx,val) in table.table.iter().enumerate() {
795+
let table = table.table.borrow();
796+
for (idx,val) in table.get().iter().enumerate() {
790797
error!("{:4u} : {:?}",idx,val);
791798
}
792799
}
@@ -832,7 +839,11 @@ pub fn resolve_internal(id : Ident,
832839
match resolve_table.contains_key(&key) {
833840
false => {
834841
let resolved = {
835-
match table.table[id.ctxt] {
842+
let result = {
843+
let table = table.table.borrow();
844+
table.get()[id.ctxt]
845+
};
846+
match result {
836847
EmptyCtxt => id.name,
837848
// ignore marks here:
838849
Mark(_,subctxt) =>
@@ -877,7 +888,11 @@ pub fn marksof(ctxt: SyntaxContext, stopname: Name, table: &SCTable) -> ~[Mrk] {
877888
let mut result = ~[];
878889
let mut loopvar = ctxt;
879890
loop {
880-
match table.table[loopvar] {
891+
let table_entry = {
892+
let table = table.table.borrow();
893+
table.get()[loopvar]
894+
};
895+
match table_entry {
881896
EmptyCtxt => {return result;},
882897
Mark(mark,tl) => {
883898
xorPush(&mut result,mark);
@@ -901,7 +916,8 @@ pub fn marksof(ctxt: SyntaxContext, stopname: Name, table: &SCTable) -> ~[Mrk] {
901916
/// FAILS when outside is not a mark.
902917
pub fn mtwt_outer_mark(ctxt: SyntaxContext) -> Mrk {
903918
let sctable = get_sctable();
904-
match sctable.table[ctxt] {
919+
let table = sctable.table.borrow();
920+
match table.get()[ctxt] {
905921
ast::Mark(mrk,_) => mrk,
906922
_ => fail!("can't retrieve outer mark when outside is not a mark")
907923
}
@@ -1018,7 +1034,8 @@ mod test {
10181034
fn refold_test_sc(mut sc: SyntaxContext, table : &SCTable) -> ~[TestSC] {
10191035
let mut result = ~[];
10201036
loop {
1021-
match table.table[sc] {
1037+
let table = table.table.borrow();
1038+
match table.get()[sc] {
10221039
EmptyCtxt => {return result;},
10231040
Mark(mrk,tail) => {
10241041
result.push(M(mrk));
@@ -1040,9 +1057,12 @@ mod test {
10401057

10411058
let test_sc = ~[M(3),R(id(101,0),14),M(9)];
10421059
assert_eq!(unfold_test_sc(test_sc.clone(),EMPTY_CTXT,&mut t),4);
1043-
assert_eq!(t.table[2],Mark(9,0));
1044-
assert_eq!(t.table[3],Rename(id(101,0),14,2));
1045-
assert_eq!(t.table[4],Mark(3,3));
1060+
{
1061+
let table = t.table.borrow();
1062+
assert_eq!(table.get()[2],Mark(9,0));
1063+
assert_eq!(table.get()[3],Rename(id(101,0),14,2));
1064+
assert_eq!(table.get()[4],Mark(3,3));
1065+
}
10461066
assert_eq!(refold_test_sc(4,&t),test_sc);
10471067
}
10481068

@@ -1057,8 +1077,11 @@ mod test {
10571077
let mut t = new_sctable_internal();
10581078

10591079
assert_eq!(unfold_marks(~[3,7],EMPTY_CTXT,&mut t),3);
1060-
assert_eq!(t.table[2],Mark(7,0));
1061-
assert_eq!(t.table[3],Mark(3,2));
1080+
{
1081+
let table = t.table.borrow();
1082+
assert_eq!(table.get()[2],Mark(7,0));
1083+
assert_eq!(table.get()[3],Mark(3,2));
1084+
}
10621085
}
10631086

10641087
#[test] fn test_marksof () {

branches/try2/src/libsyntax/ext/expand.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1516,8 +1516,12 @@ foo_module!()
15161516
mtwt_resolve(v.segments[0].identifier));
15171517
let table = get_sctable();
15181518
println("SC table:");
1519-
for (idx,val) in table.table.iter().enumerate() {
1520-
println!("{:4u} : {:?}",idx,val);
1519+
1520+
{
1521+
let table = table.table.borrow();
1522+
for (idx,val) in table.get().iter().enumerate() {
1523+
println!("{:4u} : {:?}",idx,val);
1524+
}
15211525
}
15221526
}
15231527
assert_eq!(mtwt_resolve(v.segments[0].identifier),resolved_binding);

0 commit comments

Comments
 (0)