| // 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_ |