Can you spot the problem in the following Delphi code extract?
.. interface type TFinancialManager = class .. private function Calculated : Integer; inline; .. public procedure Estimate; end; .. implementation .. procedure TFinancialManager.Estimate; var Revenue : Integer; begin .. Revenue := Calculated; .. end; function TFinancialManager.Calculated : Integer; begin .. end; ..
This was quite easy, right?
Solution: The function Calculated is marked with the "inline" directive. It is called from the procedure Estimate. The problem is that the implementation of Calculated is in code further down. This means that it will never be inlined for the call from Estimate procedure. There is an easy fix for this, and it is to move the implementation code for Calculated so it is above the Estimate code.
The good news is that with Pascal Analyzer, our popular static code analyzer product, these situations can be detected automatically. There is a section OPTI9 in the Optimization Report that does this. It is called "Inlined subprograms not inlined because not yet implemented".
Not so hard to spot! But imagine finding this problem among thousands of lines of code spread over hundreds of units! And consider also a code base that is evolving all the time, so the code must constantly be rechecked.
Pascal Analyzer has a total of 53 reports. Those are divided into over 230 sections, all providing statistics, references, errors and warnings for your code. Pascal Analyzer can be run as a standalone Windows application, or as a command-line program. The second choice is suitable if you want to integrate static code analysis with your build process.
Or use Pascal Expert, our RAD Studio plugin, to find the problems immediately while coding. Pascal Expert contains much of the same capabilities like Pascal Analyzer, and is obtainable with a discount when buying both products.
Can you see the Delphi coding error? (Part 7) Can you see the Delphi coding error? (Part 6) Can you see the Delphi coding error? (Part 5) Can you see the Delphi coding error? (Part 4) Can you see the Delphi coding error? (Part 3) Can you see the Delphi coding error? (Part 2) Can you see the Delphi coding error? (Part 1)