void MongoStatusInfo::fromStatus(JSContext* cx, Status status, JS::MutableHandleValue value) { auto scope = getScope(cx); JS::RootedValue undef(cx); undef.setUndefined(); JS::AutoValueArray<1> args(cx); ValueReader(cx, args[0]).fromStringData(status.reason()); JS::RootedObject error(cx); scope->getProto<ErrorInfo>().newInstance(args, &error); JS::RootedObject thisv(cx); scope->getProto<MongoStatusInfo>().newObjectWithProto(&thisv, error); ObjectWrapper thisvObj(cx, thisv); thisvObj.defineProperty( InternedString::code, undef, JSPROP_ENUMERATE | JSPROP_SHARED, smUtils::wrapConstrainedMethod<Functions::code, false, MongoStatusInfo>); thisvObj.defineProperty( InternedString::reason, undef, JSPROP_ENUMERATE | JSPROP_SHARED, smUtils::wrapConstrainedMethod<Functions::reason, false, MongoStatusInfo>); JS_SetPrivate(thisv, scope->trackedNew<Status>(std::move(status))); value.setObjectOrNull(thisv); }
void OIDInfo::make(JSContext* cx, const OID& oid, JS::MutableHandleValue out) { auto scope = getScope(cx); JS::RootedObject thisv(cx); scope->getProto<OIDInfo>().newObject(&thisv); JS_SetPrivate(thisv, scope->trackedNew<OID>(oid)); out.setObjectOrNull(thisv); }
void ScriptInterface::CallConstructor(JS::HandleValue ctor, JS::HandleValueArray argv, JS::MutableHandleValue out) { JSAutoRequest rq(m->m_cx); if (!ctor.isObject()) { LOGERROR("CallConstructor: ctor is not an object"); out.setNull(); return; } JS::RootedObject ctorObj(m->m_cx, &ctor.toObject()); out.setObjectOrNull(JS_New(m->m_cx, ctorObj, argv)); }
void WebGL2Context::GetInternalformatParameter(JSContext* cx, GLenum target, GLenum internalformat, GLenum pname, JS::MutableHandleValue retval, ErrorResult& rv) { if (IsContextLost()) return; if (target != LOCAL_GL_RENDERBUFFER) { return ErrorInvalidEnumInfo("getInternalfomratParameter: target must be " "RENDERBUFFER. Was:", target); } // GL_INVALID_ENUM is generated if internalformat is not color-, // depth-, or stencil-renderable. // TODO: When format table queries lands. if (pname != LOCAL_GL_SAMPLES) { return ErrorInvalidEnumInfo("getInternalformatParameter: pname must be SAMPLES. " "Was:", pname); } GLint* samples = nullptr; GLint sampleCount = 0; gl->fGetInternalformativ(LOCAL_GL_RENDERBUFFER, internalformat, LOCAL_GL_NUM_SAMPLE_COUNTS, 1, &sampleCount); if (sampleCount > 0) { samples = new GLint[sampleCount]; gl->fGetInternalformativ(LOCAL_GL_RENDERBUFFER, internalformat, LOCAL_GL_SAMPLES, sampleCount, samples); } JSObject* obj = dom::Int32Array::Create(cx, this, sampleCount, samples); if (!obj) { rv = NS_ERROR_OUT_OF_MEMORY; } delete[] samples; retval.setObjectOrNull(obj); }
NS_IMETHODIMP nsScriptErrorWithStack::GetStack(JS::MutableHandleValue aStack) { aStack.setObjectOrNull(mStack); return NS_OK; }
void WebGL2Context::GetActiveUniforms(JSContext* cx, WebGLProgram* program, const dom::Sequence<GLuint>& uniformIndices, GLenum pname, JS::MutableHandleValue retval) { retval.set(JS::NullValue()); if (IsContextLost()) return; if (!ValidateUniformEnum(this, pname, "getActiveUniforms")) return; if (!ValidateObject("getActiveUniforms: program", program)) return; size_t count = uniformIndices.Length(); if (!count) return; GLuint progname = program->mGLName; Vector<GLint> samples; if (!samples.resize(count)) { return; } MakeContextCurrent(); gl->fGetActiveUniformsiv(progname, count, uniformIndices.Elements(), pname, samples.begin()); JS::Rooted<JSObject*> array(cx, JS_NewArrayObject(cx, count)); if (!array) { return; } switch (pname) { case LOCAL_GL_UNIFORM_TYPE: case LOCAL_GL_UNIFORM_SIZE: case LOCAL_GL_UNIFORM_BLOCK_INDEX: case LOCAL_GL_UNIFORM_OFFSET: case LOCAL_GL_UNIFORM_ARRAY_STRIDE: case LOCAL_GL_UNIFORM_MATRIX_STRIDE: for (uint32_t i = 0; i < count; ++i) { JS::RootedValue value(cx); value = JS::Int32Value(samples[i]); if (!JS_DefineElement(cx, array, i, value, JSPROP_ENUMERATE)) { return; } } break; case LOCAL_GL_UNIFORM_IS_ROW_MAJOR: for (uint32_t i = 0; i < count; ++i) { JS::RootedValue value(cx); value = JS::BooleanValue(samples[i]); if (!JS_DefineElement(cx, array, i, value, JSPROP_ENUMERATE)) { return; } } break; default: return; } retval.setObjectOrNull(array); }
bool JSGlobal::JSGetter_global(JSContext *cx, JS::MutableHandleValue vp) { vp.setObjectOrNull(m_Instance); return true; }