IDE Fix Pack 6.4.4

IDE Fix Pack is a collection of unofficial bug fixes and performance optimizations for the RAD Studio IDE, Win32/Win64/Andoird-ARM compiler and Win32 debugger.

The IDE plugin is available for RAD Studio 2009-10.3 and it fixes some IDE bugs and improves the IDE performance and compilation speed. All changes are done in memory, so no files on disk are modified. The fixes and optimizations are restricted to the IDE’s and compiler’s own code. So all Delphi/C++Builder projects don’t get those fixes or optimizations (except for the additional compiler code optimization switches).

The performance optimizations let the IDE start faster, open projects faster, optimizes the compiler’s file search algorithm, makes CodeInsight, the actual compilation and the debugger faster. It also fixes some IDE, compiler and debugger memory leaks depending on the used RAD Studio version.

fastdcc applies the Compiler Speed Pack that is included in IDE Fix Pack to the command line compilers dcc32, dcc64 and dccaarm (XE6 and newer).

Download:

Name IDE Version File Size Downloads Added
IDE Fix Pack 6.4.2 2009 (UP4)IDEFixPack2009Reg64.2.7z242.75 KB5655 times2019-03-23
IDE Fix Pack 6.4.2 2010 (UP5)IDEFixPack2010Reg64.2.7z237.09 KB6464 times2019-03-23
IDE Fix Pack 6.4.2 XE (UP1)IDEFixPackXEReg64.2.7z221.38 KB3996 times2019-03-23
IDE Fix Pack 6.4.2 XE2 (UP4+HF1)IDEFixPackXE2Reg64.2.7z316.78 KB4409 times2019-03-23
IDE Fix Pack 6.4.2 XE3 (UP2)IDEFixPackXE3Reg64.2.7z257.4 KB3547 times2019-03-23
IDE Fix Pack 6.4.2 XE4 (UP1)IDEFixPackXE4Reg64.2.7z260.1 KB3162 times2019-03-23
IDE Fix Pack 6.4.2 XE5 (UP2)IDEFixPackXE5Reg64.2.7z257.7 KB3643 times2019-03-23
IDE Fix Pack 6.4.2 XE6 (UP1)IDEFixPackXE6Reg64.2.7z423 KB3339 times2019-03-23
IDE Fix Pack 6.4.2 XE7 (UP1)IDEFixPackXE7Reg64.2.7z429.48 KB4503 times2019-03-23
IDE Fix Pack 6.4.2 XE8 (UP1)IDEFixPackXE8Reg64.2.7z431.7 KB3794 times2019-03-23
IDE Fix Pack 6.4.2 10 Seattle (RTM/UP1)IDEFixPackD10Reg64.2.7z428.33 KB5274 times2019-03-23
IDE Fix Pack 6.4.2 10.1 BerlinIDEFixPackD101Reg64.2.7z430.65 KB5863 times2019-03-23
IDE Fix Pack 6.4.2 10.2 (RTM/UP1/2/3)IDEFixPackD102Reg64.2.7z426.27 KB9288 times2019-03-23
IDE Fix Pack 6.4.4 10.3 (RTM/UP1/2/3)IDEFixPackD103Reg64.4.7z444.98 KB17683 times2019-08-01

Download (fastdcc for the command line compiler):

Name IDE Version File Size Downloads Added
fastdcc 6.4.2 2009 (UP4)fastdcc2009v64.2.7z112.87 KB3035 times2019-03-23
fastdcc 6.4.2 2010 (UP5)fastdcc2010v64.2.7z120.38 KB3157 times2019-03-23
fastdcc 6.4.2 XE (UP1)fastdccXEv64.2.7z121.36 KB2903 times2019-03-23
fastdcc 6.4.2 XE2 (UP4+HF1)fastdccXE2v64.2.7z166.48 KB2942 times2019-03-23
fastdcc 6.4.2 XE3 (UP2)fastdccXE3v64.2.7z150.88 KB2777 times2019-03-23
fastdcc 6.4.2 XE4 (UP1)fastdccXE4v64.2.7z153.55 KB2738 times2019-03-23
fastdcc 6.4.2 XE5 (UP2)fastdccXE5v64.2.7z151.87 KB2842 times2019-03-23
fastdcc 6.4.2 XE6 (UP1)fastdccXE6v64.2.7z198.67 KB2837 times2019-03-23
fastdcc 6.4.2 XE7 (UP1)fastdccXE7v64.2.7z219.84 KB3023 times2019-03-23
fastdcc 6.4.2 XE8 (UP1)fastdccXE8v64.2.7z224.67 KB2869 times2019-03-23
fastdcc 6.4.2 10 Seattle (RTM/UP1)fastdccD10v64.2.7z219.65 KB3193 times2019-03-23
fastdcc 6.4.2 10.1 BerlinfastdccD101v64.2.7z223.52 KB3267 times2019-03-23
fastdcc 6.4.2 10.2 (RTM/UP1/2/3)fastdccD102v64.2.7z219.06 KB4089 times2019-03-23
fastdcc 6.4.4 10.3 (RTM/UP1/2/3)fastdccD103v64.4.7z228.61 KB5553 times2019-07-31

Installation:
1. Start IDEFixPackRegXxx.exe under your user account
2. Select the IDE registry keys for which you want to install the bugfix
3. Press the “Install” button

Uninstall:
1. Start IDEFixPackRegXxx.exe under your user account
2. Press the “Uninstall” button. This will uninstall the bugfix for all (not only the selected) IDE registry keys.


fastdcc

There are 2 ways to use fastdcc.

Using fastdcc directly

  1. Extract the 7z file into your $(BDS)\bin directory.
  2. Start fastdcc32.exe as if it was dcc32.exe
    Start fastdcc64.exe as if it was dcc64.exe
    Start fastdccaarm.exe as if it was dccaarm.exe

