Bugs in the Delphi RTL/VCL |
Top Previous Next |
Pretranslated C++ code > Preparing Delphi code > Bugs in the Delphi RTL/VCL
In some cases DelphiXE22Cpp11 cannot process a unit though the Delphi compiler can That's because the automatically generated parser of Delphi2Cpp II is more strict than the Delphi parser, which might be handwritten and tolerates bugs like the following in the System.pas of RAD Studio 10.2 Tokyo inside of the function "FSetExceptFlag":
{$ELSEIF defined(CPUX64) and defined(Linux)) }
It is obvious, that there is a closing parenthesis too much and the code should be corrected to:
{$ELSEIF defined(CPUX64) and defined(Linux) }
The next bug in the same file is:
{$IF not (defined(PC_MAPPED_EXCEPTIONS) or defined(SJLJ_BASED_EXCEPTIONS)) or defined(ZCX_BASED_EXCEPTIONS)) }
Such bugs unfortunately exist in all versions of the RTL/VCL at different positions. They can be found inside of the Delphi2Cpp II IDE quite easily, because the position where the preprocessor or the parser stops is shown in the input editor. If you have moved the cursor, the position is shown again by use of the button.
Here is a list of some flaws in the RTL/VCL of RAD Studio 10.2 Tokyo.
System.ObjAuto.pas line 23:
{$IF SizeOf(Extended) >= 10)} // 10,12,16 {$DEFINE EXTENDEDHAS10BYTES} {$ENDIF}
{$IF SizeOf(Extended) = 10)} {$DEFINE EXTENDEDIS10BYTES} {$ENDIF}
should be:
{$IF SizeOf(Extended) >= 10} // 10,12,16 {$DEFINE EXTENDEDHAS10BYTES} {$ENDIF}
{$IF SizeOf(Extended) = 10} {$DEFINE EXTENDEDIS10BYTES} {$ENDIF}
Internal.Unwinder.pas:
{$IFDEF MACOS} const _U = '_'; {$EXTERNALSYM _U} {$ELSE !MACOS} _U = ''; {$EXTERNALSYM _U} {$ENDIF}
could be:
{$IFDEF MACOS} const _U = '_'; {$EXTERNALSYM _U} {$ELSE !MACOS} const _U = ''; {$EXTERNALSYM _U} {$ENDIF}
System.pas line 6643:
{$ELSEIF defined(CPUX64) and defined(Linux)) } -> {$ELSEIF defined(CPUX64) and defined(Linux) }
line 24087:
{$IF not (defined(PC_MAPPED_EXCEPTIONS) or defined(SJLJ_BASED_EXCEPTIONS)) or defined(ZCX_BASED_EXCEPTIONS)) } -> {$IF not (defined(PC_MAPPED_EXCEPTIONS) or defined(SJLJ_BASED_EXCEPTIONS)) or defined(ZCX_BASED_EXCEPTIONS) }
Vcl.Imaging.GifImg.pas line 2421:
SetColors(GetPaletteEntries(Palette, 0, 256, nil^)); -> SetColors(GetPaletteEntries(Palette, 0, 256, nil));
WinAPI.DXFile.pas line 37:
(*$HPPEMIT '#include "dxfile.h"'{*) (*$HPPEMIT '#include "rmxfguid.h"'{*) (*$HPPEMIT '#include "rmxftmpl.h"'{*)
->
(*$HPPEMIT '#include "dxfile.h"'*) (*$HPPEMIT '#include "rmxfguid.h"'*) (*$HPPEMIT '#include "rmxftmpl.h"'*)
ToolsApi/ToolsApi.pas line 123/250/252
(*$HPPEMIT 'DEFINE_GUID(IID_IOTAStreamModifyTime,0x49F2F63F,0x60CB,0x4FD4,0xB1,0x2F,0x81,0x67,0xFC,0x79,0xB2,0x93);*) ... (*$HPPEMIT 'DEFINE_GUID(IID_IOTAToolsFilterNotifier,0xCEF1F13A,0xE877,0x4F20,0x88,0xF2,0xF7,0xE2,0xBA,0x61,0xAA,0xF4); *) (*$HPPEMIT 'DEFINE_GUID(IID_IOTAToolsFilter,0x8864B891,0x9B6D,0x4002,0xBB,0x2E,0x1D,0x6E,0x59,0xBF,0xA4,0x9A); *) . (*$HPPEMIT 'DEFINE_GUID(IID_IOTATypeLibrary, 0x7A2F5910,0x58D2,0x448E,0xB4,0x57,0x2D,0xC0,0x1E,0x85,0x3D,0x46);*)
-> (*$HPPEMIT 'DEFINE_GUID(IID_IOTAStreamModifyTime,0x49F2F63F,0x60CB,0x4FD4,0xB1,0x2F,0x81,0x67,0xFC,0x79,0xB2,0x93);'*) ... (*$HPPEMIT 'DEFINE_GUID(IID_IOTAToolsFilterNotifier,0xCEF1F13A,0xE877,0x4F20,0x88,0xF2,0xF7,0xE2,0xBA,0x61,0xAA,0xF4);'*) (*$HPPEMIT 'DEFINE_GUID(IID_IOTAToolsFilter,0x8864B891,0x9B6D,0x4002,0xBB,0x2E,0x1D,0x6E,0x59,0xBF,0xA4,0x9A);'*) . (*$HPPEMIT 'DEFINE_GUID(IID_IOTATypeLibrary, 0x7A2F5910,0x58D2,0x448E,0xB4,0x57,0x2D,0xC0,0x1E,0x85,0x3D,0x46);'*)
|
This page belongs to the DelphiXE2Cpp11 Documentation |
DelphiXE2Cpp11 home Content |