dfg-put-by-val-direct-with-edge-numbers.js   [plain text]


// Test that a object accepts DFG PutByValueDirect operation with edge numbers.

function lookupWithKey(key) {
    var object = {
        [key]: 42
    };
    return object[key];
}
noInline(lookupWithKey);

for (var i = 0; i < 10000; ++i) {
    [
        // integers
        -0x80000001,  // out of int32_t
        -0x80000000,  // int32_t min
        -1,           // negative
        0,            // zero
        1,            // positive
        0x7fffffff,   // int32_t max
        0x80000000,   // out of int32_t
        0xfffffffd,   // less than array max in JSObject
        0xfffffffe,   // array max in JSObject
        0xffffffff,   // uint32_t max, not array index
        0x100000000,  // out of uint32_t

        // stringified integers
        (-0x80000001).toString(),  // out of int32_t
        (-0x80000000).toString(),  // int32_t min
        (-1).toString(),           // negative
        (0).toString(),            // zero
        (1).toString(),            // positive
        (0x7fffffff).toString(),   // int32_t max
        (0x80000000).toString(),   // out of int32_t
        (0xfffffffd).toString(),   // less than array max in JSObject
        (0xfffffffe).toString(),   // array max in JSObject
        (0xffffffff).toString(),   // (uint32_t max).toString()
        (0x100000000).toString(),  // out of uint32_t

        // doubles
        Number.MIN_VALUE,
        Number.MAX_VALUE,
        Number.MIN_SAFE_INTEGER,
        Number.MAX_SAFE_INTEGER,
        Number.POSITIVE_INFINITY,
        Number.NEGATIVE_INFINITY,
        Number.NaN,
        Number.EPSILON,
        +0.0,
        -0.0,
        0.1,
        -0.1,
        4.2,
        -4.2,
        0x80000000 + 0.5,   // out of int32_t, double

        // stringified doules
        (Number.MIN_VALUE).toString(),
        (Number.MAX_VALUE).toString(),
        (Number.MIN_SAFE_INTEGER).toString(),
        (Number.MAX_SAFE_INTEGER).toString(),
        (Number.POSITIVE_INFINITY).toString(),
        (Number.NEGATIVE_INFINITY).toString(),
        "NaN",
        (Number.EPSILON).toString(),
        "+0.0",
        "-0.0",
        "0.1",
        "-0.1",
        "4.2",
        "-4.2",
        (0x80000000 + 0.5).toString()
    ].forEach(function (key) {
        var value = lookupWithKey(key);
        if (value !== 42)
            throw new Error('bad value: ' + value);
    });
}

function lookupWithKey2(key) {
    var object = {
        [key]: 42
    };
    return object[key];
}
noInline(lookupWithKey2);

var toStringThrowsError = {
    toString: function () {
        throw new Error('ng');
    }
};

for (var i = 0; i < 10000; ++i) {
    var error = null;
    try {
        lookupWithKey2(toStringThrowsError);
    } catch (e) {
        error = e;
    }
    if (!error)
        throw new Error('not thrown');
    if (String(error) !== 'Error: ng')
        throw new Error('bad error: ' + String(error));
}