diff --git a/js/src/jsgcchunk.cpp b/js/src/jsgcchunk.cpp index 68400d414c5..31ddcf9a7e2 100644 --- a/js/src/jsgcchunk.cpp +++ b/js/src/jsgcchunk.cpp @@ -251,7 +251,7 @@ MapAlignedPages(size_t size, size_t alignment) */ // TODO: this is totally a hack for now; need to replace void *p = mmap((caddr_t) alignment, size, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_NOSYNC | MAP_ALIGN | MAP_ANON | MAP_32BIT, -1, 0); + MAP_PRIVATE | MAP_NOSYNC | MAP_ALIGN | MAP_ANON, -1, 0); if (p == MAP_FAILED) return NULL; return p; @@ -314,7 +314,7 @@ MapPages(void *addr, size_t size) * of existing mappings, and we only want to create new mappings. */ // TODO: this is totally a hack for now; need to replace - void *p = mmap(addr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON | MAP_32BIT, + void *p = mmap(addr, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); if (p == MAP_FAILED) return NULL; diff --git a/js/src/jspubtd.h b/js/src/jspubtd.h index dd38d1c5c31..0db6ace70a4 100644 --- a/js/src/jspubtd.h +++ b/js/src/jspubtd.h @@ -168,14 +168,14 @@ typedef enum JSValueMask16 : uint16 # endif { - JSVAL_MASK16_NULL = (uint16)0x0001, + JSVAL_MASK16_INT32 = (uint16)0x0001, JSVAL_MASK16_UNDEFINED = (uint16)0x0002, - JSVAL_MASK16_INT32 = (uint16)0x0004, - JSVAL_MASK16_STRING = (uint16)0x0008, - JSVAL_MASK16_NONFUNOBJ = (uint16)0x0010, - JSVAL_MASK16_FUNOBJ = (uint16)0x0020, - JSVAL_MASK16_BOOLEAN = (uint16)0x0040, - JSVAL_MASK16_MAGIC = (uint16)0x0080, + JSVAL_MASK16_STRING = (uint16)0x0004, + JSVAL_MASK16_BOOLEAN = (uint16)0x0008, + JSVAL_MASK16_MAGIC = (uint16)0x0010, + JSVAL_MASK16_NULL = (uint16)0x2000, + JSVAL_MASK16_NONFUNOBJ = (uint16)0x4000, + JSVAL_MASK16_FUNOBJ = (uint16)0x8000, JSVAL_MASK16_SINGLETON = JSVAL_MASK16_NULL | JSVAL_MASK16_UNDEFINED, JSVAL_MASK16_OBJECT = JSVAL_MASK16_NONFUNOBJ | JSVAL_MASK16_FUNOBJ, @@ -203,14 +203,14 @@ JSValueMask16; typedef uint16 JSValueMask16; -#define JSVAL_MASK16_NULL ((uint16)0x0001) +#define JSVAL_MASK16_INT32 ((uint16)0x0001) #define JSVAL_MASK16_UNDEFINED ((uint16)0x0002) -#define JSVAL_MASK16_INT32 ((uint16)0x0004) -#define JSVAL_MASK16_STRING ((uint16)0x0008) -#define JSVAL_MASK16_NONFUNOBJ ((uint16)0x0010) -#define JSVAL_MASK16_FUNOBJ ((uint16)0x0020) -#define JSVAL_MASK16_BOOLEAN ((uint16)0x0040) -#define JSVAL_MASK16_MAGIC ((uint16)0x0080) +#define JSVAL_MASK16_STRING ((uint16)0x0004) +#define JSVAL_MASK16_BOOLEAN ((uint16)0x0008) +#define JSVAL_MASK16_MAGIC ((uint16)0x0010) +#define JSVAL_MASK16_NULL ((uint16)0x2000) +#define JSVAL_MASK16_NONFUNOBJ ((uint16)0x4000) +#define JSVAL_MASK16_FUNOBJ ((uint16)0x8000) #define JSVAL_MASK16_SINGLETON (JSVAL_MASK16_NULL | JSVAL_MASK16_UNDEFINED) #define JSVAL_MASK16_OBJECT (JSVAL_MASK16_NONFUNOBJ | JSVAL_MASK16_FUNOBJ) #define JSVAL_MASK16_OBJORNULL (JSVAL_MASK16_OBJECT | JSVAL_MASK16_NULL) @@ -221,14 +221,14 @@ typedef uint16 JSValueMask16; #define JSVAL_MASK32_CLEAR ((uint32)0xFFFF0000) -#define JSVAL_MASK32_NULL ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_NULL)) -#define JSVAL_MASK32_UNDEFINED ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_UNDEFINED)) #define JSVAL_MASK32_INT32 ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_INT32)) +#define JSVAL_MASK32_UNDEFINED ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_UNDEFINED)) #define JSVAL_MASK32_STRING ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_STRING)) -#define JSVAL_MASK32_NONFUNOBJ ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_NONFUNOBJ)) -#define JSVAL_MASK32_FUNOBJ ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_FUNOBJ)) #define JSVAL_MASK32_BOOLEAN ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_BOOLEAN)) #define JSVAL_MASK32_MAGIC ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_MAGIC)) +#define JSVAL_MASK32_NULL ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_NULL)) +#define JSVAL_MASK32_NONFUNOBJ ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_NONFUNOBJ)) +#define JSVAL_MASK32_FUNOBJ ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_FUNOBJ)) #define JSVAL_MASK32_SINGLETON ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_SINGLETON)) #define JSVAL_MASK32_OBJECT ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_OBJECT)) @@ -590,25 +590,29 @@ static JS_ALWAYS_INLINE JSBool JSVAL_IS_NUMBER_IMPL(jsval_layout l) { JSValueMask32 mask = l.s.u.mask32; - return mask < JSVAL_MASK32_CLEAR || mask == JSVAL_MASK32_INT32; + JS_ASSERT(mask != JSVAL_MASK32_CLEAR); + return mask <= JSVAL_MASK32_INT32; } static JS_ALWAYS_INLINE JSBool JSVAL_IS_OBJECT_IMPL(jsval_layout l) { - return (l.s.u.mask32 & JSVAL_MASK32_OBJECT) > JSVAL_MASK32_CLEAR; + JSValueMask32 mask = l.s.u.mask32; + return mask >= JSVAL_MASK32_NONFUNOBJ; } static JS_ALWAYS_INLINE JSBool JSVAL_IS_OBJECT_OR_NULL_IMPL(jsval_layout l) { - return (l.s.u.mask32 & JSVAL_MASK32_OBJORNULL) > JSVAL_MASK32_CLEAR; + JSValueMask32 mask = l.s.u.mask32; + return mask >= JSVAL_MASK32_NULL; } static JS_ALWAYS_INLINE JSBool JSVAL_IS_PRIMITIVE_IMPL(jsval_layout l) { - return (l.s.u.mask32 & JSVAL_MASK32_OBJECT) <= JSVAL_MASK32_CLEAR; + JSValueMask32 mask = l.s.u.mask32; + return mask < JSVAL_MASK32_NONFUNOBJ; } static JS_ALWAYS_INLINE JSBool diff --git a/js/src/xpconnect/src/xpcvariant.cpp b/js/src/xpconnect/src/xpcvariant.cpp index 8f8c660abd6..bea20169863 100644 --- a/js/src/xpconnect/src/xpcvariant.cpp +++ b/js/src/xpconnect/src/xpcvariant.cpp @@ -86,7 +86,8 @@ XPCTraceableVariant::~XPCTraceableVariant() if(!JSVAL_IS_STRING(mJSVal)) nsVariant::Cleanup(&mData); - RemoveFromRootSet(nsXPConnect::GetRuntimeInstance()->GetJSRuntime()); + if (!JSVAL_IS_NULL(mJSVal)) + RemoveFromRootSet(nsXPConnect::GetRuntimeInstance()->GetJSRuntime()); } void XPCTraceableVariant::TraceJS(JSTracer* trc)