diff options
author | 2023-04-25 07:25:00 -0700 | |
---|---|---|
committer | 2023-04-25 07:25:00 -0700 | |
commit | 5353d4101493632cb25d0cdddfef94f62bc5902d (patch) | |
tree | 6a59ca58ab8ef3be986049dfee4e7d434eecf55b /src | |
parent | 460563ee8996d721d341f3ae0f704a9e3a1ba38d (diff) | |
download | bun-5353d4101493632cb25d0cdddfef94f62bc5902d.tar.gz bun-5353d4101493632cb25d0cdddfef94f62bc5902d.tar.zst bun-5353d4101493632cb25d0cdddfef94f62bc5902d.zip |
Fixes #2738
Diffstat (limited to '')
-rw-r--r-- | src/c.zig | 3 | ||||
-rw-r--r-- | src/js_parser.zig | 8 |
2 files changed, 9 insertions, 2 deletions
@@ -449,3 +449,6 @@ pub extern fn set_process_priority(pid: c_uint, priority: c_int) i32; pub extern fn strncasecmp(s1: [*]const u8, s2: [*]const u8, n: usize) i32; pub extern fn memmove(dest: [*]u8, src: [*]const u8, n: usize) void; + +// https://man7.org/linux/man-pages/man3/fmod.3.html +pub extern fn fmod(f64, f64) f64; diff --git a/src/js_parser.zig b/src/js_parser.zig index 1a0e582f1..ad8dd0ecd 100644 --- a/src/js_parser.zig +++ b/src/js_parser.zig @@ -15670,8 +15670,12 @@ fn NewParser_( .bin_rem => { if (p.should_fold_typescript_constant_expressions) { if (Expr.extractNumericValues(e_.left.data, e_.right.data)) |vals| { - // is this correct? - return p.newExpr(E.Number{ .value = std.math.mod(f64, vals[0], vals[1]) catch 0.0 }, expr.loc); + return p.newExpr( + // Use libc fmod here to be consistent with what JavaScriptCore does + // https://github.com/oven-sh/WebKit/blob/7a0b13626e5db69aa5a32d037431d381df5dfb61/Source/JavaScriptCore/runtime/MathCommon.cpp#L574-L597 + E.Number{ .value = bun.C.fmod(vals[0], vals[1]) }, + expr.loc, + ); } } }, |