Merge pull request #351 from Mic92/master
add builtins.{bitAnd,bitOr,bitXor)
This commit is contained in:
commit
517a013a59
|
@ -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
|
||||
|
@ -154,6 +155,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
|
||||
|
@ -584,6 +588,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