diff options
author | 2023-09-21 20:52:13 -0700 | |
---|---|---|
committer | 2023-09-21 20:52:13 -0700 | |
commit | 3bcf1ae20818357ad9353221fe0d9d28cb7b485b (patch) | |
tree | d37a54181cbe72c28029af0a12f2ce3762c3d484 /src/bun.js/bindings/FFI.zig | |
parent | 030407c52e0be488027762dc2351865b01c83833 (diff) | |
download | bun-dave/assert-double-is-valid.tar.gz bun-dave/assert-double-is-valid.tar.zst bun-dave/assert-double-is-valid.zip |
double assertiondave/assert-double-is-valid
Diffstat (limited to '')
-rw-r--r-- | src/bun.js/bindings/FFI.zig | 14 |
1 files changed, 14 insertions, 0 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; |