anchor.diff:          break;
   
         case "url":
  -        if (!scanner.scanChar($lparen)) return null;
  -        return _urlContents(nameSpan);
  +        var contents = _tryUrlContents(start);
  +        if (contents != null) return new StringExpression(contents);
  +        return new FunctionExpression(
  +            new Interpolation(["url"], scanner.spanFrom(start)),
  +            _argumentInvocation());
   
         default:
           return null;
  
positive.code:   }
  
    Expression _identifierLike() {
      var identifier = _interpolatedIdentifier();
      var plain = identifier.asPlain;
      if (plain != null) {
  
negative.code:         case $semicolon:
            break loop;
  
          case $u:
          case $U:
            var beforeUrl = scanner.state;
            if (!scanIdentifier("url", ignoreCase: true)) {
              buffer.writeCharCode(scanner.readChar());
              wroteNewline = false;
              break;
            }
  
            var contents = _tryUrlContents(beforeUrl);
            if (contents == null) {
              scanner.state = beforeUrl;
              buffer.writeCharCode(scanner.readChar());
            } else {
              buffer.addInterpolation(contents);
            }
            wroteNewline = false;
            break;
  
          default:
            if (next == null) break loop;
  
            if (lookingAtIdentifier()) {
              buffer.write(identifier());
            } else {
              buffer.writeCharCode(scanner.readChar());
            }
            wroteNewline = false;
            break;
        }
  