Prechádzať zdrojové kódy

LibJS/Bytecode: Make NewArray write directly to indexed properties

This follows how the regular AST interpreter creates arrays, as using
Array::create_from uses create_data_property_or_throw, which will crash
when it encounters an empty value. We require empty values to represent
array holes.
Luke Wilde 3 rokov pred
rodič
commit
e517cb505a
1 zmenil súbory, kde vykonal 6 pridanie a 5 odobranie
  1. 6 5
      Userland/Libraries/LibJS/Bytecode/Op.cpp

+ 6 - 5
Userland/Libraries/LibJS/Bytecode/Op.cpp

@@ -127,11 +127,12 @@ ThrowCompletionOr<void> NewBigInt::execute_impl(Bytecode::Interpreter& interpret
 
 
 ThrowCompletionOr<void> NewArray::execute_impl(Bytecode::Interpreter& interpreter) const
 ThrowCompletionOr<void> NewArray::execute_impl(Bytecode::Interpreter& interpreter) const
 {
 {
-    Vector<Value> elements;
-    elements.ensure_capacity(m_element_count);
-    for (size_t i = 0; i < m_element_count; i++)
-        elements.append(interpreter.reg(m_elements[i]));
-    interpreter.accumulator() = Array::create_from(interpreter.global_object(), elements);
+    auto* array = MUST(Array::create(interpreter.global_object(), 0));
+    for (size_t i = 0; i < m_element_count; i++) {
+        auto& value = interpreter.reg(m_elements[i]);
+        array->indexed_properties().put(i, value, default_attributes);
+    }
+    interpreter.accumulator() = array;
     return {};
     return {};
 }
 }