php-parser
Version:
Parse PHP code from JS and returns its AST
44 lines (42 loc) • 1.42 kB
JavaScript
/**
* 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);
},
};