# HG changeset patch # User Saurabh Anand # Date 1354565985 -19800 # Node ID 0904a74e403604df38d849b401b4977990b0244e # Parent d9020fa719c5b6dec93dfc981fe79340d8535d4b Bug 814562 - Implement clear() on WeakMaps diff --git a/js/src/jsweakmap.cpp b/js/src/jsweakmap.cpp --- a/js/src/jsweakmap.cpp +++ b/js/src/jsweakmap.cpp @@ -167,16 +167,36 @@ WeakMap_has_impl(JSContext *cx, CallArgs JSBool WeakMap_has(JSContext *cx, unsigned argc, Value *vp) { CallArgs args = CallArgsFromVp(argc, vp); return CallNonGenericMethod(cx, args); } JS_ALWAYS_INLINE bool +WeakMap_clear_impl(JSContext *cx, CallArgs args) +{ + JS_ASSERT(IsWeakMap(args.thisv())); + + if (ObjectValueMap *map = GetObjectMap(&args.thisv().toObject())) { + map->clear(); + } + + args.rval().setUndefined(); + return true; +} + +JSBool +WeakMap_clear(JSContext *cx, unsigned argc, Value *vp) +{ + CallArgs args = CallArgsFromVp(argc, vp); + return CallNonGenericMethod(cx, args); +} + +JS_ALWAYS_INLINE bool WeakMap_get_impl(JSContext *cx, CallArgs args) { JS_ASSERT(IsWeakMap(args.thisv())); if (args.length() < 1) { JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_MORE_ARGS_NEEDED, "WeakMap.get", "0", "s"); return false; @@ -366,16 +386,17 @@ Class js::WeakMapClass = { NULL, /* call */ NULL, /* construct */ NULL, /* xdrObject */ WeakMap_mark }; static JSFunctionSpec weak_map_methods[] = { JS_FN("has", WeakMap_has, 1, 0), + JS_FN("clear", WeakMap_clear, 0, 0), JS_FN("get", WeakMap_get, 2, 0), JS_FN("delete", WeakMap_delete, 1, 0), JS_FN("set", WeakMap_set, 2, 0), JS_FS_END }; JSObject * js_InitWeakMapClass(JSContext *cx, HandleObject obj)