ghc-8.2.2: The GHC API

Safe Haskell | None
Language | Haskell2010

Lexer

Synopsis

- data Token
  - = ITas
  - | ITcase
  - | ITclass
  - | ITdata
  - | ITdefault
  - | ITderiving
  - | ITdo
  - | ITelse
  - | IThiding
  - | ITforeign
  - | ITif
  - | ITimport
  - | ITin
  - | ITinfix
  - | ITinfixl
  - | ITinfixr
  - | ITinstance
  - | ITlet
  - | ITmodule
  - | ITnewtype
  - | ITof
  - | ITqualified
  - | ITthen
  - | ITtype
  - | ITwhere
  - | ITforall IsUnicodeSyntax
  - | ITexport
  - | ITlabel
  - | ITdynamic
  - | ITsafe
  - | ITinterruptible
  - | ITunsafe
  - | ITstdcallconv
  - | ITccallconv
  - | ITcapiconv
  - | ITprimcallconv
  - | ITjavascriptcallconv
  - | ITmdo
  - | ITfamily
  - | ITrole
  - | ITgroup
  - | ITby
  - | ITusing
  - | ITpattern
  - | ITstatic
  - | ITstock
  - | ITanyclass
  - | ITunit
  - | ITsignature
  - | ITdependency
  - | ITrequires
  - | ITinline_prag SourceText InlineSpec RuleMatchInfo
  - | ITspec_prag SourceText
  - | ITspec_inline_prag SourceText Bool
  - | ITsource_prag SourceText
  - | ITrules_prag SourceText
  - | ITwarning_prag SourceText
  - | ITdeprecated_prag SourceText
  - | ITline_prag
  - | ITscc_prag SourceText
  - | ITgenerated_prag SourceText
  - | ITcore_prag SourceText
  - | ITunpack_prag SourceText
  - | ITnounpack_prag SourceText
  - | ITann_prag SourceText
  - | ITcomplete_prag SourceText
  - | ITclose_prag
  - | IToptions_prag String
  - | ITinclude_prag String
  - | ITlanguage_prag
  - | ITvect_prag SourceText
  - | ITvect_scalar_prag SourceText
  - | ITnovect_prag SourceText
  - | ITminimal_prag SourceText
  - | IToverlappable_prag SourceText
  - | IToverlapping_prag SourceText
  - | IToverlaps_prag SourceText
  - | ITincoherent_prag SourceText
  - | ITctype SourceText
  - | ITdotdot
  - | ITcolon
  - | ITdcolon IsUnicodeSyntax
  - | ITequal
  - | ITlam
  - | ITlcase
  - | ITvbar
  - | ITlarrow IsUnicodeSyntax
  - | ITrarrow IsUnicodeSyntax
  - | ITat
  - | ITtilde
  - | ITtildehsh
  - | ITdarrow IsUnicodeSyntax
  - | ITminus
  - | ITbang
  - | ITdot
  - | ITbiglam
  - | ITocurly
  - | ITccurly
  - | ITvocurly
  - | ITvccurly
  - | ITobrack
  - | ITopabrack
  - | ITcpabrack
  - | ITcbrack
  - | IToparen
  - | ITcparen
  - | IToubxparen
  - | ITcubxparen
  - | ITsemi
  - | ITcomma
  - | ITunderscore
  - | ITbackquote
  - | ITsimpleQuote
  - | ITvarid FastString
  - | ITconid FastString
  - | ITvarsym FastString
  - | ITconsym FastString
  - | ITqvarid (FastString, FastString)
  - | ITqconid (FastString, FastString)
  - | ITqvarsym (FastString, FastString)
  - | ITqconsym (FastString, FastString)
  - | ITdupipvarid FastString
  - | ITlabelvarid FastString
  - | ITchar SourceText Char
  - | ITstring SourceText FastString
  - | ITinteger SourceText Integer
  - | ITrational FractionalLit
  - | ITprimchar SourceText Char
  - | ITprimstring SourceText ByteString
  - | ITprimint SourceText Integer
  - | ITprimword SourceText Integer
  - | ITprimfloat FractionalLit
  - | ITprimdouble FractionalLit
  - | ITopenExpQuote HasE IsUnicodeSyntax
  - | ITopenPatQuote
  - | ITopenDecQuote
  - | ITopenTypQuote
  - | ITcloseQuote IsUnicodeSyntax
  - | ITopenTExpQuote HasE
  - | ITcloseTExpQuote
  - | ITidEscape FastString
  - | ITparenEscape
  - | ITidTyEscape FastString
  - | ITparenTyEscape
  - | ITtyQuote
  - | ITquasiQuote (FastString, FastString, RealSrcSpan)
  - | ITqQuasiQuote (FastString, FastString, FastString, RealSrcSpan)
  - | ITproc
  - | ITrec
  - | IToparenbar IsUnicodeSyntax
  - | ITcparenbar IsUnicodeSyntax
  - | ITlarrowtail IsUnicodeSyntax
  - | ITrarrowtail IsUnicodeSyntax
  - | ITLarrowtail IsUnicodeSyntax
  - | ITRarrowtail IsUnicodeSyntax
  - | ITtypeApp
  - | ITunknown String
  - | ITeof
  - | ITdocCommentNext String
  - | ITdocCommentPrev String
  - | ITdocCommentNamed String
  - | ITdocSection Int String
  - | ITdocOptions String
  - | ITlineComment String
  - | ITblockComment String
