@@ -13,14 +13,19 @@ import std::serialization::serializer;
13
13
import std:: serialization:: deserializer;
14
14
import std:: serialization:: serializer_helpers;
15
15
import std:: serialization:: deserializer_helpers;
16
+ import std:: prettyprint:: serializer;
16
17
import std:: smallintmap:: map;
17
18
import middle:: trans:: common:: maps;
18
19
import middle :: { ty, typeck, last_use, ast_map} ;
19
- import middle:: typeck:: method_origin;
20
- import middle:: typeck:: vtable_res;
21
- import middle:: typeck:: vtable_origin;
20
+ import middle:: typeck:: { method_origin,
21
+ serialize_method_origin,
22
+ deserialize_method_origin,
23
+ vtable_res,
24
+ vtable_origin} ;
22
25
import driver:: session:: session;
23
- import middle:: freevars:: freevar_entry;
26
+ import middle:: freevars:: { freevar_entry,
27
+ serialize_freevar_entry,
28
+ deserialize_freevar_entry} ;
24
29
import c = common;
25
30
import e = encoder;
26
31
@@ -302,13 +307,13 @@ impl of tr for span {
302
307
303
308
impl serializer_helpers < S : serializer > for S {
304
309
fn emit_def_id ( did : ast:: def_id ) {
305
- astencode_gen :: serialize_syntax_ast_def_id ( self , did)
310
+ ast :: serialize_def_id ( self , did)
306
311
}
307
312
}
308
313
309
314
impl deserializer_helpers < D : deserializer > for D {
310
315
fn read_def_id ( xcx : extended_decode_ctxt ) -> ast:: def_id {
311
- let did = astencode_gen :: deserialize_syntax_ast_def_id ( self ) ;
316
+ let did = ast :: deserialize_def_id ( self ) ;
312
317
did. tr ( xcx)
313
318
}
314
319
}
@@ -330,7 +335,7 @@ impl deserializer_helpers<D: deserializer> for D {
330
335
331
336
fn encode_ast ( ebml_w : ebml:: writer , item : ast:: inlined_item ) {
332
337
ebml_w. wr_tag ( c:: tag_tree as uint ) { ||
333
- astencode_gen :: serialize_syntax_ast_inlined_item ( ebml_w, item)
338
+ ast :: serialize_inlined_item ( ebml_w, item)
334
339
}
335
340
}
336
341
@@ -375,7 +380,7 @@ fn simplify_ast(ii: ast::inlined_item) -> ast::inlined_item {
375
380
fn decode_ast ( par_doc : ebml:: doc ) -> ast:: inlined_item {
376
381
let chi_doc = par_doc[ c:: tag_tree] ;
377
382
let d = ebml:: ebml_deserializer ( chi_doc) ;
378
- astencode_gen :: deserialize_syntax_ast_inlined_item ( d)
383
+ ast :: deserialize_inlined_item ( d)
379
384
}
380
385
381
386
fn renumber_ast ( xcx : extended_decode_ctxt , ii : ast:: inlined_item )
@@ -400,12 +405,12 @@ fn renumber_ast(xcx: extended_decode_ctxt, ii: ast::inlined_item)
400
405
// Encoding and decoding of ast::def
401
406
402
407
fn encode_def ( ebml_w : ebml:: writer , def : ast:: def ) {
403
- astencode_gen :: serialize_syntax_ast_def ( ebml_w, def)
408
+ ast :: serialize_def ( ebml_w, def)
404
409
}
405
410
406
411
fn decode_def ( xcx : extended_decode_ctxt , doc : ebml:: doc ) -> ast:: def {
407
412
let dsr = ebml:: ebml_deserializer ( doc) ;
408
- let def = astencode_gen :: deserialize_syntax_ast_def ( dsr) ;
413
+ let def = ast :: deserialize_def ( dsr) ;
409
414
def. tr ( xcx)
410
415
}
411
416
@@ -448,13 +453,12 @@ impl of tr for ast::def {
448
453
// Encoding and decoding of freevar information
449
454
450
455
fn encode_freevar_entry ( ebml_w : ebml:: writer , fv : freevar_entry ) {
451
- astencode_gen :: serialize_middle_freevars_freevar_entry ( ebml_w, fv)
456
+ serialize_freevar_entry ( ebml_w, fv)
452
457
}
453
458
454
459
impl helper for ebml:: ebml_deserializer {
455
460
fn read_freevar_entry ( xcx : extended_decode_ctxt ) -> freevar_entry {
456
- let fv =
457
- astencode_gen:: deserialize_middle_freevars_freevar_entry ( self ) ;
461
+ let fv = deserialize_freevar_entry ( self ) ;
458
462
fv. tr ( xcx)
459
463
}
460
464
}
@@ -469,16 +473,16 @@ impl of tr for freevar_entry {
469
473
// Encoding and decoding of method_origin
470
474
471
475
fn encode_method_origin ( ebml_w : ebml:: writer , mo : method_origin ) {
472
- astencode_gen :: serialize_middle_typeck_method_origin ( ebml_w, mo)
476
+ serialize_method_origin ( ebml_w, mo)
473
477
}
474
478
475
479
impl helper for ebml:: ebml_deserializer {
476
480
fn read_method_origin ( xcx : extended_decode_ctxt ) -> method_origin {
477
- let fv = astencode_gen :: deserialize_middle_typeck_method_origin ( self ) ;
481
+ let fv = deserialize_method_origin ( self ) ;
478
482
fv. tr ( xcx)
479
483
}
480
484
fn read_is_last_use ( xcx : extended_decode_ctxt ) -> last_use:: is_last_use {
481
- let lu = astencode_gen :: deserialize_middle_last_use_is_last_use ( self ) ;
485
+ let lu = last_use :: deserialize_is_last_use ( self ) ;
482
486
lu. tr ( xcx)
483
487
}
484
488
}
@@ -692,7 +696,7 @@ fn encode_side_tables_for_id(ecx: @e::encode_ctxt,
692
696
ebml_w. tag ( c:: tag_table_def) { ||
693
697
ebml_w. id ( id) ;
694
698
ebml_w. tag ( c:: tag_table_val) { ||
695
- astencode_gen :: serialize_syntax_ast_def ( ebml_w, def)
699
+ ast :: serialize_def ( ebml_w, def)
696
700
}
697
701
}
698
702
}
@@ -774,7 +778,7 @@ fn encode_side_tables_for_id(ecx: @e::encode_ctxt,
774
778
ebml_w. tag ( c:: tag_table_last_use) { ||
775
779
ebml_w. id ( id) ;
776
780
ebml_w. tag ( c:: tag_table_val) { ||
777
- astencode_gen :: serialize_middle_last_use_is_last_use ( ebml_w, m)
781
+ last_use :: serialize_is_last_use ( ebml_w, m)
778
782
}
779
783
}
780
784
}
@@ -786,8 +790,7 @@ fn encode_side_tables_for_id(ecx: @e::encode_ctxt,
786
790
ebml_w. tag ( c:: tag_table_method_map) { ||
787
791
ebml_w. id ( id) ;
788
792
ebml_w. tag ( c:: tag_table_val) { ||
789
- astencode_gen::
790
- serialize_middle_typeck_method_origin ( ebml_w, mo)
793
+ serialize_method_origin ( ebml_w, mo)
791
794
}
792
795
}
793
796
}
@@ -901,3 +904,128 @@ fn decode_side_tables(xcx: extended_decode_ctxt,
901
904
#debug[ ">< Side table doc loaded" ] ;
902
905
}
903
906
}
907
+
908
+ // ______________________________________________________________________
909
+ // Testing of astencode_gen
910
+
911
+ #[ cfg( test) ]
912
+ fn encode_item_ast ( ebml_w : ebml:: writer , item : @ast:: item ) {
913
+ ebml_w. wr_tag ( c:: tag_tree as uint ) { ||
914
+ ast:: serialize_item ( ebml_w, * item) ;
915
+ }
916
+ }
917
+
918
+ #[ cfg( test) ]
919
+ fn decode_item_ast ( par_doc : ebml:: doc ) -> @ast:: item {
920
+ let chi_doc = par_doc[ c:: tag_tree] ;
921
+ let d = ebml:: ebml_deserializer ( chi_doc) ;
922
+ @ast:: deserialize_item ( d)
923
+ }
924
+
925
+ #[ cfg( test) ]
926
+ fn new_parse_sess ( ) -> parser:: parse_sess {
927
+ let cm = codemap:: new_codemap ( ) ;
928
+ let handler = diagnostic:: mk_handler ( option:: none) ;
929
+ let sess = @{
930
+ cm: cm,
931
+ mutable next_id: 1 ,
932
+ span_diagnostic: diagnostic:: mk_span_handler ( handler, cm) ,
933
+ mutable chpos: 0 u,
934
+ mutable byte_pos: 0 u
935
+ } ;
936
+ ret sess;
937
+ }
938
+
939
+ #[ cfg( test) ]
940
+ iface fake_ext_ctxt {
941
+ fn session( ) -> fake_session;
942
+ }
943
+
944
+ #[ cfg( test) ]
945
+ type fake_options = { cfg : ast:: crate_cfg } ;
946
+
947
+ #[ cfg( test) ]
948
+ type fake_session = { opts : @fake_options ,
949
+ parse_sess : parser:: parse_sess } ;
950
+
951
+ #[ cfg( test) ]
952
+ impl of fake_ext_ctxt for fake_session {
953
+ fn session ( ) -> fake_session { self }
954
+ }
955
+
956
+ #[ cfg( test) ]
957
+ fn mk_ctxt ( ) -> fake_ext_ctxt {
958
+ let opts : fake_options = { cfg: [ ] } ;
959
+ { opts: @opts, parse_sess: new_parse_sess ( ) } as fake_ext_ctxt
960
+ }
961
+
962
+ #[ cfg( test) ]
963
+ fn roundtrip ( in_item : @ast:: item ) {
964
+ #debug[ "in_item = %s" , pprust:: item_to_str ( in_item) ] ;
965
+ let mbuf = io:: mem_buffer ( ) ;
966
+ let ebml_w = ebml:: writer ( io:: mem_buffer_writer ( mbuf) ) ;
967
+ encode_item_ast ( ebml_w, in_item) ;
968
+ let ebml_doc = ebml:: doc ( @io:: mem_buffer_buf ( mbuf) ) ;
969
+ let out_item = decode_item_ast ( ebml_doc) ;
970
+ #debug[ "out_item = %s" , pprust:: item_to_str ( out_item) ] ;
971
+
972
+ let exp_str =
973
+ io:: with_str_writer { |w| ast:: serialize_item ( w, * in_item) } ;
974
+ let out_str =
975
+ io:: with_str_writer { |w| ast:: serialize_item ( w, * out_item) } ;
976
+
977
+ #debug[ "expected string: %s" , exp_str] ;
978
+ #debug[ "actual string : %s" , out_str] ;
979
+
980
+ assert exp_str == out_str;
981
+ }
982
+
983
+ #[ test]
984
+ fn test_basic ( ) {
985
+ let ext_cx = mk_ctxt ( ) ;
986
+ roundtrip ( #ast ( item) {
987
+ fn foo ( ) { }
988
+ } ) ;
989
+ }
990
+
991
+ #[ test]
992
+ fn test_smalltalk ( ) {
993
+ let ext_cx = mk_ctxt ( ) ;
994
+ roundtrip ( #ast ( item) {
995
+ fn foo ( ) -> int { 3 + 4 } // first smalltalk program ever executed.
996
+ } ) ;
997
+ }
998
+
999
+ #[ test]
1000
+ fn test_more ( ) {
1001
+ let ext_cx = mk_ctxt ( ) ;
1002
+ roundtrip ( #ast ( item) {
1003
+ fn foo ( x : uint , y : uint ) -> uint {
1004
+ let z = x + y;
1005
+ ret z;
1006
+ }
1007
+ } ) ;
1008
+ }
1009
+
1010
+ #[ test]
1011
+ fn test_simplification ( ) {
1012
+ let ext_cx = mk_ctxt ( ) ;
1013
+ let item_in = ast:: ii_item ( #ast ( item) {
1014
+ fn new_int_alist < B : copy > ( ) -> alist < int , B > {
1015
+ fn eq_int ( & & a: int , & & b: int ) -> bool { a == b }
1016
+ ret { eq_fn : eq_int, mut data : [ ] } ;
1017
+ }
1018
+ } ) ;
1019
+ let item_out = simplify_ast ( item_in) ;
1020
+ let item_exp = ast:: ii_item ( #ast ( item) {
1021
+ fn new_int_alist < B : copy > ( ) -> alist < int , B > {
1022
+ ret { eq_fn : eq_int, mut data : [ ] } ;
1023
+ }
1024
+ } ) ;
1025
+ alt ( item_out, item_exp) {
1026
+ ( ast:: ii_item ( item_out) , ast:: ii_item ( item_exp) ) {
1027
+ assert pprust:: item_to_str ( item_out) == pprust:: item_to_str ( item_exp) ;
1028
+ }
1029
+ _ { fail; }
1030
+ }
1031
+ }
0 commit comments