Fix wrong end position for VariableDeclaration nodes

It should include the semicolon.

Closes #67
This commit is contained in:
Marijn Haverbeke
2013-10-02 20:39:51 +02:00
parent b7417cec8c
commit 22c3161b6e
3 changed files with 19 additions and 17 deletions

View File

@@ -1180,6 +1180,7 @@
var init = startNode();
next();
parseVar(init, true);
finishNode(init, "VariableDeclaration");
if (init.declarations.length === 1 && eat(_in))
return parseForIn(node, init);
return parseFor(node, init);
@@ -1277,9 +1278,9 @@
case _var:
next();
node = parseVar(node);
parseVar(node);
semicolon();
return node;
return finishNode(node, "VariableDeclaration");
case _while:
next();
@@ -1400,7 +1401,7 @@
node.declarations.push(finishNode(decl, "VariableDeclarator"));
if (!eat(_comma)) break;
}
return finishNode(node, "VariableDeclaration");
return node;
}
// ### Expression parsing

View File

@@ -842,6 +842,7 @@ a regular <code>for</code> loop.</p> </td> <td class="co
<span class="kd">var</span> <span class="nx">init</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">parseVar</span><span class="p">(</span><span class="nx">init</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
<span class="nx">finishNode</span><span class="p">(</span><span class="nx">init</span><span class="p">,</span> <span class="s2">&quot;VariableDeclaration&quot;</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">init</span><span class="p">.</span><span class="nx">declarations</span><span class="p">.</span><span class="nx">length</span> <span class="o">===</span> <span class="mi">1</span> <span class="o">&amp;&amp;</span> <span class="nx">eat</span><span class="p">(</span><span class="nx">_in</span><span class="p">))</span>
<span class="k">return</span> <span class="nx">parseForIn</span><span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="nx">init</span><span class="p">);</span>
<span class="k">return</span> <span class="nx">parseFor</span><span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="nx">init</span><span class="p">);</span>
@@ -931,9 +932,9 @@ adding statements to.</p> </td> <td class="code">
<span class="k">case</span> <span class="nx">_var</span><span class="o">:</span>
<span class="nx">next</span><span class="p">();</span>
<span class="nx">node</span> <span class="o">=</span> <span class="nx">parseVar</span><span class="p">(</span><span class="nx">node</span><span class="p">);</span>
<span class="nx">parseVar</span><span class="p">(</span><span class="nx">node</span><span class="p">);</span>
<span class="nx">semicolon</span><span class="p">();</span>
<span class="k">return</span> <span class="nx">node</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">&quot;VariableDeclaration&quot;</span><span class="p">);</span>
<span class="k">case</span> <span class="nx">_while</span><span class="o">:</span>
<span class="nx">next</span><span class="p">();</span>
@@ -1030,7 +1031,7 @@ expression.</p> </td> <td class="code"> <d
<span class="nx">node</span><span class="p">.</span><span class="nx">declarations</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">decl</span><span class="p">,</span> <span class="s2">&quot;VariableDeclarator&quot;</span><span class="p">));</span>
<span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nx">eat</span><span class="p">(</span><span class="nx">_comma</span><span class="p">))</span> <span class="k">break</span><span class="p">;</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">&quot;VariableDeclaration&quot;</span><span class="p">);</span>
<span class="k">return</span> <span class="nx">node</span><span class="p">;</span>
<span class="p">}</span></pre></div> </td> </tr> <tr id="section-106"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-106">&#182;</a> </div> <h3>Expression parsing</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-107"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-107">&#182;</a> </div> <p>These nest, from the most general expression type at the top to
'atomic', nondivisible expression types at the bottom. Most of
the functions will simply let the function(s) below them parse,
@@ -1085,8 +1086,8 @@ operator that has a lower precedence than the set it is parsing.</p>
<span class="nx">node</span><span class="p">.</span><span class="nx">operator</span> <span class="o">=</span> <span class="nx">tokVal</span><span class="p">;</span>
<span class="nx">next</span><span class="p">();</span>
<span class="nx">node</span><span class="p">.</span><span class="nx">right</span> <span class="o">=</span> <span class="nx">parseExprOp</span><span class="p">(</span><span class="nx">parseMaybeUnary</span><span class="p">(),</span> <span class="nx">prec</span><span class="p">,</span> <span class="nx">noIn</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">node</span> <span class="o">=</span> <span class="nx">finishNode</span><span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="sr">/&amp;&amp;|\|\|/</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">node</span><span class="p">.</span><span class="nx">operator</span><span class="p">)</span> <span class="o">?</span> <span class="s2">&quot;LogicalExpression&quot;</span> <span class="o">:</span> <span class="s2">&quot;BinaryExpression&quot;</span><span class="p">);</span>
<span class="k">return</span> <span class="nx">parseExprOp</span><span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="nx">minPrec</span><span class="p">,</span> <span class="nx">noIn</span><span class="p">);</span>
<span class="kd">var</span> <span class="nx">exprNode</span> <span class="o">=</span> <span class="nx">finishNode</span><span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="sr">/&amp;&amp;|\|\|/</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">node</span><span class="p">.</span><span class="nx">operator</span><span class="p">)</span> <span class="o">?</span> <span class="s2">&quot;LogicalExpression&quot;</span> <span class="o">:</span> <span class="s2">&quot;BinaryExpression&quot;</span><span class="p">);</span>
<span class="k">return</span> <span class="nx">parseExprOp</span><span class="p">(</span><span class="nx">exprNode</span><span class="p">,</span> <span class="nx">minPrec</span><span class="p">,</span> <span class="nx">noIn</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">return</span> <span class="nx">left</span><span class="p">;</span>

View File

@@ -16215,7 +16215,7 @@ test("var x, y;", {
},
end: {
line: 1,
column: 8
column: 9
}
}
}
@@ -17307,7 +17307,7 @@ test("if (morning) var x = 0;", {
},
end: {
line: 1,
column: 22
column: 23
}
}
},
@@ -23685,7 +23685,7 @@ test("var hi = function() { sayHi() };", {
},
end: {
line: 1,
column: 31
column: 32
}
}
}
@@ -23786,7 +23786,7 @@ test("var hi = function eval() { };", {
},
end: {
line: 1,
column: 28
column: 29
}
}
}
@@ -23887,7 +23887,7 @@ test("var hi = function arguments() { };", {
},
end: {
line: 1,
column: 33
column: 34
}
}
}
@@ -24030,7 +24030,7 @@ test("var hello = function hi() { sayHi() };", {
},
end: {
line: 1,
column: 37
column: 38
}
}
}
@@ -24348,7 +24348,7 @@ test("var x /* comment */;", {
},
end: {
line: 1,
column: 5
column: 20
}
}
}
@@ -26164,7 +26164,7 @@ test("var a = 1;", {
{
type: "VariableDeclaration",
start: 0,
end: 9,
end: 10,
loc: {
start: {
line: 1,
@@ -26172,7 +26172,7 @@ test("var a = 1;", {
},
end: {
line: 1,
column: 9
column: 10
},
source: "test.js"
},