lib: fix functionArgs for functors

`functionArgs` should give valid results on
functions that have been identified with `lib.isFunction`
instead of erroring out.
launchpad/nixpkgs/master
David Arnold 3 years ago
parent d905ae22c6
commit cf8e219b7e
No known key found for this signature in database
GPG Key ID: AB15A6AF1101390D
  1. 10
      lib/tests/misc.nix
  2. 5
      lib/trivial.nix

@ -132,6 +132,16 @@ runTests {
expected = [ 1 1 0 ];
};
testFunctionArgsFunctor = {
expr = functionArgs { __functor = self: { a, b }: null; };
expected = { a = false; b = false; };
};
testFunctionArgsSetFunctionArgs = {
expr = functionArgs (setFunctionArgs (args: args.x) { x = false; });
expected = { x = false; };
};
# STRINGS
testConcatMapStrings = {

@ -334,7 +334,10 @@ rec {
has the same return type and semantics as builtins.functionArgs.
setFunctionArgs : (a b) Map String Bool.
*/
functionArgs = f: f.__functionArgs or (builtins.functionArgs f);
functionArgs = f:
if f ? __functor
then f.__functionArgs or (lib.functionArgs (f.__functor f))
else builtins.functionArgs f;
/* Check whether something is a function or something
annotated with function args.

Loading…
Cancel
Save