StringData ObjectWrapper::Key::toStringData(JSContext* cx, JSStringWrapper* jsstr) { if (_type == Type::Field) { return _field; } if (_type == Type::Index) { *jsstr = JSStringWrapper(_idx); return jsstr->toStringData(); } JS::RootedId rid(cx); if (_type == Type::Id) { rid.set(_id); } else { InternedStringId id(cx, _internedString); rid.set(id); } if (JSID_IS_INT(rid)) { *jsstr = JSStringWrapper(JSID_TO_INT(rid)); return jsstr->toStringData(); } if (JSID_IS_STRING(rid)) { *jsstr = JSStringWrapper(cx, JSID_TO_STRING(rid)); return jsstr->toStringData(); } uasserted(ErrorCodes::BadValue, "Couldn't convert key to String"); }
StringData IdWrapper::toStringData(JSStringWrapper* jsstr) const { if (JSID_IS_STRING(_value)) { *jsstr = JSStringWrapper(_context, JSID_TO_STRING(_value)); } else if (JSID_IS_INT(_value)) { *jsstr = JSStringWrapper(JSID_TO_INT(_value)); } else { throwCurrentJSException(_context, ErrorCodes::TypeMismatch, "Cannot toString() non-string and non-integer jsid"); } return jsstr->toStringData(); }
void MongoStatusInfo::construct(JSContext* cx, JS::CallArgs args) { auto code = args.get(0).toInt32(); auto reason = JSStringWrapper(cx, args.get(1).toString()).toString(); JS::RootedValue out(cx); fromStatus(cx, Status(ErrorCodes::Error(code), std::move(reason)), &out); args.rval().set(out); }
StringData ValueWriter::toStringData(JSStringWrapper* jsstr) { *jsstr = JSStringWrapper(_context, JS::ToString(_context, _value)); return jsstr->toStringData(); }