@@ -19,6 +19,7 @@ class Lexer
1919 const TOKEN_OPEN_SQUARE_BRACKET = 8 ;
2020 const TOKEN_CLOSE_SQUARE_BRACKET = 9 ;
2121 const TOKEN_COMMA = 10 ;
22+ const TOKEN_COLON = 29 ;
2223 const TOKEN_VARIADIC = 11 ;
2324 const TOKEN_DOUBLE_COLON = 12 ;
2425 const TOKEN_DOUBLE_ARROW = 13 ;
@@ -50,6 +51,7 @@ class Lexer
5051 self ::TOKEN_OPEN_SQUARE_BRACKET => '\'[ \'' ,
5152 self ::TOKEN_CLOSE_SQUARE_BRACKET => '\'] \'' ,
5253 self ::TOKEN_COMMA => '\', \'' ,
54+ self ::TOKEN_COLON => '\': \'' ,
5355 self ::TOKEN_VARIADIC => '\'... \'' ,
5456 self ::TOKEN_DOUBLE_COLON => '\':: \'' ,
5557 self ::TOKEN_DOUBLE_ARROW => '\'=> \'' ,
@@ -107,8 +109,8 @@ public function tokenize(string $s): array
107109 private function initialize ()
108110 {
109111 $ patterns = [
110- // '&' followed by TOKEN_VARIADIC or TOKEN_VARIABLE
111- self ::TOKEN_REFERENCE => '&(?= \\s*+(?:(?: \\ . \\ . \\ .) |(?: \\$(?!this \\ b )))) ' ,
112+ // '&' followed by TOKEN_VARIADIC, TOKEN_VARIABLE, TOKEN_EQUAL, TOKEN_EQUAL or TOKEN_CLOSE_PARENTHESES
113+ self ::TOKEN_REFERENCE => '&(?= \\s*+(?:[.,=)] |(?: \\$(?!this(?![0-9a-z_ \\ x80- \\ xFF]) )))) ' ,
112114 self ::TOKEN_UNION => '\\| ' ,
113115 self ::TOKEN_INTERSECTION => '& ' ,
114116 self ::TOKEN_NULLABLE => '\\? ' ,
@@ -125,6 +127,7 @@ private function initialize()
125127 self ::TOKEN_DOUBLE_COLON => ':: ' ,
126128 self ::TOKEN_DOUBLE_ARROW => '=> ' ,
127129 self ::TOKEN_EQUAL => '= ' ,
130+ self ::TOKEN_COLON => ': ' ,
128131
129132 self ::TOKEN_OPEN_PHPDOC => '/ \\* \\*(?= \\s) ' ,
130133 self ::TOKEN_CLOSE_PHPDOC => '\\*/ ' ,
@@ -137,7 +140,7 @@ private function initialize()
137140 self ::TOKEN_DOUBLE_QUOTED_STRING => '"(?: \\\\[^ \\r \\n]|[^" \\r \\n \\\\])*+" ' ,
138141
139142 self ::TOKEN_IDENTIFIER => '(?:[ \\\\]?+[a-z_ \\x80- \\xFF][0-9a-z_ \\x80- \\xFF]*+)++ ' ,
140- self ::TOKEN_THIS_VARIABLE => '\\$this \\ b ' ,
143+ self ::TOKEN_THIS_VARIABLE => '\\$this(?![0-9a-z_ \\ x80- \\ xFF]) ' ,
141144 self ::TOKEN_VARIABLE => '\\$[a-z_ \\x80- \\xFF][0-9a-z_ \\x80- \\xFF]*+ ' ,
142145
143146 self ::TOKEN_HORIZONTAL_WS => '[ \\x09 \\x20]++ ' ,
0 commit comments