ghc-parser 0.2.3.0 → 0.2.4.0
raw patch · 3 files changed
+71/−12 lines, 3 filesdep ~ghc
Dependency ranges changed: ghc
Files
- generic-src/Language/Haskell/GHC/Parser.hs +21/−1
- ghc-parser.cabal +10/−11
- src-9.2/Language/Haskell/GHC/HappyParser.hs +40/−0
generic-src/Language/Haskell/GHC/Parser.hs view
@@ -28,6 +28,11 @@ import Data.List (intercalate, findIndex, isInfixOf) import Data.Char (isAlphaNum) +#if MIN_VERSION_ghc(9,2,0)+import GHC.Driver.Config (initParserOpts)+import GHC.Parser.Errors.Ppr (pprError)+#endif+ #if MIN_VERSION_ghc(9,0,0) import GHC.Data.Bag import GHC.Driver.Session (parseDynamicFilePragma)@@ -144,14 +149,25 @@ let filename = "<interactive>" location = SrcLoc.mkRealSrcLoc (mkFastString filename) 1 1 buffer = stringToStringBuffer str+#if MIN_VERSION_ghc(9,2,0)+ parseState = initParserState (initParserOpts flags) buffer location in+#else parseState = mkPState flags buffer location in+#endif -- Convert a GHC parser output into our own. toParseOut $ unP parser parseState where toParseOut :: ParseResult a -> ParseOutput a-#if MIN_VERSION_ghc(9,0,0)+#if MIN_VERSION_ghc(9,2,0) toParseOut (PFailed pstate) = let realSpan = SrcLoc.psRealSpan $ last_loc pstate+ errMsg = printErrorBag (errors pstate)+ ln = srcLocLine $ SrcLoc.realSrcSpanStart realSpan+ col = srcLocCol $ SrcLoc.realSrcSpanStart realSpan+ in Failure errMsg $ Loc ln col+#elif MIN_VERSION_ghc(9,0,0)+ toParseOut (PFailed pstate) =+ let realSpan = SrcLoc.psRealSpan $ last_loc pstate errMsg = printErrorBag $ snd $ (messages pstate) flags ln = srcLocLine $ SrcLoc.realSrcSpanStart realSpan col = srcLocCol $ SrcLoc.realSrcSpanStart realSpan@@ -192,7 +208,11 @@ Parsed result -- Convert the bag of errors into an error string.+#if MIN_VERSION_ghc(9,2,0)+ printErrorBag bag = joinLines . map (show . pprError) $ bagToList bag+#else printErrorBag bag = joinLines . map show $ bagToList bag+#endif -- Taken from http://blog.shaynefletcher.org/2019/06/have-ghc-parsing-respect-dynamic-pragmas.html parsePragmasIntoDynFlags :: DynFlags -> FilePath -> String -> IO (Maybe DynFlags)
ghc-parser.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: ghc-parser-version: 0.2.3.0+version: 0.2.4.0 synopsis: Haskell source parser from GHC. -- description: homepage: https://github.com/gibiansky/IHaskell@@ -17,25 +17,24 @@ cabal-version: 1.16 library- build-tools: happy, cpphs ghc-options: -Wall exposed-modules: Language.Haskell.GHC.Parser, Language.Haskell.GHC.HappyParser -- other-modules: -- other-extensions: build-depends: base >=4.9 && < 5,- ghc >=8.0 && <9.1+ ghc >=8.0 && <9.3 if impl(ghc >= 8.0) && impl(ghc < 8.4) hs-source-dirs: generic-src src-8.0- else- if impl(ghc >= 8.4) && impl(ghc < 8.10)- hs-source-dirs: generic-src src-8.4- else- if impl(ghc >= 8.10) && impl(ghc < 9.0)- hs-source-dirs: generic-src src-8.10- else- hs-source-dirs: generic-src src-9.0+ if impl(ghc >= 8.4) && impl(ghc < 8.10)+ hs-source-dirs: generic-src src-8.4+ if impl(ghc >= 8.10) && impl(ghc < 9.0)+ hs-source-dirs: generic-src src-8.10+ if impl(ghc >= 9.0) && impl(ghc < 9.2)+ hs-source-dirs: generic-src src-9.0+ if impl(ghc >= 9.2) && impl(ghc < 9.4)+ hs-source-dirs: generic-src src-9.2 default-language: Haskell2010
+ src-9.2/Language/Haskell/GHC/HappyParser.hs view
@@ -0,0 +1,40 @@+module Language.Haskell.GHC.HappyParser+ ( fullStatement+ , fullImport+ , fullDeclaration+ , fullExpression+ , fullTypeSignature+ , fullModule+ ) where++import GHC.Parser+import GHC.Types.SrcLoc++-- compiler/hsSyn+import GHC.Hs++-- compiler/utils+import GHC.Data.OrdList++-- compiler/parser+import GHC.Parser.Lexer++import GHC.Parser.PostProcess (ECP(..), runPV)++fullStatement :: P (Maybe (LStmt GhcPs (LHsExpr GhcPs)))+fullStatement = parseStmt++fullImport :: P (LImportDecl GhcPs)+fullImport = parseImport++fullDeclaration :: P (OrdList (LHsDecl GhcPs))+fullDeclaration = fmap unitOL parseDeclaration++fullExpression :: P (LHsExpr GhcPs)+fullExpression = parseExpression >>= \p -> runPV $ unECP p++fullTypeSignature :: P (Located (OrdList (LHsDecl GhcPs)))+fullTypeSignature = fmap (noLoc . unitOL) parseTypeSignature++fullModule :: P (Located HsModule)+fullModule = parseModule