Replacing dcc32.exe by fastdcc32.exe (don’t do this if you want to be able to install future RAD Studio/Delphi/C++Builder updates)

  1. Extract the 7z file into your $(BDS)\bin directory.
  2. Rename dcc32.exe, dcc32.jdbg and dcc32.de/fr/jp to dcc32compiler.exe/jdbg/de/fr/jp.
  3. Rename dcc64.exe, dcc64.jdbg and dcc64.de/fr/jp to dcc64compiler.exe/jdbg/de/fr/jp.
  4. Rename fastdcc32.exe to dcc32.exe
  5. Rename fastdcc64.exe to dcc64.exe
  6. Rename fastdcc32Hook.dll to dcc32Hook.dll
    For XE3 or newer: Rename fastdcc32Hook.dllx to dcc32Hook.dllx (“x” is necessary for Delphi’s copy protection)
  7. Rename fastdcc64Hook.dll to dcc64Hook.dll
    For XE3 or newer: Rename fastdcc64Hook.dllx to dcc64Hook.dllx
  8. Start dcc32.exe/dcc64.exe or msbuild.

Download (legacy):

Name IDE Version File Size Downloads Added
IDE Fix Pack XE2 4.5 XE2 UP2 onlyIDEFixPackXE2Reg45.zip125.47 KB4866 times2011-11-02
IDE Fix Pack XE2 4.6.6 XE2 UP3 onlyIDEFixPackXE2Reg466.zip152.4 KB6090 times2012-01-04
IDE Fix Pack 2007 4.4 Windows 10 Edition 2007 Dec.UpdateIDEFixPack2007Reg44Win10.7z88.51 KB19761 times2015-08-04


Fixes (for Delphi 10.3.2)

  • Prevent the IDE from re-compiling the code if you run the application right after you just compiled it. The ErrorInsight parser asking the compiler to get unit symbols invalidated the unit cache even if no actual in-memory compilation took place.
  • Prevent the IDE form resizing all controls to zero width and zero height when the IDE is minimized (VCL issue).
  • Fixes “Deleting controls from Tabsheet changes ActivePageIndex” (QC 7270)
  • Work around the ImageList problem with modified DFM streams due to a changed 32 bit value in the stream. (QC 83992)
  • Reduce of GDI handle usage of TToolBar (makes FNullBitmap a singleton) and TImageList (null bitmap is shared for all ImageLists with the same size).
  • Castalias’s WM_CLIPBOARDUPDATE “Cannot open Clipboard” exception is prevented, so that debugging the IDE isn’t interrupted by random EClipboardError exceptions.
  • When pressing the [F6]-Key the IDE Insight’s edit is focused and the text in it is selected (RSP-24437)
  • Adds the missing CodeInsight identifiers that have underscores in their name if Ctrl+Space is pressed after the underscore character. (QC 71270, QC 76338, QC 76379)
  • Adds support for $(PLATFORM) in the directory list editors so that they aren’t painted in gray text anymore and removed by the “Remove invalid paths” button.
  • Fixes the class completion’s parser that can’t handle “class operator In” because “In” is a reserved word.
  • Debugger can now load *.tds symbols if the host application path is a relative path.
  • The command line for the application in the debugger can use more than 1024 characters.
  • The last line of a comment in the editor is repainted properly. (QC 105668)
  • Fixes Code Completion to also list message handlers (CM_, CN_, WM_) if the WinApi.Messages unit isn’t “used” by its full qualified unit scoped name.
  • The background parser’s WaitFor function doesn’t increase the wait timeout in the wait loop due to wrong arithmetic.
  • On IDE termination a cancel signal is sent to the background parser before waiting for it.
  • The error dialogs from the DFM loading are resizeable and don’t truncate the text anymore.
  • If the user presses a menu shortcut the Error Insight parser could have been started in the main thread and blocked the user input until it finished.
  • Aborts the debug event handling if the number of events becomes to large, that prevents a possible infinite loop.
  • Prevent the Welcomepage’s JScript9.dll to cause a “NullReferenceException” in the IDE’s Internet Explorer integration code (RSP-24044).
  • The IDE’s Application.UpdateMetricSettings is set to False, so that the IDE (toolbar) doesn’t flicker if a WM_SETTINGSCHANGED message is broadcasted.

IDE Optimizations

  • TStringList.IndexOf/IndexOfName: Faster implementation for TStringList classes that do not overwrite the Get() and CompareString methods.
  • TObject.FieldAddress: During DFM loading a hash map is used instead of doing a linear search for all properties in the DFM.
  • ChangeFileExt, ExtractFilePath, ExtractFileDir, ExtractFileName, ExtractFileExt, ExtractRelativePath: Removed unnecessary string copying.
  • AnsiCompareFileName: CompareStringOrdinal is used instead of CompareStr(AnsiLowerCase(S1), AnsiLowerCase(S2)). So no new strings are created.
  • System.Move is replaced by a version that is the fastest for the used CPU (up to SSE3)
  • ObjectTextToBinary/ObjectTextToResource: Faster DFM resource writing.
  • FindHInstance: Usage of a ring buffer to cache the slow VirtualQuery calls for finding registered classes.
  • Variants: VarToBool and varUString code paths are optimized as the IDE uses a lot of such Variants.
  • TObject.ClassNameIs uses an case intensive ASCII compare and only falls back to the UTF8->UTF16 compare if non-ASCII chars are found.
  • LoadResString: Caching of LoadResString returned strings, so strings that were already converted to UnicodeString don’t need to be created again. The compiler progress dialog was slowed down a lot due to LoadResString calls.
  • IDE’s ToolUtil.AddToList locks the list before iterating it instead of doing it for every Get() call. And it uses an optimized “nil” search.
  • Package Cache: Disables the IDE’s package cache that is slow (writes/reads bitmaps from the registry) and became useless after the introduction of XE2’s ClassGroup check for DataModules that loads all packages into the memory the first time you open a DataModule.
  • IDE’s TUsesList: TUsesList.Clear caused editing the DPR file to be really slow if you had many unit in the project, because Clear triggered the Delete-Notify handler that looked up every deleted object in a StringList. The patch clears the StringList before actually clearing the TUsesList. This patch also replaces the “InternalFindFileEntry” method by one that uses a hash table instead of the the StringList.
  • TComponentPaletteManager. FindItem/FindItemGroup: Optimizing interface calls by “caching” their target function addresses (XE2 made those two functions faster but the “caching” is still a lot faster)
  • Compiler “Kibitzing”: Removes the ClearUnitcache call in InvokeCodeCompletion. => ClearUnitCache isn’t called anymore for compiler hints and navigation. The “up to date” code in IDE Fix Pack handles the changes for us much better.
  • Win32 Debugger: Replace of slow C-RTL functions in the debugger (memmove, memcpy, memset, stricmp)
  • The Debugger’s evaluator enables $POINTERMATH for all pointer types making it easier to evaluate byte arrays.

