forked from glayzzle/php-parser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtry.js
More file actions
44 lines (44 loc) · 1.34 KB
/
try.js
File metadata and controls
44 lines (44 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*!
* Copyright (C) 2017 Glayzzle (BSD3 License)
* @authors https://github.com/glayzzle/php-parser/graphs/contributors
* @url http://glayzzle.com
*/
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);
var result = this.node('try'),
always = null,
body,
catches = []
;
body = this.next().read_statement();
// https://github.com/php/php-src/blob/master/Zend/zend_language_parser.y#L455
while(this.ignoreComments().token === this.tok.T_CATCH) {
var item = this.node('catch'), what = [], variable = null;
this.next().expect('(') && this.next();
what = this.read_list(
this.read_namespace_name, '|', false
);
variable = this.read_variable(true, false, 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);
}
};