1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#[inline]
pub unsafe fn JS_VALUE_GET_TAG(v: JSValue) -> i32 {
v.tag as _
}
#[inline]
pub unsafe fn JS_VALUE_GET_NORM_TAG(v: JSValue) -> i32 {
JS_VALUE_GET_TAG(v)
}
#[inline]
pub unsafe fn JS_VALUE_GET_INT(v: JSValue) -> i32 {
v.u.int32
}
#[inline]
pub unsafe fn JS_VALUE_GET_BOOL(v: JSValue) -> bool {
v.u.int32 != 0
}
#[inline]
pub unsafe fn JS_VALUE_GET_FLOAT64(v: JSValue) -> f64 {
v.u.float64
}
#[inline]
pub unsafe fn JS_VALUE_GET_PTR(v: JSValue) -> *mut c_void {
v.u.ptr
}
#[inline]
pub const fn JS_MKVAL(tag: i32, val: i32) -> JSValue {
JSValue {
u: JSValueUnion { int32: val },
tag: tag as _,
}
}
#[inline]
pub fn JS_MKPTR(tag: i32, ptr: *mut c_void) -> JSValue {
JSValue {
u: JSValueUnion { ptr },
tag: tag as _,
}
}
#[inline]
pub unsafe fn JS_TAG_IS_FLOAT64(tag: i32) -> bool {
tag == JS_TAG_FLOAT64
}
pub const JS_NAN: JSValue = JSValue {
tag: JS_TAG_FLOAT64 as _,
u: JSValueUnion { float64: f64::NAN },
};
#[inline]
pub fn __JS_NewFloat64(d: f64) -> JSValue {
JSValue {
tag: JS_TAG_FLOAT64 as _,
u: JSValueUnion { float64: d },
}
}
#[inline]
pub unsafe fn JS_VALUE_IS_NAN(v: JSValue) -> bool {
union U {
d: f64,
u: u64,
}
if v.tag != JS_TAG_FLOAT64 as _ {
return false;
}
let u = U { d: v.u.float64 };
(u.u & 0x7fffffffffffffff) > 0x7ff0000000000000
}