瀏覽代碼

LibJS: Devirtualize Object::is_typed_array()

Andreas Kling 1 年之前
父節點
當前提交
4cce181ece
共有 2 個文件被更改,包括 6 次插入4 次删除
  1. 5 1
      Userland/Libraries/LibJS/Runtime/Object.h
  2. 1 3
      Userland/Libraries/LibJS/Runtime/TypedArray.h

+ 5 - 1
Userland/Libraries/LibJS/Runtime/Object.h

@@ -184,7 +184,6 @@ public:
 
     virtual bool is_dom_node() const { return false; }
     virtual bool is_function() const { return false; }
-    virtual bool is_typed_array() const { return false; }
     virtual bool is_string_object() const { return false; }
     virtual bool is_global_object() const { return false; }
     virtual bool is_proxy_object() const { return false; }
@@ -225,6 +224,9 @@ public:
 
     static FlatPtr has_magical_length_property_offset() { return OFFSET_OF(Object, m_has_magical_length_property); }
 
+    [[nodiscard]] bool is_typed_array() const { return m_is_typed_array; }
+    void set_is_typed_array() { m_is_typed_array = true; }
+
 protected:
     enum class GlobalObjectTag { Tag };
     enum class ConstructWithoutPrototypeTag { Tag };
@@ -244,6 +246,8 @@ protected:
 
     bool m_has_magical_length_property { false };
 
+    bool m_is_typed_array { false };
+
 private:
     void set_shape(Shape& shape) { m_shape = &shape; }
 

+ 1 - 3
Userland/Libraries/LibJS/Runtime/TypedArray.h

@@ -75,6 +75,7 @@ protected:
         , m_kind(kind)
         , m_intrinsic_constructor(intrinsic_constructor)
     {
+        set_is_typed_array();
     }
 
     u32 m_array_length { 0 };
@@ -463,9 +464,6 @@ protected:
         m_array_length = array_length;
         m_byte_length = m_viewed_array_buffer->byte_length();
     }
-
-private:
-    virtual bool is_typed_array() const final { return true; }
 };
 
 ThrowCompletionOr<TypedArrayBase*> typed_array_create(VM&, FunctionObject& constructor, MarkedVector<Value> arguments);