@@ -176,8 +176,12 @@ fn encode_def_id(&ebml.writer ebml_w, &ast.def_id id) {
176
176
ebml. end_tag ( ebml_w) ;
177
177
}
178
178
179
- fn encode_tag_variant_paths ( & ebml. writer ebml_w , vec[ ast. variant] variants ) {
179
+ fn encode_tag_variant_paths ( & ebml. writer ebml_w ,
180
+ vec[ ast. variant] variants ,
181
+ vec[ str] path ,
182
+ & mutable vec[ tup( str, uint) ] index ) {
180
183
for ( ast. variant variant in variants) {
184
+ add_to_index ( ebml_w, path, index, variant. node . name ) ;
181
185
ebml. start_tag ( ebml_w, tag_paths_data_item) ;
182
186
encode_name ( ebml_w, variant. node . name ) ;
183
187
encode_def_id ( ebml_w, variant. node . id ) ;
@@ -266,9 +270,10 @@ fn encode_module_item_paths(&ebml.writer ebml_w,
266
270
add_to_index ( ebml_w, path, index, id) ;
267
271
ebml. start_tag ( ebml_w, tag_paths_data_item) ;
268
272
encode_name ( ebml_w, id) ;
269
- encode_tag_variant_paths ( ebml_w, variants) ;
270
273
encode_def_id ( ebml_w, did) ;
271
274
ebml. end_tag ( ebml_w) ;
275
+
276
+ encode_tag_variant_paths ( ebml_w, variants, path, index) ;
272
277
}
273
278
case ( ast. item_obj ( ?id, _, ?tps, ?odid, ?ann) ) {
274
279
add_to_index ( ebml_w, path, index, id) ;
@@ -314,6 +319,12 @@ fn encode_type_params(&ebml.writer ebml_w, vec[ast.ty_param] tps) {
314
319
}
315
320
}
316
321
322
+ fn encode_variant_id ( & ebml. writer ebml_w , ast. def_id vid ) {
323
+ ebml. start_tag ( ebml_w, tag_items_data_item_variant) ;
324
+ ebml_w. writer . write ( _str. bytes ( def_to_str ( vid) ) ) ;
325
+ ebml. end_tag ( ebml_w) ;
326
+ }
327
+
317
328
fn encode_type ( & ebml. writer ebml_w , @ty. t typ ) {
318
329
ebml. start_tag ( ebml_w, tag_items_data_item_type) ;
319
330
auto f = def_to_str;
@@ -348,23 +359,24 @@ fn encode_obj_type_id(&ebml.writer ebml_w, &ast.def_id id) {
348
359
349
360
350
361
fn encode_tag_variant_info ( @trans. crate_ctxt cx , & ebml. writer ebml_w ,
351
- ast. def_id did , vec[ ast. variant] variants ) {
362
+ ast. def_id did , vec[ ast. variant] variants ,
363
+ & mutable vec[ tup( int, uint) ] index ) {
352
364
for ( ast. variant variant in variants) {
365
+ index += vec ( tup ( variant. node . id . _1 , ebml_w. writer . tell ( ) ) ) ;
366
+
353
367
ebml. start_tag ( ebml_w, tag_items_data_item) ;
354
368
encode_def_id ( ebml_w, variant. node . id ) ;
355
369
encode_kind ( ebml_w, 'v' as u8 ) ;
356
370
encode_tag_id ( ebml_w, did) ;
357
371
encode_type ( ebml_w, trans. node_ann_type ( cx, variant. node . ann ) ) ;
358
- if ( _vec. len [ ast. variant_arg ] ( variant. node . args ) > 0 u) {
359
- encode_symbol ( cx, ebml_w, variant. node . id ) ;
360
- }
372
+ encode_symbol ( cx, ebml_w, variant. node . id ) ;
361
373
encode_discriminant ( cx, ebml_w, variant. node . id ) ;
362
374
ebml. end_tag ( ebml_w) ;
363
375
}
364
376
}
365
377
366
378
fn encode_info_for_item ( @trans. crate_ctxt cx , & ebml. writer ebml_w ,
367
- @ast . item item) {
379
+ @ast . item item, & mutable vec [ tup ( int , uint ) ] index ) {
368
380
alt ( item. node ) {
369
381
case ( ast. item_const ( _, _, _, ?did, ?ann) ) {
370
382
ebml. start_tag ( ebml_w, tag_items_data_item) ;
@@ -409,9 +421,12 @@ fn encode_info_for_item(@trans.crate_ctxt cx, &ebml.writer ebml_w,
409
421
encode_kind ( ebml_w, 't' as u8 ) ;
410
422
encode_type_params ( ebml_w, tps) ;
411
423
encode_type ( ebml_w, trans. node_ann_type ( cx, ann) ) ;
424
+ for ( ast. variant v in variants) {
425
+ encode_variant_id ( ebml_w, v. node . id ) ;
426
+ }
412
427
ebml. end_tag ( ebml_w) ;
413
428
414
- encode_tag_variant_info ( cx, ebml_w, did, variants) ;
429
+ encode_tag_variant_info ( cx, ebml_w, did, variants, index ) ;
415
430
}
416
431
case ( ast. item_obj ( ?id, _, ?tps, ?odid, ?ann) ) {
417
432
ebml. start_tag ( ebml_w, tag_items_data_item) ;
@@ -458,7 +473,7 @@ fn encode_info_for_items(@trans.crate_ctxt cx, &ebml.writer ebml_w)
458
473
ebml. start_tag ( ebml_w, tag_items_data) ;
459
474
for each ( @tup( ast. def_id, @ast. item) kvp in cx. items . items ( ) ) {
460
475
index += vec ( tup ( kvp. _0 . _1 , ebml_w. writer . tell ( ) ) ) ;
461
- encode_info_for_item ( cx, ebml_w, kvp. _1 ) ;
476
+ encode_info_for_item ( cx, ebml_w, kvp. _1 , index ) ;
462
477
}
463
478
for each ( @tup( ast. def_id, @ast. native_item) kvp in
464
479
cx. native_items . items ( ) ) {
0 commit comments