- lexer :: Bool -> (Located Token -> P a) -> P a
- pragState :: DynFlags -> StringBuffer -> RealSrcLoc -> PState
- mkPState :: DynFlags -> StringBuffer -> RealSrcLoc -> PState
- mkPStatePure :: ParserFlags -> StringBuffer -> RealSrcLoc -> PState
- data PState = PState {
  - buffer :: StringBuffer
  - options :: ParserFlags
  - messages :: DynFlags -> Messages
  - tab_first :: Maybe RealSrcSpan
  - tab_count :: !Int
  - last_tk :: Maybe Token
  - last_loc :: RealSrcSpan
  - last_len :: !Int
  - loc :: RealSrcLoc
  - context :: [LayoutContext]
  - lex_state :: [Int]
  - srcfiles :: [FastString]
  - alr_pending_implicit_tokens :: [RealLocated Token]
  - alr_next_token :: Maybe (RealLocated Token)
  - alr_last_loc :: RealSrcSpan
  - alr_context :: [ALRContext]
  - alr_expecting_ocurly :: Maybe ALRLayout
  - alr_justClosedExplicitLetBlock :: Bool
  - annotations :: [(ApiAnnKey, [SrcSpan])]
  - comment_q :: [Located AnnotationComment]
  - annotations_comments :: [(SrcSpan, [Located AnnotationComment])]
  }
- newtype P a = P {
  - unP :: PState -> ParseResult a
  }
- data ParseResult a
  - = POk PState a
  - | PFailed SrcSpan MsgDoc
- mkParserFlags :: DynFlags -> ParserFlags
- data ParserFlags = ParserFlags {
  - pWarningFlags :: IntSet
  - pExtensionFlags :: IntSet
  - pThisPackage :: UnitId
  - pExtsBitmap :: !ExtsBitmap
  }
