[vm] Shrink object store name metadata.

Saves 18k.

TEST=ci
Change-Id: Ie30eee4589f124e705bf922e5b6f8f8cedfdab25
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/434240
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
diff --git a/runtime/vm/app_snapshot.cc b/runtime/vm/app_snapshot.cc
index b89b7cf..e5baaff 100644
--- a/runtime/vm/app_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -7038,20 +7038,6 @@
 };
 
 #if !defined(DART_PRECOMPILED_RUNTIME)
-static const char* const kObjectStoreFieldNames[] = {
-#define DECLARE_OBJECT_STORE_FIELD(Type, Name) #Name,
-    OBJECT_STORE_FIELD_LIST(DECLARE_OBJECT_STORE_FIELD,
-                            DECLARE_OBJECT_STORE_FIELD,
-                            DECLARE_OBJECT_STORE_FIELD,
-                            DECLARE_OBJECT_STORE_FIELD,
-                            DECLARE_OBJECT_STORE_FIELD,
-                            DECLARE_OBJECT_STORE_FIELD,
-                            DECLARE_OBJECT_STORE_FIELD,
-                            DECLARE_OBJECT_STORE_FIELD,
-                            DECLARE_OBJECT_STORE_FIELD)
-#undef DECLARE_OBJECT_STORE_FIELD
-};
-
 class ProgramSerializationRoots : public SerializationRoots {
  public:
 #define RESET_ROOT_LIST(V)                                                     \
@@ -7157,8 +7143,19 @@
   void WriteRoots(Serializer* s) {
     ObjectPtr* from = object_store_->from();
     ObjectPtr* to = object_store_->to_snapshot(s->kind());
+    // A strtab is smaller than an array of strings.
+    static const char* const names = ""
+#define EMIT_FIELD_NAME(type, name) #name "_\0"
+        OBJECT_STORE_FIELD_LIST(
+            EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME,
+            EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME,
+            EMIT_FIELD_NAME)
+#undef EMIT_FIELD_NAME
+        ;  // NOLINT
+    const char* name = names;
     for (ObjectPtr* p = from; p <= to; p++) {
-      s->WriteRootRef(*p, kObjectStoreFieldNames[p - from]);
+      s->WriteRootRef(*p, name);
+      name += strlen(name) + 1;
     }
 
     FieldTable* initial_field_table =
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index 79637b0..e9a4df1 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -37,20 +37,18 @@
     JSONObject fields(jsobj, "fields");
     Object& value = Object::Handle();
 
-    static const char* const names[] = {
-#define EMIT_FIELD_NAME(type, name) #name "_",
+    // A strtab is smaller than an array of strings.
+    static const char* const names = ""
+#define EMIT_FIELD_NAME(type, name) #name "_\0"
         ISOLATE_OBJECT_STORE_FIELD_LIST(EMIT_FIELD_NAME, EMIT_FIELD_NAME)
 #undef EMIT_FIELD_NAME
-    };
-    ObjectPtr* current = from();
-    intptr_t i = 0;
-    while (current <= to()) {
+        ;  // NOLINT
+    const char* name = names;
+    for (ObjectPtr* current = from(); current <= to(); current++) {
       value = *current;
-      fields.AddProperty(names[i], value);
-      current++;
-      i++;
+      fields.AddProperty(name, value);
+      name += strlen(name) + 1;
     }
-    ASSERT(i == ARRAY_SIZE(names));
   }
 }
 #endif  // !PRODUCT
@@ -109,23 +107,21 @@
   {
     JSONObject fields(jsobj, "fields");
     Object& value = Object::Handle();
-    static const char* const names[] = {
-#define EMIT_FIELD_NAME(type, name) #name "_",
+    // A strtab is smaller than an array of strings.
+    static const char* const names = ""
+#define EMIT_FIELD_NAME(type, name) #name "_\0"
         OBJECT_STORE_FIELD_LIST(
             EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME,
             EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME, EMIT_FIELD_NAME,
             EMIT_FIELD_NAME)
 #undef EMIT_FIELD_NAME
-    };
-    ObjectPtr* current = from();
-    intptr_t i = 0;
-    while (current <= to()) {
+        ;  // NOLINT
+    const char* name = names;
+    for (ObjectPtr* current = from(); current <= to(); current++) {
       value = *current;
-      fields.AddProperty(names[i], value);
-      current++;
-      i++;
+      fields.AddProperty(name, value);
+      name += strlen(name) + 1;
     }
-    ASSERT(i == ARRAY_SIZE(names));
   }
 }
 #endif  // !PRODUCT