Inline some functions on the critical path

This commit is contained in:
Eelco Dolstra 2013-10-28 07:51:46 +01:00
parent 9769671260
commit b479dac8df
3 changed files with 17 additions and 14 deletions

View file

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

View file

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

View file

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