History for Pascal Analyzer


This is a list of changes (error fixes and enhancements) for Pascal Analyzer.

Version 9.12.14 December 16, 2024
  • minor text change in Status Report: "Not found files" is now written as "Not loaded files", because now include files that are found but in excluded search directories will not cause the parsing to stop if "Include files must exist" is selected
  • fixed some issues with the To-Do Report and made the display more readable
  • new switch /PRIO for PALCMD.exe to set process priority (calls SetPriorityClass)
  • deactivate license is now done in the About-box
  • fixed error in Modules Report, for encodings
  • last file was never displayed in Modules Report, if XML format selected
  • Modules Report now also reports encodings for DFM-files and INC-files
  • Modules Report now in text format indents DFM files
  • REDU19-"Redundant parentheses" - fixed issue with typecasting
  • "Project configuration" renamed to "Build configuration" in Status Report
  • it is valid to use relative paths in the "Search folders" setting in project properties. These were previously resolved only according to the folder of the PAL/PAB project file. Now it is also resolved according to the folder of the main file for the analysis.
  • new parameter /BUILD in PALCMD to set build configuration, overriding setting in the project properties or in the DPROJ-file
  • fixed an error reading DPROJ files
  • fixed an issue with inline variables
  • CONV11-"Classes that have visible destructors with bad names" falsely reported records with destructor
  • fixed an error with REDU6-"Local identifiers that are set more than once without referencing in-between"
  • some report sections displayed items in random order, now displayed sorted after unit name and line number, affected REDU20-"Common subexpression, consider elimination", WARN60-"Condition evaluates to constant value", WARN59-"Explicit float comparison", REDU22-"Inconsistent conditions", WARN58-"Mixed operator precedence levels"
  • switches for hints and warnings now also can be set on the Switches tab page in project properties
  • added a new parameter /NAME for PALCMD. Use this parameter to change the name for the created/used PAP-file, and also name for the report folder.
Version 9.12.13 October 22, 2024
  • special diagnosis and debug version available in PAL.DEBUG.EXE, or PAL32.DEBUG.EXE (32-bits)
  • running analysis more than once in the same session could give syntax errors (error introduced in 9.12.11)
  • fixed error analyzing code paths
  • fixed error in WARN60-"Condition evaluates to constant value"
  • fixed multi-threading issues
  • fixed an issue with WARN46-"Local variables that are set but not later used"
  • WARN52-"Possible bad assignment", warnings could be duplicated
  • fixed errors with typecasts and WARN52-"Possible bad assignment"
Version 9.12.12 September 12, 2024
  • fixed issue with third-party code
  • improved performance for CONV19-"Local identifiers that 'shadow' outer scope identifiers"
  • improved performance for CONV20-"Local identifiers that 'shadow' class members"
Version 9.12.11 September 3, 2024
  • numerous low-level fixes and improvements
  • fixed some issues with exceptions
  • fixed issues with overloads
  • conditional define symbol LLVM is from Delphi 12 predefined for LLVM-based compilers (synonym to EXTERNALLINKER)
  • fixed issue with with-statements
  • improved handling of code paths
  • fixed issue with goto-labels and if-statements
  • fixed issue with non-standard formatted case-structures
  • identifiers containing "Dummy" (not case-sensitive) in the name are not reported, e.g. "vDummy", "dummyStr"
  • WARN55 now also warns for helpers that replace method in helped class/record, caption changed to "Replaces ancestor member, or method in helped class/record"
  • fixed issue with WARN5-"Variables that are set, but never referenced"
  • fixed issue with WARN46-"Local variables that are set but not later used"
  • fixed issue with OPTI5-"Virtual methods (procedures/functions) that are not overridden"
  • improved display of REDU20-"Common subexpression, consider elimination"
  • improved WARN18-"Function result not set"
  • improved MEMO1-"Local objects with unprotected calls to Free"
  • improved MEMO2-"Non-local objects with unprotected calls to Free"
  • fixed issue with WARN15-"Constructors/destructors without calls to inherited"
  • WARN38-"Ambiguous references in with-blocks" also displayed warnings from non-reported units
  • fixed issue with MEMO7-"Local objects that are referenced after being freed"
  • fixed issue with WARN57-"Enumerated constant missing in case-structure"
  • fixed issue with REDU19-"Redundant parentheses"
  • fixed issue with WARN9-"Var parameters that are used, but never set"
  • fixed issue with REDU15-"Unneeded boolean comparisons"
  • improved WARN47-"Duplicate lines", now only reports code statements that are duplicate, not declarations
  • fixed issue with WARN24-"Possible bad object creation"
  • fixed issue with WARN61-"Assigned to itself"
  • improved REDU16-"Boolean assignment can be shortened"
  • fixed issue with WARN46-"Local variables that are set but not later used"
  • WARN37-"Empty subprogram parameter list" also included results from non-reported units
  • fixed issue with OPTI8-"Parameter is 'var', can be changed to 'out'"
  • WARN5-"Variables that are set, but never referenced" now excludes identifiers passed as out parameters
  • WARN38-"Ambiguous references in with-blocks" also included results from non-reported units
  • fixed some issues with WARN54-"Set before passed as out parameter"
  • reports with default selected sections now is displayed with green font color in the project options dialog
  • subprograms that use "goto" are in most cases not examined by WARN18-"Function result not set"
  • fixed issue with WARN47-"Duplicate lines"
  • fixed issue with WARN59-"Explicit float comparison"
  • WARN20-"Dangerous Exit-statements" now does not report Exit immediately followed by a goto-label
  • fixed issue with WARN61-"Assigned to itself"
  • fixed issue with WARN63-"Mismatch parameter value (32/64-bits)"
  • Call Tree Report and Reverse Call Tree Report will cut the report contents if extremely many items
Version 9.12.10 April 23, 2024
  • numerous low-level fixes and improvements
  • fixed some issues with forward declarations
  • fixed error parsing "deprecated" directive
  • fixed error related to operators
  • fixed some issues with local subprogram
  • improved handling of records with variant part
  • fixed threading issue
  • fixed issue for with-statement
  • fixed issue with helpers
  • fixed issues with overloads
  • new option for Call Tree Report and Reverse Call Tree Report: "Extend". See help for more information
  • fixed issue with MEMO4-"Unbalanced Create/Free"
  • fixed issue with MEMO5-"Local objects that created more than once without being freed in-between"
  • fixed issue with MEMO6-"Local objects that are referenced before being created"
  • fixed issue with MEMO7-"Local objects that are referenced after being freed"
  • fixed issue with REDU16-"Boolean assignment can be shortened"
  • fixed issue with STWA3-"Subprogram calls itself unconditionally"
  • fixed issue with WARN18-"Function result not set"
  • fixed issue with WARN24-"Possible bad object creation"
  • fixed issue with WARN30-"Short-circuited if/case-statements"
  • fixed issue with WARN48-"Duplicate class types in exception block"
  • fixed issue with WARN52-"Possible bad assignment"
  • improved WARN59-"Explicit float comparison" to detect more cases
  • fixed issue with WARN61-"Assigned to itself"
  • fixed minor display error for the header of the Reverse Call Tree Report
  • menu appearing at right-click in the editor was displayed too far down
  • fixed some issues with printing of reports and code files
Version 9.12.9 March 8, 2024
  • fixed issues with multi-line strings
  • fixed issue with generics and forward declarations
  • fixed issue with overloads
  • CONV23-"Class fields that do not start with F", erronously also reported record fields
  • removed some false positives from REDU19-"Redundant parentheses"
  • fixed issue with STWA1-"Property access in read/write methods"
  • fixed issue with WARN18-"Function result not set"
  • fixed issues with WARN39-"Classes without overrides of abstract methods"
Version 9.12.8 February 21, 2024
  • improved handling of attributes
  • improved handling of overloads
  • suppress lines: PALOFF can now be wrapped in curly brackets also, like "{PALOFF}" or "{ PALOFF }", so not only "//PALOFF"
  • fixed low-level parser issue
  • fixed an issue concerning display of line numbers in reports
  • fixed issue with WARN18-"Function result not set"
  • fixed issue with WARN39-"Classes without overrides of abstract methods"
  • fixed issue with WARN55-"Redeclares ancestor member", causing duplicated results
Version 9.12.7 February 10, 2024
  • improved handling of class/record helpers
  • improved handling of if-statements formatted in a non-standard way
  • improved handling of records with variant fields
  • improved handling of type declarations inside class/record declarations
  • improved handling of overloads
  • fixed low-level code that could not handle very large string constants
  • fixed error parsing deprecated constants
  • fixed issue with OPTI8-"Parameter is "var", can be changed to "out""
  • fixed issues with REDU19-"Redundant parentheses"
  • fixed issue with STWA1-"Property access in read/write methods"
  • fixed issue with STWA3-"Subprogram calls itself unconditionally"
  • now does not examine variables with "absolute" directive in STWA5-"Possible bad pointer usage"
  • fixed issue with STWA10-"Interface lacks GUID"
  • fixed issue with WARN3-"Variables that are referenced but never set"
  • fixed issue with WARN39-"Classes without overrides of abstract methods"
  • fixed issue with WARN47-"Duplicate lines"
  • warning for WARN51-"Out parameter is read before set, or never set" was reported also for abstract methods
  • fixed issue with WARN61-"Assigned to itself"
Version 9.12.6 January 23, 2024
  • fixed a problem parsing literal strings
Version 9.12.5 January 20, 2024
  • fixed a problem with generics
  • fixed a problem with code paths
Version 9.12.4 January 15, 2024
  • fixed an issue with WARN24-"Possible bad object creation"
  • typo "nestled" changed to "nested" in reports and documentation
  • fixed an issue with WARN18-"Function result not set"
  • fixed an error handling Low() and High() function calls for expressions
  • fixed some issues with try-finally blocks and code paths
  • fixed some issues with generics
  • fixed problem with WARN51-"Out parameter is read before set, or never set"
  • fixed problem with WARN54-"Set before passed as out parameter"
  • fixed a problem with CONV30-"Private can be changed to strict private"
  • fixed a problem with WARN58-"Mixed operator precedence levels"
  • fixed some issues with overloads
  • fixed some issues with REDU19-"Redundant parentheses"
  • STWA7-"For-loop with possible bad condition" now displays the location of the for-loop
  • when jumping to the Delphi IDE, if several different IDEs are active, the one corresponding to the selected compiler target will be focused if possible
  • fixed some threading issues
  • fixed problem with WARN46-"Local variables that are set but not later used"
  • when changing the main file for a project, the dialog now opens in the same folder as where the existing file is
Version 9.12.3 November 20, 2023
  • removed unnecessary warning for WARN54-"Set before passed as out parameter"
  • custom attributes inheriting from TCustomAttribute are not reported in CONV1-"Ordinary types that do not start with T"
  • implemented some support for high-DPI environments
  • custom managed records are not examined for WARN7-"Local variables that are referenced before they are set" (and WARN8), they are considered always initialized
  • now supports also Delphi 12 Athens
  • WARN51, changed caption to "Out parameter is read before set, or never set", because now also reports when the out parameter is not set
  • fixed some issues with environment variables
Version 9.12.2 October 26, 2023
  • new STWA10-"Interface lacks GUID" report section
  • WARN27 now has caption "Short-circuited if/case-statements", because now also reports on "else" being short-circuited in a case-statement
  • fixed some issues with STWA4-"Index error"
  • fixed error: option to open file only in Delphi IDE, also opened it in the built-in editor (there is now another option for that behaviour)
  • improved WARN5-"Variables that are set but never referenced" to detect more cases
  • fixed some problems with generics
  • removed a false positive that could occur for WARN7-"Local variables that are referenced before they are set" (and WARN8)
  • fixed some issues with WARN60-"Condition evaluates to constant value"
  • fixed some issues with REDU19-"Redundant parentheses"
  • fixed problem with CONV13-"Multiple with-variables"
  • WARN9-"Var parameters that are used, but never set" now does not report variables that are managed
  • improved sorting in Searched Strings Report
  • for STWA2-"Ambiguous unit references" removed warnings that were formally correct, but harmless so no action needed
  • fixed a UI error when closing all other editor documents
  • improvements for WARN63-"Mismatch parameter value (32/64-bits)"
  • active tabsheet for reports and editor documents now drawn in slightly different color, so easier to see which one is active
