Remove mkThenElse and mkAlways

This commit is contained in:
Eelco Dolstra 2012-12-04 12:04:15 +01:00
parent 2b4fba3d03
commit 9a92f3fc35

View File

@ -25,7 +25,7 @@ rec {
# contains a _type attribute and a list of functions which are used to # contains a _type attribute and a list of functions which are used to
# evaluate this property. The content attribute is used to stack properties # evaluate this property. The content attribute is used to stack properties
# on top of each other. # on top of each other.
# #
# The optional functions which may be contained in the property attribute # The optional functions which may be contained in the property attribute
# are: # are:
# - onDelay: run on a copied property. # - onDelay: run on a copied property.
@ -41,7 +41,7 @@ rec {
# property and call the function `nul' on the final value which is not a # property and call the function `nul' on the final value which is not a
# property. The stack is traversed in reversed order. The `op' function # property. The stack is traversed in reversed order. The `op' function
# should expect a property with a content which have been modified. # should expect a property with a content which have been modified.
# #
# Warning: The `op' function expects only one argument in order to avoid # Warning: The `op' function expects only one argument in order to avoid
# calls to mkProperties as the argument is already a valid property which # calls to mkProperties as the argument is already a valid property which
# contains the result of the folding inside the content attribute. # contains the result of the folding inside the content attribute.
@ -225,45 +225,11 @@ rec {
inherit content; inherit content;
}; };
# Create a "ThenElse" property which contains choices being chosen by
# the evaluation of an "If" statement.
isThenElse = attrs: (typeOf attrs) == "then-else";
mkThenElse = attrs:
assert attrs ? thenPart && attrs ? elsePart;
__trace "Obsolete usage of mkThenElse, replace it by mkMerge."
mkProperty {
property = {
_type = "then-else";
onEval = val: throw "Missing mkIf statement.";
inherit (attrs) thenPart elsePart;
};
content = mkNotdef;
};
# Create an "Always" property removing/ ignoring all "If" statement.
isAlways = attrs: (typeOf attrs) == "always";
mkAlways = value:
mkProperty {
property = {
_type = "always";
onEval = p@{content, ...}: content;
inherit value;
};
content = mkNotdef;
};
mkAssert = assertion: message: content: mkAssert = assertion: message: content:
mkIf mkIf
(if assertion then true else throw "\nFailed assertion: ${message}") (if assertion then true else throw "\nFailed assertion: ${message}")
content; content;
# Remove all "If" statement defined on a value.
rmIf = foldProperty (
foldFilter isIf
({content, ...}: content)
id
) id;
# Evaluate the "If" statements when either "ThenElse" or "Always" # Evaluate the "If" statements when either "ThenElse" or "Always"
# statement is encountered. Otherwise it removes multiple If statements and # statement is encountered. Otherwise it removes multiple If statements and
# replaces them by one "If" statement where the condition is the list of all # replaces them by one "If" statement where the condition is the list of all
@ -274,8 +240,8 @@ rec {
# in the attribute list and attrs. # in the attribute list and attrs.
ifProps = ifProps =
foldProperty foldProperty
(foldFilter (p: isIf p || isThenElse p || isAlways p) (foldFilter (p: isIf p)
# then, push the codition inside the list list # then, push the condition inside the list list
(p@{property, content, ...}: (p@{property, content, ...}:
{ inherit (content) attrs; { inherit (content) attrs;
list = [property] ++ content.list; list = [property] ++ content.list;
@ -297,19 +263,7 @@ rec {
mkIf condition content mkIf condition content
else else
let p = head list; in let p = head list; in
evalIf content (condition && p.condition) (tail list);
# evaluate the condition.
if isThenElse p then
if condition then
copyProperties content p.thenPart
else
copyProperties content p.elsePart
# ignore the condition.
else if isAlways p then
copyProperties content p.value
# otherwise (isIf)
else
evalIf content (condition && p.condition) (tail list);
in in
evalIf ifProps.attrs true ifProps.list; evalIf ifProps.attrs true ifProps.list;