Nikita Popov
acaf3fecad
Implement emulation of PHP 8 T_NAME_* tokens
...
Like comment emulation, this is unconditional, as it is required
for core functionality.
2020-07-23 12:28:13 +02:00
Nikita Popov
a63b495fe6
Migrate grammar to use PHP 8 T_NAME_* tokens
...
This will break everything on PHP < 8.
2020-07-23 12:01:50 +02:00
Nikita Popov
2d1998938c
[PHP 8.0] Support trailing comma in closure use list
...
RFC: https://wiki.php.net/rfc/trailing_comma_in_closure_use_list
2020-07-22 18:43:55 +02:00
Nikita Popov
739b4b4c60
Fix handling of unterminated comment with trailing newline
...
Fixes #688 .
2020-07-22 18:35:55 +02:00
Tomas Votruba
69c5d48afd
[PHP 8.0] Add match expressions ( #672 )
...
RFC: https://wiki.php.net/rfc/match_expression_v2
Upstream implementation: php/php-src#5371
Closes #671 .
2020-07-15 21:40:05 +02:00
Sebastian Bergmann
f545f18a87
Add ParentConnectingVisitor and NodeConnectingVisitor ( #681 )
2020-07-11 11:31:43 +02:00
Nikita Popov
4abc531213
Canonicalize to PHP 8 comment token format
...
The trailing newline is no longer part of the comment token.
2020-06-27 18:53:09 +02:00
TomasVotruba
b58b19ed1d
Add constructor promotion support
2020-06-27 17:57:47 +02:00
Nikita Popov
0d2d8f95a1
FPPP: Support catch without variable
2020-06-27 17:42:46 +02:00
TomasVotruba
244db65dd1
[PHP 8.0] Add trailing comma in parameter list
2020-06-12 20:24:25 +02:00
TomasVotruba
b5f5313d73
[PHP 8.0] Add exception witout variable
2020-06-03 09:18:13 +02:00
Máté Kocsis
32f89662f3
Add support for the mixed type
2020-05-28 23:39:04 +02:00
Nikita Popov
d86ca0f745
Support arbitrary expressions in new/instanceof
2020-02-22 21:09:03 +01:00
Nikita Popov
c8d1216531
Treat magic constants like normal constants
2020-02-22 21:06:03 +01:00
Nikita Popov
8999a13cb2
Make class constants fully dereferencable
2020-02-22 21:03:53 +01:00
Nikita Popov
c1eaa0d5cd
Unify array and object dereferencability
2020-02-22 20:57:39 +01:00
Nikita Popov
ca5f7c9761
Split productions, unify {} dereferencing
2020-02-22 20:54:55 +01:00
Nikita Popov
ad696ee75d
Make encapsed strings fully dereferencable
2020-02-22 20:49:11 +01:00
Nikita Popov
568236a305
Allow expressions in list()
...
Similar to the previous commit: list() syntactically accepts any
expression and non-variables are compile-time errors. The special
case of ($a) ends up being legal by accident.
2020-02-19 21:29:17 +01:00
Nikita Popov
9dda080a9d
Allow expressions in isset()
...
Partial fix for #653 . PHP 7 allows expressions inside isset(), but
rejects non-variables in the compiler. A side-effect of this is that
isset(($x)) is allowed, though this is not intentional.
2020-02-19 21:14:33 +01:00
Nikita Popov
3ec87ef757
Don't require doc comment to be last comment
...
Fixes #652 .
2020-02-15 10:52:34 +01:00
Nikita Popov
a2443aaefa
Make check in numeric literal separator emulator more precise
...
a) Don't check for !== false, preg_match() return 0 if there is
no match. This effectively means that the check was always true.
b) Check for hex characters only if there's an 0x prefix. 1_1 is
very likely a numeric separator, but a_b might well be part of
an identifier.
Fixes #639 .
2020-02-09 22:50:19 +01:00
Ruud Kamphuis
64f4d5b619
Add getProperty
to ClassLike
2020-02-09 22:43:42 +01:00
Nikita Popov
40aa2282df
Remove trailing comma
2020-02-09 17:15:59 +01:00
Nikita Popov
46cbd9393a
Place Nop nodes more precisely
...
If the Nop is created to collect comments, place it directly after
the comment, instead of at the next non-whitespace character.
2020-02-09 17:10:33 +01:00
Nikita Popov
602af9060d
Add end line / file position / token position to comments
2020-02-09 16:53:46 +01:00
Nikita Popov
bf086d9833
FPPP: Remove special Nop handling
...
This results in ugly formatting, but avoids generating invalid
code.
2020-02-09 16:17:12 +01:00
Tomáš Votruba
88f3a669c1
Add union type to ParamBuilder and BuilderHelpers
2020-01-05 00:34:49 +01:00
Nikita Popov
664c10121e
Add support for union types
...
We definitely need to introduce a general "Type" abstraction in
the next major version.
2019-11-08 14:45:32 +01:00
Nikita Popov
5b1cd2e4f2
Fix phpdoc for Param\Builer::$type
2019-11-02 18:29:08 +01:00
Nikita Popov
0a80b2d8ee
Fix PHP 8 compatibility
...
This is a fix to preserve current behavior, but this should be
changed towards doing the same as PHP 8 does.
2019-10-19 10:49:37 +02:00
Tomas Votruba
006acba066
add getTraitUses() method to ClassLike
2019-08-31 09:26:51 +02:00
Tomas Votruba
005bb1dba7
add getProperties() and getConstants() to ClassLike
2019-08-30 20:47:14 +02:00
Nikita Popov
5644a916bc
Sync flexible heredoc emulation with label fix
...
This was recently fixed in PHP via
310708845f
so we should fix it here as well.
I'm not adding a dedicated test as it will fail until new PHP versions
are released. This is indirectly tested through the php-src tester.
2019-08-30 20:21:28 +02:00
Nikita Popov
4fd36b9946
Fix compatibility with T_BAD_CHARACTER in PHP 7.4
2019-08-12 22:10:02 +02:00
Tyson Andre
a1f72690ef
Fix harmless typos in documentation
2019-07-23 12:32:37 +02:00
Tyson Andre
2e2954ccdf
Avoid notices in php 7.4 with hexdec/base_convert ( #619 )
...
This is made to avoid notices caused by
https://wiki.php.net/rfc/base_convert_improvements
(seen with `php -d error_reporting=E_ALL vendor/bin/phpunit`)
2019-07-14 10:56:13 +02:00
Tomáš Votruba
3f718ee2c3
[PHP 7.4] Add support for numeric literal separators ( #615 )
...
Implements RFC https://wiki.php.net/rfc/numeric_literal_separator .
Closes #614 .
2019-06-30 12:13:28 +02:00
Nikita Popov
b9b45dd2bc
Insert T_BAD_CHARACTER tokens for missing characters
...
The token stream should cover all characters in the original code,
insert a dummy token for missing illegal characters. We should
really be doing this in token_get_all() as well.
2019-06-30 11:43:48 +02:00
Nikita Popov
aad0e2896f
Remove token registration from TokenEmulator interface
2019-06-23 14:50:14 +02:00
hoels
624f71fa6f
Resolve return type of arrow functions ( #613 )
2019-06-04 16:25:12 +02:00
Nikita Popov
94d93f27a5
Revert "Recover from error inside alternative array deref syntax"
...
This reverts commit 9d44edf85d
.
2019-05-24 22:58:13 +02:00
Nikita Popov
a167aa2061
Optimize attribue checks in the lexer
2019-05-12 15:26:26 +02:00
Nikita Popov
993f29906b
Avoid parent constructor call during node construction
...
Instead explicitly assign the attributes. This is a minor
performance improvement.
2019-05-12 14:55:21 +02:00
Nikita Popov
9d44edf85d
Recover from error inside alternative array deref syntax
...
This is to improve error recovery for cases like #545 .
2019-05-12 11:38:15 +02:00
Nikita Popov
aa97a9bb69
Add changelog entries
2019-05-11 23:08:31 +02:00
Nikita Popov
aa72c5d674
FPPP: Support inserting into empty lists
2019-05-11 22:49:32 +02:00
Nikita Popov
60d025a914
Fix attributes for zero-length nop nodes
...
Previously zero-length nop nodes used the lookahead start attributes
and current end attributes. This choice ends up being somewhat weird,
because the end attributes will be the at the last non-whitespace,
non-comment token, which might be quite far back. More problematically,
we may not have encountered any non-discarded token if we're at the
start of the file, in which case we will have no end attributes to
assign.
Change things to use a canonical "zero-length" node representation,
where the end position (token & file) will be exactly one before the
start position.
Fixes #589 .
2019-05-11 20:01:25 +02:00
Tomas Votruba
8012faea54
[PHP 7.4] Add array spread
2019-05-09 19:15:35 +02:00
Tomáš Votruba
f3b19c19ef
[PHP 7.4] Add support for arrow functions ( #602 )
...
Per RFC https://wiki.php.net/rfc/arrow_functions_v2 .
2019-05-09 14:17:28 +02:00