diff --git a/js/src/jsweakmap.cpp b/js/src/jsweakmap.cpp index dcacf2b76e9..841e0a35d00 100644 --- a/js/src/jsweakmap.cpp +++ b/js/src/jsweakmap.cpp @@ -211,13 +211,7 @@ WeakMap_has_impl(JSContext *cx, CallArgs args) { MOZ_ASSERT(IsWeakMap(args.thisv())); - if (args.length() < 1) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED, - "WeakMap.has", "0", "s"); - return false; - } - - if (!args[0].isObject()) { + if (!args.get(0).isObject()) { args.rval().setBoolean(false); return true; } @@ -267,13 +261,7 @@ WeakMap_get_impl(JSContext *cx, CallArgs args) { MOZ_ASSERT(IsWeakMap(args.thisv())); - if (args.length() < 1) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED, - "WeakMap.get", "0", "s"); - return false; - } - - if (!args[0].isObject()) { + if (!args.get(0).isObject()) { args.rval().setUndefined(); return true; } @@ -302,13 +290,7 @@ WeakMap_delete_impl(JSContext *cx, CallArgs args) { MOZ_ASSERT(IsWeakMap(args.thisv())); - if (args.length() < 1) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED, - "WeakMap.delete", "0", "s"); - return false; - } - - if (!args[0].isObject()) { + if (!args.get(0).isObject()) { args.rval().setBoolean(false); return true; } @@ -401,23 +383,16 @@ WeakMap_set_impl(JSContext *cx, CallArgs args) { MOZ_ASSERT(IsWeakMap(args.thisv())); - if (args.length() < 1) { - JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED, - "WeakMap.set", "0", "s"); - return false; - } - - if (!args[0].isObject()) { + if (!args.get(0).isObject()) { JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_NOT_NONNULL_OBJECT); return false; } RootedObject key(cx, &args[0].toObject()); - RootedValue value(cx, (args.length() > 1) ? args[1] : UndefinedValue()); Rooted thisObj(cx, &args.thisv().toObject()); Rooted map(cx, &thisObj->as()); - if (!SetWeakMapEntryInternal(cx, map, key, value)) + if (!SetWeakMapEntryInternal(cx, map, key, args.get(1))) return false; args.rval().set(args.thisv()); return true; diff --git a/js/src/tests/js1_8_5/extensions/weakmap.js b/js/src/tests/js1_8_5/extensions/weakmap.js index e526c628b16..f763d52bda3 100644 --- a/js/src/tests/js1_8_5/extensions/weakmap.js +++ b/js/src/tests/js1_8_5/extensions/weakmap.js @@ -83,7 +83,8 @@ function test() var map = new WeakMap(); check(function() !map.has(key)); - map.set(key, 42); + check(function() map.delete(key) == false); + check(function() map.set(key, 42) === map); check(function() map.get(key) == 42); check(function() typeof map.get({}) == "undefined"); check(function() map.get({}, "foo") == "foo"); @@ -97,14 +98,21 @@ function test() check(function() typeof map.get(key) == "undefined"); check(function() !map.has(key)); + check(function() map.delete(key) == false); var value = { }; - map.set(new Object(), value); + check(function() map.set(new Object(), value) === map); gc(); gc(); gc(); check(function() map.has("non-object key") == false); + check(function() map.has() == false); check(function() map.get("non-object key") == undefined); + check(function() map.get() == undefined); check(function() map.delete("non-object key") == false); + check(function() map.delete() == false); + + check(function() map.set(key) === map); + check(function() map.get(key) == undefined); checkThrows(function() map.set("non-object key", value));