Compiler Optimizations

  • Unit name resolution uses a hash table instead of going through a linked list comparing strings.
  • Usage of a hash table to find units in packages instead of searching in a linked list.
  • Usage of a hash table for looking up symbols in an already compiled unit instead of searching in a linked list.
  • Usage of a hash table for file to unit resolution if the debugger requests the symbols for a file. (Step into/over became a lot faster)
  • Removes some unnecessary string comparisons.
  • Replacement of a slow inlined strcpy call.
  • Changed unit uses-link cleanup algorithms from O(n^2) to O(n) => Removes the delay before a re-compilation.
  • Removed unnecessary unit uses-link cleanup code when all units are to be released anyway. => Removes the delay when the project is closed and removes the delay after the command line compiler outputs the compile statistics.
  • The EXE and DLL project’s main files aren’t in-memory recompiled anymore if code insight was invoked and they haven’t changed.
  • Directory cache with hash tables and direct hash lookup for unit/package files. => “File exists” tests that would return false are handled without asking the Windows OS.
  • Virus scanners slow down the compilation because they stop the compiler when it closes files it wrote to. The CompilerSpeedPack moves the file closing into a background thread so the compiler can start working on the next unit instead of waiting for the virus scanner to finish.
  • Ignores all errors when kibitzing => Prevents clearing of cached units, so Code Insight works faster because it doesn’t need to recompile code that was already cached.
  • Much faster implementation of functions that parse file names.
  • Releases unused memory after the debug session has finished.
  • Faster release of memory blocks if “mark and release” allocation is used in the compiler.
  • Replaces code that allocates memory (that is release almost immediately) by a memory allocator that returns always the same set of blocks.
  • Less printf calls from the code that builds the MAP file. This results in less tiny I/O calls.
  • Usage of the already known string length instead of calling strlen.
  • Prevents the compiler from calling LoadResString for warnings/hints that are disabled by the project’s options.
  • Replaces memcpy(), memmove() with faster code.
  • Win64: Usage of hash tables to find symbols instead of linear linked list searches. (Spring4D Testprojekt: 5 secondes => 30 milliseconds)
  • Win64: Prevent the compiler from spending more time allocating and zeroing memory instead of doing the actual compilation.
  • Win64: Fixes memory leak (XE2-XE3), better implementation for the memory leak fix: Don’t create a new sub-memallocator for every function call (XE4+)
  • Win64: Use SSE code in more than 14 functions
  • Win64: Remove of loop-calculations whose output is always the same constant value. (We know that we have Win64 as target)
  • Win64: Don’t initialize data that is already initialized
  • Win64: Usage of the CPU’s bit operations instead of emulating those with high language functions (BSF, BTR, POPCNT)
  • Win64: Move invariant code out of loops
  • Win64: Replaces the qsort function call with a specialized version that is twice as fast.
  • Win64: Allocate an array of struct with one call (memory locality) instead of allocating all elements one by one.
  • Win64: Removes the memory allocator’s clearing of memory with zeros, because all calls also clear the memory or overwrite it anyway.
  • Win64: Instead of walking the AST twice to calculate two values, both values are calculated at the same time.
  • Win64: Walking the AST is optimized by changing the last recursion into an iteration and by only calling the call back function for nodes it is interested in.
  • Win64: Micro-optimization for the call back functions that are used in the AST to calculate values.
  • Win64: Skip walking the AST to find assembler blocks if there weren’t any created for the function.
  • Win64: Replacing nodes in the AST uses a hash table to find already replaced nodes instead of searching in a linked list.
  • Win64: Comparing large bit-arrays doesn’t create helper bit-arrays anymore.
  • Win64: Replaces memory reallocation via alloc+memcpy+free by realloc that can do an inplace reallocation (XE2-10.2)
  • Win64: Removal of string memory duplication for hard coded string constants in the compiler’s code

Compiler optimization extensions

  • -x-fdi
    Delphi generates multiple DLL import sections for the same DLL. Windows 10 Creators Update 1703 changed how DLLs are loaded and now multiple sections for one DLL cause performance issues and can crash the debugger. This is fixed with Windows 1709 but it is still better to have only one import section per DLL. Delphi 10.2 Update 1 fixed this issue for the static dll imports but not for the delay dll imports.
    This option is enabled by default, if you want to disable it you have to turn it off by appending a minus symbol to the option: “-x-fdi-“.
  • -x-ff
    With this option the Win32 compiler doesn’t emit the “FWAIT” instruction after floating point operations. This also means that FPU exceptions (div by zero, …) may not be thrown at the source line that caused them.
  • -x-fvs -x-fvs=1
    If a virtual method is used through an interface the compiler emits helper code that translates the interface call into a virtual method call. This code uses the XCHG instruction that implies a CPU lock. With -x-fvs=1 the compiler will emit an alternative code for XCHG and if the ECX register can be freely used (function with less than 3 parameters) a much faster helper code is emitted. (Win32 only)
    Furthermore if the interface method is a virtual method that is marked as final or is in a sealed class, the compiler will emit helper code as if it is a static method. (Win32 and Win64)
  • -x-fvs=2
    Same as -x-fvs=1 with the addition that if the ECX register is not available the helper’s RET instruction is replaced by a JMP what helps the CPU to keep the “return stack cache” valid. This is done by accessing stack memory below ESP.
  • -x-fpr
    For some functions that meet special conditions the compiler emits stack frame code that fills the stack with zeros to clear variables with managed types. If there are too many of those the compiler uses the XCHG instruction to restore the ECX register. With this option the XCHG is replaced with an alternative code.
    If the size of local variables exceed a memory page (4KB) the compiler generates memory page probing code that is a lot faster than the original compiler’s code.
  • -x-orc / -x-orc=1
    In functions that return a (managed) record, this option allows the compiler to remove the temporary record copy if “Result := Func();” is the last statement in the function, because the caller already has a copy of the record or has the result record assignment also as the last statement.
  • -x-orc=2
    All temporary function return record buffers with managed fields will be eliminated. Records whose Size(Rec)<=Size(Pointer) with managed fields will always call the function with the original record pointer. If an exception is thrown in the callee, the caller’s target record may be altered. This is a break in the ABI that is already happening for Size(Rec)>Size(Pointer) records within the original compiler.
  • -x-cgo
    Enables an Integer division code generator optimization where the compiler emitted a push/pop where it could use the target EDX register instead.

