@@ -71,7 +71,7 @@ class Tokenizer
7171 protected $ curlyBrackets = array (
7272 'T_CLASS ' ,
7373 'T_INTERFACE ' ,
74- 'T_CASE ' ,
74+ // 'T_CASE',
7575 'T_TRY ' ,
7676 'T_ELSE ' ,
7777 'T_FUNCTION_CLOSE_ROUND_BRACKET ' ,
@@ -96,7 +96,9 @@ class Tokenizer
9696 'T_ARRAY ' ,
9797 );
9898
99-
99+ protected $ noSpecialRoundBrackets = array (
100+ 'T_OBJECT_OPERATOR ' ,
101+ );
100102
101103 /**
102104 * Stack of token names to match round brackets
@@ -124,18 +126,20 @@ public function tokenize($source)
124126 continue ;
125127 }
126128
127- $ tokenObject = $ this ->parseToken ($ sourceToken , $ previousToken );
128- $ this ->tokenCollection [] = $ previousToken = $ tokenObject ;
129+ $ object = $ this ->parseToken ($ sourceToken , $ previousToken );
130+ $ this ->tokenCollection [] = $ previousToken = $ object ;
129131 }
130132
131133 return $ this ->tokenCollection ;
132134 }
133135
134136 protected function parseToken ($ sourceToken , $ previousToken ) {
135- $ parsedSourceToken = array ();
137+ $ parsedSourceToken = array ();
138+
136139 if (is_array ($ sourceToken )) {
137140 $ parsedSourceToken = $ sourceToken ;
138141 $ parsedSourceToken [3 ] = token_name ($ sourceToken [0 ]);
142+ $ this ->addTokenOntoStack ($ parsedSourceToken [3 ]);
139143 } else {
140144 $ parsedSourceToken = $ this ->addTokenData ($ sourceToken , $ previousToken );
141145 }
@@ -151,7 +155,8 @@ protected function sanitizeCode($tokenName, $previousToken)
151155 {
152156 switch ($ tokenName ) {
153157 case 'T_ARRAY_CLOSE_ROUND_BRACKET ' :
154- if ('T_COMMA_FOR_ARRAY ' !== $ previousToken ->getName ()) {
158+ if ('T_COMMA_FOR_ARRAY ' != $ previousToken ->getName ()
159+ && 'T_ARRAY_OPEN_ROUND_BRACKET ' != $ previousToken ->getName ()) {
155160 $ previousToken = $ this ->parseToken (', ' , $ previousToken );
156161 $ this ->tokenCollection [] = $ previousToken ;
157162 }
@@ -171,9 +176,7 @@ protected function addTokenOntoStack($tokenName)
171176 switch ($ tokenName ) {
172177 case 'T_CLASS ' :
173178 case 'T_INTERFACE ' :
174- case 'T_CASE ' :
175179 case 'T_TRY ' :
176- case 'T_ELSE ' :
177180 array_unshift ($ this ->curlyBracketStack , $ tokenName );
178181 break ;
179182 case 'T_CATCH ' :
@@ -198,14 +201,9 @@ protected function addTokenOntoStack($tokenName)
198201 protected function addTokenData ($ sourceString , Token $ previousToken )
199202 {
200203 $ tokenName = '' ;
201- $ controlTokenName = '' ;
204+ $ controlTokenName = null ;
202205 switch ($ sourceString ) {
203206 case '{ ' :
204- // if(!isset($this->curlyBracketStack[0])) {
205- // $tokenName = 'T_OPEN_CURLY_BRACKET';
206- // } else {
207- // $tokenName = $this->curlyBracketStack[0].'_OPEN_CURLY_BRACKET';
208- // }
209207 $ tokenName = 'T_OPEN_CURLY_BRACKET ' ;
210208
211209 $ controlTokenName = $ this ->findPreviousControlTokenForCurlyBracket ($ previousToken );
@@ -217,42 +215,25 @@ protected function addTokenData($sourceString, Token $previousToken)
217215 array_unshift ($ this ->curlyBracketStack , $ tokenName );
218216 break ;
219217 case '} ' :
220- // if(empty($this->curlyBracketStack)) {
221- // $tokenName = 'T_CLOSE_CURLY_BRACKET';
222- // } else {
223- // $tokenName = array_shift($this->curlyBracketStack).'_CLOSE_CURLY_BRACKET';
224- // }
225218 $ tokenName = array_shift ($ this ->curlyBracketStack );
226- //var_dump($tokenName);
227219 $ tokenName = str_replace ('_OPEN_ ' , '_CLOSE_ ' , $ tokenName );
228- // var_dump($tokenName);
229220 break ;
230221 case '( ' :
231222 $ tokenName = 'T_OPEN_ROUND_BRACKET ' ;
223+
224+ if (!function_exists ($ previousToken ->getContent ())) {
225+ $ controlTokenName = $ this ->findPreviousControlTokenForRoundBracket ($ previousToken );
226+ }
232227
233- $ controlTokenName = $ this ->findPreviousControlTokenForRoundBracket ($ previousToken );
234- // var_dump($sourceString);
235- // var_dump($previousToken->getPreviousToken()->getName());
236- // var_dump($previousToken->getPreviousToken()->getContent());
237- // var_dump($controlTokenName);
238- // die();
239228 if (null !== $ controlTokenName ) {
240229 $ tokenName = $ controlTokenName . '_OPEN_ROUND_BRACKET ' ;
241230 }
242- // if (in_array($previousToken->getName(), $this->roundBrackets)) {
243- // $tokenName = $previousToken->getName().'_OPEN_ROUND_BRACKET';
244- // }
245- // var_dump($sourceString);
246- // var_dump($tokenName);
247- // die();
231+
248232 array_unshift ($ this ->roundBracketStack , $ tokenName );
249233 break ;
250234 case ') ' :
251- $ tokenName = str_replace ('_OPEN_ ' , '_CLOSE_ ' , array_shift ($ this ->roundBracketStack ));
252- // var_dump($tokenName);
253- // if (in_array($tokenName, $this->curlyBrackets)) {
254- // array_unshift($this->curlyBracketStack, str_replace('_CLOSE_ROUND_BRACKET', '', $tokenName));
255- // }
235+ $ tokenName = array_shift ($ this ->roundBracketStack );
236+ $ tokenName = str_replace ('_OPEN_ ' , '_CLOSE_ ' , $ tokenName );
256237 break ;
257238 case ', ' :
258239 $ tokenName = 'T_COMMA ' . $ this ->contextPostfix ;
@@ -354,6 +335,8 @@ protected function findPreviousControlTokenForCurlyBracket(Token $token) {
354335 protected function findPreviousControlTokenForRoundBracket (Token $ token ) {
355336 if (in_array ($ token ->getName (), $ this ->roundBrackets )) {
356337 return $ token ->getName ();
338+ } elseif (in_array ($ token ->getName (), $ this ->noSpecialRoundBrackets )) {
339+ return null ;
357340 } elseif (false !== strpos ($ token ->getName (), 'OPEN_ROUND ' )) {
358341 return null ;
359342 } elseif (false !== strpos ($ token ->getName (), 'CLOSE_ROUND ' )) {
0 commit comments