lib: fix functionArgs for functors

`functionArgs` should give valid results on
functions that have been identified with `lib.isFunction`
instead of erroring out.
This commit is contained in:
David Arnold 2021-07-23 14:10:31 -05:00
parent d905ae22c6
commit cf8e219b7e
No known key found for this signature in database
GPG Key ID: AB15A6AF1101390D
2 changed files with 14 additions and 1 deletions

View File

@ -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 = {

View File

@ -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.