diff options
author | 2023-09-21 20:52:13 -0700 | |
---|---|---|
committer | 2023-09-21 20:52:13 -0700 | |
commit | 3bcf1ae20818357ad9353221fe0d9d28cb7b485b (patch) | |
tree | d37a54181cbe72c28029af0a12f2ce3762c3d484 | |
parent | 030407c52e0be488027762dc2351865b01c83833 (diff) | |
download | bun-3bcf1ae20818357ad9353221fe0d9d28cb7b485b.tar.gz bun-3bcf1ae20818357ad9353221fe0d9d28cb7b485b.tar.zst bun-3bcf1ae20818357ad9353221fe0d9d28cb7b485b.zip |
double assertiondave/assert-double-is-valid
-rw-r--r-- | src/bun.js/bindings/FFI.zig | 14 | ||||
-rw-r--r-- | src/bun.js/bindings/bindings.cpp | 4 | ||||
-rw-r--r-- | src/bun.js/bindings/bindings.zig | 5 | ||||
-rw-r--r-- | src/bun.js/bindings/headers.h | 1 | ||||
-rw-r--r-- | src/bun.js/bindings/headers.zig | 1 |
5 files changed, 14 insertions, 11 deletions
diff --git a/src/bun.js/bindings/FFI.zig b/src/bun.js/bindings/FFI.zig index 9d16bd78e..40a9ba40e 100644 --- a/src/bun.js/bindings/FFI.zig +++ b/src/bun.js/bindings/FFI.zig @@ -85,7 +85,21 @@ pub inline fn INT64_TO_JSVALUE(arg_globalObject: ?*anyopaque, arg_val: i64) Enco pub inline fn INT32_TO_JSVALUE(arg_val: i32) EncodedJSValue { return .{ .asInt64 = @as(i64, @bitCast(@as(c_ulonglong, 18446181123756130304) | @as(c_ulonglong, @bitCast(@as(c_ulonglong, @as(u32, @bitCast(arg_val))))))) }; } +// See PureNaN.h in JavaScriptCore +const pure_nan: u64 = 0x7ff8000000000000; +const bun = @import("root").bun; + +inline fn isImpureNaN(arg_val: f64) bool { + return @as(u64, @bitCast(arg_val)) > 0xfffe000000000000; +} + pub inline fn DOUBLE_TO_JSVALUE(arg_val: f64) EncodedJSValue { + if (bun.Environment.allow_assert) { + if (isImpureNaN(arg_val)) { + @panic("An impure NaN value was passed to DOUBLE_TO_JSVALUE"); + } + } + var res: EncodedJSValue = .{ .asDouble = arg_val }; res.asInt64 += @as(c_longlong, 1) << @as(@import("std").math.Log2Int(c_longlong), @intCast(49)); return res; diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp index bff5640ef..e0f041df2 100644 --- a/src/bun.js/bindings/bindings.cpp +++ b/src/bun.js/bindings/bindings.cpp @@ -3029,10 +3029,6 @@ JSC__JSValue JSC__JSValue__jsBoolean(bool arg0) { return JSC::JSValue::encode(JSC::jsBoolean(arg0)); }; -JSC__JSValue JSC__JSValue__jsDoubleNumber(double arg0) -{ - return JSC::JSValue::encode(JSC::jsNumber(arg0)); -} JSC__JSValue JSC__JSValue__jsNull() { return JSC::JSValue::encode(JSC::jsNull()); }; JSC__JSValue JSC__JSValue__jsNumberFromChar(unsigned char arg0) { diff --git a/src/bun.js/bindings/bindings.zig b/src/bun.js/bindings/bindings.zig index 3a0b369e9..2c10b665c 100644 --- a/src/bun.js/bindings/bindings.zig +++ b/src/bun.js/bindings/bindings.zig @@ -3840,10 +3840,6 @@ pub const JSValue = enum(JSValueReprInt) { return cppFn("jsTDZValue", .{}); } - pub fn jsDoubleNumber(i: f64) JSValue { - return cppFn("jsDoubleNumber", .{i}); - } - pub fn className(this: JSValue, globalThis: *JSGlobalObject) ZigString { var str = ZigString.init(""); this.getClassName(globalThis, &str); @@ -4866,7 +4862,6 @@ pub const JSValue = enum(JSValueReprInt) { "isTerminationException", "isUInt32AsAnyInt", "jsBoolean", - "jsDoubleNumber", "jsNull", "jsNumberFromChar", "jsNumberFromDouble", diff --git a/src/bun.js/bindings/headers.h b/src/bun.js/bindings/headers.h index cffb9f0c9..62cf6e02e 100644 --- a/src/bun.js/bindings/headers.h +++ b/src/bun.js/bindings/headers.h @@ -369,7 +369,6 @@ CPP_DECL bool JSC__JSValue__jestDeepEquals(JSC__JSValue JSValue0, JSC__JSValue J CPP_DECL bool JSC__JSValue__jestDeepMatch(JSC__JSValue JSValue0, JSC__JSValue JSValue1, JSC__JSGlobalObject* arg2, bool arg3); CPP_DECL bool JSC__JSValue__jestStrictDeepEquals(JSC__JSValue JSValue0, JSC__JSValue JSValue1, JSC__JSGlobalObject* arg2); CPP_DECL JSC__JSValue JSC__JSValue__jsBoolean(bool arg0); -CPP_DECL JSC__JSValue JSC__JSValue__jsDoubleNumber(double arg0); CPP_DECL JSC__JSValue JSC__JSValue__jsNull(); CPP_DECL JSC__JSValue JSC__JSValue__jsNumberFromChar(unsigned char arg0); CPP_DECL JSC__JSValue JSC__JSValue__jsNumberFromDouble(double arg0); diff --git a/src/bun.js/bindings/headers.zig b/src/bun.js/bindings/headers.zig index a696e86b1..266bf05cf 100644 --- a/src/bun.js/bindings/headers.zig +++ b/src/bun.js/bindings/headers.zig @@ -271,7 +271,6 @@ pub extern fn JSC__JSValue__jestDeepEquals(JSValue0: JSC__JSValue, JSValue1: JSC pub extern fn JSC__JSValue__jestDeepMatch(JSValue0: JSC__JSValue, JSValue1: JSC__JSValue, arg2: *bindings.JSGlobalObject, arg3: bool) bool; pub extern fn JSC__JSValue__jestStrictDeepEquals(JSValue0: JSC__JSValue, JSValue1: JSC__JSValue, arg2: *bindings.JSGlobalObject) bool; pub extern fn JSC__JSValue__jsBoolean(arg0: bool) JSC__JSValue; -pub extern fn JSC__JSValue__jsDoubleNumber(arg0: f64) JSC__JSValue; pub extern fn JSC__JSValue__jsNull(...) JSC__JSValue; pub extern fn JSC__JSValue__jsNumberFromChar(arg0: u8) JSC__JSValue; pub extern fn JSC__JSValue__jsNumberFromDouble(arg0: f64) JSC__JSValue; |