-
Notifications
You must be signed in to change notification settings - Fork 7.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Locations for AST nodes are now tracked with the help of bison location tracking. This is more accurate than what we currently do and easier to extend with more information. A zend_ast_loc structure is introduced, which is used for the location stack. Currently it only holds the start lineno, but can be extended to also hold end lineno and offset/column information in the future. All AST constructors now accept a zend_ast_loc* as first argument, and will use it to determine their lineno. Previously this used either the CG(zend_lineno), or the smallest AST lineno of child nodes. On the parser side, the location structure for a whole rule can be obtained using the &@$ character salad.
- Loading branch information
Showing
9 changed files
with
449 additions
and
488 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
e528762
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nikic, This patch (may be with previous one) increased the PHP parser overhead on the same Wordpress test from 48M instructions to 59M instructions (measured with callgrind). Personally, I don't see any good reason of making some parts of PHP 20% "slower" (even if compiler overhead is hidden by opcache).
e528762
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dstogov Just for reference, how many instructions is the whole compilation (lexing, parsing, compilation) in total?
In any case, I'm generally okay with reverting this change. From a functional perspective it does not offer much by itself, so it makes sense to delay it until we actually want to use the more accurate tracking for something.
e528762
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
48M and 59M were numbers of instructions executed only by zend_language_paser.c on single compilation of Wordpress. The impact of the other files are near unchanged. I measured that with 32-bit PHP build. 64-bit build shows a bit less, but also significant, difference (e.g. 7M vs 11M).
Please, double check if it costs to revert this or not.
e528762
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@nikic If we don't need this now (and most probably won't need in PHP-7.4 at all), I would prefer to revert this.
e528762
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Change reverted with 7f72d77. We can reconsider if/when there is stronger motivation.