about summary refs log tree commit diff
path: root/third_party
diff options
context:
space:
mode:
Diffstat (limited to 'third_party')
-rw-r--r--third_party/nix/src/libexpr/primops.cc5
-rw-r--r--third_party/nix/src/tests/lang/eval-okay-functionargs.exp2
-rw-r--r--third_party/nix/src/tests/lang/eval-okay-functionargs.nix11
-rw-r--r--third_party/nix/src/tests/lang/eval-okay-types.exp2
-rw-r--r--third_party/nix/src/tests/lang/eval-okay-types.nix1
5 files changed, 18 insertions, 3 deletions
diff --git a/third_party/nix/src/libexpr/primops.cc b/third_party/nix/src/libexpr/primops.cc
index 49c43556fe..710d214ce7 100644
--- a/third_party/nix/src/libexpr/primops.cc
+++ b/third_party/nix/src/libexpr/primops.cc
@@ -1369,6 +1369,11 @@ static void prim_catAttrs(EvalState& state, const Pos& pos, Value** args,
 static void prim_functionArgs(EvalState& state, const Pos& pos, Value** args,
                               Value& v) {
   state.forceValue(*args[0]);
+  if (args[0]->type == tPrimOpApp || args[0]->type == tPrimOp) {
+    // TODO(sterni): return set of formal arguments for fetch* primops
+    state.mkAttrs(v, 0);
+    return;
+  }
   if (args[0]->type != tLambda) {
     throw TypeError(format("'functionArgs' requires a function, at %1%") % pos);
   }
diff --git a/third_party/nix/src/tests/lang/eval-okay-functionargs.exp b/third_party/nix/src/tests/lang/eval-okay-functionargs.exp
index c1c9f8ffaf..f8ddea8e0b 100644
--- a/third_party/nix/src/tests/lang/eval-okay-functionargs.exp
+++ b/third_party/nix/src/tests/lang/eval-okay-functionargs.exp
@@ -1 +1 @@
-[ "stdenv" "fetchurl" "aterm-stdenv" "aterm-stdenv2" "libX11" "libXv" "mplayer-stdenv2.libXv-libX11" "mplayer-stdenv2.libXv-libX11_2" "nix-stdenv-aterm-stdenv" "nix-stdenv2-aterm2-stdenv2" ]
+[ { aterm = false; fetchurl = false; stdenv = false; } { color = false; name = true; } { } { } { } "stdenv" "fetchurl" "aterm-stdenv" "aterm-stdenv2" "libX11" "libXv" "mplayer-stdenv2.libXv-libX11" "mplayer-stdenv2.libXv-libX11_2" "nix-stdenv-aterm-stdenv" "nix-stdenv2-aterm2-stdenv2" ]
diff --git a/third_party/nix/src/tests/lang/eval-okay-functionargs.nix b/third_party/nix/src/tests/lang/eval-okay-functionargs.nix
index 68dca62ee1..205bbf307a 100644
--- a/third_party/nix/src/tests/lang/eval-okay-functionargs.nix
+++ b/third_party/nix/src/tests/lang/eval-okay-functionargs.nix
@@ -6,6 +6,14 @@ let
   atermFun = { stdenv, fetchurl }: { name = "aterm-${stdenv.name}"; };
   aterm2Fun = { stdenv, fetchurl }: { name = "aterm2-${stdenv.name}"; };
   nixFun = { stdenv, fetchurl, aterm }: { name = "nix-${stdenv.name}-${aterm.name}"; };
+
+  trivialFunctionArgsUsage = [
+    (builtins.functionArgs nixFun)
+    (builtins.functionArgs ({ name ? "Karl", color }: "${name} is ${color}"))
+    (builtins.functionArgs (x: y: x + y))
+    (builtins.functionArgs builtins.map)
+    (builtins.functionArgs builtins.fetchurl)
+  ];
   
   mplayerFun =
     { stdenv, fetchurl, enableX11 ? false, xorg ? null, enableFoo ? true, foo ? null  }:
@@ -67,7 +75,8 @@ let
   
 in
 
-  [ pkgs.stdenv.name
+  trivialFunctionArgsUsage ++ [
+    pkgs.stdenv.name
     pkgs.fetchurl.name
     pkgs.aterm.name
     pkgs2.aterm.name
diff --git a/third_party/nix/src/tests/lang/eval-okay-types.exp b/third_party/nix/src/tests/lang/eval-okay-types.exp
index 92a1532993..882c16dbfe 100644
--- a/third_party/nix/src/tests/lang/eval-okay-types.exp
+++ b/third_party/nix/src/tests/lang/eval-okay-types.exp
@@ -1 +1 @@
-[ true false true false true false true false true true true true true true true true true true true false true true true false "int" "bool" "string" "null" "set" "list" "lambda" "lambda" "lambda" "lambda" ]
+[ true false true true false true false true false true true true true true true true true true true true false true true true false "int" "bool" "string" "null" "set" "list" "lambda" "lambda" "lambda" "lambda" ]
diff --git a/third_party/nix/src/tests/lang/eval-okay-types.nix b/third_party/nix/src/tests/lang/eval-okay-types.nix
index 9b58be5d1d..cc51d8cb7a 100644
--- a/third_party/nix/src/tests/lang/eval-okay-types.nix
+++ b/third_party/nix/src/tests/lang/eval-okay-types.nix
@@ -3,6 +3,7 @@ with builtins;
 [ (isNull null)
   (isNull (x: x))
   (isFunction (x: x))
+  (isFunction functionArgs)
   (isFunction "fnord")
   (isString ("foo" + "bar"))
   (isString [ "x" ])