Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support GHC 9.4 #298

Merged
merged 6 commits into from
Sep 24, 2022
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 15 additions & 10 deletions .github/workflows/haskell-ci.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# This GitHub workflow config has been generated by a script via
#
# haskell-ci 'github' '--config=cabal.haskell-ci' 'cabal.project'
# haskell-ci 'github' 'cabal.project'
#
# To regenerate the script (for example after adjusting tested-with) run
#
# haskell-ci regenerate
#
# For more information, see https://github.com/haskell-CI/haskell-ci
#
# version: 0.14.3
# version: 0.15.20220822
#
# REGENDATA ("0.14.3",["github","--config=cabal.haskell-ci","cabal.project"])
# REGENDATA ("0.15.20220822",["github","cabal.project"])
#
name: Haskell-CI
on:
Expand All @@ -19,7 +19,7 @@ on:
jobs:
linux:
name: Haskell-CI - Linux - ${{ matrix.compiler }}
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
timeout-minutes:
60
container:
Expand All @@ -28,6 +28,11 @@ jobs:
strategy:
matrix:
include:
- compiler: ghc-9.4.1
compilerKind: ghc
compilerVersion: 9.4.1
FinleyMcIlwaine marked this conversation as resolved.
Show resolved Hide resolved
setup-method: ghcup
allow-failure: false
- compiler: ghc-9.2.2
compilerKind: ghc
compilerVersion: 9.2.2
Expand Down Expand Up @@ -76,18 +81,18 @@ jobs:
apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5
if [ "${{ matrix.setup-method }}" = ghcup ]; then
mkdir -p "$HOME/.ghcup/bin"
curl -sL https://downloads.haskell.org/ghcup/0.1.17.5/x86_64-linux-ghcup-0.1.17.5 > "$HOME/.ghcup/bin/ghcup"
curl -sL https://downloads.haskell.org/ghcup/0.1.18.0/x86_64-linux-ghcup-0.1.18.0 > "$HOME/.ghcup/bin/ghcup"
chmod a+x "$HOME/.ghcup/bin/ghcup"
"$HOME/.ghcup/bin/ghcup" install ghc "$HCVER"
"$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0
"$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false)
"$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
else
apt-add-repository -y 'ppa:hvr/ghc'
apt-get update
apt-get install -y "$HCNAME"
mkdir -p "$HOME/.ghcup/bin"
curl -sL https://downloads.haskell.org/ghcup/0.1.17.5/x86_64-linux-ghcup-0.1.17.5 > "$HOME/.ghcup/bin/ghcup"
curl -sL https://downloads.haskell.org/ghcup/0.1.18.0/x86_64-linux-ghcup-0.1.18.0 > "$HOME/.ghcup/bin/ghcup"
chmod a+x "$HOME/.ghcup/bin/ghcup"
"$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0
"$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false)
fi
env:
HCKIND: ${{ matrix.compilerKind }}
Expand Down Expand Up @@ -262,7 +267,7 @@ jobs:
${CABAL} -vnormal check
- name: haddock
run: |
$CABAL v2-haddock $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
$CABAL v2-haddock --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
- name: unconstrained build
run: |
rm -f cabal.project.local
Expand Down
5 changes: 3 additions & 2 deletions binary-serialise-cbor/binary-serialise-cbor.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ tested-with:
GHC == 8.8.3,
GHC == 8.10.1,
GHC == 9.0.1,
GHC == 9.2.2
GHC == 9.2.2,
GHC == 9.4.1

description:
This package is a shim around @cborg@, exposing an interface compatible with
Expand Down Expand Up @@ -49,7 +50,7 @@ library
exposed-modules: Data.Binary.Serialise.CBOR.Read

build-depends:
base >= 4.8 && < 4.17,
base >= 4.8 && < 4.18,
bytestring < 1.0,
cborg == 0.2.*,
serialise == 0.2.*
Expand Down
7 changes: 4 additions & 3 deletions cbor-tool/cbor-tool.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,17 @@ tested-with:
GHC == 8.8.3,
GHC == 8.10.1,
GHC == 9.0.1,
GHC == 9.2.2
GHC == 9.2.2,
GHC == 9.4.1

