@@ -66,7 +66,7 @@ use pretty::{PpMode, UserIdentifiedItem};
66
66
use rustc_resolve as resolve;
67
67
use rustc_save_analysis as save;
68
68
use rustc_trans:: back:: link;
69
- use rustc:: session:: { config, Session , build_session, CompileResult } ;
69
+ use rustc:: session:: { self , config, Session , build_session, CompileResult } ;
70
70
use rustc:: session:: config:: { Input , PrintRequest , OutputType , ErrorOutputType } ;
71
71
use rustc:: session:: config:: { get_unstable_features_setting, nightly_options} ;
72
72
use rustc:: middle:: cstore:: CrateStore ;
@@ -91,13 +91,11 @@ use std::thread;
91
91
92
92
use rustc:: session:: early_error;
93
93
94
- use syntax:: ast;
95
- use syntax:: parse:: { self , PResult } ;
96
- use syntax:: errors;
94
+ use syntax:: { ast, errors, diagnostics} ;
95
+ use syntax:: codemap:: { CodeMap , FileLoader , RealFileLoader } ;
97
96
use syntax:: errors:: emitter:: Emitter ;
98
- use syntax:: diagnostics;
99
- use syntax:: parse:: token;
100
97
use syntax:: feature_gate:: { GatedCfg , UnstableFeatures } ;
98
+ use syntax:: parse:: { self , PResult , token} ;
101
99
102
100
#[ cfg( test) ]
103
101
pub mod test;
@@ -148,11 +146,20 @@ pub fn run(args: Vec<String>) -> isize {
148
146
0
149
147
}
150
148
151
- // Parse args and run the compiler. This is the primary entry point for rustc.
152
- // See comments on CompilerCalls below for details about the callbacks argument.
153
149
pub fn run_compiler < ' a > ( args : & [ String ] ,
154
150
callbacks : & mut CompilerCalls < ' a > )
155
151
-> ( CompileResult , Option < Session > ) {
152
+ run_compiler_with_file_loader ( args, callbacks, box RealFileLoader )
153
+ }
154
+
155
+ // Parse args and run the compiler. This is the primary entry point for rustc.
156
+ // See comments on CompilerCalls below for details about the callbacks argument.
157
+ // The FileLoader provides a way to load files from sources other than the file system.
158
+ pub fn run_compiler_with_file_loader < ' a , L > ( args : & [ String ] ,
159
+ callbacks : & mut CompilerCalls < ' a > ,
160
+ loader : Box < L > )
161
+ -> ( CompileResult , Option < Session > )
162
+ where L : FileLoader + ' static {
156
163
macro_rules! do_or_return { ( $expr: expr, $sess: expr) => {
157
164
match $expr {
158
165
Compilation :: Stop => return ( Ok ( ( ) ) , $sess) ,
@@ -189,7 +196,12 @@ pub fn run_compiler<'a>(args: &[String],
189
196
} ;
190
197
191
198
let cstore = Rc :: new ( CStore :: new ( token:: get_ident_interner ( ) ) ) ;
192
- let sess = build_session ( sopts, input_file_path, descriptions, cstore. clone ( ) ) ;
199
+ let codemap = Rc :: new ( CodeMap :: with_file_loader ( loader) ) ;
200
+ let sess = session:: build_session_with_codemap ( sopts,
201
+ input_file_path,
202
+ descriptions,
203
+ cstore. clone ( ) ,
204
+ codemap) ;
193
205
rustc_lint:: register_builtins ( & mut sess. lint_store . borrow_mut ( ) , Some ( & sess) ) ;
194
206
let mut cfg = config:: build_configuration ( & sess) ;
195
207
target_features:: add_configuration ( & mut cfg, & sess) ;
0 commit comments