File tree 4 files changed +62
-1
lines changed
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> {
6128
6128
}
6129
6129
6130
6130
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
+ }
6132
6144
}
6133
6145
6134
6146
/// 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