summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGHC GitLab CI <ghc-ci@gitlab-haskell.org>2021-03-21 22:58:14 +0000
committerGHC GitLab CI <ghc-ci@gitlab-haskell.org>2021-03-23 08:35:26 +0000
commit297589979dbbacee1f697768bd460cc12d1ef642 (patch)
tree91b06859c7ee5f83a326c1d794152bbfffffae36
parent6e437a121a87e3aea2ed0ecc34bc470b1341668f (diff)
downloadhaskell-wip/az/exactprint-tests.tar.gz
EPA: Run exactprint transformation tests as part of CIwip/az/exactprint-tests
EPA == exact print annotations. When !2418 landed, it did not run the tests brought over from ghc-exactprint for making sure the AST prints correctly efter being edited. This enables those tests.
-rw-r--r--testsuite/tests/ghc-api/exactprint/.gitignore4
-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/Makefile160
-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.T38
-rw-r--r--testsuite/tests/printer/Makefile434
-rw-r--r--testsuite/tests/printer/all.T2
-rw-r--r--utils/check-exact/Main.hs1022
-rw-r--r--utils/check-exact/Test.hs840
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
-
--- ---------------------------------------------------------------------