Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rustup 20150109 #132

Merged
merged 3 commits into from Jan 28, 2015
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

@@ -42,6 +42,7 @@ pub struct ProxyTraps {
pub getPrototypeOf: Option<unsafe extern "C" fn(*mut JSContext, *mut JSObject, *mut *mut JSObject) -> bool>,
pub trace: Option<unsafe extern "C" fn(*mut JSTracer, *mut JSObject)>,
}
unsafe impl Sync for ProxyTraps {}

pub enum AutoIdVector {}

@@ -71,7 +71,7 @@ pub enum JSGCTraceKind {

pub const JS_DEFAULT_ZEAL_FREQ: u32 = 100;

pub type moz_static_assert6 = [c_int, ..1u];
pub type moz_static_assert6 = [c_int; 1u];
pub struct JSHandleObject {
pub unnamed_field1: *mut *mut JSObject,
}
@@ -317,13 +317,14 @@ pub struct JSClass {
pub hasInstance: JSHasInstanceOp,
pub construct: JSNative,
pub trace: JSTraceOp,
pub reserved: [*mut c_void, ..40u],
pub reserved: [*mut c_void; 40u],
}
unsafe impl Sync for JSClass {}
pub struct JSConstDoubleSpec {
pub dval: c_double,
pub name: *const c_char,
pub flags: uint8_t,
pub spare: [uint8_t, ..3u],
pub spare: [uint8_t; 3u],
}
pub struct JSStrictPropertyOpWrapper {
pub op: JSNative,
@@ -8,7 +8,7 @@ use jsapi::JSGCTraceKind::{JSTRACE_OBJECT, JSTRACE_STRING};
use libc::c_void;
use std::mem;

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
const JSVAL_TAG_SHIFT: uint = 47u;

#[repr(u8)]
@@ -28,13 +28,13 @@ enum ValueType {
MISSING = 0x21
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
const JSVAL_TAG_MAX_DOUBLE: u32 = 0x1FFF0u32;

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
const JSVAL_TAG_CLEAR: u32 = 0xFFFFFF80;

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
#[repr(u32)]
#[allow(dead_code)]
enum ValueTag {
@@ -48,7 +48,7 @@ enum ValueTag {
OBJECT = JSVAL_TAG_MAX_DOUBLE | (ValueType::OBJECT as u32),
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
#[repr(u32)]
#[allow(dead_code)]
enum ValueTag {
@@ -62,7 +62,7 @@ enum ValueTag {
OBJECT = JSVAL_TAG_CLEAR as u32 | (ValueType::OBJECT as u32),
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
#[repr(u64)]
#[allow(dead_code)]
enum ValueShiftedTag {
@@ -77,25 +77,25 @@ enum ValueShiftedTag {
}


#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
const JSVAL_PAYLOAD_MASK: u64 = 0x00007FFFFFFFFFFF;

// JSVal was originally type of u64.
// now this become {u64} because of the union abi issue on ARM arch. See #398.
#[deriving(PartialEq, Clone, Copy)]
#[derive(PartialEq, Clone, Copy)]
pub struct JSVal {
pub v: u64
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
#[inline(always)]
fn BuildJSVal(tag: ValueTag, payload: u64) -> JSVal {
JSVal {
v: ((tag as u32 as u64) << JSVAL_TAG_SHIFT) | payload
}
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
#[inline(always)]
fn BuildJSVal(tag: ValueTag, payload: u64) -> JSVal {
JSVal {
@@ -118,17 +118,17 @@ pub fn Int32Value(i: i32) -> JSVal {
BuildJSVal(ValueTag::INT32, i as u32 as u64)
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
#[inline(always)]
pub fn DoubleValue(f: f64) -> JSVal {
let bits: u64 = unsafe { mem::transmute(f) };
assert!(bits <= ValueShiftedTag::MAX_DOUBLE as u64)
assert!(bits <= ValueShiftedTag::MAX_DOUBLE as u64);
JSVal {
v: bits
}
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
#[inline(always)]
pub fn DoubleValue(f: f64) -> JSVal {
let bits: u64 = unsafe { mem::transmute(f) };
@@ -148,15 +148,15 @@ pub fn UInt32Value(ui: u32) -> JSVal {
}
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
#[inline(always)]
pub fn StringValue(s: &JSString) -> JSVal {
let bits = s as *const JSString as uint as u64;
assert!((bits >> JSVAL_TAG_SHIFT) == 0);
BuildJSVal(ValueTag::STRING, bits)
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
#[inline(always)]
pub fn StringValue(s: &JSString) -> JSVal {
let bits = s as *const JSString as uint as u64;
@@ -168,15 +168,15 @@ pub fn BooleanValue(b: bool) -> JSVal {
BuildJSVal(ValueTag::BOOLEAN, b as u64)
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
#[inline(always)]
pub fn ObjectValue(o: &JSObject) -> JSVal {
let bits = o as *const JSObject as uint as u64;
assert!((bits >> JSVAL_TAG_SHIFT) == 0);
BuildJSVal(ValueTag::OBJECT, bits)
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
#[inline(always)]
pub fn ObjectValue(o: &JSObject) -> JSVal {
let bits = o as *const JSObject as uint as u64;
@@ -192,7 +192,7 @@ pub fn ObjectOrNullValue(o: *mut JSObject) -> JSVal {
}
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
#[inline(always)]
pub fn PrivateValue(o: *const c_void) -> JSVal {
let ptrBits = o as uint as u64;
@@ -202,7 +202,7 @@ pub fn PrivateValue(o: *const c_void) -> JSVal {
}
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
#[inline(always)]
pub fn PrivateValue(o: *const c_void) -> JSVal {
let ptrBits = o as uint as u64;
@@ -211,22 +211,22 @@ pub fn PrivateValue(o: *const c_void) -> JSVal {
}

impl JSVal {
#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn is_undefined(&self) -> bool {
self.v == ValueShiftedTag::UNDEFINED as u64
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn is_undefined(&self) -> bool {
(self.v >> 32) == ValueTag::UNDEFINED as u64
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn is_null(&self) -> bool {
self.v == ValueShiftedTag::NULL as u64
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn is_null(&self) -> bool {
(self.v >> 32) == ValueTag::NULL as u64
}
@@ -235,66 +235,66 @@ impl JSVal {
self.is_null() || self.is_undefined()
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn is_boolean(&self) -> bool {
(self.v >> JSVAL_TAG_SHIFT) == ValueTag::BOOLEAN as u64
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn is_boolean(&self) -> bool {
(self.v >> 32) == ValueTag::BOOLEAN as u64
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn is_double(&self) -> bool {
self.v <= ValueShiftedTag::MAX_DOUBLE as u64
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn is_double(&self) -> bool {
(self.v >> 32) <= JSVAL_TAG_CLEAR as u64
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn is_primitive(&self) -> bool {
const JSVAL_UPPER_EXCL_SHIFTED_TAG_OF_PRIMITIVE_SET: u64 = ValueShiftedTag::OBJECT as u64;
self.v < JSVAL_UPPER_EXCL_SHIFTED_TAG_OF_PRIMITIVE_SET
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn is_primitive(&self) -> bool {
const JSVAL_UPPER_EXCL_TAG_OF_PRIMITIVE_SET: u64 = ValueTag::OBJECT as u64;
(self.v >> 32) < JSVAL_UPPER_EXCL_TAG_OF_PRIMITIVE_SET
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn is_string(&self) -> bool {
(self.v >> JSVAL_TAG_SHIFT) == ValueTag::STRING as u64
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn is_string(&self) -> bool {
(self.v >> 32) == ValueTag::STRING as u64
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn is_object(&self) -> bool {
assert!((self.v >> JSVAL_TAG_SHIFT) <= ValueTag::OBJECT as u64);
self.v >= ValueShiftedTag::OBJECT as u64
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn is_object(&self) -> bool {
(self.v >> 32) == ValueTag::OBJECT as u64
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn to_boolean(&self) -> bool {
assert!(self.is_boolean());
(self.v & JSVAL_PAYLOAD_MASK) != 0
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn to_boolean(&self) -> bool {
(self.v & 0x00000000FFFFFFFF) != 0
}
@@ -304,69 +304,69 @@ impl JSVal {
self.to_object_or_null()
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn is_object_or_null(&self) -> bool {
const JSVAL_LOWER_INCL_SHIFTED_TAG_OF_OBJ_OR_NULL_SET: u64 = ValueShiftedTag::NULL as u64;
assert!((self.v >> JSVAL_TAG_SHIFT) <= ValueTag::OBJECT as u64);
self.v >= JSVAL_LOWER_INCL_SHIFTED_TAG_OF_OBJ_OR_NULL_SET
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn is_object_or_null(&self) -> bool {
const JSVAL_LOWER_INCL_TAG_OF_OBJ_OR_NULL_SET: u64 = ValueTag::NULL as u64;
assert!((self.v >> 32) <= ValueTag::OBJECT as u64);
(self.v >> 32) >= JSVAL_LOWER_INCL_TAG_OF_OBJ_OR_NULL_SET
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn to_object_or_null(&self) -> *mut JSObject {
assert!(self.is_object_or_null());
let ptrBits = self.v & JSVAL_PAYLOAD_MASK;
assert!((ptrBits & 0x7) == 0);
ptrBits as uint as *mut JSObject
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn to_object_or_null(&self) -> *mut JSObject {
assert!(self.is_object_or_null());
let ptrBits: u32 = (self.v & 0x00000000FFFFFFFF) as u32;
ptrBits as *mut JSObject
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn to_private(&self) -> *const c_void {
assert!(self.is_double());
assert!((self.v & 0x8000000000000000u64) == 0);
(self.v << 1) as uint as *const c_void
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn to_private(&self) -> *const c_void {
let ptrBits: u32 = (self.v & 0x00000000FFFFFFFF) as u32;
ptrBits as *const c_void
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn is_gcthing(&self) -> bool {
const JSVAL_LOWER_INCL_SHIFTED_TAG_OF_GCTHING_SET: u64 = ValueShiftedTag::STRING as u64;
self.v >= JSVAL_LOWER_INCL_SHIFTED_TAG_OF_GCTHING_SET
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn is_gcthing(&self) -> bool {
const JSVAL_LOWER_INCL_TAG_OF_GCTHING_SET: u64 = ValueTag::STRING as u64;
(self.v >> 32) >= JSVAL_LOWER_INCL_TAG_OF_GCTHING_SET
}

#[cfg(target_word_size = "64")]
#[cfg(target_pointer_width = "64")]
pub fn to_gcthing(&self) -> *mut c_void {
assert!(self.is_gcthing());
let ptrBits = self.v & JSVAL_PAYLOAD_MASK;
assert!((ptrBits & 0x7) == 0);
ptrBits as *mut c_void
}

#[cfg(target_word_size = "32")]
#[cfg(target_pointer_width = "32")]
pub fn to_gcthing(&self) -> *mut c_void {
assert!(self.is_gcthing());
let ptrBits: u32 = (self.v & 0x00000000FFFFFFFF) as u32;
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.