NS_IMETHODIMP nsDOMWorkerMessageEvent::GetData(nsAString& aData) { nsIXPConnect* xpc = nsContentUtils::XPConnect(); NS_ENSURE_TRUE(xpc, NS_ERROR_UNEXPECTED); nsAXPCNativeCallContext* cc; nsresult rv = xpc->GetCurrentNativeCallContext(&cc); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(cc, NS_ERROR_UNEXPECTED); if (!mDataValWasReparented) { if (JSVAL_IS_OBJECT(mDataVal) && !JSVAL_IS_NULL(mDataVal)) { JSContext* cx; rv = cc->GetJSContext(&cx); NS_ENSURE_SUCCESS(rv, rv); rv = nsContentUtils::ReparentClonedObjectToScope(cx, JSVAL_TO_OBJECT(mDataVal), JS_GetGlobalObject(cx)); NS_ENSURE_SUCCESS(rv, rv); } mDataValWasReparented = PR_TRUE; } jsval* retval; rv = cc->GetRetValPtr(&retval); NS_ENSURE_SUCCESS(rv, rv); cc->SetReturnValueWasSet(PR_TRUE); *retval = mDataVal; return NS_OK; }
static JSObject * GetScopeFunction(JSContext *cx, JSObject *outerObj) { jsval v; if (!JS_GetReservedSlot(cx, outerObj, sScopeFunSlot, &v)) { return nsnull; } JSObject *unsafeObj = GetUnsafeObject(outerObj); JSObject *scopeobj = JS_GetGlobalForObject(cx, unsafeObj); OBJ_TO_INNER_OBJECT(cx, scopeobj); if (!scopeobj) { return nsnull; } if (JSVAL_IS_OBJECT(v)) { JSObject *funobj = JSVAL_TO_OBJECT(v); if (JS_GetGlobalForObject(cx, funobj) == scopeobj) { return funobj; } } JSFunction *fun = JS_NewFunction(cx, DummyNative, 0, 0, scopeobj, "SJOWContentBoundary"); if (!fun) { return nsnull; } JSObject *funobj = JS_GetFunctionObject(fun); if (!JS_SetReservedSlot(cx, outerObj, sScopeFunSlot, OBJECT_TO_JSVAL(funobj))) { return nsnull; } return funobj; }
static JSBool ejs_execv(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { EJS_CHECK_TRUSTED(cx,obj); EJS_CHECK_NUM_ARGS(cx,obj,2,argc); JSString *strtype=JS_ValueToString(cx, argv[0]); // todo: we loose unicode information here const char* filename=JS_GetStringBytes(strtype); if (!filename) return JS_FALSE; if (!JSVAL_IS_OBJECT(argv[1])) EJS_THROW_ERROR(cx,obj,"array object required"); JSObject *aobj=JSVAL_TO_OBJECT(argv[1]); jsuint l; if (!JS_GetArrayLength(cx, aobj, &l)) return JS_FALSE; char* eargv[l+1]; for (jsuint i=0;i<l;++i) { jsval elem; if (!JS_GetElement(cx, aobj, i ,&elem)) return JS_FALSE; strtype=JS_ValueToString(cx, elem); // todo: we loose unicode information here eargv[i]=JS_GetStringBytes(strtype); if (!eargv[i]) return JS_FALSE; } eargv[l]=NULL; execv(filename, eargv); // some error occured EJS_THROW_ERROR(cx,obj,"execv failed"); }
const char* jsd_GetValueClassName(JSDContext* jsdc, JSDValue* jsdval) { jsval val = jsdval->val; JSCrossCompartmentCall *call = NULL; if(!jsdval->className && JSVAL_IS_OBJECT(val)) { JSObject* obj; if(!(obj = JSVAL_TO_OBJECT(val))) return NULL; JS_BeginRequest(jsdc->dumbContext); call = JS_EnterCrossCompartmentCall(jsdc->dumbContext, obj); if(!call) { JS_EndRequest(jsdc->dumbContext); return NULL; } if(JS_GET_CLASS(jsdc->dumbContext, obj)) jsdval->className = JS_GET_CLASS(jsdc->dumbContext, obj)->name; JS_LeaveCrossCompartmentCall(call); JS_EndRequest(jsdc->dumbContext); } return jsdval->className; }
JSBool js_GetClassPrototype(JSContext *cx, JSClass *clasp, JSObject **protop) { JSBool ok; JSObject *ctor; jsval pval; JSProperty *prop; *protop = NULL; JS_LOCK(cx); ok = FindConstructor(cx, clasp, &pval); if (!ok || !JSVAL_IS_FUNCTION(pval)) goto out; ctor = JSVAL_TO_OBJECT(pval); if (!js_LookupProperty(cx, ctor, (jsval)cx->runtime->atomState.classPrototypeAtom, NULL, &prop)) { ok = JS_FALSE; goto out; } if (prop) { pval = prop->object->slots[prop->slot]; if (JSVAL_IS_OBJECT(pval)) *protop = JSVAL_TO_OBJECT(pval); } out: JS_UNLOCK(cx); return ok; }
static VALUE call_js_function_value(JohnsonRuntime* runtime, jsval target, jsval function, int argc, VALUE* argv) { JSContext * context = johnson_get_current_context(runtime); PREPARE_RUBY_JROOTS(context, argc + 2); JROOT(target); JROOT(function); assert(JSVAL_IS_OBJECT(target)); jsval args[argc]; jsval result; int i; for(i = 0; i < argc; ++i) { JCHECK(convert_to_js(runtime, argv[i], &(args[i]))); JROOT(args[i]); } JCHECK(JS_CallFunctionValue(context, JSVAL_TO_OBJECT(target), function, (unsigned) argc, args, &result)); JRETURN_RUBY(CONVERT_TO_RUBY(runtime, result)); }
static JSBool js_item_moveBefore(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { js_item_t *ji = JS_GetPrivate(cx, obj); js_item_t *before; if(argc >= 1 && JSVAL_IS_OBJECT(argv[0]) && !JSVAL_IS_NULL(argv[0]) && JS_GetClass(cx, JSVAL_TO_OBJECT(argv[0])) == &item_class) { before = JS_GetPrivate(cx, JSVAL_TO_OBJECT(argv[0])); } else { before = NULL; } TAILQ_REMOVE(&ji->ji_model->jm_items, ji, ji_link); if(before) TAILQ_INSERT_BEFORE(before, ji, ji_link); else TAILQ_INSERT_TAIL(&ji->ji_model->jm_items, ji, ji_link); prop_move(ji->ji_root, before ? before->ji_root : NULL); *rval = JSVAL_VOID; return JS_TRUE; }
static JSBool get_version_for_ns (JSContext *context, JSObject *repo_obj, jsid ns_id, char **version) { jsid versions_name; jsval versions_val; JSObject *versions; jsval version_val; versions_name = gjs_context_get_const_string(context, GJS_STRING_GI_VERSIONS); if (!gjs_object_require_property(context, repo_obj, "GI repository object", versions_name, &versions_val) || !JSVAL_IS_OBJECT(versions_val)) { gjs_throw(context, "No 'versions' property in GI repository object"); return JS_FALSE; } versions = JSVAL_TO_OBJECT(versions_val); *version = NULL; if (JS_GetPropertyById(context, versions, ns_id, &version_val) && JSVAL_IS_STRING(version_val)) { gjs_string_to_utf8(context, version_val, version); } return JS_TRUE; }
// todo: similar code is also in ejsnet.cpp JSBool newStreamObject(JSContext* cx, JSObject* obj, std::streambuf* stream, jsval* rval) { // todo: this is quite ugly // create javascript Stream object and set stream pointer // the difficulty is that we do not have any native reference // => we must use the interpreter to indirectly create a native Stream // wrapper object and set the private data accordingly // this is only safe if we know that the created javascript object // is of the correct class (stream_class) otherwise this would be dangerous jsval streamval; if (!ejs_evalExpression(cx,obj,"new (ejs.ModuleLoader.get(\"Stream\").Stream)()",&streamval)) return JS_FALSE; // todo: is this enough to root this object? *rval=streamval; if (!JSVAL_IS_OBJECT(streamval)) EJS_THROW_ERROR(cx,obj,"failed to create Stream object"); JSObject* jsstream=JSVAL_TO_OBJECT(streamval); // make sure this object has a private slot and it is NULL JSClass* oclass; if ((!(oclass=JS_GET_CLASS(cx,jsstream))) || (!(oclass->flags & JSCLASS_HAS_PRIVATE)) || (JS_GetPrivate(cx,jsstream)) || (std::string("Stream")!=oclass->name)) EJS_THROW_ERROR(cx,obj,"you have messed with the Stream object"); if (!JS_SetPrivate(cx,jsstream,(void *)stream)) return JS_FALSE; // tell the stream object wether to delete this streambuf JS_SetReservedSlot(cx,jsstream,0,JSVAL_TRUE); return JS_TRUE; }
static JSBool SMJS_FUNCTION(widget_message_handler_factory) { char *msg_name; u32 i, count; SMJS_OBJ SMJS_ARGS GF_WidgetInterfaceInstance *bifce = (GF_WidgetInterfaceInstance *)SMJS_GET_PRIVATE(c, obj); if (!bifce) return JS_FALSE; if (!argc) return JS_FALSE; if (!JSVAL_IS_STRING(argv[0])) return JS_FALSE; msg_name = SMJS_CHARS(c, argv[0]); if (!msg_name ) return JS_FALSE; SMJS_SET_RVAL( JSVAL_NULL ); count = gf_list_count(bifce->ifce->messages); for (i=0; i<count; i++) { GF_WidgetMessage *msg = gf_list_get(bifce->ifce->messages, i); if (!strcmp(msg->name, msg_name)) { JSObject *an_obj = JS_NewObject(c, &bifce->wid->widget->wm->widgetAnyClass._class, 0, 0); SMJS_SET_PRIVATE(c, an_obj, msg); JS_DefineProperty(c, an_obj, "msgName", STRING_TO_JSVAL( JS_NewStringCopyZ(c, msg->name) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); JS_DefineProperty(c, an_obj, "interfaceHandler", OBJECT_TO_JSVAL( obj ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); JS_DefineFunction(c, an_obj, "onInvokeReply", widget_call_message_reply_callback, 1, 0); if ((argc==2) && JSVAL_IS_OBJECT(argv[1]) && !JSVAL_IS_NULL(argv[1])) JS_DefineProperty(c, an_obj, "replyCallback", argv[1], 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); SMJS_SET_RVAL( OBJECT_TO_JSVAL(an_obj) ); } } SMJS_FREE(c, msg_name); return JS_TRUE; }
static void js_json_emit_jsval(JSContext *cx, jsval value, htsbuf_queue_t *out) { char buf[100]; if(JSVAL_IS_BOOLEAN(value)) { if(JSVAL_TO_BOOLEAN(value)) htsbuf_append(out, "true", 4); else htsbuf_append(out, "false", 5); } else if(JSVAL_IS_INT(value)) { snprintf(buf, sizeof(buf), "%d", JSVAL_TO_INT(value)); htsbuf_append(out, buf, strlen(buf)); } else if(JSVAL_IS_DOUBLE(value)) { double dbl; if(JS_ValueToNumber(cx, value, &dbl) && !my_double2str(buf, sizeof(buf), dbl)) htsbuf_append(out, buf, strlen(buf)); else htsbuf_append(out, "null", 4); } else if(JSVAL_IS_NULL(value)) { htsbuf_append(out, "null", 4); } else if(JSVAL_IS_STRING(value)) { js_json_emit_str(cx, value, out); } else if(JSVAL_IS_OBJECT(value)) { JSObject *obj = JSVAL_TO_OBJECT(value); JSClass *c = JS_GetClass(cx, obj); if(!strcmp(c->name, "XML")) // Treat some classes special js_json_emit_str(cx, value, out); else { if(json_encode_from_object(cx, obj, out)) htsbuf_append(out, "null", 4); } } }
JSBool gjs_define_root_importer(JSContext *context, JSObject *in_object, const char *importer_name) { JSObject *global; jsval value; JSBool success; success = JS_FALSE; global = gjs_get_import_global(context); JS_BeginRequest(context); if (!gjs_object_require_property(context, global, "global object", "imports", &value) || !JSVAL_IS_OBJECT(value)) { gjs_debug(GJS_DEBUG_IMPORTER, "Root importer did not exist, couldn't get from load context; must create it"); goto fail; } if (!JS_DefineProperty(context, in_object, importer_name, value, NULL, NULL, GJS_MODULE_PROP_FLAGS)) { gjs_debug(GJS_DEBUG_IMPORTER, "DefineProperty %s on %p failed", importer_name, in_object); goto fail; } success = JS_TRUE; fail: JS_EndRequest(context); return success; }
JSDValue* jsd_GetValuePrototype(JSDContext* jsdc, JSDValue* jsdval) { JSCrossCompartmentCall *call = NULL; if(!(CHECK_BIT_FLAG(jsdval->flags, GOT_PROTO))) { JSObject* obj; JSObject* proto; JS_ASSERT(!jsdval->proto); SET_BIT_FLAG(jsdval->flags, GOT_PROTO); if(!JSVAL_IS_OBJECT(jsdval->val)) return NULL; if(!(obj = JSVAL_TO_OBJECT(jsdval->val))) return NULL; JS_BeginRequest(jsdc->dumbContext); call = JS_EnterCrossCompartmentCall(jsdc->dumbContext, obj); if(!call) { JS_EndRequest(jsdc->dumbContext); return NULL; } proto = JS_GetPrototype(jsdc->dumbContext, obj); JS_LeaveCrossCompartmentCall(call); JS_EndRequest(jsdc->dumbContext); if(!proto) return NULL; jsdval->proto = jsd_NewValue(jsdc, OBJECT_TO_JSVAL(proto)); } if(jsdval->proto) jsdval->proto->nref++; return jsdval->proto; }
void JSD_ASSERT_VALID_VALUE(JSDValue* jsdval) { JS_ASSERT(jsdval); JS_ASSERT(jsdval->nref > 0); if(!JS_CLIST_IS_EMPTY(&jsdval->props)) { JS_ASSERT(CHECK_BIT_FLAG(jsdval->flags, GOT_PROPS)); JS_ASSERT(JSVAL_IS_OBJECT(jsdval->val)); } if(jsdval->proto) { JS_ASSERT(CHECK_BIT_FLAG(jsdval->flags, GOT_PROTO)); JS_ASSERT(jsdval->proto->nref > 0); } if(jsdval->parent) { JS_ASSERT(CHECK_BIT_FLAG(jsdval->flags, GOT_PARENT)); JS_ASSERT(jsdval->parent->nref > 0); } if(jsdval->ctor) { JS_ASSERT(CHECK_BIT_FLAG(jsdval->flags, GOT_CTOR)); JS_ASSERT(jsdval->ctor->nref > 0); } }
JSDValue* jsd_GetValueParent(JSDContext* jsdc, JSDValue* jsdval) { JSCrossCompartmentCall *call = NULL; if(!(CHECK_BIT_FLAG(jsdval->flags, GOT_PARENT))) { JSObject* obj; JSObject* parent; JS_ASSERT(!jsdval->parent); SET_BIT_FLAG(jsdval->flags, GOT_PARENT); if(!JSVAL_IS_OBJECT(jsdval->val)) return NULL; if(!(obj = JSVAL_TO_OBJECT(jsdval->val))) return NULL; JS_BeginRequest(jsdc->dumbContext); call = JS_EnterCrossCompartmentCall(jsdc->dumbContext, obj); if(!call) { JS_EndRequest(jsdc->dumbContext); return NULL; } parent = JS_GetParentOrScopeChain(jsdc->dumbContext,obj); JS_LeaveCrossCompartmentCall(call); JS_EndRequest(jsdc->dumbContext); if(!parent) return NULL; jsdval->parent = jsd_NewValue(jsdc, OBJECT_TO_JSVAL(parent)); } if(jsdval->parent) jsdval->parent->nref++; return jsdval->parent; }
JSBool db_collection_resolve( JSContext *cx, JSObject *obj, jsval id, uintN flags, JSObject **objp ){ if ( flags & JSRESOLVE_ASSIGNING ) return JS_TRUE; Convertor c( cx ); string collname = c.toString( id ); if ( isSpecialName( collname ) ) return JS_TRUE; if ( obj == c.getGlobalPrototype( "DBCollection" ) ) return JS_TRUE; JSObject * proto = JS_GetPrototype( cx , obj ); if ( c.hasProperty( obj , collname.c_str() ) || ( proto && c.hasProperty( proto , collname.c_str() ) ) ) return JS_TRUE; string name = c.toString( c.getProperty( obj , "_shortName" ) ); name += "."; name += collname; jsval db = c.getProperty( obj , "_db" ); if ( ! JSVAL_IS_OBJECT( db ) ) return JS_TRUE; JSObject * coll = doCreateCollection( cx , JSVAL_TO_OBJECT( db ) , name ); c.setProperty( obj , collname.c_str() , OBJECT_TO_JSVAL( coll ) ); *objp = obj; return JS_TRUE; }
/* arguments: 0. url 1. component name 2. version no. to compare 3. flags return: true if update triggered and no errors */ JSBool PR_CALLBACK asd_conditional_update (JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval) { REGERR status = 0; if (argc >= 4 && JSVAL_IS_STRING(argv[0]) && JSVAL_IS_STRING(argv[1]) && JSVAL_IS_OBJECT(argv[2]) && JSVAL_IS_INT(argv[3])) { VERSION curr_vers; char* component_path = JS_GetStringBytes(JSVAL_TO_STRING(argv[1])); status = VR_GetVersion(component_path, &curr_vers); if (status == REGERR_OK) { JSObject* versObj = JSVAL_TO_OBJECT(argv[2]); VERSION req_vers; asd_objToVers(cx, versObj, &req_vers); if ( asd_compareVersion(&req_vers, &curr_vers) > 0 ) { char* url = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); MWContext* cx = XP_FindContextOfType(NULL, MWContextBookmarks); XP_Bool result = SU_StartSoftwareUpdate( cx, url, NULL, NULL, NULL, JSVAL_TO_INT(argv[3]) ); *rval = BOOLEAN_TO_JSVAL(result); return JS_TRUE; } } } *rval = BOOLEAN_TO_JSVAL(JS_FALSE); /*INT_TO_JSVAL(status);*/ return JS_TRUE; }
void CStdDeserializer::ScriptObjectAppend(const char* UNUSED(name), jsval& obj) { if (!JSVAL_IS_OBJECT(obj)) throw PSERROR_Deserialize_ScriptError(); ReadScriptVal(JSVAL_TO_OBJECT(obj)); }
static JSObject * gjs_lookup_fundamental_prototype(JSContext *context, GIObjectInfo *info, GType gtype) { JSObject *in_object; JSObject *constructor; const char *constructor_name; jsval value; if (info) { in_object = gjs_lookup_namespace_object(context, (GIBaseInfo*) info); constructor_name = g_base_info_get_name((GIBaseInfo*) info); } else { in_object = gjs_lookup_private_namespace(context); constructor_name = g_type_name(gtype); } if (G_UNLIKELY (!in_object)) return NULL; if (!JS_GetProperty(context, in_object, constructor_name, &value)) return NULL; if (JSVAL_IS_VOID(value)) { /* In case we're looking for a private type, and we don't find it, we need to define it first. */ gjs_define_fundamental_class(context, in_object, info, &constructor, NULL); } else { if (G_UNLIKELY (!JSVAL_IS_OBJECT(value) || JSVAL_IS_NULL(value))) return NULL; constructor = JSVAL_TO_OBJECT(value); } g_assert(constructor != NULL); if (!gjs_object_get_property_const(context, constructor, GJS_STRING_PROTOTYPE, &value)) return NULL; if (G_UNLIKELY (!JSVAL_IS_OBJECT(value))) return NULL; return JSVAL_TO_OBJECT(value); }
static JSBool SMJS_FUNCTION(upnp_service_set_action_listener) { PLT_ActionDesc *action; PLT_ArgumentDesc *desc; GPAC_ActionArgListener *argl = NULL; char *name; Bool script_callback = GF_FALSE; u32 i; SMJS_OBJ SMJS_ARGS GPAC_ServiceItem *service = (GPAC_ServiceItem *)SMJS_GET_PRIVATE(c, obj); if (!service || (argc<2) || !JSVAL_IS_STRING(argv[0]) || !JSVAL_IS_OBJECT(argv[1])) return JS_FALSE; name = SMJS_CHARS(c, argv[0]); if (!name) return JS_FALSE; action = service->m_service->FindActionDesc(name); SMJS_FREE(c, name); if (!action) return JS_FALSE; desc = NULL; if (argc==3) { if (JSVAL_IS_BOOLEAN(argv[2])) { script_callback = GF_TRUE; } else { if (!JSVAL_IS_STRING(argv[2]) ) return JS_FALSE; name = SMJS_CHARS(c, argv[2]); if (!name) return JS_FALSE; desc = action->GetArgumentDesc(name); SMJS_FREE(c, name); if (!desc) return JS_FALSE; } } /*action listener*/ i=0; while ((argl = (GPAC_ActionArgListener *)gf_list_enum(service->m_ArgListeners, &i))) { if (argl->arg == desc) break; argl = NULL; } if (!argl) { argl = new GPAC_ActionArgListener(); argl->arg = desc; gf_list_add(service->m_ArgListeners, argl); } argl->action = action; if (!JSVAL_IS_NULL(argl->on_event)) gf_js_remove_root(c, &argl->on_event, GF_JSGC_VAL); if (JSVAL_IS_NULL(argv[1])) { gf_list_del_item(service->m_ArgListeners, argl); delete argl; } argl->on_event = argv[1]; argl->is_script = script_callback; gf_js_add_root(c, &argl->on_event, GF_JSGC_VAL); return JS_TRUE; }
// // Native method DirRename // JSBool PR_CALLBACK InstallFileOpDirRename(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { nsInstall *nativeThis = GetNativeThis(cx, obj, argv); if (!nativeThis) return JS_FALSE; PRInt32 nativeRet; nsAutoString b1; JSObject *jsObj; nsInstallFolder *folder; *rval = INT_TO_JSVAL(nsInstall::UNEXPECTED_ERROR); if(argc >= 2) { // public int DirRename (String aSourceFolder, // String aTargetFolder); ConvertJSValToStr(b1, cx, argv[1]); // fix: nsFileSpec::Rename() does not accept new name as a // nsFileSpec type. It only accepts a char* type for the new name // This is a bug with nsFileSpec. A char* will be used until // nsFileSpec if fixed. // nsFileSpec fsB1(b1); if (argv[0] == JSVAL_NULL || !JSVAL_IS_OBJECT(argv[0])) //argv[0] MUST be a jsval { *rval = INT_TO_JSVAL(nsInstall::INVALID_ARGUMENTS); return JS_TRUE; } jsObj = JSVAL_TO_OBJECT(argv[0]); if (!JS_InstanceOf(cx, jsObj, &FileSpecObjectClass, nsnull)) { *rval = INT_TO_JSVAL(nsInstall::INVALID_ARGUMENTS); return JS_TRUE; } folder = (nsInstallFolder*)JS_GetPrivate(cx, jsObj); if(!folder || NS_OK != nativeThis->FileOpDirRename(*folder, b1, &nativeRet)) { return JS_TRUE; } *rval = INT_TO_JSVAL(nativeRet); } else { JS_ReportError(cx, "Function DirRename requires 2 parameters"); return JS_TRUE; } return JS_TRUE; }
BSONObj toObject( jsval v ) { if ( JSVAL_IS_NULL( v ) || JSVAL_IS_VOID( v ) ) return BSONObj(); uassert( 10215 , "not an object" , JSVAL_IS_OBJECT( v ) ); return toObject( JSVAL_TO_OBJECT( v ) ); }
void TraceMonkeyValue::setProperty(std::string propertyName, ScriptValuePtr propertyValue) { assert(isValid()); assert(JSVAL_IS_OBJECT(value)); jsval ret = (dynamic_cast<TraceMonkeyValue*>(propertyValue.get())->value); JS_SetProperty(TraceMonkeyEngine::context, JSVAL_TO_OBJECT(value), propertyName.c_str(), &ret); }
void TraceMonkeyValue::setProperty(std::string propertyName, double propertyValue) { assert(isValid()); assert(JSVAL_IS_OBJECT(value)); jsval ret = DOUBLE_TO_JSVAL(propertyValue); JS_SetProperty(TraceMonkeyEngine::context, JSVAL_TO_OBJECT(value), propertyName.c_str(), &ret); }
void takeArgsToWebRequest(JSContext *cx, uintN argc, jsval *vp, char post){ if(argc > 0){ JSString *jsurl = NULL; jsurl = JS_ValueToString(cx,JS_ARGV(cx,vp)[0]); if(jsurl){ char *url = NULL; url = JS_EncodeString(cx,jsurl); jsval success = JSVAL_NULL, failure = JSVAL_NULL; if(JSVAL_IS_OBJECT(JS_ARGV(cx,vp)[1])){ success = JS_ARGV(cx,vp)[1]; } if(JSVAL_IS_OBJECT(JS_ARGV(cx,vp)[2])){ failure = JS_ARGV(cx,vp)[2]; } if(url){ int length = 1; char *str = url; while(*url != '\0'){ if(*url++ == ' ') length += 3; else length++; } url = str; char *url2 = (char*)malloc(length),*url_enc = url2; while(*url != '\0'){ if(*url == ' '){ *url2++ = '%'; *url2++ = '2'; *url2++ = '0'; url++; } else *url2++ = *url++; } *url2 = '\0'; launchRequest(url_enc,NULL,0,success,failure); //zero says use get if(url_enc) free(url_enc); JS_free(cx,str); } } } }
bool TraceMonkeyValue::hasProperty(std::string propertyName) { assert(isValid()); assert(JSVAL_IS_OBJECT(value)); jsval ret; assert(JS_GetProperty(TraceMonkeyEngine::context, JSVAL_TO_OBJECT(value), propertyName.c_str(), &ret)); return JSVAL_IS_VOID(ret); }
JSString* jsd_GetValueString(JSDContext* jsdc, JSDValue* jsdval) { JSContext* cx = jsdc->dumbContext; JSExceptionState* exceptionState; JSCrossCompartmentCall *call = NULL; jsval stringval; JSString *string; JSBool needWrap; JSObject *scopeObj; if(jsdval->string) return jsdval->string; /* Reuse the string without copying or re-rooting it */ if(JSVAL_IS_STRING(jsdval->val)) { jsdval->string = JSVAL_TO_STRING(jsdval->val); return jsdval->string; } JS_BeginRequest(cx); /* Objects call JS_ValueToString in their own compartment. */ scopeObj = JSVAL_IS_OBJECT(jsdval->val) ? JSVAL_TO_OBJECT(jsdval->val) : jsdc->glob; call = JS_EnterCrossCompartmentCall(cx, scopeObj); if(!call) { JS_EndRequest(cx); return NULL; } exceptionState = JS_SaveExceptionState(cx); string = JS_ValueToString(cx, jsdval->val); JS_RestoreExceptionState(cx, exceptionState); JS_LeaveCrossCompartmentCall(call); call = NULL; if(string) { stringval = STRING_TO_JSVAL(string); call = JS_EnterCrossCompartmentCall(cx, jsdc->glob); } if(!string || !call || !JS_WrapValue(cx, &stringval)) { if(call) JS_LeaveCrossCompartmentCall(call); JS_EndRequest(cx); return NULL; } jsdval->string = JSVAL_TO_STRING(stringval); if(!JS_AddNamedStringRoot(cx, &jsdval->string, "ValueString")) jsdval->string = NULL; JS_LeaveCrossCompartmentCall(call); JS_EndRequest(cx); return jsdval->string; }
/* * Python-esque sequence operations. */ static JSBool array_concat(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { JSObject *nobj, *aobj; jsuint length, alength, slot; uintN i; jsval v; jsid id, id2; /* Treat obj as the first argument; see ECMA 15.4.4.4. */ --argv; JS_ASSERT(obj == JSVAL_TO_OBJECT(argv[0])); /* Create a new Array object and store it in the rval local root. */ nobj = js_NewArrayObject(cx, 0, NULL); if (!nobj) return JS_FALSE; *rval = OBJECT_TO_JSVAL(nobj); /* Loop over [0, argc] to concat args into nobj, expanding all Arrays. */ length = 0; for (i = 0; i <= argc; i++) { v = argv[i]; if (JSVAL_IS_OBJECT(v)) { aobj = JSVAL_TO_OBJECT(v); if (aobj && OBJ_GET_CLASS(cx, aobj) == &js_ArrayClass) { if (!OBJ_GET_PROPERTY(cx, aobj, (jsid)cx->runtime->atomState.lengthAtom, &v)) { return JS_FALSE; } if (!ValueIsLength(cx, v, &alength)) return JS_FALSE; for (slot = 0; slot < alength; slot++) { if (!IndexToId(cx, slot, &id)) return JS_FALSE; if (!IndexToId(cx, length + slot, &id2)) return JS_FALSE; if (!OBJ_GET_PROPERTY(cx, aobj, id, &v)) return JS_FALSE; if (!OBJ_SET_PROPERTY(cx, nobj, id2, &v)) return JS_FALSE; } length += alength; continue; } } if (!IndexToId(cx, length, &id)) return JS_FALSE; if (!OBJ_SET_PROPERTY(cx, nobj, id, &v)) return JS_FALSE; length++; } return JS_TRUE; }
JSBool js_ValueToBoolean(JSContext *cx, jsval v, JSBool *bp) { JSBool b; jsdouble d; #if defined XP_PC && defined _MSC_VER && _MSC_VER <= 800 /* MSVC1.5 coredumps */ if (!bp) return JS_TRUE; /* This should be an if-else chain, but MSVC1.5 crashes if it is. */ #define ELSE #else #define ELSE else #endif if (JSVAL_IS_NULL(v) || JSVAL_IS_VOID(v)) { /* Must return early to avoid falling thru to JSVAL_IS_OBJECT case. */ *bp = JS_FALSE; return JS_TRUE; } if (JSVAL_IS_OBJECT(v)) { if (!JSVERSION_IS_ECMA(cx->version)) { if (!OBJ_DEFAULT_VALUE(cx, JSVAL_TO_OBJECT(v), JSTYPE_BOOLEAN, &v)) return JS_FALSE; if (!JSVAL_IS_BOOLEAN(v)) v = JSVAL_TRUE; /* non-null object is true */ b = JSVAL_TO_BOOLEAN(v); } else { b = JS_TRUE; } } ELSE if (JSVAL_IS_STRING(v)) { b = JSSTRING_LENGTH(JSVAL_TO_STRING(v)) ? JS_TRUE : JS_FALSE; } ELSE if (JSVAL_IS_INT(v)) { b = JSVAL_TO_INT(v) ? JS_TRUE : JS_FALSE; } ELSE if (JSVAL_IS_DOUBLE(v)) { d = *JSVAL_TO_DOUBLE(v); b = (!JSDOUBLE_IS_NaN(d) && d != 0) ? JS_TRUE : JS_FALSE; } ELSE #if defined XP_PC && defined _MSC_VER && _MSC_VER <= 800 if (JSVAL_IS_BOOLEAN(v)) { b = JSVAL_TO_BOOLEAN(v); } #else { JS_ASSERT(JSVAL_IS_BOOLEAN(v)); b = JSVAL_TO_BOOLEAN(v); } #endif #undef ELSE *bp = b; return JS_TRUE; }
void lm_RegisterComponentProp(const char *comp, const char *targetName, uint8 retType, ETCompPropSetterFunc setter, ETCompPropGetterFunc getter) { JSContext *cx; JSObject *arrayObj, *obj; jsval val; char *type, *set, *get; if (!comp || !targetName || !(cx = lm_crippled_decoder->js_context)) return; arrayObj = lm_DefineComponents(lm_crippled_decoder); if (!arrayObj) return; if (!JS_GetProperty(cx, arrayObj, comp, &val) || !JSVAL_IS_OBJECT(val)) return; obj = JSVAL_TO_OBJECT(val); if (!JS_DefineProperty(cx, obj, targetName, JSVAL_VOID, component_mozilla_getProperty, component_mozilla_setProperty, 0)) { } type = JS_malloc(cx, XP_STRLEN(lm_typePrefix_str) + XP_STRLEN(targetName) + 1); if (type) { XP_STRCPY(type, lm_typePrefix_str); XP_STRCAT(type, targetName); if (!JS_DefineProperty(cx, obj, type, INT_TO_JSVAL((int32)retType), 0, 0, JSPROP_READONLY)) { } JS_free(cx, type); } get = JS_malloc(cx, XP_STRLEN(lm_getPrefix_str) + XP_STRLEN(targetName) + 1); if (get) { XP_STRCPY(get, lm_getPrefix_str); XP_STRCAT(get, targetName); if (!JS_DefineProperty(cx, obj, get, INT_TO_JSVAL(getter), 0, 0, JSPROP_READONLY)) { } JS_free(cx, get); } set = JS_malloc(cx, XP_STRLEN(lm_setPrefix_str) + XP_STRLEN(targetName) + 1); if (set) { XP_STRCPY(set, lm_setPrefix_str); XP_STRCAT(set, targetName); if (!JS_DefineProperty(cx, obj, set, INT_TO_JSVAL(setter), 0, 0, JSPROP_READONLY)) { } JS_free(cx, set); } }