Skip to content

Commit

Permalink
Update: Add TryStatement.handler (fixes #69)
Browse files Browse the repository at this point in the history
This is a port of jquery/esprima#1034. It adds `handler` while leaving
`handlers` unchanged. `handler` was decided upon in estree/estree#1.
  • Loading branch information
btmills committed Mar 4, 2015
1 parent b9d5cc4 commit 0224261
Show file tree
Hide file tree
Showing 11 changed files with 661 additions and 17 deletions.
8 changes: 4 additions & 4 deletions espree.js
Original file line number Diff line number Diff line change
Expand Up @@ -4220,26 +4220,26 @@ function parseCatchClause() {
}

function parseTryStatement() {
var block, handlers = [], finalizer = null;
var block, handler = null, finalizer = null;

expectKeyword("try");

block = parseBlock();

if (matchKeyword("catch")) {
handlers.push(parseCatchClause());
handler = parseCatchClause();
}

if (matchKeyword("finally")) {
lex();
finalizer = parseBlock();
}

if (handlers.length === 0 && !finalizer) {
if (!handler && !finalizer) {
throwError({}, Messages.NoCatchOrFinally);
}

return astNodeFactory.createTryStatement(block, [], handlers, finalizer);
return astNodeFactory.createTryStatement(block, handler, finalizer);
}

// 12.15 The debugger statement
Expand Down
10 changes: 5 additions & 5 deletions lib/ast-node-factory.js
Original file line number Diff line number Diff line change
Expand Up @@ -680,17 +680,17 @@ module.exports = {
/**
* Create an ASTNode representation of a try statement
* @param {ASTNode} block The try block
* @param {ASTNode} guardedHandlers Any guarded catch handlers
* @param {ASTNode} handlers Any catch handlers
* @param {ASTNode} handler A catch handler
* @param {?ASTNode} finalizer The final code block to run after the try/catch has run
* @returns {ASTNode} An ASTNode representing a try statement
*/
createTryStatement: function (block, guardedHandlers, handlers, finalizer) {
createTryStatement: function (block, handler, finalizer) {
return {
type: astNodeTypes.TryStatement,
block: block,
guardedHandlers: guardedHandlers,
handlers: handlers,
guardedHandlers: [],
handlers: handler ? [ handler ] : [],
handler: handler,
finalizer: finalizer
};
},
Expand Down
2 changes: 1 addition & 1 deletion test/3rdparty/syntax/angular-1.2.5.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion test/3rdparty/syntax/jquery-1.9.1.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion test/3rdparty/syntax/jquery.mobile-1.4.2.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion test/3rdparty/syntax/mootools-1.4.5.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion test/3rdparty/syntax/underscore-1.5.2.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion test/3rdparty/syntax/yui-3.12.0.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion test/reflect.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ function switchStmt(disc, cases) { return Pattern({ type: "SwitchStatement", dis
function caseClause(test, stmts) { return Pattern({ type: "SwitchCase", test: test, consequent: stmts }) }
function defaultClause(stmts) { return Pattern({ type: "SwitchCase", test: null, consequent: stmts }) }
function catchClause(id, guard, body) { if (guard) { return Pattern({ type: "GuardedCatchClause", param: id, guard: guard, body: body }) } else { return Pattern({ type: "CatchClause", param: id, body: body }) } }
function tryStmt(body, guarded, catches, fin) { return Pattern({ type: "TryStatement", block: body, guardedHandlers: guarded, handlers: catches, finalizer: fin }) }
function tryStmt(body, guarded, catches, fin) { return Pattern({ type: "TryStatement", block: body, guardedHandlers: guarded, handlers: catches, handler: (catches.length > 0) ? catches[0] : null, finalizer: fin }) }
function letStmt(head, body) { return Pattern({ type: "LetStatement", head: head, body: body }) }
function funExpr(id, args, body, gen) { return Pattern({ type: "FunctionExpression",
id: id,
Expand Down
106 changes: 106 additions & 0 deletions tests/fixtures/ast/Tolerant-parse.json
Original file line number Diff line number Diff line change
Expand Up @@ -644,6 +644,59 @@
}
}
],
"handler": {
"type": "CatchClause",
"param": {
"type": "Identifier",
"name": "eval",
"range": [
28,
32
],
"loc": {
"start": {
"line": 1,
"column": 28
},
"end": {
"line": 1,
"column": 32
}
}
},
"body": {
"type": "BlockStatement",
"body": [],
"range": [
34,
36
],
"loc": {
"start": {
"line": 1,
"column": 34
},
"end": {
"line": 1,
"column": 36
}
}
},
"range": [
21,
36
],
"loc": {
"start": {
"line": 1,
"column": 21
},
"end": {
"line": 1,
"column": 36
}
}
},
"finalizer": null,
"range": [
14,
Expand Down Expand Up @@ -799,6 +852,59 @@
}
}
],
"handler": {
"type": "CatchClause",
"param": {
"type": "Identifier",
"name": "arguments",
"range": [
28,
37
],
"loc": {
"start": {
"line": 1,
"column": 28
},
"end": {
"line": 1,
"column": 37
}
}
},
"body": {
"type": "BlockStatement",
"body": [],
"range": [
39,
41
],
"loc": {
"start": {
"line": 1,
"column": 39
},
"end": {
"line": 1,
"column": 41
}
}
},
"range": [
21,
41
],
"loc": {
"start": {
"line": 1,
"column": 21
},
"end": {
"line": 1,
"column": 41
}
}
},
"finalizer": null,
"range": [
14,
Expand Down
Loading

0 comments on commit 0224261

Please sign in to comment.