File tree Expand file tree Collapse file tree 4 files changed +62
-1
lines changed Expand file tree Collapse file tree 4 files changed +62
-1
lines changed Original file line number Diff line number Diff line change @@ -6128,7 +6128,19 @@ impl<'a> Parser<'a> {
61286128 }
61296129
61306130 pub fn submod_path_from_attr ( attrs : & [ Attribute ] , dir_path : & Path ) -> Option < PathBuf > {
6131- attr:: first_attr_value_str_by_name ( attrs, "path" ) . map ( |d| dir_path. join ( & d. as_str ( ) ) )
6131+ if let Some ( s) = attr:: first_attr_value_str_by_name ( attrs, "path" ) {
6132+ let s = s. as_str ( ) ;
6133+
6134+ // On windows, the base path might have the form
6135+ // `\\?\foo\bar` in which case it does not tolerate
6136+ // mixed `/` and `\` separators, so canonicalize
6137+ // `/` to `\`.
6138+ #[ cfg( windows) ]
6139+ let s = s. replace ( "/" , "\\ " ) ;
6140+ Some ( dir_path. join ( s) )
6141+ } else {
6142+ None
6143+ }
61326144 }
61336145
61346146 /// Returns either a path to a module, or .
Original file line number Diff line number Diff line change 1+ // Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
2+ // file at the top-level directory of this distribution and at
3+ // http://rust-lang.org/COPYRIGHT.
4+ //
5+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+ // option. This file may not be copied, modified, or distributed
9+ // except according to those terms.
10+
11+ // Testing that a libsyntax can parse modules with canonicalized base path
12+ // ignore-cross-compile
13+
14+ #![ feature( rustc_private) ]
15+
16+ extern crate syntax;
17+
18+ use std:: path:: Path ;
19+ use syntax:: codemap:: FilePathMapping ;
20+ use syntax:: parse:: { self , ParseSess } ;
21+
22+ #[ path = "mod_dir_simple/test.rs" ]
23+ mod gravy;
24+
25+ pub fn main ( ) {
26+ syntax:: with_globals ( || parse ( ) ) ;
27+
28+ assert_eq ! ( gravy:: foo( ) , 10 ) ;
29+ }
30+
31+ fn parse ( ) {
32+ let parse_session = ParseSess :: new ( FilePathMapping :: empty ( ) ) ;
33+
34+ let path = Path :: new ( file ! ( ) ) ;
35+ let path = path. canonicalize ( ) . unwrap ( ) ;
36+ let mut parser = parse:: new_parser_from_file ( & parse_session, & path) ;
37+ let _ = parser. parse_crate_mod ( ) ;
38+ }
Original file line number Diff line number Diff line change 1+ // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2+ // file at the top-level directory of this distribution and at
3+ // http://rust-lang.org/COPYRIGHT.
4+ //
5+ // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+ // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+ // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+ // option. This file may not be copied, modified, or distributed
9+ // except according to those terms.
10+
11+ pub fn foo ( ) -> isize { 10 }
You can’t perform that action at this time.
0 commit comments