diff options
author | Vladislav Zavialov <vlad.z.4096@gmail.com> | 2022-04-07 21:46:10 +0300 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-04-08 13:58:19 -0400 |
commit | 0736e949b71a0c2b5eb404aac7a5883dd52b7b5c (patch) | |
tree | 40c719a82f0d0f3313f93548f1bb94f45e1e1f1f /compiler/GHC | |
parent | d448049040d8f7b9b75863b096d08d16d6810f96 (diff) | |
download | haskell-0736e949b71a0c2b5eb404aac7a5883dd52b7b5c.tar.gz |
Disallow (->) as a data constructor name (#16999)
The code was misusing isLexCon, which was never meant for validation.
In fact, its documentation states the following:
Use these functions to figure what kind of name a 'FastString'
represents; these functions do /not/ check that the identifier
is valid.
Ha! This sign can't stop me because I can't read.
The fix is to use okConOcc instead. The other checks (isTcOcc or
isDataOcc) seem superfluous, so I also removed those.
Diffstat (limited to 'compiler/GHC')
-rw-r--r-- | compiler/GHC/Parser/PostProcess.hs | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/compiler/GHC/Parser/PostProcess.hs b/compiler/GHC/Parser/PostProcess.hs index 1530e9ab12..8a89bef84d 100644 --- a/compiler/GHC/Parser/PostProcess.hs +++ b/compiler/GHC/Parser/PostProcess.hs @@ -134,7 +134,7 @@ import GHC.Parser.Types import GHC.Parser.Lexer import GHC.Parser.Errors.Types import GHC.Parser.Errors.Ppr () -import GHC.Utils.Lexeme ( isLexCon ) +import GHC.Utils.Lexeme ( okConOcc ) import GHC.Types.TyThing import GHC.Core.Type ( unrestrictedFunTyCon, Specificity(..) ) import GHC.Builtin.Types( cTupleTyConName, tupleTyCon, tupleDataCon, @@ -639,8 +639,7 @@ constructor, a type, or a context, we would need unlimited lookahead which -- See Note [Parsing data constructors is hard] tyConToDataCon :: LocatedN RdrName -> Either (MsgEnvelope PsMessage) (LocatedN RdrName) tyConToDataCon (L loc tc) - | isTcOcc occ || isDataOcc occ - , isLexCon (occNameFS occ) + | okConOcc (occNameString occ) = return (L loc (setRdrNameSpace tc srcDataName)) | otherwise |