- getSrcLoc :: P RealSrcLoc
- getPState :: P PState
- extopt :: Extension -> ParserFlags -> Bool
- withThisPackage :: (UnitId -> a) -> P a
- failLocMsgP :: RealSrcLoc -> RealSrcLoc -> String -> P a
- failSpanMsgP :: SrcSpan -> SDoc -> P a
- srcParseFail :: P a
- getMessages :: PState -> DynFlags -> Messages
- popContext :: P ()
- pushModuleContext :: P ()
- setLastToken :: RealSrcSpan -> Int -> P ()
- setSrcLoc :: RealSrcLoc -> P ()
- activeContext :: P Bool
- nextIsEOF :: P Bool
- getLexState :: P Int
- popLexState :: P Int
- pushLexState :: Int -> P ()
- extension :: (ExtsBitmap -> Bool) -> P Bool
- bangPatEnabled :: ExtsBitmap -> Bool
- datatypeContextsEnabled :: ExtsBitmap -> Bool
- traditionalRecordSyntaxEnabled :: ExtsBitmap -> Bool
- explicitForallEnabled :: ExtsBitmap -> Bool
- inRulePrag :: ExtsBitmap -> Bool
- explicitNamespacesEnabled :: ExtsBitmap -> Bool
- patternSynonymsEnabled :: ExtsBitmap -> Bool
- sccProfilingOn :: ExtsBitmap -> Bool
- hpcEnabled :: ExtsBitmap -> Bool
- addWarning :: WarningFlag -> SrcSpan -> SDoc -> P ()
- lexTokenStream :: StringBuffer -> RealSrcLoc -> DynFlags -> ParseResult [Located Token]
- addAnnotation :: SrcSpan -> AnnKeywordId -> SrcSpan -> P ()
- type AddAnn = SrcSpan -> P ()
- addAnnsAt :: SrcSpan -> [AddAnn] -> P ()
- mkParensApiAnn :: SrcSpan -> [AddAnn]
- commentToAnnotation :: Located Token -> Located AnnotationComment
- moveAnnotations :: SrcSpan -> SrcSpan -> P ()

# Documentation

data Token #

Constructors

ITas |
ITcase |
ITclass |
ITdata |
ITdefault |
ITderiving |
ITdo |
ITelse |
IThiding |
ITforeign |
ITif |
ITimport |
ITin |
ITinfix |
ITinfixl |
ITinfixr |
ITinstance |
ITlet |
ITmodule |
ITnewtype |
ITof |
ITqualified |
ITthen |
ITtype |
ITwhere |
ITforall IsUnicodeSyntax |
ITexport |
ITlabel |
ITdynamic |
ITsafe |
ITinterruptible |
ITunsafe |
ITstdcallconv |
ITccallconv |
ITcapiconv |
ITprimcallconv |
ITjavascriptcallconv |
ITmdo |
ITfamily |
ITrole |
ITgroup |
ITby |
ITusing |
ITpattern |
ITstatic |
ITstock |
ITanyclass |
ITunit |
ITsignature |
ITdependency |
ITrequires |
ITinline_prag SourceText InlineSpec RuleMatchInfo |
ITspec_prag SourceText |
ITspec_inline_prag SourceText Bool |
ITsource_prag SourceText |
ITrules_prag SourceText |
ITwarning_prag SourceText |
ITdeprecated_prag SourceText |
ITline_prag |
ITscc_prag SourceText |
ITgenerated_prag SourceText |
ITcore_prag SourceText |
ITunpack_prag SourceText |
ITnounpack_prag SourceText |
ITann_prag SourceText |
ITcomplete_prag SourceText |
ITclose_prag |
IToptions_prag String |
ITinclude_prag String |
ITlanguage_prag |
ITvect_prag SourceText |
ITvect_scalar_prag SourceText |
ITnovect_prag SourceText |
ITminimal_prag SourceText |
IToverlappable_prag SourceText |
IToverlapping_prag SourceText |
IToverlaps_prag SourceText |
ITincoherent_prag SourceText |
ITctype SourceText |
ITdotdot |
ITcolon |
ITdcolon IsUnicodeSyntax |
ITequal |
ITlam |
ITlcase |
ITvbar |
ITlarrow IsUnicodeSyntax |
ITrarrow IsUnicodeSyntax |
ITat |
ITtilde |
ITtildehsh |
ITdarrow IsUnicodeSyntax |
ITminus |
ITbang |
ITdot |
ITbiglam |
ITocurly |
ITccurly |
ITvocurly |
ITvccurly |
ITobrack |
ITopabrack |
ITcpabrack |
ITcbrack |
IToparen |
ITcparen |
IToubxparen |
ITcubxparen |
ITsemi |
ITcomma |
ITunderscore |
ITbackquote |
ITsimpleQuote |
ITvarid FastString |
ITconid FastString |
ITvarsym FastString |
ITconsym FastString |
ITqvarid (FastString, FastString) |
ITqconid (FastString, FastString) |
ITqvarsym (FastString, FastString) |
ITqconsym (FastString, FastString) |
ITdupipvarid FastString |
ITlabelvarid FastString |
ITchar SourceText Char |
ITstring SourceText FastString |
ITinteger SourceText Integer |
ITrational FractionalLit |
ITprimchar SourceText Char |
ITprimstring SourceText ByteString |
ITprimint SourceText Integer |
ITprimword SourceText Integer |
ITprimfloat FractionalLit |
ITprimdouble FractionalLit |
ITopenExpQuote HasE IsUnicodeSyntax |
ITopenPatQuote |
ITopenDecQuote |
ITopenTypQuote |
ITcloseQuote IsUnicodeSyntax |
ITopenTExpQuote HasE |
ITcloseTExpQuote |
ITidEscape FastString |
ITparenEscape |
ITidTyEscape FastString |
ITparenTyEscape |
ITtyQuote |
ITquasiQuote (FastString, FastString, RealSrcSpan) |
ITqQuasiQuote (FastString, FastString, FastString, RealSrcSpan) |
ITproc |
ITrec |
IToparenbar IsUnicodeSyntax |
ITcparenbar IsUnicodeSyntax |
ITlarrowtail IsUnicodeSyntax |
ITrarrowtail IsUnicodeSyntax |
ITLarrowtail IsUnicodeSyntax |
ITRarrowtail IsUnicodeSyntax |
ITtypeApp |
ITunknown String |
ITeof |
ITdocCommentNext String |
ITdocCommentPrev String |
ITdocCommentNamed String |
ITdocSection Int String |
ITdocOptions String |
ITlineComment String |
ITblockComment String |

