diff --git a/jsval.rs b/jsval.rs index 427cc284e..aed5e064f 100644 --- a/jsval.rs +++ b/jsval.rs @@ -230,6 +230,16 @@ impl JSVal { self.is_null() || self.is_undefined() } + #[cfg(target_word_size = "64")] + pub fn is_boolean(&self) -> bool { + self.v == JSVAL_SHIFTED_TAG_BOOLEAN as u64 + } + + #[cfg(target_word_size = "32")] + pub fn is_boolean(&self) -> bool { + (self.v >> 32) == JSVAL_TAG_BOOLEAN as u64 + } + #[cfg(target_word_size = "64")] pub fn is_double(&self) -> bool { self.v <= JSVAL_SHIFTED_TAG_MAX_DOUBLE as u64 @@ -273,6 +283,17 @@ impl JSVal { (self.v >> 32) == JSVAL_TAG_OBJECT as u64 } + #[cfg(target_word_size = "64")] + pub fn to_boolean(&self) -> bool { + assert!(self.is_boolean()); + (self.v & JSVAL_PAYLOAD_MASK) != 0 + } + + #[cfg(target_word_size = "32")] + pub fn to_boolean(&self) -> bool { + (self.v & 0x00000000FFFFFFFF) != 0 + } + pub fn to_object(&self) -> *mut JSObject { assert!(self.is_object()); self.to_object_or_null()