Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Glasgow Haskell Compiler
Packages
Cabal
Commits
883b3c30
Commit
883b3c30
authored
Oct 03, 2016
by
Duncan Coutts
Committed by
Herbert Valerio Riedel
Oct 04, 2016
Browse files
Optimise Distribution.Version.mkVersion
parent
e14da30b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Cabal/Distribution/Version.hs
View file @
883b3c30
...
...
@@ -168,24 +168,55 @@ instance Text Version where
mkVersion
::
[
Int
]
->
Version
-- TODO: add validity check; disallow 'mkVersion []' (we have
-- 'nullVersion' for that)
mkVersion
ns
=
case
ns
of
[]
->
nullVersion
[
v1
]
|
v1
<=
0xfffe
->
PV0
(
mkW64
(
v1
+
1
)
0
0
0
)
[
v1
,
v2
]
|
v1
<=
0xfffe
,
v2
<=
0xfffe
->
PV0
(
mkW64
(
v1
+
1
)
(
v2
+
1
)
0
0
)
[
v1
,
v2
,
v3
]
|
v1
<=
0xfffe
,
v2
<=
0xfffe
,
v3
<=
0xfffe
->
PV0
(
mkW64
(
v1
+
1
)
(
v2
+
1
)
(
v3
+
1
)
0
)
[
v1
,
v2
,
v3
,
v4
]
|
v1
<=
0xfffe
,
v2
<=
0xfffe
,
v3
<=
0xfffe
,
v4
<=
0xfffe
->
PV0
(
mkW64
(
v1
+
1
)
(
v2
+
1
)
(
v3
+
1
)
(
v4
+
1
))
v1
:
vs
->
PV1
v1
vs
mkVersion
[]
=
nullVersion
mkVersion
(
v1
:
[]
)
|
inWord16VerRep1
v1
=
PV0
(
mkWord64VerRep1
v1
)
|
otherwise
=
PV1
v1
[]
where
{-# INLINABLE mkW64 #-}
mkW64
::
Int
->
Int
->
Int
->
Int
->
Word64
mkW64
v1
v2
v3
v4
=
(
fromIntegral
v1
`
shiftL
`
48
)
.|.
(
fromIntegral
v2
`
shiftL
`
32
)
.|.
(
fromIntegral
v3
`
shiftL
`
16
)
.|.
fromIntegral
v4
inWord16VerRep1
x1
=
inWord16
(
x1
.|.
(
x1
+
1
))
mkWord64VerRep1
y1
=
mkWord64VerRep
(
y1
+
1
)
0
0
0
mkVersion
(
v1
:
vs
@
(
v2
:
[]
))
|
inWord16VerRep2
v1
v2
=
PV0
(
mkWord64VerRep2
v1
v2
)
|
otherwise
=
PV1
v1
vs
where
inWord16VerRep2
x1
x2
=
inWord16
(
x1
.|.
(
x1
+
1
)
.|.
x2
.|.
(
x2
+
1
))
mkWord64VerRep2
y1
y2
=
mkWord64VerRep
(
y1
+
1
)
(
y2
+
1
)
0
0
mkVersion
(
v1
:
vs
@
(
v2
:
v3
:
[]
))
|
inWord16VerRep3
v1
v2
v3
=
PV0
(
mkWord64VerRep3
v1
v2
v3
)
|
otherwise
=
PV1
v1
vs
where
inWord16VerRep3
x1
x2
x3
=
inWord16
(
x1
.|.
(
x1
+
1
)
.|.
x2
.|.
(
x2
+
1
)
.|.
x3
.|.
(
x3
+
1
))
mkWord64VerRep3
y1
y2
y3
=
mkWord64VerRep
(
y1
+
1
)
(
y2
+
1
)
(
y3
+
1
)
0
mkVersion
(
v1
:
vs
@
(
v2
:
v3
:
v4
:
[]
))
|
inWord16VerRep4
v1
v2
v3
v4
=
PV0
(
mkWord64VerRep4
v1
v2
v3
v4
)
|
otherwise
=
PV1
v1
vs
where
inWord16VerRep4
x1
x2
x3
x4
=
inWord16
(
x1
.|.
(
x1
+
1
)
.|.
x2
.|.
(
x2
+
1
)
.|.
x3
.|.
(
x3
+
1
)
.|.
x4
.|.
(
x4
+
1
))
mkWord64VerRep4
y1
y2
y3
y4
=
mkWord64VerRep
(
y1
+
1
)
(
y2
+
1
)
(
y3
+
1
)
(
y4
+
1
)
mkVersion
(
v1
:
vs
)
=
PV1
v1
vs
{-# INLINE mkWord64VerRep #-}
mkWord64VerRep
::
Int
->
Int
->
Int
->
Int
->
Word64
mkWord64VerRep
v1
v2
v3
v4
=
(
fromIntegral
v1
`
shiftL
`
48
)
.|.
(
fromIntegral
v2
`
shiftL
`
32
)
.|.
(
fromIntegral
v3
`
shiftL
`
16
)
.|.
fromIntegral
v4
{-# INLINE inWord16 #-}
inWord16
::
Int
->
Bool
inWord16
x
=
(
fromIntegral
x
::
Word
)
<=
0xffff
-- | Variant of 'Version' which converts a "Data.Version" 'Version'
-- into Cabal's 'Version' type.
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment