diff options
Diffstat (limited to 'src/mongo/scripting/mozjs/numberlong.cpp')
-rw-r--r-- | src/mongo/scripting/mozjs/numberlong.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/mongo/scripting/mozjs/numberlong.cpp b/src/mongo/scripting/mozjs/numberlong.cpp index 7bc9ebe10ff..1f763e47c20 100644 --- a/src/mongo/scripting/mozjs/numberlong.cpp +++ b/src/mongo/scripting/mozjs/numberlong.cpp @@ -43,9 +43,10 @@ namespace mongo { namespace mozjs { -const JSFunctionSpec NumberLongInfo::methods[5] = { +const JSFunctionSpec NumberLongInfo::methods[6] = { MONGO_ATTACH_JS_CONSTRAINED_METHOD(toNumber, NumberLongInfo), MONGO_ATTACH_JS_CONSTRAINED_METHOD(toString, NumberLongInfo), + MONGO_ATTACH_JS_CONSTRAINED_METHOD(toJSON, NumberLongInfo), MONGO_ATTACH_JS_CONSTRAINED_METHOD(valueOf, NumberLongInfo), MONGO_ATTACH_JS_CONSTRAINED_METHOD(compare, NumberLongInfo), JS_FS_END}; @@ -53,7 +54,7 @@ const JSFunctionSpec NumberLongInfo::methods[5] = { const char* const NumberLongInfo::className = "NumberLong"; void NumberLongInfo::finalize(JSFreeOp* fop, JSObject* obj) { - auto numLong = static_cast<int*>(JS_GetPrivate(obj)); + auto numLong = static_cast<int64_t*>(JS_GetPrivate(obj)); if (numLong) delete numLong; @@ -94,6 +95,13 @@ void NumberLongInfo::Functions::toString::call(JSContext* cx, JS::CallArgs args) ValueReader(cx, args.rval()).fromStringData(ss.operator std::string()); } +void NumberLongInfo::Functions::toJSON::call(JSContext* cx, JS::CallArgs args) { + int64_t val = NumberLongInfo::ToNumberLong(cx, args.thisv()); + + ValueReader(cx, args.rval()) + .fromBSON(BSON("$numberLong" << std::to_string(val)), nullptr, false); +} + void NumberLongInfo::Functions::compare::call(JSContext* cx, JS::CallArgs args) { uassert(ErrorCodes::BadValue, "NumberLong.compare() needs 1 argument", args.length() == 1); uassert(ErrorCodes::BadValue, |