Version 9.12.1 September 19, 2023
  • fixed some small errors in the project properties dialog, for report options
  • CONV23 now skips DFM-fields
  • fixed error parsing form files for FileMonkey
  • option "Form files format" on Parser tab page in project options is removed, not needed
  • "Loaded files" in Status Report now also includes form files (DFM etc)
  • avoided AV in editor window under some special circumstances
  • fixed an error with WARN46
  • fixed an error with CONV13
  • fixed an error with WARN61
  • AV could occur in some situations for STWA4 and other report sections involving expressions
  • when using /L with PALCMD, some of the warnings were output twice
  • option "Reselect report" did not work for Warnings Report
  • new options in the Preferences dialog, you can now select to open both the built-in editor and the Delphi IDE, when double-clicking in a report
  • WARN63 now also detects assignments 32/64-bits, so caption is now "Mismatch 32/64-bits"
  • improved STWA4 so it now works also for multi-dimensional arrays (up to 3 dimensions)
  • fixed some issues for WARN46
  • number of old warnings was not reported correctly for WARN44
  • fixed some issues with overloads
Version 9.12.0 August 14, 2023
  • lots of internal fixes and improvements, also with regard to memory consumption and speed
  • fixed an issue with nested class types and constants
  • removed false positives in WARN52-"Possible bad assignment"
  • fixed some issues with overloads
  • fixed an issue with STWA5-"Possible bad pointer usage"
  • WARN7 and WARN8 now skip variables that are "absolute" for other variables
  • fixed a formatting issue for the Status Report
  • fixed a false positive for WARN9-"Var parameters that are used but never set"
  • modified handling of expression to remove false positive for STWA4-"Index error"
  • improved MEMO4
  • improved MEMO5
  • improved MEMO6
  • improved MEMO7
  • improved WARN7
  • improved WARN18
  • improved WARN20
  • improved WARN21
  • improved WARN39, now also warns even if class not created
  • improved WARN59
  • fixed an error affecting WARN20
  • fixed problem with PALCMD and the limits file (/L switch)
  • removed the option to put PALOFF on a type declaration (e.g. class) and thus make PALOFF work on all members, caused lots of problems
  • removed STWA10-"Out parameter is read before set", its warnings were already in section WARN51
  • WARN21 now does not give warning for "raise" inside except-blocks
  • WARN14 listed the variable that was the target of "absolute", not the variable with the directive
  • the menu that appears on right-click in the report tree now contains also a help menu item (F1)
  • Ctrl+Alt+R in the editor window opens the reference menu for the underlying identifier (same as right-click)
  • the menu when right-clicking on a tab in the editor window has been extended with more of the already available functions
  • added illustrative glyphs to the popup reference menu in the editor
  • fixed error excluding identifiers for reports
  • slightly modified header text for STWA6
  • REDU8/REDU9 now exclude record fields
Version 9.11.0 March 27, 2023
  • fixed issues with compilation directives
  • new section in the Conventions Report, CONV23-"Class fields that do not start with 'F'"
  • PALCMD usage with /L for limit text file: now also reports report sections with less number of warnings than expected, and also writes results at end of status report file
  • new sections in the Conventions Report, CONV24-CONV27, reporting parameters that do not confirm to selected prefix
  • new section in the Conventions Report, CONV28-"Old-style function result"
  • new section in the Conventions Report, CONV29-"With statements"
  • improved interpretation of $IF-expressions
  • fixed some issues concerning generics
  • WARN63-"Mismatch parameter value (32/64-bits)" only reported the first location encountered. Now the list of warnings consists of two parts with a description for each item.
  • removed a potential AV for the Optimization Report
  • new section in the Identifiers Report, IDEN4-"Inlined variables and constants"
  • new section in the Conventions Report, CONV30-"Private can be changed to strict private"
  • new section in the Conventions Report, CONV31-"Protected can be changed to strict protected"
  • fixed an error parsing "inherited", caused false positive for STWA3-"Subprogram calls itself unconditionally"
Version 9.10.7 March 3, 2023
  • fixed issue resolving overloaded functions/procedures
  • improved UI for visually impaired users
  • adjusted for Delphi 11.3
Version 9.10.6 December 20, 2022
  • improved WARN52
  • STWA7 did not respect PALOFF when put on declaration of loop variable
  • fixed an issue with MEMO7
  • fixed an issue with WARN7
  • fixed an issue with WARN58
  • REDU1, now does not report members of interface type
  • Convention Report did not honor PALOFF
  • PALOFF did not work with REDU22 report section
  • improved error handling when source file contains invalid characters
Version 9.10.5 November 3, 2022
  • fixed a problem with MEMO4
  • fixed a problem with WARN63, parameters were not examined
  • fixed a problem with WARN7 for field variables
  • fixed a problem with CONV5
  • improved STWA5, now detects more situations
  • fixed a problem with inlined variables
  • for STWA5-"Bad pointer usage", if a variable is found with bad usage only the first occurence is reported
  • fixed a problem with WARN58
Version 9.10.4 September 9, 2022
  • adjusted for Delphi 11.2
Version 9.10.3 August 24, 2022
  • in PALCMD, if limit file is missing, now gives an error message instead of a stack trace
  • improved handling of custom managed records
  • fixed an edge case error for MEMO4
  • fixed error with relative path and DPROJ-file
  • fixed some memory issues
Version 9.10.2 August 8, 2022
  • fixed issues finding files
  • for a package main file (*.dpk) the corresponding *.dproj file was not read
  • fixed a problem with expressions and anonymous functions
  • increased the size of some internal fields to avoid range check errors
  • form files name format radio group was not updated properly in the project dialog
  • fixed some generics problems
  • improved handling of inlined variables
  • fixed issue with WARN7 for records
  • fixed issue with WARN9 if event handler was based on a control and not on a form
Version 9.10.1 July 6, 2022
  • fixed a problem parsing properties
  • a new project must now be saved before running
  • MINOR BREAKING CHANGE: relative paths can be set for main file, output folder, search folders, excluded reports folder and excluded search folders. They are relative to the folder for the project file (PAP-file), not relative to the main file folder as introduced in the previous update.
  • fixed a problem finding INC-files
Version 9.10.0 June 30, 2022
  • reworked handling of records and fields
  • improved resolution of calls to overloaded functions
  • new section WARN63-"Mismatch parameter value (32/64-bits)"
  • fixed an issue while jumping from report to built-in editor window
  • relative paths (relative to the folder of the main file) can now be specified for search folders, excluded report folders, and excluded search folders
Version 9.9.8 March 9, 2022
  • fixed a problem parsing properties
Version 9.9.7 March 1, 2022
  • fixed a problem with INCA2-"Inconsistent case for different identifiers with same name"
  • fixed some issues for WARN7-"Local variables that are referenced before they are set"
  • fixed some issues related to line suppression ("PALOFF")
  • fixed problem with STWA6-"Possible bad typecast"
  • fixed problem with STWA4-"Index error"
  • fixed some problems parsing expressions
Version 9.9.6 February 8, 2022
  • fixed a problem with STWA10-"Out parameter is read before set"
  • improved handling of interfaces
  • improved WARN52
  • improved OPTI8
  • new features for PALOFF handling
  • fixed parsing error for property declaration in some edge case
Version 9.9.5 January 21, 2022
  • fixed an issue with class/record helpers
  • fixed a cosmetic UI issue when double-clicking in report viewer
  • fixed some issues concerning overloaded subprograms
  • removed some false positives from REDU12-"Functions called only as procedures"
  • removed false positives from REDU16-"Boolean assignment can be shortened"
  • fixed a problem recognizing identifiers in some edge case
  • fixed an error while parsing variant records
  • fixed an error resolving property references
  • fixed an error related to properties and generic types
  • fixed a potential problem with STWA6-"Possible bad typecast"
Version 9.9.4 January 2, 2022
  • fixed an issue resolving function calls
Version 9.9.3 December 29, 2021
  • fixed an issue resolving overridden function calls
Version 9.9.2 December 15, 2021
  • removed an exception that could occur while parsing $IF-expressions
  • REDU1 now not reports value parameter "Sender"
Version 9.9.1 December 3, 2021
  • fixed some problems with WARN3, WARN4 report sections
  • fixed an issue with REDU1 and class helpers
  • fixed some issues with class helpers
  • fixed an issue with properties in DFM-files, that affected the "Uses Report"
  • fixed an issue with overloaded functions
  • MEMO1, MEMO2 now exclude objects that are freed directly on the code line just after where they are created
Version 9.9.0 September 21, 2021
  • when right-clicking on a report tab page, the tab is now selected
  • fixed broken find function in reports
  • new report section: "OPTI11-Managed local variable is inlined in loop"
  • fixed problems when double-clicking in an HTML report
  • removed some false positives from STWA2
  • activated hint for source code tabsheet, now shows the complete file path
  • disabled buttons showed incorrect glyphs
  • added support for Delphi 11
  • improved function that checks for new version
Version 9.8.0 August 4, 2021
  • WARN39: warnings are not issued for classes that do not implement an abstract method, if that class is never instantiated
  • STWA7: fixed error, also reported suppressed lines (PALOFF)
  • WARN62: events that override events in ancestor class, now do not generate a warning
  • new report section: OPTI10-"Managed variables can be declared inline"
  • improved performance for COWA1 report section
  • removed false positives from WARN62 in some cases
  • improved WARN3 report section
  • removed false positive for STWA3 when function address was referenced
  • removed false positive for STWA10 when variable was typecasted
  • WARN7/WARN8: now writes "Read+Set" when passed as a var-parameter
  • improved MEMO4, now also uses expressions
Version 9.7.7 July 7, 2021
  • fixed some formatting errors for XML reports
  • improved feedback while parsing expressions
  • calls to Writeln procedure were not always handled correctly
  • message pane in bottom center: output is now left-justified
  • various preformance improvements and fixes for expression
Version 9.7.6 February 4, 2021
  • new version of activation component
Version 9.7.5 September 22, 2020
  • if number of structures to analyze was less than 10, could cause exception and no reports were written
  • multireports could cause AVs
Version 9.7.4 September 18, 2020
  • if number of expressions to analyze was less than 10, could cause exception and no reports were written
  • WARN47-"Duplicate lines" did not work correctly
Version 9.7.3 September 11, 2020
  • performance improvements
  • fixed problem with WARN7 report section
Version 9.7.2 August 20, 2020
  • removed false positives in WARN53
  • WARN61 report section could cause AV
  • fixed error parsing nodefault directive
  • fixed false positive in WARN39 in some cases with class methods
  • fixed error with include-directive containing "/"
Version 9.7.1 July 29, 2020
  • lots of internal improvements
  • WARN52 report section lines were duplicated
Version 9.7.0 May 29, 2020
  • added support for Delphi 10.4 (Sydney)
  • new PALWIZ16.DLL for Delphi 10.4, for jumping from PAL to Delphi IDE
  • WARN56-"Parameter to FreeAndNil is not an object" always returns 0 warnings if compiler is Delphi 10.4 or later
  • fixed issues with expressions
  • focusing Delphi IDE did not work, after jumping to code
  • default compiler target is Delphi 10.4 Win64
  • fixed some issues with HTML reports
  • PALOFF (or the string choosen as suppression marker); enough now that the string exists somewhere in the comment after "//"