executable cbor-tool
main-is: Main.hs
other-extensions: CPP, BangPatterns
ghc-options: -Wall
build-depends:
base >=4.7 && <4.17,
base >=4.7 && <4.18,
filepath >=1.0 && <1.5,
aeson >=0.7 && <2.1,
aeson >=0.7 && <2.2,
aeson-pretty >=0.8 && <0.9,
scientific >=0.3 && <0.4,
bytestring >=0.10 && <0.12,
Expand Down
9 changes: 5 additions & 4 deletions cborg-json/cborg-json.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,15 @@ tested-with:
GHC == 8.8.3,
GHC == 8.10.1,
GHC == 9.0.1,
GHC == 9.2.2
GHC == 9.2.2,
GHC == 9.4.1

library
exposed-modules: Codec.CBOR.JSON
ghc-options: -Wall
build-depends:
base >=4.7 && < 4.17,
aeson >=0.7 && <2.1,
base >=4.7 && < 4.18,
aeson >=0.7 && <2.2,
aeson-pretty >=0.8 && <0.9,
unordered-containers >=0.2 && <0.3,
scientific >=0.3 && <0.4,
Expand All @@ -58,7 +59,7 @@ benchmark bench
other-modules:

build-depends:
base >= 4.6 && < 4.17,
base >= 4.6 && < 4.18,
cborg ,
cborg-json ,
aeson ,
Expand Down
11 changes: 6 additions & 5 deletions cborg/cborg.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ tested-with:
GHC == 8.8.3,
GHC == 8.10.1,
GHC == 9.0.1,
GHC == 9.2.2
GHC == 9.2.2,
GHC == 9.4.1

extra-source-files:
ChangeLog.md
Expand Down Expand Up @@ -90,11 +91,11 @@ library

build-depends:
array >= 0.4 && < 0.6,
base >= 4.8 && < 4.17,
base >= 4.8 && < 4.18,
bytestring >= 0.10.4 && < 0.12,
containers >= 0.5 && < 0.7,
deepseq >= 1.0 && < 1.5,
ghc-prim >= 0.3.1.0 && < 0.9,
ghc-prim >= 0.3.1.0 && < 0.10,
half >= 0.2.2.3 && < 0.4,
primitive >= 0.5 && < 0.8,
text >= 1.1 && < 1.3 || >= 2.0 && <2.1
Expand Down Expand Up @@ -148,12 +149,12 @@ test-suite tests

