From 162fa3f1da8a632ba324a05831f96c728fd01ea2 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Sat, 20 Dec 2025 19:46:17 +0100 Subject: [PATCH 1/3] Work around msvc definition of INFINITY INFINITY is reportedly no longer a compile-time expression in some versions of MSVC. Work around that by minting an INFINITY from a uint64. Pretty much the same as commit f93dd58ea0ec2e706846872b3518839c3b1fa555 from November 2024, except for INFINITY instead of NAN. Fixes: https://github.com/quickjs-ng/quickjs/issues/1275 --- quickjs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/quickjs.c b/quickjs.c index c6d538493..139ab2192 100644 --- a/quickjs.c +++ b/quickjs.c @@ -42855,8 +42855,8 @@ static const JSCFunctionListEntry js_number_funcs[] = { JS_PROP_DOUBLE_DEF("MAX_VALUE", 1.7976931348623157e+308, 0 ), JS_PROP_DOUBLE_DEF("MIN_VALUE", 5e-324, 0 ), JS_PROP_U2D_DEF("NaN", 0x7FF8ull<<48, 0 ), // workaround for msvc - JS_PROP_DOUBLE_DEF("NEGATIVE_INFINITY", -INFINITY, 0 ), - JS_PROP_DOUBLE_DEF("POSITIVE_INFINITY", INFINITY, 0 ), + JS_PROP_U2D_DEF("NEGATIVE_INFINITY", 0xFFFull<<52, 0 ), // workaround for msvc + JS_PROP_U2D_DEF("POSITIVE_INFINITY", 0x7FFull<<52, 0 ), // workaround for msvc JS_PROP_DOUBLE_DEF("EPSILON", 2.220446049250313e-16, 0 ), /* ES6 */ JS_PROP_DOUBLE_DEF("MAX_SAFE_INTEGER", 9007199254740991.0, 0 ), /* ES6 */ JS_PROP_DOUBLE_DEF("MIN_SAFE_INTEGER", -9007199254740991.0, 0 ), /* ES6 */ From 9f39a8d22914af1d4f781969644695012de535ff Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Fri, 2 Jan 2026 11:53:40 +0100 Subject: [PATCH 2/3] squash! mention djgpp, consistent-ify expressions --- quickjs.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/quickjs.c b/quickjs.c index 139ab2192..fcc8b6679 100644 --- a/quickjs.c +++ b/quickjs.c @@ -42854,12 +42854,14 @@ static const JSCFunctionListEntry js_number_funcs[] = { JS_CFUNC_DEF("isSafeInteger", 1, js_number_isSafeInteger ), JS_PROP_DOUBLE_DEF("MAX_VALUE", 1.7976931348623157e+308, 0 ), JS_PROP_DOUBLE_DEF("MIN_VALUE", 5e-324, 0 ), - JS_PROP_U2D_DEF("NaN", 0x7FF8ull<<48, 0 ), // workaround for msvc - JS_PROP_U2D_DEF("NEGATIVE_INFINITY", 0xFFFull<<52, 0 ), // workaround for msvc - JS_PROP_U2D_DEF("POSITIVE_INFINITY", 0x7FFull<<52, 0 ), // workaround for msvc JS_PROP_DOUBLE_DEF("EPSILON", 2.220446049250313e-16, 0 ), /* ES6 */ JS_PROP_DOUBLE_DEF("MAX_SAFE_INTEGER", 9007199254740991.0, 0 ), /* ES6 */ JS_PROP_DOUBLE_DEF("MIN_SAFE_INTEGER", -9007199254740991.0, 0 ), /* ES6 */ + // workarounds for msvc & djgpp where NAN and INFINITY + // are not constant-time expressions + JS_PROP_U2D_DEF("NaN", 0x7FF8ull<<48, 0 ), + JS_PROP_U2D_DEF("NEGATIVE_INFINITY", 0xFFF0ull<<48, 0 ), + JS_PROP_U2D_DEF("POSITIVE_INFINITY", 0x7FF0ull<<48, 0 ), }; static JSValue js_thisNumberValue(JSContext *ctx, JSValueConst this_val) From ba8498e9f04be170f6b5ba0e0d5290c2ab027bd7 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Sun, 4 Jan 2026 01:06:56 +0100 Subject: [PATCH 3/3] squash --- quickjs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/quickjs.c b/quickjs.c index fcc8b6679..032e855d1 100644 --- a/quickjs.c +++ b/quickjs.c @@ -42858,7 +42858,7 @@ static const JSCFunctionListEntry js_number_funcs[] = { JS_PROP_DOUBLE_DEF("MAX_SAFE_INTEGER", 9007199254740991.0, 0 ), /* ES6 */ JS_PROP_DOUBLE_DEF("MIN_SAFE_INTEGER", -9007199254740991.0, 0 ), /* ES6 */ // workarounds for msvc & djgpp where NAN and INFINITY - // are not constant-time expressions + // are not compile-time expressions JS_PROP_U2D_DEF("NaN", 0x7FF8ull<<48, 0 ), JS_PROP_U2D_DEF("NEGATIVE_INFINITY", 0xFFF0ull<<48, 0 ), JS_PROP_U2D_DEF("POSITIVE_INFINITY", 0x7FF0ull<<48, 0 ),