summaryrefslogtreecommitdiff
path: root/compiler/Language/Haskell
diff options
context:
space:
mode:
authorBen Orchard <thefirstmuffinman@gmail.com>2022-05-24 14:18:45 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2023-05-03 20:16:18 -0400
commit931c8d82f28fb98a7e0ad0a837eff05c08021cbe (patch)
tree2c23bfc55f915762e43d4cf87aff21991b8a73d0 /compiler/Language/Haskell
parent00a8a5ff9abf5bb1a0c2a9225c7bca5ec3bdf306 (diff)
downloadhaskell-931c8d82f28fb98a7e0ad0a837eff05c08021cbe.tar.gz
Add sized primitive literal syntax
Adds a new LANGUAGE pragma ExtendedLiterals, which enables defining unboxed numeric literals such as `0xFF#Word8 :: Word8#`. Implements GHC proposal 0451: https://github.com/ghc-proposals/ghc-proposals/blob/b384a538b34f79d18a0201455b7b3c473bc8c936/proposals/0451-sized-literals.rst Fixes #21422. Bumps haddock submodule. Co-authored-by: Krzysztof Gogolewski <krzysztof.gogolewski@tweag.io>
Diffstat (limited to 'compiler/Language/Haskell')
-rw-r--r--compiler/Language/Haskell/Syntax/Extension.hs6
-rw-r--r--compiler/Language/Haskell/Syntax/Lit.hs13
2 files changed, 18 insertions, 1 deletions
diff --git a/compiler/Language/Haskell/Syntax/Extension.hs b/compiler/Language/Haskell/Syntax/Extension.hs
index b184f1f46b..0072e60ab6 100644
--- a/compiler/Language/Haskell/Syntax/Extension.hs
+++ b/compiler/Language/Haskell/Syntax/Extension.hs
@@ -568,7 +568,13 @@ type family XHsStringPrim x
type family XHsInt x
type family XHsIntPrim x
type family XHsWordPrim x
+type family XHsInt8Prim x
+type family XHsInt16Prim x
+type family XHsInt32Prim x
type family XHsInt64Prim x
+type family XHsWord8Prim x
+type family XHsWord16Prim x
+type family XHsWord32Prim x
type family XHsWord64Prim x
type family XHsInteger x
type family XHsRat x
diff --git a/compiler/Language/Haskell/Syntax/Lit.hs b/compiler/Language/Haskell/Syntax/Lit.hs
index 564d5660dd..f0b9d72fad 100644
--- a/compiler/Language/Haskell/Syntax/Lit.hs
+++ b/compiler/Language/Haskell/Syntax/Lit.hs
@@ -63,8 +63,20 @@ data HsLit x
-- ^ literal @Int#@
| HsWordPrim (XHsWordPrim x) {- SourceText -} Integer
-- ^ literal @Word#@
+ | HsInt8Prim (XHsInt8Prim x) {- SourceText -} Integer
+ -- ^ literal @Int8#@
+ | HsInt16Prim (XHsInt16Prim x) {- SourceText -} Integer
+ -- ^ literal @Int16#@
+ | HsInt32Prim (XHsInt32Prim x) {- SourceText -} Integer
+ -- ^ literal @Int32#@
| HsInt64Prim (XHsInt64Prim x) {- SourceText -} Integer
-- ^ literal @Int64#@
+ | HsWord8Prim (XHsWord8Prim x) {- SourceText -} Integer
+ -- ^ literal @Word8#@
+ | HsWord16Prim (XHsWord16Prim x) {- SourceText -} Integer
+ -- ^ literal @Word16#@
+ | HsWord32Prim (XHsWord32Prim x) {- SourceText -} Integer
+ -- ^ literal @Word32#@
| HsWord64Prim (XHsWord64Prim x) {- SourceText -} Integer
-- ^ literal @Word64#@
| HsInteger (XHsInteger x) {- SourceText -} Integer Type
@@ -149,4 +161,3 @@ instance Ord OverLitVal where
compare (HsIsString _ s1) (HsIsString _ s2) = s1 `lexicalCompareFS` s2
compare (HsIsString _ _) (HsIntegral _) = GT
compare (HsIsString _ _) (HsFractional _) = GT
-