Version 9.6.4 May 19, 2020
  • various fixes related to expressions
  • WARN24: removed false positive for record in some cases
  • fixed parser error for with-statement, and inner class type
  • fixed problems with the report viewer
  • removed false warning for CONV12-"Identifiers that have unsuitable names"
  • fixed problem related to parsing "inherited"
Version 9.6.3 May 6, 2020
  • various fixes related to expressions
Version 9.6.2 April 15, 2020
  • changed to Tahoma 9pt in dialogs
  • double-clicking in a report caused selection to move one line up
  • fixed parser error for generics
Version 9.6.1 February 20, 2020
  • fixed error handling Unicode in viewer
  • now also supports source files in UCS-2
  • fixed problem parsing attributes in some cases
  • modified fonts used in UI
Version 9.6.0 December 6, 2019
  • removed false warning in STWA3, when method was assigned to event handler
  • fixed problem with Form Report
  • fixed error in WARN18 in some situations
  • fixed error in WARN3 for record fields
  • added support for Delphi 10.3.3, with new target Android64
Version 9.5.0 August 7, 2019
  • fixed error in Form Report, font names had bad values
  • fixed issue when jumping to the editor window
  • WARN3-"Variables that are referenced but never set" did not handle non-local variables correctly
  • new Clone Report
Version 9.4.6 May 27, 2019
  • fixed some problems for "with"-statements
  • fixed problem with "inherited" call
  • fixed problem with STWA2-"Ambiguous units" and constants
Version 9.4.5 March 6, 2019
  • some constants for Delphi 10.3 were missing, affected scope of analysis
  • speed improvements when analyzing structures
  • fixed parser errors for inline variables
Version 9.4.4 February 20, 2019
  • STWA3-"Subprogram calls itself unconditionally" - removed false positive in some cases
  • improved WARN52-"Possible bad assignment", now handles more situations
  • misc. memory optimizations
Version 9.4.3 January 29, 2019
  • fixed parser error for inline variables
Version 9.4.2 January 28, 2019
  • About-box can now display license information
  • WARN7-"Local variables that are referenced before they are set", now also checks Result variable in functions
  • WARN62-"Possible orphan event handler", tightened conditions, to avoid false positives
  • fixed error handling result variable for operator methods
Version 9.4.1 December 14, 2018
  • fixed some issues for WARN62-"Possible orphan event handler"
  • WARN7-"Local variables that are referenced before they are set", now also checks Result variable in functions
  • WARN62-"Possible orphan event handler", tightened conditions, to avoid false positives
  • fixed error handling result variable for operator methods
Version 9.4.0 December 4, 2018
  • support added for Delphi 10.3 Rio
  • fixed AV in WARN62
Version 9.3.1 November 25, 2018
  • WARN62 was analyzed even if DFM files were not loaded
Version 9.3.0 November 21, 2018
  • fixed problem resolving identifiers within "with"-statement
  • improved WARN52
  • renamed WARN52 to "Possible bad assignment"
  • new STWA10 report section: "Out parameter read before set"
  • removed false positive for STWA9-"Generic interface has GUID"
  • fixed problem resolving calls to overloaded function
  • new WARN62 report section: "Possible orphan event handler"
Version 9.2.11 October 27, 2018
  • dialog to select folders is now much wider, so more of the path is visible
  • fixed problem with code that could be stuck in infinite recursion
  • fixed error with false positive for OPTI8-"Var param can be changed to out"
  • "Processing expression" message now not shown for command-line program
  • removed a false positive for WARN5-"Possible bad pointer", for an edge case
Version 9.2.10 September 26, 2018
  • removed false warning in WARN55 (Redeclares ancestor member)
  • removed false warning in MEMO4 (Unbalanced create/free)
  • removed false warning in WARN61 (Variable assigned to itself)
  • much improved handling of generics
  • improved WARN7 (Local variable read before written), removed some false positives in edge cases
  • fixed error in REDU22 (Inconsistent conditions), case sensitivity was not handled correctly
  • fixed parser error when property had name "Result"
  • fixed error in WARN47 (Duplicate lines)
  • fixed false positives for WARN18 (Function result not set)
  • fixed problems related to analysis of expressions
Version 9.2.9 August 25, 2018
  • reference for used unit was not updated correctly in some cases
  • reference for class and record helpers were not correctly set
  • fixed error resolving expressions
Version 9.2.8 August 18, 2018
  • removed false warning for WARN56 in some cases
  • WARN47-"Duplicate lines" also included lines in comments
  • fixed error parsing unit name reference
Version 9.2.7 July 31, 2018
  • fixed problem parsing typed constant
  • fixed problem in STWA4 report section
  • wizard did not work under pre-Vista versions
  • fixed error in WARN61 report section
  • fixed some problems resolving unit names
  • number of hits in report tree miscalculated when suppressed locations existed
  • fixed some small issues with status bar for editor window
  • fixed parser, removed false syntax error
  • handling of unknown references in WARN7 and WARN8 was improved
  • improved code that identified a unit as a Windows API unit
  • fixed error resolving class members
  • improved WARN7 report section
  • fixed errors resolving overloads
  • fixed error parsing typed enumerated constant
  • fixed error parsing attribute in a variant record type declaration
Version 9.2.6 June 6, 2018
  • fixed open/save dialogs, so running under XP is possible
  • fixed some problems evaluating expressions
  • class constants were erronously reported in WARN1
  • fixed some problems with WARN58 report section
  • fixed some problems with WARN59 report section
  • fixed some problems with WARN60 report section
  • fixed some problems with STWA1 report section
Version 9.2.5 May 28, 2018
  • fixed an issue regarding activation and license handling
Version 9.2.4 May 24, 2018
  • fixed an error parsing variant record fields
  • CPU32BITS was not defined for some targets
  • fixed error resolving typecasts with "as"
  • fixed error for WARN3 for records with methods
Version 9.2.3 May 10, 2018
  • new switch /P in PALCMD.EXE
  • fixed issue with invalid typecast
Version 9.2.2 March 26, 2018
  • fixed AV in STWA8 in some edge cases
Version 9.2.1 March 20, 2018
  • fixed some problems with validation of licences
  • improved MEMO4 report
Version 9.2.0 March 14, 2018
  • new report section (OPTI9) in Optimization Report: "Inlined subprogs not inlined because not yet implemented"
  • new report section (WARN61) in Warnings Report: "Assigned to itself"
  • new report section (STWA7) in Strong Warnings Report: "For-loop with possible bad condition"
  • new report section (STWA8) in Strong Warnings Report: "Bad parameter usage"
  • new report section (STWA9) in Strong Warnings Report: "Generic interfaces with GUID"
  • new report section (REDU24) in Reduction Report: "Local identifiers never used"
  • fixed routine that autoselects new report sections if project from an older version
  • fixed issue with expressions, were not processed correctly
  • fixed some problems with REDU21-"Default parameter values that can be omitted"
Version 9.1.0 February 9, 2018
  • new report section (WARN60) in Warnings Report: "Condition evalutates to constant value"
  • new report section (CONV22) in Convention Report: "Class fields that are not declared in the private/protected sections"
  • removed false positive for duplicate lines (WARN47) when anonymous function used
  • added a couple of predefined identifiers in System.pas introduced in Delphi 10.2 Upgrade 2, for Windows targets
  • fixed parser problem with type declaration
  • CONV5 also handled field instances, should not
  • fixed parser problem with class const declaration
  • fixed parser error when semicolon was omitted before "end"
  • fixed parser error for "implements"
Version 9.0.11 December 5, 2017
  • fixed error resolving generics
  • platform identifier in Delphi project file was not correct for iOSDevice64 targets
Version 9.0.10 November 25, 2017
  • fixed error with resolution of type alias declaration
Version 9.0.9 October 27, 2017
  • fixed error that caused AV when starting parsing
Version 9.0.8 October 25, 2017
  • STWA2 (Ambiguous unit references), removed some false positives
  • WARN18 (Function result not set), removed false positives
  • WARN52 (Bigger to smaller) now not considered for variants
  • MEMO4, (Unbalanced Create/Free), removed false positives in some situations
  • REDU1 (Identifiers not used), now does not check identifiers in assembler code
  • fixed problem resolving calls to overloaded functions/procedures
  • fixed problem involving types declared as aliases to other types
  • fixed problem resolving members of interfaces
  • initial scope for record type fields was not set to "public"
  • fixed error resolving calls to overloaded subprogs
Version 9.0.7 September 20, 2017
  • all EXE and DLL files are now code signed
  • error in MEMO4, did not report correctly
Version 9.0.6 August 27, 2017
  • removed false positive from STWA1 (Strong Warnings Report)
  • removed potential AV in Control Warnings Report
  • fixed error parsing expressions
  • fixed some problems with the Searched Strings Report
  • fixed some problems resolving methods based on an interface
  • fixed some issues with multireports
  • speedied up CONV19 considerably
  • fixed error resolving object created through a class reference
  • fixed problems resolving overload functions
Version 9.0.5 July 25, 2017
  • fixed parser error for attribute in interface section
  • open project dialog did not allow to open multiprojects
  • sets default extension for file save dialog
  • as default "Excluded identifiers from these folders in reports" is set to "$(BDS)<+>" to avoid reporting on RTL/VCL source
  • Duplicate Identifiers Report is now a lot quicker; also speedied up the Inconsistent Case Report, and Events Report
  • fixed issue with "with"-statements
Version 9.0.4 June 29, 2017
  • fixed some problems with expressions
Version 9.0.3 June 28, 2017
  • fixed some problems with report section STWA4 (Index Error)
  • added feedback on status bar during expression processing
Version 9.0.2 June 18, 2017
  • fixed problems resolving typecasts
  • fixed error, did not find .dpr file when loading .dproj file
  • fixed problems with Third-party Report
Version 9.0.1 June 9, 2017
  • fixed minor errors in help texts
  • fixed error, did not automatically add new report sections in 9.x for old projects
  • tables for HTML Complexity Report did not show right content
  • fixed problem parsing $IF-directive
  • fixed some issues resolving generics
Version 9.0.0 April 8, 2017
  • support added for the new Delphi 10.2 Tokyo, all compiler targers
  • new section in Strong Warnings Report: "Index error" (STWA4)
  • new section in Strong Warnings Report: "Possible bad pointer usage" (STWA5)
  • new section in Strong Warnings Report: "Possible bad typecast (consider using "as" for objects)" (STWA6)
  • new section in Warnings Report: "Mixing interface variables and objects" (WARN53)
  • new section in Warnings Report: "Set before passed as out parameter" (WARN54)
  • new section in Warnings Report: "Redeclares ancestor member" (WARN55)
  • new section in Warnings Report: "Parameter to FreeAndNil is not an object" (WARN56)
  • new section in Warnings Report: "Enumerated constant missing in case structure" (WARN57)
  • new section in Warnings Report: "Mixed operator precedence levels" (WARN58)
  • new section in Warnings Report: "Explicit float comparison" (WARN59)
  • new section in Code Reduction Report: "Consider using interface type" (REDU18)
  • new section in Code Reduction Report: "Redundant parentheses" (REDU19)
  • new section in Code Reduction Report: "Common subexpression, consider elimination" (REDU20)
  • new section in Code Reduction Report: "Default parameter values that can be omitted" (REDU21)
  • new section in Code Reduction Report: "Inconsistent conditions" (REDU22)
  • new section in Code Reduction Report: "Typecasts that possibly can be omitted" (REDU23)

.. and more

Read more about the new features in PAL9!

Version 8.3.15 March 6, 2017
  • fixed error in Literal Strings Report, could cause AV
  • fixed error parsing declaration with generics
  • Similarity Report is now 80% faster (for example from 100 secs to 20 secs)
  • fixed error parsing "final" directive
  • fixed problem parsing class declaration with unitscoped identifier names
  • fixed some issues with references to field in objects
  • fixed some issues with dereferencing variables
