@@ -1,11 +1,17 @@
1{-# LANGUAGE RankNTypes #-}
1{-# LANGUAGE RankNTypes #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module StackTrace.Plugin (plugin) where
4module StackTrace.Plugin (plugin) where
5import Control.Arrow (first)
6import Control.Arrow (first)
6import Data.Monoid (Any(Any, getAny))
7import Data.Monoid (Any(Any, getAny))
7import GhcPlugins
8import GhcPlugins
9+#if __GLASGOW_HASKELL__ >= 810
12+#if __GLASGOW_HASKELL__ < 810
8import HsSyn
13import HsSyn
10type Traversal s t a b
16type Traversal s t a b
11 = forall f. Applicative f =>
17 = forall f. Applicative f =>
@@ -28,11 +34,19 @@ parsedPlugin _ _ pm = do
28ghcStackModuleName :: ModuleName
34ghcStackModuleName :: ModuleName
29ghcStackModuleName = mkModuleName "AutoImported.GHC.Stack"
35ghcStackModuleName = mkModuleName "AutoImported.GHC.Stack"
37+#if __GLASGOW_HASKELL__ < 810
38+importDeclQualified :: Bool
39+importDeclQualified = True
41+importDeclQualified :: ImportDeclQualifiedStyle
42+importDeclQualified = QualifiedPre
31ghcStackImport :: Located (ImportDecl (GhcPass p))
45ghcStackImport :: Located (ImportDecl (GhcPass p))
32ghcStackImport =
46ghcStackImport =
34 (simpleImportDecl $ mkModuleName "GHC.Stack")
48 (simpleImportDecl $ mkModuleName "GHC.Stack")
35− {ideclQualified = True, ideclAs = Just $ noLoc ghcStackModuleName}
49+ {ideclQualified = importDeclQualified, ideclAs = Just $ noLoc ghcStackModuleName}
37updateHsModule :: HsModule GhcPs -> HsModule GhcPs
51updateHsModule :: HsModule GhcPs -> HsModule GhcPs
38updateHsModule hsm =
52updateHsModule hsm =
@@ -91,17 +105,24 @@ updateHsType :: HsType GhcPs -> (Any, HsType GhcPs)
91updateHsType (HsQualTy xty ctxt body) =
105updateHsType (HsQualTy xty ctxt body) =
92 flagASTModified $ HsQualTy xty (fmap appendHSC ctxt) body
106 flagASTModified $ HsQualTy xty (fmap appendHSC ctxt) body
93updateHsType ty@HsTyVar {} =
107updateHsType ty@HsTyVar {} =
94− flagASTModified $ HsQualTy noExt (noLoc $ appendHSC []) (noLoc ty)
108+ flagASTModified $ HsQualTy xQualTy (noLoc $ appendHSC []) (noLoc ty)
95updateHsType ty@HsAppTy {} =
109updateHsType ty@HsAppTy {} =
96− flagASTModified $ HsQualTy noExt (noLoc $ appendHSC []) (noLoc ty)
110+ flagASTModified $ HsQualTy xQualTy (noLoc $ appendHSC []) (noLoc ty)
97updateHsType ty@HsFunTy {} =
111updateHsType ty@HsFunTy {} =
98− flagASTModified $ HsQualTy noExt (noLoc $ appendHSC []) (noLoc ty)
112+ flagASTModified $ HsQualTy xQualTy (noLoc $ appendHSC []) (noLoc ty)
99updateHsType ty@HsListTy {} =
113updateHsType ty@HsListTy {} =
100− flagASTModified $ HsQualTy noExt (noLoc $ appendHSC []) (noLoc ty)
114+ flagASTModified $ HsQualTy xQualTy (noLoc $ appendHSC []) (noLoc ty)
101updateHsType ty@HsTupleTy {} =
115updateHsType ty@HsTupleTy {} =
102− flagASTModified $ HsQualTy noExt (noLoc $ appendHSC []) (noLoc ty)
116+ flagASTModified $ HsQualTy xQualTy (noLoc $ appendHSC []) (noLoc ty)
103updateHsType ty = pure ty
117updateHsType ty = pure ty
119+#if __GLASGOW_HASKELL__ < 810
122+xQualTy :: NoExtField
105flagASTModified :: a -> (Any, a)
126flagASTModified :: a -> (Any, a)
106flagASTModified a = (Any True, a)
127flagASTModified a = (Any True, a)
@@ -110,7 +131,7 @@ appendHSC cs = mkHSC : cs
111-- make HasCallStack => constraint
132-- make HasCallStack => constraint
112mkHSC :: LHsType GhcPs
133mkHSC :: LHsType GhcPs
113−mkHSC = noLoc $ HsTyVar noExt NotPromoted lId
134+mkHSC = noLoc $ HsTyVar xQualTy NotPromoted lId
115lId :: Located (IdP GhcPs)
136lId :: Located (IdP GhcPs)
116lId = noLoc $ mkRdrQual ghcStackModuleName $ mkClsOcc "HasCallStack"
137lId = noLoc $ mkRdrQual ghcStackModuleName $ mkClsOcc "HasCallStack"