Instances

Show Token # |
Methods showsPrec :: Int -> Token -> ShowS Source # show :: Token -> String Source # showList :: [Token] -> ShowS Source #
Outputable Token # |
Methods ppr :: Token -> SDoc # pprPrec :: Rational -> Token -> SDoc #

lexer :: Bool -> (Located Token -> P a) -> P a #

pragState :: DynFlags -> StringBuffer -> RealSrcLoc -> PState #

mkPState :: DynFlags -> StringBuffer -> RealSrcLoc -> PState #

Creates a parse state from a `DynFlags` value

mkPStatePure :: ParserFlags -> StringBuffer -> RealSrcLoc -> PState #

Creates a parse state from a `ParserFlags` value

data PState #

Constructors

PState |

Fields

- buffer :: StringBuffer
- options :: ParserFlags
- messages :: DynFlags -> Messages
- tab_first :: Maybe RealSrcSpan
- tab_count :: !Int
- last_tk :: Maybe Token
- last_loc :: RealSrcSpan
- last_len :: !Int
- loc :: RealSrcLoc
- context :: [LayoutContext]
- lex_state :: [Int]
- srcfiles :: [FastString]
- alr_pending_implicit_tokens :: [RealLocated Token]
- alr_next_token :: Maybe (RealLocated Token)
- alr_last_loc :: RealSrcSpan
- alr_context :: [ALRContext]
- alr_expecting_ocurly :: Maybe ALRLayout
- alr_justClosedExplicitLetBlock :: Bool
- annotations :: [(ApiAnnKey, [SrcSpan])]
- comment_q :: [Located AnnotationComment]
- annotations_comments :: [(SrcSpan, [Located AnnotationComment])]

newtype P a #

Constructors

P |

Fields

- unP :: PState -> ParseResult a

Instances

Monad P # |
Methods (>>=) :: P a -> (a -> P b) -> P b Source # (>>) :: P a -> P b -> P b Source # return :: a -> P a Source # fail :: String -> P a Source #
Functor P # |
Methods fmap :: (a -> b) -> P a -> P b Source # (<$) :: a -> P b -> P a Source #
MonadFail P # |
Methods fail :: String -> P a Source #
Applicative P # |
Methods pure :: a -> P a Source # (<*>) :: P (a -> b) -> P a -> P b Source # liftA2 :: (a -> b -> c) -> P a -> P b -> P c Source # (*>) :: P a -> P b -> P b Source # (<*) :: P a -> P b -> P a Source #

