summaryrefslogtreecommitdiff
path: root/src/mongo/scripting/mozjs/numberlong.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/scripting/mozjs/numberlong.cpp')
-rw-r--r--src/mongo/scripting/mozjs/numberlong.cpp12
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,