Several new .inc files have been added to Indy’s source:
IdSymbolDeprecatedOff.inc IdSymbolDeprecatedOn.inc IdSymbolPlatformOff.inc IdSymbolPlatformOn.inc IdUnitPlatformOff.inc IdUnitPlatformOn.inc IdDeprecatedImplBugOff.inc IdDeprecatedImplBugOn.inc
For example:
Before:
{$IFDEF HAS_SYMBOL_PLATFORM}
{$WARN SYMBOL_PLATFORM OFF}
{$ENDIF}
TIdThreadPriority = TThreadPriority;
{$IFDEF HAS_SYMBOL_PLATFORM}
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
{$IFDEF HAS_DEPRECATED}
{$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF}
GIdIPv6FuncsAvailable := False;
{$IFDEF HAS_DEPRECATED}
{$IFDEF HAS_DIRECTIVE_WARN_DEFAULT}
{$WARN SYMBOL_DEPRECATED DEFAULT}
{$ELSE}
{$WARN SYMBOL_DEPRECATED ON}
{$ENDIF}
{$ENDIF} After:
{$I IdSymbolPlatformOff.inc}
TIdThreadPriority = TThreadPriority;
{$I IdSymbolPlatformOn.inc}
{$I IdSymbolDeprecatedOff.inc}
GIdIPv6FuncsAvailable := False;
{$I IdSymbolDeprecatedOn.inc} The last two .inc files – IdDeprecatedImplBugOff.inc and IdDeprecatedImplOn.inc – are a special case that requires extra explanation.
In Delphi 6 (when deprecated was introduced), there is a compiler bug where if a procedure/function/method is marked as deprecated then the compiler emits a warning about the deprecated symbol being used in the procedure/function/method’s implementation, which is not desirable (and was fixed in Delphi 7). As such, Indy’s deprecated method implementations are now wrapped with these two files, for example:
Before:
procedure SplitColumnsNoTrim(const AData: string; AStrings: TStrings; const ADelim: string = ' '); {$IFDEF HAS_DEPRECATED}deprecated{$IFDEF HAS_DEPRECATED_MSG} 'Use SplitDelimitedString()'{$ENDIF};{$ENDIF} {Do not Localize}
{$IFDEF DEPRECATED_IMPL_BUG}
{$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF}
procedure SplitColumnsNoTrim(const AData: string; AStrings: TStrings; const ADelim: string = ' ');
{$IFDEF DEPRECATED_IMPL_BUG}
{$WARN SYMBOL_DEPRECATED ON}
{$ENDIF}
begin
SplitDelimitedString(AData, AStrings, False, ADelim{$IFNDEF USE_OBJECT_ARC}, True{$ENDIF});
end; After:
procedure SplitColumnsNoTrim(const AData: string; AStrings: TStrings; const ADelim: string = ' '); {$IFDEF HAS_DEPRECATED}deprecated{$IFDEF HAS_DEPRECATED_MSG} 'Use SplitDelimitedString()'{$ENDIF};{$ENDIF} {Do not Localize}
{$I IdDeprecatedImplBugOff.inc}
procedure SplitColumnsNoTrim(const AData: string; AStrings: TStrings; const ADelim: string = ' ');
{$I IdDeprecatedImplBugOn.inc}
begin
SplitDelimitedString(AData, AStrings, False, ADelim{$IFNDEF USE_OBJECT_ARC}, True{$ENDIF});
end; 