data ParseResult a #

Constructors

POk PState a |
PFailed SrcSpan MsgDoc |

mkParserFlags :: DynFlags -> ParserFlags #

Extracts the flag information needed for parsing

data ParserFlags #

The subset of the `DynFlags` used by the parser

Constructors

ParserFlags |

Fields

- pWarningFlags :: IntSet
- pExtensionFlags :: IntSet
- pThisPackage :: UnitId

  key of package currently being compiled

- pExtsBitmap :: !ExtsBitmap

  bitmap of permitted extensions

getSrcLoc :: P RealSrcLoc #

getPState :: P PState #

extopt :: Extension -> ParserFlags -> Bool #

Test whether a `Extension` is set

withThisPackage :: (UnitId -> a) -> P a #

failLocMsgP :: RealSrcLoc -> RealSrcLoc -> String -> P a #

failSpanMsgP :: SrcSpan -> SDoc -> P a #

srcParseFail :: P a #

getMessages :: PState -> DynFlags -> Messages #

popContext :: P () #

pushModuleContext :: P () #

setLastToken :: RealSrcSpan -> Int -> P () #

setSrcLoc :: RealSrcLoc -> P () #

activeContext :: P Bool #

nextIsEOF :: P Bool #

getLexState :: P Int #

popLexState :: P Int #

pushLexState :: Int -> P () #

extension :: (ExtsBitmap -> Bool) -> P Bool #

bangPatEnabled :: ExtsBitmap -> Bool #

datatypeContextsEnabled :: ExtsBitmap -> Bool #

traditionalRecordSyntaxEnabled :: ExtsBitmap -> Bool #

explicitForallEnabled :: ExtsBitmap -> Bool #

inRulePrag :: ExtsBitmap -> Bool #

explicitNamespacesEnabled :: ExtsBitmap -> Bool #

patternSynonymsEnabled :: ExtsBitmap -> Bool #

sccProfilingOn :: ExtsBitmap -> Bool #

hpcEnabled :: ExtsBitmap -> Bool #

addWarning :: WarningFlag -> SrcSpan -> SDoc -> P () #

lexTokenStream :: StringBuffer -> RealSrcLoc -> DynFlags -> ParseResult [Located Token] #

addAnnotation :: SrcSpan -> AnnKeywordId -> SrcSpan -> P () #

type AddAnn = SrcSpan -> P () #

Encapsulated call to addAnnotation, requiring only the SrcSpan of the AST construct the annotation belongs to; together with the AnnKeywordId, this is the key of the annotation map.

This type is useful for places in the parser where it is not yet known what SrcSpan an annotation should be added to. The most common situation is when we are parsing a list: the annotations need to be associated with the AST element that *contains* the list, not the list itself. `AddAnn` lets us defer adding the annotations until we finish parsing the list and are now parsing the enclosing element; we then apply the `AddAnn` to associate the annotations. Another common situation is where a common fragment of the AST has been factored out but there is no separate AST node for this fragment (this occurs in class and data declarations). In this case, the annotation belongs to the parent data declaration.

The usual way an `AddAnn` is created is using the `mj` ("make jump") function, and then it can be discharged using the `ams` function.

addAnnsAt :: SrcSpan -> [AddAnn] -> P () #

Given a location and a list of AddAnn, apply them all to the location.

mkParensApiAnn :: SrcSpan -> [AddAnn] #

Given a `SrcSpan` that surrounds a `HsPar` or `HsParTy`, generate `AddAnn` values for the opening and closing bordering on the start and end of the span

commentToAnnotation :: Located Token -> Located AnnotationComment #

moveAnnotations :: SrcSpan -> SrcSpan -> P () #

Move the annotations and comments belonging to the `old` span to the `new` one.