diff options
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/.gitignore | 4 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddDecl1.expected.hs (renamed from utils/check-exact/cases/AddDecl1.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddDecl1.hs (renamed from utils/check-exact/cases/AddDecl1.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddDecl2.expected.hs (renamed from utils/check-exact/cases/AddDecl2.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddDecl2.hs (renamed from utils/check-exact/cases/AddDecl2.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddDecl3.expected.hs (renamed from utils/check-exact/cases/AddDecl3.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddDecl3.hs (renamed from utils/check-exact/cases/AddDecl3.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddHiding1.expected.hs (renamed from utils/check-exact/cases/AddHiding1.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddHiding1.hs (renamed from utils/check-exact/cases/AddHiding1.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddHiding2.expected.hs (renamed from utils/check-exact/cases/AddHiding2.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddHiding2.hs (renamed from utils/check-exact/cases/AddHiding2.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl1.expected.hs (renamed from utils/check-exact/cases/AddLocalDecl1.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl1.hs (renamed from utils/check-exact/cases/AddLocalDecl1.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl2.expected.hs (renamed from utils/check-exact/cases/AddLocalDecl2.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl2.hs (renamed from utils/check-exact/cases/AddLocalDecl2.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl3.expected.hs (renamed from utils/check-exact/cases/AddLocalDecl3.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl3.hs (renamed from utils/check-exact/cases/AddLocalDecl3.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl4.expected.hs (renamed from utils/check-exact/cases/AddLocalDecl4.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl4.hs (renamed from utils/check-exact/cases/AddLocalDecl4.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl5.expected.hs (renamed from utils/check-exact/cases/AddLocalDecl5.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl5.hs (renamed from utils/check-exact/cases/AddLocalDecl5.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl6.expected.hs (renamed from utils/check-exact/cases/AddLocalDecl6.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/AddLocalDecl6.hs (renamed from utils/check-exact/cases/AddLocalDecl6.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/EmptyWheres.hs (renamed from utils/check-exact/cases/EmptyWheres.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn1.expected.hs (renamed from utils/check-exact/cases/LayoutIn1.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn1.hs (renamed from utils/check-exact/cases/LayoutIn1.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn3.expected.hs (renamed from utils/check-exact/cases/LayoutIn3.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn3.hs (renamed from utils/check-exact/cases/LayoutIn3.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn3a.expected.hs (renamed from utils/check-exact/cases/LayoutIn3a.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn3a.hs (renamed from utils/check-exact/cases/LayoutIn3a.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn3b.expected.hs (renamed from utils/check-exact/cases/LayoutIn3b.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn3b.hs (renamed from utils/check-exact/cases/LayoutIn3b.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn4.expected.hs (renamed from utils/check-exact/cases/LayoutIn4.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutIn4.hs (renamed from utils/check-exact/cases/LayoutIn4.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutLet2.expected.hs (renamed from utils/check-exact/cases/LayoutLet2.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutLet2.hs (renamed from utils/check-exact/cases/LayoutLet2.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutLet3.expected.hs (renamed from utils/check-exact/cases/LayoutLet3.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutLet3.hs (renamed from utils/check-exact/cases/LayoutLet3.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutLet4.expected.hs (renamed from utils/check-exact/cases/LayoutLet4.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LayoutLet4.hs (renamed from utils/check-exact/cases/LayoutLet4.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LetIn1.expected.hs (renamed from utils/check-exact/cases/LetIn1.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LetIn1.hs (renamed from utils/check-exact/cases/LetIn1.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LocToName.expected.hs (renamed from utils/check-exact/cases/LocToName.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LocToName.hs (renamed from utils/check-exact/cases/LocToName.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LocalDecls.expected.hs (renamed from utils/check-exact/cases/LocalDecls.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LocalDecls.hs (renamed from utils/check-exact/cases/LocalDecls.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LocalDecls2.expected.hs (renamed from utils/check-exact/cases/LocalDecls2.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/LocalDecls2.hs (renamed from utils/check-exact/cases/LocalDecls2.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/Makefile | 160 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/Rename1.expected.hs (renamed from utils/check-exact/cases/Rename1.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/Rename1.hs (renamed from utils/check-exact/cases/Rename1.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/Rename2.expected.hs (renamed from utils/check-exact/cases/Rename2.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/Rename2.hs (renamed from utils/check-exact/cases/Rename2.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RenameCase1.expected.hs (renamed from utils/check-exact/cases/RenameCase1.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RenameCase1.hs (renamed from utils/check-exact/cases/RenameCase1.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl1.expected.hs (renamed from utils/check-exact/cases/RmDecl1.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl1.hs (renamed from utils/check-exact/cases/RmDecl1.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl2.expected.hs (renamed from utils/check-exact/cases/RmDecl2.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl2.hs (renamed from utils/check-exact/cases/RmDecl2.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl3.expected.hs (renamed from utils/check-exact/cases/RmDecl3.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl3.hs (renamed from utils/check-exact/cases/RmDecl3.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl4.expected.hs (renamed from utils/check-exact/cases/RmDecl4.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl4.hs (renamed from utils/check-exact/cases/RmDecl4.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl5.expected.hs (renamed from utils/check-exact/cases/RmDecl5.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl5.hs (renamed from utils/check-exact/cases/RmDecl5.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl6.expected.hs (renamed from utils/check-exact/cases/RmDecl6.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl6.hs (renamed from utils/check-exact/cases/RmDecl6.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl7.expected.hs (renamed from utils/check-exact/cases/RmDecl7.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmDecl7.hs (renamed from utils/check-exact/cases/RmDecl7.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmTypeSig1.expected.hs (renamed from utils/check-exact/cases/RmTypeSig1.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmTypeSig1.hs (renamed from utils/check-exact/cases/RmTypeSig1.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmTypeSig2.expected.hs (renamed from utils/check-exact/cases/RmTypeSig2.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/RmTypeSig2.hs (renamed from utils/check-exact/cases/RmTypeSig2.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/WhereIn3a.expected.hs (renamed from utils/check-exact/cases/WhereIn3a.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/WhereIn3a.hs (renamed from utils/check-exact/cases/WhereIn3a.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/WhereIn3b.expected.hs (renamed from utils/check-exact/cases/WhereIn3b.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/WhereIn3b.hs (renamed from utils/check-exact/cases/WhereIn3b.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/WhereIn4.expected.hs (renamed from utils/check-exact/cases/WhereIn4.expected.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/WhereIn4.hs (renamed from utils/check-exact/cases/WhereIn4.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/Windows.hs (renamed from utils/check-exact/cases/Windows.hs) | 0 | ||||
-rw-r--r-- | testsuite/tests/ghc-api/exactprint/all.T | 38 | ||||
-rw-r--r-- | testsuite/tests/printer/Makefile | 434 | ||||
-rw-r--r-- | testsuite/tests/printer/all.T | 2 | ||||
-rw-r--r-- | utils/check-exact/Main.hs | 1022 | ||||
-rw-r--r-- | utils/check-exact/Test.hs | 840 |
85 files changed, 1289 insertions, 1211 deletions
diff --git a/testsuite/tests/ghc-api/exactprint/.gitignore b/testsuite/tests/ghc-api/exactprint/.gitignore new file mode 100644 index 0000000000..c643ad1efe --- /dev/null +++ b/testsuite/tests/ghc-api/exactprint/.gitignore @@ -0,0 +1,4 @@ +*.hi +*.o +*.run.* +*.normalised diff --git a/utils/check-exact/cases/AddDecl1.expected.hs b/testsuite/tests/ghc-api/exactprint/AddDecl1.expected.hs index 88ef0fdd7d..88ef0fdd7d 100644 --- a/utils/check-exact/cases/AddDecl1.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddDecl1.expected.hs diff --git a/utils/check-exact/cases/AddDecl1.hs b/testsuite/tests/ghc-api/exactprint/AddDecl1.hs index 45c0cb3864..45c0cb3864 100644 --- a/utils/check-exact/cases/AddDecl1.hs +++ b/testsuite/tests/ghc-api/exactprint/AddDecl1.hs diff --git a/utils/check-exact/cases/AddDecl2.expected.hs b/testsuite/tests/ghc-api/exactprint/AddDecl2.expected.hs index 2bbbcf5b37..2bbbcf5b37 100644 --- a/utils/check-exact/cases/AddDecl2.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddDecl2.expected.hs diff --git a/utils/check-exact/cases/AddDecl2.hs b/testsuite/tests/ghc-api/exactprint/AddDecl2.hs index 45c0cb3864..45c0cb3864 100644 --- a/utils/check-exact/cases/AddDecl2.hs +++ b/testsuite/tests/ghc-api/exactprint/AddDecl2.hs diff --git a/utils/check-exact/cases/AddDecl3.expected.hs b/testsuite/tests/ghc-api/exactprint/AddDecl3.expected.hs index dd3044fcc5..dd3044fcc5 100644 --- a/utils/check-exact/cases/AddDecl3.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddDecl3.expected.hs diff --git a/utils/check-exact/cases/AddDecl3.hs b/testsuite/tests/ghc-api/exactprint/AddDecl3.hs index 45c0cb3864..45c0cb3864 100644 --- a/utils/check-exact/cases/AddDecl3.hs +++ b/testsuite/tests/ghc-api/exactprint/AddDecl3.hs diff --git a/utils/check-exact/cases/AddHiding1.expected.hs b/testsuite/tests/ghc-api/exactprint/AddHiding1.expected.hs index f3c8f17c8b..f3c8f17c8b 100644 --- a/utils/check-exact/cases/AddHiding1.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddHiding1.expected.hs diff --git a/utils/check-exact/cases/AddHiding1.hs b/testsuite/tests/ghc-api/exactprint/AddHiding1.hs index abcd47879a..abcd47879a 100644 --- a/utils/check-exact/cases/AddHiding1.hs +++ b/testsuite/tests/ghc-api/exactprint/AddHiding1.hs diff --git a/utils/check-exact/cases/AddHiding2.expected.hs b/testsuite/tests/ghc-api/exactprint/AddHiding2.expected.hs index d62005227b..d62005227b 100644 --- a/utils/check-exact/cases/AddHiding2.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddHiding2.expected.hs diff --git a/utils/check-exact/cases/AddHiding2.hs b/testsuite/tests/ghc-api/exactprint/AddHiding2.hs index f5f551a9cb..f5f551a9cb 100644 --- a/utils/check-exact/cases/AddHiding2.hs +++ b/testsuite/tests/ghc-api/exactprint/AddHiding2.hs diff --git a/utils/check-exact/cases/AddLocalDecl1.expected.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl1.expected.hs index 023e2ea05d..023e2ea05d 100644 --- a/utils/check-exact/cases/AddLocalDecl1.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl1.expected.hs diff --git a/utils/check-exact/cases/AddLocalDecl1.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl1.hs index 3bb4953c51..3bb4953c51 100644 --- a/utils/check-exact/cases/AddLocalDecl1.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl1.hs diff --git a/utils/check-exact/cases/AddLocalDecl2.expected.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl2.expected.hs index ff25b79157..ff25b79157 100644 --- a/utils/check-exact/cases/AddLocalDecl2.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl2.expected.hs diff --git a/utils/check-exact/cases/AddLocalDecl2.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl2.hs index 7609f657ed..7609f657ed 100644 --- a/utils/check-exact/cases/AddLocalDecl2.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl2.hs diff --git a/utils/check-exact/cases/AddLocalDecl3.expected.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl3.expected.hs index deaf1e7cb8..deaf1e7cb8 100644 --- a/utils/check-exact/cases/AddLocalDecl3.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl3.expected.hs diff --git a/utils/check-exact/cases/AddLocalDecl3.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl3.hs index eb14013031..eb14013031 100644 --- a/utils/check-exact/cases/AddLocalDecl3.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl3.hs diff --git a/utils/check-exact/cases/AddLocalDecl4.expected.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl4.expected.hs index b3c1445d0d..b3c1445d0d 100644 --- a/utils/check-exact/cases/AddLocalDecl4.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl4.expected.hs diff --git a/utils/check-exact/cases/AddLocalDecl4.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl4.hs index 2ec2c0bf73..2ec2c0bf73 100644 --- a/utils/check-exact/cases/AddLocalDecl4.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl4.hs diff --git a/utils/check-exact/cases/AddLocalDecl5.expected.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl5.expected.hs index 5e66dc5a6b..5e66dc5a6b 100644 --- a/utils/check-exact/cases/AddLocalDecl5.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl5.expected.hs diff --git a/utils/check-exact/cases/AddLocalDecl5.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl5.hs index 9f07e1071b..9f07e1071b 100644 --- a/utils/check-exact/cases/AddLocalDecl5.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl5.hs diff --git a/utils/check-exact/cases/AddLocalDecl6.expected.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl6.expected.hs index 9cedb7d63f..9cedb7d63f 100644 --- a/utils/check-exact/cases/AddLocalDecl6.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl6.expected.hs diff --git a/utils/check-exact/cases/AddLocalDecl6.hs b/testsuite/tests/ghc-api/exactprint/AddLocalDecl6.hs index d0bdffca41..d0bdffca41 100644 --- a/utils/check-exact/cases/AddLocalDecl6.hs +++ b/testsuite/tests/ghc-api/exactprint/AddLocalDecl6.hs diff --git a/utils/check-exact/cases/EmptyWheres.hs b/testsuite/tests/ghc-api/exactprint/EmptyWheres.hs index edc0570012..edc0570012 100644 --- a/utils/check-exact/cases/EmptyWheres.hs +++ b/testsuite/tests/ghc-api/exactprint/EmptyWheres.hs diff --git a/utils/check-exact/cases/LayoutIn1.expected.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn1.expected.hs index 2b23b21853..2b23b21853 100644 --- a/utils/check-exact/cases/LayoutIn1.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn1.expected.hs diff --git a/utils/check-exact/cases/LayoutIn1.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn1.hs index 3ea1f8402c..3ea1f8402c 100644 --- a/utils/check-exact/cases/LayoutIn1.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn1.hs diff --git a/utils/check-exact/cases/LayoutIn3.expected.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn3.expected.hs index 900d6daf63..900d6daf63 100644 --- a/utils/check-exact/cases/LayoutIn3.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn3.expected.hs diff --git a/utils/check-exact/cases/LayoutIn3.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn3.hs index c8c110d65c..c8c110d65c 100644 --- a/utils/check-exact/cases/LayoutIn3.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn3.hs diff --git a/utils/check-exact/cases/LayoutIn3a.expected.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn3a.expected.hs index c0a552c0d0..c0a552c0d0 100644 --- a/utils/check-exact/cases/LayoutIn3a.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn3a.expected.hs diff --git a/utils/check-exact/cases/LayoutIn3a.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn3a.hs index 58b36b07f8..58b36b07f8 100644 --- a/utils/check-exact/cases/LayoutIn3a.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn3a.hs diff --git a/utils/check-exact/cases/LayoutIn3b.expected.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn3b.expected.hs index 057d9d346a..057d9d346a 100644 --- a/utils/check-exact/cases/LayoutIn3b.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn3b.expected.hs diff --git a/utils/check-exact/cases/LayoutIn3b.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn3b.hs index 32bc294ae4..32bc294ae4 100644 --- a/utils/check-exact/cases/LayoutIn3b.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn3b.hs diff --git a/utils/check-exact/cases/LayoutIn4.expected.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn4.expected.hs index 531478da48..531478da48 100644 --- a/utils/check-exact/cases/LayoutIn4.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn4.expected.hs diff --git a/utils/check-exact/cases/LayoutIn4.hs b/testsuite/tests/ghc-api/exactprint/LayoutIn4.hs index d99d05649d..d99d05649d 100644 --- a/utils/check-exact/cases/LayoutIn4.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutIn4.hs diff --git a/utils/check-exact/cases/LayoutLet2.expected.hs b/testsuite/tests/ghc-api/exactprint/LayoutLet2.expected.hs index 8da499ce3a..8da499ce3a 100644 --- a/utils/check-exact/cases/LayoutLet2.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutLet2.expected.hs diff --git a/utils/check-exact/cases/LayoutLet2.hs b/testsuite/tests/ghc-api/exactprint/LayoutLet2.hs index 378aa587a8..378aa587a8 100644 --- a/utils/check-exact/cases/LayoutLet2.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutLet2.hs diff --git a/utils/check-exact/cases/LayoutLet3.expected.hs b/testsuite/tests/ghc-api/exactprint/LayoutLet3.expected.hs index 797cf5f483..797cf5f483 100644 --- a/utils/check-exact/cases/LayoutLet3.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutLet3.expected.hs diff --git a/utils/check-exact/cases/LayoutLet3.hs b/testsuite/tests/ghc-api/exactprint/LayoutLet3.hs index 5ba80aff6a..5ba80aff6a 100644 --- a/utils/check-exact/cases/LayoutLet3.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutLet3.hs diff --git a/utils/check-exact/cases/LayoutLet4.expected.hs b/testsuite/tests/ghc-api/exactprint/LayoutLet4.expected.hs index b3c52f424e..b3c52f424e 100644 --- a/utils/check-exact/cases/LayoutLet4.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutLet4.expected.hs diff --git a/utils/check-exact/cases/LayoutLet4.hs b/testsuite/tests/ghc-api/exactprint/LayoutLet4.hs index 28fe599432..28fe599432 100644 --- a/utils/check-exact/cases/LayoutLet4.hs +++ b/testsuite/tests/ghc-api/exactprint/LayoutLet4.hs diff --git a/utils/check-exact/cases/LetIn1.expected.hs b/testsuite/tests/ghc-api/exactprint/LetIn1.expected.hs index d233115ee6..d233115ee6 100644 --- a/utils/check-exact/cases/LetIn1.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LetIn1.expected.hs diff --git a/utils/check-exact/cases/LetIn1.hs b/testsuite/tests/ghc-api/exactprint/LetIn1.hs index f1109b8f03..f1109b8f03 100644 --- a/utils/check-exact/cases/LetIn1.hs +++ b/testsuite/tests/ghc-api/exactprint/LetIn1.hs diff --git a/utils/check-exact/cases/LocToName.expected.hs b/testsuite/tests/ghc-api/exactprint/LocToName.expected.hs index 0b1484873a..0b1484873a 100644 --- a/utils/check-exact/cases/LocToName.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LocToName.expected.hs diff --git a/utils/check-exact/cases/LocToName.hs b/testsuite/tests/ghc-api/exactprint/LocToName.hs index 89a0acea12..89a0acea12 100644 --- a/utils/check-exact/cases/LocToName.hs +++ b/testsuite/tests/ghc-api/exactprint/LocToName.hs diff --git a/utils/check-exact/cases/LocalDecls.expected.hs b/testsuite/tests/ghc-api/exactprint/LocalDecls.expected.hs index 7c41178ba0..7c41178ba0 100644 --- a/utils/check-exact/cases/LocalDecls.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LocalDecls.expected.hs diff --git a/utils/check-exact/cases/LocalDecls.hs b/testsuite/tests/ghc-api/exactprint/LocalDecls.hs index ebb774ac63..ebb774ac63 100644 --- a/utils/check-exact/cases/LocalDecls.hs +++ b/testsuite/tests/ghc-api/exactprint/LocalDecls.hs diff --git a/utils/check-exact/cases/LocalDecls2.expected.hs b/testsuite/tests/ghc-api/exactprint/LocalDecls2.expected.hs index d2353e94c5..d2353e94c5 100644 --- a/utils/check-exact/cases/LocalDecls2.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/LocalDecls2.expected.hs diff --git a/utils/check-exact/cases/LocalDecls2.hs b/testsuite/tests/ghc-api/exactprint/LocalDecls2.hs index 92a8649649..92a8649649 100644 --- a/utils/check-exact/cases/LocalDecls2.hs +++ b/testsuite/tests/ghc-api/exactprint/LocalDecls2.hs diff --git a/testsuite/tests/ghc-api/exactprint/Makefile b/testsuite/tests/ghc-api/exactprint/Makefile new file mode 100644 index 0000000000..8d3b71ac9b --- /dev/null +++ b/testsuite/tests/ghc-api/exactprint/Makefile @@ -0,0 +1,160 @@ +TOP=../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk + +LIBDIR := "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" + +clean: + rm -f *.o *.hi + +.PHONY: RenameCase1 +RenameCase1: + $(CHECK_EXACT) $(LIBDIR) RenameCase1.hs changeRenameCase1 + +.PHONY: LayoutLet2 +LayoutLet2: + $(CHECK_EXACT) $(LIBDIR) LayoutLet2.hs changeLayoutLet2 + +.PHONY: LayoutLet3 +LayoutLet3: + $(CHECK_EXACT) $(LIBDIR) LayoutLet3.hs changeLayoutLet3 + +.PHONY: LayoutLet4 +LayoutLet4: + $(CHECK_EXACT) $(LIBDIR) LayoutLet4.hs changeLayoutLet3 + +.PHONY: Rename1 +Rename1: + $(CHECK_EXACT) $(LIBDIR) Rename1.hs changeRename1 + +.PHONY: Rename2 +Rename2: + $(CHECK_EXACT) $(LIBDIR) Rename2.hs changeRename2 + +.PHONY: LayoutIn1 +LayoutIn1: + $(CHECK_EXACT) $(LIBDIR) LayoutIn1.hs changeLayoutIn1 + +.PHONY: LayoutIn3 +LayoutIn3: + $(CHECK_EXACT) $(LIBDIR) LayoutIn3.hs changeLayoutIn3 + +.PHONY: LayoutIn3a +LayoutIn3a: + $(CHECK_EXACT) $(LIBDIR) LayoutIn3a.hs changeLayoutIn3 + +.PHONY: LayoutIn3b +LayoutIn3b: + $(CHECK_EXACT) $(LIBDIR) LayoutIn3b.hs changeLayoutIn3 + +.PHONY: LayoutIn4 +LayoutIn4: + $(CHECK_EXACT) $(LIBDIR) LayoutIn4.hs changeLayoutIn4 + +.PHONY: LocToName +LocToName: + $(CHECK_EXACT) $(LIBDIR) LocToName.hs changeLocToName + +.PHONY: LetIn1 +LetIn1: + $(CHECK_EXACT) $(LIBDIR) LetIn1.hs changeLetIn1 + +.PHONY: WhereIn4 +WhereIn4: + $(CHECK_EXACT) $(LIBDIR) WhereIn4.hs changeWhereIn4 + +.PHONY: AddDecl1 +AddDecl1: + $(CHECK_EXACT) $(LIBDIR) AddDecl1.hs changeAddDecl1 + +.PHONY: AddDecl2 +AddDecl2: + $(CHECK_EXACT) $(LIBDIR) AddDecl2.hs changeAddDecl2 + +.PHONY: AddDecl3 +AddDecl3: + $(CHECK_EXACT) $(LIBDIR) AddDecl3.hs changeAddDecl3 + +.PHONY: LocalDecls +LocalDecls: + $(CHECK_EXACT) $(LIBDIR) LocalDecls.hs changeLocalDecls + +.PHONY: LocalDecls2 +LocalDecls2: + $(CHECK_EXACT) $(LIBDIR) LocalDecls2.hs changeLocalDecls2 + +.PHONY: WhereIn3a +WhereIn3a: + $(CHECK_EXACT) $(LIBDIR) WhereIn3a.hs changeWhereIn3a + +.PHONY: WhereIn3b +WhereIn3b: + $(CHECK_EXACT) $(LIBDIR) WhereIn3b.hs changeWhereIn3b + +.PHONY: AddLocalDecl1 +AddLocalDecl1: + $(CHECK_EXACT) $(LIBDIR) AddLocalDecl1.hs ADDLOCALDECL1 + +.PHONY: AddLocalDecl2 +AddLocalDecl2: + $(CHECK_EXACT) $(LIBDIR) AddLocalDecl2.hs ADDLOCALDECL2 + +.PHONY: AddLocalDecl3 +AddLocalDecl3: + $(CHECK_EXACT) $(LIBDIR) AddLocalDecl3.hs ADDLOCALDECL3 + +.PHONY: AddLocalDecl4 +AddLocalDecl4: + $(CHECK_EXACT) $(LIBDIR) AddLocalDecl4.hs ADDLOCALDECL4 + +.PHONY: AddLocalDecl5 +AddLocalDecl5: + $(CHECK_EXACT) $(LIBDIR) AddLocalDecl5.hs ADDLOCALDECL5 + +.PHONY: AddLocalDecl6 +AddLocalDecl6: + $(CHECK_EXACT) $(LIBDIR) AddLocalDecl6.hs ADDLOCALDECL6 + +.PHONY: RmDecl1 +RmDecl1: + $(CHECK_EXACT) $(LIBDIR) RmDecl1.hs rmDecl1 + +.PHONY: RmDecl2 +RmDecl2: + $(CHECK_EXACT) $(LIBDIR) RmDecl2.hs rmDecl2 + +.PHONY: RmDecl3 +RmDecl3: + $(CHECK_EXACT) $(LIBDIR) RmDecl3.hs rmDecl3 + +.PHONY: RmDecl4 +RmDecl4: + $(CHECK_EXACT) $(LIBDIR) RmDecl4.hs rmDecl4 + +.PHONY: RmDecl5 +RmDecl5: + $(CHECK_EXACT) $(LIBDIR) RmDecl5.hs rmDecl5 + +.PHONY: RmDecl6 +RmDecl6: + $(CHECK_EXACT) $(LIBDIR) RmDecl6.hs rmDecl6 + +.PHONY: RmDecl7 +RmDecl7: + $(CHECK_EXACT) $(LIBDIR) RmDecl7.hs rmDecl7 + +.PHONY: RmTypeSig1 +RmTypeSig1: + $(CHECK_EXACT) $(LIBDIR) RmTypeSig1.hs rmTypeSig1 + +.PHONY: RmTypeSig2 +RmTypeSig2: + $(CHECK_EXACT) $(LIBDIR) RmTypeSig2.hs rmTypeSig2 + +.PHONY: AddHiding1 +AddHiding1: + $(CHECK_EXACT) $(LIBDIR) AddHiding1.hs addHiding1 + +.PHONY: AddHiding2 +AddHiding2: + $(CHECK_EXACT) $(LIBDIR) AddHiding2.hs addHiding2 diff --git a/utils/check-exact/cases/Rename1.expected.hs b/testsuite/tests/ghc-api/exactprint/Rename1.expected.hs index 353a7420e2..353a7420e2 100644 --- a/utils/check-exact/cases/Rename1.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/Rename1.expected.hs diff --git a/utils/check-exact/cases/Rename1.hs b/testsuite/tests/ghc-api/exactprint/Rename1.hs index 1ad343afd3..1ad343afd3 100644 --- a/utils/check-exact/cases/Rename1.hs +++ b/testsuite/tests/ghc-api/exactprint/Rename1.hs diff --git a/utils/check-exact/cases/Rename2.expected.hs b/testsuite/tests/ghc-api/exactprint/Rename2.expected.hs index 6be3ff6e0a..6be3ff6e0a 100644 --- a/utils/check-exact/cases/Rename2.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/Rename2.expected.hs diff --git a/utils/check-exact/cases/Rename2.hs b/testsuite/tests/ghc-api/exactprint/Rename2.hs index 29fea060c2..29fea060c2 100644 --- a/utils/check-exact/cases/Rename2.hs +++ b/testsuite/tests/ghc-api/exactprint/Rename2.hs diff --git a/utils/check-exact/cases/RenameCase1.expected.hs b/testsuite/tests/ghc-api/exactprint/RenameCase1.expected.hs index dad6765012..dad6765012 100644 --- a/utils/check-exact/cases/RenameCase1.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RenameCase1.expected.hs diff --git a/utils/check-exact/cases/RenameCase1.hs b/testsuite/tests/ghc-api/exactprint/RenameCase1.hs index 22d549367a..22d549367a 100644 --- a/utils/check-exact/cases/RenameCase1.hs +++ b/testsuite/tests/ghc-api/exactprint/RenameCase1.hs diff --git a/utils/check-exact/cases/RmDecl1.expected.hs b/testsuite/tests/ghc-api/exactprint/RmDecl1.expected.hs index 6bb503aede..6bb503aede 100644 --- a/utils/check-exact/cases/RmDecl1.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl1.expected.hs diff --git a/utils/check-exact/cases/RmDecl1.hs b/testsuite/tests/ghc-api/exactprint/RmDecl1.hs index 15cd9f1e04..15cd9f1e04 100644 --- a/utils/check-exact/cases/RmDecl1.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl1.hs diff --git a/utils/check-exact/cases/RmDecl2.expected.hs b/testsuite/tests/ghc-api/exactprint/RmDecl2.expected.hs index d77b760dca..d77b760dca 100644 --- a/utils/check-exact/cases/RmDecl2.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl2.expected.hs diff --git a/utils/check-exact/cases/RmDecl2.hs b/testsuite/tests/ghc-api/exactprint/RmDecl2.hs index 2f0dbd3ace..2f0dbd3ace 100644 --- a/utils/check-exact/cases/RmDecl2.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl2.hs diff --git a/utils/check-exact/cases/RmDecl3.expected.hs b/testsuite/tests/ghc-api/exactprint/RmDecl3.expected.hs index ca14f33ad5..ca14f33ad5 100644 --- a/utils/check-exact/cases/RmDecl3.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl3.expected.hs diff --git a/utils/check-exact/cases/RmDecl3.hs b/testsuite/tests/ghc-api/exactprint/RmDecl3.hs index 280bccf259..280bccf259 100644 --- a/utils/check-exact/cases/RmDecl3.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl3.hs diff --git a/utils/check-exact/cases/RmDecl4.expected.hs b/testsuite/tests/ghc-api/exactprint/RmDecl4.expected.hs index e7c71dbd08..e7c71dbd08 100644 --- a/utils/check-exact/cases/RmDecl4.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl4.expected.hs diff --git a/utils/check-exact/cases/RmDecl4.hs b/testsuite/tests/ghc-api/exactprint/RmDecl4.hs index 532b738763..532b738763 100644 --- a/utils/check-exact/cases/RmDecl4.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl4.hs diff --git a/utils/check-exact/cases/RmDecl5.expected.hs b/testsuite/tests/ghc-api/exactprint/RmDecl5.expected.hs index 67ac8ddfab..67ac8ddfab 100644 --- a/utils/check-exact/cases/RmDecl5.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl5.expected.hs diff --git a/utils/check-exact/cases/RmDecl5.hs b/testsuite/tests/ghc-api/exactprint/RmDecl5.hs index 40f86199ce..40f86199ce 100644 --- a/utils/check-exact/cases/RmDecl5.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl5.hs diff --git a/utils/check-exact/cases/RmDecl6.expected.hs b/testsuite/tests/ghc-api/exactprint/RmDecl6.expected.hs index a2bd7d0443..a2bd7d0443 100644 --- a/utils/check-exact/cases/RmDecl6.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl6.expected.hs diff --git a/utils/check-exact/cases/RmDecl6.hs b/testsuite/tests/ghc-api/exactprint/RmDecl6.hs index cab5093ce8..cab5093ce8 100644 --- a/utils/check-exact/cases/RmDecl6.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl6.hs diff --git a/utils/check-exact/cases/RmDecl7.expected.hs b/testsuite/tests/ghc-api/exactprint/RmDecl7.expected.hs index 9d7b8b9a69..9d7b8b9a69 100644 --- a/utils/check-exact/cases/RmDecl7.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl7.expected.hs diff --git a/utils/check-exact/cases/RmDecl7.hs b/testsuite/tests/ghc-api/exactprint/RmDecl7.hs index 62cefe2154..62cefe2154 100644 --- a/utils/check-exact/cases/RmDecl7.hs +++ b/testsuite/tests/ghc-api/exactprint/RmDecl7.hs diff --git a/utils/check-exact/cases/RmTypeSig1.expected.hs b/testsuite/tests/ghc-api/exactprint/RmTypeSig1.expected.hs index 46f7b13399..46f7b13399 100644 --- a/utils/check-exact/cases/RmTypeSig1.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RmTypeSig1.expected.hs diff --git a/utils/check-exact/cases/RmTypeSig1.hs b/testsuite/tests/ghc-api/exactprint/RmTypeSig1.hs index 498892d791..498892d791 100644 --- a/utils/check-exact/cases/RmTypeSig1.hs +++ b/testsuite/tests/ghc-api/exactprint/RmTypeSig1.hs diff --git a/utils/check-exact/cases/RmTypeSig2.expected.hs b/testsuite/tests/ghc-api/exactprint/RmTypeSig2.expected.hs index c30e201bd0..c30e201bd0 100644 --- a/utils/check-exact/cases/RmTypeSig2.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/RmTypeSig2.expected.hs diff --git a/utils/check-exact/cases/RmTypeSig2.hs b/testsuite/tests/ghc-api/exactprint/RmTypeSig2.hs index e8771f99dd..e8771f99dd 100644 --- a/utils/check-exact/cases/RmTypeSig2.hs +++ b/testsuite/tests/ghc-api/exactprint/RmTypeSig2.hs diff --git a/utils/check-exact/cases/WhereIn3a.expected.hs b/testsuite/tests/ghc-api/exactprint/WhereIn3a.expected.hs index acc94d3621..acc94d3621 100644 --- a/utils/check-exact/cases/WhereIn3a.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/WhereIn3a.expected.hs diff --git a/utils/check-exact/cases/WhereIn3a.hs b/testsuite/tests/ghc-api/exactprint/WhereIn3a.hs index acc94d3621..acc94d3621 100644 --- a/utils/check-exact/cases/WhereIn3a.hs +++ b/testsuite/tests/ghc-api/exactprint/WhereIn3a.hs diff --git a/utils/check-exact/cases/WhereIn3b.expected.hs b/testsuite/tests/ghc-api/exactprint/WhereIn3b.expected.hs index 80ddc04825..80ddc04825 100644 --- a/utils/check-exact/cases/WhereIn3b.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/WhereIn3b.expected.hs diff --git a/utils/check-exact/cases/WhereIn3b.hs b/testsuite/tests/ghc-api/exactprint/WhereIn3b.hs index acc94d3621..acc94d3621 100644 --- a/utils/check-exact/cases/WhereIn3b.hs +++ b/testsuite/tests/ghc-api/exactprint/WhereIn3b.hs diff --git a/utils/check-exact/cases/WhereIn4.expected.hs b/testsuite/tests/ghc-api/exactprint/WhereIn4.expected.hs index 4357bfdac7..4357bfdac7 100644 --- a/utils/check-exact/cases/WhereIn4.expected.hs +++ b/testsuite/tests/ghc-api/exactprint/WhereIn4.expected.hs diff --git a/utils/check-exact/cases/WhereIn4.hs b/testsuite/tests/ghc-api/exactprint/WhereIn4.hs index 8b941fff4a..8b941fff4a 100644 --- a/utils/check-exact/cases/WhereIn4.hs +++ b/testsuite/tests/ghc-api/exactprint/WhereIn4.hs diff --git a/utils/check-exact/cases/Windows.hs b/testsuite/tests/ghc-api/exactprint/Windows.hs index ad8ae692b6..ad8ae692b6 100644 --- a/utils/check-exact/cases/Windows.hs +++ b/testsuite/tests/ghc-api/exactprint/Windows.hs diff --git a/testsuite/tests/ghc-api/exactprint/all.T b/testsuite/tests/ghc-api/exactprint/all.T new file mode 100644 index 0000000000..385b74a243 --- /dev/null +++ b/testsuite/tests/ghc-api/exactprint/all.T @@ -0,0 +1,38 @@ +test('RenameCase1', ignore_stderr, makefile_test, ['RenameCase1']) +test('LayoutLet2', ignore_stderr, makefile_test, ['LayoutLet2']) +test('LayoutLet3', ignore_stderr, makefile_test, ['LayoutLet3']) +test('LayoutLet4', ignore_stderr, makefile_test, ['LayoutLet4']) +test('Rename1', ignore_stderr, makefile_test, ['Rename1']) +test('Rename2', ignore_stderr, makefile_test, ['Rename2']) +test('LayoutIn1', ignore_stderr, makefile_test, ['LayoutIn1']) +test('LayoutIn3', ignore_stderr, makefile_test, ['LayoutIn3']) +test('LayoutIn3a', ignore_stderr, makefile_test, ['LayoutIn3a']) +test('LayoutIn3b', ignore_stderr, makefile_test, ['LayoutIn3b']) +test('LayoutIn4', ignore_stderr, makefile_test, ['LayoutIn4']) +test('LocToName', ignore_stderr, makefile_test, ['LocToName']) +test('LetIn1', ignore_stderr, makefile_test, ['LetIn1']) +test('WhereIn4', ignore_stderr, makefile_test, ['WhereIn4']) +test('AddDecl1', ignore_stderr, makefile_test, ['AddDecl1']) +test('AddDecl2', ignore_stderr, makefile_test, ['AddDecl2']) +test('AddDecl3', ignore_stderr, makefile_test, ['AddDecl3']) +test('LocalDecls', ignore_stderr, makefile_test, ['LocalDecls']) +test('LocalDecls2', ignore_stderr, makefile_test, ['LocalDecls2']) +test('WhereIn3a', ignore_stderr, makefile_test, ['WhereIn3a']) +test('WhereIn3b', ignore_stderr, makefile_test, ['WhereIn3b']) +test('AddLocalDecl1', ignore_stderr, makefile_test, ['AddLocalDecl1']) +test('AddLocalDecl2', ignore_stderr, makefile_test, ['AddLocalDecl2']) +test('AddLocalDecl3', ignore_stderr, makefile_test, ['AddLocalDecl3']) +test('AddLocalDecl4', ignore_stderr, makefile_test, ['AddLocalDecl4']) +test('AddLocalDecl5', ignore_stderr, makefile_test, ['AddLocalDecl5']) +test('AddLocalDecl6', ignore_stderr, makefile_test, ['AddLocalDecl6']) +test('RmDecl1', ignore_stderr, makefile_test, ['RmDecl1']) +test('RmDecl2', ignore_stderr, makefile_test, ['RmDecl2']) +test('RmDecl3', ignore_stderr, makefile_test, ['RmDecl3']) +test('RmDecl4', ignore_stderr, makefile_test, ['RmDecl4']) +test('RmDecl5', ignore_stderr, makefile_test, ['RmDecl5']) +test('RmDecl6', ignore_stderr, makefile_test, ['RmDecl6']) +test('RmDecl7', ignore_stderr, makefile_test, ['RmDecl7']) +test('RmTypeSig1', ignore_stderr, makefile_test, ['RmTypeSig1']) +test('RmTypeSig2', ignore_stderr, makefile_test, ['RmTypeSig2']) +test('AddHiding1', ignore_stderr, makefile_test, ['AddHiding1']) +test('AddHiding2', ignore_stderr, makefile_test, ['AddHiding2']) diff --git a/testsuite/tests/printer/Makefile b/testsuite/tests/printer/Makefile index 2f3d7fb187..6e7b5bcd10 100644 --- a/testsuite/tests/printer/Makefile +++ b/testsuite/tests/printer/Makefile @@ -2,546 +2,548 @@ TOP=../.. include $(TOP)/mk/boilerplate.mk include $(TOP)/mk/test.mk +LIBDIR := "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" + clean: rm -f *.o *.hi *.ppr.hs rm Ppr003 Ppr004 .PHONY: ppr001 ppr001: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr001.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr001.hs + $(CHECK_PPR) $(LIBDIR) Ppr001.hs + $(CHECK_EXACT) $(LIBDIR) Ppr001.hs .PHONY: ppr002 ppr002: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr002.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr002.hs + $(CHECK_PPR) $(LIBDIR) Ppr002.hs + $(CHECK_EXACT) $(LIBDIR) Ppr002.hs .PHONY: ppr002a ppr002a: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr002a.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr002a.hs + $(CHECK_PPR) $(LIBDIR) Ppr002a.hs + $(CHECK_EXACT) $(LIBDIR) Ppr002a.hs .PHONY: ppr003 ppr003: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr003.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr003.hs + $(CHECK_PPR) $(LIBDIR) Ppr003.hs + $(CHECK_EXACT) $(LIBDIR) Ppr003.hs .PHONY: ppr004 ppr004: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr004.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr004.hs + $(CHECK_PPR) $(LIBDIR) Ppr004.hs + $(CHECK_EXACT) $(LIBDIR) Ppr004.hs .PHONY: ppr005 ppr005: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr005.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr005.hs + $(CHECK_PPR) $(LIBDIR) Ppr005.hs + $(CHECK_EXACT) $(LIBDIR) Ppr005.hs .PHONY: ppr006 ppr006: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr006.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr006.hs + $(CHECK_PPR) $(LIBDIR) Ppr006.hs + $(CHECK_EXACT) $(LIBDIR) Ppr006.hs .PHONY: ppr007 ppr007: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr007.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr007.hs + $(CHECK_PPR) $(LIBDIR) Ppr007.hs + $(CHECK_EXACT) $(LIBDIR) Ppr007.hs .PHONY: ppr008 ppr008: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr008.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr008.hs + $(CHECK_PPR) $(LIBDIR) Ppr008.hs + $(CHECK_EXACT) $(LIBDIR) Ppr008.hs .PHONY: ppr009 ppr009: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr009.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr009.hs + $(CHECK_PPR) $(LIBDIR) Ppr009.hs + $(CHECK_EXACT) $(LIBDIR) Ppr009.hs .PHONY: ppr010 ppr010: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr010.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr010.hs + $(CHECK_PPR) $(LIBDIR) Ppr010.hs + $(CHECK_EXACT) $(LIBDIR) Ppr010.hs .PHONY: ppr011 ppr011: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr011.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr011.hs + $(CHECK_PPR) $(LIBDIR) Ppr011.hs + $(CHECK_EXACT) $(LIBDIR) Ppr011.hs .PHONY: ppr012 ppr012: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr012.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr012.hs + $(CHECK_PPR) $(LIBDIR) Ppr012.hs + $(CHECK_EXACT) $(LIBDIR) Ppr012.hs .PHONY: ppr013 ppr013: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr013.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr013.hs + $(CHECK_PPR) $(LIBDIR) Ppr013.hs + $(CHECK_EXACT) $(LIBDIR) Ppr013.hs .PHONY: ppr014 ppr014: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr014.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr014.hs + $(CHECK_PPR) $(LIBDIR) Ppr014.hs + $(CHECK_EXACT) $(LIBDIR) Ppr014.hs .PHONY: ppr015 ppr015: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr015.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr015.hs + $(CHECK_PPR) $(LIBDIR) Ppr015.hs + $(CHECK_EXACT) $(LIBDIR) Ppr015.hs .PHONY: ppr016 ppr016: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr016.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr016.hs + $(CHECK_PPR) $(LIBDIR) Ppr016.hs + $(CHECK_EXACT) $(LIBDIR) Ppr016.hs .PHONY: ppr017 ppr017: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr017.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr017.hs + $(CHECK_PPR) $(LIBDIR) Ppr017.hs + $(CHECK_EXACT) $(LIBDIR) Ppr017.hs .PHONY: ppr018 ppr018: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr018.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr018.hs + $(CHECK_PPR) $(LIBDIR) Ppr018.hs + $(CHECK_EXACT) $(LIBDIR) Ppr018.hs .PHONY: ppr019 ppr019: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr019.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr019.hs + $(CHECK_PPR) $(LIBDIR) Ppr019.hs + $(CHECK_EXACT) $(LIBDIR) Ppr019.hs .PHONY: ppr020 ppr020: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr020.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr020.hs + $(CHECK_PPR) $(LIBDIR) Ppr020.hs + $(CHECK_EXACT) $(LIBDIR) Ppr020.hs .PHONY: ppr021 ppr021: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr021.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr021.hs + $(CHECK_PPR) $(LIBDIR) Ppr021.hs + $(CHECK_EXACT) $(LIBDIR) Ppr021.hs .PHONY: ppr022 ppr022: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr022.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr022.hs + $(CHECK_PPR) $(LIBDIR) Ppr022.hs + $(CHECK_EXACT) $(LIBDIR) Ppr022.hs .PHONY: ppr023 ppr023: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr023.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr023.hs + $(CHECK_PPR) $(LIBDIR) Ppr023.hs + $(CHECK_EXACT) $(LIBDIR) Ppr023.hs .PHONY: ppr024 ppr024: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr024.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr024.hs + $(CHECK_PPR) $(LIBDIR) Ppr024.hs + $(CHECK_EXACT) $(LIBDIR) Ppr024.hs .PHONY: ppr025 ppr025: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr025.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr025.hs + $(CHECK_PPR) $(LIBDIR) Ppr025.hs + $(CHECK_EXACT) $(LIBDIR) Ppr025.hs .PHONY: ppr026 ppr026: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr026.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr026.hs + $(CHECK_PPR) $(LIBDIR) Ppr026.hs + $(CHECK_EXACT) $(LIBDIR) Ppr026.hs .PHONY: ppr027 ppr027: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr027.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr027.hs + $(CHECK_PPR) $(LIBDIR) Ppr027.hs + $(CHECK_EXACT) $(LIBDIR) Ppr027.hs .PHONY: ppr028 ppr028: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr028.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr028.hs + $(CHECK_PPR) $(LIBDIR) Ppr028.hs + $(CHECK_EXACT) $(LIBDIR) Ppr028.hs .PHONY: ppr029 ppr029: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr029.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr029.hs + $(CHECK_PPR) $(LIBDIR) Ppr029.hs + $(CHECK_EXACT) $(LIBDIR) Ppr029.hs .PHONY: ppr030 ppr030: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr030.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr030.hs + $(CHECK_PPR) $(LIBDIR) Ppr030.hs + $(CHECK_EXACT) $(LIBDIR) Ppr030.hs .PHONY: ppr031 ppr031: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr031.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr031.hs + $(CHECK_PPR) $(LIBDIR) Ppr031.hs + $(CHECK_EXACT) $(LIBDIR) Ppr031.hs .PHONY: ppr032 ppr032: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr032.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr032.hs + $(CHECK_PPR) $(LIBDIR) Ppr032.hs + $(CHECK_EXACT) $(LIBDIR) Ppr032.hs .PHONY: ppr033 ppr033: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr033.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr033.hs + $(CHECK_PPR) $(LIBDIR) Ppr033.hs + $(CHECK_EXACT) $(LIBDIR) Ppr033.hs .PHONY: ppr034 ppr034: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr034.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr034.hs + $(CHECK_PPR) $(LIBDIR) Ppr034.hs + $(CHECK_EXACT) $(LIBDIR) Ppr034.hs .PHONY: ppr035 ppr035: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr035.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr035.hs + $(CHECK_PPR) $(LIBDIR) Ppr035.hs + $(CHECK_EXACT) $(LIBDIR) Ppr035.hs .PHONY: ppr036 ppr036: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr036.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr036.hs + $(CHECK_PPR) $(LIBDIR) Ppr036.hs + $(CHECK_EXACT) $(LIBDIR) Ppr036.hs .PHONY: ppr037 ppr037: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr037.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr037.hs + $(CHECK_PPR) $(LIBDIR) Ppr037.hs + $(CHECK_EXACT) $(LIBDIR) Ppr037.hs .PHONY: ppr038 ppr038: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr038.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr038.hs + $(CHECK_PPR) $(LIBDIR) Ppr038.hs + $(CHECK_EXACT) $(LIBDIR) Ppr038.hs .PHONY: ppr039 ppr039: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr039.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr039.hs + $(CHECK_PPR) $(LIBDIR) Ppr039.hs + $(CHECK_EXACT) $(LIBDIR) Ppr039.hs .PHONY: ppr040 ppr040: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr040.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr040.hs + $(CHECK_PPR) $(LIBDIR) Ppr040.hs + $(CHECK_EXACT) $(LIBDIR) Ppr040.hs .PHONY: ppr041 ppr041: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr041.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr041.hs + $(CHECK_PPR) $(LIBDIR) Ppr041.hs + $(CHECK_EXACT) $(LIBDIR) Ppr041.hs .PHONY: ppr042 ppr042: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr042.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr042.hs + $(CHECK_PPR) $(LIBDIR) Ppr042.hs + $(CHECK_EXACT) $(LIBDIR) Ppr042.hs .PHONY: ppr043 ppr043: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr043.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr043.hs + $(CHECK_PPR) $(LIBDIR) Ppr043.hs + $(CHECK_EXACT) $(LIBDIR) Ppr043.hs .PHONY: ppr044 ppr044: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr044.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr044.hs + $(CHECK_PPR) $(LIBDIR) Ppr044.hs + $(CHECK_EXACT) $(LIBDIR) Ppr044.hs .PHONY: ppr045 ppr045: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr045.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr045.hs + $(CHECK_PPR) $(LIBDIR) Ppr045.hs + $(CHECK_EXACT) $(LIBDIR) Ppr045.hs .PHONY: ppr046 ppr046: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr046.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr046.hs + $(CHECK_PPR) $(LIBDIR) Ppr046.hs + $(CHECK_EXACT) $(LIBDIR) Ppr046.hs .PHONY: ppr048 ppr048: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr048.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr048.hs + $(CHECK_PPR) $(LIBDIR) Ppr048.hs + $(CHECK_EXACT) $(LIBDIR) Ppr048.hs .PHONY: ppr049 ppr049: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr049.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr049.hs + $(CHECK_PPR) $(LIBDIR) Ppr049.hs + $(CHECK_EXACT) $(LIBDIR) Ppr049.hs .PHONY: ppr050 ppr050: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr050.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr050.hs + $(CHECK_PPR) $(LIBDIR) Ppr050.hs + $(CHECK_EXACT) $(LIBDIR) Ppr050.hs .PHONY: ppr051 ppr051: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr051.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr051.hs + $(CHECK_PPR) $(LIBDIR) Ppr051.hs + $(CHECK_EXACT) $(LIBDIR) Ppr051.hs .PHONY: ppr052 ppr052: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr052.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr052.hs + $(CHECK_PPR) $(LIBDIR) Ppr052.hs + $(CHECK_EXACT) $(LIBDIR) Ppr052.hs .PHONY: ppr053 ppr053: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr053.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr053.hs + $(CHECK_PPR) $(LIBDIR) Ppr053.hs + $(CHECK_EXACT) $(LIBDIR) Ppr053.hs .PHONY: ppr054 ppr054: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr054.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr054.hs + $(CHECK_PPR) $(LIBDIR) Ppr054.hs + $(CHECK_EXACT) $(LIBDIR) Ppr054.hs .PHONY: ppr055 ppr055: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr055.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Ppr055.hs + $(CHECK_PPR) $(LIBDIR) Ppr055.hs + $(CHECK_EXACT) $(LIBDIR) Ppr055.hs .PHONY: T13199 T13199: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T13199.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T13199.hs + $(CHECK_PPR) $(LIBDIR) T13199.hs + $(CHECK_EXACT) $(LIBDIR) T13199.hs .PHONY: T13050p T13050p: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T13050p.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T13050p.hs + $(CHECK_PPR) $(LIBDIR) T13050p.hs + $(CHECK_EXACT) $(LIBDIR) T13050p.hs .PHONY: T13550 T13550: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T13550.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T13550.hs + $(CHECK_PPR) $(LIBDIR) T13550.hs + $(CHECK_EXACT) $(LIBDIR) T13550.hs .PHONY: T13942 T13942: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T13942.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T13942.hs + $(CHECK_PPR) $(LIBDIR) T13942.hs + $(CHECK_EXACT) $(LIBDIR) T13942.hs .PHONY: T14289 T14289: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14289.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14289.hs + $(CHECK_PPR) $(LIBDIR) T14289.hs + $(CHECK_EXACT) $(LIBDIR) T14289.hs .PHONY: T14289b T14289b: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14289b.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14289b.hs + $(CHECK_PPR) $(LIBDIR) T14289b.hs + $(CHECK_EXACT) $(LIBDIR) T14289b.hs .PHONY: T14289c T14289c: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14289c.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14289c.hs + $(CHECK_PPR) $(LIBDIR) T14289c.hs + $(CHECK_EXACT) $(LIBDIR) T14289c.hs .PHONY: T14306 T14306: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14306.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14306.hs + $(CHECK_PPR) $(LIBDIR) T14306.hs + $(CHECK_EXACT) $(LIBDIR) T14306.hs .PHONY: T14343 T14343: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14343.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14343.hs + $(CHECK_PPR) $(LIBDIR) T14343.hs + $(CHECK_EXACT) $(LIBDIR) T14343.hs .PHONY: T14343b T14343b: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14343b.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" T14343b.hs + $(CHECK_PPR) $(LIBDIR) T14343b.hs + $(CHECK_EXACT) $(LIBDIR) T14343b.hs .PHONY: RdrNames RdrNames: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" RdrNames.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" RdrNames.hs + $(CHECK_PPR) $(LIBDIR) RdrNames.hs + $(CHECK_EXACT) $(LIBDIR) RdrNames.hs .PHONY: StarBinderAnns StarBinderAnns: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" StarBinderAnns.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" StarBinderAnns.hs + $(CHECK_PPR) $(LIBDIR) StarBinderAnns.hs + $(CHECK_EXACT) $(LIBDIR) StarBinderAnns.hs .PHONY: Test10255 Test10255: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10255.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10255.hs + $(CHECK_PPR) $(LIBDIR) Test10255.hs + $(CHECK_EXACT) $(LIBDIR) Test10255.hs .PHONY: Test10268 Test10268: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10268.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10268.hs + $(CHECK_PPR) $(LIBDIR) Test10268.hs + $(CHECK_EXACT) $(LIBDIR) Test10268.hs .PHONY: Test10269 Test10269: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10269.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10269.hs + $(CHECK_PPR) $(LIBDIR) Test10269.hs + $(CHECK_EXACT) $(LIBDIR) Test10269.hs .PHONY: Test10276 Test10276: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10276.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10276.hs + $(CHECK_PPR) $(LIBDIR) Test10276.hs + $(CHECK_EXACT) $(LIBDIR) Test10276.hs .PHONY: Test10278 Test10278: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10278.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10278.hs + $(CHECK_PPR) $(LIBDIR) Test10278.hs + $(CHECK_EXACT) $(LIBDIR) Test10278.hs .PHONY: Test10280 Test10280: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10280.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10280.hs + $(CHECK_PPR) $(LIBDIR) Test10280.hs + $(CHECK_EXACT) $(LIBDIR) Test10280.hs .PHONY: Test10307 Test10307: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10307.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10307.hs + $(CHECK_PPR) $(LIBDIR) Test10307.hs + $(CHECK_EXACT) $(LIBDIR) Test10307.hs .PHONY: Test10309 Test10309: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10309.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10309.hs + $(CHECK_PPR) $(LIBDIR) Test10309.hs + $(CHECK_EXACT) $(LIBDIR) Test10309.hs .PHONY: Test10312 Test10312: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10312.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10312.hs + $(CHECK_PPR) $(LIBDIR) Test10312.hs + $(CHECK_EXACT) $(LIBDIR) Test10312.hs .PHONY: Test10313 Test10313: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10313.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10313.hs + $(CHECK_PPR) $(LIBDIR) Test10313.hs + $(CHECK_EXACT) $(LIBDIR) Test10313.hs .PHONY: Test10354 Test10354: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10354.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10354.hs + $(CHECK_PPR) $(LIBDIR) Test10354.hs + $(CHECK_EXACT) $(LIBDIR) Test10354.hs .PHONY: Test10357 Test10357: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10357.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10357.hs + $(CHECK_PPR) $(LIBDIR) Test10357.hs + $(CHECK_EXACT) $(LIBDIR) Test10357.hs .PHONY: Test10358 Test10358: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10358.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10358.hs + $(CHECK_PPR) $(LIBDIR) Test10358.hs + $(CHECK_EXACT) $(LIBDIR) Test10358.hs .PHONY: Test10396 Test10396: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10396.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10396.hs + $(CHECK_PPR) $(LIBDIR) Test10396.hs + $(CHECK_EXACT) $(LIBDIR) Test10396.hs .PHONY: Test10399 Test10399: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10399.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10399.hs + $(CHECK_PPR) $(LIBDIR) Test10399.hs + $(CHECK_EXACT) $(LIBDIR) Test10399.hs .PHONY: Test10598 Test10598: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10598.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test10598.hs + $(CHECK_PPR) $(LIBDIR) Test10598.hs + $(CHECK_EXACT) $(LIBDIR) Test10598.hs .PHONY: Test11018 Test11018: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test11018.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test11018.hs + $(CHECK_PPR) $(LIBDIR) Test11018.hs + $(CHECK_EXACT) $(LIBDIR) Test11018.hs .PHONY: Test11321 Test11321: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test11321.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test11321.hs + $(CHECK_PPR) $(LIBDIR) Test11321.hs + $(CHECK_EXACT) $(LIBDIR) Test11321.hs .PHONY: Test11332 Test11332: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test11332.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test11332.hs + $(CHECK_PPR) $(LIBDIR) Test11332.hs + $(CHECK_EXACT) $(LIBDIR) Test11332.hs .PHONY: Test11430 Test11430: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test11430.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test11430.hs + $(CHECK_PPR) $(LIBDIR) Test11430.hs + $(CHECK_EXACT) $(LIBDIR) Test11430.hs .PHONY: Test12417 Test12417: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test12417.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test12417.hs + $(CHECK_PPR) $(LIBDIR) Test12417.hs + $(CHECK_EXACT) $(LIBDIR) Test12417.hs .PHONY: Test13163 Test13163: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test13163.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test13163.hs + $(CHECK_PPR) $(LIBDIR) Test13163.hs + $(CHECK_EXACT) $(LIBDIR) Test13163.hs .PHONY: Test15303 Test15303: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test15303.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test15303.hs + $(CHECK_PPR) $(LIBDIR) Test15303.hs + $(CHECK_EXACT) $(LIBDIR) Test15303.hs .PHONY: Test16212 Test16212: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test16212.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test16212.hs + $(CHECK_PPR) $(LIBDIR) Test16212.hs + $(CHECK_EXACT) $(LIBDIR) Test16212.hs .PHONY: Test16230 Test16230: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test16230.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test16230.hs + $(CHECK_PPR) $(LIBDIR) Test16230.hs + $(CHECK_EXACT) $(LIBDIR) Test16230.hs .PHONY: Test16236 Test16236: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test16236.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test16236.hs + $(CHECK_PPR) $(LIBDIR) Test16236.hs + $(CHECK_EXACT) $(LIBDIR) Test16236.hs .PHONY: Test16279 Test16279: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test16279.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test16279.hs + $(CHECK_PPR) $(LIBDIR) Test16279.hs + $(CHECK_EXACT) $(LIBDIR) Test16279.hs .PHONY: Test17388 Test17388: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test17388.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test17388.hs + $(CHECK_PPR) $(LIBDIR) Test17388.hs + $(CHECK_EXACT) $(LIBDIR) Test17388.hs .PHONY: Test17519 Test17519: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test17519.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test17519.hs + $(CHECK_PPR) $(LIBDIR) Test17519.hs + $(CHECK_EXACT) $(LIBDIR) Test17519.hs .PHONY: Test15242 Test15242: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test15242.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" Test15242.hs + $(CHECK_PPR) $(LIBDIR) Test15242.hs + $(CHECK_EXACT) $(LIBDIR) Test15242.hs .PHONY: AnnotationLet AnnotationLet: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" AnnotationLet.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" AnnotationLet.hs + $(CHECK_PPR) $(LIBDIR) AnnotationLet.hs + $(CHECK_EXACT) $(LIBDIR) AnnotationLet.hs .PHONY: TestBoolFormula TestBoolFormula: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" TestBoolFormula.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" TestBoolFormula.hs + $(CHECK_PPR) $(LIBDIR) TestBoolFormula.hs + $(CHECK_EXACT) $(LIBDIR) TestBoolFormula.hs .PHONY: BundleExport BundleExport: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" BundleExport.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" BundleExport.hs + $(CHECK_PPR) $(LIBDIR) BundleExport.hs + $(CHECK_EXACT) $(LIBDIR) BundleExport.hs .PHONY: AnnotationTuple AnnotationTuple: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" AnnotationTuple.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" AnnotationTuple.hs + $(CHECK_PPR) $(LIBDIR) AnnotationTuple.hs + $(CHECK_EXACT) $(LIBDIR) AnnotationTuple.hs .PHONY: ListComprehensions ListComprehensions: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" ListComprehensions.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" ListComprehensions.hs + $(CHECK_PPR) $(LIBDIR) ListComprehensions.hs + $(CHECK_EXACT) $(LIBDIR) ListComprehensions.hs .PHONY: load-main load-main: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" load-main.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" load-main.hs + $(CHECK_PPR) $(LIBDIR) load-main.hs + $(CHECK_EXACT) $(LIBDIR) load-main.hs .PHONY: PprRecordDotSyntax1 PprRecordDotSyntax1: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntax1.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntax1.hs + $(CHECK_PPR) $(LIBDIR) PprRecordDotSyntax1.hs + $(CHECK_EXACT) $(LIBDIR) PprRecordDotSyntax1.hs .PHONY: PprRecordDotSyntax2 PprRecordDotSyntax2: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntax2.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntax2.hs + $(CHECK_PPR) $(LIBDIR) PprRecordDotSyntax2.hs + $(CHECK_EXACT) $(LIBDIR) PprRecordDotSyntax2.hs .PHONY: PprRecordDotSyntax3 PprRecordDotSyntax3: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntax3.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntax3.hs + $(CHECK_PPR) $(LIBDIR) PprRecordDotSyntax3.hs + $(CHECK_EXACT) $(LIBDIR) PprRecordDotSyntax3.hs .PHONY: PprRecordDotSyntax4 PprRecordDotSyntax4: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntax4.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntax4.hs + $(CHECK_PPR) $(LIBDIR) PprRecordDotSyntax4.hs + $(CHECK_EXACT) $(LIBDIR) PprRecordDotSyntax4.hs .PHONY: PprRecordDotSyntaxA PprRecordDotSyntaxA: - $(CHECK_PPR) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntaxA.hs - $(CHECK_EXACT) "`'$(TEST_HC)' $(TEST_HC_OPTS) --print-libdir | tr -d '\r'`" PprRecordDotSyntaxA.hs + $(CHECK_PPR) $(LIBDIR) PprRecordDotSyntaxA.hs + $(CHECK_EXACT) $(LIBDIR) PprRecordDotSyntaxA.hs diff --git a/testsuite/tests/printer/all.T b/testsuite/tests/printer/all.T index d4cd67c3dd..3799b1d0ea 100644 --- a/testsuite/tests/printer/all.T +++ b/testsuite/tests/printer/all.T @@ -57,8 +57,8 @@ test('Ppr052', ignore_stderr, makefile_test, ['ppr052']) test('Ppr053', ignore_stderr, makefile_test, ['ppr053']) test('Ppr054', ignore_stderr, makefile_test, ['ppr054']) test('Ppr055', ignore_stderr, makefile_test, ['ppr055']) -test('T13199', [ignore_stderr, req_interp], makefile_test, ['T13199']) test('T13050p', ignore_stderr, makefile_test, ['T13050p']) +test('T13199', [ignore_stderr, req_interp], makefile_test, ['T13199']) test('T13550', [ignore_stderr, req_interp], makefile_test, ['T13550']) test('T13942', [ignore_stderr, req_interp], makefile_test, ['T13942']) test('T14289', [ignore_stderr, req_interp], makefile_test, ['T14289']) diff --git a/utils/check-exact/Main.hs b/utils/check-exact/Main.hs index d5583c6f23..23fb0a825e 100644 --- a/utils/check-exact/Main.hs +++ b/utils/check-exact/Main.hs @@ -1,206 +1,332 @@ +{-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE DeriveDataTypeable #-} +{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} +{-# OPTIONS_GHC -Wno-incomplete-patterns #-} +{-# OPTIONS_GHC -Wno-orphans #-} --- import Data.List --- import GHC.Types.SrcLoc +import Data.List +import Data.Data +import GHC.Types.Name.Occurrence +import GHC.Types.Name.Reader import GHC hiding (moduleName) import GHC.Driver.Ppr import GHC.Driver.Session import GHC.Hs.Dump --- import qualified Control.Monad.IO.Class as GHC --- import GHC.Types.SourceText --- import GHC.Hs.Exact hiding (ExactPrint()) --- import GHC.Utils.Outputable hiding (space) +import GHC.Data.Bag import System.Environment( getArgs ) import System.Exit import System.FilePath import System.IO + +import Types +import Utils import ExactPrint --- exactPrint = undefined --- showPprUnsafe = undefined +import Transform +import Parsers + +import GHC.Parser.Lexer +import GHC.Data.FastString +import GHC.Types.SrcLoc -- --------------------------------------------------------------------- _tt :: IO () --- _tt = testOneFile "/home/alanz/mysrc/git.haskell.org/ghc/_build/stage1/lib" -_tt = testOneFile "/home/alanz/mysrc/git.haskell.org/worktree/exactprint/_build/stage1/lib" --- _tt = testOneFile "/home/alanz/mysrc/git.haskell.org/worktree/epw/_build/stage1/lib" - - -- "../../testsuite/tests/printer/Ppr001.hs" - -- "../../testsuite/tests/printer/Ppr002.hs" - -- "../../testsuite/tests/printer/Ppr002a.hs" - -- "../../testsuite/tests/printer/Ppr003.hs" - -- "../../testsuite/tests/printer/Ppr004.hs" - -- "../../testsuite/tests/printer/Ppr005.hs" - -- "../../testsuite/tests/qualifieddo/should_compile/qdocompile001.hs" - -- "../../testsuite/tests/printer/Ppr006.hs" - -- "../../testsuite/tests/printer/Ppr007.hs" - -- "../../testsuite/tests/printer/Ppr008.hs" - -- "../../testsuite/tests/hiefile/should_compile/hie008.hs" - -- "../../testsuite/tests/printer/Ppr009.hs" - -- "../../testsuite/tests/printer/Ppr011.hs" - -- "../../testsuite/tests/printer/Ppr012.hs" - -- "../../testsuite/tests/printer/Ppr013.hs" - -- "../../testsuite/tests/printer/Ppr014.hs" - -- "../../testsuite/tests/printer/Ppr015.hs" - -- "../../testsuite/tests/printer/Ppr016.hs" - -- "../../testsuite/tests/printer/Ppr017.hs" - -- "../../testsuite/tests/printer/Ppr018.hs" - -- "../../testsuite/tests/printer/Ppr019.hs" - -- "../../testsuite/tests/printer/Ppr020.hs" - -- "../../testsuite/tests/printer/Ppr021.hs" - -- "../../testsuite/tests/printer/Ppr022.hs" - -- "../../testsuite/tests/printer/Ppr023.hs" - -- "../../testsuite/tests/printer/Ppr024.hs" - -- "../../testsuite/tests/printer/Ppr025.hs" - -- "../../testsuite/tests/printer/Ppr026.hs" - -- "../../testsuite/tests/printer/Ppr027.hs" - -- "../../testsuite/tests/printer/Ppr028.hs" - -- "../../testsuite/tests/printer/Ppr029.hs" - -- "../../testsuite/tests/printer/Ppr030.hs" - -- "../../testsuite/tests/printer/Ppr031.hs" - -- "../../testsuite/tests/printer/Ppr032.hs" - -- "../../testsuite/tests/printer/Ppr033.hs" - -- "../../testsuite/tests/printer/Ppr034.hs" - -- "../../testsuite/tests/printer/Ppr035.hs" - "../../testsuite/tests/printer/Ppr036.hs" - -- "../../testsuite/tests/printer/Ppr037.hs" - -- "../../testsuite/tests/printer/Ppr038.hs" - -- "../../testsuite/tests/printer/Ppr039.hs" - -- "../../testsuite/tests/printer/Ppr040.hs" - -- "../../testsuite/tests/printer/Ppr041.hs" - -- "../../testsuite/tests/printer/Ppr042.hs" - -- "../../testsuite/tests/printer/Ppr043.hs" - -- "../../testsuite/tests/printer/Ppr044.hs" - -- "../../testsuite/tests/printer/Ppr045.hs" - -- "../../testsuite/tests/printer/Ppr046.hs" - -- Not tested, the GENERATED pragma is getting removed "../../testsuite/tests/printer/Ppr047.hs" - -- "../../testsuite/tests/printer/Ppr048.hs" - -- "../../testsuite/tests/printer/Ppr049.hs" - -- "../../testsuite/tests/printer/T13050p.hs" - -- "../../testsuite/tests/printer/T13199.hs" - -- "../../testsuite/tests/printer/T13550.hs" - -- "../../testsuite/tests/printer/T13942.hs" - -- "../../testsuite/tests/printer/T14289b.hs" - -- "../../testsuite/tests/printer/T14289c.hs" - -- "../../testsuite/tests/printer/T14289.hs" - -- "../../testsuite/tests/printer/T14306.hs" - -- "../../testsuite/tests/printer/T14343b.hs" - -- "../../testsuite/tests/printer/T14343.hs" - -- "../../testsuite/tests/printer/T15761.hs" - -- "../../testsuite/tests/printer/Test17519.hs" - -- "../../testsuite/tests/printer/T18052a.hs" - -- "../../testsuite/tests/printer/T18247a.hs" - -- "../../testsuite/tests/printer/Ppr050.hs" - -- "../../testsuite/tests/printer/Ppr051.hs" - -- "../../testsuite/tests/printer/Ppr052.hs" - -- "../../testsuite/tests/typecheck/should_fail/T17566c.hs" - -- "../../testsuite/tests/hiefile/should_compile/Constructors.hs" - -- "../../testsuite/tests/printer/StarBinderAnns.hs" - -- "../../testsuite/tests/typecheck/should_fail/StrictBinds.hs" - -- "../../testsuite/tests/printer/Test10276.hs" - -- "../../testsuite/tests/printer/Test10278.hs" - -- "../../testsuite/tests/printer/Test12417.hs" - -- "../../testsuite/tests/parser/should_compile/T14189.hs" - -- "../../testsuite/tests/printer/Test16212.hs" - -- "../../testsuite/tests/printer/Test10312.hs" - -- "../../testsuite/tests/printer/Test10354.hs" - -- "../../testsuite/tests/printer/Test10357.hs" - -- "../../testsuite/tests/printer/Test10399.hs" - -- "../../testsuite/tests/printer/Test11018.hs" - -- "../../testsuite/tests/printer/Test11332.hs" - -- "../../testsuite/tests/printer/Test16230.hs" - -- "../../testsuite/tests/printer/Test16236.hs" - -- "../../testsuite/tests/printer/AnnotationLet.hs" - -- "../../testsuite/tests/printer/AnnotationTuple.hs" - -- "../../testsuite/tests/ghc-api/annotations/CommentsTest.hs" - -- "../../testsuite/tests/hiefile/should_compile/Scopes.hs" - -- "../../testsuite/tests/printer/Ppr053.hs" - -- "../../testsuite/tests/printer/Ppr054.hs" - -- "../../testsuite/tests/printer/Ppr055.hs" - -- "../../testsuite/tests/hiefile/should_run/PatTypes.hs" - -- "./cases/LocalDecls2.expected.hs" - -- "./cases/WhereIn3a.hs" - -- "./cases/AddLocalDecl1.hs" - -- "./cases/LayoutIn1.hs" - -- "./cases/EmptyWheres.hs" - -- "../../testsuite/tests/printer/PprRecordDotSyntax1.hs" - -- "../../testsuite/tests/printer/PprRecordDotSyntax2.hs" - -- "../../testsuite/tests/printer/PprRecordDotSyntax3.hs" - -- "../../testsuite/tests/printer/PprRecordDotSyntax4.hs" - -- "../../testsuite/tests/printer/PprRecordDotSyntaxA.hs" - -- "./cases/Windows.hs" +-- _tt = testOneFile changers "/home/alanz/mysrc/git.haskell.org/ghc/_build/stage1/lib" +_tt = testOneFile changers "/home/alanz/mysrc/git.haskell.org/worktree/exactprint/_build/stage1/lib" +-- _tt = testOneFile changers "/home/alanz/mysrc/git.haskell.org/worktree/epw/_build/stage1/lib" + -- "../../testsuite/tests/ghc-api/exactprint/RenameCase1.hs" changeRenameCase1 + -- "../../testsuite/tests/ghc-api/exactprint/LayoutLet2.hs" changeLayoutLet2 + -- "../../testsuite/tests/ghc-api/exactprint/LayoutLet3.hs" changeLayoutLet3 + -- "../../testsuite/tests/ghc-api/exactprint/LayoutLet4.hs" changeLayoutLet3 + -- "../../testsuite/tests/ghc-api/exactprint/Rename1.hs" changeRename1 + -- "../../testsuite/tests/ghc-api/exactprint/Rename2.hs" changeRename2 + -- "../../testsuite/tests/ghc-api/exactprint/LayoutIn1.hs" changeLayoutIn1 + -- "../../testsuite/tests/ghc-api/exactprint/LayoutIn3.hs" changeLayoutIn3 + -- "../../testsuite/tests/ghc-api/exactprint/LayoutIn3a.hs" changeLayoutIn3 + -- "../../testsuite/tests/ghc-api/exactprint/LayoutIn3b.hs" changeLayoutIn3 + -- "../../testsuite/tests/ghc-api/exactprint/LayoutIn4.hs" changeLayoutIn4 + -- "../../testsuite/tests/ghc-api/exactprint/LocToName.hs" changeLocToName + -- "../../testsuite/tests/ghc-api/exactprint/LetIn1.hs" changeLetIn1 + -- "../../testsuite/tests/ghc-api/exactprint/WhereIn4.hs" changeWhereIn4 + -- "../../testsuite/tests/ghc-api/exactprint/AddDecl1.hs" changeAddDecl1 + -- "../../testsuite/tests/ghc-api/exactprint/AddDecl2.hs" changeAddDecl2 + -- "../../testsuite/tests/ghc-api/exactprint/AddDecl3.hs" changeAddDecl3 + -- "../../testsuite/tests/ghc-api/exactprint/LocalDecls.hs" changeLocalDecls + -- "../../testsuite/tests/ghc-api/exactprint/LocalDecls2.hs" changeLocalDecls2 + -- "../../testsuite/tests/ghc-api/exactprint/WhereIn3a.hs" changeWhereIn3a + -- "../../testsuite/tests/ghc-api/exactprint/WhereIn3b.hs" changeWhereIn3b + -- "../../testsuite/tests/ghc-api/exactprint/AddLocalDecl1.hs" addLocaLDecl1 + -- "../../testsuite/tests/ghc-api/exactprint/AddLocalDecl2.hs" addLocaLDecl2 + -- "../../testsuite/tests/ghc-api/exactprint/AddLocalDecl3.hs" addLocaLDecl3 + -- "../../testsuite/tests/ghc-api/exactprint/AddLocalDecl4.hs" addLocaLDecl4 + -- "../../testsuite/tests/ghc-api/exactprint/AddLocalDecl5.hs" addLocaLDecl5 + -- "../../testsuite/tests/ghc-api/exactprint/AddLocalDecl6.hs" (Just addLocaLDecl6) + -- "../../testsuite/tests/ghc-api/exactprint/RmDecl1.hs" rmDecl1 + -- "../../testsuite/tests/ghc-api/exactprint/RmDecl2.hs" rmDecl2 + -- "../../testsuite/tests/ghc-api/exactprint/RmDecl3.hs" rmDecl3 + -- "../../testsuite/tests/ghc-api/exactprint/RmDecl4.hs" rmDecl4 + -- "../../testsuite/tests/ghc-api/exactprint/RmDecl5.hs" rmDecl5 + -- "../../testsuite/tests/ghc-api/exactprint/RmDecl6.hs" rmDecl6 + -- "../../testsuite/tests/ghc-api/exactprint/RmDecl7.hs" rmDecl7 + -- "../../testsuite/tests/ghc-api/exactprint/RmTypeSig1.hs" rmTypeSig1 + -- "../../testsuite/tests/ghc-api/exactprint/RmTypeSig2.hs" rmTypeSig2 + -- "../../testsuite/tests/ghc-api/exactprint/AddHiding1.hs" addHiding1 + -- "../../testsuite/tests/ghc-api/exactprint/AddHiding2.hs" addHiding2 + -- "../../testsuite/tests/printer/Ppr001.hs" Nothing + + "../../testsuite/tests/ghc-api/annotations/CommentsTest.hs" Nothing + -- "../../testsuite/tests/hiefile/should_compile/Constructors.hs" Nothing + -- "../../testsuite/tests/hiefile/should_compile/Scopes.hs" Nothing + -- "../../testsuite/tests/hiefile/should_compile/hie008.hs" Nothing + -- "../../testsuite/tests/hiefile/should_run/PatTypes.hs" Nothing + -- "../../testsuite/tests/parser/should_compile/T14189.hs" Nothing + + -- "../../testsuite/tests/printer/AnnotationLet.hs" Nothing + -- "../../testsuite/tests/printer/AnnotationTuple.hs" Nothing + -- "../../testsuite/tests/printer/Ppr001.hs" Nothing + -- "../../testsuite/tests/printer/Ppr002.hs" Nothing + -- "../../testsuite/tests/printer/Ppr002a.hs" Nothing + -- "../../testsuite/tests/printer/Ppr003.hs" Nothing + -- "../../testsuite/tests/printer/Ppr004.hs" Nothing + -- "../../testsuite/tests/printer/Ppr005.hs" Nothing + -- "../../testsuite/tests/printer/Ppr006.hs" Nothing + -- "../../testsuite/tests/printer/Ppr007.hs" Nothing + -- "../../testsuite/tests/printer/Ppr008.hs" Nothing + -- "../../testsuite/tests/printer/Ppr009.hs" Nothing + -- "../../testsuite/tests/printer/Ppr011.hs" Nothing + -- "../../testsuite/tests/printer/Ppr012.hs" Nothing + -- "../../testsuite/tests/printer/Ppr013.hs" Nothing + -- "../../testsuite/tests/printer/Ppr014.hs" Nothing + -- "../../testsuite/tests/printer/Ppr015.hs" Nothing + -- "../../testsuite/tests/printer/Ppr016.hs" Nothing + -- "../../testsuite/tests/printer/Ppr017.hs" Nothing + -- "../../testsuite/tests/printer/Ppr018.hs" Nothing + -- "../../testsuite/tests/printer/Ppr019.hs" Nothing + -- "../../testsuite/tests/printer/Ppr020.hs" Nothing + -- "../../testsuite/tests/printer/Ppr021.hs" Nothing + -- "../../testsuite/tests/printer/Ppr022.hs" Nothing + -- "../../testsuite/tests/printer/Ppr023.hs" Nothing + -- "../../testsuite/tests/printer/Ppr024.hs" Nothing + -- "../../testsuite/tests/printer/Ppr025.hs" Nothing + -- "../../testsuite/tests/printer/Ppr026.hs" Nothing + -- "../../testsuite/tests/printer/Ppr027.hs" Nothing + -- "../../testsuite/tests/printer/Ppr028.hs" Nothing + -- "../../testsuite/tests/printer/Ppr029.hs" Nothing + -- "../../testsuite/tests/printer/Ppr030.hs" Nothing + -- "../../testsuite/tests/printer/Ppr031.hs" Nothing + -- "../../testsuite/tests/printer/Ppr032.hs" Nothing + -- "../../testsuite/tests/printer/Ppr033.hs" Nothing + -- "../../testsuite/tests/printer/Ppr034.hs" Nothing + -- "../../testsuite/tests/printer/Ppr035.hs" Nothing + -- "../../testsuite/tests/printer/Ppr036.hs" Nothing + -- "../../testsuite/tests/printer/Ppr037.hs" Nothing + -- "../../testsuite/tests/printer/Ppr038.hs" Nothing + -- "../../testsuite/tests/printer/Ppr039.hs" Nothing + -- "../../testsuite/tests/printer/Ppr040.hs" Nothing + -- "../../testsuite/tests/printer/Ppr041.hs" Nothing + -- "../../testsuite/tests/printer/Ppr042.hs" Nothing + -- "../../testsuite/tests/printer/Ppr043.hs" Nothing + -- "../../testsuite/tests/printer/Ppr044.hs" Nothing + -- "../../testsuite/tests/printer/Ppr045.hs" Nothing + -- "../../testsuite/tests/printer/Ppr046.hs" Nothing + -- "../../testsuite/tests/printer/Ppr048.hs" Nothing + -- "../../testsuite/tests/printer/Ppr049.hs" Nothing + -- "../../testsuite/tests/printer/Ppr050.hs" Nothing + -- "../../testsuite/tests/printer/Ppr051.hs" Nothing + -- "../../testsuite/tests/printer/Ppr052.hs" Nothing + -- "../../testsuite/tests/printer/Ppr053.hs" Nothing + -- "../../testsuite/tests/printer/Ppr054.hs" Nothing + -- "../../testsuite/tests/printer/Ppr055.hs" Nothing + -- "../../testsuite/tests/printer/PprRecordDotSyntax1.hs" Nothing + -- "../../testsuite/tests/printer/PprRecordDotSyntax2.hs" Nothing + -- "../../testsuite/tests/printer/PprRecordDotSyntax3.hs" Nothing + -- "../../testsuite/tests/printer/PprRecordDotSyntax4.hs" Nothing + -- "../../testsuite/tests/printer/PprRecordDotSyntaxA.hs" Nothing + -- "../../testsuite/tests/printer/StarBinderAnns.hs" Nothing + -- "../../testsuite/tests/printer/T13050p.hs" Nothing + -- "../../testsuite/tests/printer/T13199.hs" Nothing + -- "../../testsuite/tests/printer/T13550.hs" Nothing + -- "../../testsuite/tests/printer/T13942.hs" Nothing + -- "../../testsuite/tests/printer/T14289.hs" Nothing + -- "../../testsuite/tests/printer/T14289b.hs" Nothing + -- "../../testsuite/tests/printer/T14289c.hs" Nothing + -- "../../testsuite/tests/printer/T14306.hs" Nothing + -- "../../testsuite/tests/printer/T14343.hs" Nothing + -- "../../testsuite/tests/printer/T14343b.hs" Nothing + -- "../../testsuite/tests/printer/T15761.hs" Nothing + -- "../../testsuite/tests/printer/T18052a.hs" Nothing + -- "../../testsuite/tests/printer/T18247a.hs" Nothing + -- "../../testsuite/tests/printer/Test10276.hs" Nothing + -- "../../testsuite/tests/printer/Test10278.hs" Nothing + -- "../../testsuite/tests/printer/Test10312.hs" Nothing + -- "../../testsuite/tests/printer/Test10354.hs" Nothing + -- "../../testsuite/tests/printer/Test10357.hs" Nothing + -- "../../testsuite/tests/printer/Test10399.hs" Nothing + -- "../../testsuite/tests/printer/Test11018.hs" Nothing + -- "../../testsuite/tests/printer/Test11332.hs" Nothing + -- "../../testsuite/tests/printer/Test12417.hs" Nothing + -- "../../testsuite/tests/printer/Test16212.hs" Nothing + -- "../../testsuite/tests/printer/Test16230.hs" Nothing + -- "../../testsuite/tests/printer/Test16236.hs" Nothing + -- "../../testsuite/tests/printer/Test17519.hs" Nothing + + -- "../../testsuite/tests/qualifieddo/should_compile/qdocompile001.hs" Nothing + -- "../../testsuite/tests/typecheck/should_fail/StrictBinds.hs" Nothing + -- "../../testsuite/tests/typecheck/should_fail/T17566c.hs" Nothing + -- "../../testsuite/tests/ghc-api/exactprint/AddLocalDecl1.hs" Nothing + -- "../../testsuite/tests/ghc-api/exactprint/EmptyWheres.hs" Nothing + -- "../../testsuite/tests/ghc-api/exactprint/LayoutIn1.hs" Nothing + -- "../../testsuite/tests/ghc-api/exactprint/LocalDecls2.expected.hs" Nothing + -- "../../testsuite/tests/ghc-api/exactprint/WhereIn3a.hs" Nothing + -- "../../testsuite/tests/ghc-api/exactprint/Windows.hs" Nothing + +-- cloneT does not need a test, function can be retired + -- exact = ppr +changers :: [(String, Changer)] +changers = + [("noChange", noChange) + ,("changeRenameCase1", changeRenameCase1) + ,("changeLayoutLet2", changeLayoutLet2) + ,("changeLayoutLet3", changeLayoutLet3) + ,("changeLayoutIn1", changeLayoutIn1) + ,("changeLayoutIn3", changeLayoutIn3) + ,("changeLayoutIn4", changeLayoutIn4) + ,("changeLocToName", changeLocToName) + ,("changeRename1", changeRename1) + ,("changeRename2", changeRename2) + ,("changeWhereIn4", changeWhereIn4) + ,("changeLetIn1", changeLetIn1) + ,("changeAddDecl1", changeAddDecl1) + ,("changeAddDecl2", changeAddDecl2) + ,("changeAddDecl3", changeAddDecl3) + ,("changeLocalDecls", changeLocalDecls) + ,("changeLocalDecls2", changeLocalDecls2) + ,("changeWhereIn3a", changeWhereIn3a) + ,("changeWhereIn3b", changeWhereIn3b) + ,("ADDLOCALDECL1", addLocaLDecl1) + ,("ADDLOCALDECL2", addLocaLDecl2) + ,("ADDLOCALDECL3", addLocaLDecl3) + ,("ADDLOCALDECL4", addLocaLDecl4) + ,("ADDLOCALDECL5", addLocaLDecl5) + ,("ADDLOCALDECL6", addLocaLDecl6) + ,("ADDLOCALDECL6", addLocaLDecl6) + ,("rmDecl1", rmDecl1) + ,("rmDecl2", rmDecl2) + ,("rmDecl3", rmDecl3) + ,("rmDecl4", rmDecl4) + ,("rmDecl5", rmDecl5) + ,("rmDecl6", rmDecl6) + ,("rmDecl7", rmDecl7) + ,("rmTypeSig1", rmTypeSig1) + ,("rmTypeSig2", rmTypeSig2) + ,("addHiding1", addHiding1) + ,("addHiding2", addHiding2) + ] + -- --------------------------------------------------------------------- usage :: String usage = unlines - [ "usage: check-exact (libdir) (file)" + [ "usage: check-ppr (libdir) (file)" + , " check-ppr (libdir) (changer) (file)" , "" , "where libdir is the GHC library directory (e.g. the output of" - , "ghc --print-libdir) and file is the file to parse." + , "ghc --print-libdir), file is the file to parse" + , "and changer is an optional name of a 'changer' to modify the" + , " AST before printing." ] main :: IO() main = do args <- getArgs case args of - [libdir,fileName] -> testOneFile libdir fileName + [libdir,fileName] -> testOneFile changers libdir fileName Nothing + [libdir,fileName,changerStr] -> case lookup changerStr changers of + Just doChange -> testOneFile changers libdir fileName (Just doChange) + Nothing -> do + putStrLn $ "exactprint: could not find changer for [" ++ changerStr ++ "]" + putStrLn $ "valid changers are:\n" ++ unlines (map fst changers) + putStrLn $ "(see utils/check-exact/Main.hs)" + exitFailure _ -> putStrLn usage +deriving instance Data Token +deriving instance Data PsSpan +deriving instance Data BufSpan +deriving instance Data BufPos + writeBinFile :: FilePath -> String -> IO() writeBinFile fpath x = withBinaryFile fpath WriteMode (\h -> hSetEncoding h utf8 >> hPutStr h x) -testOneFile :: FilePath -> String -> IO () -testOneFile libdir fileName = do - p <- parseOneFile libdir fileName - -- putStrLn $ "\n\ngot p" +testOneFile :: [(String, Changer)] -> FilePath -> String -> Maybe Changer -> IO () +testOneFile _ libdir fileName mchanger = do + (p,_toks) <- parseOneFile libdir fileName + -- putStrLn $ "\n\ngot p" ++ showAst (take 4 $ reverse toks) let - origAst = showSDocUnsafe - $ showAstData BlankSrcSpanFile NoBlankApiAnnotations - (pm_parsed_source p) + origAst = ppAst (pm_parsed_source p) anns' = pm_annotations p - -- pped = pragmas ++ "\n" ++ (exactPrint $ pm_parsed_source p) pped = exactPrint (pm_parsed_source p) anns' - -- pragmas = getPragmas anns' - newFile = dropExtension fileName <.> "ppr" <.> takeExtension fileName - astFile = fileName <.> "ast" - newAstFile = fileName <.> "ast.new" + newFile = dropExtension fileName <.> "ppr" <.> takeExtension fileName + newFileChanged = dropExtension fileName <.> "changed" <.> takeExtension fileName + newFileExpected = dropExtension fileName <.> "expected" <.> takeExtension fileName + astFile = fileName <.> "ast" + newAstFile = fileName <.> "ast.new" + changedAstFile = fileName <.> "ast.changed" - -- putStrLn $ "\n\nabout to writeFile" writeBinFile astFile origAst - -- putStrLn $ "\n\nabout to pp" writeBinFile newFile pped - -- putStrLn $ "anns':" ++ showPprUnsafe (apiAnnRogueComments anns') + (changedSourceOk, expectedSource, changedSource) <- case mchanger of + Just changer -> do + (pped', ast') <- exactprintWithChange libdir changer (pm_parsed_source p) anns' + writeBinFile changedAstFile (ppAst ast') + writeBinFile newFileChanged pped' + + expectedSource <- readFile newFileExpected + changedSource <- readFile newFileChanged + return (expectedSource == changedSource, expectedSource, changedSource) + Nothing -> return (True, "", "") - p' <- parseOneFile libdir newFile + (p',_) <- parseOneFile libdir newFile let newAstStr :: String - newAstStr = showSDocUnsafe - $ showAstData BlankSrcSpanFile NoBlankApiAnnotations - (pm_parsed_source p') + newAstStr = ppAst (pm_parsed_source p') writeBinFile newAstFile newAstStr - -- putStrLn $ "\n\nanns':" ++ showPprUnsafe (apiAnnRogueComments anns') - if origAst == newAstStr + let + origAstOk = origAst == newAstStr + if origAstOk && changedSourceOk then do - -- putStrLn "ASTs matched" exitSuccess - else do - putStrLn "exactPrint AST Match Failed" - putStrLn "\n===================================\nOrig\n\n" - putStrLn origAst - putStrLn "\n===================================\nNew\n\n" - putStrLn newAstStr - putStrLn "\n===================================\n\n" - exitFailure + else if not origAstOk + then do + putStrLn "exactPrint: AST Match Failed" + putStrLn "\n===================================\nOrig\n\n" + putStrLn origAst + putStrLn "\n===================================\nNew\n\n" + putStrLn newAstStr + exitFailure + else do + putStrLn "exactPrint: Changed AST Source Mismatch" + putStrLn "\n===================================\nExpected\n\n" + putStrLn expectedSource + putStrLn "\n===================================\nChanged\n\n" + putStrLn changedSource + putStrLn "\n===================================\n" + putStrLn $ show changedSourceOk + exitFailure +ppAst :: Data a => a -> String +ppAst ast = showSDocUnsafe $ showAstData BlankSrcSpanFile NoBlankApiAnnotations ast -parseOneFile :: FilePath -> FilePath -> IO ParsedModule +parseOneFile :: FilePath -> FilePath -> IO (ParsedModule, [Located Token]) parseOneFile libdir fileName = do let modByFile m = case ml_hs_file $ ms_location m of @@ -220,10 +346,11 @@ parseOneFile libdir fileName = do [x] -> x xs -> error $ "Can't find module, got:" ++ show (map (ml_hs_file . ms_location) xs) - -- toks <- getRichTokenStream (ms_mod modSum) - -- toks <- getTokenStream (ms_mod modSum) - -- GHC.liftIO $ putStrLn $ "toks=" ++ showPprUnsafe toks - parseModule modSum + pm <- GHC.parseModule modSum + toks <- getTokenStream (ms_mod modSum) + return (pm, toks) + + -- getTokenStream :: GhcMonad m => Module -> m [Located Token] -- getPragmas :: ApiAnns -> String -- getPragmas anns' = pragmaStr @@ -240,3 +367,590 @@ parseOneFile libdir fileName = do -- pp a = showPpr unsafeGlobalDynFlags a -- --------------------------------------------------------------------- + +exactprintWithChange :: FilePath -> Changer -> ParsedSource -> ApiAnns -> IO (String, ParsedSource) +exactprintWithChange libdir f p apiAnns = do + debugM $ "exactprintWithChange:apiAnns=" ++ showGhc (apiAnnRogueComments apiAnns) + (apiAnns',p') <- f libdir apiAnns p + return (exactPrint p' apiAnns', p') + +-- First param is libdir +type Changer = FilePath -> (ApiAnns -> ParsedSource -> IO (ApiAnns,ParsedSource)) + +noChange :: Changer +noChange _libdir ans parsed = return (ans,parsed) + +changeRenameCase1 :: Changer +changeRenameCase1 _libdir ans parsed = return (ans,rename "bazLonger" [((3,15),(3,18))] parsed) + +changeLayoutLet2 :: Changer +changeLayoutLet2 _libdir ans parsed = return (ans,rename "xxxlonger" [((7,5),(7,8)),((8,24),(8,27))] parsed) + +changeLayoutLet3 :: Changer +changeLayoutLet3 _libdir ans parsed = return (ans,rename "xxxlonger" [((7,5),(7,8)),((9,14),(9,17))] parsed) + +changeLayoutIn1 :: Changer +changeLayoutIn1 _libdir ans parsed = return (ans,rename "square" [((7,17),(7,19)),((7,24),(7,26))] parsed) + +changeLayoutIn3 :: Changer +changeLayoutIn3 _libdir ans parsed = return (ans,rename "anotherX" [((7,13),(7,14)),((7,37),(7,38)),((8,37),(8,38))] parsed) + +changeLayoutIn4 :: Changer +changeLayoutIn4 _libdir ans parsed = return (ans,rename "io" [((7,8),(7,13)),((7,28),(7,33))] parsed) + +changeLocToName :: Changer +changeLocToName _libdir ans parsed = return (ans,rename "LocToName.newPoint" [((20,1),(20,11)),((20,28),(20,38)),((24,1),(24,11))] parsed) + + +changeRename1 :: Changer +changeRename1 _libdir ans parsed = return (ans,rename "bar2" [((3,1),(3,4))] parsed) + +changeRename2 :: Changer +changeRename2 _libdir ans parsed = return (ans,rename "joe" [((2,1),(2,5))] parsed) + +rename :: (Data a) => String -> [(Pos, Pos)] -> a -> a +rename newNameStr spans' a + = everywhere (mkT replaceRdr) a + where + newName = mkRdrUnqual (mkVarOcc newNameStr) + + cond :: SrcSpan -> Bool + cond ln = ss2range ln `elem` spans' + + replaceRdr :: LocatedN RdrName -> LocatedN RdrName + replaceRdr (L ln _) + | cond (locA ln) = L ln newName + replaceRdr x = x + +-- --------------------------------------------------------------------- + +changeWhereIn4 :: Changer +changeWhereIn4 _libdir ans parsed + = return (ans,everywhere (mkT replace) parsed) + where + replace :: LocatedN RdrName -> LocatedN RdrName + replace (L ln _n) + | ss2range (locA ln) == ((12,16),(12,17)) = L ln (mkRdrUnqual (mkVarOcc "p_2")) + replace x = x + +-- --------------------------------------------------------------------- + +changeLetIn1 :: Changer +changeLetIn1 _libdir ans parsed + = return (ans,everywhere (mkT replace) parsed) + where + replace :: HsExpr GhcPs -> HsExpr GhcPs + replace (HsLet (ApiAnn anc (AnnsLet l _i) cs) localDecls expr) + = + let (HsValBinds x (ValBinds xv bagDecls sigs)) = localDecls + [l2,_l1] = map wrapDecl $ bagToList bagDecls + bagDecls' = listToBag $ concatMap decl2Bind [l2] + (L (SrcSpanAnn _ le) e) = expr + a = (SrcSpanAnn (ApiAnn (Anchor (realSrcSpan le) (MovedAnchor (DP 0 1))) mempty noCom) le) + expr' = L a e + in (HsLet (ApiAnn anc (AnnsLet l (AD (DP 1 0))) cs) (HsValBinds x (ValBinds xv bagDecls' sigs)) expr') + + replace x = x +-- --------------------------------------------------------------------- + +-- | Add a declaration to AddDecl +changeAddDecl1 :: Changer +changeAddDecl1 libdir ans top = do + Right (_, decl) <- withDynFlags libdir (\df -> parseDecl df "<interactive>" "nn = n2") + let decl' = setEntryDP' decl (DP 2 0) + + let (p',(_,_),_) = runTransform mempty doAddDecl + doAddDecl = everywhereM (mkM replaceTopLevelDecls) top + replaceTopLevelDecls :: ParsedSource -> Transform ParsedSource + replaceTopLevelDecls m = insertAtStart m decl' + return (ans,p') + +-- --------------------------------------------------------------------- +changeAddDecl2 :: Changer +changeAddDecl2 libdir ans top = do + Right (_, decl) <- withDynFlags libdir (\df -> parseDecl df "<interactive>" "nn = n2") + let decl' = setEntryDP' decl (DP 2 0) + let top' = anchorEof top + + let (p',(_,_),_) = runTransform mempty doAddDecl + doAddDecl = everywhereM (mkM replaceTopLevelDecls) top' + replaceTopLevelDecls :: ParsedSource -> Transform ParsedSource + replaceTopLevelDecls m = insertAtEnd m decl' + return (ans,p') + +-- --------------------------------------------------------------------- +changeAddDecl3 :: Changer +changeAddDecl3 libdir ans top = do + Right (_, decl) <- withDynFlags libdir (\df -> parseDecl df "<interactive>" "nn = n2") + let decl' = setEntryDP' decl (DP 2 0) + + let (p',(_,_),_) = runTransform mempty doAddDecl + doAddDecl = everywhereM (mkM replaceTopLevelDecls) top + f d (l1:l2:ls) = l1:d:l2':ls + where + l2' = setEntryDP' l2 (DP 2 0) + replaceTopLevelDecls :: ParsedSource -> Transform ParsedSource + replaceTopLevelDecls m = insertAt f m decl' + return (ans,p') + +-- --------------------------------------------------------------------- + +-- | Add a local declaration with signature to LocalDecl +changeLocalDecls :: Changer +changeLocalDecls libdir ans (L l p) = do + Right (_, s@(L ls (SigD _ sig))) <- withDynFlags libdir (\df -> parseDecl df "sig" "nn :: Int") + Right (_, d@(L ld (ValD _ decl))) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") + let decl' = setEntryDP' (L ld decl) (DP 1 0) + let sig' = setEntryDP' (L ls sig) (DP 0 0) + let (p',(_,_),_w) = runTransform mempty doAddLocal + doAddLocal = everywhereM (mkM replaceLocalBinds) p + replaceLocalBinds :: LMatch GhcPs (LHsExpr GhcPs) + -> Transform (LMatch GhcPs (LHsExpr GhcPs)) + replaceLocalBinds (L lm (Match an mln pats (GRHSs _ rhs (HsValBinds van (ValBinds _ binds sigs))))) = do + let oldDecls = sortLocatedA $ map wrapDecl (bagToList binds) ++ map wrapSig sigs + let decls = s:d:oldDecls + let oldDecls' = captureLineSpacing oldDecls + let oldBinds = concatMap decl2Bind oldDecls' + (os:oldSigs) = concatMap decl2Sig oldDecls' + os' = setEntryDP' os (DP 2 0) + let sortKey = captureOrder decls + let (ApiAnn anc (AnnList (Just (Anchor anc2 _)) a b c dd) cs) = van + let van' = (ApiAnn anc (AnnList (Just (Anchor anc2 (MovedAnchor (DP 1 4)))) a b c dd) cs) + let binds' = (HsValBinds van' + (ValBinds sortKey (listToBag $ decl':oldBinds) + (sig':os':oldSigs))) + return (L lm (Match an mln pats (GRHSs noExtField rhs binds'))) + replaceLocalBinds x = return x + return (ans,L l p') + +-- --------------------------------------------------------------------- + +-- | Add a local declaration with signature to LocalDecl, where there was no +-- prior local decl. So it adds a "where" annotation. +changeLocalDecls2 :: Changer +changeLocalDecls2 libdir ans (L l p) = do + Right (_, d@(L ld (ValD _ decl))) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") + Right (_, s@(L ls (SigD _ sig))) <- withDynFlags libdir (\df -> parseDecl df "sig" "nn :: Int") + let decl' = setEntryDP' (L ld decl) (DP 1 0) + let sig' = setEntryDP' (L ls sig) (DP 0 2) + let (p',(_,_),_w) = runTransform mempty doAddLocal + doAddLocal = everywhereM (mkM replaceLocalBinds) p + replaceLocalBinds :: LMatch GhcPs (LHsExpr GhcPs) + -> Transform (LMatch GhcPs (LHsExpr GhcPs)) + replaceLocalBinds (L lm (Match ma mln pats (GRHSs _ rhs EmptyLocalBinds{}))) = do + newSpan <- uniqueSrcSpanT + let anc = (Anchor (rs newSpan) (MovedAnchor (DP 1 2))) + let anc2 = (Anchor (rs newSpan) (MovedAnchor (DP 1 4))) + let an = ApiAnn anc + (AnnList (Just anc2) Nothing Nothing + [(undeltaSpan (rs newSpan) AnnWhere (DP 0 0))] []) + noCom + let decls = [s,d] + let sortKey = captureOrder decls + let binds = (HsValBinds an (ValBinds sortKey (listToBag $ [decl']) + [sig'])) + return (L lm (Match ma mln pats (GRHSs noExtField rhs binds))) + replaceLocalBinds x = return x + return (ans,L l p') + +-- --------------------------------------------------------------------- + +-- | Check that balanceCommentsList is idempotent +changeWhereIn3a :: Changer +changeWhereIn3a _libdir ans (L l p) = do + let decls0 = hsmodDecls p + (decls,(_,_),w) = runTransform mempty (balanceCommentsList decls0) + (_de0:_:de1:_d2:_) = decls + debugM $ unlines w + debugM $ "changeWhereIn3a:de1:" ++ showAst de1 + let p2 = p { hsmodDecls = decls} + return (ans,L l p2) + +-- --------------------------------------------------------------------- + +changeWhereIn3b :: Changer +changeWhereIn3b _libdir ans (L l p) = do + let decls0 = hsmodDecls p + (decls,(_,_),w) = runTransform mempty (balanceCommentsList decls0) + (de0:_:de1:d2:_) = decls + de0' = setEntryDP' de0 (DP 2 0) + de1' = setEntryDP' de1 (DP 2 0) + d2' = setEntryDP' d2 (DP 2 0) + decls' = d2':de1':de0':(tail decls) + debugM $ unlines w + debugM $ "changeWhereIn3b:de1':" ++ showAst de1' + let p2 = p { hsmodDecls = decls'} + return (ans,L l p2) + +-- --------------------------------------------------------------------- + +addLocaLDecl1 :: Changer +addLocaLDecl1 libdir ans lp = do + Right (_, (L ld (ValD _ decl))) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") + let decl' = setEntryDP' (L ld decl) (DP 1 4) + doAddLocal = do + (de1:d2:d3:_) <- hsDecls lp + (de1'',d2') <- balanceComments de1 d2 + (de1',_) <- modifyValD (getLocA de1'') de1'' $ \_m d -> do + return ((wrapDecl decl' : d),Nothing) + replaceDecls lp [de1', d2', d3] + + (lp',(_,_),w) <- runTransformT mempty doAddLocal + debugM $ "addLocaLDecl1:" ++ intercalate "\n" w + return (ans,lp') + +-- --------------------------------------------------------------------- + +addLocaLDecl2 :: Changer +addLocaLDecl2 libdir ans lp = do + Right (_, newDecl) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") + let + doAddLocal = do + (de1:d2:_) <- hsDecls lp + (de1'',d2') <- balanceComments de1 d2 + + (parent',_) <- modifyValD (getLocA de1) de1'' $ \_m (d:ds) -> do + newDecl' <- transferEntryDP' d newDecl + let d' = setEntryDP' d (DP 1 0) + return ((newDecl':d':ds),Nothing) + + replaceDecls lp [parent',d2'] + + (lp',(_,_),_w) <- runTransformT mempty doAddLocal + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +addLocaLDecl3 :: Changer +addLocaLDecl3 libdir ans lp = do + Right (_, newDecl) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") + -- Right (_, newDecl@(L ld (ValD _ decl))) <- withDynFlags libdir (\df -> parseDecl df "decl" "jj = 2") + let + doAddLocal = do + (de1:d2:_) <- hsDecls lp + (de1'',d2') <- balanceComments de1 d2 + + (parent',_) <- modifyValD (getLocA de1) de1'' $ \_m (d:ds) -> do + let newDecl' = setEntryDP' newDecl (DP 1 0) + return (((d:ds) ++ [newDecl']),Nothing) + + replaceDecls (anchorEof lp) [parent',d2'] + + (lp',(_,_),_w) <- runTransformT mempty doAddLocal + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +addLocaLDecl4 :: Changer +addLocaLDecl4 libdir ans lp = do + Right (_, newDecl) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") + Right (_, newSig) <- withDynFlags libdir (\df -> parseDecl df "sig" "nn :: Int") + -- putStrLn $ "addLocaLDecl4:lp=" ++ showGhc lp + let + doAddLocal = do + (parent:ds) <- hsDecls lp + + let newDecl' = setEntryDP' newDecl (DP 1 0) + let newSig' = setEntryDP' newSig (DP 1 4) + + (parent',_) <- modifyValD (getLocA parent) parent $ \_m decls -> do + return ((decls++[newSig',newDecl']),Nothing) + + replaceDecls (anchorEof lp) (parent':ds) + + (lp',(_,_),_w) <- runTransformT mempty doAddLocal + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + + +-- --------------------------------------------------------------------- + +addLocaLDecl5 :: Changer +addLocaLDecl5 _libdir ans lp = do + let + doAddLocal = do + decls <- hsDecls lp + [s1,de1,d2,d3] <- balanceCommentsList decls + + let d3' = setEntryDP' d3 (DP 2 0) + + (de1',_) <- modifyValD (getLocA de1) de1 $ \_m _decls -> do + let d2' = setEntryDP' d2 (DP 1 0) + return ([d2'],Nothing) + replaceDecls lp [s1,de1',d3'] + + (lp',(_,_),_w) <- runTransformT mempty doAddLocal + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +addLocaLDecl6 :: Changer +addLocaLDecl6 libdir ans lp = do + Right (_, newDecl) <- withDynFlags libdir (\df -> parseDecl df "decl" "x = 3") + let + newDecl' = setEntryDP' newDecl (DP 1 4) + doAddLocal = do + decls0 <- hsDecls lp + [de1'',d2] <- balanceCommentsList decls0 + + let de1 = captureMatchLineSpacing de1'' + let L _ (ValD _ (FunBind _ _ (MG _ (L _ ms) _) _)) = de1 + let [ma1,_ma2] = ms + + (de1',_) <- modifyValD (getLocA ma1) de1 $ \_m decls -> do + return ((newDecl' : decls),Nothing) + replaceDecls lp [de1', d2] + + (lp',(_,_),_w) <- runTransformT mempty doAddLocal + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +rmDecl1 :: Changer +rmDecl1 _libdir ans lp = do + let doRmDecl = do + tlDecs0 <- hsDecls lp + tlDecs <- balanceCommentsList $ captureLineSpacing tlDecs0 + let (de1:_s1:_d2:ds) = tlDecs + + replaceDecls lp (de1:ds) + + (lp',(_,_),_w) <- runTransformT mempty doRmDecl + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +rmDecl2 :: Changer +rmDecl2 _libdir ans lp = do + let + doRmDecl = do + let + go :: GHC.LHsExpr GhcPs -> Transform (GHC.LHsExpr GhcPs) + go e@(GHC.L _ (GHC.HsLet{})) = do + decs0 <- hsDecls e + decs <- balanceCommentsList $ captureLineSpacing decs0 + e' <- replaceDecls e (init decs) + return e' + go x = return x + + everywhereM (mkM go) lp + + let (lp',(_,_),_w) = runTransform mempty doRmDecl + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +rmDecl3 :: Changer +rmDecl3 _libdir ans lp = do + let + doRmDecl = do + [de1,d2] <- hsDecls lp + + (de1',Just sd1) <- modifyValD (getLocA de1) de1 $ \_m [sd1] -> do + let sd1' = setEntryDP' sd1 (DP 2 0) + return ([],Just sd1') + + replaceDecls lp [de1',sd1,d2] + + (lp',(_,_),_w) <- runTransformT mempty doRmDecl + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +rmDecl4 :: Changer +rmDecl4 _libdir ans lp = do + let + doRmDecl = do + [de1] <- hsDecls lp + + (de1',Just sd1) <- modifyValD (getLocA de1) de1 $ \_m [sd1,sd2] -> do + sd2' <- transferEntryDP' sd1 sd2 + + let sd1' = setEntryDP' sd1 (DP 2 0) + return ([sd2'],Just sd1') + + replaceDecls (anchorEof lp) [de1',sd1] + + (lp',(_,_),_w) <- runTransformT mempty doRmDecl + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +rmDecl5 :: Changer +rmDecl5 _libdir ans lp = do + let + doRmDecl = do + let + go :: HsExpr GhcPs -> Transform (HsExpr GhcPs) + go (HsLet a lb expr) = do + decs <- hsDeclsValBinds lb + let dec = last decs + _ <- transferEntryDPT (head decs) dec + lb' <- replaceDeclsValbinds WithoutWhere lb [dec] + return (HsLet a lb' expr) + go x = return x + + everywhereM (mkM go) lp + + let (lp',(_,_),_w) = runTransform mempty doRmDecl + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +rmDecl6 :: Changer +rmDecl6 _libdir ans lp = do + let + doRmDecl = do + [de1] <- hsDecls lp + + (de1',_) <- modifyValD (getLocA de1) de1 $ \_m subDecs -> do + let (ss1:_sd1:sd2:sds) = subDecs + sd2' <- transferEntryDP' ss1 sd2 + + return (sd2':sds,Nothing) + + replaceDecls lp [de1'] + + (lp',(_,_),_w) <- runTransformT mempty doRmDecl + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +rmDecl7 :: Changer +rmDecl7 _libdir ans lp = do + let + doRmDecl = do + tlDecs <- hsDecls lp + [s1,de1,d2,d3] <- balanceCommentsList tlDecs + + d3' <- transferEntryDP' d2 d3 + + replaceDecls lp [s1,de1,d3'] + + (lp',(_,_),_w) <- runTransformT mempty doRmDecl + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +rmTypeSig1 :: Changer +rmTypeSig1 _libdir ans lp = do + let doRmDecl = do + tlDecs <- hsDecls lp + let (s0:de1:d2) = tlDecs + s1 = captureTypeSigSpacing s0 + (L l (SigD x1 (TypeSig x2 [n1,n2] typ))) = s1 + n2' <- transferEntryDP n1 n2 + let s1' = (L l (SigD x1 (TypeSig x2 [n2'] typ))) + replaceDecls lp (s1':de1:d2) + + let (lp',(_,_),_w) = runTransform mempty doRmDecl + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +rmTypeSig2 :: Changer +rmTypeSig2 _libdir ans lp = do + let doRmDecl = do + tlDecs <- hsDecls lp + let [de1] = tlDecs + + (de1',_) <- modifyValD (getLocA de1) de1 $ \_m [s,d] -> do + d' <- transferEntryDPT s d + return ([d'],Nothing) + replaceDecls lp [de1'] + + let (lp',(_,_),_w) = runTransform mempty doRmDecl + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +addHiding1 :: Changer +addHiding1 _libdir ans (L l p) = do + let doTransform = do + l0 <- uniqueSrcSpanT + l1 <- uniqueSrcSpanT + l2 <- uniqueSrcSpanT + let + [L li imp1,imp2] = hsmodImports p + n1 = L (noAnnSrcSpanDP0 l1) (mkVarUnqual (mkFastString "n1")) + n2 = L (noAnnSrcSpanDP0 l2) (mkVarUnqual (mkFastString "n2")) + v1 = L (addComma $ noAnnSrcSpanDP0 l1) (IEVar noExtField (L (noAnnSrcSpanDP0 l1) (IEName n1))) + v2 = L ( noAnnSrcSpanDP0 l2) (IEVar noExtField (L (noAnnSrcSpanDP0 l2) (IEName n2))) + impHiding = L (SrcSpanAnn (ApiAnn (Anchor (realSrcSpan l0) m0) + (AnnList Nothing + (Just (AddApiAnn AnnOpenP d1)) + (Just (AddApiAnn AnnCloseP d0)) + [(AddApiAnn AnnHiding d1)] + []) + noCom) l0) [v1,v2] + imp1' = imp1 { ideclHiding = Just (True,impHiding)} + p' = p { hsmodImports = [L li imp1',imp2]} + return (L l p') + + let (lp',(_ans',_),_w) = runTransform mempty doTransform + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + +-- --------------------------------------------------------------------- + +addHiding2 :: Changer +addHiding2 _libdir ans (L l p) = do + let doTransform = do + l1 <- uniqueSrcSpanT + l2 <- uniqueSrcSpanT + let + [L li imp1] = hsmodImports p + Just (_,L lh ns) = ideclHiding imp1 + lh' = (SrcSpanAnn (ApiAnn (Anchor (realSrcSpan (locA lh)) m0) + (AnnList Nothing + (Just (AddApiAnn AnnOpenP d1)) + (Just (AddApiAnn AnnCloseP d0)) + [(AddApiAnn AnnHiding d1)] + []) + noCom) (locA lh)) + n1 = L (noAnnSrcSpanDP0 l1) (mkVarUnqual (mkFastString "n1")) + n2 = L (noAnnSrcSpanDP0 l2) (mkVarUnqual (mkFastString "n2")) + v1 = L (addComma $ noAnnSrcSpanDP0 l1) (IEVar noExtField (L (noAnnSrcSpanDP0 l1) (IEName n1))) + v2 = L ( noAnnSrcSpanDP0 l2) (IEVar noExtField (L (noAnnSrcSpanDP0 l2) (IEName n2))) + L ln n = last ns + n' = L (addComma ln) n + imp1' = imp1 { ideclHiding = Just (True,L lh' (init ns ++ [n',v1,v2]))} + p' = p { hsmodImports = [L li imp1']} + return (L l p') + + let (lp',(_ans',_),_w) = runTransform mempty doTransform + debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" + return (ans,lp') + + +-- --------------------------------------------------------------------- +-- From SYB + +-- | Apply transformation on each level of a tree. +-- +-- Just like 'everything', this is stolen from SYB package. +everywhere :: (forall a. Data a => a -> a) -> (forall a. Data a => a -> a) +everywhere f = f . gmapT (everywhere f) + +-- | Create generic transformation. +-- +-- Another function stolen from SYB package. +mkT :: (Typeable a, Typeable b) => (b -> b) -> (a -> a) +mkT f = case cast f of + Just f' -> f' + Nothing -> id + +-- --------------------------------------------------------------------- diff --git a/utils/check-exact/Test.hs b/utils/check-exact/Test.hs deleted file mode 100644 index 57c09cc737..0000000000 --- a/utils/check-exact/Test.hs +++ /dev/null @@ -1,840 +0,0 @@ -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE StandaloneDeriving #-} -{-# LANGUAGE DeriveDataTypeable #-} -{-# OPTIONS_GHC -Wno-incomplete-uni-patterns #-} -{-# OPTIONS_GHC -Wno-incomplete-patterns #-} -{-# OPTIONS_GHC -Wno-orphans #-} - -import Data.List -import Data.Data -import GHC.Types.Name.Occurrence -import GHC.Types.Name.Reader -import GHC hiding (moduleName) -import GHC.Driver.Ppr -import GHC.Driver.Session -import GHC.Hs.Dump -import GHC.Data.Bag -import System.Environment( getArgs ) -import System.Exit -import System.FilePath - -import Types -import Utils -import ExactPrint -import Transform -import Parsers - -import GHC.Parser.Lexer -import GHC.Data.FastString -import GHC.Types.SrcLoc - --- --------------------------------------------------------------------- - -_tt :: IO () --- _tt = testOneFile changers "/home/alanz/mysrc/git.haskell.org/ghc/_build/stage1/lib" -_tt = testOneFile changers "/home/alanz/mysrc/git.haskell.org/worktree/exactprint/_build/stage1/lib" --- _tt = testOneFile changers "/home/alanz/mysrc/git.haskell.org/worktree/epw/_build/stage1/lib" - "cases/RenameCase1.hs" changeRenameCase1 - -- "cases/LayoutLet2.hs" changeLayoutLet2 - -- "cases/LayoutLet3.hs" changeLayoutLet3 - -- "cases/LayoutLet4.hs" changeLayoutLet3 - -- "cases/Rename1.hs" changeRename1 - -- "cases/Rename2.hs" changeRename2 - -- "cases/LayoutIn1.hs" changeLayoutIn1 - -- "cases/LayoutIn3.hs" changeLayoutIn3 - -- "cases/LayoutIn3a.hs" changeLayoutIn3 - -- "cases/LayoutIn3b.hs" changeLayoutIn3 - -- "cases/LayoutIn4.hs" changeLayoutIn4 - -- "cases/LocToName.hs" changeLocToName - -- "cases/LetIn1.hs" changeLetIn1 - -- "cases/WhereIn4.hs" changeWhereIn4 - -- "cases/AddDecl1.hs" changeAddDecl1 - -- "cases/AddDecl2.hs" changeAddDecl2 - -- "cases/AddDecl3.hs" changeAddDecl3 - -- "cases/LocalDecls.hs" changeLocalDecls - -- "cases/LocalDecls2.hs" changeLocalDecls2 - -- "cases/WhereIn3a.hs" changeWhereIn3a - -- "cases/WhereIn3b.hs" changeWhereIn3b - -- "cases/AddLocalDecl1.hs" addLocaLDecl1 - -- "cases/AddLocalDecl2.hs" addLocaLDecl2 - -- "cases/AddLocalDecl3.hs" addLocaLDecl3 - -- "cases/AddLocalDecl4.hs" addLocaLDecl4 - -- "cases/AddLocalDecl5.hs" addLocaLDecl5 - -- "cases/AddLocalDecl6.hs" addLocaLDecl6 - -- "cases/RmDecl1.hs" rmDecl1 - -- "cases/RmDecl2.hs" rmDecl2 - -- "cases/RmDecl3.hs" rmDecl3 - -- "cases/RmDecl4.hs" rmDecl4 - -- "cases/RmDecl5.hs" rmDecl5 - -- "cases/RmDecl6.hs" rmDecl6 - -- "cases/RmDecl7.hs" rmDecl7 - -- "cases/RmTypeSig1.hs" rmTypeSig1 - -- "cases/RmTypeSig2.hs" rmTypeSig2 - -- "cases/AddHiding1.hs" addHiding1 - -- "cases/AddHiding2.hs" addHiding2 - --- cloneT does not need a test, function can be retired - - --- exact = ppr - -changers :: [(String, Changer)] -changers = - [("noChange", noChange) - ,("changeRenameCase1", changeRenameCase1) - ,("changeLayoutLet2", changeLayoutLet2) - ,("changeLayoutLet3", changeLayoutLet3) - ,("changeLayoutIn1", changeLayoutIn1) - ,("changeLayoutIn3", changeLayoutIn3) - ,("changeLayoutIn4", changeLayoutIn4) - ,("changeLocToName", changeLocToName) - ,("changeRename1", changeRename1) - ,("changeRename2", changeRename2) - ,("changeWhereIn4", changeWhereIn4) - ,("changeLetIn1", changeLetIn1) - ,("changeAddDecl1", changeAddDecl1) - ,("changeAddDecl2", changeAddDecl2) - ,("changeAddDecl3", changeAddDecl3) - ,("changeLocalDecls", changeLocalDecls) - ,("changeLocalDecls2", changeLocalDecls2) - ,("changeWhereIn3a", changeWhereIn3a) - ,("changeWhereIn3b", changeWhereIn3b) - ,("addLocaLDecl1", addLocaLDecl1) - ,("addLocaLDecl2", addLocaLDecl2) - ,("addLocaLDecl3", addLocaLDecl3) - ,("addLocaLDecl4", addLocaLDecl4) - ,("addLocaLDecl5", addLocaLDecl5) - ,("addLocaLDecl6", addLocaLDecl6) - ,("rmDecl1", rmDecl1) - ,("rmDecl2", rmDecl2) - ,("rmDecl3", rmDecl3) - ,("rmDecl4", rmDecl4) - ,("rmDecl5", rmDecl5) - ,("rmDecl6", rmDecl6) - ,("rmDecl7", rmDecl7) - ,("rmTypeSig1", rmTypeSig1) - ,("rmTypeSig2", rmTypeSig2) - ,("addHiding1", addHiding1) - ,("addHiding2", addHiding2) - ,("addHiding2", addHiding2) - ] - --- --------------------------------------------------------------------- - -usage :: String -usage = unlines - [ "usage: check-ppr (libdir) (file)" - , "" - , "where libdir is the GHC library directory (e.g. the output of" - , "ghc --print-libdir) and file is the file to parse." - ] - -main :: IO() -main = do - args <- getArgs - case args of - [libdir,fileName] -> testOneFile changers libdir fileName noChange - _ -> putStrLn usage - -deriving instance Data Token -deriving instance Data PsSpan -deriving instance Data BufSpan -deriving instance Data BufPos - -testOneFile :: [(String, Changer)] -> FilePath -> String -> Changer -> IO () -testOneFile _ libdir fileName changer = do - (p,_toks) <- parseOneFile libdir fileName - -- putStrLn $ "\n\ngot p" ++ showAst (take 4 $ reverse toks) - let - origAst = ppAst (pm_parsed_source p) - anns' = pm_annotations p - -- pped = pragmas ++ "\n" ++ (exactPrint $ pm_parsed_source p) - pped = exactPrint (pm_parsed_source p) anns' - -- pragmas = getPragmas anns' - - newFile = dropExtension fileName <.> "ppr" <.> takeExtension fileName - newFileChanged = dropExtension fileName <.> "changed" <.> takeExtension fileName - newFileExpected = dropExtension fileName <.> "expected" <.> takeExtension fileName - astFile = fileName <.> "ast" - newAstFile = fileName <.> "ast.new" - changedAstFile = fileName <.> "ast.changed" - - -- pped' <- exactprintWithChange changeRenameCase1 (pm_parsed_source p) anns' - (pped', ast') <- exactprintWithChange libdir changer (pm_parsed_source p) anns' - -- putStrLn $ "\n\nabout to writeFile" - writeFile changedAstFile (ppAst ast') - writeFile astFile origAst - -- putStrLn $ "\n\nabout to pp" - writeFile newFile pped - writeFile newFileChanged pped' - - -- putStrLn $ "anns':" ++ showPprUnsafe (apiAnnRogueComments anns') - - (p',_) <- parseOneFile libdir newFile - - let newAstStr :: String - newAstStr = ppAst (pm_parsed_source p') - writeFile newAstFile newAstStr - expectedSource <- readFile newFileExpected - changedSource <- readFile newFileChanged - - -- putStrLn $ "\n\nanns':" ++ showPprUnsafe (apiAnnRogueComments anns') - - let - origAstOk = origAst == newAstStr - changedSourceOk = expectedSource == changedSource - if origAstOk && changedSourceOk - then do - -- putStrLn "ASTs matched" - exitSuccess - else if not origAstOk - then do - putStrLn "AST Match Failed" - -- putStrLn "\n===================================\nOrig\n\n" - -- putStrLn origAst - putStrLn "\n===================================\nNew\n\n" - putStrLn newAstStr - exitFailure - else do - putStrLn "Changed AST Source Mismatch" - putStrLn "\n===================================\nExpected\n\n" - putStrLn expectedSource - putStrLn "\n===================================\nChanged\n\n" - putStrLn changedSource - putStrLn "\n===================================\n" - putStrLn $ show changedSourceOk - exitFailure - -ppAst :: Data a => a -> String -ppAst ast = showSDocUnsafe $ showAstData BlankSrcSpanFile NoBlankApiAnnotations ast - -parseOneFile :: FilePath -> FilePath -> IO (ParsedModule, [Located Token]) -parseOneFile libdir fileName = do - let modByFile m = - case ml_hs_file $ ms_location m of - Nothing -> False - Just fn -> fn == fileName - runGhc (Just libdir) $ do - dflags <- getSessionDynFlags - let dflags2 = dflags `gopt_set` Opt_KeepRawTokenStream - _ <- setSessionDynFlags dflags2 - addTarget Target { targetId = TargetFile fileName Nothing - , targetAllowObjCode = True - , targetContents = Nothing } - _ <- load LoadAllTargets - graph <- getModuleGraph - let - modSum = case filter modByFile (mgModSummaries graph) of - [x] -> x - xs -> error $ "Can't find module, got:" - ++ show (map (ml_hs_file . ms_location) xs) - pm <- GHC.parseModule modSum - toks <- getTokenStream (ms_mod modSum) - return (pm, toks) - - -- getTokenStream :: GhcMonad m => Module -> m [Located Token] - --- getPragmas :: ApiAnns -> String --- getPragmas anns' = pragmaStr --- where --- tokComment (L _ (AnnBlockComment s)) = s --- tokComment (L _ (AnnLineComment s)) = s --- tokComment _ = "" - --- comments' = map tokComment $ sortRealLocated $ apiAnnRogueComments anns' --- pragmas = filter (\c -> isPrefixOf "{-#" c ) comments' --- pragmaStr = intercalate "\n" pragmas - --- pp :: (Outputable a) => a -> String --- pp a = showPpr unsafeGlobalDynFlags a - --- --------------------------------------------------------------------- - -exactprintWithChange :: FilePath -> Changer -> ParsedSource -> ApiAnns -> IO (String, ParsedSource) -exactprintWithChange libdir f p anns = do - debugM $ "exactprintWithChange:anns=" ++ showGhc (apiAnnRogueComments anns) - (anns',p') <- f libdir anns p - return (exactPrint p' anns', p') - - --- First param is libdir -type Changer = FilePath -> (ApiAnns -> ParsedSource -> IO (ApiAnns,ParsedSource)) - -noChange :: Changer -noChange _libdir ans parsed = return (ans,parsed) - -changeRenameCase1 :: Changer -changeRenameCase1 _libdir ans parsed = return (ans,rename "bazLonger" [((3,15),(3,18))] parsed) - -changeLayoutLet2 :: Changer -changeLayoutLet2 _libdir ans parsed = return (ans,rename "xxxlonger" [((7,5),(7,8)),((8,24),(8,27))] parsed) - -changeLayoutLet3 :: Changer -changeLayoutLet3 _libdir ans parsed = return (ans,rename "xxxlonger" [((7,5),(7,8)),((9,14),(9,17))] parsed) - -changeLayoutIn1 :: Changer -changeLayoutIn1 _libdir ans parsed = return (ans,rename "square" [((7,17),(7,19)),((7,24),(7,26))] parsed) - -changeLayoutIn3 :: Changer -changeLayoutIn3 _libdir ans parsed = return (ans,rename "anotherX" [((7,13),(7,14)),((7,37),(7,38)),((8,37),(8,38))] parsed) - -changeLayoutIn4 :: Changer -changeLayoutIn4 _libdir ans parsed = return (ans,rename "io" [((7,8),(7,13)),((7,28),(7,33))] parsed) - -changeLocToName :: Changer -changeLocToName _libdir ans parsed = return (ans,rename "LocToName.newPoint" [((20,1),(20,11)),((20,28),(20,38)),((24,1),(24,11))] parsed) - - -changeRename1 :: Changer -changeRename1 _libdir ans parsed = return (ans,rename "bar2" [((3,1),(3,4))] parsed) - -changeRename2 :: Changer -changeRename2 _libdir ans parsed = return (ans,rename "joe" [((2,1),(2,5))] parsed) - -rename :: (Data a) => String -> [(Pos, Pos)] -> a -> a -rename newNameStr spans' a - = everywhere (mkT replaceRdr) a - where - newName = mkRdrUnqual (mkVarOcc newNameStr) - - cond :: SrcSpan -> Bool - cond ln = ss2range ln `elem` spans' - - replaceRdr :: LocatedN RdrName -> LocatedN RdrName - replaceRdr (L ln _) - | cond (locA ln) = L ln newName - replaceRdr x = x - --- --------------------------------------------------------------------- - -changeWhereIn4 :: Changer -changeWhereIn4 _libdir ans parsed - = return (ans,everywhere (mkT replace) parsed) - where - replace :: LocatedN RdrName -> LocatedN RdrName - replace (L ln _n) - | ss2range (locA ln) == ((12,16),(12,17)) = L ln (mkRdrUnqual (mkVarOcc "p_2")) - replace x = x - --- --------------------------------------------------------------------- - -changeLetIn1 :: Changer -changeLetIn1 _libdir ans parsed - = return (ans,everywhere (mkT replace) parsed) - where - replace :: HsExpr GhcPs -> HsExpr GhcPs - replace (HsLet (ApiAnn anc (AnnsLet l _i) cs) localDecls expr) - = - let (HsValBinds x (ValBinds xv bagDecls sigs)) = localDecls - [l2,_l1] = map wrapDecl $ bagToList bagDecls - bagDecls' = listToBag $ concatMap decl2Bind [l2] - (L (SrcSpanAnn _ le) e) = expr - a = (SrcSpanAnn (ApiAnn (Anchor (realSrcSpan le) (MovedAnchor (DP 0 1))) mempty noCom) le) - expr' = L a e - in (HsLet (ApiAnn anc (AnnsLet l (AD (DP 1 0))) cs) (HsValBinds x (ValBinds xv bagDecls' sigs)) expr') - - replace x = x --- --------------------------------------------------------------------- - --- | Add a declaration to AddDecl -changeAddDecl1 :: Changer -changeAddDecl1 libdir ans top = do - Right (_, decl) <- withDynFlags libdir (\df -> parseDecl df "<interactive>" "nn = n2") - let decl' = setEntryDP' decl (DP 2 0) - - let (p',(_,_),_) = runTransform mempty doAddDecl - doAddDecl = everywhereM (mkM replaceTopLevelDecls) top - replaceTopLevelDecls :: ParsedSource -> Transform ParsedSource - replaceTopLevelDecls m = insertAtStart m decl' - return (ans,p') - --- --------------------------------------------------------------------- -changeAddDecl2 :: Changer -changeAddDecl2 libdir ans top = do - Right (_, decl) <- withDynFlags libdir (\df -> parseDecl df "<interactive>" "nn = n2") - let decl' = setEntryDP' decl (DP 2 0) - let top' = anchorEof top - - let (p',(_,_),_) = runTransform mempty doAddDecl - doAddDecl = everywhereM (mkM replaceTopLevelDecls) top' - replaceTopLevelDecls :: ParsedSource -> Transform ParsedSource - replaceTopLevelDecls m = insertAtEnd m decl' - return (ans,p') - --- --------------------------------------------------------------------- -changeAddDecl3 :: Changer -changeAddDecl3 libdir ans top = do - Right (_, decl) <- withDynFlags libdir (\df -> parseDecl df "<interactive>" "nn = n2") - let decl' = setEntryDP' decl (DP 2 0) - - let (p',(_,_),_) = runTransform mempty doAddDecl - doAddDecl = everywhereM (mkM replaceTopLevelDecls) top - f d (l1:l2:ls) = l1:d:l2':ls - where - l2' = setEntryDP' l2 (DP 2 0) - replaceTopLevelDecls :: ParsedSource -> Transform ParsedSource - replaceTopLevelDecls m = insertAt f m decl' - return (ans,p') - --- --------------------------------------------------------------------- - --- | Add a local declaration with signature to LocalDecl -changeLocalDecls :: Changer -changeLocalDecls libdir ans (L l p) = do - Right (_, s@(L ls (SigD _ sig))) <- withDynFlags libdir (\df -> parseDecl df "sig" "nn :: Int") - Right (_, d@(L ld (ValD _ decl))) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") - let decl' = setEntryDP' (L ld decl) (DP 1 0) - let sig' = setEntryDP' (L ls sig) (DP 0 0) - let (p',(_,_),_w) = runTransform mempty doAddLocal - doAddLocal = everywhereM (mkM replaceLocalBinds) p - replaceLocalBinds :: LMatch GhcPs (LHsExpr GhcPs) - -> Transform (LMatch GhcPs (LHsExpr GhcPs)) - replaceLocalBinds (L lm (Match an mln pats (GRHSs _ rhs (HsValBinds van (ValBinds _ binds sigs))))) = do - let oldDecls = sortLocatedA $ map wrapDecl (bagToList binds) ++ map wrapSig sigs - let decls = s:d:oldDecls - let oldDecls' = captureLineSpacing oldDecls - let oldBinds = concatMap decl2Bind oldDecls' - (os:oldSigs) = concatMap decl2Sig oldDecls' - os' = setEntryDP' os (DP 2 0) - let sortKey = captureOrder decls - let (ApiAnn anc (AnnList (Just (Anchor anc2 _)) a b c dd) cs) = van - let van' = (ApiAnn anc (AnnList (Just (Anchor anc2 (MovedAnchor (DP 1 4)))) a b c dd) cs) - let binds' = (HsValBinds van' - (ValBinds sortKey (listToBag $ decl':oldBinds) - (sig':os':oldSigs))) - return (L lm (Match an mln pats (GRHSs noExtField rhs binds'))) - replaceLocalBinds x = return x - return (ans,L l p') - --- --------------------------------------------------------------------- - --- | Add a local declaration with signature to LocalDecl, where there was no --- prior local decl. So it adds a "where" annotation. -changeLocalDecls2 :: Changer -changeLocalDecls2 libdir ans (L l p) = do - Right (_, d@(L ld (ValD _ decl))) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") - Right (_, s@(L ls (SigD _ sig))) <- withDynFlags libdir (\df -> parseDecl df "sig" "nn :: Int") - let decl' = setEntryDP' (L ld decl) (DP 1 0) - let sig' = setEntryDP' (L ls sig) (DP 0 2) - let (p',(_,_),_w) = runTransform mempty doAddLocal - doAddLocal = everywhereM (mkM replaceLocalBinds) p - replaceLocalBinds :: LMatch GhcPs (LHsExpr GhcPs) - -> Transform (LMatch GhcPs (LHsExpr GhcPs)) - replaceLocalBinds (L lm (Match ma mln pats (GRHSs _ rhs EmptyLocalBinds{}))) = do - newSpan <- uniqueSrcSpanT - let anc = (Anchor (rs newSpan) (MovedAnchor (DP 1 2))) - let anc2 = (Anchor (rs newSpan) (MovedAnchor (DP 1 4))) - let an = ApiAnn anc - (AnnList (Just anc2) Nothing Nothing - [(undeltaSpan (rs newSpan) AnnWhere (DP 0 0))] []) - noCom - let decls = [s,d] - let sortKey = captureOrder decls - let binds = (HsValBinds an (ValBinds sortKey (listToBag $ [decl']) - [sig'])) - return (L lm (Match ma mln pats (GRHSs noExtField rhs binds))) - replaceLocalBinds x = return x - return (ans,L l p') - --- --------------------------------------------------------------------- - --- | Check that balanceCommentsList is idempotent -changeWhereIn3a :: Changer -changeWhereIn3a _libdir ans (L l p) = do - let decls0 = hsmodDecls p - (decls,(_,_),w) = runTransform mempty (balanceCommentsList decls0) - (_de0:_:de1:_d2:_) = decls - debugM $ unlines w - debugM $ "changeWhereIn3a:de1:" ++ showAst de1 - let p2 = p { hsmodDecls = decls} - return (ans,L l p2) - --- --------------------------------------------------------------------- - -changeWhereIn3b :: Changer -changeWhereIn3b _libdir ans (L l p) = do - let decls0 = hsmodDecls p - (decls,(_,_),w) = runTransform mempty (balanceCommentsList decls0) - (de0:_:de1:d2:_) = decls - de0' = setEntryDP' de0 (DP 2 0) - de1' = setEntryDP' de1 (DP 2 0) - d2' = setEntryDP' d2 (DP 2 0) - decls' = d2':de1':de0':(tail decls) - debugM $ unlines w - debugM $ "changeWhereIn3b:de1':" ++ showAst de1' - let p2 = p { hsmodDecls = decls'} - return (ans,L l p2) - --- --------------------------------------------------------------------- - -addLocaLDecl1 :: Changer -addLocaLDecl1 libdir ans lp = do - Right (_, (L ld (ValD _ decl))) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") - let decl' = setEntryDP' (L ld decl) (DP 1 4) - doAddLocal = do - (de1:d2:d3:_) <- hsDecls lp - (de1'',d2') <- balanceComments de1 d2 - (de1',_) <- modifyValD (getLocA de1'') de1'' $ \_m d -> do - return ((wrapDecl decl' : d),Nothing) - replaceDecls lp [de1', d2', d3] - - (lp',(_,_),w) <- runTransformT mempty doAddLocal - debugM $ "addLocaLDecl1:" ++ intercalate "\n" w - return (ans,lp') - --- --------------------------------------------------------------------- - -addLocaLDecl2 :: Changer -addLocaLDecl2 libdir ans lp = do - Right (_, newDecl) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") - let - doAddLocal = do - (de1:d2:_) <- hsDecls lp - (de1'',d2') <- balanceComments de1 d2 - - (parent',_) <- modifyValD (getLocA de1) de1'' $ \_m (d:ds) -> do - newDecl' <- transferEntryDP' d newDecl - let d' = setEntryDP' d (DP 1 0) - return ((newDecl':d':ds),Nothing) - - replaceDecls lp [parent',d2'] - - (lp',(_,_),_w) <- runTransformT mempty doAddLocal - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -addLocaLDecl3 :: Changer -addLocaLDecl3 libdir ans lp = do - Right (_, newDecl) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") - -- Right (_, newDecl@(L ld (ValD _ decl))) <- withDynFlags libdir (\df -> parseDecl df "decl" "jj = 2") - let - doAddLocal = do - (de1:d2:_) <- hsDecls lp - (de1'',d2') <- balanceComments de1 d2 - - (parent',_) <- modifyValD (getLocA de1) de1'' $ \_m (d:ds) -> do - let newDecl' = setEntryDP' newDecl (DP 1 0) - return (((d:ds) ++ [newDecl']),Nothing) - - replaceDecls (anchorEof lp) [parent',d2'] - - (lp',(_,_),_w) <- runTransformT mempty doAddLocal - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -addLocaLDecl4 :: Changer -addLocaLDecl4 libdir ans lp = do - Right (_, newDecl) <- withDynFlags libdir (\df -> parseDecl df "decl" "nn = 2") - Right (_, newSig) <- withDynFlags libdir (\df -> parseDecl df "sig" "nn :: Int") - -- putStrLn $ "addLocaLDecl4:lp=" ++ showGhc lp - let - doAddLocal = do - (parent:ds) <- hsDecls lp - - let newDecl' = setEntryDP' newDecl (DP 1 0) - let newSig' = setEntryDP' newSig (DP 1 4) - - (parent',_) <- modifyValD (getLocA parent) parent $ \_m decls -> do - return ((decls++[newSig',newDecl']),Nothing) - - replaceDecls (anchorEof lp) (parent':ds) - - (lp',(_,_),_w) <- runTransformT mempty doAddLocal - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - - --- --------------------------------------------------------------------- - -addLocaLDecl5 :: Changer -addLocaLDecl5 _libdir ans lp = do - let - doAddLocal = do - decls <- hsDecls lp - [s1,de1,d2,d3] <- balanceCommentsList decls - - let d3' = setEntryDP' d3 (DP 2 0) - - (de1',_) <- modifyValD (getLocA de1) de1 $ \_m _decls -> do - let d2' = setEntryDP' d2 (DP 1 0) - return ([d2'],Nothing) - replaceDecls lp [s1,de1',d3'] - - (lp',(_,_),_w) <- runTransformT mempty doAddLocal - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -addLocaLDecl6 :: Changer -addLocaLDecl6 libdir ans lp = do - Right (_, newDecl) <- withDynFlags libdir (\df -> parseDecl df "decl" "x = 3") - let - newDecl' = setEntryDP' newDecl (DP 1 4) - doAddLocal = do - decls0 <- hsDecls lp - [de1'',d2] <- balanceCommentsList decls0 - - let de1 = captureMatchLineSpacing de1'' - let L _ (ValD _ (FunBind _ _ (MG _ (L _ ms) _) _)) = de1 - let [ma1,_ma2] = ms - - (de1',_) <- modifyValD (getLocA ma1) de1 $ \_m decls -> do - return ((newDecl' : decls),Nothing) - replaceDecls lp [de1', d2] - - (lp',(_,_),_w) <- runTransformT mempty doAddLocal - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -rmDecl1 :: Changer -rmDecl1 _libdir ans lp = do - let doRmDecl = do - tlDecs0 <- hsDecls lp - tlDecs <- balanceCommentsList $ captureLineSpacing tlDecs0 - let (de1:_s1:_d2:ds) = tlDecs - - replaceDecls lp (de1:ds) - - (lp',(_,_),_w) <- runTransformT mempty doRmDecl - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -rmDecl2 :: Changer -rmDecl2 _libdir ans lp = do - let - doRmDecl = do - let - go :: GHC.LHsExpr GhcPs -> Transform (GHC.LHsExpr GhcPs) - go e@(GHC.L _ (GHC.HsLet{})) = do - decs0 <- hsDecls e - decs <- balanceCommentsList $ captureLineSpacing decs0 - e' <- replaceDecls e (init decs) - return e' - go x = return x - - everywhereM (mkM go) lp - - let (lp',(_,_),_w) = runTransform mempty doRmDecl - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -rmDecl3 :: Changer -rmDecl3 _libdir ans lp = do - let - doRmDecl = do - [de1,d2] <- hsDecls lp - - (de1',Just sd1) <- modifyValD (getLocA de1) de1 $ \_m [sd1] -> do - let sd1' = setEntryDP' sd1 (DP 2 0) - return ([],Just sd1') - - replaceDecls lp [de1',sd1,d2] - - (lp',(_,_),_w) <- runTransformT mempty doRmDecl - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -rmDecl4 :: Changer -rmDecl4 _libdir ans lp = do - let - doRmDecl = do - [de1] <- hsDecls lp - - (de1',Just sd1) <- modifyValD (getLocA de1) de1 $ \_m [sd1,sd2] -> do - sd2' <- transferEntryDP' sd1 sd2 - - let sd1' = setEntryDP' sd1 (DP 2 0) - return ([sd2'],Just sd1') - - replaceDecls (anchorEof lp) [de1',sd1] - - (lp',(_,_),_w) <- runTransformT mempty doRmDecl - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -rmDecl5 :: Changer -rmDecl5 _libdir ans lp = do - let - doRmDecl = do - let - go :: HsExpr GhcPs -> Transform (HsExpr GhcPs) - go (HsLet a lb expr) = do - decs <- hsDeclsValBinds lb - let dec = last decs - _ <- transferEntryDPT (head decs) dec - lb' <- replaceDeclsValbinds WithoutWhere lb [dec] - return (HsLet a lb' expr) - go x = return x - - everywhereM (mkM go) lp - - let (lp',(_,_),_w) = runTransform mempty doRmDecl - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -rmDecl6 :: Changer -rmDecl6 _libdir ans lp = do - let - doRmDecl = do - [de1] <- hsDecls lp - - (de1',_) <- modifyValD (getLocA de1) de1 $ \_m subDecs -> do - let (ss1:_sd1:sd2:sds) = subDecs - sd2' <- transferEntryDP' ss1 sd2 - - return (sd2':sds,Nothing) - - replaceDecls lp [de1'] - - (lp',(_,_),_w) <- runTransformT mempty doRmDecl - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -rmDecl7 :: Changer -rmDecl7 _libdir ans lp = do - let - doRmDecl = do - tlDecs <- hsDecls lp - [s1,de1,d2,d3] <- balanceCommentsList tlDecs - - d3' <- transferEntryDP' d2 d3 - - replaceDecls lp [s1,de1,d3'] - - (lp',(_,_),_w) <- runTransformT mempty doRmDecl - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -rmTypeSig1 :: Changer -rmTypeSig1 _libdir ans lp = do - let doRmDecl = do - tlDecs <- hsDecls lp - let (s0:de1:d2) = tlDecs - s1 = captureTypeSigSpacing s0 - (L l (SigD x1 (TypeSig x2 [n1,n2] typ))) = s1 - n2' <- transferEntryDP n1 n2 - let s1' = (L l (SigD x1 (TypeSig x2 [n2'] typ))) - replaceDecls lp (s1':de1:d2) - - let (lp',(_,_),_w) = runTransform mempty doRmDecl - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -rmTypeSig2 :: Changer -rmTypeSig2 _libdir ans lp = do - let doRmDecl = do - tlDecs <- hsDecls lp - let [de1] = tlDecs - - (de1',_) <- modifyValD (getLocA de1) de1 $ \_m [s,d] -> do - d' <- transferEntryDPT s d - return ([d'],Nothing) - replaceDecls lp [de1'] - - let (lp',(_,_),_w) = runTransform mempty doRmDecl - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -addHiding1 :: Changer -addHiding1 _libdir ans (L l p) = do - let doTransform = do - l0 <- uniqueSrcSpanT - l1 <- uniqueSrcSpanT - l2 <- uniqueSrcSpanT - let - [L li imp1,imp2] = hsmodImports p - n1 = L (noAnnSrcSpanDP0 l1) (mkVarUnqual (mkFastString "n1")) - n2 = L (noAnnSrcSpanDP0 l2) (mkVarUnqual (mkFastString "n2")) - v1 = L (addComma $ noAnnSrcSpanDP0 l1) (IEVar noExtField (L (noAnnSrcSpanDP0 l1) (IEName n1))) - v2 = L ( noAnnSrcSpanDP0 l2) (IEVar noExtField (L (noAnnSrcSpanDP0 l2) (IEName n2))) - impHiding = L (SrcSpanAnn (ApiAnn (Anchor (realSrcSpan l0) m0) - (AnnList Nothing - (Just (AddApiAnn AnnOpenP d1)) - (Just (AddApiAnn AnnCloseP d0)) - [(AddApiAnn AnnHiding d1)] - []) - noCom) l0) [v1,v2] - imp1' = imp1 { ideclHiding = Just (True,impHiding)} - p' = p { hsmodImports = [L li imp1',imp2]} - return (L l p') - - let (lp',(_ans',_),_w) = runTransform mempty doTransform - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - --- --------------------------------------------------------------------- - -addHiding2 :: Changer -addHiding2 _libdir ans (L l p) = do - let doTransform = do - l1 <- uniqueSrcSpanT - l2 <- uniqueSrcSpanT - let - [L li imp1] = hsmodImports p - Just (_,L lh ns) = ideclHiding imp1 - lh' = (SrcSpanAnn (ApiAnn (Anchor (realSrcSpan (locA lh)) m0) - (AnnList Nothing - (Just (AddApiAnn AnnOpenP d1)) - (Just (AddApiAnn AnnCloseP d0)) - [(AddApiAnn AnnHiding d1)] - []) - noCom) (locA lh)) - n1 = L (noAnnSrcSpanDP0 l1) (mkVarUnqual (mkFastString "n1")) - n2 = L (noAnnSrcSpanDP0 l2) (mkVarUnqual (mkFastString "n2")) - v1 = L (addComma $ noAnnSrcSpanDP0 l1) (IEVar noExtField (L (noAnnSrcSpanDP0 l1) (IEName n1))) - v2 = L ( noAnnSrcSpanDP0 l2) (IEVar noExtField (L (noAnnSrcSpanDP0 l2) (IEName n2))) - L ln n = last ns - n' = L (addComma ln) n - imp1' = imp1 { ideclHiding = Just (True,L lh' (init ns ++ [n',v1,v2]))} - p' = p { hsmodImports = [L li imp1']} - return (L l p') - - let (lp',(_ans',_),_w) = runTransform mempty doTransform - debugM $ "log:[\n" ++ intercalate "\n" _w ++ "]log end\n" - return (ans,lp') - - --- --------------------------------------------------------------------- --- From SYB - --- | Apply transformation on each level of a tree. --- --- Just like 'everything', this is stolen from SYB package. -everywhere :: (forall a. Data a => a -> a) -> (forall a. Data a => a -> a) -everywhere f = f . gmapT (everywhere f) - --- | Create generic transformation. --- --- Another function stolen from SYB package. -mkT :: (Typeable a, Typeable b) => (b -> b) -> (a -> a) -mkT f = case cast f of - Just f' -> f' - Nothing -> id - --- --------------------------------------------------------------------- |