From 8779faa1316eb528276a2a0e1458ea4e110d6eed Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Tue, 24 Mar 2026 15:22:41 -0700 Subject: [PATCH] [vm] Remove gap from symbol list. TEST=ci Change-Id: Ib4aa1a48fdcf47f6e27c21428628d06d4de9fd9e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/490348 Reviewed-by: Alexander Aprelev Commit-Queue: Ryan Macnak --- runtime/vm/app_snapshot.cc | 4 ++-- runtime/vm/compiler/method_recognizer.cc | 4 ++-- runtime/vm/symbols.cc | 7 +++---- runtime/vm/symbols.h | 13 +++++-------- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc index 69bebed6f3e..a601c917709 100644 --- a/runtime/vm/app_snapshot.cc +++ b/runtime/vm/app_snapshot.cc @@ -7002,7 +7002,7 @@ class VMSerializationRoots : public SerializationRoots { } void WriteRoots(Serializer* s) { - for (intptr_t i = 1; i < Symbols::kMaxPredefinedId; i++) { + for (intptr_t i = 0; i < Symbols::kMaxPredefinedId; i++) { s->WriteRootRef(Symbols::Symbol(i).ptr(), ""); } s->WriteRootRef( @@ -7099,7 +7099,7 @@ class VMDeserializationRoots : public DeserializationRoots { } void ReadRoots(Deserializer* d) override { - for (intptr_t i = 1; i < Symbols::kMaxPredefinedId; i++) { + for (intptr_t i = 0; i < Symbols::kMaxPredefinedId; i++) { String* symbol = String::ReadOnlyHandle(); *symbol ^= d->ReadRef(); Symbols::InitSymbol(i, symbol); diff --git a/runtime/vm/compiler/method_recognizer.cc b/runtime/vm/compiler/method_recognizer.cc index 79f8db36883..9a80dd6bd67 100644 --- a/runtime/vm/compiler/method_recognizer.cc +++ b/runtime/vm/compiler/method_recognizer.cc @@ -314,7 +314,7 @@ static const struct { const uint32_t finger_print; const char* const name; } factory_recognizer_list[] = {RECOGNIZED_LIST_FACTORY_LIST(RECOGNIZE_FACTORY){ - Symbols::kIllegal, -1, 0, nullptr}}; + Symbols::kEmptyId, kIllegalCid, 0, nullptr}}; #undef RECOGNIZE_FACTORY @@ -326,7 +326,7 @@ intptr_t FactoryRecognizer::ResultCid(const Function& factory) { (lib.ptr() == Library::TypedDataLibrary())); const String& factory_name = String::Handle(factory.name()); for (intptr_t i = 0; - factory_recognizer_list[i].symbol_id != Symbols::kIllegal; i++) { + factory_recognizer_list[i].symbol_id != Symbols::kEmptyId; i++) { if (String::EqualsIgnoringPrivateKey( factory_name, Symbols::Symbol(factory_recognizer_list[i].symbol_id))) { diff --git a/runtime/vm/symbols.cc b/runtime/vm/symbols.cc index 464022cfc02..b5e0958df49 100644 --- a/runtime/vm/symbols.cc +++ b/runtime/vm/symbols.cc @@ -22,14 +22,13 @@ StringPtr Symbols::predefined_[Symbols::kNumberOfOneCharCodeSymbols]; String* Symbols::symbol_handles_[Symbols::kMaxPredefinedId]; #if !defined(DART_PRECOMPILED_RUNTIME) +// clang-format off static const char* const names[] = { - // clang-format off - nullptr, #define DEFINE_SYMBOL_LITERAL(symbol, literal) literal, PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_LITERAL) #undef DEFINE_SYMBOL_LITERAL - // clang-format on }; +// clang-format on #endif StringPtr StringFrom(const uint8_t* data, intptr_t len, Heap::Space space) { @@ -83,7 +82,7 @@ void Symbols::Init(IsolateGroup* vm_isolate_group) { // Create symbols for language keywords. Some keywords are equal to // symbols we already created, so use New() instead of Add() to ensure // that the symbols are canonicalized. - for (intptr_t i = 1; i < Symbols::kNullCharId; i++) { + for (intptr_t i = 0; i < Symbols::kNullCharId; i++) { String* str = String::ReadOnlyHandle(); *str = OneByteString::New(names[i], Heap::kOld); str->Hash(); diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h index 1dbaa3e229f..8ff4f75f050 100644 --- a/runtime/vm/symbols.h +++ b/runtime/vm/symbols.h @@ -577,18 +577,15 @@ class Symbols : public AllStatic { enum { kMaxOneCharCodeSymbol = 0xFF }; // List of strings that are pre created in the vm isolate. + // clang-format off enum SymbolId { - // clang-format off - kIllegal = 0, - #define DEFINE_SYMBOL_INDEX(symbol, literal) k##symbol##Id, - PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_INDEX) +PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_INDEX) #undef DEFINE_SYMBOL_INDEX - kNullCharId, // One char code symbol starts here and takes up 256 entries. kMaxPredefinedId = kNullCharId + kMaxOneCharCodeSymbol + 1, - // clang-format on }; + // clang-format on // Number of one character symbols being predefined in the predefined_ array. static constexpr int kNumberOfOneCharCodeSymbols = @@ -598,11 +595,11 @@ class Symbols : public AllStatic { static constexpr int kNullCharCodeSymbolOffset = 0; static const String& Symbol(intptr_t index) { - ASSERT((index > kIllegal) && (index < kMaxPredefinedId)); + ASSERT((index >= 0) && (index < kMaxPredefinedId)); return *(symbol_handles_[index]); } static void InitSymbol(intptr_t index, String* symbol) { - ASSERT((index > kIllegal) && (index < kMaxPredefinedId)); + ASSERT((index >= 0) && (index < kMaxPredefinedId)); symbol_handles_[index] = symbol; }