summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Zimmerman <alan.zimm@gmail.com>2017-02-08 13:20:02 +0200
committerAlan Zimmerman <alan.zimm@gmail.com>2017-02-08 20:47:51 +0200
commit7e4e6a7309b2eb74933f95f18d83e74dbf166a7e (patch)
tree433383bc2ec7302f68c1d1c4eb1ebad7954aaa83
parenta94b484715d3caf445a7069377d5311e0e50f66e (diff)
downloadhaskell-7e4e6a7309b2eb74933f95f18d83e74dbf166a7e.tar.gz
Add dump flags for the renamed and typechecked hsSyn ASTs
Summary: D2958 brought in the "dump-parsed-ast" functionality. Extend it to include "dump-rn-ast" and "dump-tc-ast" Test Plan: ./validate Reviewers: austin, bgamari Reviewed By: bgamari Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D3107
-rw-r--r--compiler/main/DynFlags.hs6
-rw-r--r--compiler/typecheck/TcRnDriver.hs18
-rw-r--r--docs/users_guide/debugging.rst8
-rw-r--r--testsuite/tests/parser/should_compile/DumpParsedAst.hs4
-rw-r--r--testsuite/tests/parser/should_compile/DumpParsedAst.stderr175
-rw-r--r--testsuite/tests/parser/should_compile/DumpRenamedAst.hs11
-rw-r--r--testsuite/tests/parser/should_compile/DumpRenamedAst.stderr190
-rw-r--r--testsuite/tests/parser/should_compile/DumpTypecheckedAst.hs11
-rw-r--r--testsuite/tests/parser/should_compile/DumpTypecheckedAst.stderr195
-rw-r--r--testsuite/tests/parser/should_compile/all.T4
10 files changed, 478 insertions, 144 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index ef8ac960aa..e04d40807f 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -343,6 +343,7 @@ data DumpFlag
| Opt_D_dump_parsed
| Opt_D_dump_parsed_ast
| Opt_D_dump_rn
+ | Opt_D_dump_rn_ast
| Opt_D_dump_shape
| Opt_D_dump_simpl
| Opt_D_dump_simpl_iterations
@@ -353,6 +354,7 @@ data DumpFlag
| Opt_D_dump_stranal
| Opt_D_dump_str_signatures
| Opt_D_dump_tc
+ | Opt_D_dump_tc_ast
| Opt_D_dump_types
| Opt_D_dump_rules
| Opt_D_dump_cse
@@ -2905,6 +2907,8 @@ dynamic_flags_deps = [
(setDumpFlag Opt_D_dump_parsed_ast)
, make_ord_flag defGhcFlag "ddump-rn"
(setDumpFlag Opt_D_dump_rn)
+ , make_ord_flag defGhcFlag "ddump-rn-ast"
+ (setDumpFlag Opt_D_dump_rn_ast)
, make_ord_flag defGhcFlag "ddump-simpl"
(setDumpFlag Opt_D_dump_simpl)
, make_ord_flag defGhcFlag "ddump-simpl-iterations"
@@ -2923,6 +2927,8 @@ dynamic_flags_deps = [
(setDumpFlag Opt_D_dump_str_signatures)
, make_ord_flag defGhcFlag "ddump-tc"
(setDumpFlag Opt_D_dump_tc)
+ , make_ord_flag defGhcFlag "ddump-tc-ast"
+ (setDumpFlag Opt_D_dump_tc_ast)
, make_ord_flag defGhcFlag "ddump-types"
(setDumpFlag Opt_D_dump_types)
, make_ord_flag defGhcFlag "ddump-rules"
diff --git a/compiler/typecheck/TcRnDriver.hs b/compiler/typecheck/TcRnDriver.hs
index 573422a8af..9bb1bf8705 100644
--- a/compiler/typecheck/TcRnDriver.hs
+++ b/compiler/typecheck/TcRnDriver.hs
@@ -123,6 +123,8 @@ import Util
import Bag
import Inst (tcGetInsts)
import qualified GHC.LanguageExtensions as LangExt
+import HsDumpAst
+import Data.Data ( Data )
import Control.Monad
@@ -1237,7 +1239,7 @@ rnTopSrcDecls group
= tcg_env };
-- Dump trace of renaming part
- rnDump (ppr rn_decls) ;
+ rnDump rn_decls ;
return (tcg_env', rn_decls)
}
@@ -1963,7 +1965,7 @@ tcUserStmt rdr_stmt@(L loc _)
return (fix_env, emptyFVs)
-- Don't try to typecheck if the renamer fails!
; traceRn "tcRnStmt" (vcat [ppr rdr_stmt, ppr rn_stmt, ppr fvs])
- ; rnDump (ppr rn_stmt) ;
+ ; rnDump rn_stmt ;
; ghciStep <- getGhciStepIO
; let gi_stmt
@@ -2417,9 +2419,11 @@ loadUnqualIfaces hsc_env ictxt
************************************************************************
-}
-rnDump :: SDoc -> TcRn ()
+rnDump :: (Outputable a, Data a) => a -> TcRn ()
-- Dump, with a banner, if -ddump-rn
-rnDump doc = do { traceOptTcRn Opt_D_dump_rn (mkDumpDoc "Renamer" doc) }
+rnDump rn = do { traceOptTcRn Opt_D_dump_rn (mkDumpDoc "Renamer" (ppr rn))
+ ; traceOptTcRn Opt_D_dump_rn_ast
+ (mkDumpDoc "Renamer" (text (showAstData NoBlankSrcSpan rn))) }
tcDump :: TcGblEnv -> TcRn ()
tcDump env
@@ -2430,13 +2434,17 @@ tcDump env
(printForUserTcRn short_dump) ;
-- Dump bindings if -ddump-tc
- traceOptTcRn Opt_D_dump_tc (mkDumpDoc "Typechecker" full_dump)
+ traceOptTcRn Opt_D_dump_tc (mkDumpDoc "Typechecker" full_dump);
+
+ -- Dump bindings as an hsSyn AST if -ddump-tc-ast
+ traceOptTcRn Opt_D_dump_tc_ast (mkDumpDoc "Typechecker" ast_dump)
}
where
short_dump = pprTcGblEnv env
full_dump = pprLHsBinds (tcg_binds env)
-- NB: foreign x-d's have undefined's in their types;
-- hence can't show the tc_fords
+ ast_dump = text (showAstData NoBlankSrcSpan (tcg_binds env))
-- It's unpleasant having both pprModGuts and pprModDetails here
pprTcGblEnv :: TcGblEnv -> SDoc
diff --git a/docs/users_guide/debugging.rst b/docs/users_guide/debugging.rst
index 3dda67bee5..fc634d0d47 100644
--- a/docs/users_guide/debugging.rst
+++ b/docs/users_guide/debugging.rst
@@ -46,10 +46,18 @@ Dumping out compiler intermediate structures
Dump renamer output
+ .. ghc-flag:: -ddump-rn-ast
+
+ Dump renamer output as a syntax tree
+
.. ghc-flag:: -ddump-tc
Dump typechecker output
+ .. ghc-flag:: -ddump-tc-ast
+
+ Dump typechecker output as a syntax tree
+
.. ghc-flag:: -ddump-splices
Dump Template Haskell expressions that we splice in, and what
diff --git a/testsuite/tests/parser/should_compile/DumpParsedAst.hs b/testsuite/tests/parser/should_compile/DumpParsedAst.hs
index a0d65ad8d6..0f83b12f65 100644
--- a/testsuite/tests/parser/should_compile/DumpParsedAst.hs
+++ b/testsuite/tests/parser/should_compile/DumpParsedAst.hs
@@ -8,6 +8,4 @@ type family Length (as :: [k]) :: Peano where
Length (a : as) = Succ (Length as)
Length '[] = Zero
-type family Length' (as :: [k]) :: Peano where
- Length' ((:) a as) = Succ (Length' as)
- Length' '[] = Zero
+main = putStrLn "hello"
diff --git a/testsuite/tests/parser/should_compile/DumpParsedAst.stderr b/testsuite/tests/parser/should_compile/DumpParsedAst.stderr
index 9c08b3e7bd..8d25d04b13 100644
--- a/testsuite/tests/parser/should_compile/DumpParsedAst.stderr
+++ b/testsuite/tests/parser/should_compile/DumpParsedAst.stderr
@@ -189,141 +189,46 @@
({ DumpParsedAst.hs:7:35-39 }
(Unqual {OccName: Peano}))))))]))))
(Nothing))))),
- ({ DumpParsedAst.hs:11:1-40 }
- (TyClD
- (FamDecl
- (FamilyDecl
- (ClosedTypeFamily
- (Just
- [
- ({ DumpParsedAst.hs:12:3-40 }
- (TyFamEqn
- ({ DumpParsedAst.hs:12:3-9 }
- (Unqual {OccName: Length'}))
- (HsIB
- (PlaceHolder)
- [
- ({ DumpParsedAst.hs:12:11-20 }
- (HsParTy
- ({ DumpParsedAst.hs:12:12-19 }
- (HsAppsTy
- [
- ({ DumpParsedAst.hs:12:12-14 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:12:12-14 }
- (HsTyVar
- (NotPromoted)
- ({ DumpParsedAst.hs:12:12-14 }
- (Exact {Name: ghc-prim:GHC.Types.:{(w) d 66}})))))),
- ({ DumpParsedAst.hs:12:16 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:12:16 }
- (HsTyVar
- (NotPromoted)
- ({ DumpParsedAst.hs:12:16 }
- (Unqual {OccName: a})))))),
- ({ DumpParsedAst.hs:12:18-19 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:12:18-19 }
- (HsTyVar
- (NotPromoted)
- ({ DumpParsedAst.hs:12:18-19 }
- (Unqual {OccName: as}))))))]))))])
- (Prefix)
- ({ DumpParsedAst.hs:12:24-40 }
- (HsAppsTy
- [
- ({ DumpParsedAst.hs:12:24-27 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:12:24-27 }
- (HsTyVar
- (NotPromoted)
- ({ DumpParsedAst.hs:12:24-27 }
- (Unqual {OccName: Succ})))))),
- ({ DumpParsedAst.hs:12:29-40 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:12:29-40 }
- (HsParTy
- ({ DumpParsedAst.hs:12:30-39 }
- (HsAppsTy
- [
- ({ DumpParsedAst.hs:12:30-36 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:12:30-36 }
- (HsTyVar
- (NotPromoted)
- ({ DumpParsedAst.hs:12:30-36 }
- (Unqual {OccName: Length'})))))),
- ({ DumpParsedAst.hs:12:38-39 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:12:38-39 }
- (HsTyVar
- (NotPromoted)
- ({ DumpParsedAst.hs:12:38-39 }
- (Unqual {OccName: as}))))))]))))))])))),
- ({ DumpParsedAst.hs:13:3-27 }
- (TyFamEqn
- ({ DumpParsedAst.hs:13:3-9 }
- (Unqual {OccName: Length'}))
- (HsIB
- (PlaceHolder)
- [
- ({ DumpParsedAst.hs:13:11-13 }
- (HsExplicitListTy
- (Promoted)
- (PlaceHolder)
- []))])
- (Prefix)
- ({ DumpParsedAst.hs:13:24-27 }
- (HsAppsTy
- [
- ({ DumpParsedAst.hs:13:24-27 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:13:24-27 }
- (HsTyVar
- (NotPromoted)
- ({ DumpParsedAst.hs:13:24-27 }
- (Unqual {OccName: Zero}))))))]))))]))
- ({ DumpParsedAst.hs:11:13-19 }
- (Unqual {OccName: Length'}))
- (HsQTvs
- (PlaceHolder)
+ ({ DumpParsedAst.hs:11:1-23 }
+ (ValD
+ (FunBind
+ ({ DumpParsedAst.hs:11:1-4 }
+ (Unqual {OccName: main}))
+ (MG
+ ({ DumpParsedAst.hs:11:1-23 }
[
- ({ DumpParsedAst.hs:11:21-31 }
- (KindedTyVar
- ({ DumpParsedAst.hs:11:22-23 }
- (Unqual {OccName: as}))
- ({ DumpParsedAst.hs:11:28-30 }
- (HsAppsTy
- [
- ({ DumpParsedAst.hs:11:28-30 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:11:28-30 }
- (HsListTy
- ({ DumpParsedAst.hs:11:29 }
- (HsAppsTy
- [
- ({ DumpParsedAst.hs:11:29 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:11:29 }
- (HsTyVar
- (NotPromoted)
- ({ DumpParsedAst.hs:11:29 }
- (Unqual {OccName: k}))))))]))))))]))))]
- (PlaceHolder))
- (Prefix)
- ({ DumpParsedAst.hs:11:33-40 }
- (KindSig
- ({ DumpParsedAst.hs:11:36-40 }
- (HsAppsTy
- [
- ({ DumpParsedAst.hs:11:36-40 }
- (HsAppPrefix
- ({ DumpParsedAst.hs:11:36-40 }
- (HsTyVar
- (NotPromoted)
- ({ DumpParsedAst.hs:11:36-40 }
- (Unqual {OccName: Peano}))))))]))))
- (Nothing)))))]
+ ({ DumpParsedAst.hs:11:1-23 }
+ (Match
+ (FunRhs
+ ({ DumpParsedAst.hs:11:1-4 }
+ (Unqual {OccName: main}))
+ (Prefix))
+ []
+ (Nothing)
+ (GRHSs
+ [
+ ({ DumpParsedAst.hs:11:6-23 }
+ (GRHS
+ []
+ ({ DumpParsedAst.hs:11:8-23 }
+ (HsApp
+ ({ DumpParsedAst.hs:11:8-15 }
+ (HsVar
+ ({ DumpParsedAst.hs:11:8-15 }
+ (Unqual {OccName: putStrLn}))))
+ ({ DumpParsedAst.hs:11:17-23 }
+ (HsLit
+ (HsString
+ (SourceText "\"hello\"") {FastString: "hello"})))))))]
+ ({ <no location info> }
+ (EmptyLocalBinds)))))])
+ []
+ (PlaceHolder)
+ (FromSource))
+ (WpHole)
+ (PlaceHolder)
+ [])))]
(Nothing)
(Nothing)))
+
+
diff --git a/testsuite/tests/parser/should_compile/DumpRenamedAst.hs b/testsuite/tests/parser/should_compile/DumpRenamedAst.hs
new file mode 100644
index 0000000000..cb23ad5085
--- /dev/null
+++ b/testsuite/tests/parser/should_compile/DumpRenamedAst.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE DataKinds, PolyKinds, TypeOperators, TypeFamilies #-}
+
+module DumpRenamedAst where
+
+data Peano = Zero | Succ Peano
+
+type family Length (as :: [k]) :: Peano where
+ Length (a : as) = Succ (Length as)
+ Length '[] = Zero
+
+main = putStrLn "hello"
diff --git a/testsuite/tests/parser/should_compile/DumpRenamedAst.stderr b/testsuite/tests/parser/should_compile/DumpRenamedAst.stderr
new file mode 100644
index 0000000000..e24af18ae7
--- /dev/null
+++ b/testsuite/tests/parser/should_compile/DumpRenamedAst.stderr
@@ -0,0 +1,190 @@
+
+==================== Renamer ====================
+
+(HsGroup
+ (ValBindsOut
+ [
+ ((,)
+ (NonRecursive) {Bag(Located (HsBind Name)):
+ [
+ ({ DumpRenamedAst.hs:11:1-23 }
+ (FunBind
+ ({ DumpRenamedAst.hs:11:1-4 }{Name: main:DumpRenamedAst.main{v rqD}})
+ (MG
+ ({ DumpRenamedAst.hs:11:1-23 }
+ [
+ ({ DumpRenamedAst.hs:11:1-23 }
+ (Match
+ (FunRhs
+ ({ DumpRenamedAst.hs:11:1-4 }{Name: main:DumpRenamedAst.main{v rqD}})
+ (Prefix))
+ []
+ (Nothing)
+ (GRHSs
+ [
+ ({ DumpRenamedAst.hs:11:6-23 }
+ (GRHS
+ []
+ ({ DumpRenamedAst.hs:11:8-23 }
+ (HsApp
+ ({ DumpRenamedAst.hs:11:8-15 }
+ (HsVar
+ ({ DumpRenamedAst.hs:11:8-15 }{Name: base:System.IO.putStrLn{v r1J}})))
+ ({ DumpRenamedAst.hs:11:17-23 }
+ (HsLit
+ (HsString
+ (SourceText "\"hello\"") {FastString: "hello"})))))))]
+ ({ <no location info> }
+ (EmptyLocalBinds)))))])
+ []
+ (PlaceHolder)
+ (FromSource))
+ (WpHole) {NameSet:
+ []}
+ []))]})]
+ [])
+ []
+ [
+ (TyClGroup
+ [
+ ({ DumpRenamedAst.hs:5:1-30 }
+ (DataDecl
+ ({ DumpRenamedAst.hs:5:6-10 }{Name: main:DumpRenamedAst.Peano{tc rqA}})
+ (HsQTvs
+ []
+ [] {NameSet:
+ []})
+ (Prefix)
+ (HsDataDefn
+ (DataType)
+ ({ <no location info> }
+ [])
+ (Nothing)
+ (Nothing)
+ [
+ ({ DumpRenamedAst.hs:5:14-17 }
+ (ConDeclH98
+ ({ DumpRenamedAst.hs:5:14-17 }{Name: main:DumpRenamedAst.Zero{d rqB}})
+ (Nothing)
+ (Just
+ ({ <no location info> }
+ []))
+ (PrefixCon
+ [])
+ (Nothing))),
+ ({ DumpRenamedAst.hs:5:21-30 }
+ (ConDeclH98
+ ({ DumpRenamedAst.hs:5:21-24 }{Name: main:DumpRenamedAst.Succ{d rqC}})
+ (Nothing)
+ (Just
+ ({ <no location info> }
+ []))
+ (PrefixCon
+ [
+ ({ DumpRenamedAst.hs:5:26-30 }
+ (HsTyVar
+ (NotPromoted)
+ ({ DumpRenamedAst.hs:5:26-30 }{Name: main:DumpRenamedAst.Peano{tc rqA}})))])
+ (Nothing)))]
+ ({ <no location info> }
+ []))
+ (True) {NameSet:
+ [{Name: main:DumpRenamedAst.Peano{tc rqA}}]}))]
+ []
+ []),
+ (TyClGroup
+ [
+ ({ DumpRenamedAst.hs:7:1-39 }
+ (FamDecl
+ (FamilyDecl
+ (ClosedTypeFamily
+ (Just
+ [
+ ({ DumpRenamedAst.hs:8:3-36 }
+ (TyFamEqn
+ ({ DumpRenamedAst.hs:8:3-8 }{Name: main:DumpRenamedAst.Length{tc roG}})
+ (HsIB
+ [{Name: a{tv aqH}},{Name: as{tv aqI}}]
+ [
+ ({ DumpRenamedAst.hs:8:10-17 }
+ (HsParTy
+ ({ DumpRenamedAst.hs:8:11-16 }
+ (HsOpTy
+ ({ DumpRenamedAst.hs:8:11 }
+ (HsTyVar
+ (NotPromoted)
+ ({ DumpRenamedAst.hs:8:11 }{Name: a{tv aqH}})))
+ ({ DumpRenamedAst.hs:8:13 }{Name: ghc-prim:GHC.Types.:{(w) d 66}})
+ ({ DumpRenamedAst.hs:8:15-16 }
+ (HsTyVar
+ (NotPromoted)
+ ({ DumpRenamedAst.hs:8:15-16 }{Name: as{tv aqI}})))))))])
+ (Prefix)
+ ({ DumpRenamedAst.hs:8:21-36 }
+ (HsAppTy
+ ({ DumpRenamedAst.hs:8:21-24 }
+ (HsTyVar
+ (NotPromoted)
+ ({ DumpRenamedAst.hs:8:21-24 }{Name: main:DumpRenamedAst.Succ{d rqC}})))
+ ({ DumpRenamedAst.hs:8:26-36 }
+ (HsParTy
+ ({ DumpRenamedAst.hs:8:27-35 }
+ (HsAppTy
+ ({ DumpRenamedAst.hs:8:27-32 }
+ (HsTyVar
+ (NotPromoted)
+ ({ DumpRenamedAst.hs:8:27-32 }{Name: main:DumpRenamedAst.Length{tc roG}})))
+ ({ DumpRenamedAst.hs:8:34-35 }
+ (HsTyVar
+ (NotPromoted)
+ ({ DumpRenamedAst.hs:8:34-35 }{Name: as{tv aqI}}))))))))))),
+ ({ DumpRenamedAst.hs:9:3-24 }
+ (TyFamEqn
+ ({ DumpRenamedAst.hs:9:3-8 }{Name: main:DumpRenamedAst.Length{tc roG}})
+ (HsIB
+ []
+ [
+ ({ DumpRenamedAst.hs:9:10-12 }
+ (HsExplicitListTy
+ (Promoted)
+ (PlaceHolder)
+ []))])
+ (Prefix)
+ ({ DumpRenamedAst.hs:9:21-24 }
+ (HsTyVar
+ (NotPromoted)
+ ({ DumpRenamedAst.hs:9:21-24 }{Name: main:DumpRenamedAst.Zero{d rqB}})))))]))
+ ({ DumpRenamedAst.hs:7:13-18 }{Name: main:DumpRenamedAst.Length{tc roG}})
+ (HsQTvs
+ [{Name: k{tv aqF}}]
+ [
+ ({ DumpRenamedAst.hs:7:20-30 }
+ (KindedTyVar
+ ({ DumpRenamedAst.hs:7:21-22 }{Name: as{tv aqG}})
+ ({ DumpRenamedAst.hs:7:27-29 }
+ (HsListTy
+ ({ DumpRenamedAst.hs:7:28 }
+ (HsTyVar
+ (NotPromoted)
+ ({ DumpRenamedAst.hs:7:28 }{Name: k{tv aqF}})))))))] {NameSet:
+ []})
+ (Prefix)
+ ({ DumpRenamedAst.hs:7:32-39 }
+ (KindSig
+ ({ DumpRenamedAst.hs:7:35-39 }
+ (HsTyVar
+ (NotPromoted)
+ ({ DumpRenamedAst.hs:7:35-39 }{Name: main:DumpRenamedAst.Peano{tc rqA}})))))
+ (Nothing))))]
+ []
+ [])]
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ [])
+
diff --git a/testsuite/tests/parser/should_compile/DumpTypecheckedAst.hs b/testsuite/tests/parser/should_compile/DumpTypecheckedAst.hs
new file mode 100644
index 0000000000..35887649a7
--- /dev/null
+++ b/testsuite/tests/parser/should_compile/DumpTypecheckedAst.hs
@@ -0,0 +1,11 @@
+{-# LANGUAGE DataKinds, PolyKinds, TypeOperators, TypeFamilies #-}
+
+module DumpTypecheckedAst where
+
+data Peano = Zero | Succ Peano
+
+type family Length (as :: [k]) :: Peano where
+ Length (a : as) = Succ (Length as)
+ Length '[] = Zero
+
+main = putStrLn "hello"
diff --git a/testsuite/tests/parser/should_compile/DumpTypecheckedAst.stderr b/testsuite/tests/parser/should_compile/DumpTypecheckedAst.stderr
new file mode 100644
index 0000000000..a92ab4cb66
--- /dev/null
+++ b/testsuite/tests/parser/should_compile/DumpTypecheckedAst.stderr
@@ -0,0 +1,195 @@
+
+==================== Typechecker ====================
+{Bag(Located (HsBind Var)):
+[
+ ({ <no location info> }
+ (VarBind {Var: (main:DumpTypecheckedAst.$tcPeano{v rHa} [lidx] :: ghc-prim:GHC.Types.TyCon{tc 61Z})}
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsConLikeOut
+ ({abstract:ConLike})))
+ ({ <no location info> }
+ (HsLit
+ (HsWordPrim
+ (NoSourceText)
+ (8575021419490388262))))))
+ ({ <no location info> }
+ (HsLit
+ (HsWordPrim
+ (NoSourceText)
+ (11015472196725198936))))))
+ ({ <no location info> }
+ (HsVar
+ ({ <no location info> }{Var: (main:DumpTypecheckedAst.$trModule{v rHO} [lidx] :: ghc-prim:GHC.Types.Module{tc 625})})))))
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsConLikeOut
+ ({abstract:ConLike})))
+ ({ <no location info> }
+ (HsLit
+ (HsStringPrim
+ (NoSourceText) "Peano")))))))
+ (False))),
+ ({ <no location info> }
+ (VarBind {Var: (main:DumpTypecheckedAst.$tc'Zero{v rFM} [lidx] :: ghc-prim:GHC.Types.TyCon{tc 61Z})}
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsConLikeOut
+ ({abstract:ConLike})))
+ ({ <no location info> }
+ (HsLit
+ (HsWordPrim
+ (NoSourceText)
+ (2837710233032485839))))))
+ ({ <no location info> }
+ (HsLit
+ (HsWordPrim
+ (NoSourceText)
+ (4722402035995040741))))))
+ ({ <no location info> }
+ (HsVar
+ ({ <no location info> }{Var: (main:DumpTypecheckedAst.$trModule{v rHO} [lidx] :: ghc-prim:GHC.Types.Module{tc 625})})))))
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsConLikeOut
+ ({abstract:ConLike})))
+ ({ <no location info> }
+ (HsLit
+ (HsStringPrim
+ (NoSourceText) "'Zero")))))))
+ (False))),
+ ({ <no location info> }
+ (VarBind {Var: (main:DumpTypecheckedAst.$tc'Succ{v rH3} [lidx] :: ghc-prim:GHC.Types.TyCon{tc 61Z})}
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsConLikeOut
+ ({abstract:ConLike})))
+ ({ <no location info> }
+ (HsLit
+ (HsWordPrim
+ (NoSourceText)
+ (16648669567626715052))))))
+ ({ <no location info> }
+ (HsLit
+ (HsWordPrim
+ (NoSourceText)
+ (1296291977643060110))))))
+ ({ <no location info> }
+ (HsVar
+ ({ <no location info> }{Var: (main:DumpTypecheckedAst.$trModule{v rHO} [lidx] :: ghc-prim:GHC.Types.Module{tc 625})})))))
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsConLikeOut
+ ({abstract:ConLike})))
+ ({ <no location info> }
+ (HsLit
+ (HsStringPrim
+ (NoSourceText) "'Succ")))))))
+ (False))),
+ ({ <no location info> }
+ (VarBind {Var: (main:DumpTypecheckedAst.$trModule{v rHO} [lidx] :: ghc-prim:GHC.Types.Module{tc 625})}
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsConLikeOut
+ ({abstract:ConLike})))
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsConLikeOut
+ ({abstract:ConLike})))
+ ({ <no location info> }
+ (HsLit
+ (HsStringPrim
+ (NoSourceText) "main")))))))
+ ({ <no location info> }
+ (HsApp
+ ({ <no location info> }
+ (HsConLikeOut
+ ({abstract:ConLike})))
+ ({ <no location info> }
+ (HsLit
+ (HsStringPrim
+ (NoSourceText) "DumpTypecheckedAst")))))))
+ (False))),
+ ({ DumpTypecheckedAst.hs:11:1-23 }
+ (AbsBinds
+ []
+ []
+ [
+ (ABE {Var: (main:DumpTypecheckedAst.main{v rqD} [lid] :: ghc-prim:GHC.Types.IO{tc 31Q}
+ ())} {Var: (main{v aHS} [lid] :: ghc-prim:GHC.Types.IO{tc 31Q} ())}
+ (WpHole)
+ (SpecPrags
+ []))]
+ [
+ ({abstract:TcEvBinds})] {Bag(Located (HsBind Var)):
+ [
+ ({ DumpTypecheckedAst.hs:11:1-23 }
+ (FunBind
+ ({ DumpTypecheckedAst.hs:11:1-4 }{Var: (main{v aHS} [lid] :: ghc-prim:GHC.Types.IO{tc 31Q} ())})
+ (MG
+ ({ DumpTypecheckedAst.hs:11:1-23 }
+ [
+ ({ DumpTypecheckedAst.hs:11:1-23 }
+ (Match
+ (FunRhs
+ ({ DumpTypecheckedAst.hs:11:1-4 }{Name: main:DumpTypecheckedAst.main{v rqD}})
+ (Prefix))
+ []
+ (Nothing)
+ (GRHSs
+ [
+ ({ DumpTypecheckedAst.hs:11:6-23 }
+ (GRHS
+ []
+ ({ DumpTypecheckedAst.hs:11:8-23 }
+ (HsApp
+ ({ DumpTypecheckedAst.hs:11:8-15 }
+ (HsVar
+ ({ <no location info> }{Var: (base:System.IO.putStrLn{v r1J} [gid] :: base:GHC.Base.String{tc r1h}
+ -> ghc-prim:GHC.Types.IO{tc 31Q} ())})))
+ ({ DumpTypecheckedAst.hs:11:17-23 }
+ (HsLit
+ (HsString
+ (SourceText "\"hello\"") {FastString: "hello"})))))))]
+ ({ <no location info> }
+ (EmptyLocalBinds)))))])
+ []
+ (TyConApp
+ ({abstract:TyCon})
+ [
+ (TyConApp
+ ({abstract:TyCon})
+ [])])
+ (FromSource))
+ (WpHole) {NameSet:
+ []}
+ []))]}))]}
+
diff --git a/testsuite/tests/parser/should_compile/all.T b/testsuite/tests/parser/should_compile/all.T
index e04cd668e1..4f5797f29b 100644
--- a/testsuite/tests/parser/should_compile/all.T
+++ b/testsuite/tests/parser/should_compile/all.T
@@ -103,4 +103,6 @@ test('VtaParse', normal, compile, [''])
test('T10196', normal, compile, [''])
test('T10379', normal, compile, [''])
test('T10582', expect_broken(10582), compile, [''])
-test('DumpParsedAst', normal, compile, ['-ddump-parsed-ast'])
+test('DumpParsedAst', normal, compile, ['-ddump-parsed-ast'])
+test('DumpRenamedAst', normal, compile, ['-ddump-rn-ast'])
+test('DumpTypecheckedAst', normal, compile, ['-ddump-tc-ast'])