Fixed parseInt handling negative numbers wrong in JIT'd code (bug 507993, r=brendan).

This commit is contained in:
David Anderson 2009-08-10 18:09:51 -07:00
Родитель dba74e2d23
Коммит be6e1fd282
2 изменённых файлов: 33 добавлений и 1 удалений

Просмотреть файл

@ -208,7 +208,16 @@ ParseIntDouble(jsdouble d)
{ {
if (!JSDOUBLE_IS_FINITE(d)) if (!JSDOUBLE_IS_FINITE(d))
return js_NaN; return js_NaN;
/* Don't preserve -0, because js_strtointeger doesn't. */
if (d == 0)
return 0;
if (d > 0)
return floor(d); return floor(d);
d = ceil(d);
/* ceil does not seem to return -0 if not given -0. */
return (d == 0) ? -0.0 : d;
} }
#endif #endif

Просмотреть файл

@ -5683,6 +5683,29 @@ function testClosureIncrSideExit() {
testClosureIncrSideExit.expected = "ddd"; testClosureIncrSideExit.expected = "ddd";
test(testClosureIncrSideExit); test(testClosureIncrSideExit);
function parseIntHelper(n) {
var a;
for (var i = 0; i < 5; i++)
a = parseInt(n);
return a;
}
function doParseIntTests() {
var inputs = [0, -0, .1, -.1, .7, -.7, 1.3, -1.3];
var outputs = new Array(8);
//avoid jit, unrolled
outputs[0] = outputs[1] = outputs[2] = outputs[4] = 0;
outputs[3] = outputs[5] = -0;
outputs[6] = 1;
outputs[7] = -1;
for (var i = 0; i < 8; i++) {
var testfn = new Function('return parseIntHelper(' + uneval(inputs[i]) + ');');
testfn.name = 'testParseInt' + uneval(inputs[i]);
testfn.expected = outputs[i];
test(testfn);
}
}
doParseIntTests();
/***************************************************************************** /*****************************************************************************
* * * *
* _____ _ _ _____ ______ _____ _______ * * _____ _ _ _____ ______ _____ _______ *