зеркало из https://github.com/mozilla/gecko-dev.git
Bug 604864 - Optimize undefined, NaN and Infinity in methodjit. r=dmandelin
This commit is contained in:
Родитель
5cce2a3041
Коммит
c402f81ebb
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
function testLocalNames() {
|
||||||
|
var NaN = 4;
|
||||||
|
var undefined = 5;
|
||||||
|
var Infinity = 6;
|
||||||
|
return NaN + undefined + Infinity;
|
||||||
|
}
|
||||||
|
assertEq(testLocalNames(), 15);
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
|
||||||
|
function testNaN(x) {
|
||||||
|
var x = NaN;
|
||||||
|
assertEq(isNaN(x), true);
|
||||||
|
}
|
||||||
|
testNaN();
|
||||||
|
|
||||||
|
function testInfinity(x) {
|
||||||
|
return (x === Infinity);
|
||||||
|
}
|
||||||
|
assertEq(testInfinity(Infinity), true);
|
||||||
|
assertEq(testInfinity(6), false);
|
||||||
|
assertEq(testInfinity(-Infinity), false);
|
||||||
|
|
||||||
|
function testUndefined(x) {
|
||||||
|
return (x === undefined);
|
||||||
|
}
|
||||||
|
assertEq(testUndefined(undefined), true);
|
||||||
|
assertEq(testUndefined(), true);
|
||||||
|
assertEq(testUndefined(5), false);
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
NaN = 4;
|
||||||
|
undefined = 5;
|
||||||
|
Infinity = 6;
|
||||||
|
|
||||||
|
assertEq(isNaN(NaN), true);
|
||||||
|
assertEq(Infinity > 100, true);
|
||||||
|
assertEq(undefined != 5, true);
|
||||||
|
|
|
@ -1525,8 +1525,8 @@ static JSStdName standard_class_names[] = {
|
||||||
{js_InitObjectClass, EAGER_ATOM(eval), CLASP(Object)},
|
{js_InitObjectClass, EAGER_ATOM(eval), CLASP(Object)},
|
||||||
|
|
||||||
/* Global properties and functions defined by the Number class. */
|
/* Global properties and functions defined by the Number class. */
|
||||||
{js_InitNumberClass, LAZY_ATOM(NaN), CLASP(Number)},
|
{js_InitNumberClass, EAGER_ATOM(NaN), CLASP(Number)},
|
||||||
{js_InitNumberClass, LAZY_ATOM(Infinity), CLASP(Number)},
|
{js_InitNumberClass, EAGER_ATOM(Infinity), CLASP(Number)},
|
||||||
{js_InitNumberClass, LAZY_ATOM(isNaN), CLASP(Number)},
|
{js_InitNumberClass, LAZY_ATOM(isNaN), CLASP(Number)},
|
||||||
{js_InitNumberClass, LAZY_ATOM(isFinite), CLASP(Number)},
|
{js_InitNumberClass, LAZY_ATOM(isFinite), CLASP(Number)},
|
||||||
{js_InitNumberClass, LAZY_ATOM(parseFloat), CLASP(Number)},
|
{js_InitNumberClass, LAZY_ATOM(parseFloat), CLASP(Number)},
|
||||||
|
|
|
@ -181,6 +181,8 @@ const char *const js_common_atom_names[] = {
|
||||||
"use strict", /* useStrictAtom */
|
"use strict", /* useStrictAtom */
|
||||||
"loc", /* locAtom */
|
"loc", /* locAtom */
|
||||||
"line", /* lineAtom */
|
"line", /* lineAtom */
|
||||||
|
"Infinity", /* InfinityAtom */
|
||||||
|
"NaN", /* NaNAtom */
|
||||||
|
|
||||||
#if JS_HAS_XML_SUPPORT
|
#if JS_HAS_XML_SUPPORT
|
||||||
js_etago_str, /* etagoAtom */
|
js_etago_str, /* etagoAtom */
|
||||||
|
|
|
@ -373,6 +373,8 @@ struct JSAtomState
|
||||||
JSAtom *useStrictAtom;
|
JSAtom *useStrictAtom;
|
||||||
JSAtom *locAtom;
|
JSAtom *locAtom;
|
||||||
JSAtom *lineAtom;
|
JSAtom *lineAtom;
|
||||||
|
JSAtom *InfinityAtom;
|
||||||
|
JSAtom *NaNAtom;
|
||||||
|
|
||||||
#if JS_HAS_XML_SUPPORT
|
#if JS_HAS_XML_SUPPORT
|
||||||
JSAtom *etagoAtom;
|
JSAtom *etagoAtom;
|
||||||
|
@ -407,8 +409,6 @@ struct JSAtomState
|
||||||
|
|
||||||
/* Less frequently used atoms, pinned lazily by JS_ResolveStandardClass. */
|
/* Less frequently used atoms, pinned lazily by JS_ResolveStandardClass. */
|
||||||
struct {
|
struct {
|
||||||
JSAtom *InfinityAtom;
|
|
||||||
JSAtom *NaNAtom;
|
|
||||||
JSAtom *XMLListAtom;
|
JSAtom *XMLListAtom;
|
||||||
JSAtom *decodeURIAtom;
|
JSAtom *decodeURIAtom;
|
||||||
JSAtom *decodeURIComponentAtom;
|
JSAtom *decodeURIComponentAtom;
|
||||||
|
|
|
@ -4336,6 +4336,20 @@ mjit::Compiler::jsop_bindgname()
|
||||||
void
|
void
|
||||||
mjit::Compiler::jsop_getgname(uint32 index)
|
mjit::Compiler::jsop_getgname(uint32 index)
|
||||||
{
|
{
|
||||||
|
/* Optimize undefined, NaN and Infinity. */
|
||||||
|
JSAtom *atom = script->getAtom(index);
|
||||||
|
if (atom == cx->runtime->atomState.typeAtoms[JSTYPE_VOID]) {
|
||||||
|
frame.push(UndefinedValue());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (atom == cx->runtime->atomState.NaNAtom) {
|
||||||
|
frame.push(cx->runtime->NaNValue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (atom == cx->runtime->atomState.InfinityAtom) {
|
||||||
|
frame.push(cx->runtime->positiveInfinityValue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
#if defined JS_MONOIC
|
#if defined JS_MONOIC
|
||||||
jsop_bindgname();
|
jsop_bindgname();
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче