Perl-Critic / PPI

53 stars 44 forks source link

Misparse of derefs like ${$arr}[0] #175

Open liosha opened 9 years ago

liosha commented 9 years ago

t/data/05_lexer/subscript.code

$$arr[0];
${$arr}[0];

Both lines means the same. On the first line PPI interprets '[0] as array subscript (right), but on the second one as anonymous array constructor (wrong). The same with hash derefs.

t/data/05_lexer/subscript.dump

PPI::Document
  PPI::Statement
    PPI::Token::Cast    '$'
    PPI::Token::Symbol      '$arr'
    PPI::Structure::Subscript   [ ... ]
      PPI::Statement::Expression
        PPI::Token::Number      '0'
    PPI::Token::Structure   ';'
  PPI::Token::Whitespace    '\n'
  PPI::Statement
    PPI::Token::Cast    '$'
    PPI::Structure::Block   { ... }
      PPI::Statement
        PPI::Token::Symbol      '$arr'
    PPI::Structure::Subscript   [ ... ]
      PPI::Statement::Expression
        PPI::Token::Number      '0'
    PPI::Token::Structure   ';'
  PPI::Token::Whitespace    '\n'
$ prove -Ilib t/05_lexer.t
t/05_lexer.t .. 1/219 
#   Failed test 't/data/05_lexer/subscript: Generated dump matches stored dump'
#   at t/lib/PPI/Test/Run.pm line 73.
#     Structures begin differing at:
#          $got->[14] = '    PPI::Structure::Constructor    [ ... ]'
#     $expected->[14] = '    PPI::Structure::Subscript      [ ... ]'