anchor.diff:      return result;
     }
   
  -  /*=T*/ _withStyleRule/*<T>*/(CssStyleRule rule, /*=T*/ callback()) {
  -    var oldStyleRule = _styleRule;
  -    _styleRule = rule;
  +  /*=T*/ _withSelector/*<T>*/(CssValue<SelectorList> selector,
  +      /*=T*/ callback()) {
  +    var oldSelector = _selector;
  +    _selector = selector;
       var result = callback();
  -    _styleRule = oldStyleRule;
  +    _selector = oldSelector;
       return result;
     }
   
  -  /*=T*/ _withMediaRule/*<T>*/(CssMediaRule rule, /*=T*/ callback()) {
  -    var oldMediaRule = _mediaRule;
  -    _mediaRule = rule;
  +  /*=T*/ _withMediaQueries/*<T>*/(List<CssMediaQuery> queries,
  +      /*=T*/ callback()) {
  +    var oldMediaQueries = _mediaQueries;
  +    _mediaQueries = queries;
       var result = callback();
  -    _mediaRule = oldMediaRule;
  +    _mediaQueries = oldMediaQueries;
       return result;
     }
   }
  
positive.code: 
    void visitStyleRule(StyleRule node) {
      var selectorText = _performInterpolation(node.selector, trim: true);
      if (_styleRule != null) {
        // TODO: semantically resolve parent references.
        selectorText = new CssValue(
            "${_styleRule.selector.value} ${selectorText.value}",
            span: node.selector.span);
      }
  
  
negative.code:         new Parser(selectorText.value).parseSelector(),
          span: node.selector.span);
  
      _withParent(
          new CssStyleRule(selector, span: node.span),
          () => _withSelector(selector, () => super.visitStyleRule(node)),
          through: (node) => node is CssStyleRule,
          removeIfEmpty: true);
    }
  