From 00965e3dad5cadcd7e11e631a093695c6510db2b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 21 Mar 2021 18:13:14 +0100 Subject: [PATCH] LibJS: Add fast path for add() with two numeric JS::Values --- Userland/Libraries/LibJS/Runtime/Value.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Userland/Libraries/LibJS/Runtime/Value.cpp b/Userland/Libraries/LibJS/Runtime/Value.cpp index 88cd64c3c1..e5b362984c 100644 --- a/Userland/Libraries/LibJS/Runtime/Value.cpp +++ b/Userland/Libraries/LibJS/Runtime/Value.cpp @@ -833,6 +833,16 @@ Value unsigned_right_shift(GlobalObject& global_object, Value lhs, Value rhs) Value add(GlobalObject& global_object, Value lhs, Value rhs) { + if (both_number(lhs, rhs)) { + if (lhs.type() == Value::Type::Int32 && rhs.type() == Value::Type::Int32) { + Checked result; + result = lhs.to_i32(global_object); + result += rhs.to_i32(global_object); + if (!result.has_overflow()) + return Value(result.value()); + } + return Value(lhs.as_double() + rhs.as_double()); + } auto& vm = global_object.vm(); auto lhs_primitive = lhs.to_primitive(global_object); if (vm.exception())