Redefine JSVAL_MASK16_INT32 to ((uint16)0x0001).
authorSean Stangl <sstangl@mozilla.com>
Thu, 17 Jun 2010 16:44:06 -0700
changeset 52881 71af7ff48689871c7b780e1b91469151b165a6a0
parent 52880 22020675ec7709279c9f01a89ee39ac72573e39b
child 52882 7096b379084bee4a83ed774ac3c1b5944d5eaecb
push idunknown
push userunknown
push dateunknown
milestone1.9.3a5pre
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Redefine JSVAL_MASK16_INT32 to ((uint16)0x0001). This permits isNumber() to just check <= JSVAL_MASK32_INT32, since no number can have type JSVAL_MASK32_CLEAR (asserted).
js/src/jspubtd.h
--- a/js/src/jspubtd.h
+++ b/js/src/jspubtd.h
@@ -163,19 +163,19 @@ typedef struct JSCompartment     JSCompa
  */
 
 #if defined(__cplusplus) || !defined(_MSC_VER)
 typedef enum JSValueMask16 
 # if defined(_MSC_VER)
                            : uint16
 # endif
 {
-    JSVAL_MASK16_NULL      = (uint16)0x0001,
-    JSVAL_MASK16_UNDEFINED = (uint16)0x0002,
-    JSVAL_MASK16_INT32     = (uint16)0x0004,
+    JSVAL_MASK16_INT32     = (uint16)0x0001,
+    JSVAL_MASK16_NULL      = (uint16)0x0002,
+    JSVAL_MASK16_UNDEFINED = (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_SINGLETON = JSVAL_MASK16_NULL | JSVAL_MASK16_UNDEFINED,
     JSVAL_MASK16_OBJECT    = JSVAL_MASK16_NONFUNOBJ | JSVAL_MASK16_FUNOBJ,
@@ -193,37 +193,37 @@ typedef enum JSValueMask16
 __attribute__((packed))
 # endif
 JSValueMask16;
 #else  /* defined(__cplusplus) || !defined(_MSC_VER) */
 // We need this C API for MSVC, because MSVC doesn't allow us to
 // make a 16-bit enum in C.
 typedef uint16 JSValueMask16;
 
-#define JSVAL_MASK16_NULL      ((uint16)0x0001)
-#define JSVAL_MASK16_UNDEFINED ((uint16)0x0002)
-#define JSVAL_MASK16_INT32     ((uint16)0x0004)
+#define JSVAL_MASK16_INT32     ((uint16)0x0001)
+#define JSVAL_MASK16_NULL      ((uint16)0x0002)
+#define JSVAL_MASK16_UNDEFINED ((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_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)
 #define JSVAL_MASK16_GCTHING   (JSVAL_MASK16_OBJECT | JSVAL_MASK16_STRING)
 #define JSVAL_NANBOX_PATTERN   ((uint16)0xFFFF)
 
 #endif /* defined(__cplusplus) || !defined(_MSC_VER) */
 
 #define JSVAL_MASK32_CLEAR      ((uint32)0xFFFF0000)
 
+#define JSVAL_MASK32_INT32      ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_INT32))
 #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_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_SINGLETON  ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_SINGLETON))
 #define JSVAL_MASK32_OBJECT     ((uint32)(JSVAL_MASK32_CLEAR | JSVAL_MASK16_OBJECT))
@@ -581,17 +581,18 @@ JSVAL_IS_SINGLETON_IMPL(jsval_layout l)
 {
     return (l.s.u.mask32 & JSVAL_MASK32_SINGLETON) > JSVAL_MASK32_CLEAR;
 }
 
 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;
 }