Compiler output extensions

The longer dash is actually a double dash but WordPress converts it into an em-dash)
-x--compileonly, -x--reslist, -x--depfile, -x--unitstats
  • -x–compileonly
    Output intermediate files, skip linking.
    1: Output only DCU and DCP.
    2: Output only DCU.
  • -x–reslist
    Output used resource file names.
    1: <target>.resfilelist (UTF8)
    2: <target>.resfilelist (ANSI)
    3: <target>.map (map file format, ANSI)
  • -x–depfile
    Output all file dependencies to a DEP file.
    1: <target>.dep file (UTF-8)
    2: <target>.dep.json file
    3: <target>.dep.json file with dllimport information
  • -x–unitstats
    Output unit information to a file.
    1: Uses lists per unit: <target>.unitstats (UTF-8)
    2: Uses lists per unit: <target>.unitstats.json
    3: Uses lists and statistics: <target>.unitstats.json

Changelog 6.4.4 (2019-07-31)

  • Fixed: CodeGenMod.Win32.VirtFinalSealed was broken for Delphi 10.3.2
  • Removed: IDE Insight Listbox drop shadow patch isn’t necessary for Delphi 10.3.2 anymore

Changelog 6.4.3 (2019-07-24)

  • Added: Delphi 10.3.2 (Rio Update 2) support

Changelog 6.4.2 (2019-03-23)

  • Fixed: Unit-Name HashMap could cause an internal compiler error if the debugger removed System/SysInit from the unit list without IDEFixPack’s knowing.
  • Fixed: TCustomListBox.ResetContent patch caused an EInvalidPointerOp exception if the IDE or a component designer used TCheckListBox.

Changelog 6.4.1 (2019-03-03)

  • Fixed: StyleUtils.inc patch contained a hard coded address causing the patch to fail if the DLL’s base address was relocated. (10.3 only)
  • Fixed: TCustomListBox.ResetContent patch crashed with an access violation. (2010 only)

Changelog 6.4 (2019-03-01)

  • Fixed: Packages with duplicate units may not have caused a fatal compiler error.
  • Added: Support for Delphi 10.3 Rio
  • Added: StyleUtils.inc performance optimizations for faster UI rendering (D10.3)
  • Added: Infinite loop detection in TDebugger.UpdateEventLog
  • Added: Fix for TStringList.IndexOfName bug (RSP-21633)
  • Added: Fix for access violation in the Welcomepage JScript9.dll binding
  • Added: TCustomListBox.ResetContent is skipped if the handle isn’t created yet
  • Added: More STRINGCHECKS-free RTL code (2009/2010)
  • Added: More DFM Streaming optimizations
  • Added: RTL and DFM streaming patches to remove STRINGCHECKS (2009/2010)
  • Added: Removed VclFixPack OutputDebugString calls (2009)
  • Added: FillChar uses Enhanced REP MOVSB/STOSB cpu feature if available for large sizes.
  • Added: Enabled CPU LOCK string assignment optimization for local variables
  • Added: -x-Oe (experimental optimizations) and -x-cgo compiler option extension
  • Added: CodeGen: Remove of some unnecessary push/pop operations
  • Added: Expression Evaluator allows array access to pointers even if the type wasn’t declared with {$POINTERMATH ON}
  • Added: Max number of constants in a function was increased from 64K to 16M (2009-XE3)
  • Added: New compiler option extensions: -x–compileonly, -x–reslist, -x–depfile, -x–unitstats
  • Added: More performance optimization for the DCC64 compiler
  • Added: TStringBuilder.SetLength optimization [RSP-19178] (XE+)
  • Added: TStrings.GetDelimitedText optimization
  • Improved: Slight faster TStringList.IndexOfName optimization for sorted string lists.

Changelog from 6.3.1 to 6.3.2 (2018-06-18) (XE2 only)

  • Fixed: Off-by-one error in Win64 compiler optimization generated defective code (XE2 only)

