Преглед изворни кода

LibJS: Optimize insertion order in the Exception constructor

By inserting the stack frames in the correct order we can improve the
runtime for the test-js test suite by about 20%.
Gunnar Beutner пре 4 година
родитељ
комит
8b449214af
1 измењених фајлова са 5 додато и 5 уклоњено
  1. 5 5
      Userland/Libraries/LibJS/Runtime/Exception.cpp

+ 5 - 5
Userland/Libraries/LibJS/Runtime/Exception.cpp

@@ -18,18 +18,18 @@ Exception::Exception(Value value)
 {
     auto& vm = this->vm();
     m_traceback.ensure_capacity(vm.call_stack().size());
-    for (auto* call_frame : vm.call_stack()) {
+    for (ssize_t i = vm.call_stack().size() - 1; i >= 0; i--) {
+        auto* call_frame = vm.call_stack()[i];
         auto function_name = call_frame->function_name;
         if (function_name.is_empty())
             function_name = "<anonymous>";
-        m_traceback.prepend({
-            .function_name = move(function_name),
+        m_traceback.empend(
+            move(function_name),
             // We might not have an AST node associated with the call frame, e.g. in promise
             // reaction jobs (which aren't called anywhere from the source code).
             // They're not going to generate any _unhandled_ exceptions though, so a meaningless
             // source range is fine.
-            .source_range = call_frame->current_node ? call_frame->current_node->source_range() : SourceRange {},
-        });
+            call_frame->current_node ? call_frame->current_node->source_range() : SourceRange {});
     }
 }