@@ -56,8 +56,22 @@ type parser =
56
56
fn get_sess ( ) -> parse_sess ;
57
57
} ;
58
58
59
- fn new_parser ( parse_sess sess, ast:: crate_cfg cfg,
60
- str path , uint pos) -> parser {
59
+ fn new_parser_from_file ( parse_sess sess, ast:: crate_cfg cfg,
60
+ str path , uint pos) -> parser {
61
+ auto ftype = SOURCE_FILE ;
62
+ if ( str:: ends_with ( path, ".rc" ) ) { ftype = CRATE_FILE ; }
63
+ auto srdr = io:: file_reader ( path) ;
64
+ auto src = str:: unsafe_from_bytes ( srdr. read_whole_stream ( ) ) ;
65
+ auto filemap = codemap:: new_filemap ( path, pos) ;
66
+ vec:: push ( sess. cm . files , filemap) ;
67
+ auto itr = @interner:: mk ( str:: hash, str:: eq) ;
68
+ auto rdr = lexer:: new_reader ( sess. cm , src, filemap, itr) ;
69
+
70
+ ret new_parser ( sess, cfg, rdr, ftype) ;
71
+ }
72
+
73
+ fn new_parser ( parse_sess sess, ast:: crate_cfg cfg, lexer:: reader rdr,
74
+ file_type ftype) -> parser {
61
75
obj stdio_parser ( parse_sess sess,
62
76
ast:: crate_cfg cfg,
63
77
file_type ftype,
@@ -110,16 +124,7 @@ fn new_parser(parse_sess sess, ast::crate_cfg cfg,
110
124
fn get_sess ( ) -> parse_sess { ret sess; }
111
125
}
112
126
113
- auto ftype = SOURCE_FILE ;
114
- if ( str:: ends_with ( path, ".rc" ) ) { ftype = CRATE_FILE ; }
115
- auto srdr = io:: file_reader ( path) ;
116
- auto src = str:: unsafe_from_bytes ( srdr. read_whole_stream ( ) ) ;
117
- auto filemap = codemap:: new_filemap ( path, pos) ;
118
- vec:: push ( sess. cm . files , filemap) ;
119
- auto itr = @interner:: mk ( str:: hash, str:: eq) ;
120
- auto rdr = lexer:: new_reader ( sess. cm , src, filemap, itr) ;
121
127
// Make sure npos points at first actual token:
122
-
123
128
lexer:: consume_whitespace_and_comments ( rdr) ;
124
129
auto npos = rdr. get_chpos ( ) ;
125
130
ret stdio_parser ( sess, cfg, ftype, lexer:: next_token ( rdr) ,
@@ -2426,7 +2431,7 @@ fn parse_native_view(&parser p) -> (@ast::view_item)[] {
2426
2431
fn parse_crate_from_source_file( & str input, & ast:: crate_cfg cfg,
2427
2432
& codemap:: codemap cm) -> @ast:: crate {
2428
2433
auto sess = @rec( cm=cm, mutable next_id=0 ) ;
2429
- auto p = new_parser ( sess, cfg, input, 0 u) ;
2434
+ auto p = new_parser_from_file ( sess, cfg, input, 0 u) ;
2430
2435
auto lo = p. get_lo_pos( ) ;
2431
2436
auto crate_attrs = parse_inner_attrs_and_next( p) ;
2432
2437
auto first_item_outer_attrs = crate_attrs. _1;
@@ -2535,7 +2540,7 @@ fn parse_crate_directives(&parser p, token::token term,
2535
2540
fn parse_crate_from_crate_file( & str input, & ast:: crate_cfg cfg,
2536
2541
& codemap:: codemap cm) -> @ast:: crate {
2537
2542
auto sess = @rec( cm=cm, mutable next_id=0 ) ;
2538
- auto p = new_parser ( sess, cfg, input, 0 u) ;
2543
+ auto p = new_parser_from_file ( sess, cfg, input, 0 u) ;
2539
2544
auto lo = p. get_lo_pos( ) ;
2540
2545
auto prefix = std:: fs:: dirname( p. get_filemap( ) . name) ;
2541
2546
auto leading_attrs = parse_inner_attrs_and_next( p) ;
0 commit comments