Properly parse 10. as a valid number

Closes #9
This commit is contained in:
Marijn Haverbeke 2012-10-12 23:34:11 +02:00
parent d198b7ed64
commit 96d911a30f
3 changed files with 46 additions and 2 deletions

View File

@ -643,7 +643,7 @@
if (isFloat || input.charAt(tokPos) === ".") { if (isFloat || input.charAt(tokPos) === ".") {
var next = input.charAt(++tokPos); var next = input.charAt(++tokPos);
if (next === "-" || next === "+") ++tokPos; if (next === "-" || next === "+") ++tokPos;
if (readInt(10) === null) raise(start, "Invalid number"); if (readInt(10) === null && ch === ".") raise(start, "Invalid number");
isFloat = true; isFloat = true;
} }
if (/e/i.test(input.charAt(tokPos))) { if (/e/i.test(input.charAt(tokPos))) {

View File

@ -417,7 +417,7 @@ will return <code>null</code> unless the integer has exactly <code>len</code> di
<span class="k">if</span> <span class="p">(</span><span class="nx">isFloat</span> <span class="o">||</span> <span class="nx">input</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="nx">tokPos</span><span class="p">)</span> <span class="o">===</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="nx">isFloat</span> <span class="o">||</span> <span class="nx">input</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="nx">tokPos</span><span class="p">)</span> <span class="o">===</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span> <span class="p">{</span>
<span class="kd">var</span> <span class="nx">next</span> <span class="o">=</span> <span class="nx">input</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="o">++</span><span class="nx">tokPos</span><span class="p">);</span> <span class="kd">var</span> <span class="nx">next</span> <span class="o">=</span> <span class="nx">input</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="o">++</span><span class="nx">tokPos</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">next</span> <span class="o">===</span> <span class="s2">&quot;-&quot;</span> <span class="o">||</span> <span class="nx">next</span> <span class="o">===</span> <span class="s2">&quot;+&quot;</span><span class="p">)</span> <span class="o">++</span><span class="nx">tokPos</span><span class="p">;</span> <span class="k">if</span> <span class="p">(</span><span class="nx">next</span> <span class="o">===</span> <span class="s2">&quot;-&quot;</span> <span class="o">||</span> <span class="nx">next</span> <span class="o">===</span> <span class="s2">&quot;+&quot;</span><span class="p">)</span> <span class="o">++</span><span class="nx">tokPos</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">readInt</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">===</span> <span class="kc">null</span><span class="p">)</span> <span class="nx">raise</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="s2">&quot;Invalid number&quot;</span><span class="p">);</span> <span class="k">if</span> <span class="p">(</span><span class="nx">readInt</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">===</span> <span class="kc">null</span> <span class="o">&amp;&amp;</span> <span class="nx">ch</span> <span class="o">===</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span> <span class="nx">raise</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="s2">&quot;Invalid number&quot;</span><span class="p">);</span>
<span class="nx">isFloat</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span> <span class="nx">isFloat</span> <span class="o">=</span> <span class="kc">true</span><span class="p">;</span>
<span class="p">}</span> <span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="sr">/e/i</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">input</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="nx">tokPos</span><span class="p">)))</span> <span class="p">{</span> <span class="k">if</span> <span class="p">(</span><span class="sr">/e/i</span><span class="p">.</span><span class="nx">test</span><span class="p">(</span><span class="nx">input</span><span class="p">.</span><span class="nx">charAt</span><span class="p">(</span><span class="nx">tokPos</span><span class="p">)))</span> <span class="p">{</span>

View File

@ -25981,6 +25981,50 @@ test("(function () { 'use strict'; '\0'; }())", {
] ]
}); });
test("123..toString(10)", {
type: "Program",
start: 0,
end: 17,
body: [
{
type: "ExpressionStatement",
start: 0,
end: 17,
expression: {
type: "CallExpression",
start: 0,
callee: {
type: "MemberExpression",
start: 0,
object: {
type: "Literal",
start: 0,
end: 4,
value: 123
},
property: {
type: "Identifier",
start: 5,
end: 13,
name: "toString"
},
computed: false,
end: 13
},
arguments: [
{
type: "Literal",
start: 14,
end: 16,
value: 10
}
],
end: 17
}
}
]
});
// Failure tests // Failure tests
testFail("{", testFail("{",