Changelog from 6.3 to 6.3.1 (2018-06-17)

  • Fixed: Incompatiblity with CodeInsightPlus (UTF8ToUnicode appends a #0)

Changelog from 6.2 to 6.3 (2018-06-17)

  • Added: Patch to remove IDE flickering when WM_SETTINGCHANGE ist broadcasted
  • Added: Fix for RSP-20700: Tooltip Help Insight is blinking if Structure View is scrolled
  • Added: Undo XE3+ TFiler/TReader/TParser/TStream TBytes usage, replace SetLength with SetLengthUninit for special cases
  • Added: -x-fpr generates 3 times faster stack memory page probing code (RSP-19826)
  • Added: Options -x-O1, -x-O2, -x-O3, -x-Ox that enable other optimization options

Changelog from 6.1.2 to 6.2 (2018-01-25)

  • Fixed: Directory search cache failed if project units had “..\” in it (Delphi 10.2 only)
  • Fixed: Some VirtualProtect calls specified nil as last argument what Windows 10 1709 doesn’t like if a debugger is attached.
  • Added: Option -x-orc and -x-orc=n to remove temporary record variables for function results (n=1: only if the assignment is the last statement, n=2 for all)

Changelog from 6.1 to 6.1.2 (2017-12-14)

  • Added: Support for Delphi 10.2 Update 2
  • Added: Fix for unnecessary temporary variable if an empty open array argument is part of a function call (Delphi 2009-10.1)

Changelog from 6.1 to 6.1.1 (2017-10-30)

  • Fixed: -x-fvs (fast interface virtual stub) ECX usage detection failed for some record return types.

Changelog from 6.0 to 6.1 (2017-10-29)

  • Added: Option -x-ff to enable “fast floating point” (like Borland C++’s -ff command line option)
  • Added: Option -x-fvs and -x-fvs=n to enable fast interface virtual stub (n=1: replace XCHG, n=2: keep the CPU’s return stack buffer in order)
  • Added: Option -x-fpr to remove XCHG from the function prolog code.
  • Added: DLL import table section folding and duplicate name/ordinal elimination, also for delay dll imports
  • Changed: Split “Compiler64.X86” patch into multiple smaller patches and removed the “Compiler64.X86” patch name
  • Changed: EditorFocusFix now skips the SetActiveWindow call if the mainform (undocked) is not the active window

Changelog from 5.96 to 6.0 (2017-09-28)

  • Added: Win64 compile speed optimizations
  • Added: Delphi 10.2 Update 1 support
  • Added: Editor Block Completion UTF8 fix (Delphi 2009 only)

Changelog from 5.95 to 5.96 (2017-04-09)

  • Fixed: Disable DynArraySetLength patch if 10.1 Berlin Update 2 is detected.
  • Fixed: “clang template debug symbol bloat” disabled for 10 Seattle and newer.
  • Added: IDE minimize doesn’t shrink main window to width and height zero.
  • Added: RAD Studio 10.2 support (RTM only)

Changelog from 5.94 to 5.95 (2016-05-30)

  • Added: RAD Studio 10.1 Berlin support
  • Added: CloseHandle for created DCU files is delegated to a background thread. Windows Defender “workaround”
  • Added: Fix for RSP-14557: DynArraySetLength – resizing an array of managed type is causing entire copy instead of realloc (D10.1, only the IDE)
  • Added: Fix for RSP-13116: TCustomImageList.BeginUpdate/EndUpdate (D10.0)

Changelog from 5.93 to 5.94 (2015-11-01)

  • Added: RAD Studio 10 Seattle support
  • Added: Patch for Clipboard History exception from 10 Seattle Castalia integration (10Seattle)
  • Added: timeBeginPeriod/timeEndPeriod calls from IDEVirtualTrees disabled (battery drain)
  • Added: Removed unnecessary memory reallocations for 64bit and AARM compiler (XE4+)
  • Added: CodeInsight popup window border fix for Windows 10.

Changelog from 5.92 to 5.93 (2015-08-03)

  • Added: Support for Windows 10

Changelog from 5.91 to 5.92 (2015-05-16)

  • Fixed: TStringList.IndexOfName optimization broke UniDAC’s designtime editor
  • Fixed: “Find References” shortcut was assigned to “Find Local References” unless the search menu was opened
  • Added: “Find Local References” shortcut Shift+Ctrl+Alt+Enter

Changelog from 5.9 to 5.91 (2015-04-23)

  • Fixed: IDEFixPack didn’t take into account that DB.TFlatList uses late loading through GetCount
  • Fixed: fastdcc32/64/aarm in XE7 and XE8 didn’t load the CompilerSpeedPack into the compiler’s process

Changelog from 5.8 to 5.9 (2015-04-21)

  • Fixed: FieldAddress optimization could fail if a published field name was also used in an ancestor
  • Added: XE8 support
  • Added: TStringList.IndexOfName optimization
  • Added: Castalia XE8 startup optimization (XE8)
  • Added: Fix for QC 71270, 76338 and 76379. “CodeInsight doesn’t like the underscore.”

Changelog from 5.71 to 5.8 (2015-02-15)

  • Fixed: IDE Fix Pack tried to patch the fastdcc32/64/aarm.exe if it was renamed to dcc32/64/aarm.exe (XE6-XE7)
  • Fixed: Windows 8.1 compatibility with .NET code patch (2009)
  • Added: Compiler cleanup code performance optimization for large packages (2009-XE7)
  • Added: If XE7’s rlink32.dll is detected in older Delphi versions the “too many resources to handle” patch is skipped
  • Added: IDE Insight [F6]-Key calls SelectAll (XE5-XE7)
  • Improved: IDE Fix Pack StringLists use CompareStringOrdinal instead of CompareString
  • Changed: Installer/Uninstaller doesn’t require rtl.bpl/vcl.bpl in the PATH anymore

Changelog from 5.7 to 5.71 (2014-09-02)

  • Added: XE7 support

Changelog from 5.6 to 5.7 (2014-05-10)

  • Added: Fix for “class operator In” class completion
  • Added: IDEFixPackReg*.exe supports command line parameter /EXTRACT that extracts the files instead of installing them
  • Added: Disable creation of EditorLineEnd.ttr (2009-2010)
  • Added: Fix for QC 111917: RLINK32: Too many resources to handle. Instead of 3626 it can now handle 65534 resource items (also in fastdcc for command line compiler)
  • Added: TObject.FieldAddress optimization for DFM loading
  • Added: String function replacements without STRINGCHECKS (2009-2010)
  • Changed: Disabled “.NET Windows\Globalization search I/O optimization” patch for Windows 8 (2009)
  • Added: TComponent.Remove optimization (2009)

Changelog from 5.5 to 5.6 (2014-08-25)

  • Added: Support for XE6
  • Added: CompilerSpeedPack for Android (XE6)
  • Added: Apply CompilerSpeedPack to external compiler execution (dcc32, dcc64, dccaarm) (XE6)

Changelog from 5.4.1 to 5.5 (2014-05-04)

  • Fixed: Debug symbols are not always loaded for runtime packages
  • Fixed: Work around access violation in TComponentRoot.IsRootSelected
  • Added: Fix for QC 111998: $TDW macro used in Tools causes crash (XE2-XE5)
  • Added: CLANG BCC64 debuginfo bloat reduction for nested templates that caused the linker to run out of memory (XE3-XE5)
  • Improved: Splash screen progressbar accuracy
  • Renamed: fastdcc.exe becomes fastdcc32.exe

Changelog from 5.4 to 5.4.1 (2013-12-11)

  • Added: Support for XE5 Update 2

Changelog from 5.3 to 5.4 (2013-11-01)

  • Fixed: Possible access violation in PageControlTabSheetCompDropFix.DeleteSelection
  • Fixed: Possible infinite loop in compiler patch (2009-XE4)
  • Fixed: Switching between C++64 and C++32 platform caused “String list does not allow duplicates”
  • Added: XE5 support
  • Added: Optimization for: DCC64 was busy allocating and zero-ing memory for units with many functions (e.g. Generics)
  • Added: Optimization for: DCC64 was busy searching a linear list for units with many Generics
  • Added: Hashtable for compiler directives (improves jedi.inc compilation speed) (2009-2010)
  • Added: Hashtable for symbol lookup in used units
  • Added: Faster inline function compilation (2009-XE)
  • Added: Much better compiler performance if a unit instantiates many Generics (Spring4D)
  • Added: Fix for *.tds symbols aren’t loaded if the debugger is started with a relative HostApp
  • Removed: Increased Linker I/O buffer

Changelog from 5.2 to 5.3 (2012-06-06)

  • Added: Fix for not disappearing Designer Guidelines
  • Added: Editor Buffer now always disables the automatic/implicit changes to the buffer if undo is disabled. Undo buffer stays in sync with editor buffer (especially in Delphi 2009)
  • Added: Fix for QC 105642: Ctrl+C causes premature line cut and garbage in the clipboard
  • Added: Fix for QC 105668: Last line of the multi-line comment is not repainted (XE3-XE4)
  • Added: Fix for QC 116373: VCL Designer Guidelines spanning to the IDE’s main form instead of the designer form. Revert to X3 behavior. (XE4)
  • Added: Fix for QC 116290: Code Completion in class declaration doesn’t find message handlers if Messages is not included by using WinApi.Messages (XE2-XE4)
  • Added: Some slight C++Builder Kibitz/Compiler performance optimization
  • Added: Faster Unicode Pos function (2009-XE2)
  • Added: XP SelectDirectory dialog replaced by Vista version if available
  • Added: Fix for QC 116169: Slow opening forms in IDE that don’t use LiveBindings (XE3-XE4)
  • Added: Fix for QC 115248: Huge memory leak in BDS.EXE with large local variables or watches (XE-XE4)
  • Added: Performance optimization for IOTAxxxx.AddNotifier where Add/RemoveNotifier is called for many items
  • Added: Fix for QC 116008: IDE always does the compile->link cycle even if there where no modifications made to the project
  • Added: Directory selection dialogs in IDE Options and Project Options use the $(Platform) and $(Config) from the option dialog (XE2-XE4)
  • Added: TStream.WriteBuffer/ReadBuffer performance optimization (DFM streaming) (XE3-XE4)
  • Added: Memory leak fix for Win64 compiler (XE3)
  • Added: Compiler performance optimization for many Generics (XE-XE4)
  • Added: HelpInsight performance optimization (XE/XE2)
  • Added: HelpInsight background WaitFor bugfix
  • Added: Fix for QC 111500: Debugger truncates command line
  • Rewritten: Linker I/O buffer memory handling
  • Improved: comp32x.dll isn’t loaded at IDE startup anymore (XE-XE4)
  • Improved: IDEFixPackReg*.exe supports command line parameters (see “IDEFixPackReg*.exe /?”)

Changelog from 5.1 to 5.2 (2012-12-18)

  • Fixed: IDEFixPack crashed the IDE under Windows 8. (2009 only)

Changelog from 5.0 to 5.1 (2012-12-11)

  • Added: Disable Package Cache option in the installer
  • Added: Bug fix for find in files Umlauts issue
  • Added: Fix for CompileProgress PopupMode
  • Added: DFM read/inheritance error dialogs are sizeable
  • Added: Fix for QC 7270. Invisible TabSheet was activated
  • Added: Replacement for slow Compiler C-RTL functions (memcpy, memmove, memset)
  • Added: Replaced slow inlined strcpy in for file name copy (XE2+)
  • Added: No LoadStringRes calls for disabled warnings (UnsafeCode, Assertions…)
  • Added: Special memory allocator for lookahead tokens
  • Added: Fix for TLabel.AutoSize is ignored when a new TLabel is dropped onto the form (2009)
  • Added: Fix for Right click in the editor switch block selection flag but did not reset it (2009)
  • Added: Fix for ToDo List could cause an access violation when the IDE terminates (2009)
  • Added: Fix for Watch window sometimes lost the PopupMenu shortcuts (2009)
  • Added: Designer DFM Loading Form Modified-Flag patch (2009)

Changelog from 4.9.1 to 5.0 (2012-08-01)

  • Fixed: RC files couldn’t be opened by double clicking in the ProjectManager
  • Fixed: Random order of BuildConfiguration tags in the dproj file
  • Added: Much improved linker performance if generics are used
  • Added: Parser for Find Unit (for Symbol) can be canceled by pressing ESC
  • Added: Refactor actions are only available after the parser has finished
  • Added: Refactor actions don’t start the parser if the user pressed an unrelated shortcut
  • Added: ObjectTextToBinary performance optimization for Linker and the FormDesigner
  • Added: Compile Dialog accepts the cancel button when only up-to-date DCU files are loaded but no actual unit compilation is done
  • Added: Protect the editor from CnWizard’s access from Application.OnIdle (random AVs when closing tabs)
  • Added: comp32x.dll keeps file handles open that shouldn’t belong to the debugger instance (debugging the IDE that debugs a program => program’s EXE is locked) (XE2)
  • Added: Fix for compiler bug where a memory allocator returned an invalid address due to an overflow
  • Added: Enabled “Ignore errors when kibitzing” patch for XE+, 2009/2010 already had it enabled (XE/XE2)
  • Added: Fix for QC#82199: Saving from the DFM as text editor truncates the PAS file by the number of Unicode chars (2009/2010)
  • Added: Fix for IDE removing form-unit from project when switching from DFM Text editor to FormDesigner with errors in the DFM
  • Removed: DisablePackageCache patch (too many component vendors now depend on not loading all packages)

Changelog from 4.8 to 4.9.1 (2012-04-25)

  • Added: HelpInsight (Ctrl+Shift+H) doesn’t invoke the ErrorInsight parser in its OnUpdate in the main thread anymore
  • Improved: The Directory Cache isn’t reset for every DCU the ErrorInsight parser wants to read.
  • Fixed: Patch for QC83992 (TImageList) didn’t work when Windows was in classic style.

Changelog from 4.7.1 to 4.8 (2012-04-11)

  • Added: Fix for QC83992 (TImageList is duplicated in inherited forms)
  • Fixed: Missing Patch: Improved IDE ProjectManager performance (2009-XE)
  • Fixed: Missing Patch: Vista compatible main icon resource (2009-2010)

Changelog from 4.7 to 4.7.1 (2012-04-07)

  • Fixed: Background Compiler can be used again (2010+)
  • Fixed: IDE lost the debugger state and disabled all debugging functions after terminating a process

Changelog from 4.6.6 to 4.7 (2012-02-29)

  • Added: XE2 Update 4 support
  • Added: Improved DataModule Code to Design switch performance (XE2)
  • Added: Improved Component Toolbar performance when switching between Code and Design (2010+)
  • Added: Package and Palette Caches are disabled
  • Added: Code editor parenthesis highlighting knows about string literals
  • Added: Closing files/projects cancels the background parser
  • Added: Fix for QC #103388: Include System Variables isn’t working anymore (XE2)
  • Added: Debugger now calls CreateProcess with CREATE_DEFAULT_ERROR_MODE
  • Added: Improved IDE ProjectManager performance

Changelog from 4.6.5 to 4.6.6 (2012-01-04)

  • Fixed: Last directory cache fix broke the debugger’s source file search if you use relative paths

Changelog from 4.6.1 to 4.6.5 (2012-01-02)

  • Fixed: Directory cache didn’t find units in the DPR’s directory anymore
  • Added: Editor undo for a large undo operation is a lot faster

Changelog from 4.6 to 4.6.1 (2011-12-27)

  • Fixed: Directory cache didn’t find files if CodeInsight was invoked in a uses-clause
  • Fixed: Possible access violation during unit clean up

Changelog from 4.5 to 4.6 (2011-12-15)

  • Added: After compile/debug unused compiler memory is released
  • Added: LiveBindings slowed down the IDE (XE2) [XE2 Update 3 fixed it differently]
  • Added: Compiler Package optimization
  • Added: Delphi-Debugger GetFileIndex optimization
  • Added: Debugger memory leak fix (XE2)
  • Added: Memory leak fix for Debugger’s GetModuleFileNameEx calls (2009-2010)
  • Added: Improved the performance when debugging the IDE (2009-2010)
  • Improved: C++ Debugger symbol reader performance
  • Fixed: XML Serializer cache race condition (2009-XE)

Changelog from 4.4 to 4.5 (2011-11-02)

  • Added: Improved Compile Progress dialog responsiveness and update interval.
  • Added: Disables FileSystem cache to prevent double caching (directory cache) (XE2)
  • Added: Disables GetUnitOf cache (XE2) and replaces the function by a much faster algorithm
  • Added: Disables UnitFindByAlias cache as IDE Fix Pack already has a unitname hash (XE2)
  • Added: Optimized compiler string functions
  • Added: Delphi Linker write buffer size increased to 5 MB (original 64KB)
  • Fixed: Some access violations due to the unitname hash
  • Fixed: Directory cache caused problems with the debugger not finding the source files

Changelog from 4.3 to 4.4 (2011-08-28)

  • Fixed: Directory cache problem with packages
  • Added: Replaced LocalAlloc/ReAlloc/Free calls from the compiler with FastMM functions (2009 only)
  • Added: Compiler callback used inlined AnsiCompareFileName, that is now also replaced by a faster version
  • Added: Directory cache for $(WINDIR)\Globalization file search on IDE start (2009 only)
  • Improved: LogView tweaks

Changelog from 4.2 to 4.3 (2011-08-20)

  • Added: Compiler directory cache
  • Added: 64kB I/O buffer for map/drc file creation
  • Added: Performance boost for LogView
  • Added fix for: Welcome page problems with “Save Desktop” (2009)
  • Improved: .NET XMLSerializer’s CreateProcess call is now cached without the need to call CreateProcess.
  • Fixed: Cleaning up the compiler’s units let some units in memory.

Changelog from 4.1 to 4.2 (2011-06-20)

  • Added: Prevent IDE deadlocks
  • Added: HelpInsight parsing is done in the background when moving the mouse over an identifier (2009/2010)
  • Added: Much improved IDE startup performance
  • Added: Some old Debugger C-RTL functions are replaced by much faster versions
  • Removed: No search for non-existing $(WINDIR)\Globalization files on IDE start (caused problems)

Changelog from 4.0 to 4.1 (2011-04-22):

  • Fixed: Closing editor tab could raise access violation
  • Fixed: XML Serializer cache wasn’t compiled into IDE Fix Pack 2009 anymore
  • Added: IDE Fix Pack is now loaded earlier
  • Added: msxmldom, XMLDoc and Variants optimization for the IDE’s usage pattern
  • Added: IDE start disk I/O optimizations
  • Added: Masks.pas optimization (UpperCase => UpCase)
  • Added: No search for non-existing $(WINDIR)\Globalization files on IDE start
  • Added: No write access to $(BDS)\bin\_refactoring.log for Together.Refactoring
  • Removed: QC #50564: Long/Unicode string assignments could be made 20% to 30% faster (caused problems with the options dialog)

Changelog from 3.5 to 4.0 (2011-04-18):

  • Added: Extensive Code Completion/Code Insight optimizations
  • Added: Compiler file search cache
  • Added: Fix for: Compilation takes longer and longer when compiling multiple times
  • Added: Structure View updates in the main thread are now faster
  • Added: Another Error Insight “Cannot resolve unit” fix
  • Added fix for: QC #88038: Delphi always maximizes itself on taskbar change
  • Added fix for: QC #89148: TListView ItemData streaming error
  • Added fix for: QC #89149: Saving a form with a ListView can kill the IDE
  • Added fix for: QC #93152: TBitBtn.DoubleBuffered default doesn’t match constructor’s default
  • Fixed: The Editor Focus fix caused the IDE’s menu bar to shrink if “Minimize on start” is set
  • Fixed: Debugger sometimes stopped working (Start, Pause, Stop buttons are disabled)

Changelog from 3.0/3.01 to 3.5 (2010-09-12):

  • Added fix for: QC #86428: Form looses ancestor components after unloading packages (2009/2010)
  • Added fix for: QC #23580: Object Inspector shows incomplete / mangled event handler list (2009/2010)
  • Added fix for: Code Insight doesn”t show matching methods for event assignments
  • Fixed: “Local variable view” optimization caused debugger to crash after execution.
  • Optimization: QC #50564: Long/Unicode string assignments could be made 20% to 30% faster
  • Optimization: Optimized TObject.ClassNameIs implementation
  • Optimization: GetDynaMethod uses binary search in DMT
  • Optimization: LoadResString cache (improves the speed of switching between Code and Design editor)
  • Optimization: Call stack with IInterface parameters are resolved much faster (2009/2010)

Changelog from 2.9 to 3.01 (2010-03-15):

  • Added fix for: QC #80822: ObjectInspecor: Properties are duplicated after scrolling
  • Added fix for: QC #80776: ObjectInspector shows “EditControl” instead of the real content
  • Added fix for: QC #79776: Clicking on object Inspector rejects focus
  • Added fix for: QC #29732: Class Completion adds published section
  • Added fix for: Step-Out doesn’t recognize the return address at ESP (2010 only)
  • Removed broken fix for QC #47242: Possible AV when shutting down the IDE

Changelog from 2.8 to 2.9 (2009-12-22):

  • Bugfix: CallStack optimization could cause access violations in RAD Studio 2010
  • Added fix for: QC #75738: Debugging extremly slow
  • Added fix for: QC #68493: Switching away and back to Delphi orphans focus on Code Editor

Changelog from 2.71 to 2.8:

  • Added fix for: Vista compatible main icon resource doesn’t work
  • Added fix for: F1 key doesn’t invoke help from ObjectInspector (2010 only)
  • Added Debugger optimization (Callstack, Local variable view, Step-Into)
  • Added Startup .NET XML-Serializer cache

Changelog from 2.7 to 2.71:

  • Fixed: Compatiblity issue. IDEFixPack caused an IDE localization bug if OraDeveloperTools was loaded. (2009 only)

Changelog from 2.6 to 2.7:

  • Added fix for: 64 bit Debugger assertion
  • Added fix for: Undo destroys editor buffer
  • Added fix for: Vista 64 IDE startup delay
  • Added: QC #74646: Buffer overflow in TCustomClientDataSet.DataConvert with ftWideString
  • Fixed: TTabSheet looked stange if used with SilverThemes

Changelog from 2.5 to 2.6:

  • Added: RAD Studio 2009 Update 3 (removed fixed patches, update patches to new machine code)
  • Fixed: QC #47242: Possible AV when shutting down the IDE
  • Fixed: QC #71575: Delphi 2009 literal string assigment
  • Fixed: ToolsAPI IOTAProjectOptions.GetOptionNames destroys options.

Changelog from 2.4 to 2.5:

  • Fixed: The AppDeActivateZOrder patch now fixes the cause instead of the symptoms
  • Added fix for: Error Insight fails to find TObject class
  • Added fix for: Possible deadlock when Error Insight calls ProcessMessages

Changelog from 2.3 to 2.4:

  • Added: Fix for Error Insight defines VER190 instead of VER200
  • Added: Fix for IDE may select the wrong file when performing a ctrl+click on a filename in the editor
  • Added: faster AnsiCompareFileName replacement function which speeds up the “Install Packages…” dialog

Changelog from 2.2 to 2.3:

  • Added: Fix for “Cannot resolve unit name” ErrorInsight bug.

Changelog from 2.1 to 2.2:

  • Fixed: C++Builder compilation slow down caused by the ReadWrite mode fix
  • Fixed: DBGrid ScrollBar gab wasn’t painted correctly in BiDiMode <> bdLeftToRight
  • Fixed: TTabSheet could throw an access violation if no PageControl was assigned to it
  • Added: RtlVclOptimize unit is compiled into the IDE Fix Pack, speeding up the IDE (a little bit)

Changelog from 2.0 to 2.1:

  • Added fix QC #67351: Debugger invokes anonymous method by itself (2009)
  • Added fix QC #58045: Component captions and component icons disappear from form designer (2007-2009)
  • Added fix QC #50278: IDE Compiler opens all files in ReadWrite mode and blocks command line compiler (2007-2009)
  • Added fix QC #69456: IDE dead lock when updating the editors (2009)