anchor.diff:          }
           index++;
           code = iter.next();
  -        if (identical(code, $x)) {
  +        if (code == $x) {
             for (int i = 0; i < 2; i++) {
               if (!iter.hasNext()) {
                 stringParseError("Incomplete escape sequence", token, index);
  
positive.code:           }
            // A two-byte hex escape can't generate an invalid value.
            continue;
          } else if (identical(code, $u)) {
            int escapeStart = index - 1;
            index++;
            code = iter.next();
  
negative.code:       raw = true;
        quoteChar = source.next();
      }
      assert(quoteChar == $SQ || quoteChar == $DQ);
      // String has at least one quote. Check it if has three.
      // If it only have two, the string must be an empty string literal,
      // and end after the second quote.
      bool multiline = false;
      if (source.hasNext() && source.next() == quoteChar && source.hasNext()) {
        int code = source.next();
        assert(code == quoteChar);  // If not, there is a bug in the parser.
        quoteLength = 3;
        // Check if a multiline string starts with a newline (CR, LF or CR+LF).
        if (source.hasNext()) {
          code = source.next();
          if (code == $CR) {
            quoteLength += 1;
            if (source.hasNext() && source.next() == $LF) {
              quoteLength += 1;
            }
          } else if (code == $LF) {
            quoteLength += 1;
          }
        }
  