Use a single .handler property on TryStatements
As the wiki page for the spec currently seems to prescribe.
This commit is contained in:
8
acorn.js
8
acorn.js
@@ -1235,8 +1235,8 @@
|
||||
case _try:
|
||||
next();
|
||||
node.block = parseBlock();
|
||||
node.handlers = [];
|
||||
while (tokType === _catch) {
|
||||
node.handler = null;
|
||||
if (tokType === _catch) {
|
||||
var clause = startNode();
|
||||
next();
|
||||
expect(_parenL);
|
||||
@@ -1246,10 +1246,10 @@
|
||||
expect(_parenR);
|
||||
clause.guard = null;
|
||||
clause.body = parseBlock();
|
||||
node.handlers.push(finishNode(clause, "CatchClause"));
|
||||
node.handler = finishNode(clause, "CatchClause");
|
||||
}
|
||||
node.finalizer = eat(_finally) ? parseBlock() : null;
|
||||
if (!node.handlers.length && !node.finalizer)
|
||||
if (!node.handler && !node.finalizer)
|
||||
raise(node.start, "Missing catch or finally clause");
|
||||
return finishNode(node, "TryStatement");
|
||||
|
||||
|
||||
@@ -377,8 +377,8 @@
|
||||
case tt.try:
|
||||
next();
|
||||
node.block = parseBlock();
|
||||
node.handlers = [];
|
||||
while (token.type === tt.catch) {
|
||||
node.handler = null;
|
||||
if (token.type === tt.catch) {
|
||||
var clause = startNode();
|
||||
next();
|
||||
expect(tt.parenL);
|
||||
@@ -386,10 +386,10 @@
|
||||
expect(tt.parenR);
|
||||
clause.guard = null;
|
||||
clause.body = parseBlock();
|
||||
node.handlers.push(finishNode(clause, "CatchClause"));
|
||||
node.handler = finishNode(clause, "CatchClause");
|
||||
}
|
||||
node.finalizer = eat(tt.finally) ? parseBlock() : null;
|
||||
if (!node.handlers.length && !node.finalizer) return node.block;
|
||||
if (!node.handler && !node.finalizer) return node.block;
|
||||
return finishNode(node, "TryStatement");
|
||||
|
||||
case tt.var:
|
||||
|
||||
@@ -901,8 +901,8 @@ adding statements to.</p> </td> <td class="code">
|
||||
<span class="k">case</span> <span class="nx">_try</span><span class="o">:</span>
|
||||
<span class="nx">next</span><span class="p">();</span>
|
||||
<span class="nx">node</span><span class="p">.</span><span class="nx">block</span> <span class="o">=</span> <span class="nx">parseBlock</span><span class="p">();</span>
|
||||
<span class="nx">node</span><span class="p">.</span><span class="nx">handlers</span> <span class="o">=</span> <span class="p">[];</span>
|
||||
<span class="k">while</span> <span class="p">(</span><span class="nx">tokType</span> <span class="o">===</span> <span class="nx">_catch</span><span class="p">)</span> <span class="p">{</span>
|
||||
<span class="nx">node</span><span class="p">.</span><span class="nx">handler</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="nx">tokType</span> <span class="o">===</span> <span class="nx">_catch</span><span class="p">)</span> <span class="p">{</span>
|
||||
<span class="kd">var</span> <span class="nx">clause</span> <span class="o">=</span> <span class="nx">startNode</span><span class="p">();</span>
|
||||
<span class="nx">next</span><span class="p">();</span>
|
||||
<span class="nx">expect</span><span class="p">(</span><span class="nx">_parenL</span><span class="p">);</span>
|
||||
@@ -912,10 +912,10 @@ adding statements to.</p> </td> <td class="code">
|
||||
<span class="nx">expect</span><span class="p">(</span><span class="nx">_parenR</span><span class="p">);</span>
|
||||
<span class="nx">clause</span><span class="p">.</span><span class="nx">guard</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span>
|
||||
<span class="nx">clause</span><span class="p">.</span><span class="nx">body</span> <span class="o">=</span> <span class="nx">parseBlock</span><span class="p">();</span>
|
||||
<span class="nx">node</span><span class="p">.</span><span class="nx">handlers</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">finishNode</span><span class="p">(</span><span class="nx">clause</span><span class="p">,</span> <span class="s2">"CatchClause"</span><span class="p">));</span>
|
||||
<span class="nx">node</span><span class="p">.</span><span class="nx">handler</span> <span class="o">=</span> <span class="nx">finishNode</span><span class="p">(</span><span class="nx">clause</span><span class="p">,</span> <span class="s2">"CatchClause"</span><span class="p">);</span>
|
||||
<span class="p">}</span>
|
||||
<span class="nx">node</span><span class="p">.</span><span class="nx">finalizer</span> <span class="o">=</span> <span class="nx">eat</span><span class="p">(</span><span class="nx">_finally</span><span class="p">)</span> <span class="o">?</span> <span class="nx">parseBlock</span><span class="p">()</span> <span class="o">:</span> <span class="kc">null</span><span class="p">;</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">node</span><span class="p">.</span><span class="nx">handlers</span><span class="p">.</span><span class="nx">length</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">node</span><span class="p">.</span><span class="nx">finalizer</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">node</span><span class="p">.</span><span class="nx">handler</span> <span class="o">&&</span> <span class="o">!</span><span class="nx">node</span><span class="p">.</span><span class="nx">finalizer</span><span class="p">)</span>
|
||||
<span class="nx">raise</span><span class="p">(</span><span class="nx">node</span><span class="p">.</span><span class="nx">start</span><span class="p">,</span> <span class="s2">"Missing catch or finally clause"</span><span class="p">);</span>
|
||||
<span class="k">return</span> <span class="nx">finishNode</span><span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="s2">"TryStatement"</span><span class="p">);</span>
|
||||
|
||||
|
||||
@@ -21819,8 +21819,7 @@ test("try { } catch (e) { }", {
|
||||
}
|
||||
}
|
||||
},
|
||||
handlers: [
|
||||
{
|
||||
handler: {
|
||||
type: "CatchClause",
|
||||
param: {
|
||||
type: "Identifier",
|
||||
@@ -21862,7 +21861,7 @@ test("try { } catch (e) { }", {
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
,
|
||||
finalizer: null,
|
||||
loc: {
|
||||
start: {
|
||||
@@ -21907,7 +21906,7 @@ test("try { } catch (eval) { }", {
|
||||
}
|
||||
}
|
||||
},
|
||||
handlers: [
|
||||
handler:
|
||||
{
|
||||
type: "CatchClause",
|
||||
param: {
|
||||
@@ -21950,7 +21949,7 @@ test("try { } catch (eval) { }", {
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
,
|
||||
finalizer: null,
|
||||
loc: {
|
||||
start: {
|
||||
@@ -21995,7 +21994,7 @@ test("try { } catch (arguments) { }", {
|
||||
}
|
||||
}
|
||||
},
|
||||
handlers: [
|
||||
handler:
|
||||
{
|
||||
type: "CatchClause",
|
||||
param: {
|
||||
@@ -22038,7 +22037,7 @@ test("try { } catch (arguments) { }", {
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
,
|
||||
finalizer: null,
|
||||
loc: {
|
||||
start: {
|
||||
@@ -22083,7 +22082,7 @@ test("try { } catch (e) { say(e) }", {
|
||||
}
|
||||
}
|
||||
},
|
||||
handlers: [
|
||||
handler:
|
||||
{
|
||||
type: "CatchClause",
|
||||
param: {
|
||||
@@ -22183,7 +22182,7 @@ test("try { } catch (e) { say(e) }", {
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
,
|
||||
finalizer: null,
|
||||
loc: {
|
||||
start: {
|
||||
@@ -22228,7 +22227,7 @@ test("try { } finally { cleanup(stuff) }", {
|
||||
}
|
||||
}
|
||||
},
|
||||
handlers: [],
|
||||
handler: null,
|
||||
finalizer: {
|
||||
type: "BlockStatement",
|
||||
body: [
|
||||
@@ -22385,7 +22384,7 @@ test("try { doThat(); } catch (e) { say(e) }", {
|
||||
}
|
||||
}
|
||||
},
|
||||
handlers: [
|
||||
handler:
|
||||
{
|
||||
type: "CatchClause",
|
||||
param: {
|
||||
@@ -22485,7 +22484,7 @@ test("try { doThat(); } catch (e) { say(e) }", {
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
,
|
||||
finalizer: null,
|
||||
loc: {
|
||||
start: {
|
||||
@@ -22572,7 +22571,7 @@ test("try { doThat(); } catch (e) { say(e) } finally { cleanup(stuff) }", {
|
||||
}
|
||||
}
|
||||
},
|
||||
handlers: [
|
||||
handler:
|
||||
{
|
||||
type: "CatchClause",
|
||||
param: {
|
||||
@@ -22672,7 +22671,7 @@ test("try { doThat(); } catch (e) { say(e) } finally { cleanup(stuff) }", {
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
,
|
||||
finalizer: {
|
||||
type: "BlockStatement",
|
||||
body: [
|
||||
|
||||
11
util/walk.js
11
util/walk.js
@@ -188,8 +188,7 @@
|
||||
};
|
||||
base.TryStatement = function(node, st, c) {
|
||||
c(node.block, st, "Statement");
|
||||
for (var i = 0; i < node.handlers.length; ++i)
|
||||
c(node.handlers[i].body, st, "ScopeBody");
|
||||
if (node.handler) c(node.handler.body, st, "ScopeBody");
|
||||
if (node.finalizer) c(node.finalizer, st, "Statement");
|
||||
};
|
||||
base.WhileStatement = function(node, st, c) {
|
||||
@@ -290,10 +289,10 @@
|
||||
},
|
||||
TryStatement: function(node, scope, c) {
|
||||
c(node.block, scope, "Statement");
|
||||
for (var i = 0; i < node.handlers.length; ++i) {
|
||||
var handler = node.handlers[i], inner = makeScope(scope);
|
||||
inner.vars[handler.param.name] = {type: "catch clause", node: handler.param};
|
||||
c(handler.body, inner, "ScopeBody");
|
||||
if (node.handler) {
|
||||
var inner = makeScope(scope);
|
||||
inner.vars[node.handler.param.name] = {type: "catch clause", node: node.handler.param};
|
||||
c(node.handler.body, inner, "ScopeBody");
|
||||
}
|
||||
if (node.finalizer) c(node.finalizer, scope, "Statement");
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user