anchor.diff:        end;
       end;
       // go to end of string/eol
  -    while (((readNext <> '"') or (readPrev = '\')) and (not (readCurr = #10))) do (*!*);
  +    while (((readNext <> '"') or (readPrev = '\')) and (not (readCurr = #10))) do
  +    begin
  +      // test special case "//"
  +      if readCurr = '"' then if
  +        (readPrev = '\') then if
  +          (readPrevPrev = '\') then
  +            break;
  +    end;
       if (readCurr = #10) then fRange := rkString1
       else
       begin
  
positive.code:     function readNext: Char;
      function readCurr: Char;
      function readPrev: Char;
      procedure setFoldKinds(aValue: TFoldKinds);
      procedure setWhiteAttrib(aValue: TSynHighlighterAttributes);
      procedure setNumbrAttrib(aValue: TSynHighlighterAttributes);
  
negative.code:   result := fLineBuf[fTokStop-1];
  end;
  
  function TSynD2Syn.readPrevPrev: Char; {$IFNDEF DEBUG}inline;{$ENDIF}
  begin
    result := fLineBuf[fTokStop-2];
  end;
  
  
  //TODO-crange: asm range.
  //TODO-cnumber literals: stricter.
  //TODO-cnumber literals: binary.
  //TODO-cstring literals: delimited strings.
  //TODO-cstring literals: token strings.
  //TODO-ccomments: correct nested comments handling.
  //TODO-cfeature: something like pascal {$region} : /*folder blabla*/  /*endfolder*/
  
  {$BOOLEVAL ON}
  procedure TSynD2Syn.next;
  