Skip to content

Short array list syntax not correctly tokenized if short array is the first content in a file #1971

Closed
@jrfnl

Description

@jrfnl

The outer square brackets in the below example are tokenized as T_OPEN_SQUARE_BRACKET and T_CLOSE_SQUARE_BRACKET instead of as T_OPEN_SHORT_ARRAY and T_CLOSE_SHORT_ARRAY.

<?php

[$a, [$b]] = $array;

is tokenized as follows - take note of token 2 and 9:

        *** START PHP TOKENIZING ***
        Process token [0]: T_OPEN_TAG => <?php\n
        Process token [1]: T_WHITESPACE => \n
        Process token  2 : T_OPEN_SQUARE_BRACKET => [
        Process token [3]: T_VARIABLE => $a
        Process token  4 : T_COMMA => ,
        Process token [5]: T_WHITESPACE =>
        Process token  6 : T_OPEN_SQUARE_BRACKET => [
        Process token [7]: T_VARIABLE => $b
        Process token  8 : T_CLOSE_SQUARE_BRACKET => ]
        Process token  9 : T_CLOSE_SQUARE_BRACKET => ]
        Process token [10]: T_WHITESPACE =>
        Process token  11 : T_EQUAL => =
        Process token [12]: T_WHITESPACE =>
        Process token [13]: T_VARIABLE => $array
        Process token  14 : T_SEMICOLON => ;
        Process token [15]: T_WHITESPACE => \n
        *** END PHP TOKENIZING ***
        *** START TOKEN MAP ***
        => Found square bracket opener at 2
                => Found square bracket opener at 6
                => Found square bracket closer at 8 for 6
        => Found square bracket closer at 9 for 2
        *** END TOKEN MAP ***
        *** START SCOPE MAP ***
        *** END SCOPE MAP ***
        *** START LEVEL MAP ***
        Process token 0 on line 1 [col:1;len:5;lvl:0;]: T_OPEN_TAG => <?php\n
        Process token 1 on line 2 [col:1;len:0;lvl:0;]: T_WHITESPACE => \n
        Process token 2 on line 3 [col:1;len:1;lvl:0;]: T_OPEN_SQUARE_BRACKET => [
        Process token 3 on line 3 [col:2;len:2;lvl:0;]: T_VARIABLE => $a
        Process token 4 on line 3 [col:4;len:1;lvl:0;]: T_COMMA => ,
        Process token 5 on line 3 [col:5;len:1;lvl:0;]: T_WHITESPACE =>
        Process token 6 on line 3 [col:6;len:1;lvl:0;]: T_OPEN_SQUARE_BRACKET => [
        Process token 7 on line 3 [col:7;len:2;lvl:0;]: T_VARIABLE => $b
        Process token 8 on line 3 [col:9;len:1;lvl:0;]: T_CLOSE_SQUARE_BRACKET => ]
        Process token 9 on line 3 [col:10;len:1;lvl:0;]: T_CLOSE_SQUARE_BRACKET => ]
        Process token 10 on line 3 [col:11;len:1;lvl:0;]: T_WHITESPACE =>
        Process token 11 on line 3 [col:12;len:1;lvl:0;]: T_EQUAL => =
        Process token 12 on line 3 [col:13;len:1;lvl:0;]: T_WHITESPACE =>
        Process token 13 on line 3 [col:14;len:6;lvl:0;]: T_VARIABLE => $array
        Process token 14 on line 3 [col:20;len:1;lvl:0;]: T_SEMICOLON => ;
        Process token 15 on line 3 [col:21;len:0;lvl:0;]: T_WHITESPACE => \n
        *** END LEVEL MAP ***
        *** START ADDITIONAL PHP PROCESSING ***
        * token 6 on line 3 changed from T_OPEN_SQUARE_BRACKET to T_OPEN_SHORT_ARRAY
        * token 8 on line 3 changed from T_CLOSE_SQUARE_BRACKET to T_CLOSE_SHORT_ARRAY
        *** END ADDITIONAL PHP PROCESSING ***

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions