UNPKG

php-parser

Version:

Parse PHP code from JS and returns its AST

44 lines (42 loc) 1.42 kB
/** * Copyright (C) 2018 Glayzzle (BSD3 License) * @authors https://github.com/glayzzle/php-parser/graphs/contributors * @url http://glayzzle.com */ "use strict"; module.exports = { /* * ```ebnf * try ::= T_TRY '{' inner_statement* '}' * ( * T_CATCH '(' namespace_name (variable)? ')' '{' inner_statement* '}' * )* * (T_FINALLY '{' inner_statement* '}')? * ``` * @see https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L448 * @return {Try} */ read_try: function () { this.expect(this.tok.T_TRY); const result = this.node("try"); let always = null; const catches = []; const body = this.next().read_statement(); // https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L455 while (this.token === this.tok.T_CATCH) { const item = this.node("catch"); this.next().expect("(") && this.next(); const what = this.read_list(this.read_namespace_name, "|", false); let variable = null; if (this.version < 800 || this.token === this.tok.T_VARIABLE) { variable = this.read_variable(true, false); } this.expect(")"); catches.push(item(this.next().read_statement(), what, variable)); } if (this.token === this.tok.T_FINALLY) { always = this.next().read_statement(); } return result(body, catches, always); }, };