@@ -14,7 +14,6 @@ use rustc_hir::def_id::{CrateNum, LOCAL_CRATE};
14
14
use rustc_middle:: middle:: dependency_format:: Linkage ;
15
15
use rustc_middle:: middle:: exported_symbols:: { ExportedSymbol , SymbolExportInfo , SymbolExportKind } ;
16
16
use rustc_middle:: ty:: TyCtxt ;
17
- use rustc_serialize:: { json, Encoder } ;
18
17
use rustc_session:: config:: { self , CrateType , DebugInfo , LinkerPluginLto , Lto , OptLevel , Strip } ;
19
18
use rustc_session:: Session ;
20
19
use rustc_span:: symbol:: Symbol ;
@@ -1147,26 +1146,24 @@ impl<'a> Linker for EmLinker<'a> {
1147
1146
}
1148
1147
1149
1148
fn export_symbols ( & mut self , _tmpdir : & Path , _crate_type : CrateType , symbols : & [ String ] ) {
1149
+ use std:: fmt:: Write ;
1150
+
1150
1151
debug ! ( "EXPORTED SYMBOLS:" ) ;
1151
1152
1153
+ let mut encoded = "[" . to_string ( ) ;
1154
+ let mut symbols = symbols. iter ( ) ;
1155
+ if let Some ( first_symbol) = symbols. next ( ) {
1156
+ write ! ( encoded, "{:?}" , first_symbol) . unwrap ( ) ;
1157
+ }
1158
+ for symbol in symbols {
1159
+ write ! ( encoded, ",{:?}" , symbol) . unwrap ( ) ;
1160
+ }
1161
+ encoded. push ( ']' ) ;
1162
+ debug ! ( "{}" , encoded) ;
1163
+
1152
1164
self . cmd . arg ( "-s" ) ;
1153
1165
1154
1166
let mut arg = OsString :: from ( "EXPORTED_FUNCTIONS=" ) ;
1155
- let mut encoded = String :: new ( ) ;
1156
-
1157
- {
1158
- let mut encoder = json:: Encoder :: new ( & mut encoded) ;
1159
- let res = encoder. emit_seq ( symbols. len ( ) , |encoder| {
1160
- for ( i, sym) in symbols. iter ( ) . enumerate ( ) {
1161
- encoder. emit_seq_elt ( i, |encoder| encoder. emit_str ( & ( "_" . to_owned ( ) + sym) ) ) ?;
1162
- }
1163
- Ok ( ( ) )
1164
- } ) ;
1165
- if let Err ( e) = res {
1166
- self . sess . fatal ( & format ! ( "failed to encode exported symbols: {}" , e) ) ;
1167
- }
1168
- }
1169
- debug ! ( "{}" , encoded) ;
1170
1167
arg. push ( encoded) ;
1171
1168
1172
1169
self . cmd . arg ( arg) ;
0 commit comments