@@ -3423,12 +3423,19 @@ struct parser {
3423
3423
}
3424
3424
3425
3425
fn is_view_item ( ) -> bool {
3426
- let tok = if !self . is_keyword ( ~"pub ") && !self . is_keyword ( ~"priv") {
3427
- self . token
3428
- } else { self . look_ahead ( 1 u) } ;
3426
+ let tok, next_tok;
3427
+ if !self . is_keyword ( ~"pub ") && !self . is_keyword ( ~"priv") {
3428
+ tok = self . token ;
3429
+ next_tok = self . look_ahead ( 1 ) ;
3430
+ } else {
3431
+ tok = self . look_ahead ( 1 ) ;
3432
+ next_tok = self . look_ahead ( 2 ) ;
3433
+ } ;
3429
3434
self . token_is_keyword ( ~"use ", tok)
3430
3435
|| self . token_is_keyword ( ~"import", tok)
3431
3436
|| self . token_is_keyword ( ~"export", tok)
3437
+ || ( self . token_is_keyword ( ~"extern ", tok) &&
3438
+ self.token_is_keyword(~" mod", next_tok) )
3432
3439
}
3433
3440
3434
3441
fn parse_view_item ( +attrs : ~[ attribute ] ) -> @view_item {
@@ -3439,7 +3446,14 @@ struct parser {
3439
3446
view_item_import ( self . parse_view_paths ( ) )
3440
3447
} else if self . eat_keyword ( ~"export") {
3441
3448
view_item_export ( self . parse_view_paths ( ) )
3442
- } else { fail; } ;
3449
+ } else if self . eat_keyword ( ~"extern ") {
3450
+ self . expect_keyword ( ~"mod ") ;
3451
+ let ident = self . parse_ident ( ) ;
3452
+ let metadata = self . parse_optional_meta ( ) ;
3453
+ view_item_use ( ident, metadata, self . get_id ( ) )
3454
+ } else {
3455
+ fail;
3456
+ } ;
3443
3457
self . expect ( token:: SEMI ) ;
3444
3458
@{ node: node, attrs: attrs,
3445
3459
vis: vis, span: mk_sp ( lo, self . last_span . hi ) }
@@ -3564,7 +3578,8 @@ struct parser {
3564
3578
} else if self . is_view_item ( ) {
3565
3579
let vi = self . parse_view_item ( outer_attrs) ;
3566
3580
return spanned ( lo, vi. span . hi , cdir_view_item ( vi) ) ;
3567
- } else { return self . fatal ( ~"expected crate directive") ; }
3581
+ }
3582
+ return self . fatal ( ~"expected crate directive") ;
3568
3583
}
3569
3584
3570
3585
fn parse_crate_directives ( term : token:: token ,
0 commit comments