@@ -608,8 +608,11 @@ protected function tokenize($string)
608
608
) {
609
609
$ preserveKeyword = false ;
610
610
611
- // `new class` should be preserved
612
- if ($ token [0 ] === T_CLASS && $ finalTokens [$ lastNotEmptyToken ]['code ' ] === T_NEW ) {
611
+ // `new class`, and `new static` should be preserved.
612
+ if ($ finalTokens [$ lastNotEmptyToken ]['code ' ] === T_NEW
613
+ && ($ token [0 ] === T_CLASS
614
+ || $ token [0 ] === T_STATIC )
615
+ ) {
613
616
$ preserveKeyword = true ;
614
617
}
615
618
@@ -1970,16 +1973,24 @@ function return types. We want to keep the parenthesis map clean,
1970
1973
&& $ token [0 ] === T_STRING
1971
1974
&& isset ($ this ->tstringContexts [$ finalTokens [$ lastNotEmptyToken ]['code ' ]]) === true
1972
1975
) {
1973
- // Special case for syntax like: return new self
1974
- // where self should not be a string.
1976
+ // Special case for syntax like: return new self/new parent
1977
+ // where self/parent should not be a string.
1978
+ $ tokenContentLower = strtolower ($ token [1 ]);
1975
1979
if ($ finalTokens [$ lastNotEmptyToken ]['code ' ] === T_NEW
1976
- && strtolower ( $ token [ 1 ]) === 'self '
1980
+ && ( $ tokenContentLower === 'self ' || $ tokenContentLower === ' parent ' )
1977
1981
) {
1978
1982
$ finalTokens [$ newStackPtr ] = [
1979
1983
'content ' => $ token [1 ],
1980
- 'code ' => T_SELF ,
1981
- 'type ' => 'T_SELF ' ,
1982
1984
];
1985
+ if ($ tokenContentLower === 'self ' ) {
1986
+ $ finalTokens [$ newStackPtr ]['code ' ] = T_SELF ;
1987
+ $ finalTokens [$ newStackPtr ]['type ' ] = 'T_SELF ' ;
1988
+ }
1989
+
1990
+ if ($ tokenContentLower === 'parent ' ) {
1991
+ $ finalTokens [$ newStackPtr ]['code ' ] = T_PARENT ;
1992
+ $ finalTokens [$ newStackPtr ]['type ' ] = 'T_PARENT ' ;
1993
+ }
1983
1994
} else {
1984
1995
$ finalTokens [$ newStackPtr ] = [
1985
1996
'content ' => $ token [1 ],
0 commit comments