| // Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| #ifndef RUNTIME_VM_LINE_STARTS_READER_H_ | |
| #define RUNTIME_VM_LINE_STARTS_READER_H_ | |
| #if !defined(DART_PRECOMPILED_RUNTIME) || defined(DART_DYNAMIC_MODULES) | |
| #include <memory> | |
| #include "platform/assert.h" | |
| #include "vm/allocation.h" | |
| #include "vm/globals.h" | |
| #include "vm/growable_array.h" | |
| #include "vm/object.h" | |
| #include "vm/token_position.h" | |
| namespace dart { | |
| class LineStartsReader : public ValueObject { | |
| public: | |
| explicit LineStartsReader(const TypedData& line_starts_data); | |
| uint32_t At(intptr_t index) const { | |
| if (element_type_ == kUint16ArrayElement) { | |
| return line_starts_data_.GetUint16(index << 1); | |
| } else { | |
| ASSERT(element_type_ == kUint32ArrayElement); | |
| return line_starts_data_.GetUint32(index << 2); | |
| } | |
| } | |
| uint32_t MaxPosition() const; | |
| // Returns whether the given offset corresponds to a valid source offset | |
| // If it does, then *line and *column (if column is not nullptr) are set | |
| // to the line and column the token starts at. | |
| DART_WARN_UNUSED_RESULT bool LocationForPosition( | |
| intptr_t position, | |
| intptr_t* line, | |
| intptr_t* col = nullptr) const; | |
| // Returns whether any tokens were found for the given line. When found, | |
| // *first_token_index and *last_token_index are set to the first and | |
| // last token on the line, respectively. | |
| DART_WARN_UNUSED_RESULT bool TokenRangeAtLine( | |
| intptr_t line_number, | |
| TokenPosition* first_token_index, | |
| TokenPosition* last_token_index) const; | |
| private: | |
| const TypedData& line_starts_data_; | |
| const TypedDataElementType element_type_; | |
| }; | |
| } // namespace dart | |
| #endif // !defined(DART_PRECOMPILED_RUNTIME) || defined(DART_DYNAMIC_MODULES) | |
| #endif // RUNTIME_VM_LINE_STARTS_READER_H_ |