@@ -4264,21 +4264,28 @@ impl Parser {
4264
4264
path : Path ,
4265
4265
outer_attrs : ~[ ast:: Attribute ] ,
4266
4266
id_sp : Span ) -> ( ast:: item_ , ~[ ast:: Attribute ] ) {
4267
- let maybe_i = self . sess . included_mod_stack . iter ( ) . position ( |p| * p == path) ;
4268
- match maybe_i {
4269
- Some ( i) => {
4270
- let stack = & self . sess . included_mod_stack ;
4271
- let mut err = ~"circular modules: ";
4272
- for p in stack.slice(i, stack.len()).iter() {
4273
- p.display().with_str(|s| err.push_str(s));
4274
- err.push_str(" -> ");
4267
+ {
4268
+ let mut included_mod_stack = self . sess
4269
+ . included_mod_stack
4270
+ . borrow_mut ( ) ;
4271
+ let maybe_i = included_mod_stack. get ( )
4272
+ . iter ( )
4273
+ . position ( |p| * p == path) ;
4274
+ match maybe_i {
4275
+ Some ( i) => {
4276
+ let mut err = ~"circular modules: ";
4277
+ let len = included_mod_stack.get().len();
4278
+ for p in included_mod_stack.get().slice(i, len).iter() {
4279
+ p.display().with_str(|s| err.push_str(s));
4280
+ err.push_str(" -> ");
4281
+ }
4282
+ path.display().with_str(|s| err.push_str(s));
4283
+ self.span_fatal(id_sp, err);
4275
4284
}
4276
- path.display().with_str(|s| err.push_str(s));
4277
- self.span_fatal(id_sp, err);
4285
+ None => ()
4278
4286
}
4279
- None => ()
4287
+ included_mod_stack.get().push(path.clone());
4280
4288
}
4281
- self.sess.included_mod_stack.push(path.clone());
4282
4289
4283
4290
let mut p0 =
4284
4291
new_sub_parser_from_file(self.sess,
@@ -4289,7 +4296,12 @@ impl Parser {
4289
4296
let mod_attrs = vec::append(outer_attrs, inner);
4290
4297
let first_item_outer_attrs = next;
4291
4298
let m0 = p0.parse_mod_items(token::EOF, first_item_outer_attrs);
4292
- self.sess.included_mod_stack.pop();
4299
+ {
4300
+ let mut included_mod_stack = self.sess
4301
+ .included_mod_stack
4302
+ .borrow_mut();
4303
+ included_mod_stack.get().pop();
4304
+ }
4293
4305
return (ast::item_mod(m0), mod_attrs);
4294
4306
}
4295
4307
0 commit comments