anchor.diff:    // IF CompilerVersion compiler directives
     {$DEFINE CPUX86}
   {$ELSE}
  -  {$IF CompilerVersion >= 24.0} // XE3 and newer
  +  {$IF CompilerVersion >= 24.0} // XE3 or newer
       {$LEGACYIFEND ON}
     {$IFEND}
     {$IF CompilerVersion >= 23.0}
       {$DEFINE HAS_UNIT_SCOPE}
       {$DEFINE HAS_RETURN_ADDRESS}
     {$IFEND}
  -  {$IF CompilerVersion <= 22.0} // XE and older
  +  {$IF CompilerVersion <= 22.0} // XE or older
       {$DEFINE CPUX86}
     {$IFEND}
   {$ENDIF VER200}
   
  +{$IFDEF NEXTGEN}
  +  {$IF CompilerVersion >= 31.0} // 10.1 Berlin or newer
  +    {$DEFINE SUPPORTS_UTF8STRING} // Delphi 10.1 Berlin supports UTF8String for mobile compilers
  +  {$IFEND}
  +{$ELSE}
  +  {$DEFINE SUPPORTS_UTF8STRING}
  +{$ENDIF}
  +
  +{$IFDEF CPUX64}
  +  {$IFNDEF LINUX64} // Linux 64 compiler doesn't support ASM for x64 code => LLVM
  +    {$DEFINE ASMSUPPORT}
  +  {$ENDIF ~LINUX64}
  +{$ENDIF CPUX64}
  +{$IFDEF CPUX86}
  +  {$DEFINE ASMSUPPORT}
  +{$ENDIF CPUX86}
  +{$IFDEF EXTERNALLINKER} // implicates LLVM
  +  {$UNDEF ASMSUPPORT}
  +{$ENDIF EXTERNALLINKER}
  +
  +// Enables the progress callback feature
  +{$DEFINE SUPPORT_PROGRESS}
   
   // Sanity checks all array index accesses and raise an EListError exception.
   {$DEFINE CHECK_ARRAY_INDEX}
  
positive.code: end;
  
  class function TJsonBaseObject.Parse(const Bytes: TBytes; Encoding: TEncoding; ByteIndex: Integer;
    ByteCount: Integer): TJsonBaseObject;
  var
    L: Integer;
  begin
  
negative.code:       TJsonBaseObject.StrToJSONStr(Writer.AppendStrValue, string(FValue.S));
      jdtInt:
        begin
          BufEnd := @PChar(@Buffer[0])[Length(Buffer)]; // extra typecast to work around a compiler bug (fixed in XE3)
          P := IntToText(FValue.I, BufEnd);
          Writer.AppendValue(P, BufEnd - P);
        end;
      jdtLong:
        begin
          BufEnd := @PChar(@Buffer[0])[Length(Buffer)]; // extra typecast to work around a compiler bug (fixed in XE3)
          P := Int64ToText(FValue.L, BufEnd);
          Writer.AppendValue(P, BufEnd - P);
        end;
      jdtULong:
        begin
          BufEnd := @PChar(@Buffer[0])[Length(Buffer)]; // extra typecast to work around a compiler bug (fixed in XE3)
          P := UInt64ToText(FValue.U, BufEnd);
          Writer.AppendValue(P, BufEnd - P);
        end;
      jdtFloat:
        Writer.AppendValue(Buffer, DoubleToText(Buffer, FValue.F));
      jdtDateTime:
        TJsonBaseObject.DateTimeToJSONStr(Writer.AppendStrValue, FValue.D); // do the conversion in a function to prevent the compiler from creating a string intermediate in this method
      jdtUtcDateTime:
        TJsonBaseObject.UtcDateTimeToJSONStr(Writer.AppendStrValue, FValue.D); // do the conversion in a function to prevent the compiler from creating a string intermediate in this method
      jdtBool:
        if FValue.B then
          Writer.AppendValue(sTrue)
  