Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

try/catch syntax misparsed #269

Open
oalders opened this issue Feb 25, 2022 · 0 comments
Open

try/catch syntax misparsed #269

oalders opened this issue Feb 25, 2022 · 0 comments
Labels

Comments

@oalders
Copy link
Collaborator

oalders commented Feb 25, 2022

Not sure how fixable this is, but just noting that PPI doesn't know that the try statement ends at catch ($e) {}, which causes it to misparse the code below. Adding a semicolon after the catch fixes this.

use experimental 'try';

try {
    print 'ok';
}
catch ($e) {}

for my $fh ( \*STDIN, \*STDOUT, \*STDERR ) {
    binmode $fh, ':raw:encoding(UTF-8)';
}
PPI::Document
  PPI::Statement::Include
    PPI::Token::Word    'use'
    PPI::Token::Whitespace      ' '
    PPI::Token::Word    'experimental'
    PPI::Token::Whitespace      ' '
    PPI::Token::Quote::Single   ''try''
    PPI::Token::Structure       ';'
  PPI::Token::Whitespace        '\n'
  PPI::Token::Whitespace        '\n'
  PPI::Statement
    PPI::Token::Word    'try'
    PPI::Token::Whitespace      ' '
    PPI::Structure::Block       { ... }
      PPI::Token::Whitespace    '\n'
      PPI::Token::Whitespace    '    '
      PPI::Statement
        PPI::Token::Word        'print'
        PPI::Token::Whitespace          ' '
        PPI::Token::Quote::Single       ''ok''
        PPI::Token::Structure   ';'
      PPI::Token::Whitespace    '\n'
    PPI::Token::Whitespace      '\n'
    PPI::Token::Word    'catch'
    PPI::Token::Whitespace      ' '
    PPI::Structure::List        ( ... )
      PPI::Statement::Expression
        PPI::Token::Symbol      '$e'
    PPI::Token::Whitespace      ' '
    PPI::Structure::Block       { ... }
    PPI::Token::Whitespace      '\n'
    PPI::Token::Whitespace      '\n'
    PPI::Token::Word    'for'
    PPI::Token::Whitespace      ' '
    PPI::Token::Word    'my'
    PPI::Token::Whitespace      ' '
    PPI::Token::Symbol          '$fh'
    PPI::Token::Whitespace      ' '
    PPI::Structure::List        ( ... )
      PPI::Token::Whitespace    ' '
      PPI::Statement::Expression
        PPI::Token::Cast        '\'
        PPI::Token::Symbol      '*STDIN'
        PPI::Token::Operator    ','
        PPI::Token::Whitespace          ' '
        PPI::Token::Cast        '\'
        PPI::Token::Symbol      '*STDOUT'
        PPI::Token::Operator    ','
        PPI::Token::Whitespace          ' '
        PPI::Token::Cast        '\'
        PPI::Token::Symbol      '*STDERR'
      PPI::Token::Whitespace    ' '
    PPI::Token::Whitespace      ' '
    PPI::Structure::Block       { ... }
      PPI::Token::Whitespace    '\n'
      PPI::Token::Whitespace    '    '
      PPI::Statement
        PPI::Token::Word        'binmode'
        PPI::Token::Whitespace          ' '
        PPI::Token::Symbol      '$fh'
        PPI::Token::Operator    ','
        PPI::Token::Whitespace          ' '
        PPI::Token::Quote::Single       '':raw:encoding(UTF-8)''
        PPI::Token::Structure   ';'
      PPI::Token::Whitespace    '\n'
  PPI::Token::Whitespace        '\n'
use experimental 'try';

try {
    print 'ok';
}
catch ($e) {};

for my $fh ( \*STDIN, \*STDOUT, \*STDERR ) {
    binmode $fh, ':raw:encoding(UTF-8)';
}
PPI::Document
  PPI::Statement::Include
    PPI::Token::Word    'use'
    PPI::Token::Whitespace      ' '
    PPI::Token::Word    'experimental'
    PPI::Token::Whitespace      ' '
    PPI::Token::Quote::Single   ''try''
    PPI::Token::Structure       ';'
  PPI::Token::Whitespace        '\n'
  PPI::Token::Whitespace        '\n'
  PPI::Statement
    PPI::Token::Word    'try'
    PPI::Token::Whitespace      ' '
    PPI::Structure::Block       { ... }
      PPI::Token::Whitespace    '\n'
      PPI::Token::Whitespace    '    '
      PPI::Statement
        PPI::Token::Word        'print'
        PPI::Token::Whitespace          ' '
        PPI::Token::Quote::Single       ''ok''
        PPI::Token::Structure   ';'
      PPI::Token::Whitespace    '\n'
    PPI::Token::Whitespace      '\n'
    PPI::Token::Word    'catch'
    PPI::Token::Whitespace      ' '
    PPI::Structure::List        ( ... )
      PPI::Statement::Expression
        PPI::Token::Symbol      '$e'
    PPI::Token::Whitespace      ' '
    PPI::Structure::Block       { ... }
    PPI::Token::Structure       ';'
  PPI::Token::Whitespace        '\n'
  PPI::Token::Whitespace        '\n'
  PPI::Statement::Compound
    PPI::Token::Word    'for'
    PPI::Token::Whitespace      ' '
    PPI::Token::Word    'my'
    PPI::Token::Whitespace      ' '
    PPI::Token::Symbol          '$fh'
    PPI::Token::Whitespace      ' '
    PPI::Structure::List        ( ... )
      PPI::Token::Whitespace    ' '
      PPI::Statement
        PPI::Token::Cast        '\'
        PPI::Token::Symbol      '*STDIN'
        PPI::Token::Operator    ','
        PPI::Token::Whitespace          ' '
        PPI::Token::Cast        '\'
        PPI::Token::Symbol      '*STDOUT'
        PPI::Token::Operator    ','
        PPI::Token::Whitespace          ' '
        PPI::Token::Cast        '\'
        PPI::Token::Symbol      '*STDERR'
      PPI::Token::Whitespace    ' '
    PPI::Token::Whitespace      ' '
    PPI::Structure::Block       { ... }
      PPI::Token::Whitespace    '\n'
      PPI::Token::Whitespace    '    '
      PPI::Statement
        PPI::Token::Word        'binmode'
        PPI::Token::Whitespace          ' '
        PPI::Token::Symbol      '$fh'
        PPI::Token::Operator    ','
        PPI::Token::Whitespace          ' '
        PPI::Token::Quote::Single       '':raw:encoding(UTF-8)''
        PPI::Token::Structure   ';'
      PPI::Token::Whitespace    '\n'
  PPI::Token::Whitespace        '\n'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant