summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Arnold <dgx.arnold@gmail.com>2021-07-23 14:10:31 -0500
committergithub-actions[bot] <github-actions[bot]@users.noreply.github.com>2021-08-03 22:07:22 +0000
commite07870c95e51f34fcd40a7f353c96f84b23e24bf (patch)
tree55ec2b2bffa4f7d693b23c49dab337fb481ffc71
parentMerge pull request #131938 from chuahou/update-flameshot-backport-21.05 (diff)
downloadnixpkgs-e07870c95e51f34fcd40a7f353c96f84b23e24bf.tar.gz
lib: fix functionArgs for functors
`functionArgs` should give valid results on functions that have been identified with `lib.isFunction` instead of erroring out. (cherry picked from commit cf8e219b7e3c8933d6301175f2611990c5281ae9)
-rw-r--r--lib/tests/misc.nix10
-rw-r--r--lib/trivial.nix5
2 files changed, 14 insertions, 1 deletions
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix
index 0d249968402d..4b2e5afc1d60 100644
--- a/lib/tests/misc.nix
+++ b/lib/tests/misc.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 = {
diff --git a/lib/trivial.nix b/lib/trivial.nix
index f6f5da5998ff..48a1b128e2e2 100644
--- a/lib/trivial.nix
+++ b/lib/trivial.nix
@@ -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.