build-depends:
array >= 0.4 && < 0.6,
base >= 4.7 && < 4.17,
base >= 4.7 && < 4.18,
base-orphans,
bytestring >= 0.10.4 && < 0.12,
text >= 1.1 && < 2.1,
cborg,
aeson >= 0.7 && < 2.1,
aeson >= 0.7 && < 2.2,
base64-bytestring >= 1.0 && < 1.3,
base16-bytestring >= 1.0 && < 1.1,
deepseq >= 1.0 && < 1.5,
Expand Down
29 changes: 26 additions & 3 deletions cborg/src/Codec/CBOR/Decoding.hs
Original file line number Diff line number Diff line change
Expand Up @@ -328,8 +328,13 @@ toWord8 n = W8# (wordToWord8# n)
toWord16 n = W16# (wordToWord16# n)
toWord32 n = W32# (wordToWord32# n)
#if WORD_SIZE_IN_BITS == 64
#if MIN_VERSION_base(4,17,0)
toInt64 n = I64# (intToInt64# n)
toWord64 n = W64# (wordToWord64# n)
#else
toInt64 n = I64# n
toWord64 n = W64# n
#endif
#else
toInt64 n = I64# (intToInt64# n)
toWord64 n = W64# (wordToWord64# n)
Expand Down Expand Up @@ -748,7 +753,13 @@ decodeTag64 :: Decoder s Word64
{-# INLINE decodeTag64 #-}
decodeTag64 =
#if defined(ARCH_64bit)
Decoder (\k -> return (ConsumeTag (\w# -> k (W64# w#))))
Decoder (\k -> return (ConsumeTag (\w# -> k (W64#
#if MIN_VERSION_base(4,17,0)
(wordToWord64# w#)
#else
w#
#endif
))))
#else
Decoder (\k -> return (ConsumeTag64 (\w64# -> k (W64# w64#))))
#endif
Expand All @@ -769,7 +780,13 @@ decodeTag64Canonical :: Decoder s Word64
{-# INLINE decodeTag64Canonical #-}
decodeTag64Canonical =
#if defined(ARCH_64bit)
Decoder (\k -> return (ConsumeTagCanonical (\w# -> k (W64# w#))))
Decoder (\k -> return (ConsumeTagCanonical (\w# -> k (W64#
#if MIN_VERSION_base(4,17,0)
(wordToWord64# w#)
#else
w#
#endif
))))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be a CPP macro instead? Using #if’s everywhere feels messy to me.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the limit of my CPP knowledge - I'd love it if there was an easier way!

#else
Decoder (\k -> return (ConsumeTag64Canonical (\w64# -> k (W64# w64#))))
#endif
Expand Down Expand Up @@ -968,7 +985,13 @@ type ByteOffset = Int64
--
-- @since 0.2.2.0
peekByteOffset :: Decoder s ByteOffset
peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64# off#))))
peekByteOffset = Decoder (\k -> return (PeekByteOffset (\off# -> k (I64#
#if MIN_VERSION_base(4,17,0)
(intToInt64# off#)
#else
off#
#endif
))))
{-# INLINE peekByteOffset #-}

-- | This captures the pattern of getting the byte offsets before and after
Expand Down
16 changes: 14 additions & 2 deletions cborg/src/Codec/CBOR/FlatTerm.hs
Original file line number Diff line number Diff line change
Expand Up @@ -170,12 +170,24 @@ decodePreEncoded bs0 =
-- always starts by requesting initial input. Only decoders that
-- fail or return a value without looking at their input can give
-- a different initial result.
Read.Partial k <- Read.deserialiseIncremental decodeTermToken
result <- Read.deserialiseIncremental decodeTermToken
let
k =
case result of
Read.Partial a -> a
_ -> error "Failed to get a Partial"
k (Just bs)
collectOutput next

collectOutput :: Read.IDecode s TermToken -> ST.Lazy.ST s FlatTerm
collectOutput (Read.Fail _ _ err) = fail $ "toFlatTerm: encodePreEncoded "
collectOutput (Read.Fail _ _ err) =
#if MIN_VERSION_base(4,17,0)
error
#else
fail
#endif

$ "toFlatTerm: encodePreEncoded "
++ "used with invalid CBOR: "
++ show err
collectOutput (Read.Partial k) = ST.Lazy.strictToLazyST (k Nothing)
Expand Down
36 changes: 27 additions & 9 deletions cborg/src/Codec/CBOR/Magic.hs
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,11 @@ grabWord16 (Ptr ip#) = W16# (narrow16Word# (byteSwap16# (indexWord16OffAddr# ip#
grabWord32 (Ptr ip#) = W32# (narrow32Word# (byteSwap32# (indexWord32OffAddr# ip# 0#)))
#endif
#if defined(ARCH_64bit)
#if MIN_VERSION_base(4,17,0)
grabWord64 (Ptr ip#) = W64# (wordToWord64# (byteSwap# (word64ToWord# (indexWord64OffAddr# ip# 0#))))
#else
grabWord64 (Ptr ip#) = W64# (byteSwap# (indexWord64OffAddr# ip# 0#))
#endif
#else
grabWord64 (Ptr ip#) = W64# (byteSwap64# (word64ToWord# (indexWord64OffAddr# ip# 0#)))
#endif
Expand Down Expand Up @@ -196,8 +200,8 @@ grabWord16 (Ptr ip#) =
where
#if MIN_VERSION_ghc_prim(0,8,0)
w16 w# = W16# (wordToWord16# (word8ToWord# w#))
#else
w16 w# = W16# w#
#else
w16 w# = W16# w#
#endif

grabWord32 (Ptr ip#) =
Expand All @@ -212,11 +216,11 @@ grabWord32 (Ptr ip#) =
w32 w1# `unsafeShiftL` 16 .|.
w32 w2# `unsafeShiftL` 8 .|.
w32 w3#
where
where
#if MIN_VERSION_ghc_prim(0,8,0)
w32 w# = W32# (wordToWord32# (word8ToWord# w#))
#else
w32 w# = W32# w#
#else
w32 w# = W32# w#
#endif

grabWord64 (Ptr ip#) =
Expand Down Expand Up @@ -247,14 +251,14 @@ grabWord64 (Ptr ip#) =
#if MIN_VERSION_ghc_prim(0,8,0)
toWord :: Word8# -> Word#
toWord w# = word8ToWord# w#
#else
#else
toWord :: Word# -> Word#
toWord w# = w#
toWord w# = w#
#endif

#if WORD_SIZE_IN_BITS == 64
w64 w# = W64# (toWord w#)
#else
#else
w64 w# = W64# (wordToWord64# (toWord w#))
#endif

Expand Down Expand Up @@ -439,7 +443,11 @@ word8ToWord (W8# w#) = W# (word8ToWord# w#)
word16ToWord (W16# w#) = W# (word16ToWord# w#)
word32ToWord (W32# w#) = W# (word32ToWord# w#)
#if defined(ARCH_64bit)
#if MIN_VERSION_base(4,17,0)
word64ToWord (W64# w#) = W# (word64ToWord# w#)
#else
word64ToWord (W64# w#) = W# w#
#endif
#else
word64ToWord (W64# w64#) =
case isTrue# (w64# `leWord64#` wordToWord64# 0xffffffff##) of
Expand Down Expand Up @@ -492,8 +500,18 @@ word32ToInt (W32# w#) =

#if defined(ARCH_64bit)
word64ToInt (W64# w#) =
#if MIN_VERSION_base(4,17,0)
case isTrue# (word64ToWord# w# `ltWord#` 0x8000000000000000##) of
#else
case isTrue# (w# `ltWord#` 0x8000000000000000##) of
True -> Just (I# (word2Int# w#))
#endif
True ->
#if MIN_VERSION_base(4,17,0)
Just (I# (word2Int# (word64ToWord# w#)))

#else
Just (I# (word2Int# w#))
#endif
False -> Nothing
#else
word64ToInt (W64# w#) =
Expand Down
17 changes: 15 additions & 2 deletions cborg/src/Codec/CBOR/Read.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1270,7 +1270,14 @@ go_slow da bs !offset = do
!offset' = offset + intToInt64 (BS.length bs - BS.length bs')

SlowPeekByteOffset bs' k ->
lift (k off#) >>= \daz -> go_slow daz bs' offset'
lift
#if MIN_VERSION_base(4,17,0)
(k (int64ToInt# off#))
#else
(k off#)

#endif
>>= \daz -> go_slow daz bs' offset'
where
!offset'@(I64# off#) = offset + intToInt64 (BS.length bs - BS.length bs')

Expand Down Expand Up @@ -1373,7 +1380,13 @@ go_slow_overlapped da sz bs_cur bs_next !offset =

SlowPeekByteOffset bs_empty k ->
assert (BS.null bs_empty) $ do
lift (k off#) >>= \daz -> go_slow daz bs' offset'
lift
#if MIN_VERSION_base(4,17,0)
(k (int64ToInt# off#))
#else
(k off#)
#endif
>>= \daz -> go_slow daz bs' offset'
where
!(I64# off#) = offset'

Expand Down
Loading