mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-25 14:05:15 +00:00
Generating Error objects got a lot slower after the introduction of
SourceCode in b0b022507b
.
This was noticeable with `test-js` which generates a lot of errors,
so walking the source code over and over to compute (line, column)
was eating a ton of time.
This patch makes repeated lookups a lot faster by building a cache
of line break offsets in the source code. The cache is built on first
offset lookup, so we only pay for this in code that actually throws.
On my machine, this takes `test-js` runtime from 6.7 sec to 4.3 sec.
35 lines
707 B
C++
35 lines
707 B
C++
/*
|
|
* Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/String.h>
|
|
#include <AK/Vector.h>
|
|
#include <LibJS/Forward.h>
|
|
|
|
namespace JS {
|
|
|
|
class SourceCode : public RefCounted<SourceCode> {
|
|
public:
|
|
static NonnullRefPtr<SourceCode> create(String filename, String code);
|
|
|
|
String const& filename() const;
|
|
String const& code() const;
|
|
|
|
SourceRange range_from_offsets(u32 start_offset, u32 end_offset) const;
|
|
|
|
private:
|
|
SourceCode(String filename, String code);
|
|
|
|
void compute_line_break_offsets() const;
|
|
|
|
String m_filename;
|
|
String m_code;
|
|
|
|
Optional<Vector<size_t>> mutable m_line_break_offsets;
|
|
};
|
|
|
|
}
|