summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-10-28 07:51:46 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-10-28 22:45:55 +0100
commitb479dac8dfe3baefe5a080a2f17b41fd1ef37025 (patch)
treec5620c1a1f0a3321a42919b02e0281348a9ea497
parent97696712600302690f55c0efe8d20ef101077749 (diff)
downloadnixpkgs-b479dac8dfe3baefe5a080a2f17b41fd1ef37025.tar
nixpkgs-b479dac8dfe3baefe5a080a2f17b41fd1ef37025.tar.gz
nixpkgs-b479dac8dfe3baefe5a080a2f17b41fd1ef37025.tar.bz2
nixpkgs-b479dac8dfe3baefe5a080a2f17b41fd1ef37025.tar.lz
nixpkgs-b479dac8dfe3baefe5a080a2f17b41fd1ef37025.tar.xz
nixpkgs-b479dac8dfe3baefe5a080a2f17b41fd1ef37025.tar.zst
nixpkgs-b479dac8dfe3baefe5a080a2f17b41fd1ef37025.zip
Inline some functions on the critical path
-rw-r--r--lib/attrsets.nix7
-rw-r--r--lib/modules.nix22
-rw-r--r--lib/types.nix2
3 files changed, 17 insertions, 14 deletions
diff --git a/lib/attrsets.nix b/lib/attrsets.nix
index 40bc1667b85..7c93d8698de 100644
--- a/lib/attrsets.nix
+++ b/lib/attrsets.nix
@@ -29,9 +29,8 @@ rec {
      ["x" "y"] applied with some value v returns `x.y = v;' */
   setAttrByPath = attrPath: value:
     if attrPath == [] then value
-    else listToAttrs [(
-      nameValuePair (head attrPath) (setAttrByPath (tail attrPath) value)
-    )];
+    else listToAttrs
+      [ { name = head attrPath; value = setAttrByPath (tail attrPath) value; } ];
 
 
   getAttrFromPath = attrPath: set:
@@ -133,7 +132,7 @@ rec {
        => { x = "x-foo"; y = "y-bar"; }
   */
   mapAttrs = f: set:
-    listToAttrs (map (attr: nameValuePair attr (f attr (getAttr attr set))) (attrNames set));
+    listToAttrs (map (attr: { name = attr; value = f attr (getAttr attr set); }) (attrNames set));
 
 
   /* Like `mapAttrs', but allows the name of each attribute to be
diff --git a/lib/modules.nix b/lib/modules.nix
index 3bb5023cb99..d1fcfbc8fe8 100644
--- a/lib/modules.nix
+++ b/lib/modules.nix
@@ -75,20 +75,23 @@ rec {
           loc' = loc ++ [name];
           # Get all submodules that declare ‘name’.
           decls = concatLists (map (m:
-            optional (hasAttr name m.options)
-              { inherit (m) file; options = getAttr name m.options; }
+            if hasAttr name m.options
+              then [ { inherit (m) file; options = getAttr name m.options; } ]
+              else []
             ) options);
           # Get all submodules that define ‘name’.
           defns = concatLists (map (m:
-            optionals (hasAttr name m.config)
-              (map (config: { inherit (m) file; inherit config; })
-                (pushDownProperties (getAttr name m.config)))
+            if hasAttr name m.config
+              then map (config: { inherit (m) file; inherit config; })
+                (pushDownProperties (getAttr name m.config))
+              else []
             ) configs);
           nrOptions = count (m: isOption m.options) decls;
           # Process mkMerge and mkIf properties.
           defns' = concatMap (m:
-            optionals (hasAttr name m.config)
-              (map (m': { inherit (m) file; value = m'; }) (dischargeProperties (getAttr name m.config)))
+            if hasAttr name m.config
+              then map (m': { inherit (m) file; value = m'; }) (dischargeProperties (getAttr name m.config))
+              else []
             ) configs;
         in
           if nrOptions == length decls then
@@ -123,7 +126,7 @@ rec {
       else
         opt.options // res //
           { declarations = [opt.file] ++ res.declarations;
-            options = optionals (opt.options ? options) (toList opt.options.options ++ res.options);
+            options = if opt.options ? options then [(toList opt.options.options ++ res.options)] else [];
           }
     ) { declarations = []; options = []; } opts;
 
@@ -133,7 +136,8 @@ rec {
     let
       # Process mkOverride properties, adding in the default
       # value specified in the option declaration (if any).
-      defsFinal = filterOverrides (optional (opt ? default) ({ file = head opt.declarations; value = mkOptionDefault opt.default; }) ++ defs);
+      defsFinal = filterOverrides
+        ((if opt ? default then [{ file = head opt.declarations; value = mkOptionDefault opt.default; }] else []) ++ defs);
       # Type-check the remaining definitions, and merge them if
       # possible.
       merged =
diff --git a/lib/types.nix b/lib/types.nix
index aa8a371d953..7cfd8e606d7 100644
--- a/lib/types.nix
+++ b/lib/types.nix
@@ -116,7 +116,7 @@ rec {
           if isList def then
             listToAttrs (
               flip imap def (elemIdx: elem:
-                nameValuePair "unnamed-${toString defIdx}.${toString elemIdx}" elem))
+                { name = "unnamed-${toString defIdx}.${toString elemIdx}"; value = elem; }))
           else
             def;
         listOnly = listOf elemType;