protected override IEnumerable <LessNode> EvaluateCore(EvaluationContext context) { if (Guard?.SatisfiedBy(context) == false) { yield break; } var evaluatedSelectors = Selectors.Inherit(context.CurrentScope.Selectors).EvaluateSingle <SelectorList>(context); evaluatedSelectors.AddExtenders(context); using (context.EnterScope(evaluatedSelectors)) { (var rules, var others) = Block.Evaluate(context).Split <Rule, Statement>(); if (rules.Count > 0) { var ruleLookup = new HashSet <Rule>(); for (var i = rules.Count - 1; i >= 0; i--) { var r = rules[i]; if (ruleLookup.Contains(r)) { rules.RemoveAt(i); } else { ruleLookup.Add(r); } } var evaluatedBlock = new RuleBlock(rules); var evaluatedRuleset = new Ruleset(evaluatedSelectors, evaluatedBlock); yield return(evaluatedRuleset); } foreach (var statement in others) { if (statement is Ruleset rs) { context.CurrentScope.Parent.DeclareRuleset(rs); yield return(rs); } else if (statement is MediaBlock media) { yield return(media.Bubble(context)); } else if (statement is Stylesheet || statement is ImportStatement) { yield return(statement); } else { throw new EvaluationException($"Unexpected statement type after evaluating rule block: {statement.GetType()}"); } } } }