From 163c7f654ac7b2255d2ca8803dc9fadbb1cc9bd4 Mon Sep 17 00:00:00 2001 From: Luke Wagner Date: Thu, 4 Aug 2011 14:49:35 -0700 Subject: [PATCH] Bug 674522 - Fix jsval_layout on 64-bit big-endian platforms (r=waldo) --- js/src/jsval.h | 5 +++-- js/src/jsvalue.h | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/js/src/jsval.h b/js/src/jsval.h index 31ef8330d829..84b038b7be5f 100644 --- a/js/src/jsval.h +++ b/js/src/jsval.h @@ -313,7 +313,6 @@ typedef union jsval_layout int32 i32; uint32 u32; JSWhyMagic why; - jsuword word; } payload; } s; double asDouble; @@ -350,11 +349,11 @@ typedef union jsval_layout uint64 payload47 : 47; } debugView; struct { + uint32 padding; union { int32 i32; uint32 u32; JSWhyMagic why; - jsuword word; } payload; } s; double asDouble; @@ -363,6 +362,8 @@ typedef union 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 /* diff --git a/js/src/jsvalue.h b/js/src/jsvalue.h index 4cf25892b60a..345b64179a7f 100644 --- a/js/src/jsvalue.h +++ b/js/src/jsvalue.h @@ -743,7 +743,11 @@ class Value } const jsuword *payloadWord() const { - return &data.s.payload.word; +#if JS_BITS_PER_WORD == 32 + return reinterpret_cast(&data.s.payload.word); +#elif JS_BITS_PER_WORD == 64 + return reinterpret_cast(&data.asBits); +#endif } private: