blob: 5758ee1e51f875dd0cd97ce4561ef0c61aa57340 [file] [log] [blame]
https://bugzilla.mozilla.org/show_bug.cgi?id=627664
https://bugzilla.mozilla.org/show_bug.cgi?id=674522
--- a/js/src/jsval.h
+++ b/js/src/jsval.h
@@ -306,11 +306,11 @@ typedef union jsval_layout
int32 i32;
uint32 u32;
JSWhyMagic why;
- jsuword word;
} payload;
} s;
double asDouble;
void *asPtr;
+ jsuword asWord;
} jsval_layout;
# endif /* JS_BITS_PER_WORD */
#else /* defined(IS_LITTLE_ENDIAN) */
@@ -343,6 +343,7 @@ typedef union jsval_layout
uint64 payload47 : 47;
} debugView;
struct {
+ uint32 padding;
union {
int32 i32;
uint32 u32;
@@ -351,10 +352,13 @@ typedef union jsval_layout
} s;
double asDouble;
void *asPtr;
+ jsuword asWord;
} jsval_layout;
# endif /* JS_BITS_PER_WORD */
#endif /* defined(IS_LITTLE_ENDIAN) */
+JS_STATIC_ASSERT(sizeof(jsval_layout) == 8);
+
#if JS_BITS_PER_WORD == 32
/*
--- a/js/src/jsvalue.h
+++ b/js/src/jsvalue.h
@@ -291,7 +291,6 @@ JSVAL_EXTRACT_NON_DOUBLE_TAG_IMPL(jsval_
}
#ifdef __cplusplus
-JS_STATIC_ASSERT(offsetof(jsval_layout, s.payload) == 0);
JS_STATIC_ASSERT((JSVAL_TYPE_NONFUNOBJ & 0xF) == JSVAL_TYPE_OBJECT);
JS_STATIC_ASSERT((JSVAL_TYPE_FUNOBJ & 0xF) == JSVAL_TYPE_OBJECT);
#endif
@@ -729,7 +728,11 @@ class Value
}
const jsuword *payloadWord() const {
+#if JS_BITS_PER_WORD == 32
return &data.s.payload.word;
+#elif JS_BITS_PER_WORD == 64
+ return &data.asWord;
+#endif
}
private: