summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GLEP:73.mw11
1 files changed, 11 insertions, 0 deletions
diff --git a/GLEP:73.mw b/GLEP:73.mw
index 6b745df..7b040a8 100644
--- a/GLEP:73.mw
+++ b/GLEP:73.mw
@@ -212,6 +212,17 @@ The check for self-conflicting constraints is performed for every constraint sep
* for any ''c<sub>i</sub>'' in ''C'':
** there is at least one ''c<sub>j</sub>'' (''j ≠ i'', in the same ''C'') that is ''¬c<sub>i</sub>''.
+The check for attempting to force opposite values for a single flag is performed for every pair of constraints. Since it is symmetric, it is only necessary to perform it for unique pairs. For practical reasons, let's assume it is performed for every pair ''((C<sub>i</sub>, E<sub>i</sub>), (C<sub>j</sub>, E<sub>j</sub>))'', where ''j > i''. The pair is determined to force opposite values for a single flag if all of the following conditions are met:
+* ''E<sub>i</sub> = ¬E<sub>j</sub>'',
+* ''C<sub>i</sub>'' and ''C<sub>j</sub>'' can simultaneously evaluate to true,
+* ''C<sub>i</sub>'' can evaluate to true after applying all the constraints preceding it, with flags ''F = C<sub>i</sub> ∪ C<sub>j</sub>'',
+* ''C<sub>j</sub>'' can evaluate to true after applying all the constraints preceding it, with flags ''F = C<sub>i</sub> ∪ C<sub>j</sub>''.
+
+The check for enabling the previous constraints is performed for every pair ''((C<sub>i</sub>, E<sub>i</sub>), (C<sub>j</sub>, E<sub>j</sub>))'', where ''j > i''. The constraint ''(C<sub>j</sub>, E<sub>j</sub>)'' is determined to meaningfully enable the constraint ''(C<sub>i</sub>, E<sub>i</sub>)'' if all of the following conditions are met:
+* ''E<sub>j</sub>'' matches any of the conditions in ''C<sub>i</sub>'' (''E<sub>j</sub> = c<sub>i,k</sub>'', for any ''k''),
+* ''C<sub>i</sub>'' and ''C<sub>j</sub>'' can simultaneously evaluate to true,
+* ''E<sub>i</sub>'' is not explicitly enabled after applying all of the constraints, with flags ''F = C<sub>j</sub>''.
+
==Rationale==
===Restrictions for allowed REQUIRED_USE syntax===
The specification imposes a number of arbitrary restrictions to REQUIRED_USE syntax, in particular by restricting the possible nesting and disallowing other complex constructs. The main goal is to simplify the algorithms used and make the results more obvious. This is at cost of prohibiting constructs that are rarely used, and usually could be replaced by simpler and more readable constructs.