@@ -599,13 +599,8 @@ where
599
599
if FileTime :: from_last_modification_time ( out_rs_md)
600
600
> FileTime :: from_last_modification_time ( inmd)
601
601
{
602
- if let Ok ( mut outc) = read_to_string ( outp) {
603
- // Strip whitespace from the output file and the cache since the copy of
604
- // the cache in the output file may be affected by pretty printing.
605
- let mut cache = cache. to_string ( ) ;
606
- outc. retain ( |c| !c. is_whitespace ( ) ) ;
607
- cache. retain ( |c| !c. is_whitespace ( ) ) ;
608
- if outc. contains ( & cache) {
602
+ if let Ok ( outc) = read_to_string ( outp) {
603
+ if outc. contains ( & cache. to_string ( ) ) {
609
604
return Ok ( CTParser {
610
605
regenerated : false ,
611
606
rule_ids,
@@ -614,6 +609,8 @@ where
614
609
} else {
615
610
#[ cfg( grmtools_extra_checks) ]
616
611
if std:: env:: var ( "CACHE_EXPECTED" ) . is_ok ( ) {
612
+ eprintln ! ( "outc: {}" , outc) ;
613
+ eprintln ! ( "using cache: {}" , cache, ) ;
617
614
// Primarily for use in the testsuite.
618
615
panic ! ( "The cache regenerated however, it was expected to match" ) ;
619
616
}
@@ -644,7 +641,20 @@ where
644
641
}
645
642
}
646
643
647
- self . output_file ( & grm, & stable, & derived_mod_name, outp, & cache) ?;
644
+ self . output_file (
645
+ & grm,
646
+ & stable,
647
+ & derived_mod_name,
648
+ outp,
649
+ & quote ! {
650
+ // This declaration can be affected by the pretty printer.
651
+ // But we would hope the actual cache string is not.
652
+ //
653
+ // This is emitted for the purposes of performing the cache check.
654
+ // on the output source, but is not used by generated parser.
655
+ const _: & str = #cache;
656
+ } ,
657
+ ) ?;
648
658
let conflicts = if stable. conflicts ( ) . is_some ( ) {
649
659
Some ( ( grm, sgraph, stable) )
650
660
} else {
@@ -862,31 +872,22 @@ where
862
872
) )
863
873
} )
864
874
. collect :: < Vec < _ > > ( ) ;
865
- let rule_map_len = rule_map. len ( ) ;
866
- quote ! {
867
- #[ allow( unused) ]
868
- mod _cache_information_ {
869
- use :: lrpar:: { RecoveryKind , Visibility , RustEdition } ;
870
- use :: cfgrammar:: yacc:: YaccKind ;
871
-
872
- const BUILD_TIME : & str = #build_time;
873
- // May differ from `MOD_NAME` by being derived from the grammar path.
874
- const DERIVED_MOD_NAME : & str = #derived_mod_name;
875
- const GRAMMAR_PATH : & str = #grammar_path;
876
- // As explicitly set by the builder.
877
- const MOD_NAME : Option <& str > = #mod_name;
878
- const RECOVERER : RecoveryKind = #recoverer;
879
- const YACC_KIND : YaccKind = #yacckind;
880
- const ERROR_ON_CONFLICTS : bool = #error_on_conflicts;
881
- const SHOW_WARNINGS : bool = #show_warnings;
882
- const WARNINGS_ARE_ERRORS : bool = #warnings_are_errors;
883
- const RUST_EDITION : RustEdition = #rust_edition;
884
- const RULE_IDS_MAP : [ ( usize , & str ) ; #rule_map_len] = [ #( #rule_map, ) * ] ;
885
- fn visibility( ) -> Visibility {
886
- #visibility
887
- }
888
- }
889
- }
875
+ let cache_info = quote ! {
876
+ BUILD_TIME = #build_time
877
+ DERIVED_MOD_NAME = #derived_mod_name
878
+ GRAMMAR_PATH = #grammar_path
879
+ MOD_NAME = #mod_name
880
+ RECOVERER = #recoverer
881
+ YACC_KIND = #yacckind
882
+ ERROR_ON_CONFLICTS = #error_on_conflicts
883
+ SHOW_WARNINGS = #show_warnings
884
+ WARNINGS_ARE_ERRORS = #warnings_are_errors
885
+ RUST_EDITION = #rust_edition
886
+ RULE_IDS_MAP = [ #( #rule_map, ) * ]
887
+ VISIBILITY = #visibility
888
+ } ;
889
+ let cache_info_str = cache_info. to_string ( ) ;
890
+ quote ! ( #cache_info_str)
890
891
}
891
892
892
893
/// Generate the main parse() function for the output file.
0 commit comments