Merge remote-tracking branch 'origin/master' into pending
This commit is contained in:
commit
7d549d67c6
|
@ -49,6 +49,7 @@ import qualified Data.Aeson as A
|
|||
import qualified Data.Aeson.Encoding as A
|
||||
import Data.Align (alignWith)
|
||||
import Data.Array
|
||||
import Data.Bits
|
||||
import Data.ByteString (ByteString)
|
||||
import qualified Data.ByteString as B
|
||||
import qualified Data.ByteString.Lazy as LBS
|
||||
|
@ -153,6 +154,9 @@ builtinsList = sequence [
|
|||
, add Normal "attrNames" attrNames
|
||||
, add Normal "attrValues" attrValues
|
||||
, add TopLevel "baseNameOf" baseNameOf
|
||||
, add2 Normal "bitAnd" bitAnd
|
||||
, add2 Normal "bitOr" bitOr
|
||||
, add2 Normal "bitXor" bitXor
|
||||
, add2 Normal "catAttrs" catAttrs
|
||||
, add2 Normal "compareVersions" compareVersions_
|
||||
, add Normal "concatLists" concatLists
|
||||
|
@ -583,6 +587,21 @@ baseNameOf x = x >>= \case
|
|||
NVPath path -> pure $ nvPath $ takeFileName path
|
||||
v -> throwError $ ErrorCall $ "dirOf: expected string or path, got " ++ show v
|
||||
|
||||
bitAnd :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)
|
||||
bitAnd x y =
|
||||
fromValue @Integer x >>= \a ->
|
||||
fromValue @Integer y >>= \b -> toNix (a .&. b)
|
||||
|
||||
bitOr :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)
|
||||
bitOr x y =
|
||||
fromValue @Integer x >>= \a ->
|
||||
fromValue @Integer y >>= \b -> toNix (a .|. b)
|
||||
|
||||
bitXor :: forall e m. MonadNix e m => m (NValue m) -> m (NValue m) -> m (NValue m)
|
||||
bitXor x y =
|
||||
fromValue @Integer x >>= \a ->
|
||||
fromValue @Integer y >>= \b -> toNix (a `xor` b)
|
||||
|
||||
dirOf :: MonadNix e m => m (NValue m) -> m (NValue m)
|
||||
dirOf x = x >>= \case
|
||||
NVStr path ctx -> pure $ nvStr (Text.pack $ takeDirectory $ Text.unpack path) ctx
|
||||
|
|
|
@ -38,6 +38,13 @@ case_zero_div = do
|
|||
assertNixEvalThrows "builtins.div 1 0.0"
|
||||
assertNixEvalThrows "builtins.div 1.0 0.0"
|
||||
|
||||
case_bit_ops = do
|
||||
-- mic92 (2018-08-20): change to constantEqualText,
|
||||
-- when hnix's nix fork supports bitAnd/bitOr/bitXor
|
||||
constantEqualText' "0" "builtins.bitAnd 1 0"
|
||||
constantEqualText' "1" "builtins.bitOr 1 1"
|
||||
constantEqualText' "3" "builtins.bitXor 1 2"
|
||||
|
||||
case_basic_function =
|
||||
constantEqualText "2" "(a: a) 2"
|
||||
|
||||
|
|
Loading…
Reference in a new issue