--- a/caps/idl/nsIScriptSecurityManager.idl
+++ b/caps/idl/nsIScriptSecurityManager.idl
@@ -46,17 +46,17 @@ interface nsIScriptSecurityManager : nsI
{
///////////////// Security Checks //////////////////
/**
* Checks whether the running script is allowed to access aProperty.
*/
[noscript] void checkPropertyAccess(in JSContextPtr aJSContext,
in JSObjectPtr aJSObject,
in string aClassName,
- in jsval aProperty,
+ in jsid aProperty,
in PRUint32 aAction);
/**
* Check that the script currently running in context "cx" can load "uri".
*
* Will return error code NS_ERROR_DOM_BAD_URI if the load request
* should be denied.
*
--- a/caps/include/nsScriptSecurityManager.h
+++ b/caps/include/nsScriptSecurityManager.h
@@ -170,38 +170,38 @@ union SecurityLevel
#define SECURITY_ACCESS_LEVEL_FLAG(_sl) \
((_sl.level == 0) || \
(_sl.level & SCRIPT_SECURITY_ACCESS_IS_SET_BIT))
struct PropertyPolicy : public PLDHashEntryHdr
{
- jsval key; // property name as jsval
+ JSString *key; // interned string
SecurityLevel mGet;
SecurityLevel mSet;
};
static PRBool
InitPropertyPolicyEntry(PLDHashTable *table,
PLDHashEntryHdr *entry,
const void *key)
{
PropertyPolicy* pp = (PropertyPolicy*)entry;
- pp->key = (jsval)key;
+ pp->key = (JSString *)key;
pp->mGet.level = SCRIPT_SECURITY_UNDEFINED_ACCESS;
pp->mSet.level = SCRIPT_SECURITY_UNDEFINED_ACCESS;
return PR_TRUE;
}
static void
ClearPropertyPolicyEntry(PLDHashTable *table, PLDHashEntryHdr *entry)
{
PropertyPolicy* pp = (PropertyPolicy*)entry;
- pp->key = JSVAL_VOID;
+ pp->key = NULL;
}
// Class Policy
#define NO_POLICY_FOR_CLASS (ClassPolicy*)1
struct ClassPolicy : public PLDHashEntryHdr
{
char* key;
@@ -421,17 +421,17 @@ public:
private:
// GetScriptSecurityManager is the only call that can make one
nsScriptSecurityManager();
virtual ~nsScriptSecurityManager();
static JSBool
CheckObjectAccess(JSContext *cx, JSObject *obj,
- jsval id, JSAccessMode mode,
+ jsid id, JSAccessMode mode,
jsval *vp);
// Decides, based on CSP, whether or not eval() and stuff can be executed.
static JSBool
ContentSecurityPolicyPermitsJSAction(JSContext *cx);
// Returns null if a principal cannot be found; generally callers
// should error out at that point.
@@ -448,27 +448,27 @@ private:
doGetSubjectPrincipal(nsresult* rv);
nsresult
CheckPropertyAccessImpl(PRUint32 aAction,
nsAXPCNativeCallContext* aCallContext,
JSContext* cx, JSObject* aJSObject,
nsISupports* aObj, nsIURI* aTargetURI,
nsIClassInfo* aClassInfo,
- const char* aClassName, jsval aProperty,
+ const char* aClassName, jsid aProperty,
void** aCachedClassPolicy);
nsresult
CheckSameOriginDOMProp(nsIPrincipal* aSubject,
nsIPrincipal* aObject,
PRUint32 aAction);
nsresult
LookupPolicy(nsIPrincipal* principal,
- ClassInfoData& aClassData, jsval aProperty,
+ ClassInfoData& aClassData, jsid aProperty,
PRUint32 aAction,
ClassPolicy** aCachedClassPolicy,
SecurityLevel* result);
nsresult
CreateCodebasePrincipal(nsIURI* aURI, nsIPrincipal** result);
// This is just like the API method, but it doesn't check that the subject
@@ -607,17 +607,17 @@ private:
ContextPrincipal *mNext;
JSContext *mCx;
JSStackFrame *mFp;
nsCOMPtr<nsIPrincipal> mPrincipal;
};
// JS strings we need to clean up on shutdown
- static jsval sEnabledID;
+ static jsid sEnabledID;
inline void
ScriptSecurityPrefChanged();
static const char sJSEnabledPrefName[];
static const char sFileOriginPolicyPrefName[];
nsObjectHashtable* mOriginToPolicyMap;
--- a/caps/src/nsScriptSecurityManager.cpp
+++ b/caps/src/nsScriptSecurityManager.cpp
@@ -111,19 +111,25 @@ PRBool nsScriptSecurityManager::sStrictF
static JSEqualityOp sXPCWrappedNativeEqualityOps;
///////////////////////////
// Convenience Functions //
///////////////////////////
// Result of this function should not be freed.
static inline const PRUnichar *
-JSValIDToString(JSContext *cx, const jsval idval)
+IDToString(JSContext *cx, jsid id)
{
+ if (JSID_IS_STRING(id))
+ return reinterpret_cast<PRUnichar*>(JS_GetStringChars(JSID_TO_STRING(id)));
+
JSAutoRequest ar(cx);
+ jsval idval;
+ if (!JS_IdToValue(cx, id, &idval))
+ return nsnull;
JSString *str = JS_ValueToString(cx, idval);
if(!str)
return nsnull;
return reinterpret_cast<PRUnichar*>(JS_GetStringChars(str));
}
class nsAutoInPrincipalDomainOriginSetter {
public:
@@ -560,17 +566,17 @@ nsScriptSecurityManager::ContentSecurity
}
return evalOK;
}
JSBool
nsScriptSecurityManager::CheckObjectAccess(JSContext *cx, JSObject *obj,
- jsval id, JSAccessMode mode,
+ jsid id, JSAccessMode mode,
jsval *vp)
{
// Get the security manager
nsScriptSecurityManager *ssm =
nsScriptSecurityManager::GetScriptSecurityManager();
NS_ASSERTION(ssm, "Failed to get security manager service");
if (!ssm)
@@ -599,17 +605,17 @@ nsScriptSecurityManager::CheckObjectAcce
return JS_TRUE;
}
NS_IMETHODIMP
nsScriptSecurityManager::CheckPropertyAccess(JSContext* cx,
JSObject* aJSObject,
const char* aClassName,
- jsval aProperty,
+ jsid aProperty,
PRUint32 aAction)
{
return CheckPropertyAccessImpl(aAction, nsnull, cx, aJSObject,
nsnull, nsnull, nsnull,
aClassName, aProperty, nsnull);
}
NS_IMETHODIMP
@@ -679,17 +685,17 @@ nsScriptSecurityManager::CheckSameOrigin
}
nsresult
nsScriptSecurityManager::CheckPropertyAccessImpl(PRUint32 aAction,
nsAXPCNativeCallContext* aCallContext,
JSContext* cx, JSObject* aJSObject,
nsISupports* aObj, nsIURI* aTargetURI,
nsIClassInfo* aClassInfo,
- const char* aClassName, jsval aProperty,
+ const char* aClassName, jsid aProperty,
void** aCachedClassPolicy)
{
nsresult rv;
nsIPrincipal* subjectPrincipal = GetSubjectPrincipal(cx, &rv);
if (NS_FAILED(rv))
return rv;
if (!subjectPrincipal || subjectPrincipal == mSystemPrincipal)
@@ -698,17 +704,17 @@ nsScriptSecurityManager::CheckPropertyAc
nsCOMPtr<nsIPrincipal> objectPrincipal;
// Hold the class info data here so we don't have to go back to virtual
// methods all the time
ClassInfoData classInfoData(aClassInfo, aClassName);
#ifdef DEBUG_CAPS_CheckPropertyAccessImpl
nsCAutoString propertyName;
- propertyName.AssignWithConversion((PRUnichar*)JSValIDToString(cx, aProperty));
+ propertyName.AssignWithConversion((PRUnichar*)IDToString(cx, aProperty));
printf("### CanAccess(%s.%s, %i) ", classInfoData.GetName(),
propertyName.get(), aAction);
#endif
//-- Look up the security policy for this class and subject domain
SecurityLevel securityLevel;
rv = LookupPolicy(subjectPrincipal, classInfoData, aProperty, aAction,
(ClassPolicy**)aCachedClassPolicy, &securityLevel);
@@ -820,27 +826,27 @@ nsScriptSecurityManager::CheckPropertyAc
if (NS_SUCCEEDED(rv) && interfaceInfo)
rv = interfaceInfo->GetIIDShared(&objIID);
if (NS_SUCCEEDED(rv) && objIID)
{
switch (aAction)
{
case nsIXPCSecurityManager::ACCESS_GET_PROPERTY:
checkedComponent->CanGetProperty(objIID,
- JSValIDToString(cx, aProperty),
+ IDToString(cx, aProperty),
getter_Copies(objectSecurityLevel));
break;
case nsIXPCSecurityManager::ACCESS_SET_PROPERTY:
checkedComponent->CanSetProperty(objIID,
- JSValIDToString(cx, aProperty),
+ IDToString(cx, aProperty),
getter_Copies(objectSecurityLevel));
break;
case nsIXPCSecurityManager::ACCESS_CALL_METHOD:
checkedComponent->CanCallMethod(objIID,
- JSValIDToString(cx, aProperty),
+ IDToString(cx, aProperty),
getter_Copies(objectSecurityLevel));
}
}
}
rv = CheckXPCPermissions(cx, aObj, aJSObject, subjectPrincipal,
objectSecurityLevel);
#ifdef DEBUG_CAPS_CheckPropertyAccessImpl
if(NS_SUCCEEDED(rv))
@@ -901,17 +907,17 @@ nsScriptSecurityManager::CheckPropertyAc
NS_ConvertUTF8toUTF16 objectOriginUnicode(objectOrigin);
NS_ConvertUTF8toUTF16 objectDomainUnicode(objectDomain);
nsXPIDLString errorMsg;
const PRUnichar *formatStrings[] =
{
subjectOriginUnicode.get(),
className.get(),
- JSValIDToString(cx, aProperty),
+ IDToString(cx, aProperty),
objectOriginUnicode.get(),
subjectDomainUnicode.get(),
objectDomainUnicode.get()
};
PRUint32 length = NS_ARRAY_LENGTH(formatStrings);
// XXXbz Our localization system is stupid and can't handle not showing
@@ -1070,17 +1076,17 @@ nsScriptSecurityManager::CheckSameOrigin
** Access tests failed, so now report error.
*/
return NS_ERROR_DOM_PROP_ACCESS_DENIED;
}
nsresult
nsScriptSecurityManager::LookupPolicy(nsIPrincipal* aPrincipal,
ClassInfoData& aClassData,
- jsval aProperty,
+ jsid aProperty,
PRUint32 aAction,
ClassPolicy** aCachedClassPolicy,
SecurityLevel* result)
{
nsresult rv;
result->level = SCRIPT_SECURITY_UNDEFINED_ACCESS;
DomainPolicy* dpolicy = nsnull;
@@ -1181,39 +1187,48 @@ nsScriptSecurityManager::LookupPolicy(ns
if (PL_DHASH_ENTRY_IS_FREE(cpolicy))
cpolicy = NO_POLICY_FOR_CLASS;
if ((dpolicy == mDefaultPolicy) && aCachedClassPolicy)
*aCachedClassPolicy = cpolicy;
}
+ NS_ASSERTION(JSID_IS_INT(aProperty) || JSID_IS_OBJECT(aProperty) ||
+ JSID_IS_STRING(aProperty), "Property must be a valid id");
+
+ // Only atomized strings are stored in the policies' hash tables.
+ if (!JSID_IS_STRING(aProperty))
+ return NS_OK;
+
+ JSString *propertyKey = JSID_TO_STRING(aProperty);
+
// We look for a PropertyPolicy in the following places:
// 1) The ClassPolicy for our class we got from our DomainPolicy
// 2) The mWildcardPolicy of our DomainPolicy
// 3) The ClassPolicy for our class we got from mDefaultPolicy
// 4) The mWildcardPolicy of our mDefaultPolicy
PropertyPolicy* ppolicy = nsnull;
if (cpolicy != NO_POLICY_FOR_CLASS)
{
ppolicy = static_cast<PropertyPolicy*>
(PL_DHashTableOperate(cpolicy->mPolicy,
- (void*)aProperty,
+ propertyKey,
PL_DHASH_LOOKUP));
}
// If there is no class policy for this property, and we have a wildcard
// policy, try that.
if (dpolicy->mWildcardPolicy &&
(!ppolicy || PL_DHASH_ENTRY_IS_FREE(ppolicy)))
{
ppolicy =
static_cast<PropertyPolicy*>
(PL_DHashTableOperate(dpolicy->mWildcardPolicy->mPolicy,
- (void*)aProperty,
+ propertyKey,
PL_DHASH_LOOKUP));
}
// If dpolicy is not the defauly policy and there's no class or wildcard
// policy for this property, check the default policy for this class and
// the default wildcard policy
if (dpolicy != mDefaultPolicy &&
(!ppolicy || PL_DHASH_ENTRY_IS_FREE(ppolicy)))
@@ -1223,27 +1238,27 @@ nsScriptSecurityManager::LookupPolicy(ns
aClassData.GetName(),
PL_DHASH_LOOKUP));
if (PL_DHASH_ENTRY_IS_BUSY(cpolicy))
{
ppolicy =
static_cast<PropertyPolicy*>
(PL_DHashTableOperate(cpolicy->mPolicy,
- (void*)aProperty,
+ propertyKey,
PL_DHASH_LOOKUP));
}
if ((!ppolicy || PL_DHASH_ENTRY_IS_FREE(ppolicy)) &&
mDefaultPolicy->mWildcardPolicy)
{
ppolicy =
static_cast<PropertyPolicy*>
(PL_DHashTableOperate(mDefaultPolicy->mWildcardPolicy->mPolicy,
- (void*)aProperty,
+ propertyKey,
PL_DHASH_LOOKUP));
}
}
if (!ppolicy || PL_DHASH_ENTRY_IS_FREE(ppolicy))
return NS_OK;
// Get the correct security level from the property policy
@@ -2363,17 +2378,17 @@ nsScriptSecurityManager::doGetObjectPrin
{
NS_ASSERTION(aObj, "Bad call to doGetObjectPrincipal()!");
nsIPrincipal* result = nsnull;
#ifdef DEBUG
JSObject* origObj = aObj;
#endif
- const JSClass *jsClass = aObj->getClass();
+ js::Class *jsClass = aObj->getClass();
// A common case seen in this code is that we enter this function
// with aObj being a Function object, whose parent is a Call
// object. Neither of those have object principals, so we can skip
// those objects here before we enter the below loop. That way we
// avoid wasting time checking properties of their classes etc in
// the loop.
@@ -3036,21 +3051,21 @@ nsScriptSecurityManager::CheckComponentP
#ifdef DEBUG_CAPS_CheckComponentPermissions
printf("### CheckComponentPermissions(ClassID.%s) ",cid.get());
#endif
// Look up the policy for this class.
// while this isn't a property we'll treat it as such, using ACCESS_CALL_METHOD
JSAutoRequest ar(cx);
- jsval cidVal = STRING_TO_JSVAL(::JS_InternString(cx, cid.get()));
+ jsid cidId = INTERNED_STRING_TO_JSID(::JS_InternString(cx, cid.get()));
ClassInfoData nameData(nsnull, "ClassID");
SecurityLevel securityLevel;
- rv = LookupPolicy(subjectPrincipal, nameData, cidVal,
+ rv = LookupPolicy(subjectPrincipal, nameData, cidId,
nsIXPCSecurityManager::ACCESS_CALL_METHOD,
nsnull, &securityLevel);
if (NS_FAILED(rv))
return rv;
// If there's no policy stored, use the "security.classID.allowByDefault" pref
if (securityLevel.level == SCRIPT_SECURITY_UNDEFINED_ACCESS)
securityLevel.level = mXPCDefaultGrantAll ? SCRIPT_SECURITY_ALL_ACCESS :
@@ -3143,17 +3158,17 @@ nsScriptSecurityManager::CanGetService(J
NS_IMETHODIMP
nsScriptSecurityManager::CanAccess(PRUint32 aAction,
nsAXPCNativeCallContext* aCallContext,
JSContext* cx,
JSObject* aJSObject,
nsISupports* aObj,
nsIClassInfo* aClassInfo,
- jsval aPropertyName,
+ jsid aPropertyName,
void** aPolicy)
{
return CheckPropertyAccessImpl(aAction, aCallContext, cx,
aJSObject, aObj, nsnull, aClassInfo,
nsnull, aPropertyName, aPolicy);
}
nsresult
@@ -3343,18 +3358,18 @@ nsresult nsScriptSecurityManager::Init()
NS_ADDREF(sXPConnect = xpconnect);
NS_ADDREF(sJSContextStack = xpconnect);
JSContext* cx = GetSafeJSContext();
if (!cx) return NS_ERROR_FAILURE; // this can happen of xpt loading fails
::JS_BeginRequest(cx);
- if (sEnabledID == JSVAL_VOID)
- sEnabledID = STRING_TO_JSVAL(::JS_InternString(cx, "enabled"));
+ if (sEnabledID == JSID_VOID)
+ sEnabledID = INTERNED_STRING_TO_JSID(::JS_InternString(cx, "enabled"));
::JS_EndRequest(cx);
InitPrefs();
nsresult rv = CallGetService(NS_IOSERVICE_CONTRACTID, &sIOService);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIStringBundleService> bundleService =
@@ -3397,17 +3412,17 @@ nsresult nsScriptSecurityManager::Init()
NS_ASSERTION(!oldcallbacks, "Someone else set security callbacks!");
sXPConnect->GetXPCWrappedNativeJSClassInfo(&sXPCWrappedNativeEqualityOps);
return NS_OK;
}
static nsScriptSecurityManager *gScriptSecMan = nsnull;
-jsval nsScriptSecurityManager::sEnabledID = JSVAL_VOID;
+jsid nsScriptSecurityManager::sEnabledID = JSID_VOID;
nsScriptSecurityManager::~nsScriptSecurityManager(void)
{
NS_ASSERTION(!mContextPrincipals, "Leaking mContextPrincipals");
delete mOriginToPolicyMap;
if(mDefaultPolicy)
mDefaultPolicy->Drop();
delete mCapabilities;
@@ -3416,17 +3431,17 @@ nsScriptSecurityManager::~nsScriptSecuri
void
nsScriptSecurityManager::Shutdown()
{
if (sRuntime) {
JS_SetRuntimeSecurityCallbacks(sRuntime, NULL);
sRuntime = nsnull;
}
- sEnabledID = JSVAL_VOID;
+ sEnabledID = JSID_VOID;
NS_IF_RELEASE(sIOService);
NS_IF_RELEASE(sXPConnect);
NS_IF_RELEASE(sJSContextStack);
NS_IF_RELEASE(sStrBundle);
}
nsScriptSecurityManager *
@@ -3746,21 +3761,19 @@ nsScriptSecurityManager::InitDomainPolic
JSAutoRequest ar(cx);
JSString* propertyKey = ::JS_InternString(cx, start);
if (!propertyKey)
return NS_ERROR_OUT_OF_MEMORY;
// Store this property in the class policy
- const void* ppkey =
- reinterpret_cast<const void*>(STRING_TO_JSVAL(propertyKey));
PropertyPolicy* ppolicy =
static_cast<PropertyPolicy*>
- (PL_DHashTableOperate(cpolicy->mPolicy, ppkey,
+ (PL_DHashTableOperate(cpolicy->mPolicy, propertyKey,
PL_DHASH_ADD));
if (!ppolicy)
break;
if (end) // The pref specifies an access mode
{
start = end + 1;
if (PL_strcasecmp(start, "set") == 0)
@@ -4018,17 +4031,17 @@ static PLDHashOperator
PrintPropertyPolicy(PLDHashTable *table, PLDHashEntryHdr *entry,
PRUint32 number, void *arg)
{
PropertyPolicy* pp = (PropertyPolicy*)entry;
nsCAutoString prop(" ");
JSContext* cx = (JSContext*)arg;
prop.AppendInt((PRUint32)pp->key);
prop += ' ';
- prop.AppendWithConversion((PRUnichar*)JSValIDToString(cx, pp->key));
+ prop.AppendWithConversion((PRUnichar*)JS_GetStringChars(pp->key));
prop += ": Get=";
if (SECURITY_ACCESS_LEVEL_FLAG(pp->mGet))
prop.AppendInt(pp->mGet.level);
else
prop += pp->mGet.capability;
prop += " Set=";
if (SECURITY_ACCESS_LEVEL_FLAG(pp->mSet))
--- a/content/base/public/nsContentUtils.h
+++ b/content/base/public/nsContentUtils.h
@@ -1798,17 +1798,17 @@ public:
mPtr(aPtr), mRootType(RootType_Object)
{
MOZILLA_GUARD_OBJECT_NOTIFIER_INIT;
mResult = *aResult = AddJSGCRoot(aPtr, RootType_Object, "nsAutoGCRoot");
}
~nsAutoGCRoot() {
if (NS_SUCCEEDED(mResult)) {
- RemoveJSGCRoot(mPtr, mRootType);
+ RemoveJSGCRoot((jsval *)mPtr, mRootType);
}
}
static void Shutdown();
private:
enum RootType { RootType_JSVal, RootType_Object };
static nsresult AddJSGCRoot(void *aPtr, RootType aRootType, const char* aName);
--- a/content/base/src/nsContentUtils.cpp
+++ b/content/base/src/nsContentUtils.cpp
@@ -5614,25 +5614,16 @@ CloneSimpleValues(JSContext* cx,
{
*wasCloned = PR_TRUE;
// No cloning necessary for these non-GC'd jsvals.
if (!JSVAL_IS_GCTHING(val) || JSVAL_IS_NULL(val)) {
return SetPropertyOnValueOrObject(cx, val, rval, robj, rid);
}
- // Clone doubles.
- if (JSVAL_IS_DOUBLE(val)) {
- jsval newVal;
- if (!JS_NewDoubleValue(cx, *JSVAL_TO_DOUBLE(val), &newVal)) {
- return NS_ERROR_OUT_OF_MEMORY;
- }
- return SetPropertyOnValueOrObject(cx, newVal, rval, robj, rid);
- }
-
// We'll use immutable strings to prevent copying if we can.
if (JSVAL_IS_STRING(val)) {
if (!JS_MakeStringImmutable(cx, JSVAL_TO_STRING(val))) {
return NS_ERROR_FAILURE;
}
return SetPropertyOnValueOrObject(cx, val, rval, robj, rid);
}
--- a/content/base/src/nsFrameMessageManager.cpp
+++ b/content/base/src/nsFrameMessageManager.cpp
@@ -417,21 +417,21 @@ nsFrameMessageManager::ReceiveMessage(ns
thisValue = OBJECT_TO_JSVAL(object);
}
jsval rval = JSVAL_VOID;
nsAutoGCRoot resultGCRoot4(&rval, &rv);
NS_ENSURE_SUCCESS(rv, rv);
js::AutoValueRooter argv(ctx);
- argv.setObject(param);
+ argv.set(OBJECT_TO_JSVAL(param));
JSObject* thisObject = JSVAL_TO_OBJECT(thisValue);
JS_CallFunctionValue(ctx, thisObject,
- funval, 1, argv.addr(), &rval);
+ funval, 1, argv.jsval_addr(), &rval);
if (aJSONRetVal) {
nsString json;
if (JS_TryJSON(ctx, &rval) &&
JS_Stringify(ctx, &rval, nsnull, JSVAL_NULL,
JSONCreator, &json)) {
aJSONRetVal->AppendElement(json);
}
}
--- a/content/canvas/src/CustomQS_Canvas2D.h
+++ b/content/canvas/src/CustomQS_Canvas2D.h
@@ -39,24 +39,24 @@
#include "nsDOMError.h"
#include "nsIDOMCanvasRenderingContext2D.h"
typedef nsresult (NS_STDCALL nsIDOMCanvasRenderingContext2D::*CanvasStyleSetterType)(const nsAString &, nsISupports *);
typedef nsresult (NS_STDCALL nsIDOMCanvasRenderingContext2D::*CanvasStyleGetterType)(nsAString &, nsISupports **, PRInt32 *);
static JSBool
-Canvas2D_SetStyleHelper(JSContext *cx, JSObject *obj, jsval id, jsval *vp,
+Canvas2D_SetStyleHelper(JSContext *cx, JSObject *obj, jsid id, jsval *vp,
CanvasStyleSetterType setfunc)
{
XPC_QS_ASSERT_CONTEXT_OK(cx);
nsIDOMCanvasRenderingContext2D *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
nsresult rv;
if (JSVAL_IS_STRING(*vp)) {
xpc_qsDOMString arg0(cx, *vp, vp,
xpc_qsDOMString::eDefaultNullBehavior,
xpc_qsDOMString::eDefaultUndefinedBehavior);
@@ -64,34 +64,34 @@ Canvas2D_SetStyleHelper(JSContext *cx, J
return JS_FALSE;
rv = (self->*setfunc)(arg0, nsnull);
} else {
nsISupports *arg0;
xpc_qsSelfRef arg0ref;
rv = xpc_qsUnwrapArg<nsISupports>(cx, *vp, &arg0, &arg0ref.ptr, vp);
if (NS_FAILED(rv)) {
- xpc_qsThrowBadSetterValue(cx, rv, JSVAL_TO_OBJECT(*tvr.addr()), id);
+ xpc_qsThrowBadSetterValue(cx, rv, JSVAL_TO_OBJECT(*tvr.jsval_addr()), id);
return JS_FALSE;
}
nsString voidStr;
voidStr.SetIsVoid(PR_TRUE);
rv = (self->*setfunc)(voidStr, arg0);
}
if (NS_FAILED(rv))
- return xpc_qsThrowGetterSetterFailed(cx, rv, JSVAL_TO_OBJECT(*tvr.addr()), id);
+ return xpc_qsThrowGetterSetterFailed(cx, rv, JSVAL_TO_OBJECT(*tvr.jsval_addr()), id);
return JS_TRUE;
}
static JSBool
-Canvas2D_GetStyleHelper(JSContext *cx, JSObject *obj, jsval id, jsval *vp,
+Canvas2D_GetStyleHelper(JSContext *cx, JSObject *obj, jsid id, jsval *vp,
CanvasStyleGetterType getfunc)
{
XPC_QS_ASSERT_CONTEXT_OK(cx);
nsIDOMCanvasRenderingContext2D *self;
xpc_qsSelfRef selfref;
XPCLazyCallContext lccx(JS_CALLER, cx, obj);
if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, vp, &lccx))
return JS_FALSE;
@@ -117,35 +117,35 @@ Canvas2D_GetStyleHelper(JSContext *cx, J
&NS_GET_IID(nsIDOMCanvasGradient), &interfaces[k_nsIDOMCanvasGradient], vp);
default:
return xpc_qsThrowGetterSetterFailed(cx, NS_ERROR_FAILURE, JSVAL_TO_OBJECT(*vp), id);
}
}
static JSBool
-nsIDOMCanvasRenderingContext2D_SetStrokeStyle(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+nsIDOMCanvasRenderingContext2D_SetStrokeStyle(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{
return Canvas2D_SetStyleHelper(cx, obj, id, vp, &nsIDOMCanvasRenderingContext2D::SetStrokeStyle_multi);
}
static JSBool
-nsIDOMCanvasRenderingContext2D_GetStrokeStyle(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+nsIDOMCanvasRenderingContext2D_GetStrokeStyle(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{
return Canvas2D_GetStyleHelper(cx, obj, id, vp, &nsIDOMCanvasRenderingContext2D::GetStrokeStyle_multi);
}
static JSBool
-nsIDOMCanvasRenderingContext2D_SetFillStyle(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+nsIDOMCanvasRenderingContext2D_SetFillStyle(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{
return Canvas2D_SetStyleHelper(cx, obj, id, vp, &nsIDOMCanvasRenderingContext2D::SetFillStyle_multi);
}
static JSBool
-nsIDOMCanvasRenderingContext2D_GetFillStyle(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+nsIDOMCanvasRenderingContext2D_GetFillStyle(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{
return Canvas2D_GetStyleHelper(cx, obj, id, vp, &nsIDOMCanvasRenderingContext2D::GetFillStyle_multi);
}
static JSBool
nsIDOMCanvasRenderingContext2D_CreateImageData(JSContext *cx, uintN argc, jsval *vp)
{
XPC_QS_ASSERT_CONTEXT_OK(cx);
@@ -174,24 +174,24 @@ nsIDOMCanvasRenderingContext2D_CreateIma
return xpc_qsThrow(cx, NS_ERROR_DOM_INDEX_SIZE_ERR);
uint32 len = len0 * 4;
if (len / 4 != len0)
return xpc_qsThrow(cx, NS_ERROR_DOM_INDEX_SIZE_ERR);
// create the fast typed array; it's initialized to 0 by default
JSObject *darray = js_CreateTypedArray(cx, js::TypedArray::TYPE_UINT8_CLAMPED, len);
- js::AutoValueRooter rd(cx, darray);
+ js::AutoObjectRooter rd(cx, darray);
if (!darray)
return JS_FALSE;
// Do JS_NewObject after CreateTypedArray, so that gc will get
// triggered here if necessary
JSObject *result = JS_NewObject(cx, NULL, NULL, NULL);
- js::AutoValueRooter rr(cx, result);
+ js::AutoObjectRooter rr(cx, result);
if (!result)
return JS_FALSE;
if (!JS_DefineProperty(cx, result, "width", INT_TO_JSVAL(w), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) ||
!JS_DefineProperty(cx, result, "height", INT_TO_JSVAL(h), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) ||
!JS_DefineProperty(cx, result, "data", OBJECT_TO_JSVAL(darray), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT))
return JS_FALSE;
@@ -208,17 +208,17 @@ nsIDOMCanvasRenderingContext2D_GetImageD
if (!obj)
return JS_FALSE;
nsresult rv;
nsIDOMCanvasRenderingContext2D *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc < 4)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
int32 x, y;
@@ -241,31 +241,31 @@ nsIDOMCanvasRenderingContext2D_GetImageD
return xpc_qsThrow(cx, NS_ERROR_DOM_INDEX_SIZE_ERR);
uint32 len = len0 * 4;
if (len / 4 != len0)
return xpc_qsThrow(cx, NS_ERROR_DOM_INDEX_SIZE_ERR);
// create the fast typed array
JSObject *darray = js_CreateTypedArray(cx, js::TypedArray::TYPE_UINT8_CLAMPED, len);
- js::AutoValueRooter rd(cx, darray);
+ js::AutoObjectRooter rd(cx, darray);
if (!darray)
return JS_FALSE;
js::TypedArray *tdest = js::TypedArray::fromJSObject(darray);
// make the call
rv = self->GetImageData_explicit(x, y, w, h, (PRUint8*) tdest->data, tdest->byteLength);
if (NS_FAILED(rv))
return xpc_qsThrowMethodFailed(cx, rv, vp);
// Do JS_NewObject after CreateTypedArray, so that gc will get
// triggered here if necessary
JSObject *result = JS_NewObject(cx, NULL, NULL, NULL);
- js::AutoValueRooter rr(cx, result);
+ js::AutoObjectRooter rr(cx, result);
if (!result)
return JS_FALSE;
if (!JS_DefineProperty(cx, result, "width", INT_TO_JSVAL(w), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) ||
!JS_DefineProperty(cx, result, "height", INT_TO_JSVAL(h), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) ||
!JS_DefineProperty(cx, result, "data", OBJECT_TO_JSVAL(darray), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT))
return JS_FALSE;
@@ -282,17 +282,17 @@ nsIDOMCanvasRenderingContext2D_PutImageD
if (!obj)
return JS_FALSE;
nsresult rv;
nsIDOMCanvasRenderingContext2D *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc < 3)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
if (JSVAL_IS_PRIMITIVE(argv[0]))
@@ -305,49 +305,49 @@ nsIDOMCanvasRenderingContext2D_PutImageD
return JS_FALSE;
int32 wi, hi;
JSObject *darray;
// grab width, height, and the dense array from the dataObject
js::AutoValueRooter tv(cx);
- if (!JS_GetProperty(cx, dataObject, "width", tv.addr()) ||
- !JS_ValueToECMAInt32(cx, tv.value(), &wi))
+ if (!JS_GetProperty(cx, dataObject, "width", tv.jsval_addr()) ||
+ !JS_ValueToECMAInt32(cx, tv.jsval_value(), &wi))
return JS_FALSE;
- if (!JS_GetProperty(cx, dataObject, "height", tv.addr()) ||
- !JS_ValueToECMAInt32(cx, tv.value(), &hi))
+ if (!JS_GetProperty(cx, dataObject, "height", tv.jsval_addr()) ||
+ !JS_ValueToECMAInt32(cx, tv.jsval_value(), &hi))
return JS_FALSE;
if (wi <= 0 || hi <= 0)
return xpc_qsThrow(cx, NS_ERROR_DOM_INDEX_SIZE_ERR);
uint32 w = (uint32) wi;
uint32 h = (uint32) hi;
- if (!JS_GetProperty(cx, dataObject, "data", tv.addr()) ||
- JSVAL_IS_PRIMITIVE(tv.value()))
+ if (!JS_GetProperty(cx, dataObject, "data", tv.jsval_addr()) ||
+ JSVAL_IS_PRIMITIVE(tv.jsval_value()))
return JS_FALSE;
- darray = JSVAL_TO_OBJECT(tv.value());
+ darray = JSVAL_TO_OBJECT(tv.jsval_value());
js::AutoValueRooter tsrc_tvr(cx);
js::TypedArray *tsrc = NULL;
if (darray->getClass() == &js::TypedArray::fastClasses[js::TypedArray::TYPE_UINT8] ||
darray->getClass() == &js::TypedArray::fastClasses[js::TypedArray::TYPE_UINT8_CLAMPED])
{
tsrc = js::TypedArray::fromJSObject(darray);
} else if (JS_IsArrayObject(cx, darray) || js_IsTypedArray(darray)) {
// ugh, this isn't a uint8 typed array, someone made their own object; convert it to a typed array
JSObject *nobj = js_CreateTypedArrayWithArray(cx, js::TypedArray::TYPE_UINT8, darray);
if (!nobj)
return JS_FALSE;
- *tsrc_tvr.addr() = OBJECT_TO_JSVAL(nobj);
+ *tsrc_tvr.jsval_addr() = OBJECT_TO_JSVAL(nobj);
tsrc = js::TypedArray::fromJSObject(nobj);
} else {
// yeah, no.
return xpc_qsThrow(cx, NS_ERROR_DOM_TYPE_MISMATCH_ERR);
}
// make the call
rv = self->PutImageData_explicit(x, y, w, h, (PRUint8*) tsrc->data, tsrc->byteLength);
--- a/content/canvas/src/CustomQS_WebGL.h
+++ b/content/canvas/src/CustomQS_WebGL.h
@@ -87,17 +87,17 @@ nsICanvasRenderingContextWebGL_BufferDat
XPC_QS_ASSERT_CONTEXT_OK(cx);
JSObject *obj = JS_THIS_OBJECT(cx, vp);
if (!obj)
return JS_FALSE;
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc < 3)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
int32 target;
@@ -153,17 +153,17 @@ nsICanvasRenderingContextWebGL_BufferSub
XPC_QS_ASSERT_CONTEXT_OK(cx);
JSObject *obj = JS_THIS_OBJECT(cx, vp);
if (!obj)
return JS_FALSE;
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc < 3)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
int32 target;
@@ -221,17 +221,17 @@ nsICanvasRenderingContextWebGL_ReadPixel
if (!obj)
return JS_FALSE;
nsresult rv;
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
// XXX we currently allow passing only 6 args to support the API. Eventually drop that.
if (argc < 6)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
@@ -318,17 +318,17 @@ nsICanvasRenderingContextWebGL_TexImage2
if (!obj)
return JS_FALSE;
nsresult rv;
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
// XXX we currently allow passing only 3 args to support the API. Eventually drop that.
// if (argc < 6 || argc == 7 || argc == 8)
if (argc < 3)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
@@ -442,17 +442,17 @@ nsICanvasRenderingContextWebGL_TexSubIma
if (!obj)
return JS_FALSE;
nsresult rv;
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc < 7 || argc == 8)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
// arguments common to all cases
@@ -543,17 +543,17 @@ helper_nsICanvasRenderingContextWebGL_Un
if (!obj)
return JS_FALSE;
nsresult rv;
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc < 2)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
nsIWebGLUniformLocation *location;
@@ -579,17 +579,17 @@ helper_nsICanvasRenderingContextWebGL_Un
wa = js::TypedArray::fromJSObject(arg1);
} else if (JS_IsArrayObject(cx, arg1)) {
JSObject *nobj = js_CreateTypedArrayWithArray(cx, js::TypedArray::TYPE_INT32, arg1);
if (!nobj) {
// XXX this will likely return a strange error message if it goes wrong
return JS_FALSE;
}
- *obj_tvr.addr() = OBJECT_TO_JSVAL(nobj);
+ *obj_tvr.jsval_addr() = OBJECT_TO_JSVAL(nobj);
wa = js::TypedArray::fromJSObject(nobj);
} else {
xpc_qsThrowBadArg(cx, NS_ERROR_FAILURE, vp, 1);
return JS_FALSE;
}
if (nElements == 1) {
rv = self->Uniform1iv_array(location, wa);
@@ -617,17 +617,17 @@ helper_nsICanvasRenderingContextWebGL_Un
if (!obj)
return JS_FALSE;
nsresult rv;
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc < 2)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
nsIWebGLUniformLocation *location;
@@ -653,17 +653,17 @@ helper_nsICanvasRenderingContextWebGL_Un
wa = js::TypedArray::fromJSObject(arg1);
} else if (JS_IsArrayObject(cx, arg1)) {
JSObject *nobj = js_CreateTypedArrayWithArray(cx, js::TypedArray::TYPE_FLOAT32, arg1);
if (!nobj) {
// XXX this will likely return a strange error message if it goes wrong
return JS_FALSE;
}
- *obj_tvr.addr() = OBJECT_TO_JSVAL(nobj);
+ *obj_tvr.jsval_addr() = OBJECT_TO_JSVAL(nobj);
wa = js::TypedArray::fromJSObject(nobj);
} else {
xpc_qsThrowBadArg(cx, NS_ERROR_FAILURE, vp, 1);
return JS_FALSE;
}
if (nElements == 1) {
rv = self->Uniform1fv_array(location, wa);
@@ -691,17 +691,17 @@ helper_nsICanvasRenderingContextWebGL_Un
if (!obj)
return JS_FALSE;
nsresult rv;
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc < 3)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
nsIWebGLUniformLocation *location;
@@ -731,17 +731,17 @@ helper_nsICanvasRenderingContextWebGL_Un
wa = js::TypedArray::fromJSObject(arg2);
} else if (JS_IsArrayObject(cx, arg2)) {
JSObject *nobj = js_CreateTypedArrayWithArray(cx, js::TypedArray::TYPE_FLOAT32, arg2);
if (!nobj) {
// XXX this will likely return a strange error message if it goes wrong
return JS_FALSE;
}
- *obj_tvr.addr() = OBJECT_TO_JSVAL(nobj);
+ *obj_tvr.jsval_addr() = OBJECT_TO_JSVAL(nobj);
wa = js::TypedArray::fromJSObject(nobj);
} else {
xpc_qsThrowBadArg(cx, NS_ERROR_FAILURE, vp, 2);
return JS_FALSE;
}
if (nElements == 2) {
rv = self->UniformMatrix2fv_array(location, transpose ? 1 : 0, wa);
@@ -766,17 +766,17 @@ helper_nsICanvasRenderingContextWebGL_Ve
if (!obj)
return JS_FALSE;
nsresult rv;
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
js::AutoValueRooter tvr(cx);
- if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.addr(), nsnull))
+ if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, tvr.jsval_addr(), nsnull))
return JS_FALSE;
if (argc < 2)
return xpc_qsThrow(cx, NS_ERROR_XPC_NOT_ENOUGH_ARGS);
jsval *argv = JS_ARGV(cx, vp);
uint32 location;
@@ -798,17 +798,17 @@ helper_nsICanvasRenderingContextWebGL_Ve
wa = js::TypedArray::fromJSObject(arg1);
} else if (JS_IsArrayObject(cx, arg1)) {
JSObject *nobj = js_CreateTypedArrayWithArray(cx, js::TypedArray::TYPE_FLOAT32, arg1);
if (!nobj) {
// XXX this will likely return a strange error message if it goes wrong
return JS_FALSE;
}
- *obj_tvr.addr() = OBJECT_TO_JSVAL(nobj);
+ *obj_tvr.jsval_addr() = OBJECT_TO_JSVAL(nobj);
wa = js::TypedArray::fromJSObject(nobj);
} else {
xpc_qsThrowBadArg(cx, NS_ERROR_FAILURE, vp, 1);
return JS_FALSE;
}
if (nElements == 1) {
rv = self->VertexAttrib1fv_array(location, wa);
@@ -914,59 +914,59 @@ nsICanvasRenderingContextWebGL_VertexAtt
static JSBool
nsICanvasRenderingContextWebGL_VertexAttrib4fv(JSContext *cx, uintN argc, jsval *vp)
{
return helper_nsICanvasRenderingContextWebGL_VertexAttrib_x_fv(cx, argc, vp, 4);
}
#ifdef JS_TRACER
-static inline jsval FASTCALL
+static inline void FASTCALL
helper_nsICanvasRenderingContextWebGL_Uniform_x_iv_tn(JSContext *cx, JSObject *obj, JSObject *locationobj,
JSObject *arg, int nElements)
{
XPC_QS_ASSERT_CONTEXT_OK(cx);
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
xpc_qsArgValArray<3> vp(cx);
if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, &vp.array[0], nsnull)) {
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
js::AutoValueRooter obj_tvr(cx);
nsIWebGLUniformLocation *location;
xpc_qsSelfRef location_selfref;
nsresult rv_convert_arg0
= xpc_qsUnwrapThis(cx, locationobj, nsnull, &location, &location_selfref.ptr, &vp.array[1], nsnull);
if (NS_FAILED(rv_convert_arg0)) {
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
js::TypedArray *wa = 0;
if (helper_isInt32Array(arg)) {
wa = js::TypedArray::fromJSObject(arg);
} else if (JS_IsArrayObject(cx, arg)) {
JSObject *nobj = js_CreateTypedArrayWithArray(cx, js::TypedArray::TYPE_INT32, arg);
if (!nobj) {
// XXX this will likely return a strange error message if it goes wrong
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
- *obj_tvr.addr() = OBJECT_TO_JSVAL(nobj);
+ *obj_tvr.jsval_addr() = OBJECT_TO_JSVAL(nobj);
wa = js::TypedArray::fromJSObject(nobj);
} else {
xpc_qsThrowMethodFailedWithDetails(cx, NS_ERROR_FAILURE, "nsICanvasRenderingContextWebGL", "uniformNiv");
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
nsresult rv;
if (nElements == 1) {
rv = self->Uniform1iv_array(location, wa);
} else if (nElements == 2) {
rv = self->Uniform2iv_array(location, wa);
@@ -975,63 +975,61 @@ helper_nsICanvasRenderingContextWebGL_Un
} else if (nElements == 4) {
rv = self->Uniform4iv_array(location, wa);
}
if (NS_FAILED(rv)) {
xpc_qsThrowMethodFailedWithDetails(cx, rv, "nsICanvasRenderingContextWebGL", "uniformNiv");
js_SetTraceableNativeFailed(cx);
}
-
- return JSVAL_VOID;
}
-static inline jsval FASTCALL
+static inline void FASTCALL
helper_nsICanvasRenderingContextWebGL_Uniform_x_fv_tn(JSContext *cx, JSObject *obj, JSObject *locationobj,
JSObject *arg, int nElements)
{
XPC_QS_ASSERT_CONTEXT_OK(cx);
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
xpc_qsArgValArray<3> vp(cx);
if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, &vp.array[0], nsnull)) {
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
js::AutoValueRooter obj_tvr(cx);
nsIWebGLUniformLocation *location;
xpc_qsSelfRef location_selfref;
nsresult rv_convert_arg0
= xpc_qsUnwrapThis(cx, locationobj, nsnull, &location, &location_selfref.ptr, &vp.array[1], nsnull);
if (NS_FAILED(rv_convert_arg0)) {
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
js::TypedArray *wa = 0;
if (helper_isFloat32Array(arg)) {
wa = js::TypedArray::fromJSObject(arg);
} else if (JS_IsArrayObject(cx, arg)) {
JSObject *nobj = js_CreateTypedArrayWithArray(cx, js::TypedArray::TYPE_FLOAT32, arg);
if (!nobj) {
// XXX this will likely return a strange error message if it goes wrong
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
- *obj_tvr.addr() = OBJECT_TO_JSVAL(nobj);
+ *obj_tvr.jsval_addr() = OBJECT_TO_JSVAL(nobj);
wa = js::TypedArray::fromJSObject(nobj);
} else {
xpc_qsThrowMethodFailedWithDetails(cx, NS_ERROR_FAILURE, "nsICanvasRenderingContextWebGL", "uniformNfv");
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
nsresult rv;
if (nElements == 1) {
rv = self->Uniform1fv_array(location, wa);
} else if (nElements == 2) {
rv = self->Uniform2fv_array(location, wa);
@@ -1041,173 +1039,204 @@ helper_nsICanvasRenderingContextWebGL_Un
rv = self->Uniform4fv_array(location, wa);
}
if (NS_FAILED(rv)) {
xpc_qsThrowMethodFailedWithDetails(cx, rv, "nsICanvasRenderingContextWebGL", "uniformNfv");
js_SetTraceableNativeFailed(cx);
}
- return JSVAL_VOID;
+ return;
}
-static inline jsval FASTCALL
+static inline void FASTCALL
helper_nsICanvasRenderingContextWebGL_UniformMatrix_x_fv_tn(JSContext *cx, JSObject *obj, JSObject *locationobj,
JSBool transpose, JSObject *arg, int nElements)
{
XPC_QS_ASSERT_CONTEXT_OK(cx);
nsICanvasRenderingContextWebGL *self;
xpc_qsSelfRef selfref;
xpc_qsArgValArray<4> vp(cx);
if (!xpc_qsUnwrapThis(cx, obj, nsnull, &self, &selfref.ptr, &vp.array[0], nsnull)) {
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
js::AutoValueRooter obj_tvr(cx);
nsIWebGLUniformLocation *location;
xpc_qsSelfRef location_selfref;
nsresult rv_convert_arg0
= xpc_qsUnwrapThis(cx, locationobj, nsnull, &location, &location_selfref.ptr, &vp.array[1], nsnull);
if (NS_FAILED(rv_convert_arg0)) {
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
js::TypedArray *wa = 0;
if (helper_isFloat32Array(arg)) {
wa = js::TypedArray::fromJSObject(arg);
} else if (JS_IsArrayObject(cx, arg)) {
JSObject *nobj = js_CreateTypedArrayWithArray(cx, js::TypedArray::TYPE_FLOAT32, arg);
if (!nobj) {
// XXX this will likely return a strange error message if it goes wrong
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
- *obj_tvr.addr() = OBJECT_TO_JSVAL(nobj);
+ *obj_tvr.jsval_addr() = OBJECT_TO_JSVAL(nobj);
wa = js::TypedArray::fromJSObject(nobj);
} else {
xpc_qsThrowMethodFailedWithDetails(cx, NS_ERROR_FAILURE, "nsICanvasRenderingContextWebGL", "uniformMatrixNfv");
js_SetTraceableNativeFailed(cx);
- return JSVAL_VOID;
+ return;
}
nsresult rv;
if (nElements == 2) {
rv = self->UniformMatrix2fv_array(location, transpose, wa);
} else if (nElements == 3) {
rv = self->UniformMatrix3fv_array(location, transpose, wa);
} else if (nElements == 4) {
rv = self->UniformMatrix4fv_array(location, transpose, wa);
}
if (NS_FAILED(rv)) {
xpc_qsThrowMethodFailedWithDetails(cx, rv, "nsICanvasRenderingContextWebGL", "uniformMatrixNfv");
js_SetTraceableNativeFailed(cx);
}
-
- return JSVAL_VOID;
}
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_Uniform1iv_tn(JSContext *cx, JSObject *obj, JSObject *location, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_Uniform_x_iv_tn(cx, obj, location, arg, 1);
+ helper_nsICanvasRenderingContextWebGL_Uniform_x_iv_tn(cx, obj, location, arg, 1);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_Uniform1iv,
- (4, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_Uniform1iv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (4, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_Uniform1iv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_Uniform2iv_tn(JSContext *cx, JSObject *obj, JSObject *location, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_Uniform_x_iv_tn(cx, obj, location, arg, 2);
+ helper_nsICanvasRenderingContextWebGL_Uniform_x_iv_tn(cx, obj, location, arg, 2);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_Uniform2iv,
- (4, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_Uniform2iv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (4, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_Uniform2iv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_Uniform3iv_tn(JSContext *cx, JSObject *obj, JSObject *location, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_Uniform_x_iv_tn(cx, obj, location, arg, 3);
+ helper_nsICanvasRenderingContextWebGL_Uniform_x_iv_tn(cx, obj, location, arg, 3);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_Uniform3iv,
- (4, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_Uniform3iv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (4, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_Uniform3iv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_Uniform4iv_tn(JSContext *cx, JSObject *obj, JSObject *location, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_Uniform_x_iv_tn(cx, obj, location, arg, 4);
+ helper_nsICanvasRenderingContextWebGL_Uniform_x_iv_tn(cx, obj, location, arg, 4);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_Uniform4iv,
- (4, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_Uniform4iv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (4, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_Uniform4iv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_Uniform1fv_tn(JSContext *cx, JSObject *obj, JSObject *location, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_Uniform_x_fv_tn(cx, obj, location, arg, 1);
+ helper_nsICanvasRenderingContextWebGL_Uniform_x_fv_tn(cx, obj, location, arg, 1);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_Uniform1fv,
- (4, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_Uniform1fv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (4, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_Uniform1fv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_Uniform2fv_tn(JSContext *cx, JSObject *obj, JSObject *location, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_Uniform_x_fv_tn(cx, obj, location, arg, 2);
+ helper_nsICanvasRenderingContextWebGL_Uniform_x_fv_tn(cx, obj, location, arg, 2);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_Uniform2fv,
- (4, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_Uniform2fv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (4, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_Uniform2fv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_Uniform3fv_tn(JSContext *cx, JSObject *obj, JSObject *location, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_Uniform_x_fv_tn(cx, obj, location, arg, 3);
+ helper_nsICanvasRenderingContextWebGL_Uniform_x_fv_tn(cx, obj, location, arg, 3);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_Uniform3fv,
- (4, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_Uniform3fv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (4, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_Uniform3fv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_Uniform4fv_tn(JSContext *cx, JSObject *obj, JSObject *location, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_Uniform_x_fv_tn(cx, obj, location, arg, 4);
+ helper_nsICanvasRenderingContextWebGL_Uniform_x_fv_tn(cx, obj, location, arg, 4);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_Uniform4fv,
- (4, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_Uniform4fv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (4, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_Uniform4fv_tn, CONTEXT, THIS, OBJECT, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_UniformMatrix2fv_tn(JSContext *cx, JSObject *obj, JSObject *loc, JSBool transpose, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_UniformMatrix_x_fv_tn(cx, obj, loc, transpose, arg, 2);
+ helper_nsICanvasRenderingContextWebGL_UniformMatrix_x_fv_tn(cx, obj, loc, transpose, arg, 2);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_UniformMatrix2fv,
- (5, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_UniformMatrix2fv_tn, CONTEXT, THIS, OBJECT, BOOL, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (5, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_UniformMatrix2fv_tn, CONTEXT, THIS, OBJECT, BOOL, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_UniformMatrix3fv_tn(JSContext *cx, JSObject *obj, JSObject *loc, JSBool transpose, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_UniformMatrix_x_fv_tn(cx, obj, loc, transpose, arg, 3);
+ helper_nsICanvasRenderingContextWebGL_UniformMatrix_x_fv_tn(cx, obj, loc, transpose, arg, 3);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_UniformMatrix3fv,
- (5, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_UniformMatrix3fv_tn, CONTEXT, THIS, OBJECT, BOOL, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (5, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_UniformMatrix3fv_tn, CONTEXT, THIS, OBJECT, BOOL, OBJECT, 0, nanojit::ACC_STORE_ANY)))
-static jsval FASTCALL
+// FIXME This should return void, not uint32
+// (waiting for https://bugzilla.mozilla.org/show_bug.cgi?id=572798)
+static uint32 FASTCALL
nsICanvasRenderingContextWebGL_UniformMatrix4fv_tn(JSContext *cx, JSObject *obj, JSObject *loc, JSBool transpose, JSObject *arg)
{
- return helper_nsICanvasRenderingContextWebGL_UniformMatrix_x_fv_tn(cx, obj, loc, transpose, arg, 4);
+ helper_nsICanvasRenderingContextWebGL_UniformMatrix_x_fv_tn(cx, obj, loc, transpose, arg, 4);
+ return 0;
}
JS_DEFINE_TRCINFO_1(nsICanvasRenderingContextWebGL_UniformMatrix4fv,
- (5, (static, JSVAL_FAIL, nsICanvasRenderingContextWebGL_UniformMatrix4fv_tn, CONTEXT, THIS, OBJECT, BOOL, OBJECT, 0, nanojit::ACC_STORE_ANY)))
+ (5, (static, UINT32_FAIL, nsICanvasRenderingContextWebGL_UniformMatrix4fv_tn, CONTEXT, THIS, OBJECT, BOOL, OBJECT, 0, nanojit::ACC_STORE_ANY)))
#endif /* JS_TRACER */
--- a/content/canvas/src/NativeJSContext.cpp
+++ b/content/canvas/src/NativeJSContext.cpp
@@ -10,11 +10,10 @@ NativeJSContext::AddGCRoot(JSObject **aP
PRBool ok;
return ok = ::JS_AddNamedObjectRoot(ctx, aPtr, aName);
}
void
NativeJSContext::ReleaseGCRoot(JSObject **aPtr)
{
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
-
::JS_RemoveObjectRoot(ctx, aPtr);
}
--- a/content/canvas/src/NativeJSContext.h
+++ b/content/canvas/src/NativeJSContext.h
@@ -62,108 +62,92 @@ public:
return PR_FALSE;
}
PRBool AddGCRoot (JSObject **aPtr, const char *aName);
void ReleaseGCRoot (JSObject **aPtr);
void SetRetVal (PRInt32 val) {
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
- if (INT_FITS_IN_JSVAL(val))
- SetRetValAsJSVal(INT_TO_JSVAL(val));
- else
- SetRetVal((double) val);
+ SetRetValAsJSVal(INT_TO_JSVAL(val));
}
void SetRetVal (PRUint32 val) {
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
- if (INT_FITS_IN_JSVAL(val))
- SetRetValAsJSVal(INT_TO_JSVAL((int) val));
- else
- SetRetVal((double) val);
+ SetRetValAsJSVal(UINT_TO_JSVAL(val));
}
void SetRetVal (double val) {
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
- jsval *vp;
- ncc->GetRetValPtr(&vp);
- JS_NewDoubleValue(ctx, val, vp);
+ SetRetValAsJSVal(DOUBLE_TO_JSVAL(val));
}
void SetBoolRetVal (PRBool val) {
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
- if (val)
- SetRetValAsJSVal(JSVAL_TRUE);
- else
- SetRetValAsJSVal(JSVAL_FALSE);
+ SetRetValAsJSVal(BOOLEAN_TO_JSVAL(val));
}
void SetRetVal (PRInt32 *vp, PRUint32 len) {
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
nsAutoArrayPtr<jsval> jsvector(new jsval[len]);
if (!JS_EnterLocalRootScope(ctx))
return; // XXX ???
- for (PRUint32 i = 0; i < len; i++) {
- if (INT_FITS_IN_JSVAL(vp[i])) {
- jsvector[i] = INT_TO_JSVAL(vp[i]);
- } else {
- JS_NewDoubleValue(ctx, vp[i], &jsvector[i]);
- }
- }
+ for (PRUint32 i = 0; i < len; i++)
+ jsvector[i] = INT_TO_JSVAL(vp[i]);
JSObject *jsarr = JS_NewArrayObject(ctx, len, jsvector.get());
SetRetVal(jsarr);
JS_LeaveLocalRootScope(ctx);
}
void SetRetVal (PRUint32 *vp, PRUint32 len) {
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
nsAutoArrayPtr<jsval> jsvector(new jsval[len]);
if (!JS_EnterLocalRootScope(ctx))
return; // XXX ???
- for (PRUint32 i = 0; i < len; i++) {
- JS_NewNumberValue(ctx, vp[i], &jsvector[i]);
- }
+ for (PRUint32 i = 0; i < len; i++)
+ jsvector[i] = UINT_TO_JSVAL(vp[i]);
JSObject *jsarr = JS_NewArrayObject(ctx, len, jsvector.get());
SetRetVal(jsarr);
JS_LeaveLocalRootScope(ctx);
}
void SetRetVal (double *dp, PRUint32 len) {
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
nsAutoArrayPtr<jsval> jsvector(new jsval[len]);
if (!JS_EnterLocalRootScope(ctx))
return; // XXX ???
for (PRUint32 i = 0; i < len; i++)
- JS_NewDoubleValue(ctx, (jsdouble) dp[i], &jsvector[i]);
-
+ jsvector[i] = DOUBLE_TO_JSVAL(dp[i]);
+
JSObject *jsarr = JS_NewArrayObject(ctx, len, jsvector.get());
SetRetVal(jsarr);
JS_LeaveLocalRootScope(ctx);
}
void SetRetVal (float *fp, PRUint32 len) {
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
nsAutoArrayPtr<jsval> jsvector(new jsval[len]);
if (!JS_EnterLocalRootScope(ctx))
return; // XXX ???
for (PRUint32 i = 0; i < len; i++)
- JS_NewDoubleValue(ctx, (jsdouble) fp[i], &jsvector[i]);
+ jsvector[i] = DOUBLE_TO_JSVAL(fp[i]);
+
JSObject *jsarr = JS_NewArrayObject(ctx, len, jsvector.get());
SetRetVal(jsarr);
JS_LeaveLocalRootScope(ctx);
}
void SetRetValAsJSVal (jsval val) {
NS_ASSERTION(NS_SUCCEEDED(error), "class failed to initialize and caller used class without checking!");
@@ -337,35 +321,31 @@ public:
PRBool DefineProperty(const char *name, PRUint32 val) {
// XXX handle too big ints
if (!JS_DefineProperty(mCtx->ctx, mObject, name, INT_TO_JSVAL((int)val), NULL, NULL, JSPROP_ENUMERATE))
return PR_FALSE;
return PR_TRUE;
}
PRBool DefineProperty(const char *name, double val) {
- jsval dv;
-
- if (!JS_NewDoubleValue(mCtx->ctx, val, &dv))
- return PR_FALSE;
-
+ jsval dv = DOUBLE_TO_JSVAL(val);
if (!JS_DefineProperty(mCtx->ctx, mObject, name, dv, NULL, NULL, JSPROP_ENUMERATE))
return PR_FALSE;
return PR_TRUE;
}
PRBool DefineProperty(const char *name, JSObject *val) {
if (!JS_DefineProperty(mCtx->ctx, mObject, name, OBJECT_TO_JSVAL(val), NULL, NULL, JSPROP_ENUMERATE))
return PR_FALSE;
return PR_TRUE;
}
// Blah. We can't name this DefineProperty also because PRBool is the same as PRInt32
PRBool DefineBoolProperty(const char *name, PRBool val) {
- if (!JS_DefineProperty(mCtx->ctx, mObject, name, val ? JS_TRUE : JS_FALSE, NULL, NULL, JSPROP_ENUMERATE))
+ if (!JS_DefineProperty(mCtx->ctx, mObject, name, val ? JSVAL_TRUE : JSVAL_FALSE, NULL, NULL, JSPROP_ENUMERATE))
return PR_FALSE;
return PR_TRUE;
}
// We can't use ns*Substring, because we don't have internal linkage
#if 0
PRBool DefineProperty(const char *name, const nsCSubstring& val) {
JSString *jsstr = JS_NewStringCopyN(mCtx->ctx, val.BeginReading(), val.Length());
--- a/content/events/src/nsEventListenerManager.cpp
+++ b/content/events/src/nsEventListenerManager.cpp
@@ -306,17 +306,17 @@ nsEventListenerManager::RemoveAllListene
mListeners.Clear();
return NS_OK;
}
void
nsEventListenerManager::Shutdown()
{
NS_IF_RELEASE(gSystemEventGroup);
- sAddListenerID = JSVAL_VOID;
+ sAddListenerID = JSID_VOID;
nsDOMEvent::Shutdown();
}
nsIDOMEventGroup*
nsEventListenerManager::GetSystemEventGroup()
{
if (!gSystemEventGroup) {
CallCreateInstance(kDOMEventGroupCID, &gSystemEventGroup);
@@ -836,18 +836,18 @@ nsEventListenerManager::RemoveScriptEven
mListeners.RemoveElementAt(PRUint32(ls - &mListeners.ElementAt(0)));
mNoListenerForEvent = NS_EVENT_TYPE_NULL;
mNoListenerForEventAtom = nsnull;
}
return NS_OK;
}
-jsval
-nsEventListenerManager::sAddListenerID = JSVAL_VOID;
+jsid
+nsEventListenerManager::sAddListenerID = JSID_VOID;
NS_IMETHODIMP
nsEventListenerManager::RegisterScriptEventListener(nsIScriptContext *aContext,
void *aScope,
nsISupports *aObject,
nsIAtom *aName)
{
// Check that we have access to set an event listener. Prevents
@@ -861,20 +861,20 @@ nsEventListenerManager::RegisterScriptEv
do_GetService("@mozilla.org/js/xpc/ContextStack;1", &rv);
if (NS_FAILED(rv))
return rv;
JSContext *cx;
if (NS_FAILED(rv = stack->Peek(&cx)))
return rv;
if (cx) {
- if (sAddListenerID == JSVAL_VOID) {
+ if (sAddListenerID == JSID_VOID) {
JSAutoRequest ar(cx);
sAddListenerID =
- STRING_TO_JSVAL(::JS_InternString(cx, "addEventListener"));
+ INTERNED_STRING_TO_JSID(::JS_InternString(cx, "addEventListener"));
}
if (aContext->GetScriptTypeID() == nsIProgrammingLanguage::JAVASCRIPT) {
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
jsval v;
rv = nsContentUtils::WrapNative(cx, (JSObject *)aScope, aObject, &v,
getter_AddRefs(holder));
NS_ENSURE_SUCCESS(rv, rv);
--- a/content/events/src/nsEventListenerManager.h
+++ b/content/events/src/nsEventListenerManager.h
@@ -226,15 +226,15 @@ protected:
PRBool ListenerCanHandle(nsListenerStruct* aLs, nsEvent* aEvent);
nsPIDOMWindow* GetInnerWindowForTarget();
nsAutoTObserverArray<nsListenerStruct, 2> mListeners;
nsISupports* mTarget; //WEAK
nsCOMPtr<nsIAtom> mNoListenerForEventAtom;
static PRUint32 mInstanceCount;
- static jsval sAddListenerID;
+ static jsid sAddListenerID;
friend class nsEventTargetChainItem;
static PRUint32 sCreatedCount;
};
#endif // nsEventListenerManager_h__
--- a/content/html/document/src/nsHTMLDocument.cpp
+++ b/content/html/document/src/nsHTMLDocument.cpp
@@ -3630,20 +3630,20 @@ ConvertToMidasInternalCommand(const nsAS
nsCAutoString dummyCString;
nsAutoString dummyString;
PRBool dummyBool;
return ConvertToMidasInternalCommandInner(inCommandID, dummyString,
outCommandID, dummyCString,
dummyBool, dummyBool, PR_TRUE);
}
-jsval
-nsHTMLDocument::sCutCopyInternal_id = JSVAL_VOID;
-jsval
-nsHTMLDocument::sPasteInternal_id = JSVAL_VOID;
+jsid
+nsHTMLDocument::sCutCopyInternal_id = JSID_VOID;
+jsid
+nsHTMLDocument::sPasteInternal_id = JSID_VOID;
/* Helper function to check security of clipboard commands. If aPaste is */
/* true, we check paste, else we check cutcopy */
nsresult
nsHTMLDocument::DoClipboardSecurityCheck(PRBool aPaste)
{
nsresult rv = NS_ERROR_FAILURE;
@@ -3659,27 +3659,27 @@ nsHTMLDocument::DoClipboardSecurityCheck
JSAutoRequest ar(cx);
NS_NAMED_LITERAL_CSTRING(classNameStr, "Clipboard");
nsIScriptSecurityManager *secMan = nsContentUtils::GetSecurityManager();
if (aPaste) {
- if (nsHTMLDocument::sPasteInternal_id == JSVAL_VOID) {
+ if (nsHTMLDocument::sPasteInternal_id == JSID_VOID) {
nsHTMLDocument::sPasteInternal_id =
- STRING_TO_JSVAL(::JS_InternString(cx, "paste"));
+ INTERNED_STRING_TO_JSID(::JS_InternString(cx, "paste"));
}
rv = secMan->CheckPropertyAccess(cx, nsnull, classNameStr.get(),
nsHTMLDocument::sPasteInternal_id,
nsIXPCSecurityManager::ACCESS_GET_PROPERTY);
} else {
- if (nsHTMLDocument::sCutCopyInternal_id == JSVAL_VOID) {
+ if (nsHTMLDocument::sCutCopyInternal_id == JSID_VOID) {
nsHTMLDocument::sCutCopyInternal_id =
- STRING_TO_JSVAL(::JS_InternString(cx, "cutcopy"));
+ INTERNED_STRING_TO_JSID(::JS_InternString(cx, "cutcopy"));
}
rv = secMan->CheckPropertyAccess(cx, nsnull, classNameStr.get(),
nsHTMLDocument::sCutCopyInternal_id,
nsIXPCSecurityManager::ACCESS_GET_PROPERTY);
}
}
return rv;
}
--- a/content/html/document/src/nsHTMLDocument.h
+++ b/content/html/document/src/nsHTMLDocument.h
@@ -366,18 +366,18 @@ protected:
nsresult TurnEditingOff();
nsresult EditingStateChanged();
void MaybeEditingStateChanged();
PRUint32 mContentEditableCount;
EditingState mEditingState;
nsresult DoClipboardSecurityCheck(PRBool aPaste);
- static jsval sCutCopyInternal_id;
- static jsval sPasteInternal_id;
+ static jsid sCutCopyInternal_id;
+ static jsid sPasteInternal_id;
// When false, the .cookies property is completely disabled
PRBool mDisableCookieAccess;
// Parser used for constructing document fragments.
nsCOMPtr<nsIParser> mFragmentParser;
};
--- a/content/xbl/src/nsXBLBinding.cpp
+++ b/content/xbl/src/nsXBLBinding.cpp
@@ -118,30 +118,30 @@ XBLFinalize(JSContext *cx, JSObject *obj
static_cast<nsIXBLDocumentInfo*>(::JS_GetPrivate(cx, obj));
NS_RELEASE(docInfo);
nsXBLJSClass* c = static_cast<nsXBLJSClass*>(::JS_GET_CLASS(cx, obj));
c->Drop();
}
static JSBool
-XBLResolve(JSContext *cx, JSObject *obj, jsval id, uintN flags,
+XBLResolve(JSContext *cx, JSObject *obj, jsid id, uintN flags,
JSObject **objp)
{
// Note: if we get here, that means that the implementation for some binding
// was installed, which means that AllowScripts() tested true. Hence no need
// to do checks like that here.
// Default to not resolving things.
NS_ASSERTION(*objp, "Must have starting object");
JSObject* origObj = *objp;
*objp = NULL;
- if (!JSVAL_IS_STRING(id)) {
+ if (!JSID_IS_STRING(id)) {
return JS_TRUE;
}
nsDependentJSString fieldName(id);
jsval slotVal;
::JS_GetReservedSlot(cx, obj, 0, &slotVal);
NS_ASSERTION(!JSVAL_IS_VOID(slotVal), "How did that happen?");
--- a/content/xbl/src/nsXBLDocumentInfo.cpp
+++ b/content/xbl/src/nsXBLDocumentInfo.cpp
@@ -76,17 +76,17 @@ public:
virtual nsIScriptContext *GetContext();
virtual JSObject *GetGlobalJSObject();
virtual void OnFinalize(PRUint32 aLangID, void *aScriptGlobal);
virtual void SetScriptsEnabled(PRBool aEnabled, PRBool aFireTimeouts);
// nsIScriptObjectPrincipal methods
virtual nsIPrincipal* GetPrincipal();
- static JSBool doCheckAccess(JSContext *cx, JSObject *obj, jsval id,
+ static JSBool doCheckAccess(JSContext *cx, JSObject *obj, jsid id,
PRUint32 accessType);
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsXBLDocGlobalObject,
nsIScriptGlobalObject)
void ClearGlobalObjectOwner();
protected:
@@ -99,17 +99,17 @@ protected:
nsCOMPtr<nsIScriptContext> mScriptContext;
JSObject *mJSObject; // XXX JS language rabies bigotry badness
nsIScriptGlobalObjectOwner* mGlobalObjectOwner; // weak reference
static JSClass gSharedGlobalClass;
};
JSBool
-nsXBLDocGlobalObject::doCheckAccess(JSContext *cx, JSObject *obj, jsval id, PRUint32 accessType)
+nsXBLDocGlobalObject::doCheckAccess(JSContext *cx, JSObject *obj, jsid id, PRUint32 accessType)
{
nsIScriptSecurityManager *ssm = nsContentUtils::GetSecurityManager();
if (!ssm) {
::JS_ReportError(cx, "Unable to verify access to a global object property.");
return JS_FALSE;
}
// Make sure to actually operate on our object, and not some object further
@@ -124,32 +124,32 @@ nsXBLDocGlobalObject::doCheckAccess(JSCo
nsresult rv = ssm->CheckPropertyAccess(cx, obj, JS_GET_CLASS(cx, obj)->name,
id, accessType);
return NS_SUCCEEDED(rv);
}
static JSBool
nsXBLDocGlobalObject_getProperty(JSContext *cx, JSObject *obj,
- jsval id, jsval *vp)
+ jsid id, jsval *vp)
{
return nsXBLDocGlobalObject::
doCheckAccess(cx, obj, id, nsIXPCSecurityManager::ACCESS_GET_PROPERTY);
}
static JSBool
nsXBLDocGlobalObject_setProperty(JSContext *cx, JSObject *obj,
- jsval id, jsval *vp)
+ jsid id, jsval *vp)
{
return nsXBLDocGlobalObject::
doCheckAccess(cx, obj, id, nsIXPCSecurityManager::ACCESS_SET_PROPERTY);
}
static JSBool
-nsXBLDocGlobalObject_checkAccess(JSContext *cx, JSObject *obj, jsval id,
+nsXBLDocGlobalObject_checkAccess(JSContext *cx, JSObject *obj, jsid id,
JSAccessMode mode, jsval *vp)
{
PRUint32 translated;
if (mode & JSACC_WRITE) {
translated = nsIXPCSecurityManager::ACCESS_SET_PROPERTY;
} else {
translated = nsIXPCSecurityManager::ACCESS_GET_PROPERTY;
}
@@ -168,17 +168,17 @@ nsXBLDocGlobalObject_finalize(JSContext
if (sgo)
sgo->OnFinalize(nsIProgrammingLanguage::JAVASCRIPT, obj);
// The addref was part of JSObject construction
NS_RELEASE(nativeThis);
}
static JSBool
-nsXBLDocGlobalObject_resolve(JSContext *cx, JSObject *obj, jsval id)
+nsXBLDocGlobalObject_resolve(JSContext *cx, JSObject *obj, jsid id)
{
JSBool did_resolve = JS_FALSE;
return JS_ResolveStandardClass(cx, obj, id, &did_resolve);
}
JSClass nsXBLDocGlobalObject::gSharedGlobalClass = {
"nsXBLPrototypeScript compilation scope",
--- a/content/xul/document/src/nsXULPrototypeDocument.cpp
+++ b/content/xul/document/src/nsXULPrototypeDocument.cpp
@@ -127,17 +127,17 @@ nsXULPDGlobalObject_finalize(JSContext *
}
// The addref was part of JSObject construction
NS_RELEASE(nativeThis);
}
JSBool
-nsXULPDGlobalObject_resolve(JSContext *cx, JSObject *obj, jsval id)
+nsXULPDGlobalObject_resolve(JSContext *cx, JSObject *obj, jsid id)
{
JSBool did_resolve = JS_FALSE;
return JS_ResolveStandardClass(cx, obj, id, &did_resolve);
}
JSClass nsXULPDGlobalObject::gSharedGlobalClass = {
--- a/dom/base/nsDOMClassInfo.cpp
+++ b/dom/base/nsDOMClassInfo.cpp
@@ -1495,101 +1495,101 @@ static const nsConstructorFuncMapData kC
nsIXPConnect *nsDOMClassInfo::sXPConnect = nsnull;
nsIScriptSecurityManager *nsDOMClassInfo::sSecMan = nsnull;
PRBool nsDOMClassInfo::sIsInitialized = PR_FALSE;
PRBool nsDOMClassInfo::sDisableDocumentAllSupport = PR_FALSE;
PRBool nsDOMClassInfo::sDisableGlobalScopePollutionSupport = PR_FALSE;
-jsval nsDOMClassInfo::sTop_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sParent_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sScrollbars_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sLocation_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sConstructor_id = JSVAL_VOID;
-jsval nsDOMClassInfo::s_content_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sContent_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sMenubar_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sToolbar_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sLocationbar_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sPersonalbar_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sStatusbar_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sDialogArguments_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sControllers_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sLength_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sInnerHeight_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sInnerWidth_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOuterHeight_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOuterWidth_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sScreenX_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sScreenY_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sStatus_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sName_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnmousedown_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnmouseup_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnclick_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOndblclick_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOncontextmenu_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnmouseover_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnmouseout_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnkeydown_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnkeyup_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnkeypress_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnmousemove_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnfocus_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnblur_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnsubmit_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnreset_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnchange_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnselect_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnload_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnpopstate_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnbeforeunload_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnunload_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnhashchange_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnreadystatechange_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnpageshow_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnpagehide_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnabort_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnerror_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnpaint_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnresize_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnscroll_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOndrag_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOndragend_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOndragenter_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOndragleave_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOndragover_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOndragstart_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOndrop_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sScrollX_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sScrollY_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sScrollMaxX_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sScrollMaxY_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOpen_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sItem_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sNamedItem_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sEnumerate_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sNavigator_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sDocument_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sWindow_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sFrames_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sSelf_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOpener_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sAll_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sTags_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sAddEventListener_id= JSVAL_VOID;
-jsval nsDOMClassInfo::sBaseURIObject_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sNodePrincipal_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sDocumentURIObject_id=JSVAL_VOID;
-jsval nsDOMClassInfo::sOncopy_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOncut_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sOnpaste_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sJava_id = JSVAL_VOID;
-jsval nsDOMClassInfo::sPackages_id = JSVAL_VOID;
+jsid nsDOMClassInfo::sTop_id = JSID_VOID;
+jsid nsDOMClassInfo::sParent_id = JSID_VOID;
+jsid nsDOMClassInfo::sScrollbars_id = JSID_VOID;
+jsid nsDOMClassInfo::sLocation_id = JSID_VOID;
+jsid nsDOMClassInfo::sConstructor_id = JSID_VOID;
+jsid nsDOMClassInfo::s_content_id = JSID_VOID;
+jsid nsDOMClassInfo::sContent_id = JSID_VOID;
+jsid nsDOMClassInfo::sMenubar_id = JSID_VOID;
+jsid nsDOMClassInfo::sToolbar_id = JSID_VOID;
+jsid nsDOMClassInfo::sLocationbar_id = JSID_VOID;
+jsid nsDOMClassInfo::sPersonalbar_id = JSID_VOID;
+jsid nsDOMClassInfo::sStatusbar_id = JSID_VOID;
+jsid nsDOMClassInfo::sDialogArguments_id = JSID_VOID;
+jsid nsDOMClassInfo::sControllers_id = JSID_VOID;
+jsid nsDOMClassInfo::sLength_id = JSID_VOID;
+jsid nsDOMClassInfo::sInnerHeight_id = JSID_VOID;
+jsid nsDOMClassInfo::sInnerWidth_id = JSID_VOID;
+jsid nsDOMClassInfo::sOuterHeight_id = JSID_VOID;
+jsid nsDOMClassInfo::sOuterWidth_id = JSID_VOID;
+jsid nsDOMClassInfo::sScreenX_id = JSID_VOID;
+jsid nsDOMClassInfo::sScreenY_id = JSID_VOID;
+jsid nsDOMClassInfo::sStatus_id = JSID_VOID;
+jsid nsDOMClassInfo::sName_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnmousedown_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnmouseup_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnclick_id = JSID_VOID;
+jsid nsDOMClassInfo::sOndblclick_id = JSID_VOID;
+jsid nsDOMClassInfo::sOncontextmenu_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnmouseover_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnmouseout_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnkeydown_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnkeyup_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnkeypress_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnmousemove_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnfocus_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnblur_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnsubmit_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnreset_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnchange_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnselect_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnload_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnpopstate_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnbeforeunload_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnunload_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnhashchange_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnreadystatechange_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnpageshow_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnpagehide_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnabort_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnerror_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnpaint_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnresize_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnscroll_id = JSID_VOID;
+jsid nsDOMClassInfo::sOndrag_id = JSID_VOID;
+jsid nsDOMClassInfo::sOndragend_id = JSID_VOID;
+jsid nsDOMClassInfo::sOndragenter_id = JSID_VOID;
+jsid nsDOMClassInfo::sOndragleave_id = JSID_VOID;
+jsid nsDOMClassInfo::sOndragover_id = JSID_VOID;
+jsid nsDOMClassInfo::sOndragstart_id = JSID_VOID;
+jsid nsDOMClassInfo::sOndrop_id = JSID_VOID;
+jsid nsDOMClassInfo::sScrollX_id = JSID_VOID;
+jsid nsDOMClassInfo::sScrollY_id = JSID_VOID;
+jsid nsDOMClassInfo::sScrollMaxX_id = JSID_VOID;
+jsid nsDOMClassInfo::sScrollMaxY_id = JSID_VOID;
+jsid nsDOMClassInfo::sOpen_id = JSID_VOID;
+jsid nsDOMClassInfo::sItem_id = JSID_VOID;
+jsid nsDOMClassInfo::sNamedItem_id = JSID_VOID;
+jsid nsDOMClassInfo::sEnumerate_id = JSID_VOID;
+jsid nsDOMClassInfo::sNavigator_id = JSID_VOID;
+jsid nsDOMClassInfo::sDocument_id = JSID_VOID;
+jsid nsDOMClassInfo::sWindow_id = JSID_VOID;
+jsid nsDOMClassInfo::sFrames_id = JSID_VOID;
+jsid nsDOMClassInfo::sSelf_id = JSID_VOID;
+jsid nsDOMClassInfo::sOpener_id = JSID_VOID;
+jsid nsDOMClassInfo::sAll_id = JSID_VOID;
+jsid nsDOMClassInfo::sTags_id = JSID_VOID;
+jsid nsDOMClassInfo::sAddEventListener_id= JSID_VOID;
+jsid nsDOMClassInfo::sBaseURIObject_id = JSID_VOID;
+jsid nsDOMClassInfo::sNodePrincipal_id = JSID_VOID;
+jsid nsDOMClassInfo::sDocumentURIObject_id=JSID_VOID;
+jsid nsDOMClassInfo::sOncopy_id = JSID_VOID;
+jsid nsDOMClassInfo::sOncut_id = JSID_VOID;
+jsid nsDOMClassInfo::sOnpaste_id = JSID_VOID;
+jsid nsDOMClassInfo::sJava_id = JSID_VOID;
+jsid nsDOMClassInfo::sPackages_id = JSID_VOID;
static const JSClass *sObjectClass = nsnull;
JSPropertyOp nsDOMClassInfo::sXPCNativeWrapperGetPropertyOp = nsnull;
JSPropertyOp nsDOMClassInfo::sXrayWrapperPropertyHolderGetPropertyOp = nsnull;
/**
* Set our JSClass pointer for the Object class
*/
@@ -1599,17 +1599,17 @@ FindObjectClass(JSObject* aGlobalObject)
NS_ASSERTION(!sObjectClass,
"Double set of sObjectClass");
JSObject *obj, *proto = aGlobalObject;
do {
obj = proto;
proto = obj->getProto();
} while (proto);
- sObjectClass = obj->getClass();
+ sObjectClass = obj->getJSClass();
}
static void
PrintWarningOnConsole(JSContext *cx, const char *stringBundleProperty)
{
nsCOMPtr<nsIStringBundleService> stringService =
mozilla::services::GetStringBundleService();
if (!stringService) {
@@ -1667,132 +1667,131 @@ PrintWarningOnConsole(JSContext *cx, con
0, // column for error is not available
nsIScriptError::warningFlag,
"DOM:HTML");
if (NS_SUCCEEDED(rv)){
consoleService->LogMessage(scriptError);
}
}
-static jsval
-GetInternedJSVal(JSContext *cx, const char *str)
-{
- JSString *s = ::JS_InternString(cx, str);
-
- if (!s) {
- return JSVAL_VOID;
- }
-
- return STRING_TO_JSVAL(s);
+static inline JSString *
+IdToString(JSContext *cx, jsid id)
+{
+ if (JSID_IS_STRING(id))
+ return JSID_TO_STRING(id);
+ jsval idval;
+ if (!::JS_IdToValue(cx, id, &idval))
+ return nsnull;
+ return JS_ValueToString(cx, idval);
}
// static
nsISupports *
nsDOMClassInfo::GetNative(nsIXPConnectWrappedNative *wrapper, JSObject *obj)
{
return wrapper ? wrapper->Native() : static_cast<nsISupports*>(obj->getPrivate());
}
nsresult
nsDOMClassInfo::DefineStaticJSVals(JSContext *cx)
{
-#define SET_JSVAL_TO_STRING(_val, _cx, _str) \
- _val = GetInternedJSVal(_cx, _str); \
- if (!JSVAL_IS_STRING(_val)) { \
- return NS_ERROR_OUT_OF_MEMORY; \
- }
+#define SET_JSID_TO_STRING(_id, _cx, _str) \
+ if (JSString *str = ::JS_InternString(_cx, _str)) \
+ _id = INTERNED_STRING_TO_JSID(str); \
+ else \
+ return NS_ERROR_OUT_OF_MEMORY;
JSAutoRequest ar(cx);
- SET_JSVAL_TO_STRING(sTop_id, cx, "top");
- SET_JSVAL_TO_STRING(sParent_id, cx, "parent");
- SET_JSVAL_TO_STRING(sScrollbars_id, cx, "scrollbars");
- SET_JSVAL_TO_STRING(sLocation_id, cx, "location");
- SET_JSVAL_TO_STRING(sConstructor_id, cx, "constructor");
- SET_JSVAL_TO_STRING(s_content_id, cx, "_content");
- SET_JSVAL_TO_STRING(sContent_id, cx, "content");
- SET_JSVAL_TO_STRING(sMenubar_id, cx, "menubar");
- SET_JSVAL_TO_STRING(sToolbar_id, cx, "toolbar");
- SET_JSVAL_TO_STRING(sLocationbar_id, cx, "locationbar");
- SET_JSVAL_TO_STRING(sPersonalbar_id, cx, "personalbar");
- SET_JSVAL_TO_STRING(sStatusbar_id, cx, "statusbar");
- SET_JSVAL_TO_STRING(sDialogArguments_id, cx, "dialogArguments");
- SET_JSVAL_TO_STRING(sControllers_id, cx, "controllers");
- SET_JSVAL_TO_STRING(sLength_id, cx, "length");
- SET_JSVAL_TO_STRING(sInnerHeight_id, cx, "innerHeight");
- SET_JSVAL_TO_STRING(sInnerWidth_id, cx, "innerWidth");
- SET_JSVAL_TO_STRING(sOuterHeight_id, cx, "outerHeight");
- SET_JSVAL_TO_STRING(sOuterWidth_id, cx, "outerWidth");
- SET_JSVAL_TO_STRING(sScreenX_id, cx, "screenX");
- SET_JSVAL_TO_STRING(sScreenY_id, cx, "screenY");
- SET_JSVAL_TO_STRING(sStatus_id, cx, "status");
- SET_JSVAL_TO_STRING(sName_id, cx, "name");
- SET_JSVAL_TO_STRING(sOnmousedown_id, cx, "onmousedown");
- SET_JSVAL_TO_STRING(sOnmouseup_id, cx, "onmouseup");
- SET_JSVAL_TO_STRING(sOnclick_id, cx, "onclick");
- SET_JSVAL_TO_STRING(sOndblclick_id, cx, "ondblclick");
- SET_JSVAL_TO_STRING(sOncontextmenu_id, cx, "oncontextmenu");
- SET_JSVAL_TO_STRING(sOnmouseover_id, cx, "onmouseover");
- SET_JSVAL_TO_STRING(sOnmouseout_id, cx, "onmouseout");
- SET_JSVAL_TO_STRING(sOnkeydown_id, cx, "onkeydown");
- SET_JSVAL_TO_STRING(sOnkeyup_id, cx, "onkeyup");
- SET_JSVAL_TO_STRING(sOnkeypress_id, cx, "onkeypress");
- SET_JSVAL_TO_STRING(sOnmousemove_id, cx, "onmousemove");
- SET_JSVAL_TO_STRING(sOnfocus_id, cx, "onfocus");
- SET_JSVAL_TO_STRING(sOnblur_id, cx, "onblur");
- SET_JSVAL_TO_STRING(sOnsubmit_id, cx, "onsubmit");
- SET_JSVAL_TO_STRING(sOnreset_id, cx, "onreset");
- SET_JSVAL_TO_STRING(sOnchange_id, cx, "onchange");
- SET_JSVAL_TO_STRING(sOnselect_id, cx, "onselect");
- SET_JSVAL_TO_STRING(sOnload_id, cx, "onload");
- SET_JSVAL_TO_STRING(sOnpopstate_id, cx, "onpopstate");
- SET_JSVAL_TO_STRING(sOnbeforeunload_id, cx, "onbeforeunload");
- SET_JSVAL_TO_STRING(sOnunload_id, cx, "onunload");
- SET_JSVAL_TO_STRING(sOnhashchange_id, cx, "onhashchange");
- SET_JSVAL_TO_STRING(sOnreadystatechange_id, cx, "onreadystatechange");
- SET_JSVAL_TO_STRING(sOnpageshow_id, cx, "onpageshow");
- SET_JSVAL_TO_STRING(sOnpagehide_id, cx, "onpagehide");
- SET_JSVAL_TO_STRING(sOnabort_id, cx, "onabort");
- SET_JSVAL_TO_STRING(sOnerror_id, cx, "onerror");
- SET_JSVAL_TO_STRING(sOnpaint_id, cx, "onpaint");
- SET_JSVAL_TO_STRING(sOnresize_id, cx, "onresize");
- SET_JSVAL_TO_STRING(sOnscroll_id, cx, "onscroll");
- SET_JSVAL_TO_STRING(sOndrag_id, cx, "ondrag");
- SET_JSVAL_TO_STRING(sOndragend_id, cx, "ondragend");
- SET_JSVAL_TO_STRING(sOndragenter_id, cx, "ondragenter");
- SET_JSVAL_TO_STRING(sOndragleave_id, cx, "ondragleave");
- SET_JSVAL_TO_STRING(sOndragover_id, cx, "ondragover");
- SET_JSVAL_TO_STRING(sOndragstart_id, cx, "ondragstart");
- SET_JSVAL_TO_STRING(sOndrop_id, cx, "ondrop");
- SET_JSVAL_TO_STRING(sScrollX_id, cx, "scrollX");
- SET_JSVAL_TO_STRING(sScrollY_id, cx, "scrollY");
- SET_JSVAL_TO_STRING(sScrollMaxX_id, cx, "scrollMaxX");
- SET_JSVAL_TO_STRING(sScrollMaxY_id, cx, "scrollMaxY");
- SET_JSVAL_TO_STRING(sOpen_id, cx, "open");
- SET_JSVAL_TO_STRING(sItem_id, cx, "item");
- SET_JSVAL_TO_STRING(sNamedItem_id, cx, "namedItem");
- SET_JSVAL_TO_STRING(sEnumerate_id, cx, "enumerateProperties");
- SET_JSVAL_TO_STRING(sNavigator_id, cx, "navigator");
- SET_JSVAL_TO_STRING(sDocument_id, cx, "document");
- SET_JSVAL_TO_STRING(sWindow_id, cx, "window");
- SET_JSVAL_TO_STRING(sFrames_id, cx, "frames");
- SET_JSVAL_TO_STRING(sSelf_id, cx, "self");
- SET_JSVAL_TO_STRING(sOpener_id, cx, "opener");
- SET_JSVAL_TO_STRING(sAll_id, cx, "all");
- SET_JSVAL_TO_STRING(sTags_id, cx, "tags");
- SET_JSVAL_TO_STRING(sAddEventListener_id,cx, "addEventListener");
- SET_JSVAL_TO_STRING(sBaseURIObject_id, cx, "baseURIObject");
- SET_JSVAL_TO_STRING(sNodePrincipal_id, cx, "nodePrincipal");
- SET_JSVAL_TO_STRING(sDocumentURIObject_id,cx,"documentURIObject");
- SET_JSVAL_TO_STRING(sOncopy_id, cx, "oncopy");
- SET_JSVAL_TO_STRING(sOncut_id, cx, "oncut");
- SET_JSVAL_TO_STRING(sOnpaste_id, cx, "onpaste");
- SET_JSVAL_TO_STRING(sJava_id, cx, "java");
- SET_JSVAL_TO_STRING(sPackages_id, cx, "Packages");
+ SET_JSID_TO_STRING(sTop_id, cx, "top");
+ SET_JSID_TO_STRING(sParent_id, cx, "parent");
+ SET_JSID_TO_STRING(sScrollbars_id, cx, "scrollbars");
+ SET_JSID_TO_STRING(sLocation_id, cx, "location");
+ SET_JSID_TO_STRING(sConstructor_id, cx, "constructor");
+ SET_JSID_TO_STRING(s_content_id, cx, "_content");
+ SET_JSID_TO_STRING(sContent_id, cx, "content");
+ SET_JSID_TO_STRING(sMenubar_id, cx, "menubar");
+ SET_JSID_TO_STRING(sToolbar_id, cx, "toolbar");
+ SET_JSID_TO_STRING(sLocationbar_id, cx, "locationbar");
+ SET_JSID_TO_STRING(sPersonalbar_id, cx, "personalbar");
+ SET_JSID_TO_STRING(sStatusbar_id, cx, "statusbar");
+ SET_JSID_TO_STRING(sDialogArguments_id, cx, "dialogArguments");
+ SET_JSID_TO_STRING(sControllers_id, cx, "controllers");
+ SET_JSID_TO_STRING(sLength_id, cx, "length");
+ SET_JSID_TO_STRING(sInnerHeight_id, cx, "innerHeight");
+ SET_JSID_TO_STRING(sInnerWidth_id, cx, "innerWidth");
+ SET_JSID_TO_STRING(sOuterHeight_id, cx, "outerHeight");
+ SET_JSID_TO_STRING(sOuterWidth_id, cx, "outerWidth");
+ SET_JSID_TO_STRING(sScreenX_id, cx, "screenX");
+ SET_JSID_TO_STRING(sScreenY_id, cx, "screenY");
+ SET_JSID_TO_STRING(sStatus_id, cx, "status");
+ SET_JSID_TO_STRING(sName_id, cx, "name");
+ SET_JSID_TO_STRING(sOnmousedown_id, cx, "onmousedown");
+ SET_JSID_TO_STRING(sOnmouseup_id, cx, "onmouseup");
+ SET_JSID_TO_STRING(sOnclick_id, cx, "onclick");
+ SET_JSID_TO_STRING(sOndblclick_id, cx, "ondblclick");
+ SET_JSID_TO_STRING(sOncontextmenu_id, cx, "oncontextmenu");
+ SET_JSID_TO_STRING(sOnmouseover_id, cx, "onmouseover");
+ SET_JSID_TO_STRING(sOnmouseout_id, cx, "onmouseout");
+ SET_JSID_TO_STRING(sOnkeydown_id, cx, "onkeydown");
+ SET_JSID_TO_STRING(sOnkeyup_id, cx, "onkeyup");
+ SET_JSID_TO_STRING(sOnkeypress_id, cx, "onkeypress");
+ SET_JSID_TO_STRING(sOnmousemove_id, cx, "onmousemove");
+ SET_JSID_TO_STRING(sOnfocus_id, cx, "onfocus");
+ SET_JSID_TO_STRING(sOnblur_id, cx, "onblur");
+ SET_JSID_TO_STRING(sOnsubmit_id, cx, "onsubmit");
+ SET_JSID_TO_STRING(sOnreset_id, cx, "onreset");
+ SET_JSID_TO_STRING(sOnchange_id, cx, "onchange");
+ SET_JSID_TO_STRING(sOnselect_id, cx, "onselect");
+ SET_JSID_TO_STRING(sOnload_id, cx, "onload");
+ SET_JSID_TO_STRING(sOnpopstate_id, cx, "onpopstate");
+ SET_JSID_TO_STRING(sOnbeforeunload_id, cx, "onbeforeunload");
+ SET_JSID_TO_STRING(sOnunload_id, cx, "onunload");
+ SET_JSID_TO_STRING(sOnhashchange_id, cx, "onhashchange");
+ SET_JSID_TO_STRING(sOnreadystatechange_id, cx, "onreadystatechange");
+ SET_JSID_TO_STRING(sOnpageshow_id, cx, "onpageshow");
+ SET_JSID_TO_STRING(sOnpagehide_id, cx, "onpagehide");
+ SET_JSID_TO_STRING(sOnabort_id, cx, "onabort");
+ SET_JSID_TO_STRING(sOnerror_id, cx, "onerror");
+ SET_JSID_TO_STRING(sOnpaint_id, cx, "onpaint");
+ SET_JSID_TO_STRING(sOnresize_id, cx, "onresize");
+ SET_JSID_TO_STRING(sOnscroll_id, cx, "onscroll");
+ SET_JSID_TO_STRING(sOndrag_id, cx, "ondrag");
+ SET_JSID_TO_STRING(sOndragend_id, cx, "ondragend");
+ SET_JSID_TO_STRING(sOndragenter_id, cx, "ondragenter");
+ SET_JSID_TO_STRING(sOndragleave_id, cx, "ondragleave");
+ SET_JSID_TO_STRING(sOndragover_id, cx, "ondragover");
+ SET_JSID_TO_STRING(sOndragstart_id, cx, "ondragstart");
+ SET_JSID_TO_STRING(sOndrop_id, cx, "ondrop");
+ SET_JSID_TO_STRING(sScrollX_id, cx, "scrollX");
+ SET_JSID_TO_STRING(sScrollY_id, cx, "scrollY");
+ SET_JSID_TO_STRING(sScrollMaxX_id, cx, "scrollMaxX");
+ SET_JSID_TO_STRING(sScrollMaxY_id, cx, "scrollMaxY");
+ SET_JSID_TO_STRING(sOpen_id, cx, "open");
+ SET_JSID_TO_STRING(sItem_id, cx, "item");
+ SET_JSID_TO_STRING(sNamedItem_id, cx, "namedItem");
+ SET_JSID_TO_STRING(sEnumerate_id, cx, "enumerateProperties");
+ SET_JSID_TO_STRING(sNavigator_id, cx, "navigator");
+ SET_JSID_TO_STRING(sDocument_id, cx, "document");
+ SET_JSID_TO_STRING(sWindow_id, cx, "window");
+ SET_JSID_TO_STRING(sFrames_id, cx, "frames");
+ SET_JSID_TO_STRING(sSelf_id, cx, "self");
+ SET_JSID_TO_STRING(sOpener_id, cx, "opener");
+ SET_JSID_TO_STRING(sAll_id, cx, "all");
+ SET_JSID_TO_STRING(sTags_id, cx, "tags");
+ SET_JSID_TO_STRING(sAddEventListener_id,cx, "addEventListener");
+ SET_JSID_TO_STRING(sBaseURIObject_id, cx, "baseURIObject");
+ SET_JSID_TO_STRING(sNodePrincipal_id, cx, "nodePrincipal");
+ SET_JSID_TO_STRING(sDocumentURIObject_id,cx,"documentURIObject");
+ SET_JSID_TO_STRING(sOncopy_id, cx, "oncopy");
+ SET_JSID_TO_STRING(sOncut_id, cx, "oncut");
+ SET_JSID_TO_STRING(sOnpaste_id, cx, "onpaste");
+ SET_JSID_TO_STRING(sJava_id, cx, "java");
+ SET_JSID_TO_STRING(sPackages_id, cx, "Packages");
return NS_OK;
}
static nsresult
CreateExceptionFromResult(JSContext *cx, nsresult aResult)
{
nsCOMPtr<nsIExceptionService> xs =
@@ -1857,17 +1856,17 @@ nsDOMClassInfo::ObjectIsNativeWrapper(JS
nsIScriptContext *scx = GetScriptContextFromJSContext(cx);
NS_PRECONDITION(!scx || !scx->IsContextInitialized() ||
sXPCNativeWrapperGetPropertyOp,
"Must know what the XPCNativeWrapper class GetProperty op is!");
}
#endif
- JSPropertyOp op = obj->getClass()->getProperty;
+ JSPropertyOp op = obj->getJSClass()->getProperty;
return !!op && (op == sXPCNativeWrapperGetPropertyOp ||
op == sXrayWrapperPropertyHolderGetPropertyOp);
}
nsDOMClassInfo::nsDOMClassInfo(nsDOMClassInfoData* aData) : mData(aData)
{
}
@@ -4097,34 +4096,35 @@ nsDOMClassInfo::Init()
sIsInitialized = PR_TRUE;
return NS_OK;
}
// static
PRInt32
-nsDOMClassInfo::GetArrayIndexFromId(JSContext *cx, jsval id, PRBool *aIsNumber)
-{
- jsdouble array_index;
-
+nsDOMClassInfo::GetArrayIndexFromId(JSContext *cx, jsid id, PRBool *aIsNumber)
+{
if (aIsNumber) {
*aIsNumber = PR_FALSE;
}
- JSAutoRequest ar(cx);
-
- if (!::JS_ValueToNumber(cx, id, &array_index)) {
- return -1;
- }
-
- jsint i = -1;
-
- if (!::JS_DoubleIsInt32(array_index, &i)) {
- return -1;
+ jsint i;
+ if (JSID_IS_INT(id)) {
+ i = JSID_TO_INT(id);
+ } else {
+ JSAutoRequest ar(cx);
+
+ jsval idval;
+ jsdouble array_index;
+ if (!::JS_IdToValue(cx, id, &idval) ||
+ !::JS_ValueToNumber(cx, idval, &array_index) ||
+ !::JS_DoubleIsInt32(array_index, &i)) {
+ return -1;
+ }
}
if (aIsNumber) {
*aIsNumber = PR_TRUE;
}
return i;
}
@@ -4276,47 +4276,47 @@ nsDOMClassInfo::PostCreate(nsIXPConnectW
{
NS_WARNING("nsDOMClassInfo::PostCreate Don't call me!");
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
nsDOMClassInfo::AddProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval)
{
NS_WARNING("nsDOMClassInfo::AddProperty Don't call me!");
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
nsDOMClassInfo::DelProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval)
{
NS_WARNING("nsDOMClassInfo::DelProperty Don't call me!");
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
nsDOMClassInfo::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval)
{
NS_WARNING("nsDOMClassInfo::GetProperty Don't call me!");
return NS_OK;
}
NS_IMETHODIMP
nsDOMClassInfo::SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval)
{
NS_WARNING("nsDOMClassInfo::SetProperty Don't call me!");
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
@@ -4364,32 +4364,30 @@ nsDOMClassInfo::ResolveConstructor(JSCon
}
if (!JSVAL_IS_PRIMITIVE(val)) {
// If val is not an (non-null) object there either is no
// constructor for this class, or someone messed with
// window.classname, just fall through and let the JS engine
// return the Object constructor.
- JSString *str = JSVAL_TO_STRING(sConstructor_id);
- if (!::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), val, nsnull, nsnull,
- JSPROP_ENUMERATE)) {
+ if (!::JS_DefinePropertyById(cx, obj, sConstructor_id, val, nsnull, nsnull,
+ JSPROP_ENUMERATE)) {
return NS_ERROR_UNEXPECTED;
}
*objp = obj;
}
return NS_OK;
}
NS_IMETHODIMP
nsDOMClassInfo::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval)
{
if (id == sConstructor_id && !(flags & JSRESOLVE_ASSIGNING)) {
return ResolveConstructor(cx, obj, objp);
}
return NS_OK;
}
@@ -4410,17 +4408,17 @@ nsDOMClassInfo::Finalize(nsIXPConnectWra
{
NS_WARNING("nsDOMClassInfo::Finalize Don't call me!");
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
nsDOMClassInfo::CheckAccess(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 mode,
+ JSObject *obj, jsid id, PRUint32 mode,
jsval *vp, PRBool *_retval)
{
PRUint32 mode_type = mode & JSACC_TYPEMASK;
if ((mode_type == JSACC_WATCH ||
mode_type == JSACC_PROTO ||
mode_type == JSACC_PARENT) &&
sSecMan) {
@@ -4465,17 +4463,17 @@ nsDOMClassInfo::Construct(nsIXPConnectWr
{
NS_WARNING("nsDOMClassInfo::Construct Don't call me!");
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
nsDOMClassInfo::HasInstance(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval val, PRBool *bp,
+ JSObject *obj, const jsval &val, PRBool *bp,
PRBool *_retval)
{
NS_WARNING("nsDOMClassInfo::HasInstance Don't call me!");
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
@@ -4484,17 +4482,17 @@ nsDOMClassInfo::Trace(nsIXPConnectWrappe
{
NS_WARNING("nsDOMClassInfo::Trace Don't call me!");
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
nsDOMClassInfo::Equality(nsIXPConnectWrappedNative *wrapper, JSContext * cx,
- JSObject * obj, jsval val, PRBool *bp)
+ JSObject * obj, const jsval &val, PRBool *bp)
{
NS_WARNING("nsDOMClassInfo::Equality Don't call me!");
return NS_ERROR_UNEXPECTED;
}
NS_IMETHODIMP
nsDOMClassInfo::OuterObject(nsIXPConnectWrappedNative *wrapper, JSContext * cx,
@@ -4728,99 +4726,99 @@ nsDOMClassInfo::ShutDown()
if (sClassInfoData[0].u.mConstructorFptr) {
PRUint32 i;
for (i = 0; i < eDOMClassInfoIDCount; i++) {
NS_IF_RELEASE(sClassInfoData[i].mCachedClassInfo);
}
}
- sTop_id = JSVAL_VOID;
- sParent_id = JSVAL_VOID;
- sScrollbars_id = JSVAL_VOID;
- sLocation_id = JSVAL_VOID;
- sConstructor_id = JSVAL_VOID;
- s_content_id = JSVAL_VOID;
- sContent_id = JSVAL_VOID;
- sMenubar_id = JSVAL_VOID;
- sToolbar_id = JSVAL_VOID;
- sLocationbar_id = JSVAL_VOID;
- sPersonalbar_id = JSVAL_VOID;
- sStatusbar_id = JSVAL_VOID;
- sDialogArguments_id = JSVAL_VOID;
- sControllers_id = JSVAL_VOID;
- sLength_id = JSVAL_VOID;
- sInnerHeight_id = JSVAL_VOID;
- sInnerWidth_id = JSVAL_VOID;
- sOuterHeight_id = JSVAL_VOID;
- sOuterWidth_id = JSVAL_VOID;
- sScreenX_id = JSVAL_VOID;
- sScreenY_id = JSVAL_VOID;
- sStatus_id = JSVAL_VOID;
- sName_id = JSVAL_VOID;
- sOnmousedown_id = JSVAL_VOID;
- sOnmouseup_id = JSVAL_VOID;
- sOnclick_id = JSVAL_VOID;
- sOndblclick_id = JSVAL_VOID;
- sOncontextmenu_id = JSVAL_VOID;
- sOnmouseover_id = JSVAL_VOID;
- sOnmouseout_id = JSVAL_VOID;
- sOnkeydown_id = JSVAL_VOID;
- sOnkeyup_id = JSVAL_VOID;
- sOnkeypress_id = JSVAL_VOID;
- sOnmousemove_id = JSVAL_VOID;
- sOnfocus_id = JSVAL_VOID;
- sOnblur_id = JSVAL_VOID;
- sOnsubmit_id = JSVAL_VOID;
- sOnreset_id = JSVAL_VOID;
- sOnchange_id = JSVAL_VOID;
- sOnselect_id = JSVAL_VOID;
- sOnload_id = JSVAL_VOID;
- sOnbeforeunload_id = JSVAL_VOID;
- sOnunload_id = JSVAL_VOID;
- sOnhashchange_id = JSVAL_VOID;
- sOnreadystatechange_id = JSVAL_VOID;
- sOnpageshow_id = JSVAL_VOID;
- sOnpagehide_id = JSVAL_VOID;
- sOnabort_id = JSVAL_VOID;
- sOnerror_id = JSVAL_VOID;
- sOnpaint_id = JSVAL_VOID;
- sOnresize_id = JSVAL_VOID;
- sOnscroll_id = JSVAL_VOID;
- sOndrag_id = JSVAL_VOID;
- sOndragend_id = JSVAL_VOID;
- sOndragenter_id = JSVAL_VOID;
- sOndragleave_id = JSVAL_VOID;
- sOndragover_id = JSVAL_VOID;
- sOndragstart_id = JSVAL_VOID;
- sOndrop_id = JSVAL_VOID;
- sScrollX_id = JSVAL_VOID;
- sScrollY_id = JSVAL_VOID;
- sScrollMaxX_id = JSVAL_VOID;
- sScrollMaxY_id = JSVAL_VOID;
- sOpen_id = JSVAL_VOID;
- sItem_id = JSVAL_VOID;
- sEnumerate_id = JSVAL_VOID;
- sNavigator_id = JSVAL_VOID;
- sDocument_id = JSVAL_VOID;
- sWindow_id = JSVAL_VOID;
- sFrames_id = JSVAL_VOID;
- sSelf_id = JSVAL_VOID;
- sOpener_id = JSVAL_VOID;
- sAll_id = JSVAL_VOID;
- sTags_id = JSVAL_VOID;
- sAddEventListener_id= JSVAL_VOID;
- sBaseURIObject_id = JSVAL_VOID;
- sNodePrincipal_id = JSVAL_VOID;
- sDocumentURIObject_id=JSVAL_VOID;
- sOncopy_id = JSVAL_VOID;
- sOncut_id = JSVAL_VOID;
- sOnpaste_id = JSVAL_VOID;
- sJava_id = JSVAL_VOID;
- sPackages_id = JSVAL_VOID;
+ sTop_id = JSID_VOID;
+ sParent_id = JSID_VOID;
+ sScrollbars_id = JSID_VOID;
+ sLocation_id = JSID_VOID;
+ sConstructor_id = JSID_VOID;
+ s_content_id = JSID_VOID;
+ sContent_id = JSID_VOID;
+ sMenubar_id = JSID_VOID;
+ sToolbar_id = JSID_VOID;
+ sLocationbar_id = JSID_VOID;
+ sPersonalbar_id = JSID_VOID;
+ sStatusbar_id = JSID_VOID;
+ sDialogArguments_id = JSID_VOID;
+ sControllers_id = JSID_VOID;
+ sLength_id = JSID_VOID;
+ sInnerHeight_id = JSID_VOID;
+ sInnerWidth_id = JSID_VOID;
+ sOuterHeight_id = JSID_VOID;
+ sOuterWidth_id = JSID_VOID;
+ sScreenX_id = JSID_VOID;
+ sScreenY_id = JSID_VOID;
+ sStatus_id = JSID_VOID;
+ sName_id = JSID_VOID;
+ sOnmousedown_id = JSID_VOID;
+ sOnmouseup_id = JSID_VOID;
+ sOnclick_id = JSID_VOID;
+ sOndblclick_id = JSID_VOID;
+ sOncontextmenu_id = JSID_VOID;
+ sOnmouseover_id = JSID_VOID;
+ sOnmouseout_id = JSID_VOID;
+ sOnkeydown_id = JSID_VOID;
+ sOnkeyup_id = JSID_VOID;
+ sOnkeypress_id = JSID_VOID;
+ sOnmousemove_id = JSID_VOID;
+ sOnfocus_id = JSID_VOID;
+ sOnblur_id = JSID_VOID;
+ sOnsubmit_id = JSID_VOID;
+ sOnreset_id = JSID_VOID;
+ sOnchange_id = JSID_VOID;
+ sOnselect_id = JSID_VOID;
+ sOnload_id = JSID_VOID;
+ sOnbeforeunload_id = JSID_VOID;
+ sOnunload_id = JSID_VOID;
+ sOnhashchange_id = JSID_VOID;
+ sOnreadystatechange_id = JSID_VOID;
+ sOnpageshow_id = JSID_VOID;
+ sOnpagehide_id = JSID_VOID;
+ sOnabort_id = JSID_VOID;
+ sOnerror_id = JSID_VOID;
+ sOnpaint_id = JSID_VOID;
+ sOnresize_id = JSID_VOID;
+ sOnscroll_id = JSID_VOID;
+ sOndrag_id = JSID_VOID;
+ sOndragend_id = JSID_VOID;
+ sOndragenter_id = JSID_VOID;
+ sOndragleave_id = JSID_VOID;
+ sOndragover_id = JSID_VOID;
+ sOndragstart_id = JSID_VOID;
+ sOndrop_id = JSID_VOID;
+ sScrollX_id = JSID_VOID;
+ sScrollY_id = JSID_VOID;
+ sScrollMaxX_id = JSID_VOID;
+ sScrollMaxY_id = JSID_VOID;
+ sOpen_id = JSID_VOID;
+ sItem_id = JSID_VOID;
+ sEnumerate_id = JSID_VOID;
+ sNavigator_id = JSID_VOID;
+ sDocument_id = JSID_VOID;
+ sWindow_id = JSID_VOID;
+ sFrames_id = JSID_VOID;
+ sSelf_id = JSID_VOID;
+ sOpener_id = JSID_VOID;
+ sAll_id = JSID_VOID;
+ sTags_id = JSID_VOID;
+ sAddEventListener_id= JSID_VOID;
+ sBaseURIObject_id = JSID_VOID;
+ sNodePrincipal_id = JSID_VOID;
+ sDocumentURIObject_id=JSID_VOID;
+ sOncopy_id = JSID_VOID;
+ sOncut_id = JSID_VOID;
+ sOnpaste_id = JSID_VOID;
+ sJava_id = JSID_VOID;
+ sPackages_id = JSID_VOID;
NS_IF_RELEASE(sXPConnect);
NS_IF_RELEASE(sSecMan);
sIsInitialized = PR_FALSE;
}
// Window helper
@@ -4874,17 +4872,17 @@ static JSClass sGlobalScopePolluterClass
(JSResolveOp)nsWindowSH::GlobalScopePolluterNewResolve, JS_ConvertStub,
nsHTMLDocumentSH::ReleaseDocument
};
// static
JSBool
nsWindowSH::GlobalScopePolluterGetProperty(JSContext *cx, JSObject *obj,
- jsval id, jsval *vp)
+ jsid id, jsval *vp)
{
// Someone is accessing a element by referencing its name/id in the
// global scope, do a security check to make sure that's ok.
nsresult rv =
sSecMan->CheckPropertyAccess(cx, ::JS_GetGlobalForObject(cx, obj),
"Window", id,
nsIXPCSecurityManager::ACCESS_GET_PROPERTY);
@@ -4900,17 +4898,17 @@ nsWindowSH::GlobalScopePolluterGetProper
// catch and fix these mistakes.
PrintWarningOnConsole(cx, "GlobalScopeElementReference");
return JS_TRUE;
}
// static
JSBool
-nsWindowSH::SecurityCheckOnSetProp(JSContext *cx, JSObject *obj, jsval id,
+nsWindowSH::SecurityCheckOnSetProp(JSContext *cx, JSObject *obj, jsid id,
jsval *vp)
{
// Someone is accessing a element by referencing its name/id in the
// global scope, do a security check to make sure that's ok.
nsresult rv =
sSecMan->CheckPropertyAccess(cx, ::JS_GetGlobalForObject(cx, obj),
"Window", id,
@@ -4919,22 +4917,22 @@ nsWindowSH::SecurityCheckOnSetProp(JSCon
// If !NS_SUCCEEDED(rv) the security check failed. The security
// manager set a JS exception for us.
return NS_SUCCEEDED(rv);
}
// static
JSBool
nsWindowSH::GlobalScopePolluterNewResolve(JSContext *cx, JSObject *obj,
- jsval id, uintN flags,
+ jsid id, uintN flags,
JSObject **objp)
{
if (flags & (JSRESOLVE_ASSIGNING | JSRESOLVE_DECLARING |
JSRESOLVE_CLASSNAME | JSRESOLVE_QUALIFIED) ||
- !JSVAL_IS_STRING(id)) {
+ !JSID_IS_STRING(id)) {
// Nothing to do here if we're either assigning or declaring,
// resolving a class name, doing a qualified resolve, or
// resolving a number.
return JS_TRUE;
}
nsIHTMLDocument *doc = (nsIHTMLDocument *)::JS_GetPrivate(cx, obj);
@@ -4944,21 +4942,20 @@ nsWindowSH::GlobalScopePolluterNewResolv
document->GetCompatibilityMode() != eCompatibility_NavQuirks) {
// If we don't have a document, or if the document is not in
// quirks mode, return early.
return JS_TRUE;
}
JSObject *proto = ::JS_GetPrototype(cx, obj);
- JSString *jsstr = JSVAL_TO_STRING(id);
+ JSString *jsstr = JSID_TO_STRING(id);
JSBool hasProp;
- if (!proto || !::JS_HasUCProperty(cx, proto, ::JS_GetStringChars(jsstr),
- ::JS_GetStringLength(jsstr), &hasProp) ||
+ if (!proto || !::JS_HasPropertyById(cx, proto, id, &hasProp) ||
hasProp) {
// No prototype, or the property exists on the prototype. Do
// nothing.
return JS_TRUE;
}
nsDependentJSString str(jsstr);
@@ -4970,19 +4967,17 @@ nsWindowSH::GlobalScopePolluterNewResolv
if (result) {
jsval v;
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
nsresult rv = WrapNative(cx, obj, result, PR_TRUE, &v,
getter_AddRefs(holder));
NS_ENSURE_SUCCESS(rv, JS_FALSE);
- if (!::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(jsstr),
- ::JS_GetStringLength(jsstr), v, nsnull, nsnull,
- 0)) {
+ if (!::JS_DefinePropertyById(cx, obj, id, v, nsnull, nsnull, 0)) {
nsDOMClassInfo::ThrowJSException(cx, NS_ERROR_UNEXPECTED);
return JS_FALSE;
}
*objp = obj;
}
@@ -5066,33 +5061,33 @@ nsWindowSH::InstallGlobalScopePolluter(J
// invalidation).
NS_ADDREF(doc);
return NS_OK;
}
static
already_AddRefed<nsIDOMWindow>
-GetChildFrame(nsGlobalWindow *win, jsval id)
+GetChildFrame(nsGlobalWindow *win, jsid id)
{
nsCOMPtr<nsIDOMWindowCollection> frames;
win->GetFrames(getter_AddRefs(frames));
nsIDOMWindow *frame = nsnull;
if (frames) {
- frames->Item(JSVAL_TO_INT(id), &frame);
+ frames->Item(JSID_TO_INT(id), &frame);
}
return frame;
}
NS_IMETHODIMP
nsWindowSH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
nsGlobalWindow *win = nsGlobalWindow::FromWrapper(wrapper);
JSAutoRequest ar(cx);
#ifdef DEBUG_SH_FORWARDING
{
JSString *jsstr = ::JS_ValueToString(cx, id);
@@ -5122,38 +5117,35 @@ nsWindowSH::GetProperty(nsIXPConnectWrap
JSObject *innerObj;
if (innerWin && (innerObj = innerWin->GetGlobalJSObject())) {
#ifdef DEBUG_SH_FORWARDING
printf(" --- Forwarding get to inner window %p\n", (void *)innerWin);
#endif
// Forward the get to the inner object
- if (JSVAL_IS_STRING(id)) {
- JSString *str = JSVAL_TO_STRING(id);
-
- *_retval = ::JS_GetUCProperty(cx, innerObj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), vp);
- } else if (JSVAL_IS_INT(id)) {
- *_retval = ::JS_GetElement(cx, innerObj, JSVAL_TO_INT(id), vp);
+ if (JSID_IS_STRING(id)) {
+ *_retval = ::JS_GetPropertyById(cx, innerObj, id, vp);
+ } else if (JSID_IS_INT(id)) {
+ *_retval = ::JS_GetElement(cx, innerObj, JSID_TO_INT(id), vp);
} else {
NS_ERROR("Write me!");
return NS_ERROR_NOT_IMPLEMENTED;
}
return NS_OK;
}
}
// The order in which things are done in this method are a bit
// whacky, that's because this method is *extremely* performace
// critical. Don't touch this unless you know what you're doing.
- if (JSVAL_IS_INT(id)) {
+ if (JSID_IS_INT(id)) {
// If we're accessing a numeric property we'll treat that as if
// window.frames[n] is accessed (since window.frames === window),
// if window.frames[n] is a child frame, wrap the frame and return
// it without doing a security check.
nsCOMPtr<nsIDOMWindow> frame = GetChildFrame(win, id);
nsresult rv = NS_OK;
@@ -5179,17 +5171,17 @@ nsWindowSH::GetProperty(nsIXPConnectWrap
rv = sXPConnect->GetXOWForObject(cx, scopeobj, JSVAL_TO_OBJECT(*vp),
vp);
}
}
return NS_FAILED(rv) ? rv : NS_SUCCESS_I_DID_SOMETHING;
}
- if (JSVAL_IS_STRING(id) && !JSVAL_IS_PRIMITIVE(*vp) &&
+ if (JSID_IS_STRING(id) && !JSVAL_IS_PRIMITIVE(*vp) &&
::JS_TypeOfValue(cx, *vp) != JSTYPE_FUNCTION) {
// A named property accessed which could have been resolved to a
// child frame in nsWindowSH::NewResolve() (*vp will tell us if
// that's the case). If *vp is a window object (i.e. a child
// frame), return without doing a security check.
//
// Calling GetWrappedNativeOfJSObject() is not all that cheap, so
// only do that if the JSClass name is one that is likely to be a
@@ -5221,17 +5213,17 @@ nsWindowSH::GetProperty(nsIXPConnectWrap
}
}
return NS_OK;
}
NS_IMETHODIMP
nsWindowSH::SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
nsGlobalWindow *win = nsGlobalWindow::FromWrapper(wrapper);
#ifdef DEBUG_SH_FORWARDING
{
nsDependentJSString str(::JS_ValueToString(cx, id));
if (win->IsInnerWindow()) {
@@ -5256,23 +5248,20 @@ nsWindowSH::SetProperty(nsIXPConnectWrap
JSObject *innerObj;
if (innerWin && (innerObj = innerWin->GetGlobalJSObject())) {
#ifdef DEBUG_SH_FORWARDING
printf(" --- Forwarding set to inner window %p\n", (void *)innerWin);
#endif
// Forward the set to the inner object
- if (JSVAL_IS_STRING(id)) {
- JSString *str = JSVAL_TO_STRING(id);
-
- *_retval = ::JS_SetUCProperty(cx, innerObj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), vp);
- } else if (JSVAL_IS_INT(id)) {
- *_retval = ::JS_SetElement(cx, innerObj, JSVAL_TO_INT(id), vp);
+ if (JSID_IS_STRING(id)) {
+ *_retval = ::JS_SetPropertyById(cx, innerObj, id, vp);
+ } else if (JSID_IS_INT(id)) {
+ *_retval = ::JS_SetElement(cx, innerObj, JSID_TO_INT(id), vp);
} else {
NS_ERROR("Write me!");
return NS_ERROR_NOT_IMPLEMENTED;
}
return NS_OK;
}
@@ -5301,17 +5290,17 @@ nsWindowSH::SetProperty(nsIXPConnectWrap
return NS_FAILED(rv) ? rv : NS_SUCCESS_I_DID_SOMETHING;
}
return nsEventReceiverSH::SetProperty(wrapper, cx, obj, id, vp, _retval);
}
NS_IMETHODIMP
nsWindowSH::AddProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval)
{
nsGlobalWindow *win = nsGlobalWindow::FromWrapper(wrapper);
#ifdef DEBUG_SH_FORWARDING
{
nsDependentJSString str(::JS_ValueToString(cx, id));
@@ -5340,43 +5329,37 @@ nsWindowSH::AddProperty(nsIXPConnectWrap
if (sResolving) {
return NS_OK;
}
#ifdef DEBUG_SH_FORWARDING
printf(" --- Forwarding add to inner window %p\n", (void *)innerWin);
#endif
- jsid interned_id;
- if (!JS_ValueToId(cx, id, &interned_id)) {
- *_retval = JS_FALSE;
- return NS_OK;
- }
-
JSPropertyDescriptor desc;
- if (!JS_GetPropertyDescriptorById(cx, obj, interned_id,
+ if (!JS_GetPropertyDescriptorById(cx, obj, id,
JSRESOLVE_QUALIFIED, &desc)) {
*_retval = JS_FALSE;
return NS_OK;
}
// Forward the add to the inner object
- *_retval = JS_DefinePropertyById(cx, innerObj, interned_id, *vp,
+ *_retval = JS_DefinePropertyById(cx, innerObj, id, *vp,
desc.getter, desc.setter,
desc.attrs | JSPROP_ENUMERATE);
return NS_OK;
}
}
return nsEventReceiverSH::AddProperty(wrapper, cx, obj, id, vp, _retval);
}
NS_IMETHODIMP
nsWindowSH::DelProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval)
{
nsGlobalWindow *win = nsGlobalWindow::FromWrapper(wrapper);
#ifdef DEBUG_SH_FORWARDING
{
nsDependentJSString str(::JS_ValueToString(cx, id));
@@ -5400,19 +5383,17 @@ nsWindowSH::DelProperty(nsIXPConnectWrap
JSObject *innerObj;
if (innerWin && (innerObj = innerWin->GetGlobalJSObject())) {
#ifdef DEBUG_SH_FORWARDING
printf(" --- Forwarding del to inner window %p\n", (void *)innerWin);
#endif
// Forward the del to the inner object
- jsid interned_id;
- *_retval = (JS_ValueToId(cx, id, &interned_id) &&
- JS_DeletePropertyById(cx, innerObj, interned_id));
+ *_retval = JS_DeletePropertyById(cx, innerObj, id);
return NS_OK;
}
}
// Notify any XOWs on our outer window.
nsGlobalWindow *outerWin = win->GetOuterWindowInternal();
@@ -5612,71 +5593,60 @@ DefineInterfaceConstants(JSContext *cx,
}
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLBodyElementSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext
- *cx, JSObject *obj, jsval id, PRUint32 flags,
+ *cx, JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval)
{
if (id == sOnhashchange_id) {
// Special handling so |"onhashchange" in document.body| returns true.
- jsid interned_id;
-
- if (!JS_ValueToId(cx, id, &interned_id) ||
- !JS_DefinePropertyById(cx, obj, interned_id, JSVAL_VOID,
+ if (!JS_DefinePropertyById(cx, obj, id, JSVAL_VOID,
nsnull, nsnull, JSPROP_ENUMERATE)) {
*_retval = PR_FALSE;
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
return nsElementSH::NewResolve(wrapper, cx, obj, id, flags, objp, _retval);
}
NS_IMETHODIMP
nsHTMLBodyElementSH::GetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
if (id == sOnhashchange_id) {
// Forward the request to the Window.
- jsid interned_id;
-
- if (!JS_ValueToId(cx, id, &interned_id) ||
- !JS_GetPropertyById(cx, JS_GetGlobalForObject(cx, obj),
- interned_id, vp)) {
+ if (!JS_GetPropertyById(cx, JS_GetGlobalForObject(cx, obj), id, vp)) {
*_retval = PR_FALSE;
return NS_ERROR_FAILURE;
}
return NS_OK;
}
return nsElementSH::GetProperty(wrapper, cx, obj, id, vp, _retval);
}
NS_IMETHODIMP
nsHTMLBodyElementSH::SetProperty(nsIXPConnectWrappedNative *wrapper,
JSContext *cx, JSObject *obj,
- jsval id, jsval *vp, PRBool *_retval)
+ jsid id, jsval *vp, PRBool *_retval)
{
if (id == sOnhashchange_id) {
// Forward the request to the Window.
- jsid interned_id;
-
- if (!JS_ValueToId(cx, id, &interned_id) ||
- !JS_SetPropertyById(cx, JS_GetGlobalForObject(cx, obj),
- interned_id, vp)) {
+ if (!JS_SetPropertyById(cx, JS_GetGlobalForObject(cx, obj), id, vp)) {
*_retval = PR_FALSE;
return NS_ERROR_FAILURE;
}
return NS_OK;
}
return nsElementSH::SetProperty(wrapper, cx, obj, id, vp, _retval);
@@ -5705,17 +5675,17 @@ public:
NS_DECL_ISUPPORTS
NS_DECL_NSIDOMDOMCONSTRUCTOR
nsresult Construct(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj, PRUint32 argc, jsval *argv,
jsval *vp, PRBool *_retval);
nsresult HasInstance(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval val, PRBool *bp,
+ JSObject *obj, const jsval &val, PRBool *bp,
PRBool *_retval);
nsresult Install(JSContext *cx, JSObject *target, jsval thisAsVal)
{
JSBool ok =
::JS_DefineUCProperty(cx, target,
reinterpret_cast<const jschar *>(mClassName),
nsCRT::strlen(mClassName), thisAsVal, nsnull,
@@ -5865,17 +5835,17 @@ nsDOMConstructor::Construct(nsIXPConnect
}
return BaseStubConstructor(mWeakOwner, name_struct, cx, obj, argc, argv, vp);
}
nsresult
nsDOMConstructor::HasInstance(nsIXPConnectWrappedNative *wrapper,
JSContext * cx, JSObject * obj,
- jsval v, PRBool *bp, PRBool *_retval)
+ const jsval &v, PRBool *bp, PRBool *_retval)
{
// No need to look these up in the hash.
if (JSVAL_IS_PRIMITIVE(v)) {
return NS_OK;
}
JSObject *dom_obj = JSVAL_TO_OBJECT(v);
@@ -6467,17 +6437,17 @@ ContentWindowGetter(JSContext *cx, JSObj
return ::JS_GetProperty(cx, obj, "content", rval);
}
PRBool
nsWindowSH::sResolving = PR_FALSE;
NS_IMETHODIMP
nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval)
{
nsGlobalWindow *win = nsGlobalWindow::FromWrapper(wrapper);
#ifdef DEBUG_SH_FORWARDING
{
nsDependentJSString str(::JS_ValueToString(cx, id));
@@ -6533,22 +6503,19 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
JSObject *realObj;
wrapper->GetJSObject(&realObj);
if (realObj == obj &&
innerWin && (innerObj = innerWin->GetGlobalJSObject())) {
#ifdef DEBUG_SH_FORWARDING
printf(" --- Forwarding resolve to inner window %p\n", (void *)innerWin);
#endif
- jsid interned_id;
JSPropertyDescriptor desc;
- *_retval = (JS_ValueToId(cx, id, &interned_id) &&
- JS_GetPropertyDescriptorById(cx, innerObj, interned_id,
- flags, &desc));
+ *_retval = JS_GetPropertyDescriptorById(cx, innerObj, id, flags, &desc);
if (*_retval && desc.obj) {
#ifdef DEBUG_SH_FORWARDING
printf(" --- Resolve on inner window found property.\n");
#endif
// The JS engine assumes that the object that we return in objp is on
// our prototype chain. As a result, for an assignment, it wants to
@@ -6561,47 +6528,47 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
// we only care about fast expandos on the innerObj itself, things
// found further up the prototype chain need to fend for themselves.
if ((flags & JSRESOLVE_ASSIGNING) &&
!(desc.attrs & (JSPROP_GETTER | JSPROP_SETTER)) &&
desc.obj == innerObj) {
PRBool oldResolving = sResolving;
sResolving = PR_TRUE;
- *_retval = JS_DefinePropertyById(cx, obj, interned_id, JSVAL_VOID,
+ *_retval = JS_DefinePropertyById(cx, obj, id, JSVAL_VOID,
nsnull, nsnull,
desc.attrs & JSPROP_ENUMERATE);
sResolving = oldResolving;
if (!*_retval) {
return NS_OK;
}
}
*objp = desc.obj;
}
return NS_OK;
}
}
- if (!JSVAL_IS_STRING(id)) {
- if (JSVAL_IS_INT(id) && !(flags & JSRESOLVE_ASSIGNING)) {
+ if (!JSID_IS_STRING(id)) {
+ if (JSID_IS_INT(id) && !(flags & JSRESOLVE_ASSIGNING)) {
// If we're resolving a numeric property, treat that as if
// window.frames[n] is resolved (since window.frames ===
// window), if window.frames[n] is a child frame, define a
// property for this index.
nsCOMPtr<nsIDOMWindow> frame = GetChildFrame(win, id);
if (frame) {
// A numeric property accessed and the numeric property is a
// child frame. Define a property for this index.
- *_retval = ::JS_DefineElement(cx, obj, JSVAL_TO_INT(id), JSVAL_VOID,
+ *_retval = ::JS_DefineElement(cx, obj, JSID_TO_INT(id), JSVAL_VOID,
nsnull, nsnull, JSPROP_SHARED);
if (*_retval) {
*objp = obj;
}
}
}
@@ -6687,17 +6654,17 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
return NS_OK;
}
// Hmm, we do an awful lot of QIs here; maybe we should add a
// method on an interface that would let us just call into the
// window code directly...
- JSString *str = JSVAL_TO_STRING(id);
+ JSString *str = JSID_TO_STRING(id);
// Don't resolve named frames on native wrappers
if (!ObjectIsNativeWrapper(cx, obj)) {
nsCOMPtr<nsIDocShellTreeNode> dsn(do_QueryInterface(win->GetDocShell()));
PRInt32 count = 0;
if (dsn) {
@@ -6736,20 +6703,17 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
!strcmp(JSVAL_TO_OBJECT(v)->getClass()->name,
"XPCCrossOriginWrapper"),
"Didn't wrap a window!");
}
#endif
JSAutoRequest ar(cx);
- PRBool ok = ::JS_DefineUCProperty(cx, obj, chars,
- ::JS_GetStringLength(str),
- v, nsnull, nsnull, 0);
-
+ PRBool ok = ::JS_DefinePropertyById(cx, obj, id, v, nsnull, nsnull, 0);
if (!ok) {
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
@@ -6793,22 +6757,21 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
return NS_ERROR_OUT_OF_MEMORY;
}
JSObject *funObj = ::JS_GetFunctionObject(fun);
nsAutoGCRoot root(&funObj, &rv);
NS_ENSURE_SUCCESS(rv, rv);
- if (!::JS_DefineUCProperty(cx, windowObj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), JSVAL_VOID,
- JS_DATA_TO_FUNC_PTR(JSPropertyOp, funObj),
- nsnull,
- JSPROP_ENUMERATE | JSPROP_GETTER |
- JSPROP_SHARED)) {
+ if (!::JS_DefinePropertyById(cx, windowObj, id, JSVAL_VOID,
+ JS_DATA_TO_FUNC_PTR(JSPropertyOp, funObj),
+ nsnull,
+ JSPROP_ENUMERATE | JSPROP_GETTER |
+ JSPROP_SHARED)) {
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
@@ -6857,37 +6820,31 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
!strcmp(JSVAL_TO_OBJECT(v)->getClass()->name,
"XPCCrossOriginWrapper"),
"Didn't wrap a location object!");
}
#endif
JSAutoRequest ar(cx);
- JSBool ok = ::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), v, nsnull,
- nsnull,
- JSPROP_PERMANENT |
- JSPROP_ENUMERATE);
+ JSBool ok = ::JS_DefinePropertyById(cx, obj, id, v, nsnull, nsnull,
+ JSPROP_PERMANENT | JSPROP_ENUMERATE);
if (!ok) {
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
if (id == sOnhashchange_id) {
// Special handling so |"onhashchange" in window| returns true
- jsid interned_id;
-
- if (!JS_ValueToId(cx, id, &interned_id) ||
- !JS_DefinePropertyById(cx, obj, interned_id, JSVAL_VOID,
+ if (!JS_DefinePropertyById(cx, obj, id, JSVAL_VOID,
nsnull, nsnull, JSPROP_ENUMERATE)) {
*_retval = PR_FALSE;
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
@@ -6897,20 +6854,18 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
(!(flags & JSRESOLVE_QUALIFIED) && IsWritableReplaceable(id))) {
// A readonly "replaceable" property is being set, or a
// readwrite "replaceable" property is being set w/o being
// fully qualified. Define the property on obj with the value
// undefined to override the predefined property. This is done
// for compatibility with other browsers.
JSAutoRequest ar(cx);
- if (!::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str),
- JSVAL_VOID, JS_PropertyStub, JS_PropertyStub,
- JSPROP_ENUMERATE)) {
+ if (!::JS_DefinePropertyById(cx, obj, id, JSVAL_VOID, JS_PropertyStub,
+ JS_PropertyStub, JSPROP_ENUMERATE)) {
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
} else {
if (id == sNavigator_id) {
@@ -6921,20 +6876,19 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
jsval v;
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
rv = WrapNative(cx, obj, navigator, &NS_GET_IID(nsIDOMNavigator), PR_TRUE,
&v, getter_AddRefs(holder));
NS_ENSURE_SUCCESS(rv, rv);
JSAutoRequest ar(cx);
- if (!::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), v, nsnull, nsnull,
- JSPROP_READONLY | JSPROP_PERMANENT |
- JSPROP_ENUMERATE)) {
+ if (!::JS_DefinePropertyById(cx, obj, id, v, nsnull, nsnull,
+ JSPROP_READONLY | JSPROP_PERMANENT |
+ JSPROP_ENUMERATE)) {
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
if (id == sDocument_id) {
@@ -6987,20 +6941,18 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
scope = oldWin->GetGlobalJSObject();
}
rv = sXPConnect->GetXOWForObject(cx, scope, JSVAL_TO_OBJECT(winVal),
&winVal);
NS_ENSURE_SUCCESS(rv, rv);
}
PRBool ok =
- ::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str),
- winVal, JS_PropertyStub, JS_PropertyStub,
- JSPROP_READONLY | JSPROP_ENUMERATE);
+ ::JS_DefinePropertyById(cx, obj, id, winVal, JS_PropertyStub, JS_PropertyStub,
+ JSPROP_READONLY | JSPROP_ENUMERATE);
if (!ok) {
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
@@ -7071,22 +7023,20 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
if ((flags & JSRESOLVE_ASSIGNING) && !(flags & JSRESOLVE_WITH) &&
win->IsInnerWindow()) {
JSObject *realObj;
wrapper->GetJSObject(&realObj);
if (obj == realObj) {
JSObject *proto = obj->getProto();
if (proto) {
- jsid interned_id;
JSObject *pobj = NULL;
jsval val;
- if (!::JS_ValueToId(cx, id, &interned_id) ||
- !::JS_LookupPropertyWithFlagsById(cx, proto, interned_id, flags,
+ if (!::JS_LookupPropertyWithFlagsById(cx, proto, id, flags,
&pobj, &val)) {
*_retval = JS_FALSE;
return NS_OK;
}
if (pobj) {
// A property was found on the prototype chain.
@@ -7101,23 +7051,21 @@ nsWindowSH::NewResolve(nsIXPConnectWrapp
//
// We don't need to worry about property attributes here as we
// know here we're dealing with an undefined property set, so
// we're not declaring readonly or permanent properties.
//
// Since we always create the undeclared property here without given a
// chance for the interpreter to report applicable strict mode warnings,
// we must take care to check those warnings here.
- JSString *str = JSVAL_TO_STRING(id);
+ JSString *str = JSID_TO_STRING(id);
if ((!(flags & JSRESOLVE_QUALIFIED) &&
- !js_CheckUndeclaredVarAssignment(cx, id)) ||
- !::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), JSVAL_VOID,
- JS_PropertyStub, JS_PropertyStub,
- JSPROP_ENUMERATE)) {
+ !js_CheckUndeclaredVarAssignment(cx, str)) ||
+ !::JS_DefinePropertyById(cx, obj, id, JSVAL_VOID, JS_PropertyStub,
+ JS_PropertyStub, JSPROP_ENUMERATE)) {
*_retval = JS_FALSE;
return NS_OK;
}
*objp = obj;
}
}
@@ -7158,28 +7106,28 @@ nsWindowSH::NewEnumerate(nsIXPConnectWra
if (!iterator) {
return NS_ERROR_OUT_OF_MEMORY;
}
*statep = OBJECT_TO_JSVAL(iterator);
if (idp) {
// Note: With these property iterators, we can't tell ahead of time how
// many properties we're going to be iterating over.
- *idp = JSVAL_ZERO;
+ *idp = INT_TO_JSID(0);
}
break;
}
case JSENUMERATE_NEXT:
{
JSObject *iterator = (JSObject*)JSVAL_TO_OBJECT(*statep);
if (!JS_NextProperty(cx, iterator, idp)) {
return NS_ERROR_UNEXPECTED;
}
- if (*idp != JSVAL_VOID) {
+ if (*idp != JSID_VOID) {
break;
}
// Fall through.
}
case JSENUMERATE_DESTROY:
// Let GC at our iterator object.
*statep = JSVAL_NULL;
@@ -7198,17 +7146,17 @@ nsWindowSH::Finalize(nsIXPConnectWrapped
sgo->OnFinalize(nsIProgrammingLanguage::JAVASCRIPT, obj);
return NS_OK;
}
NS_IMETHODIMP
nsWindowSH::Equality(nsIXPConnectWrappedNative *wrapper, JSContext * cx,
- JSObject * obj, jsval val, PRBool *bp)
+ JSObject * obj, const jsval &val, PRBool *bp)
{
*bp = PR_FALSE;
if (JSVAL_IS_PRIMITIVE(val)) {
return NS_OK;
}
nsCOMPtr<nsIXPConnectWrappedNative> other_wrapper;
@@ -7295,17 +7243,17 @@ nsWindowSH::InnerObject(nsIXPConnectWrap
return NS_OK;
}
// DOM Location helper
NS_IMETHODIMP
nsLocationSH::CheckAccess(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 mode,
+ JSObject *obj, jsid id, PRUint32 mode,
jsval *vp, PRBool *_retval)
{
if ((mode & JSACC_TYPEMASK) == JSACC_PROTO && (mode & JSACC_WRITE)) {
// No setting location.__proto__, ever!
// Let XPConnect know that the access was not granted.
*_retval = PR_FALSE;
@@ -7400,29 +7348,26 @@ nsNodeSH::IsCapabilityEnabled(const char
{
PRBool enabled;
return sSecMan &&
NS_SUCCEEDED(sSecMan->IsCapabilityEnabled(aCapability, &enabled)) &&
enabled;
}
nsresult
-nsNodeSH::DefineVoidProp(JSContext* cx, JSObject* obj, jsval id,
+nsNodeSH::DefineVoidProp(JSContext* cx, JSObject* obj, jsid id,
JSObject** objp)
{
- NS_ASSERTION(JSVAL_IS_STRING(id), "id must be a string");
-
- JSString* str = JSVAL_TO_STRING(id);
+ NS_ASSERTION(JSID_IS_STRING(id), "id must be a string");
// We want this to be as invisible to content script as possible. So
// don't enumerate this, and set is as JSPROP_SHARED so it won't get
// cached on the object.
- JSBool ok = ::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), JSVAL_VOID,
- nsnull, nsnull, JSPROP_SHARED);
+ JSBool ok = ::JS_DefinePropertyById(cx, obj, id, JSVAL_VOID,
+ nsnull, nsnull, JSPROP_SHARED);
if (!ok) {
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
@@ -7563,25 +7508,25 @@ nsNodeSH::PreCreate(nsISupports *nativeO
return node->IsInNativeAnonymousSubtree() ?
NS_SUCCESS_CHROME_ACCESS_ONLY :
(slimWrappers ? NS_SUCCESS_ALLOW_SLIM_WRAPPERS : NS_OK);
}
NS_IMETHODIMP
nsNodeSH::AddProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
nsNodeSH::PreserveWrapper(GetNative(wrapper, obj));
return nsEventReceiverSH::AddProperty(wrapper, cx, obj, id, vp, _retval);
}
NS_IMETHODIMP
nsNodeSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval)
{
if ((id == sBaseURIObject_id || id == sNodePrincipal_id) &&
IsPrivilegedScript()) {
return DefineVoidProp(cx, obj, id, objp);
}
if (id == sOnload_id || id == sOnerror_id) {
@@ -7591,17 +7536,17 @@ nsNodeSH::NewResolve(nsIXPConnectWrapped
}
return nsEventReceiverSH::NewResolve(wrapper, cx, obj, id, flags, objp,
_retval);
}
NS_IMETHODIMP
nsNodeSH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
if (id == sBaseURIObject_id && IsPrivilegedScript()) {
// I wish GetBaseURI lived on nsINode
nsCOMPtr<nsIURI> uri;
nsCOMPtr<nsIContent> content = do_QueryWrappedNative(wrapper, obj);
if (content) {
uri = content->GetBaseURI();
NS_ENSURE_TRUE(uri, NS_ERROR_OUT_OF_MEMORY);
@@ -7631,17 +7576,17 @@ nsNodeSH::GetProperty(nsIXPConnectWrappe
}
// Note: none of our ancestors want GetProperty
return NS_OK;
}
NS_IMETHODIMP
nsNodeSH::SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
if ((id == sBaseURIObject_id || id == sNodePrincipal_id) &&
IsPrivilegedScript()) {
// We don't want privileged script that can read this property to set it,
// but _do_ want to allow everyone else to set a value they can then read.
//
// XXXbz Is there a better error we could use here?
return NS_ERROR_DOM_NOT_SUPPORTED_ERR;
@@ -7664,17 +7609,17 @@ nsNodeSH::PreserveWrapper(nsISupports *a
nsINode *node = static_cast<nsINode*>(aNative);
nsContentUtils::PreserveWrapper(aNative, node);
}
// EventReceiver helper
// static
PRBool
-nsEventReceiverSH::ReallyIsEventName(jsval id, jschar aFirstChar)
+nsEventReceiverSH::ReallyIsEventName(jsid id, jschar aFirstChar)
{
// I wonder if this is faster than using a hash...
switch (aFirstChar) {
case 'a' :
return id == sOnabort_id;
case 'b' :
return (id == sOnbeforeunload_id ||
@@ -7731,17 +7676,17 @@ nsEventReceiverSH::ReallyIsEventName(jsv
}
return PR_FALSE;
}
nsresult
nsEventReceiverSH::RegisterCompileHandler(nsIXPConnectWrappedNative *wrapper,
JSContext *cx, JSObject *obj,
- jsval id, PRBool compile,
+ jsid id, PRBool compile,
PRBool remove,
PRBool *did_define)
{
NS_PRECONDITION(!compile || !remove,
"Can't both compile and remove at the same time");
*did_define = PR_FALSE;
if (!IsEventName(id)) {
@@ -7783,48 +7728,43 @@ nsEventReceiverSH::RegisterCompileHandle
atom);
}
return NS_FAILED(rv) ? rv : NS_SUCCESS_I_DID_SOMETHING;
}
NS_IMETHODIMP
nsEventReceiverSH::NewResolve(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
PRUint32 flags, JSObject **objp, PRBool *_retval)
{
- if (!JSVAL_IS_STRING(id)) {
+ if (!JSID_IS_STRING(id)) {
return NS_OK;
}
if (flags & JSRESOLVE_ASSIGNING) {
if (!IsEventName(id)) {
// Bail out. We don't care about this assignment.
return NS_OK;
}
// If we're assigning to an on* property, just resolve to null for
// now; the assignment will then set the right value. Only do this
// in the case where the property isn't already defined on the
// object's prototype chain though.
- JSString* str = JSVAL_TO_STRING(id);
JSAutoRequest ar(cx);
JSObject *proto = ::JS_GetPrototype(cx, obj);
PRBool ok = PR_TRUE, hasProp = PR_FALSE;
- if (!proto || ((ok = ::JS_HasUCProperty(cx, proto, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str),
- &hasProp)) &&
+ if (!proto || ((ok = ::JS_HasPropertyById(cx, proto, id, &hasProp)) &&
!hasProp)) {
// Make sure the flags here match those in
// nsJSContext::BindCompiledEventHandler
- if (!::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), JSVAL_NULL,
- nsnull, nsnull,
- JSPROP_ENUMERATE | JSPROP_PERMANENT)) {
+ if (!::JS_DefinePropertyById(cx, obj, id, JSVAL_NULL, nsnull, nsnull,
+ JSPROP_ENUMERATE | JSPROP_PERMANENT)) {
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
}
return ok ? NS_OK : NS_ERROR_FAILURE;
@@ -7844,35 +7784,35 @@ nsEventReceiverSH::NewResolve(nsIXPConne
}
return nsDOMGenericSH::NewResolve(wrapper, cx, obj, id, flags, objp,
_retval);
}
NS_IMETHODIMP
nsEventReceiverSH::SetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
JSAutoRequest ar(cx);
if ((::JS_TypeOfValue(cx, *vp) != JSTYPE_FUNCTION && !JSVAL_IS_NULL(*vp)) ||
- !JSVAL_IS_STRING(id) || id == sAddEventListener_id) {
+ !JSID_IS_STRING(id) || id == sAddEventListener_id) {
return NS_OK;
}
PRBool did_compile; // Ignored here.
return RegisterCompileHandler(wrapper, cx, obj, id, PR_FALSE,
JSVAL_IS_NULL(*vp), &did_compile);
}
NS_IMETHODIMP
nsEventReceiverSH::AddProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
return nsEventReceiverSH::SetProperty(wrapper, cx, obj, id, vp, _retval);
}
// EventTarget helper
NS_IMETHODIMP
@@ -7887,17 +7827,17 @@ nsEventTargetSH::PreCreate(nsISupports *
*parentObj = native_parent ? native_parent->GetGlobalJSObject() : globalObj;
return NS_OK;
}
NS_IMETHODIMP
nsEventTargetSH::AddProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
if (id == sAddEventListener_id) {
return NS_OK;
}
nsEventTargetSH::PreserveWrapper(GetNative(wrapper, obj));
return NS_OK;
@@ -8100,17 +8040,17 @@ nsElementSH::Enumerate(nsIXPConnectWrapp
return NS_OK;
}
// Generic array scriptable helper.
NS_IMETHODIMP
nsGenericArraySH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval)
{
if (id == sLength_id) {
// Bail early; this isn't something we're interested in
return NS_OK;
}
PRBool is_number = PR_FALSE;
@@ -8197,17 +8137,17 @@ nsGenericArraySH::Enumerate(nsIXPConnect
return ok ? NS_OK : NS_ERROR_UNEXPECTED;
}
// Array scriptable helper
NS_IMETHODIMP
nsArraySH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
PRBool is_number = PR_FALSE;
PRInt32 n = GetArrayIndexFromId(cx, id, &is_number);
nsresult rv = NS_OK;
if (is_number) {
if (n < 0) {
@@ -8323,20 +8263,20 @@ nsDOMTokenListSH::GetStringAt(nsISupport
return list->Item(aIndex, aResult);
}
// Named Array helper
NS_IMETHODIMP
nsNamedArraySH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval)
{
- if (JSVAL_IS_STRING(id) && !ObjectIsNativeWrapper(cx, obj)) {
+ if (JSID_IS_STRING(id) && !ObjectIsNativeWrapper(cx, obj)) {
nsresult rv = NS_OK;
nsISupports* item = GetNamedItem(GetNative(wrapper, obj),
nsDependentJSString(id),
&rv);
NS_ENSURE_SUCCESS(rv, rv);
if (item) {
rv = WrapNative(cx, obj, item, PR_TRUE, vp);
@@ -8481,17 +8421,17 @@ nsContentListSH::GetNamedItem(nsISupport
{
nsContentList *list = nsContentList::FromSupports(aNative);
return list->GetNamedItem(aName, aResult);
}
NS_IMETHODIMP
nsDocumentSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval)
{
nsresult rv;
if (id == sLocation_id) {
// Define the location property on the document object itself so
// that we can intercept getting and setting of document.location.
@@ -8506,22 +8446,18 @@ nsDocumentSH::NewResolve(nsIXPConnectWra
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
rv = WrapNative(cx, obj, location, &NS_GET_IID(nsIDOMLocation), PR_TRUE,
&v, getter_AddRefs(holder));
NS_ENSURE_SUCCESS(rv, rv);
JSAutoRequest ar(cx);
- JSString *str = JSVAL_TO_STRING(id);
- JSBool ok = ::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), v, nsnull,
- nsnull,
- JSPROP_PERMANENT |
- JSPROP_ENUMERATE);
+ JSBool ok = ::JS_DefinePropertyById(cx, obj, id, v, nsnull, nsnull,
+ JSPROP_PERMANENT | JSPROP_ENUMERATE);
if (!ok) {
return NS_ERROR_FAILURE;
}
*objp = obj;
return NS_OK;
@@ -8531,17 +8467,17 @@ nsDocumentSH::NewResolve(nsIXPConnectWra
return DefineVoidProp(cx, obj, id, objp);
}
return nsNodeSH::NewResolve(wrapper, cx, obj, id, flags, objp, _retval);
}
NS_IMETHODIMP
nsDocumentSH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
if (id == sDocumentURIObject_id && IsPrivilegedScript()) {
nsCOMPtr<nsIDocument> doc = do_QueryWrappedNative(wrapper);
NS_ENSURE_TRUE(doc, NS_ERROR_UNEXPECTED);
nsIURI* uri = doc->GetDocumentURI();
NS_ENSURE_TRUE(uri, NS_ERROR_NOT_AVAILABLE);
@@ -8552,17 +8488,17 @@ nsDocumentSH::GetProperty(nsIXPConnectWr
return NS_FAILED(rv) ? rv : NS_SUCCESS_I_DID_SOMETHING;
}
return nsNodeSH::GetProperty(wrapper, cx, obj, id, vp, _retval);
}
NS_IMETHODIMP
nsDocumentSH::SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
if (id == sLocation_id) {
nsCOMPtr<nsIDOMNSDocument> doc(do_QueryWrappedNative(wrapper));
NS_ENSURE_TRUE(doc, NS_ERROR_UNEXPECTED);
nsCOMPtr<nsIDOMLocation> location;
nsresult rv = doc->GetLocation(getter_AddRefs(location));
@@ -8647,27 +8583,27 @@ nsDocumentSH::PostCreate(nsIXPConnectWra
return NS_OK;
}
// HTMLDocument helper
// static
nsresult
nsHTMLDocumentSH::ResolveImpl(JSContext *cx,
- nsIXPConnectWrappedNative *wrapper, jsval id,
+ nsIXPConnectWrappedNative *wrapper, jsid id,
nsISupports **result)
{
nsHTMLDocument *doc =
static_cast<nsHTMLDocument*>(static_cast<nsINode*>
(wrapper->Native()));
// 'id' is not always a string, it can be a number since document.1
// should map to <input name="1">. Thus we can't use
// JSVAL_TO_STRING() here.
- JSString *str = JS_ValueToString(cx, id);
+ JSString *str = IdToString(cx, id);
NS_ENSURE_TRUE(str, NS_ERROR_UNEXPECTED);
return doc->ResolveName(nsDependentJSString(str), nsnull, result);
}
// static
JSBool
nsHTMLDocumentSH::DocumentOpen(JSContext *cx, JSObject *obj, uintN argc,
@@ -8822,42 +8758,42 @@ nsHTMLDocumentSH::GetDocumentAllNodeList
return JS_FALSE;
}
return *nodeList != nsnull;
}
JSBool
nsHTMLDocumentSH::DocumentAllGetProperty(JSContext *cx, JSObject *obj,
- jsval id, jsval *vp)
+ jsid id, jsval *vp)
{
// document.all.item and .namedItem get their value in the
// newResolve hook, so nothing to do for those properties here. And
// we need to return early to prevent <div id="item"> from shadowing
// document.all.item(), etc.
if (id == sItem_id || id == sNamedItem_id) {
return JS_TRUE;
}
- while (obj->getClass() != &sHTMLDocumentAllClass) {
+ while (obj->getJSClass() != &sHTMLDocumentAllClass) {
obj = obj->getProto();
if (!obj) {
NS_ERROR("The JS engine lies!");
return JS_TRUE;
}
}
nsIHTMLDocument *doc = (nsIHTMLDocument *)::JS_GetPrivate(cx, obj);
nsCOMPtr<nsIDOMHTMLDocument> domdoc(do_QueryInterface(doc));
nsCOMPtr<nsISupports> result;
nsresult rv = NS_OK;
- if (JSVAL_IS_STRING(id)) {
+ if (JSID_IS_STRING(id)) {
if (id == sLength_id) {
// Map document.all.length to the length of the collection
// document.getElementsByTagName("*"), and make sure <div
// id="length"> doesn't shadow document.all.length.
nsCOMPtr<nsIDOMNodeList> nodeList;
if (!GetDocumentAllNodeList(cx, obj, domdoc, getter_AddRefs(nodeList))) {
return JS_FALSE;
@@ -8883,27 +8819,27 @@ nsHTMLDocumentSH::DocumentAllGetProperty
rv = doc->GetDocumentAllResult(str, getter_AddRefs(result));
if (NS_FAILED(rv)) {
nsDOMClassInfo::ThrowJSException(cx, rv);
return JS_FALSE;
}
}
- } else if (JSVAL_IS_INT(id) && JSVAL_TO_INT(id) >= 0) {
+ } else if (JSID_IS_INT(id) && JSID_TO_INT(id) >= 0) {
// Map document.all[n] (where n is a number) to the n:th item in
// the document.all node list.
nsCOMPtr<nsIDOMNodeList> nodeList;
if (!GetDocumentAllNodeList(cx, obj, domdoc, getter_AddRefs(nodeList))) {
return JS_FALSE;
}
nsCOMPtr<nsIDOMNode> node;
- nodeList->Item(JSVAL_TO_INT(id), getter_AddRefs(node));
+ nodeList->Item(JSID_TO_INT(id), getter_AddRefs(node));
result = node;
}
if (result) {
rv = WrapNative(cx, obj, result, PR_TRUE, vp);
if (NS_FAILED(rv)) {
nsDOMClassInfo::ThrowJSException(cx, rv);
@@ -8913,32 +8849,32 @@ nsHTMLDocumentSH::DocumentAllGetProperty
} else {
*vp = JSVAL_VOID;
}
return JS_TRUE;
}
JSBool
-nsHTMLDocumentSH::DocumentAllNewResolve(JSContext *cx, JSObject *obj, jsval id,
+nsHTMLDocumentSH::DocumentAllNewResolve(JSContext *cx, JSObject *obj, jsid id,
uintN flags, JSObject **objp)
{
if (flags & JSRESOLVE_ASSIGNING) {
// Nothing to do here if we're assigning
return JS_TRUE;
}
jsval v = JSVAL_VOID;
if (id == sItem_id || id == sNamedItem_id) {
// Define the item() or namedItem() method.
JSFunction *fnc =
- ::JS_DefineFunction(cx, obj, ::JS_GetStringBytes(JSVAL_TO_STRING(id)),
+ ::JS_DefineFunction(cx, obj, ::JS_GetStringBytes(JSID_TO_STRING(id)),
CallToGetPropMapper, 0, JSPROP_ENUMERATE);
*objp = obj;
return fnc != nsnull;
}
if (id == sLength_id) {
@@ -8969,24 +8905,20 @@ nsHTMLDocumentSH::DocumentAllNewResolve(
if (!DocumentAllGetProperty(cx, obj, id, &v)) {
return JS_FALSE;
}
}
JSBool ok = JS_TRUE;
if (v != JSVAL_VOID) {
- if (JSVAL_IS_STRING(id)) {
- JSString *str = JSVAL_TO_STRING(id);
-
- ok = ::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), v, nsnull, nsnull,
- 0);
+ if (JSID_IS_STRING(id)) {
+ ok = ::JS_DefinePropertyById(cx, obj, id, v, nsnull, nsnull, 0);
} else {
- ok = ::JS_DefineElement(cx, obj, JSVAL_TO_INT(id), v, nsnull, nsnull, 0);
+ ok = ::JS_DefineElement(cx, obj, JSID_TO_INT(id), v, nsnull, nsnull, 0);
}
*objp = obj;
}
return ok;
}
@@ -9047,35 +8979,49 @@ GetDocumentAllHelper(JSContext *cx, JSOb
{
while (obj && JS_GET_CLASS(cx, obj) != &sHTMLDocumentAllHelperClass) {
obj = ::JS_GetPrototype(cx, obj);
}
return obj;
}
+static inline void *
+FlagsToPrivate(PRUint32 flags)
+{
+ JS_ASSERT((flags & (1 << 31)) == 0);
+ return (void *)(flags << 1);
+}
+
+static inline PRUint32
+PrivateToFlags(void *priv)
+{
+ JS_ASSERT(size_t(priv) <= PR_UINT32_MAX && (size_t(priv) & 1) == 0);
+ return (PRUint32)(size_t(priv) >> 1);
+}
+
JSBool
nsHTMLDocumentSH::DocumentAllHelperGetProperty(JSContext *cx, JSObject *obj,
- jsval id, jsval *vp)
+ jsid id, jsval *vp)
{
if (id != nsDOMClassInfo::sAll_id) {
return JS_TRUE;
}
JSObject *helper = GetDocumentAllHelper(cx, obj);
if (!helper) {
NS_ERROR("Uh, how'd we get here?");
// Let scripts continue, if we somehow did get here...
return JS_TRUE;
}
- PRUint32 flags = JSVAL_TO_INT(PRIVATE_TO_JSVAL(::JS_GetPrivate(cx, helper)));
+ PRUint32 flags = PrivateToFlags(::JS_GetPrivate(cx, helper));
if (flags & JSRESOLVE_DETECTING || !(flags & JSRESOLVE_QUALIFIED)) {
// document.all is either being detected, e.g. if (document.all),
// or it was not being resolved with a qualified name. Claim that
// document.all is undefined.
*vp = JSVAL_VOID;
} else {
@@ -9110,17 +9056,17 @@ nsHTMLDocumentSH::DocumentAllHelperGetPr
}
}
return JS_TRUE;
}
JSBool
nsHTMLDocumentSH::DocumentAllHelperNewResolve(JSContext *cx, JSObject *obj,
- jsval id, uintN flags,
+ jsid id, uintN flags,
JSObject **objp)
{
if (id == nsDOMClassInfo::sAll_id) {
// document.all is resolved for the first time. Define it.
JSObject *helper = GetDocumentAllHelper(cx, obj);
if (helper) {
if (!::JS_DefineProperty(cx, helper, "all", JSVAL_VOID, nsnull, nsnull,
@@ -9133,33 +9079,31 @@ nsHTMLDocumentSH::DocumentAllHelperNewRe
}
return JS_TRUE;
}
JSBool
nsHTMLDocumentSH::DocumentAllTagsNewResolve(JSContext *cx, JSObject *obj,
- jsval id, uintN flags,
+ jsid id, uintN flags,
JSObject **objp)
{
- if (JSVAL_IS_STRING(id)) {
+ if (JSID_IS_STRING(id)) {
nsIHTMLDocument *doc = (nsIHTMLDocument *)::JS_GetPrivate(cx, obj);
- JSString *str = JSVAL_TO_STRING(id);
+ JSString *str = JSID_TO_STRING(id);
JSObject *proto = ::JS_GetPrototype(cx, obj);
if (NS_UNLIKELY(!proto)) {
return JS_TRUE;
}
JSBool found;
- if (!::JS_HasUCProperty(cx, proto,
- ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), &found)) {
+ if (!::JS_HasPropertyById(cx, proto, id, &found)) {
return JS_FALSE;
}
if (found) {
return JS_TRUE;
}
nsCOMPtr<nsIDOMDocument> domdoc(do_QueryInterface(doc));
@@ -9174,33 +9118,31 @@ nsHTMLDocumentSH::DocumentAllTagsNewReso
nsresult rv = nsDOMClassInfo::WrapNative(cx, obj, tags, PR_TRUE, &v,
getter_AddRefs(holder));
if (NS_FAILED(rv)) {
nsDOMClassInfo::ThrowJSException(cx, rv);
return JS_FALSE;
}
- if (!::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), v, nsnull, nsnull,
- 0)) {
+ if (!::JS_DefinePropertyById(cx, obj, id, v, nsnull, nsnull, 0)) {
return JS_FALSE;
}
*objp = obj;
}
}
return JS_TRUE;
}
NS_IMETHODIMP
nsHTMLDocumentSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval)
{
// nsDocumentSH::NewResolve() does a security check that we'd kinda
// want to do here too before doing anything else. But given that we
// only define dynamic properties here before the call to
// nsDocumentSH::NewResolve() we're ok, since once those properties
// are accessed, we'll do the necessary security check.
@@ -9211,30 +9153,26 @@ nsHTMLDocumentSH::NewResolve(nsIXPConnec
if (!ObjectIsNativeWrapper(cx, obj)) {
nsCOMPtr<nsISupports> result;
nsresult rv = ResolveImpl(cx, wrapper, id, getter_AddRefs(result));
NS_ENSURE_SUCCESS(rv, rv);
if (result) {
- JSString *str = JS_ValueToString(cx, id);
-
JSBool ok = *_retval =
- ::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str), JSVAL_VOID, nsnull,
- nsnull, 0);
+ ::JS_DefinePropertyById(cx, obj, id, JSVAL_VOID, nsnull, nsnull, 0);
*objp = obj;
return ok ? NS_OK : NS_ERROR_FAILURE;
}
}
if (id == sOpen_id) {
- JSString *str = JSVAL_TO_STRING(id);
+ JSString *str = JSID_TO_STRING(id);
JSFunction *fnc =
::JS_DefineFunction(cx, obj, ::JS_GetStringBytes(str),
DocumentOpen, 0, JSPROP_ENUMERATE);
*objp = obj;
return fnc ? NS_OK : NS_ERROR_UNEXPECTED;
}
@@ -9294,35 +9232,33 @@ nsHTMLDocumentSH::NewResolve(nsIXPConnec
nsDOMClassInfo::ThrowJSException(cx, NS_ERROR_UNEXPECTED);
return NS_ERROR_UNEXPECTED;
}
}
// If we have (or just created) a helper, pass the resolve flags
// to the helper as its private data.
- if (helper &&
- !::JS_SetPrivate(cx, helper,
- JSVAL_TO_PRIVATE(INT_TO_JSVAL(flags)))) {
+ if (helper && !::JS_SetPrivate(cx, helper, FlagsToPrivate(flags))) {
nsDOMClassInfo::ThrowJSException(cx, NS_ERROR_UNEXPECTED);
return NS_ERROR_UNEXPECTED;
}
}
return NS_OK;
}
}
return nsDocumentSH::NewResolve(wrapper, cx, obj, id, flags, objp, _retval);
}
NS_IMETHODIMP
nsHTMLDocumentSH::GetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
// For native wrappers, do not get random names on document
if (!ObjectIsNativeWrapper(cx, obj)) {
nsCOMPtr<nsISupports> result;
JSAutoRequest ar(cx);
@@ -9364,59 +9300,57 @@ nsHTMLFormElementSH::FindNamedItem(nsIFo
}
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLFormElementSH::NewResolve(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
PRUint32 flags, JSObject **objp,
PRBool *_retval)
{
// For native wrappers, do not resolve random names on form
- if ((!(JSRESOLVE_ASSIGNING & flags)) && JSVAL_IS_STRING(id) &&
+ if ((!(JSRESOLVE_ASSIGNING & flags)) && JSID_IS_STRING(id) &&
!ObjectIsNativeWrapper(cx, obj)) {
nsCOMPtr<nsIForm> form(do_QueryWrappedNative(wrapper, obj));
nsCOMPtr<nsISupports> result;
- JSString *str = JSVAL_TO_STRING(id);
+ JSString *str = JSID_TO_STRING(id);
FindNamedItem(form, str, getter_AddRefs(result));
if (result) {
JSAutoRequest ar(cx);
- *_retval = ::JS_DefineUCProperty(cx, obj, ::JS_GetStringChars(str),
- ::JS_GetStringLength(str),
- JSVAL_VOID, nsnull, nsnull,
- JSPROP_ENUMERATE);
+ *_retval = ::JS_DefinePropertyById(cx, obj, id, JSVAL_VOID, nsnull,
+ nsnull, JSPROP_ENUMERATE);
*objp = obj;
return *_retval ? NS_OK : NS_ERROR_FAILURE;
}
}
return nsElementSH::NewResolve(wrapper, cx, obj, id, flags, objp, _retval);
}
NS_IMETHODIMP
nsHTMLFormElementSH::GetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
nsCOMPtr<nsIForm> form(do_QueryWrappedNative(wrapper, obj));
- if (JSVAL_IS_STRING(id)) {
+ if (JSID_IS_STRING(id)) {
// For native wrappers, do not get random names on form
if (!ObjectIsNativeWrapper(cx, obj)) {
nsCOMPtr<nsISupports> result;
- JSString *str = JSVAL_TO_STRING(id);
+ JSString *str = JSID_TO_STRING(id);
FindNamedItem(form, str, getter_AddRefs(result));
if (result) {
// Wrap result, result can be either an element or a list of
// elements
nsresult rv = WrapNative(cx, obj, result, PR_TRUE, vp);
return NS_FAILED(rv) ? rv : NS_SUCCESS_I_DID_SOMETHING;
}
@@ -9454,17 +9388,17 @@ nsHTMLFormElementSH::NewEnumerate(nsIXPC
return NS_ERROR_UNEXPECTED;
}
*statep = INT_TO_JSVAL(0);
if (idp) {
PRUint32 count = form->GetElementCount();
- *idp = INT_TO_JSVAL(count);
+ *idp = INT_TO_JSID(count);
}
break;
}
case JSENUMERATE_NEXT:
{
nsCOMPtr<nsIForm> form(do_QueryWrappedNative(wrapper, obj));
NS_ENSURE_TRUE(form, NS_ERROR_FAILURE);
@@ -9513,17 +9447,17 @@ nsHTMLFormElementSH::NewEnumerate(nsIXPC
return NS_OK;
}
// HTMLSelectElement helper
NS_IMETHODIMP
nsHTMLSelectElementSH::GetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
PRInt32 n = GetArrayIndexFromId(cx, id);
nsresult rv = NS_OK;
if (n >= 0) {
nsCOMPtr<nsIDOMHTMLSelectElement> s = do_QueryWrappedNative(wrapper, obj);
@@ -9569,17 +9503,17 @@ nsHTMLSelectElementSH::SetOption(JSConte
}
}
return aOptCollection->SetOption(aIndex, new_option);
}
NS_IMETHODIMP
nsHTMLSelectElementSH::SetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
PRInt32 n = GetArrayIndexFromId(cx, id);
if (n >= 0) {
nsCOMPtr<nsIDOMHTMLSelectElement> select =
do_QueryWrappedNative(wrapper, obj);
NS_ENSURE_TRUE(select, NS_ERROR_UNEXPECTED);
@@ -9833,100 +9767,84 @@ nsHTMLPluginObjElementSH::PostCreate(nsI
new nsPluginProtoChainInstallRunner(wrapper, scriptContext);
nsContentUtils::AddScriptRunner(runner);
return NS_OK;
}
NS_IMETHODIMP
nsHTMLPluginObjElementSH::GetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
JSAutoRequest ar(cx);
JSObject *pi_obj = ::JS_GetPrototype(cx, obj);
if (NS_UNLIKELY(!pi_obj)) {
return NS_OK;
}
- const jschar *id_chars = nsnull;
- size_t id_length = 0;
-
JSBool found = PR_FALSE;
if (!ObjectIsNativeWrapper(cx, obj)) {
- if (JSVAL_IS_STRING(id)) {
- JSString *id_str = JSVAL_TO_STRING(id);
-
- id_chars = ::JS_GetStringChars(id_str);
- id_length = ::JS_GetStringLength(id_str);
-
- *_retval = ::JS_HasUCProperty(cx, pi_obj, id_chars, id_length, &found);
+ if (JSID_IS_STRING(id)) {
+ *_retval = ::JS_HasPropertyById(cx, pi_obj, id, &found);
} else {
- *_retval = JS_HasElement(cx, pi_obj, JSVAL_TO_INT(id), &found);
+ *_retval = ::JS_HasElement(cx, pi_obj, JSID_TO_INT(id), &found);
}
if (!*_retval) {
return NS_ERROR_UNEXPECTED;
}
}
if (found) {
- if (JSVAL_IS_STRING(id)) {
- *_retval = ::JS_GetUCProperty(cx, pi_obj, id_chars, id_length, vp);
+ if (JSID_IS_STRING(id)) {
+ *_retval = ::JS_GetPropertyById(cx, pi_obj, id, vp);
} else {
- *_retval = ::JS_GetElement(cx, pi_obj, JSVAL_TO_INT(id), vp);
+ *_retval = ::JS_GetElement(cx, pi_obj, JSID_TO_INT(id), vp);
}
return *_retval ? NS_SUCCESS_I_DID_SOMETHING : NS_ERROR_FAILURE;
}
return nsElementSH::GetProperty(wrapper, cx, obj, id, vp, _retval);
}
NS_IMETHODIMP
nsHTMLPluginObjElementSH::SetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
JSAutoRequest ar(cx);
JSObject *pi_obj = ::JS_GetPrototype(cx, obj);
if (NS_UNLIKELY(!pi_obj)) {
return NS_OK;
}
- const jschar *id_chars = nsnull;
- size_t id_length = 0;
-
JSBool found = PR_FALSE;
if (!ObjectIsNativeWrapper(cx, obj)) {
- if (JSVAL_IS_STRING(id)) {
- JSString *id_str = JSVAL_TO_STRING(id);
-
- id_chars = ::JS_GetStringChars(id_str);
- id_length = ::JS_GetStringLength(id_str);
-
- *_retval = ::JS_HasUCProperty(cx, pi_obj, id_chars, id_length, &found);
+ if (JSID_IS_STRING(id)) {
+ *_retval = ::JS_HasPropertyById(cx, pi_obj, id, &found);
} else {
- *_retval = JS_HasElement(cx, pi_obj, JSVAL_TO_INT(id), &found);
+ *_retval = ::JS_HasElement(cx, pi_obj, JSID_TO_INT(id), &found);
}
if (!*_retval) {
return NS_ERROR_UNEXPECTED;
}
}
if (found) {
- if (JSVAL_IS_STRING(id)) {
- *_retval = ::JS_SetUCProperty(cx, pi_obj, id_chars, id_length, vp);
+ if (JSID_IS_STRING(id)) {
+ *_retval = ::JS_SetPropertyById(cx, pi_obj, id, vp);
} else {
- *_retval = ::JS_SetElement(cx, pi_obj, JSVAL_TO_INT(id), vp);
+ *_retval = ::JS_SetElement(cx, pi_obj, JSID_TO_INT(id), vp);
}
return *_retval ? NS_SUCCESS_I_DID_SOMETHING : NS_ERROR_FAILURE;
}
return nsElementSH::SetProperty(wrapper, cx, obj, id, vp, _retval);
}
@@ -9984,17 +9902,17 @@ nsHTMLPluginObjElementSH::GetPluginJSObj
}
}
return NS_OK;
}
NS_IMETHODIMP
nsHTMLPluginObjElementSH::NewResolve(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
PRUint32 flags, JSObject **objp,
PRBool *_retval)
{
// Make sure the plugin instance is loaded and instantiated, if
// possible.
nsCOMPtr<nsIPluginInstance> pi;
nsresult rv = GetPluginInstanceIfSafe(wrapper, obj, getter_AddRefs(pi));
@@ -10003,17 +9921,17 @@ nsHTMLPluginObjElementSH::NewResolve(nsI
return nsElementSH::NewResolve(wrapper, cx, obj, id, flags, objp,
_retval);
}
// HTMLOptionsCollection helper
NS_IMETHODIMP
nsHTMLOptionsCollectionSH::SetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
PRInt32 n = GetArrayIndexFromId(cx, id);
if (n < 0) {
return NS_OK;
}
@@ -10091,17 +10009,17 @@ nsMimeTypeArraySH::GetNamedItem(nsISuppo
return array->GetNamedItem(aName, aResult);
}
// StringArray helper
NS_IMETHODIMP
nsStringArraySH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval)
{
PRBool is_number = PR_FALSE;
PRInt32 n = GetArrayIndexFromId(cx, id, &is_number);
if (!is_number) {
return NS_OK;
}
@@ -10125,17 +10043,17 @@ nsStringArraySH::GetProperty(nsIXPConnec
return NS_SUCCESS_I_DID_SOMETHING;
}
// History helper
NS_IMETHODIMP
nsHistorySH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
PRBool is_number = PR_FALSE;
GetArrayIndexFromId(cx, id, &is_number);
if (!is_number) {
return NS_OK;
}
@@ -10319,59 +10237,55 @@ nsTreeColumnsSH::GetNamedItem(nsISupport
// One reason we need a newResolve hook is that in order for
// enumeration of storage object keys to work the keys we're
// enumerating need to exist on the storage object for the JS engine
// to find them.
NS_IMETHODIMP
nsStorageSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval)
{
JSObject *realObj;
wrapper->GetJSObject(&realObj);
- // First check to see if the property is defined on our prototype,
- // after converting id to a string if it's an integer.
-
- JSString *jsstr = JS_ValueToString(cx, id);
- if (!jsstr) {
- return JS_FALSE;
- }
+ // First check to see if the property is defined on our prototype.
JSObject *proto = ::JS_GetPrototype(cx, realObj);
JSBool hasProp;
if (proto &&
- (::JS_HasUCProperty(cx, proto, ::JS_GetStringChars(jsstr),
- ::JS_GetStringLength(jsstr), &hasProp) &&
+ (::JS_HasPropertyById(cx, proto, id, &hasProp) &&
hasProp)) {
// We found the property we're resolving on the prototype,
// nothing left to do here then.
return NS_OK;
}
// We're resolving property that doesn't exist on the prototype,
// check if the key exists in the storage object.
nsCOMPtr<nsIDOMStorageObsolete> storage(do_QueryWrappedNative(wrapper));
+ JSString *jsstr = IdToString(cx, id);
+ if (!jsstr)
+ return JS_FALSE;
+
// GetItem() will return null if the caller can't access the session
// storage item.
nsCOMPtr<nsIDOMStorageItem> item;
nsresult rv = storage->GetItem(nsDependentJSString(jsstr),
getter_AddRefs(item));
NS_ENSURE_SUCCESS(rv, rv);
if (item) {
- if (!::JS_DefineUCProperty(cx, realObj, ::JS_GetStringChars(jsstr),
- ::JS_GetStringLength(jsstr), JSVAL_VOID, nsnull,
- nsnull, JSPROP_ENUMERATE)) {
+ if (!::JS_DefinePropertyById(cx, realObj, id, JSVAL_VOID, nsnull, nsnull,
+ JSPROP_ENUMERATE)) {
return NS_ERROR_FAILURE;
}
*objp = realObj;
}
return NS_OK;
}
@@ -10382,46 +10296,46 @@ nsStorageSH::GetNamedItem(nsISupports *a
{
nsDOMStorage* storage = nsDOMStorage::FromSupports(aNative);
return storage->GetNamedItem(aName, aResult);
}
NS_IMETHODIMP
nsStorageSH::SetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
nsCOMPtr<nsIDOMStorageObsolete> storage(do_QueryWrappedNative(wrapper));
NS_ENSURE_TRUE(storage, NS_ERROR_UNEXPECTED);
- JSString *key = ::JS_ValueToString(cx, id);
+ JSString *key = IdToString(cx, id);
NS_ENSURE_TRUE(key, NS_ERROR_UNEXPECTED);
JSString *value = ::JS_ValueToString(cx, *vp);
NS_ENSURE_TRUE(value, NS_ERROR_UNEXPECTED);
nsresult rv = storage->SetItem(nsDependentJSString(key),
nsDependentJSString(value));
if (NS_SUCCEEDED(rv)) {
rv = NS_SUCCESS_I_DID_SOMETHING;
}
return rv;
}
NS_IMETHODIMP
nsStorageSH::DelProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
nsCOMPtr<nsIDOMStorageObsolete> storage(do_QueryWrappedNative(wrapper));
NS_ENSURE_TRUE(storage, NS_ERROR_UNEXPECTED);
- JSString *key = ::JS_ValueToString(cx, id);
+ JSString *key = IdToString(cx, id);
NS_ENSURE_TRUE(key, NS_ERROR_UNEXPECTED);
nsresult rv = storage->RemoveItem(nsDependentJSString(key));
if (NS_SUCCEEDED(rv)) {
rv = NS_SUCCESS_I_DID_SOMETHING;
}
return rv;
@@ -10444,17 +10358,17 @@ nsStorageSH::NewEnumerate(nsIXPConnectWr
// XXXndeakin need to free the keys afterwards
keys = storage->GetKeys();
NS_ENSURE_TRUE(keys, NS_ERROR_OUT_OF_MEMORY);
*statep = PRIVATE_TO_JSVAL(keys);
if (idp) {
- *idp = INT_TO_JSVAL(keys->Length());
+ *idp = INT_TO_JSID(keys->Length());
}
break;
}
case JSENUMERATE_NEXT:
if (keys->Length() != 0) {
nsString& key = keys->ElementAt(0);
JSString *str =
JS_NewUCStringCopyN(cx, reinterpret_cast<const jschar *>
@@ -10490,36 +10404,35 @@ nsStorageSH::NewEnumerate(nsIXPConnectWr
// One reason we need a newResolve hook is that in order for
// enumeration of storage object keys to work the keys we're
// enumerating need to exist on the storage object for the JS engine
// to find them.
NS_IMETHODIMP
nsStorage2SH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval)
{
JSObject *realObj;
wrapper->GetJSObject(&realObj);
// First check to see if the property is defined on our prototype,
// after converting id to a string if it's an integer.
- JSString *jsstr = JS_ValueToString(cx, id);
+ JSString *jsstr = IdToString(cx, id);
if (!jsstr) {
return JS_FALSE;
}
JSObject *proto = ::JS_GetPrototype(cx, realObj);
JSBool hasProp;
if (proto &&
- (::JS_HasUCProperty(cx, proto, ::JS_GetStringChars(jsstr),
- ::JS_GetStringLength(jsstr), &hasProp) &&
+ (::JS_HasPropertyById(cx, proto, id, &hasProp) &&
hasProp)) {
// We found the property we're resolving on the prototype,
// nothing left to do here then.
return NS_OK;
}
// We're resolving property that doesn't exist on the prototype,
@@ -10529,39 +10442,38 @@ nsStorage2SH::NewResolve(nsIXPConnectWra
// GetItem() will return null if the caller can't access the session
// storage item.
nsAutoString data;
nsresult rv = storage->GetItem(nsDependentJSString(jsstr), data);
NS_ENSURE_SUCCESS(rv, rv);
if (!DOMStringIsNull(data)) {
- if (!::JS_DefineUCProperty(cx, realObj, ::JS_GetStringChars(jsstr),
- ::JS_GetStringLength(jsstr), JSVAL_VOID, nsnull,
- nsnull, JSPROP_ENUMERATE)) {
+ if (!::JS_DefinePropertyById(cx, realObj, id, JSVAL_VOID, nsnull,
+ nsnull, JSPROP_ENUMERATE)) {
return NS_ERROR_FAILURE;
}
*objp = realObj;
}
return NS_OK;
}
NS_IMETHODIMP
nsStorage2SH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval)
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
{
nsCOMPtr<nsIDOMStorage> storage(do_QueryWrappedNative(wrapper));
NS_ENSURE_TRUE(storage, NS_ERROR_UNEXPECTED);
nsAutoString val;
nsresult rv = NS_OK;
- if (JSVAL_IS_STRING(id)) {
+ if (JSID_IS_STRING(id)) {
// For native wrappers, do not get random names on storage objects.
if (ObjectIsNativeWrapper(cx, obj)) {
return NS_ERROR_NOT_AVAILABLE;
}
rv = storage->GetItem(nsDependentJSString(id), val);
NS_ENSURE_SUCCESS(rv, rv);
} else {
@@ -10586,46 +10498,46 @@ nsStorage2SH::GetProperty(nsIXPConnectWr
*vp = STRING_TO_JSVAL(str);
}
return NS_SUCCESS_I_DID_SOMETHING;
}
NS_IMETHODIMP
nsStorage2SH::SetProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
nsCOMPtr<nsIDOMStorage> storage(do_QueryWrappedNative(wrapper));
NS_ENSURE_TRUE(storage, NS_ERROR_UNEXPECTED);
- JSString *key = ::JS_ValueToString(cx, id);
+ JSString *key = IdToString(cx, id);
NS_ENSURE_TRUE(key, NS_ERROR_UNEXPECTED);
JSString *value = ::JS_ValueToString(cx, *vp);
NS_ENSURE_TRUE(value, NS_ERROR_UNEXPECTED);
nsresult rv = storage->SetItem(nsDependentJSString(key),
nsDependentJSString(value));
if (NS_SUCCEEDED(rv)) {
rv = NS_SUCCESS_I_DID_SOMETHING;
}
return rv;
}
NS_IMETHODIMP
nsStorage2SH::DelProperty(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
jsval *vp, PRBool *_retval)
{
nsCOMPtr<nsIDOMStorage> storage(do_QueryWrappedNative(wrapper));
NS_ENSURE_TRUE(storage, NS_ERROR_UNEXPECTED);
- JSString *key = ::JS_ValueToString(cx, id);
+ JSString *key = IdToString(cx, id);
NS_ENSURE_TRUE(key, NS_ERROR_UNEXPECTED);
nsresult rv = storage->RemoveItem(nsDependentJSString(key));
if (NS_SUCCEEDED(rv)) {
rv = NS_SUCCESS_I_DID_SOMETHING;
}
return rv;
@@ -10648,17 +10560,17 @@ nsStorage2SH::NewEnumerate(nsIXPConnectW
// XXXndeakin need to free the keys afterwards
keys = storage->GetKeys();
NS_ENSURE_TRUE(keys, NS_ERROR_OUT_OF_MEMORY);
*statep = PRIVATE_TO_JSVAL(keys);
if (idp) {
- *idp = INT_TO_JSVAL(keys->Length());
+ *idp = INT_TO_JSID(keys->Length());
}
break;
}
case JSENUMERATE_NEXT:
if (keys->Length() != 0) {
nsString& key = keys->ElementAt(0);
JSString *str =
JS_NewUCStringCopyN(cx, reinterpret_cast<const jschar *>
@@ -10770,17 +10682,17 @@ nsDOMConstructorSH::Construct(nsIXPConne
}
#endif
return wrapped->Construct(wrapper, cx, obj, argc, argv, vp, _retval);
}
NS_IMETHODIMP
nsDOMConstructorSH::HasInstance(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval val,
+ JSContext *cx, JSObject *obj, const jsval &val,
PRBool *bp, PRBool *_retval)
{
nsDOMConstructor *wrapped =
static_cast<nsDOMConstructor *>(wrapper->Native());
#ifdef DEBUG
{
nsCOMPtr<nsIDOMDOMConstructor> is_constructor =
--- a/dom/base/nsDOMClassInfo.h
+++ b/dom/base/nsDOMClassInfo.h
@@ -212,20 +212,20 @@ protected:
static nsresult RegisterClassProtos(PRInt32 aDOMClassInfoID);
static nsresult RegisterExternalClasses();
nsresult ResolveConstructor(JSContext *cx, JSObject *obj,
JSObject **objp);
// Checks if id is a number and returns the number, if aIsNumber is
// non-null it's set to true if the id is a number and false if it's
// not a number. If id is not a number this method returns -1
- static PRInt32 GetArrayIndexFromId(JSContext *cx, jsval id,
+ static PRInt32 GetArrayIndexFromId(JSContext *cx, jsid id,
PRBool *aIsNumber = nsnull);
- static inline PRBool IsReadonlyReplaceable(jsval id)
+ static inline PRBool IsReadonlyReplaceable(jsid id)
{
return (id == sTop_id ||
id == sParent_id ||
id == sScrollbars_id ||
id == sContent_id ||
id == sMenubar_id ||
id == sToolbar_id ||
id == sLocationbar_id ||
@@ -236,17 +236,17 @@ protected:
id == sScrollY_id ||
id == sScrollMaxX_id ||
id == sScrollMaxY_id ||
id == sLength_id ||
id == sFrames_id ||
id == sSelf_id);
}
- static inline PRBool IsWritableReplaceable(jsval id)
+ static inline PRBool IsWritableReplaceable(jsid id)
{
return (id == sInnerHeight_id ||
id == sInnerWidth_id ||
id == sOpener_id ||
id == sOuterHeight_id ||
id == sOuterWidth_id ||
id == sScreenX_id ||
id == sScreenY_id ||
@@ -259,101 +259,101 @@ protected:
// nsIXPCScriptable code
static nsresult DefineStaticJSVals(JSContext *cx);
static PRBool sIsInitialized;
static PRBool sDisableDocumentAllSupport;
static PRBool sDisableGlobalScopePollutionSupport;
- static jsval sTop_id;
- static jsval sParent_id;
- static jsval sScrollbars_id;
- static jsval sLocation_id;
- static jsval sConstructor_id;
- static jsval s_content_id;
- static jsval sContent_id;
- static jsval sMenubar_id;
- static jsval sToolbar_id;
- static jsval sLocationbar_id;
- static jsval sPersonalbar_id;
- static jsval sStatusbar_id;
- static jsval sDialogArguments_id;
- static jsval sControllers_id;
- static jsval sLength_id;
- static jsval sInnerHeight_id;
- static jsval sInnerWidth_id;
- static jsval sOuterHeight_id;
- static jsval sOuterWidth_id;
- static jsval sScreenX_id;
- static jsval sScreenY_id;
- static jsval sStatus_id;
- static jsval sName_id;
- static jsval sOnmousedown_id;
- static jsval sOnmouseup_id;
- static jsval sOnclick_id;
- static jsval sOndblclick_id;
- static jsval sOncontextmenu_id;
- static jsval sOnmouseover_id;
- static jsval sOnmouseout_id;
- static jsval sOnkeydown_id;
- static jsval sOnkeyup_id;
- static jsval sOnkeypress_id;
- static jsval sOnmousemove_id;
- static jsval sOnfocus_id;
- static jsval sOnblur_id;
- static jsval sOnsubmit_id;
- static jsval sOnreset_id;
- static jsval sOnchange_id;
- static jsval sOnselect_id;
- static jsval sOnload_id;
- static jsval sOnpopstate_id;
- static jsval sOnbeforeunload_id;
- static jsval sOnunload_id;
- static jsval sOnhashchange_id;
- static jsval sOnreadystatechange_id;
- static jsval sOnpageshow_id;
- static jsval sOnpagehide_id;
- static jsval sOnabort_id;
- static jsval sOnerror_id;
- static jsval sOnpaint_id;
- static jsval sOnresize_id;
- static jsval sOnscroll_id;
- static jsval sOndrag_id;
- static jsval sOndragend_id;
- static jsval sOndragenter_id;
- static jsval sOndragleave_id;
- static jsval sOndragover_id;
- static jsval sOndragstart_id;
- static jsval sOndrop_id;
- static jsval sScrollX_id;
- static jsval sScrollY_id;
- static jsval sScrollMaxX_id;
- static jsval sScrollMaxY_id;
- static jsval sOpen_id;
- static jsval sItem_id;
- static jsval sNamedItem_id;
- static jsval sEnumerate_id;
- static jsval sNavigator_id;
- static jsval sDocument_id;
- static jsval sWindow_id;
- static jsval sFrames_id;
- static jsval sSelf_id;
- static jsval sOpener_id;
- static jsval sAll_id;
- static jsval sTags_id;
- static jsval sAddEventListener_id;
- static jsval sBaseURIObject_id;
- static jsval sNodePrincipal_id;
- static jsval sDocumentURIObject_id;
- static jsval sOncopy_id;
- static jsval sOncut_id;
- static jsval sOnpaste_id;
- static jsval sJava_id;
- static jsval sPackages_id;
+ static jsid sTop_id;
+ static jsid sParent_id;
+ static jsid sScrollbars_id;
+ static jsid sLocation_id;
+ static jsid sConstructor_id;
+ static jsid s_content_id;
+ static jsid sContent_id;
+ static jsid sMenubar_id;
+ static jsid sToolbar_id;
+ static jsid sLocationbar_id;
+ static jsid sPersonalbar_id;
+ static jsid sStatusbar_id;
+ static jsid sDialogArguments_id;
+ static jsid sControllers_id;
+ static jsid sLength_id;
+ static jsid sInnerHeight_id;
+ static jsid sInnerWidth_id;
+ static jsid sOuterHeight_id;
+ static jsid sOuterWidth_id;
+ static jsid sScreenX_id;
+ static jsid sScreenY_id;
+ static jsid sStatus_id;
+ static jsid sName_id;
+ static jsid sOnmousedown_id;
+ static jsid sOnmouseup_id;
+ static jsid sOnclick_id;
+ static jsid sOndblclick_id;
+ static jsid sOncontextmenu_id;
+ static jsid sOnmouseover_id;
+ static jsid sOnmouseout_id;
+ static jsid sOnkeydown_id;
+ static jsid sOnkeyup_id;
+ static jsid sOnkeypress_id;
+ static jsid sOnmousemove_id;
+ static jsid sOnfocus_id;
+ static jsid sOnblur_id;
+ static jsid sOnsubmit_id;
+ static jsid sOnreset_id;
+ static jsid sOnchange_id;
+ static jsid sOnselect_id;
+ static jsid sOnload_id;
+ static jsid sOnpopstate_id;
+ static jsid sOnbeforeunload_id;
+ static jsid sOnunload_id;
+ static jsid sOnhashchange_id;
+ static jsid sOnreadystatechange_id;
+ static jsid sOnpageshow_id;
+ static jsid sOnpagehide_id;
+ static jsid sOnabort_id;
+ static jsid sOnerror_id;
+ static jsid sOnpaint_id;
+ static jsid sOnresize_id;
+ static jsid sOnscroll_id;
+ static jsid sOndrag_id;
+ static jsid sOndragend_id;
+ static jsid sOndragenter_id;
+ static jsid sOndragleave_id;
+ static jsid sOndragover_id;
+ static jsid sOndragstart_id;
+ static jsid sOndrop_id;
+ static jsid sScrollX_id;
+ static jsid sScrollY_id;
+ static jsid sScrollMaxX_id;
+ static jsid sScrollMaxY_id;
+ static jsid sOpen_id;
+ static jsid sItem_id;
+ static jsid sNamedItem_id;
+ static jsid sEnumerate_id;
+ static jsid sNavigator_id;
+ static jsid sDocument_id;
+ static jsid sWindow_id;
+ static jsid sFrames_id;
+ static jsid sSelf_id;
+ static jsid sOpener_id;
+ static jsid sAll_id;
+ static jsid sTags_id;
+ static jsid sAddEventListener_id;
+ static jsid sBaseURIObject_id;
+ static jsid sNodePrincipal_id;
+ static jsid sDocumentURIObject_id;
+ static jsid sOncopy_id;
+ static jsid sOncut_id;
+ static jsid sOnpaste_id;
+ static jsid sJava_id;
+ static jsid sPackages_id;
static JSPropertyOp sXPCNativeWrapperGetPropertyOp;
static JSPropertyOp sXrayWrapperPropertyHolderGetPropertyOp;
};
inline
const nsQueryInterface
@@ -403,45 +403,45 @@ protected:
nsEventReceiverSH(nsDOMClassInfoData* aData) : nsDOMGenericSH(aData)
{
}
virtual ~nsEventReceiverSH()
{
}
- static PRBool ReallyIsEventName(jsval id, jschar aFirstChar);
+ static PRBool ReallyIsEventName(jsid id, jschar aFirstChar);
- static inline PRBool IsEventName(jsval id)
+ static inline PRBool IsEventName(jsid id)
{
- NS_ASSERTION(JSVAL_IS_STRING(id), "Don't pass non-string jsval's here!");
+ NS_ASSERTION(JSID_IS_STRING(id), "Don't pass non-string jsid's here!");
- jschar *str = ::JS_GetStringChars(JSVAL_TO_STRING(id));
+ jschar *str = ::JS_GetStringChars(JSID_TO_STRING(id));
if (str[0] == 'o' && str[1] == 'n') {
return ReallyIsEventName(id, str[2]);
}
return PR_FALSE;
}
nsresult RegisterCompileHandler(nsIXPConnectWrappedNative *wrapper,
- JSContext *cx, JSObject *obj, jsval id,
+ JSContext *cx, JSObject *obj, jsid id,
PRBool compile, PRBool remove,
PRBool *did_define);
public:
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval);
NS_IMETHOD AddProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
};
// Simpler than nsEventReceiverSH
// Makes sure that the wrapper is preserved if new properties are added.
class nsEventTargetSH : public nsDOMGenericSH
{
protected:
nsEventTargetSH(nsDOMClassInfoData* aData) : nsDOMGenericSH(aData)
@@ -450,17 +450,17 @@ protected:
virtual ~nsEventTargetSH()
{
}
public:
NS_IMETHOD PreCreate(nsISupports *nativeObj, JSContext *cx,
JSObject *globalObj, JSObject **parentObj);
NS_IMETHOD AddProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
virtual void PreserveWrapper(nsISupports *aNative);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsEventTargetSH(aData);
}
};
@@ -505,44 +505,44 @@ public:
if (NS_SUCCEEDED(rv)) {
*aFlags = flags | nsIXPCScriptable::WANT_POSTCREATE;
}
return rv;
}
#endif
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD AddProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD DelProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD NewEnumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj, PRUint32 enum_op, jsval *statep,
jsid *idp, PRBool *_retval);
NS_IMETHOD Finalize(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj);
NS_IMETHOD Equality(nsIXPConnectWrappedNative *wrapper, JSContext * cx,
- JSObject * obj, jsval val, PRBool *bp);
+ JSObject * obj, const jsval &val, PRBool *bp);
NS_IMETHOD OuterObject(nsIXPConnectWrappedNative *wrapper, JSContext * cx,
JSObject * obj, JSObject * *_retval);
NS_IMETHOD InnerObject(nsIXPConnectWrappedNative *wrapper, JSContext * cx,
JSObject * obj, JSObject * *_retval);
static JSBool GlobalScopePolluterNewResolve(JSContext *cx, JSObject *obj,
- jsval id, uintN flags,
+ jsid id, uintN flags,
JSObject **objp);
static JSBool GlobalScopePolluterGetProperty(JSContext *cx, JSObject *obj,
- jsval id, jsval *vp);
- static JSBool SecurityCheckOnSetProp(JSContext *cx, JSObject *obj, jsval id,
+ jsid id, jsval *vp);
+ static JSBool SecurityCheckOnSetProp(JSContext *cx, JSObject *obj, jsid id,
jsval *vp);
static void InvalidateGlobalScopePolluter(JSContext *cx, JSObject *obj);
static nsresult InstallGlobalScopePolluter(JSContext *cx, JSObject *obj,
nsIHTMLDocument *doc);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsWindowSH(aData);
@@ -560,17 +560,17 @@ protected:
}
virtual ~nsLocationSH()
{
}
public:
NS_IMETHOD CheckAccess(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 mode,
+ JSObject *obj, jsid id, PRUint32 mode,
jsval *vp, PRBool *_retval);
NS_IMETHOD PreCreate(nsISupports *nativeObj, JSContext *cx,
JSObject *globalObj, JSObject **parentObj);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsLocationSH(aData);
@@ -622,31 +622,31 @@ protected:
inline PRBool IsPrivilegedScript() {
return IsCapabilityEnabled("UniversalXPConnect");
}
// Helper to define a void property with JSPROP_SHARED; this can do all the
// work so it's safe to just return whatever it returns. |obj| is the object
// we're defining on, |id| is the name of the prop. This must be a string
// jsval. |objp| is the out param if we define successfully.
- nsresult DefineVoidProp(JSContext* cx, JSObject* obj, jsval id,
+ nsresult DefineVoidProp(JSContext* cx, JSObject* obj, jsid id,
JSObject** objp);
public:
NS_IMETHOD PreCreate(nsISupports *nativeObj, JSContext *cx,
JSObject *globalObj, JSObject **parentObj);
NS_IMETHOD AddProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD GetFlags(PRUint32 *aFlags);
virtual void PreserveWrapper(nsISupports *aNative);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsNodeSH(aData);
}
@@ -691,17 +691,17 @@ protected:
}
virtual ~nsGenericArraySH()
{
}
public:
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj, PRBool *_retval);
virtual nsresult GetLength(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj, PRUint32 *length);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
@@ -726,17 +726,17 @@ protected:
// Subclasses need to override this, if the implementation can't fail it's
// allowed to not set *aResult.
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
nsresult *aResult) = 0;
public:
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
private:
// Not implemented, nothing should create an instance of this class.
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData);
};
// NodeList scriptable helper
@@ -778,17 +778,17 @@ protected:
}
virtual nsISupports* GetNamedItem(nsISupports *aNative,
const nsAString& aName,
nsresult *aResult) = 0;
public:
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
private:
// Not implemented, nothing should create an instance of this class.
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData);
};
// NamedNodeMap helper
@@ -890,22 +890,22 @@ public:
}
virtual ~nsDocumentSH()
{
}
public:
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD GetFlags(PRUint32* aFlags);
NS_IMETHOD PostCreate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsDocumentSH(aData);
}
@@ -921,46 +921,46 @@ protected:
{
}
virtual ~nsHTMLDocumentSH()
{
}
static nsresult ResolveImpl(JSContext *cx,
- nsIXPConnectWrappedNative *wrapper, jsval id,
+ nsIXPConnectWrappedNative *wrapper, jsid id,
nsISupports **result);
static JSBool DocumentOpen(JSContext *cx, JSObject *obj, uintN argc,
jsval *argv, jsval *rval);
static JSBool GetDocumentAllNodeList(JSContext *cx, JSObject *obj,
nsIDOMDocument *doc,
nsIDOMNodeList **nodeList);
public:
- static JSBool DocumentAllGetProperty(JSContext *cx, JSObject *obj, jsval id,
+ static JSBool DocumentAllGetProperty(JSContext *cx, JSObject *obj, jsid id,
jsval *vp);
- static JSBool DocumentAllNewResolve(JSContext *cx, JSObject *obj, jsval id,
+ static JSBool DocumentAllNewResolve(JSContext *cx, JSObject *obj, jsid id,
uintN flags, JSObject **objp);
static void ReleaseDocument(JSContext *cx, JSObject *obj);
static JSBool CallToGetPropMapper(JSContext *cx, JSObject *obj, uintN argc,
jsval *argv, jsval *rval);
static JSBool DocumentAllHelperGetProperty(JSContext *cx, JSObject *obj,
- jsval id, jsval *vp);
+ jsid id, jsval *vp);
static JSBool DocumentAllHelperNewResolve(JSContext *cx, JSObject *obj,
- jsval id, uintN flags,
+ jsid id, uintN flags,
JSObject **objp);
static JSBool DocumentAllTagsNewResolve(JSContext *cx, JSObject *obj,
- jsval id, uintN flags,
+ jsid id, uintN flags,
JSObject **objp);
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsHTMLDocumentSH(aData);
}
};
@@ -974,25 +974,25 @@ protected:
}
virtual ~nsHTMLBodyElementSH()
{
}
public:
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval);
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsHTMLBodyElementSH(aData);
}
};
@@ -1009,20 +1009,20 @@ protected:
{
}
static nsresult FindNamedItem(nsIForm *aForm, JSString *str,
nsISupports **aResult);
public:
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval);
NS_IMETHOD NewEnumerate(nsIXPConnectWrappedNative *wrapper,
JSContext *cx, JSObject *obj,
PRUint32 enum_op, jsval *statep,
jsid *idp, PRBool *_retval);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
@@ -1042,20 +1042,20 @@ protected:
}
virtual ~nsHTMLSelectElementSH()
{
}
public:
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp,
+ JSObject *obj, jsid id, jsval *vp,
PRBool *_retval);
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
static nsresult SetOption(JSContext *cx, jsval *vp, PRUint32 aIndex,
nsIDOMNSHTMLOptionCollection *aOptCollection);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsHTMLSelectElementSH(aData);
}
@@ -1082,26 +1082,26 @@ protected:
static nsresult GetPluginJSObject(JSContext *cx, JSObject *obj,
nsIPluginInstance *plugin_inst,
JSObject **plugin_obj,
JSObject **plugin_proto);
public:
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD PreCreate(nsISupports *nativeObj, JSContext *cx,
JSObject *globalObj, JSObject **parentObj);
NS_IMETHOD PostCreate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj);
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD Call(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj, PRUint32 argc, jsval *argv, jsval *vp,
PRBool *_retval);
static nsresult SetupProtoChain(nsIXPConnectWrappedNative *wrapper,
JSContext *cx, JSObject *obj);
@@ -1123,17 +1123,17 @@ protected:
}
virtual ~nsHTMLOptionsCollectionSH()
{
}
public:
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsHTMLOptionsCollectionSH(aData);
}
};
@@ -1237,17 +1237,17 @@ protected:
{
}
virtual nsresult GetStringAt(nsISupports *aNative, PRInt32 aIndex,
nsAString& aResult) = 0;
public:
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
};
// History helper
class nsHistorySH : public nsStringArraySH
{
protected:
@@ -1259,17 +1259,17 @@ protected:
{
}
virtual nsresult GetStringAt(nsISupports *aNative, PRInt32 aIndex,
nsAString& aResult);
public:
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsHistorySH(aData);
}
};
// StringList scriptable helper
@@ -1532,22 +1532,22 @@ protected:
{
}
virtual ~nsStorageSH()
{
}
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD DelProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD NewEnumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj, PRUint32 enum_op, jsval *statep,
jsid *idp, PRBool *_retval);
virtual nsISupports* GetItemAt(nsISupports *aNative, PRUint32 aIndex,
nsresult *aResult)
{
return nsnull;
@@ -1572,24 +1572,24 @@ protected:
{
}
virtual ~nsStorage2SH()
{
}
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, PRUint32 flags,
+ JSObject *obj, jsid id, PRUint32 flags,
JSObject **objp, PRBool *_retval);
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD DelProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval id, jsval *vp, PRBool *_retval);
+ JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
NS_IMETHOD NewEnumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj, PRUint32 enum_op, jsval *statep,
jsid *idp, PRBool *_retval);
public:
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsStorage2SH(aData);
@@ -1666,17 +1666,17 @@ public:
JSObject *obj, PRUint32 argc, jsval *argv, jsval *vp,
PRBool *_retval);
NS_IMETHOD Construct(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
JSObject *obj, PRUint32 argc, jsval *argv,
jsval *vp, PRBool *_retval);
NS_IMETHOD HasInstance(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
- JSObject *obj, jsval val, PRBool *bp,
+ JSObject *obj, const jsval &val, PRBool *bp,
PRBool *_retval);
static nsIClassInfo *doCreate(nsDOMClassInfoData* aData)
{
return new nsDOMConstructorSH(aData);
}
};
--- a/dom/base/nsJSEnvironment.cpp
+++ b/dom/base/nsJSEnvironment.cpp
@@ -1217,17 +1217,17 @@ nsJSContext::DOMOperationCallback(JSCont
else if ((buttonPressed == 2) && debugPossible) {
// Debug the script
jsval rval;
switch(cx->debugHooks->debuggerHandler(cx, script, ::JS_GetFramePC(cx, fp),
&rval,
cx->debugHooks->
debuggerHandlerData)) {
case JSTRAP_RETURN:
- fp->rval = rval;
+ fp->rval = js::Valueify(rval);
return JS_TRUE;
case JSTRAP_ERROR:
cx->throwing = JS_FALSE;
return JS_FALSE;
case JSTRAP_THROW:
JS_SetPendingException(cx, rval);
return JS_FALSE;
case JSTRAP_CONTINUE:
@@ -3048,32 +3048,32 @@ nsJSContext::AddSupportsPrimitiveTojsval
static JSPropertySpec OptionsProperties[] = {
{"strict", (int8)JSOPTION_STRICT, JSPROP_ENUMERATE | JSPROP_PERMANENT},
{"werror", (int8)JSOPTION_WERROR, JSPROP_ENUMERATE | JSPROP_PERMANENT},
{"relimit", (int8)JSOPTION_RELIMIT, JSPROP_ENUMERATE | JSPROP_PERMANENT},
{0}
};
static JSBool
-GetOptionsProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+GetOptionsProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{
- if (JSVAL_IS_INT(id)) {
- uint32 optbit = (uint32) JSVAL_TO_INT(id);
+ if (JSID_IS_INT(id)) {
+ uint32 optbit = (uint32) JSID_TO_INT(id);
if (((optbit & (optbit - 1)) == 0 && optbit <= JSOPTION_WERROR) ||
optbit == JSOPTION_RELIMIT)
*vp = (JS_GetOptions(cx) & optbit) ? JSVAL_TRUE : JSVAL_FALSE;
}
return JS_TRUE;
}
static JSBool
-SetOptionsProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+SetOptionsProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{
- if (JSVAL_IS_INT(id)) {
- uint32 optbit = (uint32) JSVAL_TO_INT(id);
+ if (JSID_IS_INT(id)) {
+ uint32 optbit = (uint32) JSID_TO_INT(id);
// Don't let options other than strict, werror, or relimit be set -- it
// would be bad if web page script could clear
// JSOPTION_PRIVATE_IS_NSISUPPORTS!
if (((optbit & (optbit - 1)) == 0 && optbit <= JSOPTION_WERROR) ||
optbit == JSOPTION_RELIMIT) {
JSBool optval;
JS_ValueToBoolean(cx, *vp, &optval);
@@ -3941,17 +3941,17 @@ SetMemoryHighWaterMarkPrefChangedCallbac
if (highwatermark >= 32) {
// There are two options of memory usage in tracemonkey. One is
// to use malloc() and the other is to use memory for GC. (E.g.
// js_NewGCThing()/RefillDoubleFreeList()).
// Let's limit the high water mark for the first one to 32MB,
// and second one to 0xffffffff.
JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_MALLOC_BYTES,
- 32L * 1024L * 1024L);
+ 64L * 1024L * 1024L);
JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_BYTES,
0xffffffff);
} else {
JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_MALLOC_BYTES,
highwatermark * 1024L * 1024L);
JS_SetGCParameter(nsJSRuntime::sRuntime, JSGC_MAX_BYTES,
highwatermark * 1024L * 1024L);
}
--- a/dom/base/nsJSUtils.h
+++ b/dom/base/nsJSUtils.h
@@ -76,16 +76,22 @@ class nsDependentJSString : public nsDep
{
public:
explicit nsDependentJSString(jsval v)
: nsDependentString((PRUnichar *)::JS_GetStringChars(JSVAL_TO_STRING(v)),
::JS_GetStringLength(JSVAL_TO_STRING(v)))
{
}
+ explicit nsDependentJSString(jsid id)
+ : nsDependentString((PRUnichar *)::JS_GetStringChars(JSID_TO_STRING(id)),
+ ::JS_GetStringLength(JSID_TO_STRING(id)))
+ {
+ }
+
explicit nsDependentJSString(JSString *str)
: nsDependentString((PRUnichar *)::JS_GetStringChars(str), ::JS_GetStringLength(str))
{
}
~nsDependentJSString()
{
}
--- a/dom/indexedDB/IDBCursor.cpp
+++ b/dom/indexedDB/IDBCursor.cpp
@@ -360,17 +360,17 @@ IDBCursor::GetValue(JSContext* aCx,
mHaveCachedValue = true;
}
*aValue = mCachedValue;
return NS_OK;
}
NS_IMETHODIMP
-IDBCursor::Continue(jsval aKey,
+IDBCursor::Continue(const jsval &aKey,
JSContext* aCx,
PRUint8 aOptionalArgCount,
PRBool* _retval)
{
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
if (!mObjectStore->TransactionIsOpen()) {
return NS_ERROR_UNEXPECTED;
@@ -405,17 +405,17 @@ IDBCursor::Continue(jsval aKey,
mContinueCalled = true;
*_retval = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP
-IDBCursor::Update(jsval aValue,
+IDBCursor::Update(const jsval &aValue,
JSContext* aCx,
nsIIDBRequest** _retval)
{
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
if (mType != OBJECTSTORE) {
NS_NOTYETIMPLEMENTED("Implement me!");
return NS_ERROR_NOT_IMPLEMENTED;
@@ -431,62 +431,62 @@ IDBCursor::Update(jsval aValue,
const Key& key = mData[mDataIndex].key;
NS_ASSERTION(!key.IsUnset() && !key.IsNull(), "Bad key!");
JSAutoRequest ar(aCx);
js::AutoValueRooter clone(aCx);
nsresult rv = nsContentUtils::CreateStructuredClone(aCx, aValue,
- clone.addr());
+ clone.jsval_addr());
if (NS_FAILED(rv)) {
return rv;
}
if (!mObjectStore->KeyPath().IsEmpty()) {
// Make sure the object given has the correct keyPath value set on it or
// we will add it.
const nsString& keyPath = mObjectStore->KeyPath();
const jschar* keyPathChars = reinterpret_cast<const jschar*>(keyPath.get());
const size_t keyPathLen = keyPath.Length();
js::AutoValueRooter prop(aCx);
- JSBool ok = JS_GetUCProperty(aCx, JSVAL_TO_OBJECT(clone.value()),
- keyPathChars, keyPathLen, prop.addr());
+ JSBool ok = JS_GetUCProperty(aCx, JSVAL_TO_OBJECT(clone.jsval_value()),
+ keyPathChars, keyPathLen, prop.jsval_addr());
NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
- if (JSVAL_IS_VOID(prop.value())) {
- rv = IDBObjectStore::GetJSValFromKey(key, aCx, prop.addr());
+ if (JSVAL_IS_VOID(prop.jsval_value())) {
+ rv = IDBObjectStore::GetJSValFromKey(key, aCx, prop.jsval_addr());
NS_ENSURE_SUCCESS(rv, rv);
- ok = JS_DefineUCProperty(aCx, JSVAL_TO_OBJECT(clone.value()),
- keyPathChars, keyPathLen, prop.value(), nsnull,
+ ok = JS_DefineUCProperty(aCx, JSVAL_TO_OBJECT(clone.jsval_value()),
+ keyPathChars, keyPathLen, prop.jsval_value(), nsnull,
nsnull, JSPROP_ENUMERATE);
NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
}
else {
Key newKey;
- rv = IDBObjectStore::GetKeyFromJSVal(prop.value(), newKey);
+ rv = IDBObjectStore::GetKeyFromJSVal(prop.jsval_value(), newKey);
NS_ENSURE_SUCCESS(rv, rv);
if (newKey.IsUnset() || newKey.IsNull() || newKey != key) {
return NS_ERROR_INVALID_ARG;
}
}
}
nsTArray<IndexUpdateInfo> indexUpdateInfo;
rv = IDBObjectStore::GetIndexUpdateInfo(mObjectStore->GetObjectStoreInfo(),
- aCx, clone.value(), indexUpdateInfo);
+ aCx, clone.jsval_value(), indexUpdateInfo);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIJSON> json(new nsJSON());
nsString jsonValue;
- rv = json->EncodeFromJSVal(clone.addr(), aCx, jsonValue);
+ rv = json->EncodeFromJSVal(clone.jsval_addr(), aCx, jsonValue);
NS_ENSURE_SUCCESS(rv, rv);
nsRefPtr<IDBRequest> request = GenerateWriteRequest();
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
nsRefPtr<UpdateHelper> helper =
new UpdateHelper(mTransaction, request, mObjectStore->Id(), jsonValue, key,
mObjectStore->IsAutoIncrement(), indexUpdateInfo);
--- a/dom/indexedDB/IDBEvents.cpp
+++ b/dom/indexedDB/IDBEvents.cpp
@@ -468,24 +468,24 @@ GetAllSuccessEvent::GetResult(JSContext*
js::AutoValueRooter value(aCx);
jsint count = jsint(values.Length());
for (jsint index = 0; index < count; index++) {
nsString jsonValue = values[index];
values[index].Truncate();
- nsresult rv = json->DecodeToJSVal(jsonValue, aCx, value.addr());
+ nsresult rv = json->DecodeToJSVal(jsonValue, aCx, value.jsval_addr());
if (NS_FAILED(rv)) {
mCachedValue = JSVAL_VOID;
NS_ERROR("Failed to decode!");
return rv;
}
- if (!JS_SetElement(aCx, array, index, value.addr())) {
+ if (!JS_SetElement(aCx, array, index, value.jsval_addr())) {
mCachedValue = JSVAL_VOID;
NS_ERROR("Failed to set array element!");
return NS_ERROR_FAILURE;
}
}
}
}
@@ -534,24 +534,24 @@ GetAllKeySuccessEvent::GetResult(JSConte
js::AutoValueRooter value(aCx);
jsint count = jsint(keys.Length());
for (jsint index = 0; index < count; index++) {
const Key& key = keys[index];
NS_ASSERTION(!key.IsUnset() && !key.IsNull(), "Bad key!");
- nsresult rv = IDBObjectStore::GetJSValFromKey(key, aCx, value.addr());
+ nsresult rv = IDBObjectStore::GetJSValFromKey(key, aCx, value.jsval_addr());
if (NS_FAILED(rv)) {
mCachedValue = JSVAL_VOID;
NS_WARNING("Failed to get jsval for key!");
return rv;
}
- if (!JS_SetElement(aCx, array, index, value.addr())) {
+ if (!JS_SetElement(aCx, array, index, value.jsval_addr())) {
mCachedValue = JSVAL_VOID;
NS_WARNING("Failed to set array element!");
return NS_ERROR_FAILURE;
}
}
}
}
--- a/dom/indexedDB/IDBObjectStore.cpp
+++ b/dom/indexedDB/IDBObjectStore.cpp
@@ -368,17 +368,17 @@ IDBObjectStore::GetKeyFromJSVal(jsval aK
}
else if (JSVAL_IS_STRING(aKeyVal)) {
aKey = nsDependentJSString(aKeyVal);
}
else if (JSVAL_IS_INT(aKeyVal)) {
aKey = JSVAL_TO_INT(aKeyVal);
}
else if (JSVAL_IS_DOUBLE(aKeyVal)) {
- aKey = *JSVAL_TO_DOUBLE(aKeyVal);
+ aKey = JSVAL_TO_DOUBLE(aKeyVal);
}
else {
return NS_ERROR_INVALID_ARG;
}
return NS_OK;
}
@@ -447,24 +447,24 @@ IDBObjectStore::GetJSONFromArg0(/* jsval
JSContext* cx;
rv = cc->GetJSContext(&cx);
NS_ENSURE_SUCCESS(rv, rv);
JSAutoRequest ar(cx);
js::AutoValueRooter clone(cx);
- rv = nsContentUtils::CreateStructuredClone(cx, argv[0], clone.addr());
+ rv = nsContentUtils::CreateStructuredClone(cx, argv[0], clone.jsval_addr());
if (NS_FAILED(rv)) {
return rv;
}
nsCOMPtr<nsIJSON> json(new nsJSON());
- rv = json->EncodeFromJSVal(clone.addr(), cx, aJSON);
+ rv = json->EncodeFromJSVal(clone.jsval_addr(), cx, aJSON);
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
}
// static
nsresult
IDBObjectStore::GetKeyPathValueFromJSON(const nsAString& aJSON,
@@ -483,37 +483,37 @@ IDBObjectStore::GetKeyPathValueFromJSON(
NS_ENSURE_SUCCESS(rv, rv);
}
JSAutoRequest ar(*aCx);
js::AutoValueRooter clone(*aCx);
nsCOMPtr<nsIJSON> json(new nsJSON());
- rv = json->DecodeToJSVal(aJSON, *aCx, clone.addr());
+ rv = json->DecodeToJSVal(aJSON, *aCx, clone.jsval_addr());
NS_ENSURE_SUCCESS(rv, rv);
- if (JSVAL_IS_PRIMITIVE(clone.value())) {
+ if (JSVAL_IS_PRIMITIVE(clone.jsval_value())) {
// This isn't an object, so just leave the key unset.
aValue = Key::UNSETKEY;
return NS_OK;
}
- JSObject* obj = JSVAL_TO_OBJECT(clone.value());
+ JSObject* obj = JSVAL_TO_OBJECT(clone.jsval_value());
const jschar* keyPathChars =
reinterpret_cast<const jschar*>(aKeyPath.BeginReading());
const size_t keyPathLen = aKeyPath.Length();
js::AutoValueRooter value(*aCx);
JSBool ok = JS_GetUCProperty(*aCx, obj, keyPathChars, keyPathLen,
- value.addr());
+ value.jsval_addr());
NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
- rv = GetKeyFromJSVal(value.value(), aValue);
+ rv = GetKeyFromJSVal(value.jsval_value(), aValue);
if (NS_FAILED(rv) || aValue.IsNull()) {
// If the object doesn't have a value that we can use for our index then we
// leave it unset.
aValue = Key::UNSETKEY;
}
return NS_OK;
}
@@ -724,32 +724,32 @@ IDBObjectStore::GetAddInfo(JSContext* aC
nsString& aJSON,
Key& aKey,
nsTArray<IndexUpdateInfo>& aUpdateInfoArray)
{
JSAutoRequest ar(aCx);
js::AutoValueRooter clone(aCx);
nsresult rv = nsContentUtils::CreateStructuredClone(aCx, aValue,
- clone.addr());
+ clone.jsval_addr());
if (NS_FAILED(rv)) {
return rv;
}
if (mKeyPath.IsEmpty()) {
rv = GetKeyFromJSVal(aKeyVal, aKey);
NS_ENSURE_SUCCESS(rv, rv);
}
else {
// Inline keys live on the object. Make sure it is an object.
- if (JSVAL_IS_PRIMITIVE(clone.value())) {
+ if (JSVAL_IS_PRIMITIVE(clone.jsval_value())) {
return NS_ERROR_INVALID_ARG;
}
- rv = GetKeyFromObject(aCx, JSVAL_TO_OBJECT(clone.value()), mKeyPath, aKey);
+ rv = GetKeyFromObject(aCx, JSVAL_TO_OBJECT(clone.jsval_value()), mKeyPath, aKey);
NS_ENSURE_SUCCESS(rv, rv);
// Except if null was passed, in which case we're supposed to generate the
// key.
if (aKey.IsUnset() && JSVAL_IS_NULL(aKeyVal)) {
aKey = Key::NULLKEY;
}
}
@@ -757,21 +757,21 @@ IDBObjectStore::GetAddInfo(JSContext* aC
if (aKey.IsUnset() && !mAutoIncrement) {
return NS_ERROR_INVALID_ARG;
}
// Figure out indexes and the index values to update here.
ObjectStoreInfo* objectStoreInfo = GetObjectStoreInfo();
NS_ENSURE_TRUE(objectStoreInfo, NS_ERROR_FAILURE);
- rv = GetIndexUpdateInfo(objectStoreInfo, aCx, clone.value(), aUpdateInfoArray);
+ rv = GetIndexUpdateInfo(objectStoreInfo, aCx, clone.jsval_value(), aUpdateInfoArray);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIJSON> json(new nsJSON());
- rv = json->EncodeFromJSVal(clone.addr(), aCx, aJSON);
+ rv = json->EncodeFromJSVal(clone.jsval_addr(), aCx, aJSON);
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
}
NS_IMPL_ADDREF(IDBObjectStore)
NS_IMPL_RELEASE(IDBObjectStore)
@@ -899,41 +899,39 @@ IDBObjectStore::GetAll(nsIIDBKeyRange* a
rv = helper->DispatchToTransactionPool();
NS_ENSURE_SUCCESS(rv, rv);
request.forget(_retval);
return NS_OK;
}
NS_IMETHODIMP
-IDBObjectStore::Add(jsval aValue,
- jsval aKey,
+IDBObjectStore::Add(const jsval &aValue,
+ const jsval &aKey,
JSContext* aCx,
PRUint8 aOptionalArgCount,
nsIIDBRequest** _retval)
{
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
if (!mTransaction->TransactionIsOpen()) {
return NS_ERROR_UNEXPECTED;
}
if (mMode != nsIIDBTransaction::READ_WRITE) {
return NS_ERROR_OBJECT_IS_IMMUTABLE;
}
- if (aOptionalArgCount < 1) {
- aKey = JSVAL_VOID;
- }
+ jsval keyval = (aOptionalArgCount >= 1) ? aKey : JSVAL_VOID;
nsString jsonValue;
Key key;
nsTArray<IndexUpdateInfo> updateInfo;
- nsresult rv = GetAddInfo(aCx, aValue, aKey, jsonValue, key, updateInfo);
+ nsresult rv = GetAddInfo(aCx, aValue, keyval, jsonValue, key, updateInfo);
if (NS_FAILED(rv)) {
return rv;
}
if (key.IsUnset() && !mAutoIncrement) {
return NS_ERROR_ILLEGAL_VALUE;
}
@@ -946,41 +944,39 @@ IDBObjectStore::Add(jsval aValue,
rv = helper->DispatchToTransactionPool();
NS_ENSURE_SUCCESS(rv, rv);
request.forget(_retval);
return NS_OK;
}
NS_IMETHODIMP
-IDBObjectStore::Modify(jsval aValue,
- jsval aKey,
+IDBObjectStore::Modify(const jsval &aValue,
+ const jsval &aKey,
JSContext* aCx,
PRUint8 aOptionalArgCount,
nsIIDBRequest** _retval)
{
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
if (!mTransaction->TransactionIsOpen()) {
return NS_ERROR_UNEXPECTED;
}
if (mMode != nsIIDBTransaction::READ_WRITE) {
return NS_ERROR_OBJECT_IS_IMMUTABLE;
}
- if (aOptionalArgCount < 1) {
- aKey = JSVAL_VOID;
- }
+ jsval keyval = (aOptionalArgCount >= 1) ? aKey : JSVAL_VOID;
nsString jsonValue;
Key key;
nsTArray<IndexUpdateInfo> updateInfo;
- nsresult rv = GetAddInfo(aCx, aValue, aKey, jsonValue, key, updateInfo);
+ nsresult rv = GetAddInfo(aCx, aValue, keyval, jsonValue, key, updateInfo);
if (NS_FAILED(rv)) {
return rv;
}
if (key.IsUnset() || key.IsNull()) {
return NS_ERROR_ILLEGAL_VALUE;
}
@@ -993,41 +989,39 @@ IDBObjectStore::Modify(jsval aValue,
rv = helper->DispatchToTransactionPool();
NS_ENSURE_SUCCESS(rv, rv);
request.forget(_retval);
return NS_OK;
}
NS_IMETHODIMP
-IDBObjectStore::AddOrModify(jsval aValue,
- jsval aKey,
+IDBObjectStore::AddOrModify(const jsval &aValue,
+ const jsval &aKey,
JSContext* aCx,
PRUint8 aOptionalArgCount,
nsIIDBRequest** _retval)
{
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
if (!mTransaction->TransactionIsOpen()) {
return NS_ERROR_UNEXPECTED;
}
if (mMode != nsIIDBTransaction::READ_WRITE) {
return NS_ERROR_OBJECT_IS_IMMUTABLE;
}
- if (aOptionalArgCount < 1) {
- aKey = JSVAL_VOID;
- }
+ jsval keyval = (aOptionalArgCount >= 1) ? aKey : JSVAL_VOID;
nsString jsonValue;
Key key;
nsTArray<IndexUpdateInfo> updateInfo;
- nsresult rv = GetAddInfo(aCx, aValue, aKey, jsonValue, key, updateInfo);
+ nsresult rv = GetAddInfo(aCx, aValue, keyval, jsonValue, key, updateInfo);
if (NS_FAILED(rv)) {
return rv;
}
if (key.IsUnset() || key.IsNull()) {
return NS_ERROR_ILLEGAL_VALUE;
}
@@ -1468,39 +1462,39 @@ AddHelper::ModifyValueForNewKey()
nsresult rv = nsContentUtils::ThreadJSContextStack()->GetSafeJSContext(&cx);
NS_ENSURE_SUCCESS(rv, rv);
JSAutoRequest ar(cx);
js::AutoValueRooter clone(cx);
nsCOMPtr<nsIJSON> json(new nsJSON());
- rv = json->DecodeToJSVal(mValue, cx, clone.addr());
+ rv = json->DecodeToJSVal(mValue, cx, clone.jsval_addr());
NS_ENSURE_SUCCESS(rv, rv);
- JSObject* obj = JSVAL_TO_OBJECT(clone.value());
+ JSObject* obj = JSVAL_TO_OBJECT(clone.jsval_value());
JSBool ok;
js::AutoValueRooter key(cx);
const jschar* keyPathChars = reinterpret_cast<const jschar*>(mKeyPath.get());
const size_t keyPathLen = mKeyPath.Length();
#ifdef DEBUG
- ok = JS_GetUCProperty(cx, obj, keyPathChars, keyPathLen, key.addr());
- NS_ASSERTION(ok && JSVAL_IS_VOID(key.value()), "Already has a key prop!");
+ ok = JS_GetUCProperty(cx, obj, keyPathChars, keyPathLen, key.jsval_addr());
+ NS_ASSERTION(ok && JSVAL_IS_VOID(key.jsval_value()), "Already has a key prop!");
#endif
- ok = JS_NewNumberValue(cx, mKey.IntValue(), key.addr());
+ ok = JS_NewNumberValue(cx, mKey.IntValue(), key.jsval_addr());
NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
- ok = JS_DefineUCProperty(cx, obj, keyPathChars, keyPathLen, key.value(),
+ ok = JS_DefineUCProperty(cx, obj, keyPathChars, keyPathLen, key.jsval_value(),
nsnull, nsnull, JSPROP_ENUMERATE);
NS_ENSURE_TRUE(ok, NS_ERROR_FAILURE);
- rv = json->EncodeFromJSVal(clone.addr(), cx, mValue);
+ rv = json->EncodeFromJSVal(clone.jsval_addr(), cx, mValue);
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
}
PRUint16
GetHelper::DoDatabaseWork(mozIStorageConnection* aConnection)
{
--- a/dom/src/threads/nsDOMWorker.cpp
+++ b/dom/src/threads/nsDOMWorker.cpp
@@ -111,17 +111,17 @@ public:
// Chrome-only functions
static JSBool
NewChromeWorker(JSContext* aCx, JSObject* aObj, uintN aArgc, jsval* aArgv,
jsval* aRval);
#ifdef BUILD_CTYPES
static JSBool
- CTypesLazyGetter(JSContext* aCx, JSObject* aObj, jsval aId, jsval* aVp);
+ CTypesLazyGetter(JSContext* aCx, JSObject* aObj, jsid aId, jsval* aVp);
#endif
private:
// Internal helper for SetTimeout and SetInterval.
static JSBool
MakeTimeout(JSContext* aCx, JSObject* aObj, uintN aArgc, jsval* aArgv,
jsval* aRval, PRBool aIsInterval);
@@ -429,40 +429,38 @@ nsDOMWorkerFunctions::MakeNewWorker(JSCo
*aRval = v;
return JS_TRUE;
}
#ifdef BUILD_CTYPES
JSBool
nsDOMWorkerFunctions::CTypesLazyGetter(JSContext* aCx,
JSObject* aObj,
- jsval aId,
+ jsid aId,
jsval* aVp)
{
#ifdef DEBUG
{
NS_ASSERTION(JS_GetGlobalForObject(aCx, aObj) == aObj, "Bad object!");
- NS_ASSERTION(JSVAL_IS_STRING(aId), "Not a string!");
- JSString* str = JSVAL_TO_STRING(aId);
+ NS_ASSERTION(JSID_IS_STRING(aId), "Not a string!");
+ JSString* str = JSID_TO_STRING(aId);
NS_ASSERTION(nsDependentJSString(str).EqualsLiteral("ctypes"), "Bad id!");
}
#endif
nsDOMWorker* worker = static_cast<nsDOMWorker*>(JS_GetContextPrivate(aCx));
NS_ASSERTION(worker, "This should be set by the DOM thread service!");
NS_ASSERTION(worker->IsPrivileged(), "This shouldn't be possible!");
if (worker->IsCanceled()) {
return JS_FALSE;
}
- js::AutoIdRooter rooter(aCx);
- return JS_ValueToId(aCx, aId, rooter.addr()) &&
- JS_DeletePropertyById(aCx, aObj, rooter.id()) &&
+ return JS_DeletePropertyById(aCx, aObj, aId) &&
JS_InitCTypesClass(aCx, aObj) &&
- JS_GetPropertyById(aCx, aObj, rooter.id(), aVp);
+ JS_GetPropertyById(aCx, aObj, aId, aVp);
}
#endif
JSFunctionSpec gDOMWorkerFunctions[] = {
{ "dump", nsDOMWorkerFunctions::Dump, 1, 0, 0 },
{ "setTimeout", nsDOMWorkerFunctions::SetTimeout, 1, 0, 0 },
{ "clearTimeout", nsDOMWorkerFunctions::KillTimeout, 1, 0, 0 },
{ "setInterval", nsDOMWorkerFunctions::SetInterval, 1, 0, 0 },
@@ -581,36 +579,36 @@ nsDOMWorkerScope::GetWrappedNative()
NS_ASSERTION(wrappedNative, "Null wrapped native!");
return wrappedNative.forget();
}
NS_IMETHODIMP
nsDOMWorkerScope::AddProperty(nsIXPConnectWrappedNative* aWrapper,
JSContext* aCx,
JSObject* aObj,
- jsval aId,
+ jsid aId,
jsval* aVp,
PRBool* _retval)
{
// We're not going to be setting any exceptions manually so set _retval to
// true in the beginning.
*_retval = PR_TRUE;
// Bail out now if any of our prerequisites are not met. We only care about
// someone making an 'onmessage' or 'onerror' function so aId must be a
// string and aVp must be a function.
JSObject* funObj;
- if (!(JSVAL_IS_STRING(aId) &&
+ if (!(JSID_IS_STRING(aId) &&
JSVAL_IS_OBJECT(*aVp) &&
(funObj = JSVAL_TO_OBJECT(*aVp)) &&
JS_ObjectIsFunction(aCx, funObj))) {
return NS_OK;
}
- const char* name = JS_GetStringBytes(JSVAL_TO_STRING(aId));
+ const char* name = JS_GetStringBytes(JSID_TO_STRING(aId));
// Figure out which listener we're setting.
SetListenerFunc func;
if (!strcmp(name, "onmessage")) {
func = &nsDOMWorkerScope::SetOnmessage;
}
else if (!strcmp(name, "onerror")) {
func = &nsDOMWorkerScope::SetOnerror;
--- a/dom/src/threads/nsDOMWorkerSecurityManager.cpp
+++ b/dom/src/threads/nsDOMWorkerSecurityManager.cpp
@@ -103,32 +103,32 @@ nsDOMWorkerSecurityManager::CanGetServic
NS_IMETHODIMP
nsDOMWorkerSecurityManager::CanAccess(PRUint32 aAction,
nsAXPCNativeCallContext* aCallContext,
JSContext* aJSContext,
JSObject* aJSObject,
nsISupports* aObj,
nsIClassInfo* aClassInfo,
- jsval aName,
+ jsid aName,
void** aPolicy)
{
return NS_OK;
}
JSPrincipals*
nsDOMWorkerSecurityManager::WorkerPrincipal()
{
return &gWorkerPrincipal;
}
JSBool
nsDOMWorkerSecurityManager::JSCheckAccess(JSContext* aCx,
JSObject* aObj,
- jsval aId,
+ jsid aId,
JSAccessMode aMode,
jsval* aVp)
{
return JS_TRUE;
}
JSPrincipals*
nsDOMWorkerSecurityManager::JSFindPrincipal(JSContext* aCx, JSObject* aObj)
--- a/dom/src/threads/nsDOMWorkerSecurityManager.h
+++ b/dom/src/threads/nsDOMWorkerSecurityManager.h
@@ -45,17 +45,17 @@
class nsDOMWorkerSecurityManager : public nsIXPCSecurityManager
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIXPCSECURITYMANAGER
static JSPrincipals* WorkerPrincipal();
- static JSBool JSCheckAccess(JSContext* aCx, JSObject* aObj, jsval aId,
+ static JSBool JSCheckAccess(JSContext* aCx, JSObject* aObj, jsid aId,
JSAccessMode aMode, jsval* aVp);
static JSPrincipals* JSFindPrincipal(JSContext* aCx, JSObject* aObj);
static JSBool JSTranscodePrincipals(JSXDRState* aXdr,
JSPrincipals** aJsprinp);
};
--- a/extensions/pref/autoconfig/src/nsJSConfigTriggers.cpp
+++ b/extensions/pref/autoconfig/src/nsJSConfigTriggers.cpp
@@ -91,17 +91,17 @@ AutoConfigSecMan::CanGetService(JSContex
return NS_OK;
}
NS_IMETHODIMP
AutoConfigSecMan::CanAccess(PRUint32 aAction,
nsAXPCNativeCallContext *aCallContext,
JSContext *aJSContext, JSObject *aJSObject,
nsISupports *aObj, nsIClassInfo *aClassInfo,
- jsval aName, void **aPolicy)
+ jsid aName, void **aPolicy)
{
return NS_OK;
}
//*****************************************************************************
static JSContext *autoconfig_cx = nsnull;
static JSObject *autoconfig_glob;
--- a/ipc/testshell/TestShellParent.cpp
+++ b/ipc/testshell/TestShellParent.cpp
@@ -111,17 +111,17 @@ TestShellCommandParent::SetCallback(JSCo
mCx = aCx;
return JS_TRUE;
}
JSBool
TestShellCommandParent::RunCallback(const nsString& aResponse)
{
- NS_ENSURE_TRUE(mCallback && mCx, JS_FALSE);
+ NS_ENSURE_TRUE(mCallback != JSVAL_NULL && mCx, JS_FALSE);
JSAutoRequest ar(mCx);
JSObject* global = JS_GetGlobalObject(mCx);
NS_ENSURE_TRUE(global, JS_FALSE);
JSString* str = JS_NewUCStringCopyN(mCx, aResponse.get(), aResponse.Length());
NS_ENSURE_TRUE(str, JS_FALSE);
--- a/ipc/testshell/XPCShellEnvironment.cpp
+++ b/ipc/testshell/XPCShellEnvironment.cpp
@@ -732,27 +732,27 @@ FullTrustSecMan::CanGetService(JSContext
NS_IMETHODIMP
FullTrustSecMan::CanAccess(PRUint32 aAction,
nsAXPCNativeCallContext *aCallContext,
JSContext * aJSContext,
JSObject * aJSObject,
nsISupports *aObj,
nsIClassInfo *aClassInfo,
- jsval aName,
+ jsid aName,
void * *aPolicy)
{
return NS_OK;
}
NS_IMETHODIMP
FullTrustSecMan::CheckPropertyAccess(JSContext * aJSContext,
JSObject * aJSObject,
const char *aClassName,
- jsval aProperty,
+ jsid aProperty,
PRUint32 aAction)
{
return NS_OK;
}
NS_IMETHODIMP
FullTrustSecMan::CheckLoadURIFromScript(JSContext * cx,
nsIURI *uri)
--- a/js/ipc/ObjectWrapperChild.cpp
+++ b/js/ipc/ObjectWrapperChild.cpp
@@ -190,17 +190,17 @@ ObjectWrapperChild::jsval_to_JSVariant(J
case JSTYPE_STRING:
*to = nsDependentString((PRUnichar*)JS_GetStringChars(JSVAL_TO_STRING(from)),
JS_GetStringLength(JSVAL_TO_STRING(from)));
return true;
case JSTYPE_NUMBER:
if (JSVAL_IS_INT(from))
*to = JSVAL_TO_INT(from);
else if (JSVAL_IS_DOUBLE(from))
- *to = *JSVAL_TO_DOUBLE(from);
+ *to = JSVAL_TO_DOUBLE(from);
else return false;
return true;
case JSTYPE_BOOLEAN:
*to = !!JSVAL_TO_BOOLEAN(from);
return true;
case JSTYPE_XML:
// fall through
default:
@@ -211,17 +211,17 @@ ObjectWrapperChild::jsval_to_JSVariant(J
/*static*/ bool
ObjectWrapperChild::
JSObject_from_PObjectWrapperChild(JSContext*,
const PObjectWrapperChild* from,
JSObject** to)
{
const ObjectWrapperChild* owc =
static_cast<const ObjectWrapperChild*>(from);
- *to = owc ? owc->mObj : JSVAL_NULL;
+ *to = owc ? owc->mObj : NULL;
return true;
}
/*static*/ bool
ObjectWrapperChild::JSObject_from_JSVariant(JSContext* cx,
const JSVariant& from,
JSObject** to)
{
@@ -258,17 +258,17 @@ ObjectWrapperChild::jsval_from_JSVariant
return false;
*to = STRING_TO_JSVAL(s);
}
return true;
case JSVariant::Tint:
*to = INT_TO_JSVAL(from.get_int());
return true;
case JSVariant::Tdouble:
- return !!JS_NewDoubleValue(cx, from.get_double(), to);
+ return !!JS_NewNumberValue(cx, from.get_double(), to);
case JSVariant::Tbool:
*to = BOOLEAN_TO_JSVAL(from.get_bool());
return true;
default:
return false;
}
}
@@ -439,17 +439,17 @@ ObjectWrapperChild::AnswerNewEnumerateIn
JSContext* cx = Manager()->GetContext();
AutoContextPusher acp(cx);
AutoCheckOperation aco(this, status);
JSClass* clasp = const_cast<JSClass*>(&sCPOW_NewEnumerateState_JSClass);
JSObject* state = JS_NewObjectWithGivenProto(cx, clasp, NULL, NULL);
if (!state)
return false;
- AutoValueRooter tvr(cx, state);
+ AutoObjectRooter tvr(cx, state);
for (JSObject* proto = mObj;
proto;
proto = JS_GetPrototype(cx, proto))
{
AutoIdArray ids(cx, JS_Enumerate(cx, proto));
for (uint i = 0; i < ids.length(); ++i)
JS_DefinePropertyById(cx, state, ids[i], JSVAL_VOID,
--- a/js/ipc/ObjectWrapperParent.cpp
+++ b/js/ipc/ObjectWrapperParent.cpp
@@ -225,17 +225,17 @@ ObjectWrapperParent::GetJSObject(JSConte
JS_SetReservedSlot(cx, mObj, sFlagsSlot, JSVAL_ZERO);
}
return mObj;
}
static ObjectWrapperParent*
Unwrap(JSContext* cx, JSObject* obj)
{
- while (obj->getClass() != &ObjectWrapperParent::sCPOW_JSClass.base)
+ while (obj->getJSClass() != &ObjectWrapperParent::sCPOW_JSClass.base)
if (!(obj = obj->getProto()))
return NULL;
ObjectWrapperParent* self =
static_cast<ObjectWrapperParent*>(JS_GetPrivate(cx, obj));
NS_ASSERTION(!self || self->GetJSObject(cx) == obj,
"Wrapper and wrapped object disagree?");
@@ -270,17 +270,17 @@ ObjectWrapperParent::jsval_to_JSVariant(
case JSTYPE_STRING:
*to = nsDependentString((PRUnichar*)JS_GetStringChars(JSVAL_TO_STRING(from)),
JS_GetStringLength(JSVAL_TO_STRING(from)));
return true;
case JSTYPE_NUMBER:
if (JSVAL_IS_INT(from))
*to = JSVAL_TO_INT(from);
else if (JSVAL_IS_DOUBLE(from))
- *to = *JSVAL_TO_DOUBLE(from);
+ *to = JSVAL_TO_DOUBLE(from);
else return false;
return true;
case JSTYPE_BOOLEAN:
*to = !!JSVAL_TO_BOOLEAN(from);
return true;
case JSTYPE_XML:
return with_error(cx, false, "CPOWs currently cannot handle JSTYPE_XML");
default:
@@ -305,17 +305,17 @@ ObjectWrapperParent::jsval_from_JSVarian
return false;
*to = STRING_TO_JSVAL(str);
return true;
}
case JSVariant::Tint:
*to = INT_TO_JSVAL(from.get_int());
return true;
case JSVariant::Tdouble:
- return !!JS_NewDoubleValue(cx, from.get_double(), to);
+ return !!JS_NewNumberValue(cx, from.get_double(), to);
case JSVariant::Tbool:
*to = BOOLEAN_TO_JSVAL(from.get_bool());
return true;
default:
return false;
}
}
@@ -374,28 +374,30 @@ jsid_from_nsString(JSContext* cx, const
{
JSString* str = JS_NewUCStringCopyZ(cx, from.BeginReading());
if (!str)
return false;
return JS_ValueToId(cx, STRING_TO_JSVAL(str), to);
}
static bool
-jsval_to_nsString(JSContext* cx, jsval from, nsString* to)
+jsval_to_nsString(JSContext* cx, jsid from, nsString* to)
{
JSString* str;
- if ((str = JS_ValueToString(cx, from))) {
+ jsval idval;
+ if (JS_IdToValue(cx, from, &idval) &&
+ (str = JS_ValueToString(cx, idval))) {
*to = JS_GetStringChars(str);
return true;
}
return false;
}
/*static*/ JSBool
-ObjectWrapperParent::CPOW_AddProperty(JSContext *cx, JSObject *obj, jsval id,
+ObjectWrapperParent::CPOW_AddProperty(JSContext *cx, JSObject *obj, jsid id,
jsval *vp)
{
CPOW_LOG(("Calling CPOW_AddProperty (%s)...",
JSVAL_TO_CSTR(cx, id)));
ObjectWrapperParent* self = Unwrap(cx, obj);
if (!self)
return with_error(cx, JS_FALSE, "Unwrapping failed in CPOW_AddProperty");
@@ -412,17 +414,17 @@ ObjectWrapperParent::CPOW_AddProperty(JS
return (self->Manager()->RequestRunToCompletion() &&
self->CallAddProperty(in_id,
aco.StatusPtr()) &&
aco.Ok());
}
/*static*/ JSBool
-ObjectWrapperParent::CPOW_GetProperty(JSContext *cx, JSObject *obj, jsval id,
+ObjectWrapperParent::CPOW_GetProperty(JSContext *cx, JSObject *obj, jsid id,
jsval *vp)
{
CPOW_LOG(("Calling CPOW_GetProperty (%s)...",
JSVAL_TO_CSTR(cx, id)));
ObjectWrapperParent* self = Unwrap(cx, obj);
if (!self)
return with_error(cx, JS_FALSE, "Unwrapping failed in CPOW_GetProperty");
@@ -439,17 +441,17 @@ ObjectWrapperParent::CPOW_GetProperty(JS
return (self->Manager()->RequestRunToCompletion() &&
self->CallGetProperty(in_id,
aco.StatusPtr(), &out_v) &&
aco.Ok() &&
self->jsval_from_JSVariant(cx, out_v, vp));
}
/*static*/ JSBool
-ObjectWrapperParent::CPOW_SetProperty(JSContext *cx, JSObject *obj, jsval id,
+ObjectWrapperParent::CPOW_SetProperty(JSContext *cx, JSObject *obj, jsid id,
jsval *vp)
{
CPOW_LOG(("Calling CPOW_SetProperty (%s)...",
JSVAL_TO_CSTR(cx, id)));
ObjectWrapperParent* self = Unwrap(cx, obj);
if (!self)
return with_error(cx, JS_FALSE, "Unwrapping failed in CPOW_SetProperty");
@@ -468,17 +470,17 @@ ObjectWrapperParent::CPOW_SetProperty(JS
return (self->Manager()->RequestRunToCompletion() &&
self->CallSetProperty(in_id, in_v,
aco.StatusPtr(), &out_v) &&
aco.Ok() &&
self->jsval_from_JSVariant(cx, out_v, vp));
}
/*static*/ JSBool
-ObjectWrapperParent::CPOW_DelProperty(JSContext *cx, JSObject *obj, jsval id,
+ObjectWrapperParent::CPOW_DelProperty(JSContext *cx, JSObject *obj, jsid id,
jsval *vp)
{
CPOW_LOG(("Calling CPOW_DelProperty (%s)...",
JSVAL_TO_CSTR(cx, id)));
ObjectWrapperParent* self = Unwrap(cx, obj);
if (!self)
return with_error(cx, JS_FALSE, "Unwrapping failed in CPOW_DelProperty");
@@ -575,17 +577,17 @@ ObjectWrapperParent::CPOW_NewEnumerate(J
return self->NewEnumerateDestroy(cx, *statep);
}
NS_NOTREACHED("Unknown enum_op value in CPOW_NewEnumerate");
return JS_FALSE;
}
/*static*/ JSBool
-ObjectWrapperParent::CPOW_NewResolve(JSContext *cx, JSObject *obj, jsval id,
+ObjectWrapperParent::CPOW_NewResolve(JSContext *cx, JSObject *obj, jsid id,
uintN flags, JSObject **objp)
{
CPOW_LOG(("Calling CPOW_NewResolve (%s)...",
JSVAL_TO_CSTR(cx, id)));
ObjectWrapperParent* self = Unwrap(cx, obj);
if (!self)
return with_error(cx, JS_FALSE, "Unwrapping failed in CPOW_NewResolve");
@@ -601,21 +603,19 @@ ObjectWrapperParent::CPOW_NewResolve(JSC
if (!self->Manager()->RequestRunToCompletion() ||
!self->CallNewResolve(in_id, flags,
aco.StatusPtr(), &out_pobj) ||
!aco.Ok() ||
!JSObject_from_PObjectWrapperParent(cx, out_pobj, objp))
return JS_FALSE;
- jsid interned_id;
- if (*objp &&
- JS_ValueToId(cx, id, &interned_id)) {
+ if (*objp) {
AutoResolveFlag arf(cx, *objp);
- JS_DefinePropertyById(cx, *objp, interned_id, JSVAL_VOID, NULL, NULL,
+ JS_DefinePropertyById(cx, *objp, id, JSVAL_VOID, NULL, NULL,
JSPROP_ENUMERATE);
}
return JS_TRUE;
}
/*static*/ JSBool
ObjectWrapperParent::CPOW_Convert(JSContext *cx, JSObject *obj, JSType type,
jsval *vp)
@@ -703,55 +703,55 @@ ObjectWrapperParent::CPOW_Construct(JSCo
return (constructor->Manager()->RequestRunToCompletion() &&
constructor->CallConstruct(in_argv,
aco.StatusPtr(), &out_powp) &&
aco.Ok() &&
jsval_from_PObjectWrapperParent(cx, out_powp, rval));
}
/*static*/ JSBool
-ObjectWrapperParent::CPOW_HasInstance(JSContext *cx, JSObject *obj, jsval v,
+ObjectWrapperParent::CPOW_HasInstance(JSContext *cx, JSObject *obj, const jsval *v,
JSBool *bp)
{
CPOW_LOG(("Calling CPOW_HasInstance..."));
*bp = JS_FALSE;
ObjectWrapperParent* self = Unwrap(cx, obj);
if (!self)
return with_error(cx, JS_FALSE, "Unwrapping failed in CPOW_HasInstance");
AutoCheckOperation aco(cx, self);
JSVariant in_v;
- if (!jsval_to_JSVariant(cx, v, &in_v))
+ if (!jsval_to_JSVariant(cx, *v, &in_v))
return JS_FALSE;
return (self->Manager()->RequestRunToCompletion() &&
self->CallHasInstance(in_v,
aco.StatusPtr(), bp) &&
aco.Ok());
}
/*static*/ JSBool
-ObjectWrapperParent::CPOW_Equality(JSContext *cx, JSObject *obj, jsval v,
+ObjectWrapperParent::CPOW_Equality(JSContext *cx, JSObject *obj, const jsval *v,
JSBool *bp)
{
CPOW_LOG(("Calling CPOW_Equality..."));
*bp = JS_FALSE;
ObjectWrapperParent* self = Unwrap(cx, obj);
if (!self)
return with_error(cx, JS_FALSE, "Unwrapping failed in CPOW_Equality");
- if (JSVAL_IS_PRIMITIVE(v))
+ if (JSVAL_IS_PRIMITIVE(*v))
return JS_TRUE;
- ObjectWrapperParent* other = Unwrap(cx, JSVAL_TO_OBJECT(v));
+ ObjectWrapperParent* other = Unwrap(cx, JSVAL_TO_OBJECT(*v));
if (!other)
return JS_TRUE;
*bp = (self == other);
return JS_TRUE;
}
--- a/js/ipc/ObjectWrapperParent.h
+++ b/js/ipc/ObjectWrapperParent.h
@@ -83,36 +83,36 @@ protected:
ContextWrapperParent* Manager();
private:
mutable JSObject* mObj;
static JSBool
- CPOW_AddProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
+ CPOW_AddProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
static JSBool
- CPOW_DelProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
+ CPOW_DelProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
static JSBool
- CPOW_GetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
+ CPOW_GetProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
static JSBool
- CPOW_SetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
+ CPOW_SetProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
JSBool NewEnumerateInit(JSContext* cx, jsval* statep, jsid* idp);
JSBool NewEnumerateNext(JSContext* cx, jsval* statep, jsid* idp);
JSBool NewEnumerateDestroy(JSContext* cx, jsval state);
static JSBool
CPOW_NewEnumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op,
jsval *statep, jsid *idp);
static JSBool
- CPOW_NewResolve(JSContext *cx, JSObject *obj, jsval id, uintN flags,
+ CPOW_NewResolve(JSContext *cx, JSObject *obj, jsid id, uintN flags,
JSObject **objp);
static JSBool
CPOW_Convert(JSContext *cx, JSObject *obj, JSType type, jsval *vp);
static void
CPOW_Finalize(JSContext* cx, JSObject* obj);
@@ -120,20 +120,20 @@ private:
CPOW_Call(JSContext* cx, JSObject* obj, uintN argc, jsval* argv,
jsval* rval);
static JSBool
CPOW_Construct(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
jsval *rval);
static JSBool
- CPOW_HasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp);
+ CPOW_HasInstance(JSContext *cx, JSObject *obj, const jsval *v, JSBool *bp);
static JSBool
- CPOW_Equality(JSContext *cx, JSObject *obj, jsval v, JSBool *bp);
+ CPOW_Equality(JSContext *cx, JSObject *obj, const jsval *v, JSBool *bp);
static bool jsval_to_JSVariant(JSContext* cx, jsval from, JSVariant* to);
static bool jsval_from_JSVariant(JSContext* cx, const JSVariant& from,
jsval* to);
static bool
JSObject_to_PObjectWrapperParent(JSContext* cx, JSObject* from,
PObjectWrapperParent** to);
static bool
--- a/js/jetpack/Handle.h
+++ b/js/jetpack/Handle.h
@@ -155,32 +155,32 @@ private:
// Used to cache the JSObject returned by ToJSObject, which is
// otherwise a const method.
mutable JSObject* mObj;
mutable JSRuntime* mRuntime;
static Handle*
Unwrap(JSContext* cx, JSObject* obj) {
- while (obj && obj->getClass() != &sHandle_JSClass)
+ while (obj && obj->getJSClass() != &sHandle_JSClass)
obj = obj->getProto();
if (!obj)
return NULL;
Handle* self = static_cast<Handle*>(JS_GetPrivate(cx, obj));
NS_ASSERTION(!self || self->ToJSObject(cx) == obj,
"Wrapper and wrapped object disagree?");
return self;
}
static JSBool
- GetParent(JSContext* cx, JSObject* obj, jsval, jsval* vp) {
+ GetParent(JSContext* cx, JSObject* obj, jsid, jsval* vp) {
JS_SET_RVAL(cx, vp, JSVAL_NULL);
Handle* self = Unwrap(cx, obj);
if (!self)
return JS_TRUE;
Handle* parent = self->mParent;
if (!parent)
@@ -188,17 +188,17 @@ private:
JSObject* pobj = parent->ToJSObject(cx);
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(pobj));
return JS_TRUE;
}
static JSBool
- GetIsValid(JSContext* cx, JSObject* obj, jsval, jsval* vp) {
+ GetIsValid(JSContext* cx, JSObject* obj, jsid, jsval* vp) {
Handle* self = Unwrap(cx, obj);
JS_SET_RVAL(cx, vp, BOOLEAN_TO_JSVAL(!!self));
return JS_TRUE;
}
static JSBool
Invalidate(JSContext* cx, uintN argc, jsval* vp) {
if (argc > 0) {
--- a/js/jetpack/JetpackActorCommon.cpp
+++ b/js/jetpack/JetpackActorCommon.cpp
@@ -141,17 +141,17 @@ JetpackActorCommon::jsval_to_PrimVariant
*to = nsDependentString((PRUnichar*)JS_GetStringChars(JSVAL_TO_STRING(from)),
JS_GetStringLength(JSVAL_TO_STRING(from)));
return true;
case JSTYPE_NUMBER:
if (JSVAL_IS_INT(from))
*to = JSVAL_TO_INT(from);
else if (JSVAL_IS_DOUBLE(from))
- *to = *JSVAL_TO_DOUBLE(from);
+ *to = JSVAL_TO_DOUBLE(from);
else
return false;
return true;
case JSTYPE_BOOLEAN:
*to = !!JSVAL_TO_BOOLEAN(from);
return true;
@@ -273,17 +273,17 @@ JetpackActorCommon::jsval_from_PrimVaria
*to = from.get_bool() ? JSVAL_TRUE : JSVAL_FALSE;
return true;
case PrimVariant::Tint:
*to = INT_TO_JSVAL(from.get_int());
return true;
case PrimVariant::Tdouble:
- return !!JS_NewDoubleValue(cx, from.get_double(), to);
+ return !!JS_NewNumberValue(cx, from.get_double(), to);
case PrimVariant::TnsString: {
const nsString& str = from.get_nsString();
// TODO Use some sort of sharedstring/stringbuffer abstraction to
// exploit sharing opportunities more generally.
if (!str.Length()) {
*to = JS_GetEmptyStringValue(cx);
return true;
@@ -344,21 +344,21 @@ JetpackActorCommon::jsval_from_CompVaria
OpaqueSeenType::IdType ignored;
if (!seen->add(obj, &ignored))
return false;
const nsTArray<KeyValue>& kvs = from.get_ArrayOfKeyValue();
for (PRUint32 i = 0; i < kvs.Length(); ++i) {
const KeyValue& kv = kvs.ElementAt(i);
js::AutoValueRooter toSet(cx);
- if (!jsval_from_Variant(cx, kv.value(), toSet.addr(), seen) ||
+ if (!jsval_from_Variant(cx, kv.value(), toSet.jsval_addr(), seen) ||
!JS_SetUCProperty(cx, obj,
kv.key().get(),
kv.key().Length(),
- toSet.addr()))
+ toSet.jsval_addr()))
return false;
}
break;
}
case CompVariant::TArrayOfVariant: {
const nsTArray<Variant>& vs = from.get_ArrayOfVariant();
@@ -451,21 +451,21 @@ JetpackActorCommon::RecvMessage(JSContex
JSObject* implGlobal = JS_GetGlobalObject(cx);
js::AutoValueRooter rval(cx);
for (PRUint32 i = 0; i < snapshot.Length(); ++i) {
Variant* vp = results ? results->AppendElement() : NULL;
rval.set(JSVAL_VOID);
if (!JS_CallFunctionValue(cx, implGlobal, snapshot[i], argc, argv,
- rval.addr())) {
+ rval.jsval_addr())) {
(void) JS_ReportPendingException(cx);
if (vp)
*vp = void_t();
- } else if (vp && !jsval_to_Variant(cx, rval.value(), vp))
+ } else if (vp && !jsval_to_Variant(cx, rval.jsval_value(), vp))
*vp = void_t();
}
return true;
}
JetpackActorCommon::RecList::~RecList()
{
--- a/js/jetpack/JetpackChild.cpp
+++ b/js/jetpack/JetpackChild.cpp
@@ -153,17 +153,17 @@ JetpackChild::RecvSendMessage(const nsSt
bool
JetpackChild::RecvEvalScript(const nsString& code)
{
JSAutoRequest request(mCx);
js::AutoValueRooter ignored(mCx);
(void) JS_EvaluateUCScript(mCx, JS_GetGlobalObject(mCx), code.get(),
- code.Length(), "", 1, ignored.addr());
+ code.Length(), "", 1, ignored.jsval_addr());
return true;
}
PHandleChild*
JetpackChild::AllocPHandle()
{
return new HandleChild();
}
@@ -437,13 +437,13 @@ JetpackChild::EvalInSandbox(JSContext* c
}
JSString* str = JS_ValueToString(cx, argv[1]);
if (!str)
return JS_FALSE;
js::AutoValueRooter ignored(cx);
return JS_EvaluateUCScript(cx, obj, JS_GetStringChars(str), JS_GetStringLength(str), "", 1,
- ignored.addr());
+ ignored.jsval_addr());
}
} // namespace jetpack
} // namespace mozilla
--- a/js/jetpack/JetpackParent.cpp
+++ b/js/jetpack/JetpackParent.cpp
@@ -98,26 +98,26 @@ JetpackParent::SendMessage(const nsAStri
if (!SendSendMessage(nsString(aMessageName), data))
return NS_ERROR_FAILURE;
return NS_OK;
}
NS_IMETHODIMP
JetpackParent::RegisterReceiver(const nsAString& aMessageName,
- jsval aReceiver)
+ const jsval &aReceiver)
{
return JetpackActorCommon::RegisterReceiver(mContext,
nsString(aMessageName),
aReceiver);
}
NS_IMETHODIMP
JetpackParent::UnregisterReceiver(const nsAString& aMessageName,
- jsval aReceiver)
+ const jsval &aReceiver)
{
JetpackActorCommon::UnregisterReceiver(nsString(aMessageName),
aReceiver);
return NS_OK;
}
NS_IMETHODIMP
JetpackParent::UnregisterReceivers(const nsAString& aMessageName)
--- a/js/jsd/jsd.h
+++ b/js/jsd/jsd.h
@@ -961,17 +961,17 @@ jsd_IsValueNative(JSDContext* jsdc, JSDV
/**************************************************/
extern JSBool
jsd_GetValueBoolean(JSDContext* jsdc, JSDValue* jsdval);
extern int32
jsd_GetValueInt(JSDContext* jsdc, JSDValue* jsdval);
-extern jsdouble*
+extern jsdouble
jsd_GetValueDouble(JSDContext* jsdc, JSDValue* jsdval);
extern JSString*
jsd_GetValueString(JSDContext* jsdc, JSDValue* jsdval);
extern const char*
jsd_GetValueFunctionName(JSDContext* jsdc, JSDValue* jsdval);
--- a/js/jsd/jsd_val.c
+++ b/js/jsd/jsd_val.c
@@ -198,23 +198,22 @@ int32
jsd_GetValueInt(JSDContext* jsdc, JSDValue* jsdval)
{
jsval val = jsdval->val;
if(!JSVAL_IS_INT(val))
return 0;
return JSVAL_TO_INT(val);
}
-jsdouble*
+jsdouble
jsd_GetValueDouble(JSDContext* jsdc, JSDValue* jsdval)
{
- jsval val = jsdval->val;
- if(!JSVAL_IS_DOUBLE(val))
+ if(!JSVAL_IS_DOUBLE(jsdval->val))
return 0;
- return JSVAL_TO_DOUBLE(val);
+ return JSVAL_TO_DOUBLE(jsdval->val);
}
JSString*
jsd_GetValueString(JSDContext* jsdc, JSDValue* jsdval)
{
JSContext* cx = jsdc->dumbContext;
JSExceptionState* exceptionState;
@@ -487,17 +486,18 @@ jsd_GetValueProperty(JSDContext* jsdc, J
JSDProperty* jsdprop;
JSDProperty* iter = NULL;
JSObject* obj;
uintN attrs = 0;
JSBool found;
JSPropertyDesc pd;
const jschar * nameChars;
size_t nameLen;
- jsval val;
+ jsval val, nameval;
+ jsid nameid;
if(!jsd_IsValueObject(jsdc, jsdval))
return NULL;
/* If we already have the prop, then return it */
while(NULL != (jsdprop = jsd_IterateProperties(jsdc, jsdval, &iter)))
{
JSString* propName = jsd_GetValueString(jsdc, jsdprop->name);
@@ -543,18 +543,24 @@ jsd_GetValueProperty(JSDContext* jsdc, J
}
else
{
pd.value = val;
}
JS_EndRequest(cx);
- pd.id = STRING_TO_JSVAL(name);
- pd.alias = pd.slot = pd.spare = 0;
+ nameval = STRING_TO_JSVAL(name);
+ if (!JS_ValueToId(cx, nameval, &nameid) ||
+ !JS_IdToValue(cx, nameid, &pd.id)) {
+ return NULL;
+ }
+
+ pd.slot = pd.spare = 0;
+ pd.alias = JSVAL_NULL;
pd.flags |= (attrs & JSPROP_ENUMERATE) ? JSPD_ENUMERATE : 0
| (attrs & JSPROP_READONLY) ? JSPD_READONLY : 0
| (attrs & JSPROP_PERMANENT) ? JSPD_PERMANENT : 0;
return _newProperty(jsdc, &pd, JSDPD_HINTED);
}
--- a/js/jsd/jsd_xpc.cpp
+++ b/js/jsd/jsd_xpc.cpp
@@ -33,18 +33,16 @@
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "jsdbgapi.h"
-#include "jscntxt.h"
-#include "jsfun.h"
#include "jsd_xpc.h"
#include "nsIXPConnect.h"
#include "mozilla/ModuleUtils.h"
#include "nsIServiceManager.h"
#include "nsIScriptGlobalObject.h"
#include "nsIObserver.h"
#include "nsIObserverService.h"
@@ -1009,26 +1007,27 @@ jsdScript::CreatePPLineMap()
JSAutoRequest ar(cx);
JSObject *obj = JS_NewObject(cx, NULL, NULL, NULL);
JSFunction *fun = JSD_GetJSFunction (mCx, mScript);
JSScript *script;
PRUint32 baseLine;
PRBool scriptOwner = PR_FALSE;
if (fun) {
- if (fun->nargs > 12)
+ uintN nargs = JS_GetFunctionArgumentCount(cx, fun);
+ if (nargs > 12)
return nsnull;
JSString *jsstr = JS_DecompileFunctionBody (cx, fun, 4);
if (!jsstr)
return nsnull;
const char *argnames[] = {"arg1", "arg2", "arg3", "arg4",
"arg5", "arg6", "arg7", "arg8",
"arg9", "arg10", "arg11", "arg12" };
- fun = JS_CompileUCFunction (cx, obj, "ppfun", fun->nargs, argnames,
+ fun = JS_CompileUCFunction (cx, obj, "ppfun", nargs, argnames,
JS_GetStringChars(jsstr),
JS_GetStringLength(jsstr),
"x-jsd:ppbuffer?type=function", 3);
if (!fun || !(script = JS_GetFunctionScript(cx, fun)))
return nsnull;
baseLine = 3;
} else {
JSString *jsstr = JS_DecompileScript (cx, JSD_GetJSScript(mCx, mScript),
@@ -1227,60 +1226,55 @@ jsdScript::GetParameterNames(PRUint32* c
if (!cx) {
NS_WARNING("No default context !?");
return NS_ERROR_FAILURE;
}
JSFunction *fun = JSD_GetJSFunction (mCx, mScript);
JSAutoRequest ar(cx);
- if (!fun || !fun->hasLocalNames() || fun->nargs == 0) {
+ uintN nargs = JS_GetFunctionArgumentCount(cx, fun);
+ if (!fun || !JS_FunctionHasLocalNames(cx, fun) || nargs == 0) {
*count = 0;
*paramNames = nsnull;
return NS_OK;
}
PRUnichar **ret =
- static_cast<PRUnichar**>(NS_Alloc(fun->nargs * sizeof(PRUnichar*)));
+ static_cast<PRUnichar**>(NS_Alloc(nargs * sizeof(PRUnichar*)));
if (!ret)
return NS_ERROR_OUT_OF_MEMORY;
- void *mark = JS_ARENA_MARK(&cx->tempPool);
- jsuword *names = js_GetLocalNameArray(cx, fun, &cx->tempPool);
+ void *mark;
+ jsuword *names = JS_GetFunctionLocalNameArray(cx, fun, &mark);
if (!names) {
NS_Free(ret);
return NS_ERROR_OUT_OF_MEMORY;
}
nsresult rv = NS_OK;
- for (uintN i = 0; i < fun->nargs; ++i) {
- JSAtom *atom = JS_LOCAL_NAME_TO_ATOM(names[i]);
+ for (uintN i = 0; i < nargs; ++i) {
+ JSAtom *atom = JS_LocalNameToAtom(names[i]);
if (!atom) {
ret[i] = 0;
} else {
- jsval atomVal = ATOM_KEY(atom);
- if (!JSVAL_IS_STRING(atomVal)) {
- NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(i, ret);
- rv = NS_ERROR_UNEXPECTED;
- break;
- }
- JSString *str = JSVAL_TO_STRING(atomVal);
+ JSString *str = JS_AtomKey(atom);
ret[i] = NS_strndup(reinterpret_cast<PRUnichar*>(JS_GetStringChars(str)),
JS_GetStringLength(str));
if (!ret[i]) {
NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(i, ret);
rv = NS_ERROR_OUT_OF_MEMORY;
break;
}
}
}
- JS_ARENA_RELEASE(&cx->tempPool, mark);
+ JS_ReleaseFunctionLocalNameArray(cx, mark);
if (NS_FAILED(rv))
return rv;
- *count = fun->nargs;
+ *count = nargs;
*paramNames = ret;
return NS_OK;
}
NS_IMETHODIMP
jsdScript::GetFunctionObject(jsdIValue **_rval)
{
JSFunction *fun = JSD_GetJSFunction(mCx, mScript);
@@ -1479,18 +1473,17 @@ jsdScript::IsLineExecutable(PRUint32 aLi
return NS_OK;
}
NS_IMETHODIMP
jsdScript::SetBreakpoint(PRUint32 aPC)
{
ASSERT_VALID_EPHEMERAL;
jsuword pc = mFirstPC + aPC;
- JSD_SetExecutionHook (mCx, mScript, pc, jsds_ExecutionHookProc,
- reinterpret_cast<void *>(PRIVATE_TO_JSVAL(NULL)));
+ JSD_SetExecutionHook (mCx, mScript, pc, jsds_ExecutionHookProc, NULL);
return NS_OK;
}
NS_IMETHODIMP
jsdScript::ClearBreakpoint(PRUint32 aPC)
{
ASSERT_VALID_EPHEMERAL;
jsuword pc = mFirstPC + aPC;
@@ -1985,17 +1978,17 @@ jsdStackFrame::Eval (const nsAString &by
mStackFrameInfo,
char_bytes, bytes.Length(),
PromiseFlatCString(fileName).get(),
line, &jv);
if (!*_rval) {
if (JS_IsExceptionPending(cx))
JS_GetPendingException (cx, &jv);
else
- jv = 0;
+ jv = JSVAL_NULL;
}
JS_RestoreExceptionState (cx, estate);
#ifdef DEBUG
JSContext* poppedCX;
rv = stack->Pop(&poppedCX);
NS_ASSERTION(NS_SUCCEEDED(rv) && poppedCX == cx, "bad pop");
@@ -2190,20 +2183,17 @@ jsdValue::GetBooleanValue(PRBool *_rval)
*_rval = JSD_GetValueBoolean (mCx, mValue);
return NS_OK;
}
NS_IMETHODIMP
jsdValue::GetDoubleValue(double *_rval)
{
ASSERT_VALID_EPHEMERAL;
- double *dp = JSD_GetValueDouble (mCx, mValue);
- if (!dp)
- return NS_ERROR_FAILURE;
- *_rval = *dp;
+ *_rval = JSD_GetValueDouble (mCx, mValue);
return NS_OK;
}
NS_IMETHODIMP
jsdValue::GetIntValue(PRInt32 *_rval)
{
ASSERT_VALID_EPHEMERAL;
*_rval = JSD_GetValueInt (mCx, mValue);
@@ -2902,17 +2892,17 @@ jsdService::WrapValue(jsdIValue **_rval)
rv = cc->GetArgvPtr (&argv);
if (NS_FAILED(rv))
return rv;
return WrapJSValue(argv[0], _rval);
}
NS_IMETHODIMP
-jsdService::WrapJSValue(jsval value, jsdIValue** _rval)
+jsdService::WrapJSValue(const jsval &value, jsdIValue** _rval)
{
JSDValue *jsdv = JSD_NewValue(mCx, value);
if (!jsdv)
return NS_ERROR_FAILURE;
*_rval = jsdValue::FromPtr (mCx, jsdv);
return NS_OK;
}
--- a/js/jsd/jsdebug.c
+++ b/js/jsd/jsdebug.c
@@ -1107,17 +1107,17 @@ JSD_GetValueBoolean(JSDContext* jsdc, JS
JSD_PUBLIC_API(int32)
JSD_GetValueInt(JSDContext* jsdc, JSDValue* jsdval)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_VALUE(jsdval);
return jsd_GetValueInt(jsdc, jsdval);
}
-JSD_PUBLIC_API(jsdouble*)
+JSD_PUBLIC_API(jsdouble)
JSD_GetValueDouble(JSDContext* jsdc, JSDValue* jsdval)
{
JSD_ASSERT_VALID_CONTEXT(jsdc);
JSD_ASSERT_VALID_VALUE(jsdval);
return jsd_GetValueDouble(jsdc, jsdval);
}
JSD_PUBLIC_API(JSString*)
--- a/js/jsd/jsdebug.h
+++ b/js/jsd/jsdebug.h
@@ -49,23 +49,21 @@
extern "C"
{
#endif
#include "jstypes.h"
#ifdef __cplusplus
}
#endif
-JS_BEGIN_EXTERN_C
#include "jsapi.h"
#include "jsdbgapi.h"
#ifdef LIVEWIRE
#include "lwdbgapi.h"
#endif
-JS_END_EXTERN_C
JS_BEGIN_EXTERN_C
/*
* The linkage of JSD API functions differs depending on whether the file is
* used within the JSD library or not. Any source file within the JSD
* libraray should define EXPORT_JSD_API whereas any client of the library
* should not.
@@ -1265,17 +1263,17 @@ JSD_GetValueBoolean(JSDContext* jsdc, JS
*/
extern JSD_PUBLIC_API(int32)
JSD_GetValueInt(JSDContext* jsdc, JSDValue* jsdval);
/*
* Return double value (does NOT do conversion).
* *** new for version 1.1 ****
*/
-extern JSD_PUBLIC_API(jsdouble*)
+extern JSD_PUBLIC_API(jsdouble)
JSD_GetValueDouble(JSDContext* jsdc, JSDValue* jsdval);
/*
* Return JSString value (DOES do conversion if necessary).
* NOTE that the JSString returned is not protected from garbage
* collection. It should be immediately read or wrapped using
* JSD_NewValue(jsdc,STRING_TO_JSVAL(str)) if necessary.
* *** new for version 1.1 ****
--- a/js/src/Makefile.in
+++ b/js/src/Makefile.in
@@ -221,29 +221,32 @@ INSTALLED_HEADERS = \
jsprvtd.h \
jspubtd.h \
jsregexp.h \
jsscan.h \
jsscope.h \
jsscript.h \
jsscriptinlines.h \
jsstaticcheck.h \
+ jsstdint.h \
jsstr.h \
jstask.h \
jstracer.h \
jstypedarray.h \
jstypes.h \
jsutil.h \
jsvector.h \
jstl.h \
jshashtable.h \
jsversion.h \
jswrapper.h \
jsxdrapi.h \
jsxml.h \
+ jsval.h \
+ jsvalue.h \
prmjtime.h \
$(NULL)
ifdef ENABLE_TRACEJIT
VPATH += $(srcdir)/nanojit
INSTALLED_HEADERS += \
jsbuiltins.h \
deleted file mode 100644
--- a/js/src/builtins.tbl
+++ /dev/null
@@ -1,91 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
- * vim: set ts=8 sw=4 et tw=0 ft=C:
- *
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla SpiderMonkey JavaScript 1.9 code, released
- * June 22, 2008.
- *
- * The Initial Developer of the Original Code is
- * Andreas Gal <gal@uci.edu>
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either of the GNU General Public License Version 2 or later (the "GPL"),
- * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-/**
- * This file declares builtin functions that can be called from JITted code.
- * Each line starts with "BUILTIN" and an integer, the number of arguments the
- * builtin takes. Builtins with no arguments are not supported.
- *
- * The macro arguments are:
- *
- * - 'extern' to indicate extern linkage for these functions and the associated
- * CallInfo.
- *
- * - The return type. This identifier must name one of the _JS_TYPEINFO_*
- * macros defined in jsbuiltins.h.
- *
- * - The builtin name. Prefixed with "js_" this gives the native function name.
- *
- * - The parameter types.
- *
- * - The cse flag. 1 if the builtin call can be optimized away by common
- * subexpression elimination; otherwise 0. This should be 1 only if the
- * function is idempotent and the return value is determined solely by the
- * arguments.
- *
- * - The fold flag. Reserved. The same as cse for now.
- */
-
-/*
- * NB: bool FASTCALL is not compatible with Nanojit's calling convention usage.
- * Do not use bool FASTCALL, use JSBool only!
- */
-
-BUILTIN2(extern, JSVAL, js_BoxDouble, CONTEXT, DOUBLE, 1, 1)
-BUILTIN2(extern, JSVAL, js_BoxInt32, CONTEXT, INT32, 1, 1)
-BUILTIN1(extern, DOUBLE, js_UnboxDouble, JSVAL, 1, 1)
-BUILTIN1(extern, INT32, js_UnboxInt32, JSVAL, 1, 1)
-BUILTIN2(extern, DOUBLE, js_dmod, DOUBLE, DOUBLE, 1, 1)
-BUILTIN2(extern, INT32, js_imod, INT32, INT32, 1, 1)
-BUILTIN1(extern, INT32, js_DoubleToInt32, DOUBLE, 1, 1)
-BUILTIN1(extern, UINT32, js_DoubleToUint32, DOUBLE, 1, 1)
-
-BUILTIN2(extern, DOUBLE, js_StringToNumber, CONTEXT, STRING, 1, 1)
-BUILTIN2(extern, INT32, js_StringToInt32, CONTEXT, STRING, 1, 1)
-BUILTIN2(FRIEND, BOOL, js_CloseIterator, CONTEXT, JSVAL, 0, 0)
-BUILTIN2(extern, SIDEEXIT, js_CallTree, INTERPSTATE, FRAGMENT, 0, 0)
-BUILTIN3(extern, BOOL, js_AddProperty, CONTEXT, OBJECT, SCOPEPROP, 0, 0)
-BUILTIN3(extern, BOOL, js_HasNamedProperty, CONTEXT, OBJECT, STRING, 0, 0)
-BUILTIN3(extern, BOOL, js_HasNamedPropertyInt32, CONTEXT, OBJECT, INT32, 0, 0)
-BUILTIN3(extern, JSVAL, js_CallGetter, CONTEXT, OBJECT, SCOPEPROP, 0, 0)
-BUILTIN2(extern, STRING, js_TypeOfObject, CONTEXT, OBJECT, 1, 1)
-BUILTIN2(extern, STRING, js_TypeOfBoolean, CONTEXT, INT32, 1, 1)
-BUILTIN2(extern, DOUBLE, js_BooleanOrUndefinedToNumber, CONTEXT, INT32, 1, 1)
-BUILTIN2(extern, STRING, js_BooleanOrUndefinedToString, CONTEXT, INT32, 1, 1)
-BUILTIN2(extern, OBJECT, js_Arguments, CONTEXT, OBJECT 0, 0)
-BUILTIN4(extern, OBJECT, js_NewNullClosure, CONTEXT, OBJECT, OBJECT, OBJECT, 0, 0)
--- a/js/src/configure.in
+++ b/js/src/configure.in
@@ -514,17 +514,18 @@ case "$target" in
if test "$GCC" != "yes"; then
# Check to see if we are really running in a msvc environemnt
_WIN32_MSVC=1
# Make sure compilers are valid
CFLAGS="$CFLAGS -TC -nologo"
CXXFLAGS="$CXXFLAGS -TP -nologo"
# MSVC warning C4345 warns of newly conformant behavior as of VS2003.
- CXXFLAGS="$CXXFLAGS -wd4345"
+ # MSVC warning C4800 is ubiquitous, useless, and annoying.
+ CXXFLAGS="$CXXFLAGS -wd4345 -wd4800"
AC_LANG_SAVE
AC_LANG_C
AC_TRY_COMPILE([#include <stdio.h>],
[ printf("Hello World\n"); ],,
AC_MSG_ERROR([\$(CC) test failed. You must have MS VC++ in your path to build.]) )
AC_LANG_CPLUSPLUS
AC_TRY_COMPILE([#include <new.h>],
--- a/js/src/ctypes/CTypes.cpp
+++ b/js/src/ctypes/CTypes.cpp
@@ -84,104 +84,104 @@ namespace CType {
jsval* argv, jsval* rval);
static JSBool ConstructBasic(JSContext* cx, JSObject* obj, uintN argc,
jsval* argv, jsval* rval);
static void Trace(JSTracer* trc, JSObject* obj);
static void Finalize(JSContext* cx, JSObject* obj);
static void FinalizeProtoClass(JSContext* cx, JSObject* obj);
- static JSBool PrototypeGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool PrototypeGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool NameGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool NameGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool SizeGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool SizeGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool PtrGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp);
+ static JSBool PtrGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp);
static JSBool CreateArray(JSContext* cx, uintN argc, jsval* vp);
static JSBool ToString(JSContext* cx, uintN argc, jsval* vp);
static JSBool ToSource(JSContext* cx, uintN argc, jsval* vp);
- static JSBool HasInstance(JSContext* cx, JSObject* obj, jsval v, JSBool* bp);
+ static JSBool HasInstance(JSContext* cx, JSObject* obj, const jsval *v, JSBool* bp);
}
namespace PointerType {
static JSBool Create(JSContext* cx, uintN argc, jsval* vp);
static JSBool ConstructData(JSContext* cx, JSObject* obj, uintN argc,
jsval* argv, jsval* rval);
- static JSBool TargetTypeGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool TargetTypeGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool ContentsGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool ContentsGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool ContentsSetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool ContentsSetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
static JSBool IsNull(JSContext* cx, uintN argc, jsval* vp);
}
namespace ArrayType {
static JSBool Create(JSContext* cx, uintN argc, jsval* vp);
static JSBool ConstructData(JSContext* cx, JSObject* obj, uintN argc,
jsval* argv, jsval* rval);
- static JSBool ElementTypeGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool ElementTypeGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool LengthGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool LengthGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool Getter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp);
- static JSBool Setter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp);
+ static JSBool Getter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp);
+ static JSBool Setter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp);
static JSBool AddressOfElement(JSContext* cx, uintN argc, jsval* vp);
}
namespace StructType {
static JSBool Create(JSContext* cx, uintN argc, jsval* vp);
static JSBool ConstructData(JSContext* cx, JSObject* obj, uintN argc,
jsval* argv, jsval* rval);
- static JSBool FieldsArrayGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool FieldsArrayGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool FieldGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool FieldGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool FieldSetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool FieldSetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
static JSBool AddressOfField(JSContext* cx, uintN argc, jsval* vp);
static JSBool Define(JSContext* cx, uintN argc, jsval* vp);
}
namespace FunctionType {
static JSBool Create(JSContext* cx, uintN argc, jsval* vp);
static JSBool ConstructData(JSContext* cx, JSObject* typeObj,
JSObject* dataObj, JSObject* fnObj, JSObject* thisObj);
static JSBool Call(JSContext* cx, JSObject* obj, uintN argc, jsval* argv,
jsval* rval);
- static JSBool ArgTypesGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool ArgTypesGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool ReturnTypeGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool ReturnTypeGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool ABIGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp);
- static JSBool IsVariadicGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool ABIGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp);
+ static JSBool IsVariadicGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
}
namespace CClosure {
static void Trace(JSTracer* trc, JSObject* obj);
static void Finalize(JSContext* cx, JSObject* obj);
// libffi callback
static void ClosureStub(ffi_cif* cif, void* result, void** args,
void* userData);
}
namespace CData {
static void Finalize(JSContext* cx, JSObject* obj);
- static JSBool ValueGetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool ValueGetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
- static JSBool ValueSetter(JSContext* cx, JSObject* obj, jsval idval,
+ static JSBool ValueSetter(JSContext* cx, JSObject* obj, jsid idval,
jsval* vp);
static JSBool Address(JSContext* cx, uintN argc, jsval* vp);
static JSBool ReadString(JSContext* cx, uintN argc, jsval* vp);
static JSBool ToSource(JSContext* cx, uintN argc, jsval* vp);
}
// Int64Base provides functions common to Int64 and UInt64.
namespace Int64Base {
@@ -509,17 +509,17 @@ GetErrorMessage(void* userRef, const cha
return &ErrorFormatString[errorNumber];
return NULL;
}
JSBool
TypeError(JSContext* cx, const char* expected, jsval actual)
{
JSString* str = JS_ValueToSource(cx, actual);
- js::AutoValueRooter root(cx, str);
+ js::AutoStringRooter root(cx, str);
const char* src;
if (str) {
src = JS_GetStringBytesZ(cx, str);
if (!src)
return false;
} else {
JS_ClearPendingException(cx);
@@ -677,17 +677,17 @@ InitTypeConstructor(JSContext* cx,
// Create an object to serve as the common ancestor for all CData objects
// created from the given type constructor. This has ctypes.CData.prototype
// as its prototype, such that it inherits the properties and functions
// common to all CDatas.
dataProto = JS_NewObject(cx, &sCDataProtoClass, CDataProto, parent);
if (!dataProto)
return false;
- js::AutoValueRooter protoroot(cx, dataProto);
+ js::AutoObjectRooter protoroot(cx, dataProto);
// Define functions and properties on the 'dataProto' object that are common
// to all CData objects created from this type constructor. (These will
// become functions and properties on CData objects created from this type.)
if (instanceFns && !JS_DefineFunctions(cx, dataProto, instanceFns))
return false;
if (instanceProps && !JS_DefineProperties(cx, dataProto, instanceProps))
@@ -811,37 +811,37 @@ InitTypeClasses(JSContext* cx, JSObject*
// * __proto__ === 'p', the prototype object from above
// * 'constructor' property === 't'
JSObject* protos[CTYPEPROTO_SLOTS];
if (!InitTypeConstructor(cx, parent, CTypeProto, CDataProto,
sPointerFunction, NULL, sPointerProps,
sPointerInstanceFunctions, sPointerInstanceProps,
protos[SLOT_POINTERPROTO], protos[SLOT_POINTERDATAPROTO]))
return false;
- js::AutoValueRooter proot(cx, protos[SLOT_POINTERDATAPROTO]);
+ js::AutoObjectRooter proot(cx, protos[SLOT_POINTERDATAPROTO]);
if (!InitTypeConstructor(cx, parent, CTypeProto, CDataProto,
sArrayFunction, NULL, sArrayProps,
sArrayInstanceFunctions, sArrayInstanceProps,
protos[SLOT_ARRAYPROTO], protos[SLOT_ARRAYDATAPROTO]))
return false;
- js::AutoValueRooter aroot(cx, protos[SLOT_ARRAYDATAPROTO]);
+ js::AutoObjectRooter aroot(cx, protos[SLOT_ARRAYDATAPROTO]);
if (!InitTypeConstructor(cx, parent, CTypeProto, CDataProto,
sStructFunction, sStructFunctions, sStructProps,
sStructInstanceFunctions, NULL,
protos[SLOT_STRUCTPROTO], protos[SLOT_STRUCTDATAPROTO]))
return false;
- js::AutoValueRooter sroot(cx, protos[SLOT_STRUCTDATAPROTO]);
+ js::AutoObjectRooter sroot(cx, protos[SLOT_STRUCTDATAPROTO]);
if (!InitTypeConstructor(cx, parent, CTypeProto, CDataProto,
sFunctionFunction, NULL, sFunctionProps, NULL, NULL,
protos[SLOT_FUNCTIONPROTO], protos[SLOT_FUNCTIONDATAPROTO]))
return false;
- js::AutoValueRooter froot(cx, protos[SLOT_FUNCTIONDATAPROTO]);
+ js::AutoObjectRooter froot(cx, protos[SLOT_FUNCTIONDATAPROTO]);
protos[SLOT_CDATAPROTO] = CDataProto;
// Create and attach the ctypes.{Int64,UInt64} constructors.
// Each of these has, respectively:
// * [[Class]] "Function"
// * __proto__ === Function.prototype
// * A constructor that creates a ctypes.{Int64,UInt64} object, respectively.
@@ -1101,17 +1101,17 @@ jsvalToBool(JSContext* cx, jsval val, bo
return true;
}
if (JSVAL_IS_INT(val)) {
jsint i = JSVAL_TO_INT(val);
*result = i != 0;
return i == 0 || i == 1;
}
if (JSVAL_IS_DOUBLE(val)) {
- jsdouble d = *JSVAL_TO_DOUBLE(val);
+ jsdouble d = JSVAL_TO_DOUBLE(val);
*result = d != 0;
// Allow -0.
return d == 1 || d == 0;
}
// Don't silently convert null to bool. It's probably a mistake.
return false;
}
@@ -1128,17 +1128,17 @@ jsvalToInteger(JSContext* cx, jsval val,
// Make sure the integer fits in the alotted precision, and has the right
// sign.
jsint i = JSVAL_TO_INT(val);
return ConvertExact(i, result);
}
if (JSVAL_IS_DOUBLE(val)) {
// Don't silently lose bits here -- check that val really is an
// integer value, and has the right sign.
- jsdouble d = *JSVAL_TO_DOUBLE(val);
+ jsdouble d = JSVAL_TO_DOUBLE(val);
return ConvertExact(d, result);
}
if (!JSVAL_IS_PRIMITIVE(val)) {
JSObject* obj = JSVAL_TO_OBJECT(val);
if (CData::IsCData(cx, obj)) {
JSObject* typeObj = CData::GetCType(cx, obj);
void* data = CData::GetData(cx, obj);
@@ -1209,17 +1209,17 @@ jsvalToFloat(JSContext *cx, jsval val, F
// no good way around it. Sternly requiring that the 64-bit double
// argument be exactly representable as a 32-bit float is
// unrealistic: it would allow 1/2 to pass but not 1/3.
if (JSVAL_IS_INT(val)) {
*result = FloatType(JSVAL_TO_INT(val));
return true;
}
if (JSVAL_IS_DOUBLE(val)) {
- *result = FloatType(*JSVAL_TO_DOUBLE(val));
+ *result = FloatType(JSVAL_TO_DOUBLE(val));
return true;
}
if (!JSVAL_IS_PRIMITIVE(val)) {
JSObject* obj = JSVAL_TO_OBJECT(val);
if (CData::IsCData(cx, obj)) {
JSObject* typeObj = CData::GetCType(cx, obj);
void* data = CData::GetData(cx, obj);
@@ -1271,17 +1271,17 @@ jsvalToBigInteger(JSContext* cx,
// Make sure the integer fits in the alotted precision, and has the right
// sign.
jsint i = JSVAL_TO_INT(val);
return ConvertExact(i, result);
}
if (JSVAL_IS_DOUBLE(val)) {
// Don't silently lose bits here -- check that val really is an
// integer value, and has the right sign.
- jsdouble d = *JSVAL_TO_DOUBLE(val);
+ jsdouble d = JSVAL_TO_DOUBLE(val);
return ConvertExact(d, result);
}
if (allowString && JSVAL_IS_STRING(val)) {
// Allow conversion from base-10 or base-16 strings, provided the result
// fits in IntegerType. (This allows an Int64 or UInt64 object to be passed
// to the JS array element operator, which will automatically call
// toString() on the object for us.)
return StringToInteger(cx, JSVAL_TO_STRING(val), result);
@@ -1312,16 +1312,72 @@ jsvalToSize(JSContext* cx, jsval val, bo
{
if (!jsvalToBigInteger(cx, val, allowString, result))
return false;
// Also check that the result fits in a jsdouble.
return Convert<size_t>(jsdouble(*result)) == *result;
}
+// Implicitly convert val to IntegerType, allowing jsint, jsdouble,
+// Int64, UInt64, and optionally a decimal or hexadecimal string argument.
+// (This is common code shared by jsvalToSize and the Int64/UInt64 constructors.)
+template<class IntegerType>
+static bool
+jsidToBigInteger(JSContext* cx,
+ jsid val,
+ bool allowString,
+ IntegerType* result)
+{
+ JS_STATIC_ASSERT(numeric_limits<IntegerType>::is_exact);
+
+ if (JSID_IS_INT(val)) {
+ // Make sure the integer fits in the alotted precision, and has the right
+ // sign.
+ jsint i = JSID_TO_INT(val);
+ return ConvertExact(i, result);
+ }
+ if (allowString && JSID_IS_STRING(val)) {
+ // Allow conversion from base-10 or base-16 strings, provided the result
+ // fits in IntegerType. (This allows an Int64 or UInt64 object to be passed
+ // to the JS array element operator, which will automatically call
+ // toString() on the object for us.)
+ return StringToInteger(cx, JSID_TO_STRING(val), result);
+ }
+ if (JSID_IS_OBJECT(val)) {
+ // Allow conversion from an Int64 or UInt64 object directly.
+ JSObject* obj = JSID_TO_OBJECT(val);
+
+ if (UInt64::IsUInt64(cx, obj)) {
+ // Make sure the integer fits in IntegerType.
+ JSUint64 i = Int64Base::GetInt(cx, obj);
+ return ConvertExact(i, result);
+ }
+
+ if (Int64::IsInt64(cx, obj)) {
+ // Make sure the integer fits in IntegerType.
+ JSInt64 i = Int64Base::GetInt(cx, obj);
+ return ConvertExact(i, result);
+ }
+ }
+ return false;
+}
+
+// Implicitly convert val to a size value, where the size value is represented
+// by size_t but must also fit in a jsdouble.
+static bool
+jsidToSize(JSContext* cx, jsid val, bool allowString, size_t* result)
+{
+ if (!jsidToBigInteger(cx, val, allowString, result))
+ return false;
+
+ // Also check that the result fits in a jsdouble.
+ return Convert<size_t>(jsdouble(*result)) == *result;
+}
+
// Implicitly convert a size value to a jsval, ensuring that the size_t value
// fits in a jsdouble.
static JSBool
SizeTojsval(JSContext* cx, size_t size, jsval* result)
{
if (Convert<size_t>(jsdouble(size)) != size) {
JS_ReportError(cx, "size overflow");
return false;
@@ -1334,17 +1390,17 @@ SizeTojsval(JSContext* cx, size_t size,
template<class IntegerType>
static bool
jsvalToIntegerExplicit(JSContext* cx, jsval val, IntegerType* result)
{
JS_STATIC_ASSERT(numeric_limits<IntegerType>::is_exact);
if (JSVAL_IS_DOUBLE(val)) {
// Convert -Inf, Inf, and NaN to 0; otherwise, convert by C-style cast.
- jsdouble d = *JSVAL_TO_DOUBLE(val);
+ jsdouble d = JSVAL_TO_DOUBLE(val);
*result = FloatIsFinite(d) ? IntegerType(d) : 0;
return true;
}
if (!JSVAL_IS_PRIMITIVE(val)) {
// Convert Int64 and UInt64 values by C-style cast.
JSObject* obj = JSVAL_TO_OBJECT(val);
if (Int64::IsInt64(cx, obj)) {
JSInt64 i = Int64Base::GetInt(cx, obj);
@@ -1367,17 +1423,17 @@ jsvalToPtrExplicit(JSContext* cx, jsval
if (JSVAL_IS_INT(val)) {
// jsint always fits in intptr_t. If the integer is negative, cast through
// an intptr_t intermediate to sign-extend.
jsint i = JSVAL_TO_INT(val);
*result = i < 0 ? uintptr_t(intptr_t(i)) : uintptr_t(i);
return true;
}
if (JSVAL_IS_DOUBLE(val)) {
- jsdouble d = *JSVAL_TO_DOUBLE(val);
+ jsdouble d = JSVAL_TO_DOUBLE(val);
if (d < 0) {
// Cast through an intptr_t intermediate to sign-extend.
intptr_t i = Convert<intptr_t>(d);
if (jsdouble(i) != d)
return false;
*result = uintptr_t(i);
return true;
@@ -1854,21 +1910,21 @@ ImplicitConvert(JSContext* cx,
AutoPtr<char>::Array intermediate(new char[arraySize]);
if (!intermediate) {
JS_ReportAllocationOverflow(cx);
return false;
}
for (jsuint i = 0; i < sourceLength; ++i) {
js::AutoValueRooter item(cx);
- if (!JS_GetElement(cx, sourceArray, i, item.addr()))
+ if (!JS_GetElement(cx, sourceArray, i, item.jsval_addr()))
return false;
char* data = intermediate.get() + elementSize * i;
- if (!ImplicitConvert(cx, item.value(), baseType, data, false, NULL))
+ if (!ImplicitConvert(cx, item.jsval_value(), baseType, data, false, NULL))
return false;
}
memcpy(buffer, intermediate.get(), arraySize);
} else {
// Don't implicitly convert to string. Users can implicitly convert
// with `String(x)` or `""+x`.
@@ -1879,55 +1935,54 @@ ImplicitConvert(JSContext* cx,
case TYPE_struct: {
if (!JSVAL_IS_PRIMITIVE(val) && !sourceData) {
// Enumerate the properties of the object; if they match the struct
// specification, convert the fields.
JSObject* obj = JSVAL_TO_OBJECT(val);
JSObject* iter = JS_NewPropertyIterator(cx, obj);
if (!iter)
return false;
- js::AutoValueRooter iterroot(cx, iter);
+ js::AutoObjectRooter iterroot(cx, iter);
// Convert into an intermediate, in case of failure.
size_t structSize = CType::GetSize(cx, targetType);
AutoPtr<char>::Array intermediate(new char[structSize]);
if (!intermediate) {
JS_ReportAllocationOverflow(cx);
return false;
}
jsid id;
size_t i = 0;
while (1) {
if (!JS_NextProperty(cx, iter, &id))
return false;
- if (JSVAL_IS_VOID(id))
+ if (JSID_IS_VOID(id))
break;
js::AutoValueRooter fieldVal(cx);
- if (!JS_IdToValue(cx, id, fieldVal.addr()))
- return false;
- if (!JSVAL_IS_STRING(fieldVal.value())) {
+ JS_IdToValue(cx, id, fieldVal.jsval_addr());
+ if (!JSVAL_IS_STRING(fieldVal.jsval_value())) {
JS_ReportError(cx, "property name is not a string");
return false;
}
const FieldInfo* field = StructType::LookupField(cx, targetType,
- fieldVal.value());
+ JSVAL_TO_STRING(fieldVal.jsval_value()));
if (!field)
return false;
- JSString* name = JSVAL_TO_STRING(fieldVal.value());
+ JSString* name = JSVAL_TO_STRING(fieldVal.jsval_value());
js::AutoValueRooter prop(cx);
- if (!JS_GetUCProperty(cx, obj, name->chars(), name->length(), prop.addr()))
+ if (!JS_GetUCProperty(cx, obj, name->chars(), name->length(), prop.jsval_addr()))
return false;
// Convert the field via ImplicitConvert().
char* fieldData = intermediate.get() + field->mOffset;
- if (!ImplicitConvert(cx, prop.value(), field->mType, fieldData, false, NULL))
+ if (!ImplicitConvert(cx, prop.jsval_value(), field->mType, fieldData, false, NULL))
return false;
++i;
}
const FieldInfoHash* fields = StructType::GetFieldInfo(cx, targetType);
if (i != fields->count()) {
JS_ReportError(cx, "missing fields");
@@ -1958,17 +2013,17 @@ ExplicitConvert(JSContext* cx, jsval val
// If ImplicitConvert succeeds, use that result.
if (ImplicitConvert(cx, val, targetType, buffer, false, NULL))
return true;
// If ImplicitConvert failed, and there is no pending exception, then assume
// hard failure (out of memory, or some other similarly serious condition).
// We store any pending exception in case we need to re-throw it.
js::AutoValueRooter ex(cx);
- if (!JS_GetPendingException(cx, ex.addr()))
+ if (!JS_GetPendingException(cx, ex.jsval_addr()))
return false;
// Otherwise, assume soft failure. Clear the pending exception so that we
// can throw a different one as required.
JS_ClearPendingException(cx);
TypeCode type = CType::GetTypeCode(cx, targetType);
@@ -2006,17 +2061,17 @@ ExplicitConvert(JSContext* cx, jsval val
}
case TYPE_float32_t:
case TYPE_float64_t:
case TYPE_float:
case TYPE_double:
case TYPE_array:
case TYPE_struct:
// ImplicitConvert is sufficient. Re-throw the exception it generated.
- JS_SetPendingException(cx, ex.value());
+ JS_SetPendingException(cx, ex.jsval_value());
return false;
case TYPE_void_t:
case TYPE_function:
JS_NOT_REACHED("invalid type");
return false;
}
return true;
}
@@ -2524,32 +2579,32 @@ CType::Create(JSContext* cx,
// 'typeProto'. (For instance, this could be ctypes.CData.prototype
// for simple types, or something representing structs for StructTypes.)
// * 'constructor' property === 't'
// * Additional properties specified by 'ps', as appropriate for the
// specific type instance 't'.
JSObject* typeObj = JS_NewObject(cx, &sCTypeClass, typeProto, parent);
if (!typeObj)
return NULL;
- js::AutoValueRooter root(cx, typeObj);
+ js::AutoObjectRooter root(cx, typeObj);
// Set up the reserved slots.
if (!JS_SetReservedSlot(cx, typeObj, SLOT_TYPECODE, INT_TO_JSVAL(type)) ||
(ffiType && !JS_SetReservedSlot(cx, typeObj, SLOT_FFITYPE, PRIVATE_TO_JSVAL(ffiType))) ||
(name && !JS_SetReservedSlot(cx, typeObj, SLOT_NAME, STRING_TO_JSVAL(name))) ||
!JS_SetReservedSlot(cx, typeObj, SLOT_SIZE, size) ||
!JS_SetReservedSlot(cx, typeObj, SLOT_ALIGN, align))
return NULL;
if (dataProto) {
// Set up the 'prototype' and 'prototype.constructor' properties.
JSObject* prototype = JS_NewObject(cx, &sCDataProtoClass, dataProto, parent);
if (!prototype)
return NULL;
- js::AutoValueRooter protoroot(cx, prototype);
+ js::AutoObjectRooter protoroot(cx, prototype);
if (!JS_DefineProperty(cx, prototype, "constructor", OBJECT_TO_JSVAL(typeObj),
NULL, NULL, JSPROP_READONLY | JSPROP_PERMANENT))
return NULL;
// Set the 'prototype' object.
if (//!JS_SealObject(cx, prototype, JS_FALSE) || // XXX fixme - see bug 541212!
!JS_SetReservedSlot(cx, typeObj, SLOT_PROTO, OBJECT_TO_JSVAL(prototype)))
@@ -2577,17 +2632,17 @@ CType::DefineBuiltin(JSContext* cx,
TypeCode type,
jsval size,
jsval align,
ffi_type* ffiType)
{
JSString* nameStr = JS_NewStringCopyZ(cx, name);
if (!nameStr)
return NULL;
- js::AutoValueRooter nameRoot(cx, nameStr);
+ js::AutoStringRooter nameRoot(cx, nameStr);
// Create a new CType object with the common properties and slots.
JSObject* typeObj = Create(cx, typeProto, dataProto, type, nameStr, size,
align, ffiType);
if (!typeObj)
return NULL;
// Define the CType as a 'propName' property on 'parent'.
@@ -2803,17 +2858,17 @@ CType::GetSafeSize(JSContext* cx, JSObje
// The "size" property can be a jsint, a jsdouble, or JSVAL_VOID
// (for arrays of undefined length), and must always fit in a size_t.
if (JSVAL_IS_INT(size)) {
*result = JSVAL_TO_INT(size);
return true;
}
if (JSVAL_IS_DOUBLE(size)) {
- *result = Convert<size_t>(*JSVAL_TO_DOUBLE(size));
+ *result = Convert<size_t>(JSVAL_TO_DOUBLE(size));
return true;
}
JS_ASSERT(JSVAL_IS_VOID(size));
return false;
}
size_t
@@ -2826,17 +2881,17 @@ CType::GetSize(JSContext* cx, JSObject*
JS_ASSERT(!JSVAL_IS_VOID(size));
// The "size" property can be a jsint, a jsdouble, or JSVAL_VOID
// (for arrays of undefined length), and must always fit in a size_t.
// For callers who know it can never be JSVAL_VOID, return a size_t directly.
if (JSVAL_IS_INT(size))
return JSVAL_TO_INT(size);
- return Convert<size_t>(*JSVAL_TO_DOUBLE(size));
+ return Convert<size_t>(JSVAL_TO_DOUBLE(size));
}
bool
CType::IsSizeDefined(JSContext* cx, JSObject* obj)
{
JS_ASSERT(CType::IsCType(cx, obj));
jsval size;
@@ -2939,59 +2994,59 @@ CType::GetProtoFromType(JSContext* cx, J
// Get the requested ctypes.{Pointer,Array,Struct,Function}Type.prototype.
jsval result;
ASSERT_OK(JS_GetReservedSlot(cx, proto, slot, &result));
return JSVAL_TO_OBJECT(result);
}
JSBool
-CType::PrototypeGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+CType::PrototypeGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
if (!CType::IsCType(cx, obj)) {
JS_ReportError(cx, "not a CType");
return JS_FALSE;
}
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_PROTO, vp));
JS_ASSERT(!JSVAL_IS_PRIMITIVE(*vp) || JSVAL_IS_VOID(*vp));
return JS_TRUE;
}
JSBool
-CType::NameGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+CType::NameGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
if (!CType::IsCType(cx, obj)) {
JS_ReportError(cx, "not a CType");
return JS_FALSE;
}
JSString* name = CType::GetName(cx, obj);
if (!name)
return JS_FALSE;
*vp = STRING_TO_JSVAL(name);
return JS_TRUE;
}
JSBool
-CType::SizeGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+CType::SizeGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
if (!CType::IsCType(cx, obj)) {
JS_ReportError(cx, "not a CType");
return JS_FALSE;
}
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_SIZE, vp));
JS_ASSERT(JSVAL_IS_NUMBER(*vp) || JSVAL_IS_VOID(*vp));
return JS_TRUE;
}
JSBool
-CType::PtrGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+CType::PtrGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
if (!CType::IsCType(cx, obj)) {
JS_ReportError(cx, "not a CType");
return JS_FALSE;
}
JSObject* pointerType = PointerType::CreateInternal(cx, obj);
if (!pointerType)
@@ -3074,31 +3129,31 @@ CType::ToSource(JSContext* cx, uintN arg
if (!result)
return JS_FALSE;
JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(result));
return JS_TRUE;
}
JSBool
-CType::HasInstance(JSContext* cx, JSObject* obj, jsval v, JSBool* bp)
+CType::HasInstance(JSContext* cx, JSObject* obj, const jsval *v, JSBool* bp)
{
JS_ASSERT(CType::IsCType(cx, obj));
jsval slot;
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_PROTO, &slot));
JSObject* prototype = JSVAL_TO_OBJECT(slot);
JS_ASSERT(prototype);
JS_ASSERT(JS_GET_CLASS(cx, prototype) == &sCDataProtoClass);
*bp = JS_FALSE;
- if (JSVAL_IS_PRIMITIVE(v))
+ if (JSVAL_IS_PRIMITIVE(*v))
return JS_TRUE;
- JSObject* proto = JSVAL_TO_OBJECT(v);
+ JSObject* proto = JSVAL_TO_OBJECT(*v);
while ((proto = JS_GetPrototype(cx, proto))) {
if (proto == prototype) {
*bp = JS_TRUE;
break;
}
}
return JS_TRUE;
}
@@ -3148,17 +3203,17 @@ PointerType::CreateInternal(JSContext* c
// Create a new CType object with the common properties and slots.
JSObject* typeObj = CType::Create(cx, typeProto, dataProto, TYPE_pointer,
NULL, INT_TO_JSVAL(sizeof(void*)),
INT_TO_JSVAL(ffi_type_pointer.alignment),
&ffi_type_pointer);
if (!typeObj)
return NULL;
- js::AutoValueRooter root(cx, typeObj);
+ js::AutoObjectRooter root(cx, typeObj);
// Set the target type. (This will be 'null' for an opaque pointer type.)
if (!JS_SetReservedSlot(cx, typeObj, SLOT_TARGET_T, OBJECT_TO_JSVAL(baseType)))
return NULL;
// Finally, cache our newly-created PointerType on our pointed-to CType.
if (!JS_SetReservedSlot(cx, baseType, SLOT_PTR, OBJECT_TO_JSVAL(typeObj)))
return NULL;
@@ -3233,17 +3288,17 @@ PointerType::GetBaseType(JSContext* cx,
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_TARGET_T, &type));
JS_ASSERT(!JSVAL_IS_NULL(type));
return JSVAL_TO_OBJECT(type);
}
JSBool
PointerType::TargetTypeGetter(JSContext* cx,
JSObject* obj,
- jsval idval,
+ jsid idval,
jsval* vp)
{
if (!CType::IsCType(cx, obj) || CType::GetTypeCode(cx, obj) != TYPE_pointer) {
JS_ReportError(cx, "not a PointerType");
return JS_FALSE;
}
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_TARGET_T, vp));
@@ -3273,17 +3328,17 @@ PointerType::IsNull(JSContext* cx, uintN
jsval result = BOOLEAN_TO_JSVAL(data == NULL);
JS_SET_RVAL(cx, vp, result);
return JS_TRUE;
}
JSBool
PointerType::ContentsGetter(JSContext* cx,
JSObject* obj,
- jsval idval,
+ jsid idval,
jsval* vp)
{
if (!CData::IsCData(cx, obj)) {
JS_ReportError(cx, "not a CData");
return JS_FALSE;
}
// Get pointer type and base type.
@@ -3311,17 +3366,17 @@ PointerType::ContentsGetter(JSContext* c
JS_SET_RVAL(cx, vp, result);
return JS_TRUE;
}
JSBool
PointerType::ContentsSetter(JSContext* cx,
JSObject* obj,
- jsval idval,
+ jsid idval,
jsval* vp)
{
if (!CData::IsCData(cx, obj)) {
JS_ReportError(cx, "not a CData");
return JS_FALSE;
}
// Get pointer type and base type.
@@ -3418,17 +3473,17 @@ ArrayType::CreateInternal(JSContext* cx,
size_t align = CType::GetAlignment(cx, baseType);
// Create a new CType object with the common properties and slots.
JSObject* typeObj = CType::Create(cx, typeProto, dataProto, TYPE_array, NULL,
sizeVal, INT_TO_JSVAL(align), NULL);
if (!typeObj)
return NULL;
- js::AutoValueRooter root(cx, typeObj);
+ js::AutoObjectRooter root(cx, typeObj);
// Set the element type.
if (!JS_SetReservedSlot(cx, typeObj, SLOT_ELEMENT_T, OBJECT_TO_JSVAL(baseType)))
return NULL;
// Set the length.
if (!JS_SetReservedSlot(cx, typeObj, SLOT_LENGTH, lengthVal))
return NULL;
@@ -3473,18 +3528,18 @@ ArrayType::ConstructData(JSContext* cx,
// Have a length, rather than an object to initialize from.
convertObject = false;
} else if (!JSVAL_IS_PRIMITIVE(argv[0])) {
// We were given an object with a .length property.
// This could be a JS array, or a CData array.
JSObject* arg = JSVAL_TO_OBJECT(argv[0]);
js::AutoValueRooter lengthVal(cx);
- if (!JS_GetProperty(cx, arg, "length", lengthVal.addr()) ||
- !jsvalToSize(cx, lengthVal.value(), false, &length)) {
+ if (!JS_GetProperty(cx, arg, "length", lengthVal.jsval_addr()) ||
+ !jsvalToSize(cx, lengthVal.jsval_value(), false, &length)) {
JS_ReportError(cx, "argument must be an array object or length");
return JS_FALSE;
}
} else if (JSVAL_IS_STRING(argv[0])) {
// We were given a string. Size the array to the appropriate length,
// including space for the terminator.
JSString* sourceString = JSVAL_TO_STRING(argv[0]);
@@ -3517,17 +3572,17 @@ ArrayType::ConstructData(JSContext* cx,
// Construct a new ArrayType of defined length, for the new CData object.
obj = CreateInternal(cx, baseType, length, true);
if (!obj)
return JS_FALSE;
}
// Root the CType object, in case we created one above.
- js::AutoValueRooter root(cx, obj);
+ js::AutoObjectRooter root(cx, obj);
JSObject* result = CData::Create(cx, obj, NULL, NULL, true);
if (!result)
return JS_FALSE;
*rval = OBJECT_TO_JSVAL(result);
if (convertObject) {
@@ -3561,17 +3616,17 @@ ArrayType::GetSafeLength(JSContext* cx,
// The "length" property can be a jsint, a jsdouble, or JSVAL_VOID
// (for arrays of undefined length), and must always fit in a size_t.
if (JSVAL_IS_INT(length)) {
*result = JSVAL_TO_INT(length);
return true;
}
if (JSVAL_IS_DOUBLE(length)) {
- *result = Convert<size_t>(*JSVAL_TO_DOUBLE(length));
+ *result = Convert<size_t>(JSVAL_TO_DOUBLE(length));
return true;
}
JS_ASSERT(JSVAL_IS_VOID(length));
return false;
}
size_t
@@ -3585,17 +3640,17 @@ ArrayType::GetLength(JSContext* cx, JSOb
JS_ASSERT(!JSVAL_IS_VOID(length));
// The "length" property can be a jsint, a jsdouble, or JSVAL_VOID
// (for arrays of undefined length), and must always fit in a size_t.
// For callers who know it can never be JSVAL_VOID, return a size_t directly.
if (JSVAL_IS_INT(length))
return JSVAL_TO_INT(length);
- return Convert<size_t>(*JSVAL_TO_DOUBLE(length));
+ return Convert<size_t>(JSVAL_TO_DOUBLE(length));
}
ffi_type*
ArrayType::BuildFFIType(JSContext* cx, JSObject* obj)
{
JS_ASSERT(CType::IsCType(cx, obj));
JS_ASSERT(CType::GetTypeCode(cx, obj) == TYPE_array);
JS_ASSERT(CType::IsSizeDefined(cx, obj));
@@ -3632,30 +3687,30 @@ ArrayType::BuildFFIType(JSContext* cx, J
for (size_t i = 0; i < length; ++i)
ffiType->elements[i] = ffiBaseType;
ffiType->elements[length] = NULL;
return ffiType.forget();
}
JSBool
-ArrayType::ElementTypeGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+ArrayType::ElementTypeGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
if (!CType::IsCType(cx, obj) || CType::GetTypeCode(cx, obj) != TYPE_array) {
JS_ReportError(cx, "not an ArrayType");
return JS_FALSE;
}
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_ELEMENT_T, vp));
JS_ASSERT(!JSVAL_IS_PRIMITIVE(*vp));
return JS_TRUE;
}
JSBool
-ArrayType::LengthGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+ArrayType::LengthGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
// This getter exists for both CTypes and CDatas of the ArrayType persuasion.
// If we're dealing with a CData, get the CType from it.
if (CData::IsCData(cx, obj))
obj = CData::GetCType(cx, obj);
if (!CType::IsCType(cx, obj) || CType::GetTypeCode(cx, obj) != TYPE_array) {
JS_ReportError(cx, "not an ArrayType");
@@ -3663,70 +3718,70 @@ ArrayType::LengthGetter(JSContext* cx, J
}
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_LENGTH, vp));
JS_ASSERT(JSVAL_IS_NUMBER(*vp) || JSVAL_IS_VOID(*vp));
return JS_TRUE;
}
JSBool
-ArrayType::Getter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+ArrayType::Getter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
// This should never happen, but we'll check to be safe.
if (!CData::IsCData(cx, obj)) {
JS_ReportError(cx, "not a CData");
return JS_FALSE;
}
// Bail early if we're not an ArrayType. (This setter is present for all
// CData, regardless of CType.)
JSObject* typeObj = CData::GetCType(cx, obj);
if (CType::GetTypeCode(cx, typeObj) != TYPE_array)
return JS_TRUE;
// Convert the index to a size_t and bounds-check it.
size_t index;
size_t length = GetLength(cx, typeObj);
- bool ok = jsvalToSize(cx, idval, true, &index);
- if (!ok && JSVAL_IS_STRING(idval)) {
+ bool ok = jsidToSize(cx, idval, true, &index);
+ if (!ok && JSID_IS_STRING(idval)) {
// String either isn't a number, or doesn't fit in size_t.
// Chances are it's a regular property lookup, so return.
return JS_TRUE;
}
if (!ok || index >= length) {
JS_ReportError(cx, "invalid index");
return JS_FALSE;
}
JSObject* baseType = GetBaseType(cx, typeObj);
size_t elementSize = CType::GetSize(cx, baseType);
char* data = static_cast<char*>(CData::GetData(cx, obj)) + elementSize * index;
return ConvertToJS(cx, baseType, obj, data, false, false, vp);
}
JSBool
-ArrayType::Setter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+ArrayType::Setter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
// This should never happen, but we'll check to be safe.
if (!CData::IsCData(cx, obj)) {
JS_ReportError(cx, "not a CData");
return JS_FALSE;
}
// Bail early if we're not an ArrayType. (This setter is present for all
// CData, regardless of CType.)
JSObject* typeObj = CData::GetCType(cx, obj);
if (CType::GetTypeCode(cx, typeObj) != TYPE_array)
return JS_TRUE;
// Convert the index to a size_t and bounds-check it.
size_t index;
size_t length = GetLength(cx, typeObj);
- bool ok = jsvalToSize(cx, idval, true, &index);
- if (!ok && JSVAL_IS_STRING(idval)) {
+ bool ok = jsidToSize(cx, idval, true, &index);
+ if (!ok && JSID_IS_STRING(idval)) {
// String either isn't a number, or doesn't fit in size_t.
// Chances are it's a regular property lookup, so return.
return JS_TRUE;
}
if (!ok || index >= length) {
JS_ReportError(cx, "invalid index");
return JS_FALSE;
}
@@ -3758,17 +3813,17 @@ ArrayType::AddressOfElement(JSContext* c
JS_ReportError(cx, "addressOfElement takes one argument");
return JS_FALSE;
}
JSObject* baseType = GetBaseType(cx, typeObj);
JSObject* pointerType = PointerType::CreateInternal(cx, baseType);
if (!pointerType)
return JS_FALSE;
- js::AutoValueRooter root(cx, pointerType);
+ js::AutoObjectRooter root(cx, pointerType);
// Create a PointerType CData object containing null.
JSObject* result = CData::Create(cx, pointerType, NULL, NULL, true);
if (!result)
return JS_FALSE;
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(result));
@@ -3801,53 +3856,56 @@ ExtractStructField(JSContext* cx, jsval
JS_ReportError(cx, "struct field descriptors require a valid name and type");
return NULL;
}
JSObject* obj = JSVAL_TO_OBJECT(val);
JSObject* iter = JS_NewPropertyIterator(cx, obj);
if (!iter)
return NULL;
- js::AutoValueRooter iterroot(cx, iter);
+ js::AutoObjectRooter iterroot(cx, iter);
jsid id;
if (!JS_NextProperty(cx, iter, &id))
return NULL;
+ if (JSID_IS_VOID(id)) {
+ JS_ReportError(cx, "struct field descriptors require a valid name and type");
+ return NULL;
+ }
js::AutoValueRooter nameVal(cx);
- if (!JS_IdToValue(cx, id, nameVal.addr()))
- return NULL;
- if (!JSVAL_IS_STRING(nameVal.value())) {
+ JS_IdToValue(cx, id, nameVal.jsval_addr());
+ if (!JSVAL_IS_STRING(nameVal.jsval_value())) {
JS_ReportError(cx, "struct field descriptors require a valid name and type");
return NULL;
}
- JSString* name = JSVAL_TO_STRING(nameVal.value());
+ JSString* name = JSVAL_TO_STRING(nameVal.jsval_value());
// make sure we have one, and only one, property
if (!JS_NextProperty(cx, iter, &id))
return NULL;
- if (!JSVAL_IS_VOID(id)) {
+ if (!JSID_IS_VOID(id)) {
JS_ReportError(cx, "struct field descriptors must contain one property");
return NULL;
}
js::AutoValueRooter propVal(cx);
- if (!JS_GetUCProperty(cx, obj, name->chars(), name->length(), propVal.addr()))
+ if (!JS_GetUCProperty(cx, obj, name->chars(), name->length(), propVal.jsval_addr()))
return NULL;
- if (JSVAL_IS_PRIMITIVE(propVal.value()) ||
- !CType::IsCType(cx, JSVAL_TO_OBJECT(propVal.value()))) {
+ if (propVal.value().isPrimitive() ||
+ !CType::IsCType(cx, JSVAL_TO_OBJECT(propVal.jsval_value()))) {
JS_ReportError(cx, "struct field descriptors require a valid name and type");
return NULL;
}
// Undefined size or zero size struct members are illegal.
// (Zero-size arrays are legal as struct members in C++, but libffi will
// choke on a zero-size struct, so we disallow them.)
- *typeObj = JSVAL_TO_OBJECT(propVal.value());
+ *typeObj = JSVAL_TO_OBJECT(propVal.jsval_value());
size_t size;
if (!CType::GetSafeSize(cx, *typeObj, &size) || size == 0) {
JS_ReportError(cx, "struct field types must have defined and nonzero size");
return NULL;
}
return name;
}
@@ -3898,17 +3956,17 @@ StructType::Create(JSContext* cx, uintN
// Create a simple StructType with no defined fields. The result will be
// non-instantiable as CData, will have no 'prototype' property, and will
// have undefined size and alignment and no ffi_type.
JSObject* result = CType::Create(cx, typeProto, NULL, TYPE_struct,
JSVAL_TO_STRING(name), JSVAL_VOID, JSVAL_VOID, NULL);
if (!result)
return JS_FALSE;
- js::AutoValueRooter root(cx, result);
+ js::AutoObjectRooter root(cx, result);
if (argc == 2) {
if (JSVAL_IS_PRIMITIVE(argv[1]) ||
!JS_IsArrayObject(cx, JSVAL_TO_OBJECT(argv[1]))) {
JS_ReportError(cx, "second argument must be an array");
return JS_FALSE;
}
@@ -3933,17 +3991,17 @@ StructType::DefineInternal(JSContext* cx
CType::GetProtoFromType(cx, typeObj, SLOT_STRUCTDATAPROTO);
// Set up the 'prototype' and 'prototype.constructor' properties.
// The prototype will reflect the struct fields as properties on CData objects
// created from this type.
JSObject* prototype = JS_NewObject(cx, &sCDataProtoClass, dataProto, NULL);
if (!prototype)
return JS_FALSE;
- js::AutoValueRooter protoroot(cx, prototype);
+ js::AutoObjectRooter protoroot(cx, prototype);
if (!JS_DefineProperty(cx, prototype, "constructor", OBJECT_TO_JSVAL(typeObj),
NULL, NULL, JSPROP_READONLY | JSPROP_PERMANENT))
return JS_FALSE;
// Create a hash of FieldInfo objects to stash on the type object.
FieldInfoHash* fields(new FieldInfoHash);
if (!fields || !fields->init(len)) {
@@ -3963,21 +4021,21 @@ StructType::DefineInternal(JSContext* cx
// Process the field types.
size_t structSize, structAlign;
if (len != 0) {
structSize = 0;
structAlign = 0;
for (jsuint i = 0; i < len; ++i) {
js::AutoValueRooter item(cx);
- if (!JS_GetElement(cx, fieldsObj, i, item.addr()))
+ if (!JS_GetElement(cx, fieldsObj, i, item.jsval_addr()))
return JS_FALSE;
JSObject* fieldType;
- JSString* name = ExtractStructField(cx, item.value(), &fieldType);
+ JSString* name = ExtractStructField(cx, item.jsval_value(), &fieldType);
if (!name)
return JS_FALSE;
// Make sure each field name is unique, and add it to the hash.
FieldInfoHash::AddPtr entryPtr = fields->lookupForAdd(name);
if (entryPtr) {
JS_ReportError(cx, "struct fields must have unique names");
return JS_FALSE;
@@ -4233,22 +4291,21 @@ StructType::GetFieldInfo(JSContext* cx,
jsval slot;
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_FIELDINFO, &slot));
JS_ASSERT(!JSVAL_IS_VOID(slot) && JSVAL_TO_PRIVATE(slot));
return static_cast<const FieldInfoHash*>(JSVAL_TO_PRIVATE(slot));
}
const FieldInfo*
-StructType::LookupField(JSContext* cx, JSObject* obj, jsval idval)
+StructType::LookupField(JSContext* cx, JSObject* obj, JSString *name)
{
JS_ASSERT(CType::IsCType(cx, obj));
JS_ASSERT(CType::GetTypeCode(cx, obj) == TYPE_struct);
- JSString* name = JSVAL_TO_STRING(idval);
FieldInfoHash::Ptr ptr = GetFieldInfo(cx, obj)->lookup(name);
if (ptr)
return &ptr->value;
const char* bytes = JS_GetStringBytesZ(cx, name);
if (!bytes)
return NULL;
@@ -4267,17 +4324,17 @@ StructType::BuildFieldsArray(JSContext*
size_t len = fields->count();
// Prepare a new array for the 'fields' property of the StructType.
jsval* fieldsVec;
JSObject* fieldsProp =
js_NewArrayObjectWithCapacity(cx, len, &fieldsVec);
if (!fieldsProp)
return NULL;
- js::AutoValueRooter root(cx, fieldsProp);
+ js::AutoObjectRooter root(cx, fieldsProp);
JS_ASSERT(len == 0 || fieldsVec);
for (FieldInfoHash::Range r = fields->all(); !r.empty(); r.popFront()) {
const FieldInfoHash::Entry& entry = r.front();
// Add the field descriptor to the array.
if (!AddFieldToArray(cx, fieldsProp, &fieldsVec[entry.value.mIndex],
entry.key, entry.value.mType))
return NULL;
@@ -4286,17 +4343,17 @@ StructType::BuildFieldsArray(JSContext*
// Seal the fields array.
if (!JS_SealObject(cx, fieldsProp, JS_FALSE))
return NULL;
return fieldsProp;
}
JSBool
-StructType::FieldsArrayGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+StructType::FieldsArrayGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
if (!CType::IsCType(cx, obj) || CType::GetTypeCode(cx, obj) != TYPE_struct) {
JS_ReportError(cx, "not a StructType");
return JS_FALSE;
}
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_FIELDS, vp));
@@ -4316,52 +4373,52 @@ StructType::FieldsArrayGetter(JSContext*
}
JS_ASSERT(!JSVAL_IS_PRIMITIVE(*vp) &&
JS_IsArrayObject(cx, JSVAL_TO_OBJECT(*vp)));
return JS_TRUE;
}
JSBool
-StructType::FieldGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+StructType::FieldGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
if (!CData::IsCData(cx, obj)) {
JS_ReportError(cx, "not a CData");
return JS_FALSE;
}
JSObject* typeObj = CData::GetCType(cx, obj);
if (CType::GetTypeCode(cx, typeObj) != TYPE_struct) {
JS_ReportError(cx, "not a StructType");
return JS_FALSE;
}
- const FieldInfo* field = LookupField(cx, typeObj, idval);
+ const FieldInfo* field = LookupField(cx, typeObj, JSID_TO_STRING(idval));
if (!field)
return JS_FALSE;
char* data = static_cast<char*>(CData::GetData(cx, obj)) + field->mOffset;
return ConvertToJS(cx, field->mType, obj, data, false, false, vp);
}
JSBool
-StructType::FieldSetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+StructType::FieldSetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
if (!CData::IsCData(cx, obj)) {
JS_ReportError(cx, "not a CData");
return JS_FALSE;
}
JSObject* typeObj = CData::GetCType(cx, obj);
if (CType::GetTypeCode(cx, typeObj) != TYPE_struct) {
JS_ReportError(cx, "not a StructType");
return JS_FALSE;
}
- const FieldInfo* field = LookupField(cx, typeObj, idval);
+ const FieldInfo* field = LookupField(cx, typeObj, JSID_TO_STRING(idval));
if (!field)
return JS_FALSE;
char* data = static_cast<char*>(CData::GetData(cx, obj)) + field->mOffset;
return ImplicitConvert(cx, *vp, field->mType, data, false, NULL);
}
JSBool
@@ -4381,25 +4438,26 @@ StructType::AddressOfField(JSContext* cx
return JS_FALSE;
}
if (argc != 1) {
JS_ReportError(cx, "addressOfField takes one argument");
return JS_FALSE;
}
- const FieldInfo* field = LookupField(cx, typeObj, JS_ARGV(cx, vp)[0]);
+ const FieldInfo* field = LookupField(cx, typeObj,
+ JSVAL_TO_STRING(JS_ARGV(cx, vp)[0]));
if (!field)
return JS_FALSE;
JSObject* baseType = field->mType;
JSObject* pointerType = PointerType::CreateInternal(cx, baseType);
if (!pointerType)
return JS_FALSE;
- js::AutoValueRooter root(cx, pointerType);
+ js::AutoObjectRooter root(cx, pointerType);
// Create a PointerType CData object containing null.
JSObject* result = CData::Create(cx, pointerType, NULL, NULL, true);
if (!result)
return JS_FALSE;
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(result));
@@ -4724,17 +4782,17 @@ FunctionType::CreateInternal(JSContext*
JSObject* dataProto = CType::GetProtoFromType(cx, fninfo->mReturnType,
SLOT_FUNCTIONDATAPROTO);
// Create a new CType object with the common properties and slots.
JSObject* typeObj = CType::Create(cx, typeProto, dataProto, TYPE_function,
NULL, JSVAL_VOID, JSVAL_VOID, NULL);
if (!typeObj)
return NULL;
- js::AutoValueRooter root(cx, typeObj);
+ js::AutoObjectRooter root(cx, typeObj);
// Stash the FunctionInfo in a reserved slot.
if (!JS_SetReservedSlot(cx, typeObj, SLOT_FNINFO,
PRIVATE_TO_JSVAL(fninfo.get())))
return NULL;
fninfo.forget();
return typeObj;
@@ -4755,17 +4813,17 @@ FunctionType::ConstructData(JSContext* c
if (fninfo->mIsVariadic) {
JS_ReportError(cx, "Can't declare a variadic callback function");
return JS_FALSE;
}
JSObject* closureObj = CClosure::Create(cx, typeObj, fnObj, thisObj, data);
if (!closureObj)
return JS_FALSE;
- js::AutoValueRooter root(cx, closureObj);
+ js::AutoObjectRooter root(cx, closureObj);
// Set the closure object as the referent of the new CData object.
if (!JS_SetReservedSlot(cx, dataObj, SLOT_REFERENT,
OBJECT_TO_JSVAL(closureObj)))
return JS_FALSE;
// Seal the CData object, to prevent modification of the function pointer.
// This permanently associates this object with the closure, and avoids
@@ -4940,17 +4998,17 @@ CheckFunctionType(JSContext* cx, JSObjec
if (!CType::IsCType(cx, obj) || CType::GetTypeCode(cx, obj) != TYPE_function) {
JS_ReportError(cx, "not a FunctionType");
return JS_FALSE;
}
return JS_TRUE;
}
JSBool
-FunctionType::ArgTypesGetter(JSContext* cx, JSObject* obj, jsval idval, jsval* vp)
+FunctionType::ArgTypesGetter(JSContext* cx, JSObject* obj, jsid idval, jsval* vp)
{
if (!CheckFunctionType(cx, obj))
return JS_FALSE;
// Check if we have a cached argTypes array.
ASSERT_OK(JS_GetReservedSlot(cx, obj, SLOT_ARGS_T, vp));
if (!JSVAL_IS_VOID(*vp))
return JS_TRUE;
@@ -4959,55 +5017,55 @@ FunctionType::ArgTypesGetter(JSContext*
size_t len = fninfo->mArgTypes.length();
// Prepare a new array.
jsval* vec;
JSObject* argTypes =
js_NewArrayObjectWithCapacity(cx, len, &vec);
if (!argTypes)
return JS_FALSE;
- js::AutoValueRooter argsroot(cx, argTypes);
+ js::AutoObjectRooter argsroot