Version 8.3.14 February 25, 2017
  • fixed file masks when selecting files, did not show all choices properly
  • fixed some problems with object in DFM-file missing type
  • dialog to select report sections: now shows how many sections are selected
  • improved handling of references to class helper methods
  • STWA3 (Subprogram calls itself unconditionally) currently does not examine overloaded subprograms
  • fixed exception in some cases while watching changed files in the editor
  • WARN9 (Var parameters that are used, but never set) and WARN10 (Var parameters that are used, but possibly never set) now exclude parameters to methods for classes that implement an interface
  • OPTI8 (Parameter is "var", can be changed to "out"') now exclude parameters to methods for classes that implement an interface
  • fixed error resolving generics declaration
  • improved handling of record fields passed as parameters
  • fixed parser error related to anonymous functions
  • STWA2 (Ambiguous unit reference) now excludes warnings if one identifier is from System and the other one from an Embarcadero unit if it is not clear that it is indeed an ambiguous reference
  • fixed problem resolving read/write for properties
  • fixed problem resolving overloaded calls in some cases
  • fixed error affecting WARN18 (Function result not set)
Version 8.3.13 January 29, 2017
  • fixed some problems with file dialogs (could get range error when selecting files for HTML output)
  • fixed problem that could cause errors for CWARN3 (conflicting accelerators) and CWARN4 (focused control not set)
  • fixed list index error when resolving unit names
  • removed false positives for references to System identifiers in some cases
  • fixed error in low-level function handling references, caused missing warnings for WARN19 (recursive subprograms)
  • fixed error affecting REDU2 and REDU3 (identifiers only used in lower scope)
Version 8.3.12 January 21, 2017
  • removed some duplicate references added to identifiers
  • uses Vista-style dialog to select folder for report root folder
Version 8.3.11 January 14, 2017
  • fixed problem resolving unit names
  • STWA2 (Ambiguous unit references) is not reported when units involved are System and Windows
  • WARN47 (Duplicate lines) now excludes some common assembler statements
  • COWA2, checks that object is of correct type, could cause AV
  • REDU8 (Zero-initialized fields), now also handles variants
  • OPTI8 (Var parameter can be changed to out) removed some false positives
  • fixed problem resolving generic types
  • fixed handling of references to record variables and field instances
Version 8.3.10 January 6, 2017
  • REDU1 (Identifiers not used) now does not report a parameter used with a subprog that implements assembler code
  • STWA2 (Ambiguous unit references) now also displays line number for reported units
  • WARN18 (Function result not set) is not reported when the result type is unknown (source not found)
  • now uses TurboActivate 4.0.8
  • fixed error with /I parameter for PALCMD.EXE, did not work
  • fixed parser problem with constant declared as an anonymous record type
  • fixed parser problem resolving unit names
Version 8.3.9 December 15, 2016
  • WARN37 (Empty subprogram parameter list) is now not selected as default
  • new parameter /I for PALCMD, gives path to PAL.INI
  • fixed problem with WARN46 (Local variables that are set but not later used) causing false positives under some conditions
  • printing did not function properly
  • fixed problem resolving unit names
  • WARN9, WARN10 (Var parameters that are used but never set) do not list parameters for methods that are overridden
  • now uses Vista-style dialogs for selection of files
  • fixed error for units with many overloads
  • fixed error in WARN52 (Bigger assigned to smaller), caused AV
  • skips warning for MEMO7 (Local objects that are referenced after beging freed), if Free is in a condition
  • removed some needless warnings in STWA2 (Ambiguous unit refs)
  • MEMO1 (Local objects with unprotected calls to Free) now skip objects that are not created (probably assigned to existing object)
  • WARN50 (Identifier with same name as keyword/directive) now does not report overriding methods
  • false warning in STWA3 (Subprogram calls itself unconditionally), when parameters given as "()"
Version 8.3.8 November 27, 2016
  • end line of structures (for-loop, if-block etc) was not correctly registered
  • removed false warning in WARN15 when constructor calls another constructor
  • WARN7, WARN8 now also include local variables that are just read (never set)
  • removed some false warnings for arrays passed as parameters of pointer types
Version 8.3.7 November 22, 2016
  • enumerated type could be marked as unused even though its enumerated constants were used in a typed constant declaration
  • counter for WARN52 warnings was not correctly set
  • improved handling of "strict" class members
  • fixed problem for identifiers starting with '&&'
  • misc. parser fixes and improvements
Version 8.3.6 September 24, 2016
  • "WARN15-Constructors/destructors without call to inherited" was reported also for abstract members
  • "WARN26-Instance created of class with abstract methods" was triggered erronously in some cases
  • fixed problem resolving record type declared unnamed directly in variable declaration
  • WARN40 and WARN42 did not update their hit counters
Version 8.3.5 September 4, 2016
  • fixed problem in WARN8
Version 8.3.4 September 1, 2016
  • fixed problem with Uses Report, writing file to wrong location
Version 8.3.3 August 31, 2016
  • fixed problems with generics
  • fixed problem: when double-clicking in viewer, the opened editor window concealed the selected line in the viewer, and another line was selected
  • improved WARN7 report section (Local variables that are referenced before they are set)
  • fixed a problem with report section OPTI8 (Parameter is "var", can be changed to "out")
  • fixed tab redraw issue for editor tab pages
  • editor tab page closed without confirmation of saving when using the "x"
  • improved WARN18 (Function result not set)
  • fixed problem with "with" header, affecting WARN24 (Possible bad object creation)
  • improved WARN26, better handling of generic types (Instance created of clkass with abstract methods)
  • WARN49, now excludes identifiers with name "Name" or "Index" (Redeclared identifiers from System unit)
Version 8.3.2 June 13, 2016
  • fixed problem with type declaration in class
Version 8.3.1 June 5, 2016
  • fixed problem with sorting of references
  • fixed parsing problems with generics
  • internal structure could overflow in some cases
Version 8.3.0 May 8, 2016
  • "WARN48" was written as "WARN47" in report list
  • fixed generics parser error
  • added support for Delphi 10.1 Berlin, with all targets
  • fixed parser error for conditional directive
  • fixed parser error for anonymous function
  • PALCMD now also writes error log to AppData folder
Version 8.2.8 April 14, 2016
  • error log will be created in "C:\Users\xxx\AppData\Roaming\Peganza\Pascal Analyzer" for unhandled exceptions
Version 8.2.7 February 1, 2016
  • fixed problem resolving overloaded subprograms
Version 8.2.6 January 21, 2016
  • lines starting with "(*" or "{" are not considered when reporting duplicate lines
  • fixed error with pointer dereference
  • Status Report now also displays selected configuration in DPROJ file (if any found)
  • improved resolving of generics declarations
  • fixed error for some COWA report sections, that could result in exceptions
  • fixed problems with "with"-statements, resolving identifiers
  • fixed problem resolving overloaded subprograms
  • PALOFF can now be used to suppress warnings for units in uses lists in Uses Report
Version 8.2.5 December 1, 2015
  • REDU1 now also reports unused identifiers declared in subprogs that are not used
  • fixed issue parsing generics
  • fixed issue with unit scope
  • fixed issue with calls to Inc, Dec
Version 8.2.4 November 16, 2015
  • fixed issue with kind of type set erroneously in some rare cases
  • "class var" now not reported by CONV5 if in public section
  • fixed parser problems with generics and anonymous functions
  • WARN50 (bad identifier names) is not default now, it is covered by CONV12 which does the same and more
  • WARN50 and CONV12 (bad names), now exclude "Name" and "Index"
  • fixed error with identier names
Version 8.2.3 October 18, 2015
  • Convention Report CONV12 now checks all types of identifiers
  • improved parser code for handling anonymous functions
  • improved handling of references when passed as var-parameters
  • section masks for texts in tree did not always display properly
  • removed some sections in Reduction Report from those selected as default
Version 8.2.2 October 5, 2015
  • dialogs did not scale well for some resolutions
  • internal list of OSX compiler versions was wrong
Version 8.2.1 September 28, 2015
  • fixed some issues writing PAL.INI settings file
Version 8.2.0 September 22, 2015
  • fixed edge case error parsing property declaration
  • section WARN49, now excludes Create from System unit, and overriding methods
  • removed some unnecessary warnings in WARN47, duplicate lines
  • fixed problem parsing attributes
  • special handling of parameters with pointer types, with name "Dest", or "Target", considered var-params, because underlying memory buffer is set (e.g. StrCopy)
  • wizard now uses combobox instead of radiogroup to select compiler
  • fixed bug in wizard code, checkbox to include DFM-files was not working as expected
  • fixed problems with "ampersanded" identifiers
  • duplicate lines (WARN47) now excludes also multiple "repeat" lines (lines with only the keyword "repeat")
  • added support for Delphi 10 Seattle
Version 8.1.6 August 5, 2015
  • Reduction Report, "fields used in single method" was not selected as default
  • Optimization Report, "local subprogs" was not selected as default
  • Reduction Report, "functions/procedures only called once" now excludes exported and external subprogs
  • fixed error causing AV when investigating class structures
Version 8.1.5 July 27, 2015
  • fixed error in StrongWarnings Report, local variable was uninitialized, could cause AV
  • fixed error in Warnings Report, "Var params not set"
  • fixed some minor issues in the help system
  • fixed issue resolving local forward declarations
  • Similarity Report now includes identifiers in the same unit (earlier those in overlapping scope)
  • timings for reports were incorrect if midnight had been passed during parsing and report generations
  • fixed Warnings Report, "abstract methods not overridden", supports double-clicking
  • improved Strong Warnings Report, "property access in read/write" (STWA1)
  • improved Warnings Report, "bigger to smaller" (WARN52)
  • improved Warnings Report, "local set not later used" (WARN46)
  • improved Warnings Report, "recursive subprogs" (WARN19)
  • improved Strong Warnings Report, "subprog calls itself unconditionally" (STWA3)
  • improved Control Warnings Report, "missing OnClick" (COWA6)
  • when selecting report sections in the dialog, now displays also prefix like "WARN1" etc.
  • fixed error evaluating RTLVersion
  • improved Reduction Report, "fields only used in single method" (REDU17)
  • more detailed description of field, "Class Field" or "Record Field" in reports
  • improved Convention Report "bad name method pointer" (CONV7)
  • fixed some issues resolving local variables/class members
  • improved Warnings Report, "func called as proc" (WARN44)
  • fixed error when checking if result set in function
  • fixed error resolving variable of procedural type
  • fixed issues resolving property overrides
  • environment variables can now also be used for the setting "Report root folder" on the General tab page for the project settings. For example, "$(PALREPORTROOT)" which can resolve to different directories on different computers.
  • option "All files" on the General tab page of project settings, now displays as "All files (recommended)"
Version 8.1.4 June 22, 2015
  • fixed problem resolving calls to overloaded subprograms
  • report tree font was forced to "fixed", now any font can be used
  • removed unnecessary spaces in XML format
  • more complete location string in cross-reference reports
  • fixed error with overloaded virtual method, when overload directive was not repeated for the overloading method
Version 8.1.3 June 7, 2015
  • fixed problems parsing generics
Version 8.1.2 June 2, 2015
  • fixed problems parsing generics
  • fixed problem for operator with name "In"
  • improved handling of "scoped enums"
Version 8.1.1 May 25, 2015
  • fixed error with "&End" identifier
  • XML reports now also write BOM to start of file
  • fixed some issues with predefined identifiers from System unit
Version 8.1.0 May 19, 2015
  • fixed error with "&End" identifier
  • fixed an issue with unit scopes
  • cross-ref reports now do not list identifiers that are just declared/implemented but do not have references
  • lots of improvements in the parser, drastically impreoved performance and accuracy
  • fixed edge case error parsing DFM files
  • fixed false warnings for bad object creation in Warnings Report, after "raise"
  • when selecting folder, last selected folder is remembered
  • when selecting folder, automatically added to list when selecting excluded folders for reporting
  • fixed bad performance for "Bigger to smaller" section in Warnings Report
  • removed some false warnings for unused identifiers and fields only used in single method (Code Reduction Report)
  • fixed error resolving environment variables for XE7
  • added support for all targets in Delphi XE8
  • ned PALWIZ11.DLL for IDE interaction with Delphi XE8
  • removee false positives for "Constructors/destructors without call to inherited" in Warnings Report
  • subprogs only called once (Code Reduction Report), now excludes event handlers
  • WEAKINTFREF was not defined for relevant targets
  • "Funcs only called once", now skips functions that are passed as parameters
  • Case Report, "Mismatch unit Filenames", now is not case-sensitive
  • now considers rsvars.bat
  • improved handling of ambiguous unit references (Strong Warnings Report)
  • Warnings Report, "Constructors/destructors without call to inherited" does not report constructors that do not call inherited, if they descend directly from TObject
  • Warnings Report, "Var params that are read, but not set" now skips subprogs that probably are event handlers
  • Code Reduction Report, variables that are set twice without reading in-between now excludes locations where passed as var parameters
Version 8.0.2 Mar 6, 2015
  • fixed some problems with XML and UsesReport
  • fixed issues with parsing when "Main file and referenced" selected
  • fixed a problem parsing generics declaration
  • fixed a problem related to variable name prefixed with ampersand
  • fixed wrong shortcut for PAL32.EXE in Start Menu, when only 32-bit installed
  • fixed coloring of tree items
  • Ctrl+Alt+U in editor did not work correctly
Version 8.0.1 Feb 25, 2015
  • fixed error related to resourcestring declaration
  • fixed error due to forward class declaration
  • improved back/forward actions for browser pages
  • fixed error parsing old object type
  • fixed some issues with XML format in reports
  • fixed wrong shortcut for PAL32.EXE in Start Menu, when only 32-bit installed
Version 8.0.0 Feb 23, 2015
  • new 64-bits version, 32-bits versions still available
  • improved Unicode support
  • built-in advanced editor, opens source file when double-clicking in reports
  • optionally backup editor files to hidden history folder (like in Delphi IDE)
  • search directories in Status Report are now sorted
  • commandline for PALCMD: parameter for analyzed file does not need to be a complete path, if just a file name, PALCMD will use the current working directory. If the current directory is not specified, uses the same directory as where the PALCMD.EXE is located
  • new column in Modules Report, displays encoding name for source code file
  • CompilerVersion, RTLVersion conditional directives are now handled
  • much improved ability to find code location when double-clicking in reports
  • new section in Code Reduction Report, "Fields only used in single method"
  • new section in Optimization Report, "Local subprogs"
  • new section in Warnings Report, "Bigger to smaller"
  • new options for editor added to Preferences dialog, new tab page
  • reports now available for viewing as soon as they are ready, node in the tree is enabled and clickable
  • new option for enabling reports for viewing as soon as they are ready
  • new option to show reports in tab pages
  • new setting for projects: "Description"
  • new columns in Modules Report, for encoding, and if initialization/finalization sections exist
  • fields in records are now tracked as individual variables
  • Status Report now also lists files that were searched for, but not found
  • much improved parser speed
  • improved internal data structures, better memory handling
  • improved speed a lot for Conventions Report
  • double-click in Status Report opens file in editor window, or opens Explorer for the clicked folder name
  • new option on Parser tab page "Parse implementations for non-reported units", if checked uses pre-PAL8.x behaviour to also parse implementation sections for units that are not reported. In PAL8 those implementations are as default skipped, unless this checkbox is selected. Results for reports should be the same, except for the Uses Report, which will be more complete when this option is selected.
  • non-reported locations are not included as referenced locations in the cross-reference reports
  • to get more accurate results, Inc(X) and Dec(X) now render both a "read" and a "set" (compare "X := X+1")
  • improved resolving of overloaded methods for nested calls
  • fixed problem resolving unit references when unit scopes were used
  • added navigation features to editor
  • added file watcher for editor, if file changed outside PAL, optionally asks to reload
  • mouse wheel changes font size in editor (and also in report viewer as before)
  • mouse wheel changes font size in tree
  • special start page (optional) points to blog page at Peganza web site
  • the Similarity Report now uses the RTL Soundex function in StrUtils unit
  • report text files are saved as UTF-8
  • PAL.INI configuration file is now saved in UTF-8, if needed. When saved in UTF-8 is not compatible with PAL 7.x or earlier
Read more about the new features in PAL8!

Version 7.3.0 Sep 29, 2014
  • added support for Delphi XE7
Version 7.2.1 Sep 5, 2014
  • fixed namespace issue
Version 7.2.0 Sep 1, 2014
  • Status Report now shows unit scopes used by the project, previously only those set in project options
  • new section in Uses Report, "All modules"
Version 7.1.3 Aug 18, 2014
  • registry key for Delphi XE6 were not read
Version 7.1.2 Aug 12, 2014
  • Warnings Report, identifiers with same name as predefined, now does not include predefined parameters or fields
  • removed a false warning in Warnings Report, section "Variables set but not read"
  • removed some unnecessary warnings in Code Reduction Report, section "Local indentifiers that are set and ref once"
  • removed an unnecessary warning in Reduction Report, section "Identifiers not used"
  • fixed multi-threading problem in PALCMD
Version 7.1.1 July 9, 2014
  • fixed error parsing code for Delphi XE2 Win32
Version 7.1.0 July 7, 2014
  • added support for Delphi XE6
  • fixed some problems resolving type identifiers
  • fixed some issues with conditional defines
Version 7.0.2 June 3, 2014
  • last section for Strong Warnings Report was not displayed in tree
  • fixed error resolving generics usage
  • improved resolving of calls to overloaded functions
  • fixed error suppressing lines with "PALOFF"
  • Searched Strings Report now displays file names instead of unit names
  • fixed problem resolving call to overloaded procedure with nil parameter
  • fixed parser problem resolving call to procedure in if-bransch
  • fixed error in Memory Report for rare cases
  • fixed problem with comments after "end." in source file
  • fixed problem with "library" directive
  • fixed display error for Duplicate Lines section in Warnings Report
Version 7.0.1 February 14, 2014
  • wizard dialog did not update text fields with selected search directories
  • default compiler in PALCMD was set to Delphi XE4 Win32, changed to Delphi XE5 Win32
  • fixed error in PALCMD, compiler target in project settings was not used
  • fixed problems reading Delphi project files in some cases
  • fixed problems resolving expressions with "as" keyword
  • selected search directories are now used in the order they are entered, and also shown in that order in Status Report
  • improvements when searching for source files
  • fixed error parsing conditional directive spanning several lines
  • old-style object did not recognize "var", "const" or "type" in declaration
  • fixed error when reading global project todo-file
  • speed improvements in the parser
Version 7.0.0 November 27, 2013
  • support for Delphi XE5
  • CHM help files can be created, together with HTML output, adding full-text search
  • Ctrl+MouseWheel increases/decreases font size in source viewer and in text reports
  • level of indentation (1-4 spaces), new option for Call Tree, Reverse Call Tree, and Exception reports
  • ExcludedFiles settings is now as default for new projects just System.pas (not Windows.pas any more)
  • Status Report also lists all loaded files
  • Todo Report now sorted after module, priority, category (in that order)
  • Call Tree Report, Reverse Call Tree Report, now sorts branches by function or unit depending on sort mode setting
  • much improved handling of identifiers from System.pas, and built-in declarations
  • new section in Third Party Report: "Third-party class and interface types directly referenced"
  • improved handling of calls to functions that are safe to call without parameter being initialized, like SizeOf()
  • new NextGen Readiness Report, measures how well prepared your code is for the new NextGen compiler
  • new status pane in main window displays current compiler target
  • Totals Report and Modules Total Report now also displays UnicodeString and WideString metrics
  • Status Report now also displays the number of different items
  • new section in Warnings Report: "Redeclared identifiers from System unit"
  • more accurate type determination for numeric constants
  • improved parser speed
  • new section in Warnings Report: "Identifier with same name as keyword/directive"
  • new section in Strong Warnings Report: "Subprogram calls itself unconditionally"
  • new section in Literal Strings and Numbers Report: Literal numbers in code
Read more about the new features in PAL7!

Version 6.3.6 November 26, 2013
  • fixed memory leak in parser code
  • improved handling of multiple monitors
  • improved Warnings Report, "Variables that are set but not read" did not detect all situations
  • improved handling of exceptions during report build
Version 6.3.5 October 29, 2013
  • fixed error parsing asm statement in some cases
  • fixed error when conditional expression spanned over more than one line
  • line numbers shown for syntax error are now absolute (not adjusted for included files)
  • better error message when file in uses statement has unsupported format (USC2 and others)
  • improved handling of environment variables
  • fixed error parsing helper class
  • fixed error parsing "unsafe" directive
  • wrong value for when unicode identifiers were first allowed, was set to D2007, but is D2005
  • improved resolving references to identifiers with same name
  • fixed error parsing property declaration
  • unit scopes were not reported in Status Report for targets higher than XE2
  • improved handling of function results
  • conditional directive "EXTERNALLINKER" was not registered
  • when reading older Delphi project files, each setting was truncated if having more than 2048 characters
  • call to "Release" was registered for class object, even if field with the same name existed
  • created misformed XML for Uses Report in some situations
  • predefined identifiers for XE4 were not loaded properly
Version 6.3.4 September 21, 2013
  • fixed error in Memory Report, section about freed objects being referenced later
Version 6.3.3 September 16, 2013
  • library path registry keys for iOS targets were wrong
  • removed some unnecessary warnings for parameters to event handlers
  • fixed errors resolving identifiers
  • fixed errors with predefined conditionals
  • closing the source viewer window did not unlock the file
  • fixed error resolving identifiers in string concatenation expressions
  • improved handling of local variables
  • fixed problem resolving class helper property
  • Modules Report, section "Missing files" was shown in tree, when it should be hidden
  • fixed error with event handlers being reported as not used
Version 6.3.2 July 9, 2013
  • Warnings Report, "Function result not set" could cause exception
Version 6.3.1 June 19, 2013
  • Warnings Report, "Local variables that are referenced before they are set", did not consider "out" parameters in a correct way
  • Warnings Report, "Duplicate lines", did not report lines with different case within string literals, so for example WriteLn('ä')," and WriteLn('Ä');" are now correctly considered different lines
  • Warnings Report, "Non-public constructor/destructor", now does not include class constructors/destructors (in fact these should be private, as they should never be directly called)
  • Warnings Report, "Constructors/destructors without calls to inherited", now does not include class constructors/destructors
  • Warnings Report, "Function result not set", fixed problem with "raise" giving false warnings
  • directive "winapi" was not recognized
  • creating a new project could lose settings from current project if "Cancel" selected
  • fixed problem resolving nested types
  • fixed problem resolving generic type declaration
  • when property is set, the associated "write"-object is also registered as referenced
  • when property has "write"-object, that object is considered "ref" at that location, was "set"
  • references to Low(), High() also considered "safe", like SizeOf()
Version 6.3.0 June 4, 2013
  • fixed issue in Code Reduction Report, "Identifiers never used" for recursive functions
  • fixed error parsing property with "default" directive
  • NATIVECODE was not predefined for some compiler targets
  • support of Delphi XE4 added
Version 6.2.7 April 16, 2013
  • Warnings Report, "Interfaces passed..", also included interfaced with out/var parameters
  • Warnings Report, "Var params read not set", also included parameters from event handlers
  • implementation line numbers did not work for parameters
  • SizeOf() was not correctly handled
  • WarningsReport, "Function not set", could give false warnings in some special case
  • improved handling of pointers passed as parameters
  • Code Reduction Report, "Methods only called once from other method of the same class", now does not report methods that call themselves recursively
  • if record field set, the record variable is also marked as set (earlier just referenced)
  • Warnings Report, "Function Result not set", now does not report functions that return long strings
  • fixed problem identifying property in some cases
Version 6.2.6 March 26, 2013
  • fixed error resolving identifier in expression
  • fixed error with fields in variant part of packed record
  • fixed error resolving typed constant
Version 6.2.5 March 4, 2013
  • fixed error with namespaces
Version 6.2.4 February 21, 2013
  • fixed error with class helper code
Version 6.2.3 February 19, 2013
  • fixed problems resolving calls to overloaded functions
  • dangerous Exit now not reported if in try-structure
  • fixed error resolving reference to recordfield
  • fixed error resolving identifier after typecast
  • message for syntax error now has more information
Version 6.2.2 December 6, 2012
  • fixed error with "read" directive for properties
  • procedure "Register" is excluded for report with warnings for bad identifier names
  • improved Events Report, event handlers starting with "After" or "Before" are now also examined
  • fixed problems with "class property" declarations
Version 6.2.1 October 31, 2012
  • new XE3 compiler targets were not available in wizard dialog
  • fixed parser error handling record types
  • fixed parser error resolving overloaded methods with generics
Version 6.2.0 October 18, 2012
  • added support for Delphi XE3
Version 6.1.6 August 15, 2012
  • fixed error in Warnings Report, "Local identifiers set but not later read", gave false positives
  • fixed parser problem for pointer types
  • fixed problem with multireport that could cause AV
Version 6.1.5 July 23, 2012
  • fixed parser problem with constant declaration
  • fixed problems in Warnings Report, section "Local variables set but not later read"
  • removed some unnecessary warnings for duplicate lines
Version 6.1.4 June 18, 2012
  • fixed issue with HTML format
  • fixed problem in Code Reduction Report, local variables set many times without referencing in-between
  • fixed cosmetic error in Status Report
  • fixed problems with predefined identifiers
  • fixed error in Warnings Report, "Function result not set", gave false positives when "else" followed by statement on the same line, in some cases
Version 6.1.3 April 19, 2012
  • removed false positives for buttons with missing OnClick-event handlers, but where ModalResult was set in some cases
  • fixed some code parsing issues
  • fixed error reporting loop-variables read after loop
Version 6.1.2 January 18, 2012
  • removed false positives for section "Function Result not set" in some cases
  • removed false positives for section "Property Access" in some cases
  • fixed error resolving implementation of overloaded methods
  • fixed error resolving identifiers in some cases
Version 6.1.1 December 1, 2011
  • fixed error parsing attributes with nestled "["
  • fixed error resolving identifiers in some rare cases
  • Warnings Report, Duplicate Lines, now skips lines starting with "//"
  • Warnings Report, Duplicate Lines, jump to location in source did not work
  • if "PALOFF" used for parent type like record or class, also child elements will be suppressed
  • fixed problem resolving pointer type declarations in some cases
  • fixed error resolving assignment of identifiers om some cases
  • fixed error parsing case-structures in some cases
  • new PALWiZ5.DLL for Delphi XE2 (needed for users that do not have Delphi XE)
  • fixed error parsing set type in record fields
Version 6.1.0 October 17, 2011
  • added support for Delphi XE2, all compiler targets
  • fixed error with Namespaces setting
  • fixed error with the "align" directive in Delphi XE2
  • improved message for parser errors in some situations
  • fixed error with ToDo report setting in project template
  • fixed error parsing property read declaration in some situations
  • fixed error recognizing function pointers in typed constants
  • fixed error parsing UTF-8 source files starting with blank line
  • fixed error recognizing array elements
  • fixed error parsing type declarations containing constants
  • fixed error parsing type declarations with arithmetic expressions
  • fixed error parsing var declaration with generic type
  • fixed error parsing property declaration with generic type
  • fixed error parsing $IF-expressions in some cases
Version 6.0.0 August 29, 2011
  • new Help Report
  • new Searched Strings Report
  • new Map File Report
  • improvements in the Third-Party Report
  • new sections and improvements in the Memory Report
  • new sections and improvements in the Warnings Report
  • improvements in the Complexity Report
  • improvements in the Literal Strings Report
  • improvements for multi-projects
  • improvements for PALCMD.EXE
  • .. and more ...
Read more about the new features in PAL6!

Version 5.1.9 August 22, 2011
  • fixed error when displaying results for multi-reports
Version 5.1.8 August 17, 2011
  • fixed output format error in Third-Party Report
  • environment variables were not resolved for excluded folders in multireports
  • directive "experimental" was not always recognized
  • solved problem with Reverse Call Report, where some branches were not always included
Version 5.1.7 July 7, 2011
  • prevented stack overflow if bad include directive
  • fixed minor parser error
Version 5.1.6 May 16, 2011
  • improved handling of exception types in Convention Report
  • removed false positives with strings in Reduction Report, "Unneeded boolean comparisons"
  • PAL.EXE now supports address spaces larger than 2GB (the IMAGE_FILE_LARGE_ADDRESS_AWARE flag is set in the EXE header)
  • PAL.EXE does not any more loads PALWIZ.DLL at startup
Version 5.1.5 March 22, 2011
  • new PALWIZ4.DLL added
  • fixed problem with Warnings Report, "local variables ref before set"
  • fixed error parsing "stdcall of object"
  • fixed error parsing "X = object(Y.Z)"
  • Reduction Report, "Identifiers never used", now does not include unused parameters to methods that are overriding inherited methods (because the parameter list is fixed)
  • Strong Warnings Report, "Ambiguous unit references" now lists the units that are ambiguous
  • Reduction Report, "Local identifiers that are set and referenced once" and "Local identifiers that possibly are set and referenced once", exclude identifiers that are set in a loop
  • Warnings Report, "Constructors/destructors without calls to inherited", now does not show warning for indirect calls to inherited, e.g. when constructor/destructor calls another constructor/destructor which calls inherited
  • fixed problem parsing property declaration in some cases
Version 5.1.4 March 9, 2011
  • fixed error with anonymous method
Version 5.1.3 January 25, 2011
  • improved handling of class/record constructors and destructors
  • fixed error with pointer dereference
  • fixed error with procedure type directive
  • fidex error with class destructors and override directive
  • improved handling of Exit-statements
  • fixed error handling calls to overloaded functions
  • fixed a problem with multireports, when rendering report tree
Version 5.1.2 November 29, 2010
  • fixed error with default property
  • fixed error parsing new Exit()-function
  • now also handles record destructors
  • better handling of Self keyword in class implementations
  • fixed error parsing expressions
Version 5.1.1 November 18, 2010
  • improved handling of local Result variable
  • fixed error formatting displayed name in reports when not Name-Module-Kind selected
  • improved handling of default properties
  • fixed error parsing string constant with "deprecated" directive
  • fixed error parsing new Exit()-function
  • fixed handling of record destructors
  • fixed error with function pointers
Version 5.1.0 October 19, 2010
  • support added for Delphi XE code
  • minor UI error fixed when selecting multi-reports
  • fixed error sometimes occurring when loading DFM file saved as UTF8
  • fixed error when listing in status report would show duplicate search directories
  • fixed error parsing class helper declarations
  • fixed error parsing class code with type declarations
  • fixed error parsing anonymous method with nested function
Version 5.0.1 September 15, 2010
  • fixed problems with multireports
  • fixed problems suppressing lines from reporting
Version 5.0.0 May 23, 2010
  • build reports quicker, by using multiple threads
  • suppress reporting for selected code lines, filter out false positives
  • new Exception Report, provides info about exception handling
  • new Similarity Report, reports similarity by soundex
  • new Module Totals Report, like the Totals Report, but divided by unit
  • new section in Duplicates Report, only reports identifiers in overlapping scope
  • new options for PALCMD.EXE to better integrate with your build process
  • speed improvements both for parsing and reporting
Read more about the new features in PAL5!

Version 4.6.4 May 3, 2010
  • added new PALWIZ3.DLL for Delphi 2009
Version 4.6.3 April 6, 2010
  • if XML reports were written to a single file, the surrounding tag was not written correctly
  • links to reports in HTML could be misformed in some cases
  • better error handling for multi reports when main file was not found
  • OS envvars also supported, not only those added in Delphi IDE
  • environment variable can be used for main path
  • removed some false positives for "Danger Raise" in Warnings Report
  • fixed error when an object could be registrered as created instead of set, leading to errors in Cross Reference and Memory Reports
  • fixed bad formatting for some numeric values in Complexity Report rating lists
  • improved parsing of $IF-expressions
  • Reduction Report, unused local variable section: paramater belonging to a subprogram that is not used, is now not reported (as it says in the docs, but was not so)
  • Control Warnings Report, now only reports buttons/menuitems with missing OnClick, if ModalResult is not set
  • Reduction Report, "Boolean assignment can be shortened" now only reports simple assignments (not when there are several statements in each branch)
Version 4.6.2 November 15, 2009
  • bad counter value for previous analysis for a few reports
  • bad file name for index HTML file
Version 4.6.1 September 21, 2009
  • misformed filename suggested when saving new projects
  • fixed error parsing anonymous methods
Version 4.6.0 September 15, 2009
  • support for Delphi 2010, which is now the default compiler target
  • ToDo Report included items from modules in non-reported folders
  • fixed error parsing DFM files with UTF8 BOM
Version 4.5.13 July 14, 2009
  • now uses EurekaLog for exception handling
  • fixed bug in overload handling
Version 4.5.12 May 25, 2009
  • fixed error when parsing for-loops in some cases
  • improved overload handling
  • fixed bug in Uses Report
Version 4.5.11 March 30, 2009
  • parameters to external functions were marked as unused in "Code Reduction Report"
  • functions marked with "message" directive are now not listed as not used in "Code Reduction Report"
  • improved resolution of calls to overloaded functions
  • improved help indentation for source code
  • fixed problem resolving relative paths on network drives
Version 4.5.10 March 22, 2009
  • "Reduction Report" for a multi-project did not account for unused identifiers that are not needed but must be kept
  • improved handling av constant declarations
  • improved resolution of calls to overloaded functions
  • now selects relevant section, when invoking help (and report/section selected in treeview)
  • external viewer did not work after app options dialog shown and OK'ed
Version 4.5.9 March 17, 2009
  • fixed problem handling class helper declaration
  • selection of "Both source and form files/Only source files" was not handled correctly in all situations
  • Missing Property Report now suppresses warnings for missing OnClick properties for TBitBtn, if property value for Kind is present.
  • old hits for multi-report were not properly read from project file on startup
Version 4.5.8 March 8, 2009
  • improved handling of Free, Release for the Memory Report
  • selection of "Both source and form files/Only source files" was not handled correctly in all situations
  • "Set defaults" for Missing Property Report inserted wrong strings
  • Missing Property Report now suppresses warnings for missing OnClick properties for TButton and TBitBtn, if ModalResult is present
  • list box for selection of projects in a multi-project, changed caption from "Multi-projects" to "Projects"
  • checkbox for "Strong Warnings Report" was enabled even for a multi-project
  • general preferences, "Load project at startup" changed to "Load latest project at startup"
  • pressing F1 in the main window now shows help for the current report
  • help button in dialog for selecting report sections, now shows relevant help for the current report
Version 4.5.7 March 3, 2009
  • link to web did not work in About-dialog
  • Warnings Report, "Interfaced class identifiers that are public/published, but not used outside of unit", now does not report constructors/destructors
  • Memory Report, also checks for 'Release'
  • fixed problem in Todo Report
  • fixed problem in reopen menu
Version 4.5.6 February 21, 2009
  • fixed error related to anonymous methods
Version 4.5.5 February 18, 2009
  • fixed error related to anonymous methods
Version 4.5.4 February 9, 2009
  • PALCMD now uses PAL.INI from the same folder as the app is in, if found
  • identifiers from include files sometimes did not appear in reports
  • new section in "Third-party dependencies Report", called "Third-party identiers directly referenced, with location". Same as "Third-party identifiers directly referenced", but also lists reference locations, if the reference is from code in the main file folder. This section is useful for finding locations where third-party code is referenced.
  • fixed error related to anonymous methods
Version 4.5.3 January 28, 2009
  • fixed problem with handling of generics
  • Duplicate Identifiers Report now does not report identifiers with same name but with different number of generic parameters
  • Sections "Missing 'const'.." in Optimization Report now does not report identifiers that are not used at all in the subprogram
Version 4.5.2 January 15, 2009
  • fixed problem with typecasted strings in const declarations
  • fixed problem with generics and method declarations
  • now understands "$IF NOT" conditional expressions
  • fixed error with hint directive after "end" keyword
Version 4.5.1 January 13, 2009
  • added Delphi 2009 to list of compiler targets in wizard dialog
  • did not find library/browsing path for Delphi 2009
Version 4.5.0 January 11, 2009
  • added support for Delphi 2009
  • fixed problem detecting calls to FreeAndNil in some situations, causing error in Memory Report
  • fixed a problem in Reduction Report, for "Local identifiers that are set more than once", it falsely reported identifiers set in "try/except" blocks
  • options on command-line for PALCMD.EXE now replace options specified in the PAP or PAM file (earlier they were only honoured when directly specifying a source file)
  • new switch for PALCMD.EXE: /R to specify a report root folder, like /R=c:\temp or "/R=c:\Program Files\X"
Version 4.4.4 September 27, 2008
  • fixed problem parsing record types with const declaration
Version 4.4.3 July 27, 2008
  • fixed a problem in the Uses Report that could cause AV in some cases
  • string assignment like "S := 'A' + ^\;" failed with syntax error
Version 4.4.2 July 4, 2008
  • problems with selected sections for some form reports
  • declaration like "var X : System.string" failed when parsing for Delphi 7 or earlier
  • fixed problem transferring focus to the Delphi IDE when double-clicking in reports
  • fixed problem parsing generics code
  • abstract methods are now not included in Complexity Report statistics
Version 4.4.1 March 14, 2008
  • line number when calling external application was off by one
Version 4.4.0 February 19, 2008
  • fixed minor error in Find functionality
  • new section in Memory Report: "'Local objects that are created more than once without being freed in-between"
  • added possibility to open source code file in external application,
  • Uses Report also reports units with initialization sections that have empty interface part
     
Version 4.3.2 November 23, 2007
  • removed some false warnings in the Memory Report
  • fixed problems with extracting category and owner from todo item in the To-Do Report
Version 4.3.1 November 5, 2007
  • directive VER190 was not set for compiler Delphi 2007 .NET
Version 4.3.0 November 2, 2007
  • added support for Delphi 2007 .NET
Version 4.2.5 October 13, 2007
  • fixed a problem with PALCMD.EXE, when running PAP files
Version 4.2.4 September 25, 2007
  • fixed a problem with array of const declarations
Version 4.2.3 September 24, 2007
  • fixed a problem with report sections "Local identifiers that 'shadow'..." in the Convention Report
  • fixed problems with record helpers
Version 4.2.2 August 11, 2007
  • fixed a problem with report sections "Local identifiers that 'shadow'..." in the Convention Report
Version 4.2.1 July 11, 2007
  • fixed problem with record operators
Version 4.2.0 July 10, 2007
  • overload handling has been improved a lot, PAL is now much better at resolving calls to overloaded methods
Version 4.1.2 June 24, 2007
  • a couple of controls were misaligned in the project options pages
Version 4.1.1 June 20, 2007
  • wizard options did not include Delphi 2007
  • "class var" and "class property" is now allowed for Delphi 2005
Version 4.1.0 May 17, 2007
  • fixed some problems with identifiers named "Name", mix-up with directive name
  • in Optimization Report, section "Missing const for unmodified string parameter", now does not report parameters in subprograms marked with the "override" directive, because these subprograms cannot change their parameter lists
  • added support for Delphi 2007 (Win32) from CodeGear
  • default compiler is now Delphi 2007 (Win32)
  • conditional directive "_PEGANZA_" is now always automatically defined
  • Status Report now shows user environment variables translated to full paths, for searched folders and similar items
  • now reads/writes PAL.INI from folder under "Documents and Settings"
  • project files are suggested to be read/written from a folder under "My Documents"
  • improved help system, now uses HTMLHelp
Version 4.0.2 February 24, 2007
  • increased maximum stack size, needed for very deeply nested unit dependencies
  • fixed problem with forward declared interfaces
  • "Bad class visibility order" in "Convention Report", is not reported for form classes (these always start with public/published section)
  • hit counters for some sections were not initialized correctly
  • fixed error in search function
Version 4.0.1 January 20, 2007
  • fixed problem with Inconsistent Case Report when reporting with-blocks, false positives could be created
  • fixed error generating tree of reports and sections, missing section for Memory Report
  • hit counts were written for some sections that do not use them
  • Todo Report had initially no selected sections
  • fixed error calculating hits totals for reports
Version 4.0.0 October 28, 2006 Version 3.5.8 October 3, 2006
  • wrong number of table columns for HTML table in Forms Report
  • bad HTML formatting for Class Hierarchy Report
  • jump to sections in Events Report did not work in HTML format
Version 3.5.7 September 19, 2006
  • project files are now saved much faster
Version 3.5.6 September 4, 2006
  • Complexity Report, some sections not generated
  • format options, checkbox "One report file" not possible to check always
  • error parsing "property Name", misinterpreted "Name" as directive
Version 3.5.5 August 28, 2006
  • form report, default form position changed in D8 and later from poDesigned to poDefaultPosOnly
  • double-clicking in the Uses Report opens the relevant source file in the viewer
  • fixed error with forward references
  • fixed some problems resolving dereferenced pointers
  • Third-Party Report, "Third-party identifiers directly referenced" now always includes all found identifiers, even if they are in folders excluded for reporting (otherwise you would have to include these folders, giving much bigger reports, with many irrelevant listings)
  • fixed error when parsing property declarations, for code like "property Left : integer read FMyRec.Left write FMyRec.Left", the write-clause was not evaluated correctly
  • option "One file for each report" also possible now, even if "Create Subfolder" is not checked
  • fixed error handling "final" directive
  • environment variables in paths etc were not translated in all cases
Version 3.5.4 May 8, 2006
  • "interrupt" keyword was not allowed in an interface section
Version 3.5.3 April 13, 2006
  • Options in .bdsproj files were not read for versions later than Delphi 8
  • Support for "strict" directive was incomplete
  • Error when parsing record types declared in "var" blocks
Version 3.5.2 March 29, 2006
  • changed caption to "$DEFINE/UNDEF used but no matching $IFDEF/$IFNDEF in code" for section in Conditional Symbols report
  • Missing Property Report, now does not warn for missing TButton.OnClick or TBitButton.OnClick if ModalResult <> mrNone
  • "class var" and "var" in class declarations were not accepted for Delphi 2005 and Delphi 2006 (Win32 personalities)
  • problem with exception solved for some sections in the Warnings Report
  • class functions were not allowed for old-style objects
  • "class sealed" and "class abstract" were not allowed for Delphi 2005 and Delphi 2006 (Win32 personalities)
  • class properties were not allowed for Delphi 2006 (Win32)
  • "strict" was not allowed for Delphi 2005 (Win32)
Version 3.5.1 February 28, 2006
  • fixed a problem with compilation directives
  • error in Warnings Report, "Destructors without override directive", warning was issued for reintroduced destructors
Version 3.5.0 February 19, 2006
  • support added for Delphi 2006 (Win32 and .NET)fixed problem parsing property declarations
  • fixed error in Warnings Report, section for dangerous raise statements
  • list of dangerous raise/exit commands were not rinsed from unreported locations in the Warnings Report
  • now does not report "dangerous raise" if the raise command is just before the end of the sub (requires the "raise" keyword to be on the line just above the "end")
  • fixed error for multireport, could get AV in some situations
  • application splash screen is removed
Version 3.2.2 November 19, 2005
  • fixed problem parsing property declarations
  • fixed error finding include files when path started with "\"
Version 3.2.1 October 12, 2005
  • fixed error generating XML for Call Index Report
  • fixed error generating XML for Optimization Report
  • max length for strings read from INI file was 4096 chars, changed to 32768
  • for "library" module, now does not add warning for empty begin-end block (because is mandatory)
Version 3.2.0 August 16, 2005
  • fixed error in Third-Party Report, identifiers from excluded folders were listed
  • fixed some problems handling excluded folders
  • fixed parsing error with "external" keyword
  • improved handling of virtual and abstract method calls
  • fixed error in Warnings Report, sections always written even when deselected
  • improved speed building Call Reports
  • fixed error resolving identifiers in "absolute" declarations
  • Memory Report now ignores destroy and close events for data modules
Version 3.1.1 May 27, 2005
  • fixed error in Uses Report, check if main file was project file sometimes returned wrong result
  • fixed problem identifying typed constants
  • fixed problem jumping to code line in include files
  • fixed problem handling include file directives which contain comments
  • fixed problem handling external directive with file reference
  • fixed error, "object" keyword was not allowed for Delphi 2005 Win32
  • fixed error handling new "inline" directive
  • fixed error handling files saved in UTF8-format
Version 3.1.0 March 22, 2005
  • adds support for Delphi 2005 (both Win32 and .NET personalities)
  • new section "Abstract methods not overridden" in Warnings Report (for existing projects, you will have to explicitly check this report section to activate it)
  • new section "$DEFINE/IFDEF used but no matching $IFDEF/$IFNDEF in code" in Conditional Symbols Report (for existing projects, you will have to explicitly check this report section to activate it)
  • in Status Report, now also writes the time needed to generate the reports (excluding the Status Report itself)
  • fixed error in treeview list, same text for both "Tab Order Report" sections
Version 3.0.3 February 7, 2005
  • fixed error with browsing and library paths
  • doubleclicking on include file did not always open it in the source viewer window
  • XML not generated correctly for Form Report
  • section "Created in try" in Memory Report generated obviously erroneous results
Version 3.0.2 October 27, 2004
  • fixed memory leak
  • fixed error in PALCMD causing AV at end of run
Version 3.0.1 October 26, 2004
  • fixed error recognizing typed constants
  • fixed error with memory manager
Version 3.0.0 October 18, 2004 Version 2.1.9.1 August 4, 2004
  • help find was not located correctly in some situations
  • code like "const X : integer = $;" was not allowed by the parser
  • parsing DPK files did not follow units in uses list
Version 2.1.9 June 28, 2004
  • error parsing assembler code when "@" used as label
  • better error message for syntax errors, now includes module name
  • error, (*$I inc*) was not resolved as inc.pas
  • Warnings Report, section "ambiguous with" included identifiers from excluded folders
  • error registering reference for numeric label
  • error in Inconsistent Case report for initialized global variables
  • include files were not always found when doubleclick on a report line
  • improved XML reporting
  • Bindings report could include identifiers from excluded folders
  • error could cause broken XML file for Duplicate Identifiers Report
  • Identifiers Report listed unit identifiers from excluded folders
  • the range dialog for copying to the clipboard now only shows up if all reports are written to one single file
Version 2.1.8.1 May 13, 2004
  • fixed error locating files
Version 2.1.8 May 10, 2004
  • fixed registration error in version 2.1.7
Version 2.1.7 May 10, 2004
  • fixed problem related to records with variant sections
Version 2.1.6 February 27, 2004
  • fixed problem resolving relative paths in include directives
  • numerical labels (like "30:") were not recognized
  • fixed error in Prefix Reportm, false positive warnings could be issued
  • fixed error in Code Reduction Report, false warnings for strings being initialized to zero could be given
  • fixed problem with large fonts in options dialog
Version 2.1.5 January 30, 2004
  • fixed problem resolving relative paths in include directives
  • fixed error printing text reports. Even if all reports selected only the current one was printed.
Version 2.1.4 December 7, 2003
  • fixed a problem with displaying labels in Options dialog under Windows XP
  • new option "Allow multibyte characters" in the Options dialog (parser tab page), default value is false. If this option is selected, multibyte characters like in Shift-JS (Japanese) are allowed in comments
  • fixed some resizing problems in the main form
  • fixed error in handling exports statement
Version 2.1.3.2 November 26, 2003
  • fixed error with Shift-JS (Japanese characters) in comments
  • fixed error when printing selected text
Version 2.1.3.1 October 14, 2003
  • fixed error with multi-byte characters in comments
Version 2.1.3 August 5, 2003
  • fixed error parsing declaration "file of byte absolute X"
  • changed handling of references to object and record instances, resulting in fewer warnings
  • improved handling of identifiers with unknown type, removes some irrelevant warnings
  • improved handling of overloaded subprograms
  • fixed error in Convention Report - as help indicates, constructors starting with "Create" etc are OK, but reported error if not exactly "Create".
  • improved Code Reduction Report, now does not report identifiers that are set many times in a row, if one of two consecutive times is in a condition (if/case)
  • fixed error handling built-in Str procedure
  • fixed error in Duplicates Report, some identifiers were not reported in some cases
Version 2.1.2 May 18, 2003
  • backup files are now copied as '*.~txt' instead of '*.~tx'
  • fixed error, Warnings Report - "Destructor without override directive" considered even old-style objects, but in this case the override directive gives a syntax error
  • fixed error, Warnings Report - 'Constructor/destructor without call to inherited', for old-style objects gave a warning, even if no ancestor existed
  • fixed error, Warnings Report, 'Possible bad object creation', now does not report old style objects
  • fixed error, Warnings Report, 'Variables that are read but not set', now does not report old-style objects
  • fixed error parsing construct like 'case X.Y of'
  • fixed error with location include files in some cases
  • improved handling of form inheritance
  • fixed error, compiler allows 'class' word before local subprogram, so now allowed even in PAL
  • fixed error handling 'inline' code
  • improved handling of uses lists for inherited forms in Uses Report, the situation when a base form uses a unit, the Delphi IDE automatically inserts this unit in the uses list of the nchild form, even if it is not referenced anywhere. These situations are detected and the unit is listed as 'used by inherited form' instead of 'unnecessary'
  • fixed error in mainly Warnings Report, for 'out' parameters
  • increased maximum stack size, because of stack overflow problems in NT 4 in some cases
  • fixed error parsing 'absolute' directive in some cases
Version 2.1.1 March 9, 2003
  • fixed error handling blank lines after final 'end.' in unit code
  • fixed error locating relative paths
  • fixed error handling '(*$I x.pas*)' directive in some cases
  • improved compression-quality for generated JPEG files
Version 2.1.0 February 27, 2003
  • new options to include Delphi's library and browsing paths when searching for source code
  • added support for Delphi's environment variables, like $(DELPHI) and user-defined ones like $(MYLIB)
  • changed captions for untyped var/out/const parameters in the Totals Report
  • fixed error in handling code referencing "System.Delete", as opposed to just "Delete"
  • fixed error parsing short string type like "X : string[Y]" where Y was erroneously skipped by the parser/analyzer
  • fixed error when entering text in the combo box text input area for "Search Directories"
  • fixed error parsing ancestorlist for interface, did not register reference to ancestor
  • fixed error recognizing relative paths in some cases
  • fixed error, setting for "Warnings only" in the Uses Report was not used
  • fixed error with checkboxes for Control Alignment and Control Size Reports
  • fixed error, did not resolve references in "var MyVar : UsedUnit.TMyType" but "var MyVar : TMyType" was resolved properly
  • fixed error with handling of class type references in some cases
  • fixed error parsing some kinds of OLE automation code, like "FRng := FDoc.Range(start:=0,end:=0);"
  • fixed error, option for backup of report files did not work
  • fixed error resolving references to identifiers with same name, declared in different units in some rare cases
Version 2.0.2 January 7, 2003
  • fixed error that could cause AV when parsing FreeAndNil call
Version 2.0.1 December 30, 2002
  • fixed error when selecting search folders
Version 2.0.0 December 28, 2002
  • numerous new features and enhancements, see the What's New page
Version 1.4.0 September 30, 2002
  • new compiler option 'Delphi 7' (default)
  • fixed error parsing include file specified with relative path
  • fixed error relating to nested record declarations
  • fixed errors parsing directives 'export' and 'abstract'
  • fixed error parsing DFM file with line like 'Prop = .Owner'
  • disabled printing by HTML when frames are active
  • fixed error in parsing case statement
  • now allows multiple $ELSE directives in a row, just like the Delphi compiler
  • fixed error parsing properties with old-style objects
  • fixed error parsing some directives for procedure type declarations
Version 1.3.1 June 29, 2002
  • fixed error detecting function result assignment in some cases
  • fixed error in Optimization Report, parameters missing "const" directive were reported when the owning method was abstract
  • fixed error parsing include directive in some rare cases
  • fixed error parsing variant property values in DFM files
  • fixed error, "with X(Y,Z)" triggered 'Multiple With'-listing in Convention Compliance Report
  • fixed error parsing out-parameters, could cause the parser to fail in rare cases
  • fixed error for code parsed with BP7 as target: unit file names are now expected in 8.3 format even if unit name is longer
  • fixed error parsing 'write(X:Y, Z)' in some cases
  • fixed error parsing 'object()', did not register ancestor reference properly for oldstyle objects
  • fixed error in Control Warnings Report, section about FocusControl was sometimes omitted
  • fixed error in Control Warnings Report, did not use controls on inherited forms in some situations
Version 1.3.0 April 12, 2002
  • new additional command-line version PALCMD.EXE
  • search folders entered under Options|Properties|Parser may now contain relative paths
  • fixed error, parsing statements with OleVariants could fail in some cases
  • fixed error, parsing statement like 'Str(R:I:J, S)' could fail in some cases
  • fixed error parsing 'forward' keyword not followed by a semicolon
  • fixed error with 'Multiple With'-section in 'Convention Compliance Report'
  • fixed error with double '&' char when checking FocusControl value in 'Control Warnings Report'
  • fixed error with double '&' char when checking conflicting accelerators in 'Control Warnings Report'
  • fixed error parsing statements like 'writeln(Number:5:2)'
  • fixed error parsing 'stringresource' which was erroneously taken for a reserved word
  • fixed error resolving path in some cases for units mentioned in project file
Version 1.2.1 March 15, 2002
  • fixed error, default prefix definitions were always added when program started. Now only added if definitions are missing in the INI file
  • fixed error, parsing some uncommon type declarations could fail
  • fixed error, Optimization Report reported parameter as missing "const", althought it was used as a var-parameter (or out-parameter) inside the subprogram, and thus could not be a var-parameter
  • control/property value pairs are now trimmed, e.g. "TLabel ; Caption" is stored as "TLabel;Caption"
  • fixed error, uses-list "in"-path in project file was not always used
  • Control Warnings Report, colon checking for label caption, now trims so ":" is equivalent to ": "
  • fixed error, record fields set by initialized global record variables were not always registered
  • Control Warnings Report, warnings for accelerators are not issued for controls that share a common action
  • Control Size Report, fixed error, output for "Horisontal Size" and "Vertical Size" switched
  • Control Warnings Report, fixed error with FocusControl section
  • fixed error, parsing include file directive within comment
  • fixed error, parsing absolute directive for BP7 code
Version 1.2.0 February 28, 2002
  • new report 'Prefix Report', warns for variables that do not follow the prefix rule for the owning type. New dialog box exists to define rules.
  • new section in 'Warnings Report': 'Instance created of class with abstract methods'
  • new 'Property Value Report', scans DFM-forms for selected property values, e.g. produces a listing of all SQL property values. A new dialog box exists to select which properties that are monitored.
  • new section in the 'Literal Strings Report', listing constants declared as resourcestrings, instead of listing them together with the other declared constants
  • section 'Identifiers not used' in 'Reduction Report', now does not report parameters, local variables etc to subprograms that are never used.
  • options 'Create subfolders' and 'One file for each report' are now TRUE as default
  • 'Warnings Report', 'Var parameters that are used but never set' (and similar 'probably'-report): parameters to event handlers are not reported
  • 'Control Warnings Report' now does not list button/menus with missing OnClick-event when property Action is set
  • 'Convention Report', section for bad identifier names, now also reports names that are similar as those predefined in the System unit (e.g. Copy, Byte, AllocMem). Only applies to Delphi 1 or higher
  • every class type (new object model) is assumed to descend originally from TObject. Affects the class reports.
  • the report viewer (text) now shows a greyish color when no file is loaded
  • fixed error, could occur duplicate listings both in 'Local variables that are referenced before they are set' and corresponding 'possible'-report
  • fixed error, 'Form Report', 'Call Index Report' and the control reports also showed identifiers from excluded folders
  • fixed error, sometimes when a missing report file was selected any subsequent reports could not be seen
  • fixed error, '"' were not given with the correct HTML representation
  • fixed error with resolving relative paths, when deciding whether identifiers should be included in report
  • fixed error in parser for class reference declared in local scope
Version 1.1.4 January 31, 2002
  • fixed error, parsing statements with variants, like "X.Range(start:=0;end:=1);" where X is a variant
  • fixed error in evaluation version, when bad license key entered, error message appeared behind the application window
Version 1.1.3 January 21, 2002
  • fixed error, parsing special characters in DFM-file
  • fixed error resolving file paths in some cases
  • fixed error parsing code like:
       initialization
          SomeCall
       finalization

    that is when a semicolon is missing after "SomeCall"

  • INI file values may now be up to 4096 characters long
  • fixed error parsing variable declaration with absolute record
  • fixed error parsing type identifier passed as parameter, like in

      ..
       X := SizeOf(File);
      ..
Version 1.1.2 December 27, 2001
  • fixed error, abstract methods were reported as unused in the declaring class
  • changed behaviour, if unknown structured type variable assigned, reported as set (previously reported as ref)
Version 1.1.1 November 30, 2001
  • now checks if report file exists before trying to load it in the text/HTML viewer window
  • fixed error, when clicking in treeview report was not always found (occurred for reports with multiple words in the name)
  • fixed error, value parameter that is an interface, when parameter set in subprogram, registered the interface as being set, resulting in a "value parameter set" listing
  • fixed error, when changing from text to HTML mode for reports, HTML reports were not always loaded in the viewer, only after application restart
  • fixed error, option to load file at startup from command-line parameter was missing, although documented in help text and tutorial
Version 1.1.0 November 5, 2001
  • new HTML formatting for reports, supporting frames and stylesheets
  • optionally create reports in separate subfolder
  • reports may be divided over multiple files
  • new Form Report, reporting values for important form properties
Version 1.0.7 October 23, 2001
  • fixed error parsing interrupt procedures (16-bit code)
Version 1.0.6 October 10, 2001
  • fixed error parsing record type with string field, when semicolon is missing before final "end"
  • fixed error occuring in some situations when parsing record type with case constructs
  • fixed error parsing declaration of some unusual subrange types
Version 1.0.5 September 26, 2001
  • some optimizations added for the Complexity Report, now somewhat faster to generate
  • fixed error parsing numeric labels, like "1:" at the beginning of a code line (yes, people still use labels!)
  • fixed error parsing unknown identifiers with field names equivalent to keywords (like "X.Type"). Such field names are indeed valid for variants
  • fixed error in the Uses Report, units that were aliased (like Windows=WinProcs+WinTypes) could create duplicate listing
  • fixed error in the Complexity Report, calculating overall Chars/LOC
  • fixed error parsing array of procedure type (like "type X = array[0..1] of procedure")
Version 1.0.4 September 10, 2001
  • The first public version of Pascal Analyzer