Skip to content

Commit f043207

Browse files
committed
feat: javascript helpers extension
fix #881
1 parent 2cabcad commit f043207

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

src/lib/Support/JavaScript.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -840,14 +840,8 @@ static jerry_value_t toJsValue(dom::Value const& v, std::shared_ptr<Context::Imp
840840
case dom::Kind::Boolean: return jerry_boolean(v.getBool());
841841
case dom::Kind::Integer:
842842
{
843-
// JerryScript stores small integers in a compact tagged form; passing
844-
// values outside the host `int` range trips UBSan during the internal
845-
// cast. Clamp to the supported range to avoid UB under sanitizers.
843+
// Preserve the full 53-bit integer precision JavaScript numbers support.
846844
auto i = v.getInteger();
847-
if (i > std::numeric_limits<int>::max())
848-
return jerry_number(static_cast<double>(std::numeric_limits<int>::max()));
849-
if (i < std::numeric_limits<int>::min())
850-
return jerry_number(static_cast<double>(std::numeric_limits<int>::min()));
851845
return jerry_number(static_cast<double>(i));
852846
}
853847
case dom::Kind::String:

src/test/Support/JavaScript.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,18 @@ struct JavaScript_test
220220
BOOST_TEST(y.getDom() == 1);
221221
}
222222

223+
// setGlobal with 64-bit integers preserves the full value
224+
{
225+
Scope scope(ctx);
226+
auto const big = static_cast<std::int64_t>(1) << 33;
227+
scope.setGlobal("big", dom::Value(big));
228+
auto exp = scope.getGlobal("big");
229+
BOOST_TEST(exp);
230+
js::Value bigVal = *exp;
231+
BOOST_TEST(bigVal.isNumber());
232+
BOOST_TEST(bigVal.getDom() == big);
233+
}
234+
223235
// getGlobalObject
224236
{
225237
Scope scope(ctx);

0 commit comments

Comments
 (0)