فهرست منبع

LibJS: Add fast path for add() with two numeric JS::Values

Andreas Kling 4 سال پیش
والد
کامیت
00965e3dad
1فایلهای تغییر یافته به همراه10 افزوده شده و 0 حذف شده
  1. 10 0
      Userland/Libraries/LibJS/Runtime/Value.cpp

+ 10 - 0
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)
 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<i32> 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& vm = global_object.vm();
     auto lhs_primitive = lhs.to_primitive(global_object);
     auto lhs_primitive = lhs.to_primitive(global_object);
     if (vm.exception())
     if (vm.exception())