anchor.diff:      scanner.expectChar($rparen);
       buffer.writeCharCode($rparen);
   
  -    return new StringExpression(
  -        buffer.interpolation(nameSpan.expand(scanner.emptySpan)));
  -  }
  -
  -  Expression _urlContents(FileSpan nameSpan) {
  -    var start = scanner.state;
  +    return new StringExpression(buffer.interpolation(scanner.spanFrom(start)));
  +  }
  +
  +  Interpolation _tryUrlContents(LineScannerState start) {
  +    var start = scanner.state;
  +    if (!scanner.scanChar($lparen)) return null;
       whitespace();
   
       // Match Ruby Sass's behavior: parse a raw URL() if possible, and if not
  
positive.code:         if (scanner.peekChar() != $rparen) break;
        } else if (next == $rparen) {
          buffer.writeCharCode(scanner.readChar());
          return new StringExpression(
              buffer.interpolation(nameSpan.expand(scanner.emptySpan)));
        } else {
          break;
        }
      }
  
      scanner.position = start.position - 1;
      return new FunctionExpression(
          new Interpolation(["url"], nameSpan), _argumentInvocation());
    }
  
    /// Consumes tokens up to "{", "}", ";", or "!".
  
negative.code:       var color = colorsByName[lower];
        if (color != null) return new ColorExpression(color, identifier.span);
  
        var specialFunction = _trySpecialFunction(lower, start);
        if (specialFunction != null) return specialFunction;
      }
  
  