Version 2.15.0-113.0.dev

Merge commit 'd89e42bef5e5b8a5064790332adb8682977e4e86' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index fe7fc3e..8ce5731 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -1,5 +1,5 @@
 name: _fe_analyzer_shared
-version: 25.0.0
+version: 26.0.0
 description: Logic that is shared between the front_end and analyzer packages.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/_fe_analyzer_shared
 
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 1185171..665fe07 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.3.0
+* Enable `constructor-tearoffs` feature by default in `2.15`.
+* Improvements in constructors tear-off implementation.
+
 ## 2.2.0
 * Improvements in constructors tear-off implementation.
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 3132dfd..e3387ae 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -201,19 +201,13 @@
 
   /// The list of files this file exports.
   List<FileState?> get exportedFiles {
-    if (_exportedFiles == null) {
-      _exportedFiles = <FileState?>[];
-      for (var directive in _unlinked2!.exports) {
-        var uri = _selectRelativeUri(directive);
-        _fileForRelativeUri(uri).map(
-          (file) {
-            _exportedFiles!.add(file);
-          },
-          (_) {},
-        );
-      }
-    }
-    return _exportedFiles!;
+    return _exportedFiles ??= _unlinked2!.exports.map((directive) {
+      var uri = _selectRelativeUri(directive);
+      return _fileForRelativeUri(uri).map(
+        (file) => file,
+        (_) => null,
+      );
+    }).toList();
   }
 
   @override
@@ -221,19 +215,13 @@
 
   /// The list of files this file imports.
   List<FileState?> get importedFiles {
-    if (_importedFiles == null) {
-      _importedFiles = <FileState?>[];
-      for (var directive in _unlinked2!.imports) {
-        var uri = _selectRelativeUri(directive);
-        _fileForRelativeUri(uri).map(
-          (file) {
-            _importedFiles!.add(file);
-          },
-          (_) {},
-        );
-      }
-    }
-    return _importedFiles!;
+    return _importedFiles ??= _unlinked2!.imports.map((directive) {
+      var uri = _selectRelativeUri(directive);
+      return _fileForRelativeUri(uri).map(
+        (file) => file,
+        (_) => null,
+      );
+    }).toList();
   }
 
   LibraryCycle? get internal_libraryCycle => _libraryCycle;
@@ -271,13 +259,6 @@
   /// Return the [LibraryCycle] this file belongs to, even if it consists of
   /// just this file.  If the library cycle is not known yet, compute it.
   LibraryCycle get libraryCycle {
-    if (isPart) {
-      final library = this.library;
-      if (library != null && !identical(library, this)) {
-        return library.libraryCycle;
-      }
-    }
-
     if (_libraryCycle == null) {
       computeLibraryCycle(_fsState._saltForElements, this);
     }
@@ -299,23 +280,19 @@
 
   /// The list of files this library file references as parts.
   List<FileState?> get partedFiles {
-    if (_partedFiles == null) {
-      _partedFiles = <FileState?>[];
-      for (var uri in _unlinked2!.parts) {
-        _fileForRelativeUri(uri).map(
-          (file) {
-            _partedFiles!.add(file);
-            if (file != null) {
-              _fsState._partToLibraries
-                  .putIfAbsent(file, () => <FileState>[])
-                  .add(this);
-            }
-          },
-          (_) {},
-        );
-      }
-    }
-    return _partedFiles!;
+    return _partedFiles ??= _unlinked2!.parts.map((uri) {
+      return _fileForRelativeUri(uri).map(
+        (file) {
+          if (file != null) {
+            _fsState._partToLibraries
+                .putIfAbsent(file, () => <FileState>[])
+                .add(this);
+          }
+          return file;
+        },
+        (_) => null,
+      );
+    }).toList();
   }
 
   /// The external names referenced by the file.
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 17b5859..2f2abf2 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 2.2.0
+version: 2.3.0
 description: This package provides a library that performs static analysis of Dart code.
 homepage: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer
 
@@ -7,7 +7,7 @@
   sdk: '>=2.12.0 <3.0.0'
 
 dependencies:
-  _fe_analyzer_shared: ^25.0.0
+  _fe_analyzer_shared: ^26.0.0
   cli_util: ^0.3.0
   collection: ^1.15.0
   convert: ^3.0.0
diff --git a/pkg/analyzer/test/generated/test_analysis_context.dart b/pkg/analyzer/test/generated/test_analysis_context.dart
index 6702b63..840d225 100644
--- a/pkg/analyzer/test/generated/test_analysis_context.dart
+++ b/pkg/analyzer/test/generated/test_analysis_context.dart
@@ -2,7 +2,6 @@
 // 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.
 
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/src/dart/analysis/session.dart';
 import 'package:analyzer/src/dart/element/class_hierarchy.dart';
 import 'package:analyzer/src/dart/element/element.dart';
@@ -18,7 +17,7 @@
   final SourceFactory sourceFactory = _MockSourceFactory();
 
   final _MockAnalysisSession _analysisSession = _MockAnalysisSession();
-  late AnalysisOptionsImpl _analysisOptions;
+  final AnalysisOptionsImpl _analysisOptions = AnalysisOptionsImpl();
 
   late TypeProviderImpl _typeProviderLegacy;
   late TypeProviderImpl _typeProviderNonNullableByDefault;
@@ -26,10 +25,7 @@
   late TypeSystemImpl _typeSystemLegacy;
   late TypeSystemImpl _typeSystemNonNullableByDefault;
 
-  TestAnalysisContext({FeatureSet? featureSet}) {
-    _analysisOptions = AnalysisOptionsImpl()
-      ..contextFeatures = featureSet ?? FeatureSet.latestLanguageVersion();
-
+  TestAnalysisContext() {
     var sdkElements = MockSdkElements(this, _analysisSession);
 
     _typeProviderLegacy = TypeProviderImpl(
diff --git a/pkg/analyzer/test/generated/type_system_test.dart b/pkg/analyzer/test/generated/type_system_test.dart
index 1f36c75..a0f6b1e 100644
--- a/pkg/analyzer/test/generated/type_system_test.dart
+++ b/pkg/analyzer/test/generated/type_system_test.dart
@@ -2,7 +2,6 @@
 // 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.
 
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
@@ -35,14 +34,8 @@
 
   late TypeSystemImpl typeSystem;
 
-  FeatureSet get testFeatureSet {
-    return FeatureSet.latestLanguageVersion();
-  }
-
   void setUp() {
-    analysisContext = TestAnalysisContext(
-      featureSet: testFeatureSet,
-    );
+    analysisContext = TestAnalysisContext();
     typeProvider = analysisContext.typeProviderNonNullableByDefault;
     typeSystem = analysisContext.typeSystemNonNullableByDefault;
 
@@ -66,14 +59,8 @@
 
   late TypeSystemImpl typeSystem;
 
-  FeatureSet get testFeatureSet {
-    return FeatureSet.latestLanguageVersion();
-  }
-
   void setUp() {
-    analysisContext = TestAnalysisContext(
-      featureSet: testFeatureSet,
-    );
+    analysisContext = TestAnalysisContext();
     typeProvider = analysisContext.typeProviderLegacy;
     typeSystem = analysisContext.typeSystemLegacy;
 
diff --git a/pkg/analyzer/test/source/analysis_options_provider_test.dart b/pkg/analyzer/test/source/analysis_options_provider_test.dart
index 1c9d463..8cb98e3 100644
--- a/pkg/analyzer/test/source/analysis_options_provider_test.dart
+++ b/pkg/analyzer/test/source/analysis_options_provider_test.dart
@@ -3,16 +3,15 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/analysis_options/analysis_options_provider.dart';
 import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:analyzer/src/util/yaml.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:yaml/yaml.dart';
 
-import '../resource_utils.dart';
 import '../src/util/yaml_test.dart';
 
 main() {
@@ -97,31 +96,17 @@
 }
 
 @reflectiveTest
-class AnalysisOptionsProviderTest {
-  late final TestPathTranslator pathTranslator;
-  late final ResourceProvider resourceProvider;
-
-  late final AnalysisOptionsProvider provider;
-
+class AnalysisOptionsProviderTest with ResourceProviderMixin {
   String get analysisOptionsYaml => file_paths.analysisOptionsYaml;
 
-  void setUp() {
-    var rawProvider = MemoryResourceProvider();
-    resourceProvider = TestResourceProvider(rawProvider);
-    pathTranslator = TestPathTranslator(rawProvider);
-    provider = AnalysisOptionsProvider(SourceFactory([
-      ResourceUriResolver(rawProvider),
-    ]));
-  }
-
   void test_getOptions_crawlUp_hasInFolder() {
-    pathTranslator.newFolder('/foo/bar');
-    pathTranslator.newFile('/foo/$analysisOptionsYaml', r'''
+    newFolder('/foo/bar');
+    newFile('/foo/$analysisOptionsYaml', content: r'''
 analyzer:
   ignore:
     - foo
 ''');
-    pathTranslator.newFile('/foo/bar/$analysisOptionsYaml', r'''
+    newFile('/foo/bar/$analysisOptionsYaml', content: r'''
 analyzer:
   ignore:
     - bar
@@ -136,13 +121,13 @@
   }
 
   void test_getOptions_crawlUp_hasInParent() {
-    pathTranslator.newFolder('/foo/bar/baz');
-    pathTranslator.newFile('/foo/$analysisOptionsYaml', r'''
+    newFolder('/foo/bar/baz');
+    newFile('/foo/$analysisOptionsYaml', content: r'''
 analyzer:
   ignore:
     - foo
 ''');
-    pathTranslator.newFile('/foo/bar/$analysisOptionsYaml', r'''
+    newFile('/foo/bar/$analysisOptionsYaml', content: r'''
 analyzer:
   ignore:
     - bar
@@ -157,26 +142,26 @@
   }
 
   void test_getOptions_doesNotExist() {
-    pathTranslator.newFolder('/notFile');
+    newFolder('/notFile');
     YamlMap options = _getOptions('/notFile');
     expect(options, isEmpty);
   }
 
   void test_getOptions_empty() {
-    pathTranslator.newFile('/$analysisOptionsYaml', r'''#empty''');
+    newFile('/$analysisOptionsYaml', content: r'''#empty''');
     YamlMap options = _getOptions('/');
     expect(options, isNotNull);
     expect(options, isEmpty);
   }
 
   void test_getOptions_include() {
-    pathTranslator.newFile('/foo.include', r'''
+    newFile('/foo.include', content: r'''
 analyzer:
   ignore:
     - ignoreme.dart
     - 'sdk_ext/**'
 ''');
-    pathTranslator.newFile('/$analysisOptionsYaml', r'''
+    newFile('/$analysisOptionsYaml', content: r'''
 include: foo.include
 ''');
     YamlMap options = _getOptions('/');
@@ -194,12 +179,12 @@
   }
 
   void test_getOptions_include_emptyLints() {
-    pathTranslator.newFile('/foo.include', r'''
+    newFile('/foo.include', content: r'''
 linter:
   rules:
     - prefer_single_quotes
 ''');
-    pathTranslator.newFile('/$analysisOptionsYaml', r'''
+    newFile('/$analysisOptionsYaml', content: r'''
 include: foo.include
 linter:
   rules:
@@ -219,7 +204,7 @@
   }
 
   void test_getOptions_include_missing() {
-    pathTranslator.newFile('/$analysisOptionsYaml', r'''
+    newFile('/$analysisOptionsYaml', content: r'''
 include: /foo.include
 ''');
     YamlMap options = _getOptions('/');
@@ -227,13 +212,13 @@
   }
 
   void test_getOptions_invalid() {
-    pathTranslator.newFile('/$analysisOptionsYaml', r''':''');
+    newFile('/$analysisOptionsYaml', content: r''':''');
     YamlMap options = _getOptions('/');
     expect(options, hasLength(1));
   }
 
   void test_getOptions_simple() {
-    pathTranslator.newFile('/$analysisOptionsYaml', r'''
+    newFile('/$analysisOptionsYaml', content: r'''
 analyzer:
   ignore:
     - ignoreme.dart
@@ -254,7 +239,10 @@
   }
 
   YamlMap _getOptions(String posixPath) {
-    var resource = pathTranslator.getResource(posixPath) as Folder;
-    return provider.getOptions(resource);
+    var folder = getFolder(posixPath);
+    var provider = AnalysisOptionsProvider(SourceFactory([
+      ResourceUriResolver(resourceProvider),
+    ]));
+    return provider.getOptions(folder);
   }
 }
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index d307683..29fcbe1 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -498,6 +498,7 @@
     // It's a cycle.
     _assertLibraryCycle(fa, [fa, fb], []);
     _assertLibraryCycle(fb, [fa, fb], []);
+    expect(fa.libraryCycle, same(fb.libraryCycle));
 
     // Update a.dart so that it does not import b.dart anymore.
     newFile(pa);
@@ -520,6 +521,36 @@
     _assertLibraryCycle(fa, [fa], []);
   }
 
+  test_libraryCycle_part() {
+    var a_path = convertPath('/aaa/lib/a.dart');
+    var b_path = convertPath('/aaa/lib/b.dart');
+
+    newFile(a_path, content: r'''
+part 'b.dart';
+''');
+    newFile(b_path, content: r'''
+part of 'a.dart';
+''');
+
+    var a_file = fileSystemState.getFileForPath(a_path);
+    var b_file = fileSystemState.getFileForPath(b_path);
+    _assertFilesWithoutLibraryCycle([a_file, b_file]);
+
+    // Compute the library cycle for 'a.dart', the library.
+    var a_libraryCycle = a_file.libraryCycle;
+    _assertFilesWithoutLibraryCycle([b_file]);
+
+    // The part 'b.dart' has its own library cycle.
+    // If the user chooses to import a part, it is a compile-time error.
+    // We could handle this in different ways:
+    // 1. Completely ignore an import of a file with a `part of` directive.
+    // 2. Treat such file as a library anyway.
+    // By giving a part its own library cycle we support (2).
+    var b_libraryCycle = b_file.libraryCycle;
+    expect(b_libraryCycle, isNot(same(a_libraryCycle)));
+    _assertFilesWithoutLibraryCycle([]);
+  }
+
   test_referencedNames() {
     String path = convertPath('/aaa/lib/a.dart');
     newFile(path, content: r'''
diff --git a/pkg/analyzer/test/src/dart/element/factor_type_test.dart b/pkg/analyzer/test/src/dart/element/factor_type_test.dart
index fee6ba8..a67d57e 100644
--- a/pkg/analyzer/test/src/dart/element/factor_type_test.dart
+++ b/pkg/analyzer/test/src/dart/element/factor_type_test.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:_fe_analyzer_shared/src/flow_analysis/factory_type_test_helper.dart';
-import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -42,9 +41,7 @@
   }
 
   void setUp() {
-    var analysisContext = TestAnalysisContext(
-      featureSet: FeatureSet.latestLanguageVersion(),
-    );
+    var analysisContext = TestAnalysisContext();
     typeProvider = analysisContext.typeProviderNonNullableByDefault;
     typeSystem = analysisContext.typeSystemNonNullableByDefault;
   }
diff --git a/runtime/docs/index.md b/runtime/docs/index.md
index 934ea63..4a63f9e 100644
--- a/runtime/docs/index.md
+++ b/runtime/docs/index.md
@@ -266,7 +266,7 @@
 ![Snapshots](images/snapshot-with-code.png)
 
 !!! sourcecode "Source to read"
-    @{runtime/vm/clustered_snapshot.cc} handles serialization and deserialization of snapshots. A family of API functions `Dart_CreateXyzSnapshot[AsAssembly]` are responsible for writing out snapshots of the heap (e.g. @{Dart_CreateAppJITSnapshotAsBlobs} and @{Dart_CreateAppAOTSnapshotAsAssembly}). On the other hand @{Dart_CreateIsolateGroup} optionally takes snapshot data to start an isolate from.
+    @{runtime/vm/app_snapshot.cc} handles serialization and deserialization of snapshots. A family of API functions `Dart_CreateXyzSnapshot[AsAssembly]` are responsible for writing out snapshots of the heap (e.g. @{Dart_CreateAppJITSnapshotAsBlobs} and @{Dart_CreateAppAOTSnapshotAsAssembly}). On the other hand @{Dart_CreateIsolateGroup} optionally takes snapshot data to start an isolate from.
 
 ### Running from AppJIT snapshots
 
@@ -390,4 +390,4 @@
 ## TODO
 
 1. Document the difference between CoreJIT and AppJIT snapshots.
-2. Document that switchable calls are used in the unoptimized code as well.
\ No newline at end of file
+2. Document that switchable calls are used in the unoptimized code as well.
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/app_snapshot.cc
similarity index 99%
rename from runtime/vm/clustered_snapshot.cc
rename to runtime/vm/app_snapshot.cc
index cf5473e..21399b7 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/app_snapshot.cc
@@ -5,7 +5,7 @@
 #include <memory>
 #include <utility>
 
-#include "vm/clustered_snapshot.h"
+#include "vm/app_snapshot.h"
 
 #include "platform/assert.h"
 #include "vm/bootstrap.h"
@@ -2920,10 +2920,10 @@
     ContextPtr context = Context::RawCast(object);
     objects_.Add(context);
 
-    s->Push(context->untag()->parent_);
+    s->Push(context->untag()->parent());
     const intptr_t length = context->untag()->num_variables_;
     for (intptr_t i = 0; i < length; i++) {
-      s->Push(context->untag()->data()[i]);
+      s->Push(context->untag()->element(i));
     }
   }
 
@@ -2947,9 +2947,9 @@
       AutoTraceObject(context);
       const intptr_t length = context->untag()->num_variables_;
       s->WriteUnsigned(length);
-      WriteField(context, parent_);
+      WriteField(context, parent());
       for (intptr_t j = 0; j < length; j++) {
-        s->WriteElementRef(context->untag()->data()[j], j);
+        s->WriteElementRef(context->untag()->element(j), j);
       }
     }
   }
diff --git a/runtime/vm/clustered_snapshot.h b/runtime/vm/app_snapshot.h
similarity index 99%
rename from runtime/vm/clustered_snapshot.h
rename to runtime/vm/app_snapshot.h
index d80cb7453..da96ab4 100644
--- a/runtime/vm/clustered_snapshot.h
+++ b/runtime/vm/app_snapshot.h
@@ -2,8 +2,8 @@
 // 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_CLUSTERED_SNAPSHOT_H_
-#define RUNTIME_VM_CLUSTERED_SNAPSHOT_H_
+#ifndef RUNTIME_VM_APP_SNAPSHOT_H_
+#define RUNTIME_VM_APP_SNAPSHOT_H_
 
 #include "platform/assert.h"
 #include "vm/allocation.h"
@@ -820,4 +820,4 @@
 
 }  // namespace dart
 
-#endif  // RUNTIME_VM_CLUSTERED_SNAPSHOT_H_
+#endif  // RUNTIME_VM_APP_SNAPSHOT_H_
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index 45da2e8..3c2345e 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -15,7 +15,7 @@
 #include "platform/globals.h"
 #include "platform/utils.h"
 
-#include "vm/clustered_snapshot.h"
+#include "vm/app_snapshot.h"
 #include "vm/dart_api_impl.h"
 #include "vm/datastream.h"
 #include "vm/message_snapshot.h"
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index 35dcb71..fbe3e61 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -582,7 +582,7 @@
   if (FLAG_precompiled_mode) {
     if (FLAG_use_bare_instructions) {
       // The AOT runtime will replace the slot in the object pool with the
-      // entrypoint address - see clustered_snapshot.cc.
+      // entrypoint address - see app_snapshot.cc.
       CLOBBERS_LR(__ LoadUniqueObject(LR, StubCode::MegamorphicCall()));
     } else {
       __ LoadUniqueObject(CODE_REG, StubCode::MegamorphicCall());
@@ -643,7 +643,7 @@
       (ic_data.SizeWithoutTypeArgs() - 1) * compiler::target::kWordSize);
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
     // The AOT runtime will replace the slot in the object pool with the
-    // entrypoint address - see clustered_snapshot.cc.
+    // entrypoint address - see app_snapshot.cc.
     CLOBBERS_LR(__ LoadUniqueObject(LR, initial_stub));
   } else {
     __ LoadUniqueObject(CODE_REG, initial_stub);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index b3e65ad..da37d86 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -578,7 +578,7 @@
   ASSERT((data_index + 1) == stub_index);
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
     // The AOT runtime will replace the slot in the object pool with the
-    // entrypoint address - see clustered_snapshot.cc.
+    // entrypoint address - see app_snapshot.cc.
     CLOBBERS_LR(__ LoadDoubleWordFromPoolIndex(R5, LR, data_index));
   } else {
     __ LoadDoubleWordFromPoolIndex(R5, CODE_REG, data_index);
@@ -638,7 +638,7 @@
 
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
     // The AOT runtime will replace the slot in the object pool with the
-    // entrypoint address - see clustered_snapshot.cc.
+    // entrypoint address - see app_snapshot.cc.
     CLOBBERS_LR(__ LoadDoubleWordFromPoolIndex(R5, LR, data_index));
   } else {
     __ LoadDoubleWordFromPoolIndex(R5, CODE_REG, data_index);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 81c4cac..573add6 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -581,7 +581,7 @@
   if (FLAG_precompiled_mode) {
     if (FLAG_use_bare_instructions) {
       // The AOT runtime will replace the slot in the object pool with the
-      // entrypoint address - see clustered_snapshot.cc.
+      // entrypoint address - see app_snapshot.cc.
       __ LoadUniqueObject(RCX, StubCode::MegamorphicCall());
     } else {
       __ LoadUniqueObject(CODE_REG, StubCode::MegamorphicCall());
@@ -639,7 +639,7 @@
                    RSP, (ic_data.SizeWithoutTypeArgs() - 1) * kWordSize));
   if (FLAG_precompiled_mode && FLAG_use_bare_instructions) {
     // The AOT runtime will replace the slot in the object pool with the
-    // entrypoint address - see clustered_snapshot.cc.
+    // entrypoint address - see app_snapshot.cc.
     __ LoadUniqueObject(RCX, initial_stub);
   } else {
     const intptr_t entry_point_offset =
diff --git a/runtime/vm/compiler/runtime_api.cc b/runtime/vm/compiler/runtime_api.cc
index 65efc13..5bc2fff 100644
--- a/runtime/vm/compiler/runtime_api.cc
+++ b/runtime/vm/compiler/runtime_api.cc
@@ -1003,6 +1003,7 @@
 namespace target {
 
 const word Array::kMaxElements = Array_kMaxElements;
+const word Context::kMaxElements = Context_kMaxElements;
 
 }  // namespace target
 }  // namespace compiler
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index beff8e5..85c8181 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -1324,6 +1324,8 @@
   static word InstanceSize(intptr_t length);
   static word InstanceSize();
   FINAL_CLASS();
+
+  static const word kMaxElements;
 };
 
 class Closure : public AllStatic {
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 9cb8a94..6341678 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -58,6 +58,7 @@
 static constexpr dart::compiler::target::word Array_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     65533;
+static constexpr dart::compiler::target::word Context_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 0;
 static constexpr dart::compiler::target::word
@@ -605,6 +606,8 @@
     576460752303423487;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     32765;
+static constexpr dart::compiler::target::word Context_kMaxElements =
+    576460752303423487;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -1160,6 +1163,7 @@
 static constexpr dart::compiler::target::word Array_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     65533;
+static constexpr dart::compiler::target::word Context_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 6;
 static constexpr dart::compiler::target::word
@@ -1704,6 +1708,8 @@
     576460752303423487;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     32765;
+static constexpr dart::compiler::target::word Context_kMaxElements =
+    576460752303423487;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -2232,8 +2238,8 @@
 static constexpr dart::compiler::target::word Code_elements_start_offset = 176;
 static constexpr dart::compiler::target::word Code_element_size = 4;
 static constexpr dart::compiler::target::word Context_elements_start_offset =
-    24;
-static constexpr dart::compiler::target::word Context_element_size = 8;
+    16;
+static constexpr dart::compiler::target::word Context_element_size = 4;
 static constexpr dart::compiler::target::word
     ContextScope_elements_start_offset = 16;
 static constexpr dart::compiler::target::word ContextScope_element_size = 32;
@@ -2260,6 +2266,7 @@
 static constexpr dart::compiler::target::word Array_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     65532;
+static constexpr dart::compiler::target::word Context_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -2342,7 +2349,7 @@
     48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
-static constexpr dart::compiler::target::word Context_parent_offset = 16;
+static constexpr dart::compiler::target::word Context_parent_offset = 12;
 static constexpr dart::compiler::target::word Double_value_offset = 8;
 static constexpr dart::compiler::target::word
     ExternalOneByteString_external_data_offset = 16;
@@ -2696,7 +2703,7 @@
 static constexpr dart::compiler::target::word CodeSourceMap_HeaderSize = 16;
 static constexpr dart::compiler::target::word CompressedStackMaps_HeaderSize =
     16;
-static constexpr dart::compiler::target::word Context_header_size = 24;
+static constexpr dart::compiler::target::word Context_header_size = 16;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
 static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 16;
 static constexpr dart::compiler::target::word
@@ -2786,8 +2793,8 @@
 static constexpr dart::compiler::target::word Code_elements_start_offset = 176;
 static constexpr dart::compiler::target::word Code_element_size = 4;
 static constexpr dart::compiler::target::word Context_elements_start_offset =
-    24;
-static constexpr dart::compiler::target::word Context_element_size = 8;
+    16;
+static constexpr dart::compiler::target::word Context_element_size = 4;
 static constexpr dart::compiler::target::word
     ContextScope_elements_start_offset = 16;
 static constexpr dart::compiler::target::word ContextScope_element_size = 32;
@@ -2814,6 +2821,7 @@
 static constexpr dart::compiler::target::word Array_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     65532;
+static constexpr dart::compiler::target::word Context_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -2896,7 +2904,7 @@
     48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
-static constexpr dart::compiler::target::word Context_parent_offset = 16;
+static constexpr dart::compiler::target::word Context_parent_offset = 12;
 static constexpr dart::compiler::target::word Double_value_offset = 8;
 static constexpr dart::compiler::target::word
     ExternalOneByteString_external_data_offset = 16;
@@ -3251,7 +3259,7 @@
 static constexpr dart::compiler::target::word CodeSourceMap_HeaderSize = 16;
 static constexpr dart::compiler::target::word CompressedStackMaps_HeaderSize =
     16;
-static constexpr dart::compiler::target::word Context_header_size = 24;
+static constexpr dart::compiler::target::word Context_header_size = 16;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
 static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 16;
 static constexpr dart::compiler::target::word
@@ -3368,6 +3376,7 @@
 static constexpr dart::compiler::target::word Array_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     65533;
+static constexpr dart::compiler::target::word Context_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 0;
 static constexpr dart::compiler::target::word
@@ -3909,6 +3918,8 @@
     576460752303423487;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     32765;
+static constexpr dart::compiler::target::word Context_kMaxElements =
+    576460752303423487;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -4458,6 +4469,7 @@
 static constexpr dart::compiler::target::word Array_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     65533;
+static constexpr dart::compiler::target::word Context_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 6;
 static constexpr dart::compiler::target::word
@@ -4996,6 +5008,8 @@
     576460752303423487;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     32765;
+static constexpr dart::compiler::target::word Context_kMaxElements =
+    576460752303423487;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -5518,8 +5532,8 @@
 static constexpr dart::compiler::target::word Code_elements_start_offset = 144;
 static constexpr dart::compiler::target::word Code_element_size = 4;
 static constexpr dart::compiler::target::word Context_elements_start_offset =
-    24;
-static constexpr dart::compiler::target::word Context_element_size = 8;
+    16;
+static constexpr dart::compiler::target::word Context_element_size = 4;
 static constexpr dart::compiler::target::word
     ContextScope_elements_start_offset = 16;
 static constexpr dart::compiler::target::word ContextScope_element_size = 32;
@@ -5546,6 +5560,7 @@
 static constexpr dart::compiler::target::word Array_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     65532;
+static constexpr dart::compiler::target::word Context_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -5626,7 +5641,7 @@
     48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
-static constexpr dart::compiler::target::word Context_parent_offset = 16;
+static constexpr dart::compiler::target::word Context_parent_offset = 12;
 static constexpr dart::compiler::target::word Double_value_offset = 8;
 static constexpr dart::compiler::target::word
     ExternalOneByteString_external_data_offset = 16;
@@ -5979,7 +5994,7 @@
 static constexpr dart::compiler::target::word CodeSourceMap_HeaderSize = 16;
 static constexpr dart::compiler::target::word CompressedStackMaps_HeaderSize =
     16;
-static constexpr dart::compiler::target::word Context_header_size = 24;
+static constexpr dart::compiler::target::word Context_header_size = 16;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
 static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 16;
 static constexpr dart::compiler::target::word
@@ -6066,8 +6081,8 @@
 static constexpr dart::compiler::target::word Code_elements_start_offset = 144;
 static constexpr dart::compiler::target::word Code_element_size = 4;
 static constexpr dart::compiler::target::word Context_elements_start_offset =
-    24;
-static constexpr dart::compiler::target::word Context_element_size = 8;
+    16;
+static constexpr dart::compiler::target::word Context_element_size = 4;
 static constexpr dart::compiler::target::word
     ContextScope_elements_start_offset = 16;
 static constexpr dart::compiler::target::word ContextScope_element_size = 32;
@@ -6094,6 +6109,7 @@
 static constexpr dart::compiler::target::word Array_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word Array_kMaxNewSpaceElements =
     65532;
+static constexpr dart::compiler::target::word Context_kMaxElements = 268435455;
 static constexpr dart::compiler::target::word
     Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -6174,7 +6190,7 @@
     48;
 static constexpr dart::compiler::target::word Code_owner_offset = 56;
 static constexpr dart::compiler::target::word Context_num_variables_offset = 8;
-static constexpr dart::compiler::target::word Context_parent_offset = 16;
+static constexpr dart::compiler::target::word Context_parent_offset = 12;
 static constexpr dart::compiler::target::word Double_value_offset = 8;
 static constexpr dart::compiler::target::word
     ExternalOneByteString_external_data_offset = 16;
@@ -6528,7 +6544,7 @@
 static constexpr dart::compiler::target::word CodeSourceMap_HeaderSize = 16;
 static constexpr dart::compiler::target::word CompressedStackMaps_HeaderSize =
     16;
-static constexpr dart::compiler::target::word Context_header_size = 24;
+static constexpr dart::compiler::target::word Context_header_size = 16;
 static constexpr dart::compiler::target::word Double_InstanceSize = 16;
 static constexpr dart::compiler::target::word DynamicLibrary_InstanceSize = 16;
 static constexpr dart::compiler::target::word
@@ -6655,6 +6671,8 @@
     268435455;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     65533;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    268435455;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 0;
 static constexpr dart::compiler::target::word
@@ -7267,6 +7285,8 @@
     576460752303423487;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     32765;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    576460752303423487;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -7886,6 +7906,8 @@
     576460752303423487;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     32765;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    576460752303423487;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -8470,8 +8492,8 @@
     152;
 static constexpr dart::compiler::target::word AOT_Code_element_size = 4;
 static constexpr dart::compiler::target::word
-    AOT_Context_elements_start_offset = 24;
-static constexpr dart::compiler::target::word AOT_Context_element_size = 8;
+    AOT_Context_elements_start_offset = 16;
+static constexpr dart::compiler::target::word AOT_Context_element_size = 4;
 static constexpr dart::compiler::target::word
     AOT_ContextScope_elements_start_offset = 16;
 static constexpr dart::compiler::target::word AOT_ContextScope_element_size =
@@ -8503,6 +8525,8 @@
     268435455;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     65532;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    268435455;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -8589,7 +8613,7 @@
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
-static constexpr dart::compiler::target::word AOT_Context_parent_offset = 16;
+static constexpr dart::compiler::target::word AOT_Context_parent_offset = 12;
 static constexpr dart::compiler::target::word AOT_Double_value_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ExternalOneByteString_external_data_offset = 16;
@@ -8982,7 +9006,7 @@
 static constexpr dart::compiler::target::word AOT_CodeSourceMap_HeaderSize = 16;
 static constexpr dart::compiler::target::word
     AOT_CompressedStackMaps_HeaderSize = 16;
-static constexpr dart::compiler::target::word AOT_Context_header_size = 24;
+static constexpr dart::compiler::target::word AOT_Context_header_size = 16;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
     16;
@@ -9085,8 +9109,8 @@
     152;
 static constexpr dart::compiler::target::word AOT_Code_element_size = 4;
 static constexpr dart::compiler::target::word
-    AOT_Context_elements_start_offset = 24;
-static constexpr dart::compiler::target::word AOT_Context_element_size = 8;
+    AOT_Context_elements_start_offset = 16;
+static constexpr dart::compiler::target::word AOT_Context_element_size = 4;
 static constexpr dart::compiler::target::word
     AOT_ContextScope_elements_start_offset = 16;
 static constexpr dart::compiler::target::word AOT_ContextScope_element_size =
@@ -9118,6 +9142,8 @@
     268435455;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     65532;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    268435455;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -9204,7 +9230,7 @@
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
-static constexpr dart::compiler::target::word AOT_Context_parent_offset = 16;
+static constexpr dart::compiler::target::word AOT_Context_parent_offset = 12;
 static constexpr dart::compiler::target::word AOT_Double_value_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ExternalOneByteString_external_data_offset = 16;
@@ -9598,7 +9624,7 @@
 static constexpr dart::compiler::target::word AOT_CodeSourceMap_HeaderSize = 16;
 static constexpr dart::compiler::target::word
     AOT_CompressedStackMaps_HeaderSize = 16;
-static constexpr dart::compiler::target::word AOT_Context_header_size = 24;
+static constexpr dart::compiler::target::word AOT_Context_header_size = 16;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
     16;
@@ -9733,6 +9759,8 @@
     268435455;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     65533;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    268435455;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 0;
 static constexpr dart::compiler::target::word
@@ -10338,6 +10366,8 @@
     576460752303423487;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     32765;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    576460752303423487;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -10950,6 +10980,8 @@
     576460752303423487;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     32765;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    576460752303423487;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -11527,8 +11559,8 @@
     120;
 static constexpr dart::compiler::target::word AOT_Code_element_size = 4;
 static constexpr dart::compiler::target::word
-    AOT_Context_elements_start_offset = 24;
-static constexpr dart::compiler::target::word AOT_Context_element_size = 8;
+    AOT_Context_elements_start_offset = 16;
+static constexpr dart::compiler::target::word AOT_Context_element_size = 4;
 static constexpr dart::compiler::target::word
     AOT_ContextScope_elements_start_offset = 16;
 static constexpr dart::compiler::target::word AOT_ContextScope_element_size =
@@ -11560,6 +11592,8 @@
     268435455;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     65532;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    268435455;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -11644,7 +11678,7 @@
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
-static constexpr dart::compiler::target::word AOT_Context_parent_offset = 16;
+static constexpr dart::compiler::target::word AOT_Context_parent_offset = 12;
 static constexpr dart::compiler::target::word AOT_Double_value_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ExternalOneByteString_external_data_offset = 16;
@@ -12035,7 +12069,7 @@
 static constexpr dart::compiler::target::word AOT_CodeSourceMap_HeaderSize = 16;
 static constexpr dart::compiler::target::word
     AOT_CompressedStackMaps_HeaderSize = 16;
-static constexpr dart::compiler::target::word AOT_Context_header_size = 24;
+static constexpr dart::compiler::target::word AOT_Context_header_size = 16;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
     16;
@@ -12135,8 +12169,8 @@
     120;
 static constexpr dart::compiler::target::word AOT_Code_element_size = 4;
 static constexpr dart::compiler::target::word
-    AOT_Context_elements_start_offset = 24;
-static constexpr dart::compiler::target::word AOT_Context_element_size = 8;
+    AOT_Context_elements_start_offset = 16;
+static constexpr dart::compiler::target::word AOT_Context_element_size = 4;
 static constexpr dart::compiler::target::word
     AOT_ContextScope_elements_start_offset = 16;
 static constexpr dart::compiler::target::word AOT_ContextScope_element_size =
@@ -12168,6 +12202,8 @@
     268435455;
 static constexpr dart::compiler::target::word AOT_Array_kMaxNewSpaceElements =
     65532;
+static constexpr dart::compiler::target::word AOT_Context_kMaxElements =
+    268435455;
 static constexpr dart::compiler::target::word
     AOT_Instructions_kMonomorphicEntryOffsetJIT = 8;
 static constexpr dart::compiler::target::word
@@ -12252,7 +12288,7 @@
 static constexpr dart::compiler::target::word AOT_Code_owner_offset = 56;
 static constexpr dart::compiler::target::word AOT_Context_num_variables_offset =
     8;
-static constexpr dart::compiler::target::word AOT_Context_parent_offset = 16;
+static constexpr dart::compiler::target::word AOT_Context_parent_offset = 12;
 static constexpr dart::compiler::target::word AOT_Double_value_offset = 8;
 static constexpr dart::compiler::target::word
     AOT_ExternalOneByteString_external_data_offset = 16;
@@ -12644,7 +12680,7 @@
 static constexpr dart::compiler::target::word AOT_CodeSourceMap_HeaderSize = 16;
 static constexpr dart::compiler::target::word
     AOT_CompressedStackMaps_HeaderSize = 16;
-static constexpr dart::compiler::target::word AOT_Context_header_size = 24;
+static constexpr dart::compiler::target::word AOT_Context_header_size = 16;
 static constexpr dart::compiler::target::word AOT_Double_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_DynamicLibrary_InstanceSize =
     16;
diff --git a/runtime/vm/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index 2e97ede..510ef0e 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -68,6 +68,7 @@
   ARRAY_SIZEOF(TwoByteString, InstanceSize, element_offset)                    \
   CONSTANT(Array, kMaxElements)                                                \
   CONSTANT(Array, kMaxNewSpaceElements)                                        \
+  CONSTANT(Context, kMaxElements)                                              \
   CONSTANT(Instructions, kMonomorphicEntryOffsetJIT)                           \
   CONSTANT(Instructions, kPolymorphicEntryOffsetJIT)                           \
   CONSTANT(Instructions, kMonomorphicEntryOffsetAOT)                           \
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index 128d968..9af7272 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -488,10 +488,11 @@
                           R0,  // instance
                           R1,  // end address
                           R2, R3);
-      __ ldr(R1, Address(THR, target::Thread::object_null_offset()));
-      __ str(R1, FieldAddress(R0, target::Context::parent_offset()));
+      __ StoreCompressedIntoObjectNoBarrier(
+          R0, FieldAddress(R0, target::Context::parent_offset()), NULL_REG);
       __ LoadImmediate(R1, 1);
-      __ str(R1, FieldAddress(R0, target::Context::num_variables_offset()));
+      __ str(R1, FieldAddress(R0, target::Context::num_variables_offset()),
+             kFourBytes);
       __ b(&done);
     }
 
@@ -511,10 +512,11 @@
   // Store receiver in context
   __ ldr(AllocateClosureABI::kScratchReg,
          Address(FP, target::kWordSize * kReceiverOffset));
-  __ StoreIntoObject(AllocateClosureABI::kContextReg,
-                     FieldAddress(AllocateClosureABI::kContextReg,
-                                  target::Context::variable_offset(0)),
-                     AllocateClosureABI::kScratchReg);
+  __ StoreCompressedIntoObject(
+      AllocateClosureABI::kContextReg,
+      FieldAddress(AllocateClosureABI::kContextReg,
+                   target::Context::variable_offset(0)),
+      AllocateClosureABI::kScratchReg);
 
   // Pop function before pushing context.
   __ Pop(AllocateClosureABI::kFunctionReg);
@@ -1487,7 +1489,7 @@
       target::Context::header_size() +
       target::ObjectAlignment::kObjectAlignment - 1;
   __ LoadImmediate(R2, fixed_size_plus_alignment_padding);
-  __ add(R2, R2, Operand(R1, LSL, 3));
+  __ add(R2, R2, Operand(R1, LSL, kCompressedWordSizeLog2));
   ASSERT(kSmiTagShift == 1);
   __ andi(R2, R2, Immediate(~(target::ObjectAlignment::kObjectAlignment - 1)));
 
@@ -1539,7 +1541,8 @@
   // Setup up number of context variables field.
   // R0: new object.
   // R1: number of context variables as integer value (not object).
-  __ StoreFieldToOffset(R1, R0, target::Context::num_variables_offset());
+  __ StoreFieldToOffset(R1, R0, target::Context::num_variables_offset(),
+                        kFourBytes);
 }
 
 // Called for inline allocation of contexts.
@@ -1558,13 +1561,12 @@
     // Setup the parent field.
     // R0: new object.
     // R1: number of context variables.
-    __ LoadObject(R2, NullObject());
-    __ StoreFieldToOffset(R2, R0, target::Context::parent_offset());
+    __ StoreCompressedIntoObjectOffset(R0, target::Context::parent_offset(),
+                                       NULL_REG);
 
     // Initialize the context variables.
     // R0: new object.
     // R1: number of context variables.
-    // R2: raw null.
     {
       Label loop, done;
       __ AddImmediate(R3, R0,
@@ -1572,7 +1574,7 @@
       __ Bind(&loop);
       __ subs(R1, R1, Operand(1));
       __ b(&done, MI);
-      __ str(R2, Address(R3, R1, UXTX, Address::Scaled));
+      __ str(NULL_REG, Address(R3, R1, UXTX, Address::Scaled), kObjectBytes);
       __ b(&loop, NE);  // Loop if R1 not zero.
       __ Bind(&done);
     }
@@ -1626,10 +1628,10 @@
     GenerateAllocateContextSpaceStub(assembler, &slow_case);
 
     // Load parent in the existing context.
-    __ ldr(R3, FieldAddress(R5, target::Context::parent_offset()));
+    __ LoadCompressed(R3, FieldAddress(R5, target::Context::parent_offset()));
     // Setup the parent field.
     // R0: new context.
-    __ StoreIntoObjectNoBarrier(
+    __ StoreCompressedIntoObjectNoBarrier(
         R0, FieldAddress(R0, target::Context::parent_offset()), R3);
 
     // Clone the context variables.
@@ -1648,8 +1650,8 @@
       __ subs(R1, R1, Operand(1));
       __ b(&done, MI);
 
-      __ ldr(R5, Address(R4, R1, UXTX, Address::Scaled));
-      __ str(R5, Address(R3, R1, UXTX, Address::Scaled));
+      __ ldr(R5, Address(R4, R1, UXTX, Address::Scaled), kObjectBytes);
+      __ str(R5, Address(R3, R1, UXTX, Address::Scaled), kObjectBytes);
       __ b(&loop, NE);  // Loop if R1 not zero.
 
       __ Bind(&done);
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index 096d3c7..4017ed4 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -434,8 +434,9 @@
                           RSI,  // end address
                           RDI);
       __ movq(RSI, Address(THR, target::Thread::object_null_offset()));
-      __ movq(FieldAddress(RAX, target::Context::parent_offset()), RSI);
-      __ movq(FieldAddress(RAX, target::Context::num_variables_offset()),
+      __ StoreCompressedIntoObjectNoBarrier(
+          RAX, FieldAddress(RAX, target::Context::parent_offset()), RSI);
+      __ movl(FieldAddress(RAX, target::Context::num_variables_offset()),
               Immediate(1));
       __ jmp(&done);
     }
@@ -455,10 +456,11 @@
   // Store receiver in context
   __ movq(AllocateClosureABI::kScratchReg,
           Address(RBP, target::kWordSize * kReceiverOffsetInWords));
-  __ StoreIntoObject(AllocateClosureABI::kContextReg,
-                     FieldAddress(AllocateClosureABI::kContextReg,
-                                  target::Context::variable_offset(0)),
-                     AllocateClosureABI::kScratchReg);
+  __ StoreCompressedIntoObject(
+      AllocateClosureABI::kContextReg,
+      FieldAddress(AllocateClosureABI::kContextReg,
+                   target::Context::variable_offset(0)),
+      AllocateClosureABI::kScratchReg);
 
   // Pop function.
   __ popq(AllocateClosureABI::kFunctionReg);
@@ -1420,7 +1422,8 @@
   intptr_t fixed_size_plus_alignment_padding =
       (target::Context::header_size() +
        target::ObjectAlignment::kObjectAlignment - 1);
-  __ leaq(R13, Address(R10, TIMES_8, fixed_size_plus_alignment_padding));
+  __ leaq(R13, Address(R10, TIMES_COMPRESSED_WORD_SIZE,
+                       fixed_size_plus_alignment_padding));
   __ andq(R13, Immediate(-target::ObjectAlignment::kObjectAlignment));
 
   // Check for allocation tracing.
@@ -1454,7 +1457,8 @@
   // R10: number of context variables.
   {
     Label size_tag_overflow, done;
-    __ leaq(R13, Address(R10, TIMES_8, fixed_size_plus_alignment_padding));
+    __ leaq(R13, Address(R10, TIMES_COMPRESSED_WORD_SIZE,
+                         fixed_size_plus_alignment_padding));
     __ andq(R13, Immediate(-target::ObjectAlignment::kObjectAlignment));
     __ cmpq(R13, Immediate(target::UntaggedObject::kSizeTagMaxSizeTag));
     __ j(ABOVE, &size_tag_overflow, Assembler::kNearJump);
@@ -1478,7 +1482,7 @@
   // Setup up number of context variables field.
   // RAX: new object.
   // R10: number of context variables as integer value (not object).
-  __ movq(FieldAddress(RAX, target::Context::num_variables_offset()), R10);
+  __ movl(FieldAddress(RAX, target::Context::num_variables_offset()), R10);
 }
 
 // Called for inline allocation of contexts.
@@ -1499,7 +1503,7 @@
     // RAX: new object.
     // R9: Parent object, initialised to null.
     // No generational barrier needed, since we are storing null.
-    __ StoreIntoObjectNoBarrier(
+    __ StoreCompressedIntoObjectNoBarrier(
         RAX, FieldAddress(RAX, target::Context::parent_offset()), R9);
 
     // Initialize the context variables.
@@ -1517,7 +1521,8 @@
       __ Bind(&loop);
       __ decq(R10);
       // No generational barrier needed, since we are storing null.
-      __ StoreIntoObjectNoBarrier(RAX, Address(R13, R10, TIMES_8, 0), R9);
+      __ StoreCompressedIntoObjectNoBarrier(
+          RAX, Address(R13, R10, TIMES_COMPRESSED_WORD_SIZE, 0), R9);
       __ Bind(&entry);
       __ cmpq(R10, Immediate(0));
       __ j(NOT_EQUAL, &loop, Assembler::kNearJump);
@@ -1567,11 +1572,11 @@
     GenerateAllocateContextSpaceStub(assembler, &slow_case);
 
     // Load parent in the existing context.
-    __ movq(R13, FieldAddress(R9, target::Context::parent_offset()));
+    __ LoadCompressed(R13, FieldAddress(R9, target::Context::parent_offset()));
     // Setup the parent field.
     // RAX: new object.
     // R9: Old parent object.
-    __ StoreIntoObjectNoBarrier(
+    __ StoreCompressedIntoObjectNoBarrier(
         RAX, FieldAddress(RAX, target::Context::parent_offset()), R13);
 
     // Clone the context variables.
@@ -1582,11 +1587,12 @@
       __ jmp(&entry, Assembler::kNearJump);
       __ Bind(&loop);
       __ decq(R10);
-      __ movq(R13, FieldAddress(R9, R10, TIMES_8,
-                                target::Context::variable_offset(0)));
-      __ StoreIntoObjectNoBarrier(
+      __ LoadCompressed(R13, FieldAddress(R9, R10, TIMES_COMPRESSED_WORD_SIZE,
+                                          target::Context::variable_offset(0)));
+      __ StoreCompressedIntoObjectNoBarrier(
           RAX,
-          FieldAddress(RAX, R10, TIMES_8, target::Context::variable_offset(0)),
+          FieldAddress(RAX, R10, TIMES_COMPRESSED_WORD_SIZE,
+                       target::Context::variable_offset(0)),
           R13);
       __ Bind(&entry);
       __ cmpq(R10, Immediate(0));
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index fda1251..cd3ca635 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -7,7 +7,7 @@
 
 #include "vm/dart.h"
 
-#include "vm/clustered_snapshot.h"
+#include "vm/app_snapshot.h"
 #include "vm/code_observers.h"
 #include "vm/compiler/runtime_offsets_extracted.h"
 #include "vm/compiler/runtime_offsets_list.h"
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 94c0f77..7504a27 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -11,8 +11,8 @@
 #include "lib/stacktrace.h"
 #include "platform/assert.h"
 #include "platform/unicode.h"
+#include "vm/app_snapshot.h"
 #include "vm/class_finalizer.h"
-#include "vm/clustered_snapshot.h"
 #include "vm/compiler/jit/compiler.h"
 #include "vm/dart.h"
 #include "vm/dart_api_impl.h"
diff --git a/runtime/vm/deferred_objects.cc b/runtime/vm/deferred_objects.cc
index 78b8631..b64d7dd 100644
--- a/runtime/vm/deferred_objects.cc
+++ b/runtime/vm/deferred_objects.cc
@@ -273,7 +273,8 @@
 }
 
 static intptr_t ToContextIndex(intptr_t offset_in_bytes) {
-  intptr_t result = (offset_in_bytes - Context::variable_offset(0)) / kWordSize;
+  intptr_t result = (offset_in_bytes - Context::variable_offset(0)) /
+                    Context::kBytesPerElement;
   ASSERT(result >= 0);
   return result;
 }
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index b68fe85..c76665a 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -951,7 +951,7 @@
   kNullable = 0,
   kNonNullable = 1,
   kLegacy = 2,
-  // Adjust kNullabilityBitSize in clustered_snapshot.cc if adding new values.
+  // Adjust kNullabilityBitSize in app_snapshot.cc if adding new values.
 };
 
 // Equality kind between types.
@@ -6821,7 +6821,7 @@
 
   void Dump(int indent = 0) const;
 
-  static const intptr_t kBytesPerElement = kWordSize;
+  static const intptr_t kBytesPerElement = kCompressedWordSize;
   static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
 
   static const intptr_t kAwaitJumpVarIndex = 0;
@@ -6838,11 +6838,11 @@
 
   static intptr_t variable_offset(intptr_t context_index) {
     return OFFSET_OF_RETURNED_VALUE(UntaggedContext, data) +
-           (kWordSize * context_index);
+           (kBytesPerElement * context_index);
   }
 
   static bool IsValidLength(intptr_t len) {
-    return 0 <= len && len <= compiler::target::Array::kMaxElements;
+    return 0 <= len && len <= compiler::target::Context::kMaxElements;
   }
 
   static intptr_t InstanceSize() {
diff --git a/runtime/vm/object_graph_copy.cc b/runtime/vm/object_graph_copy.cc
index 86d9394..2853b37 100644
--- a/runtime/vm/object_graph_copy.cc
+++ b/runtime/vm/object_graph_copy.cc
@@ -245,9 +245,7 @@
 DART_FORCE_INLINE
 ObjectPtr AllocateObject(intptr_t cid, intptr_t size) {
 #if defined(DART_COMPRESSED_POINTERS)
-  // TODO(rmacnak): Can be changed unconditionally to `true` once Contexts
-  // are compressed.
-  const bool compressed = cid != kContextCid;
+  const bool compressed = true;
 #else
   const bool compressed = false;
 #endif
@@ -664,13 +662,13 @@
     }
   }
 
-  void ForwardContextPointers(intptr_t context_length,
-                              ObjectPtr src,
-                              ObjectPtr dst,
-                              intptr_t offset,
-                              intptr_t end_offset) {
-    for (; offset < end_offset; offset += kWordSize) {
-      ForwardPointer(src, dst, offset);
+  void ForwardCompressedContextPointers(intptr_t context_length,
+                                        ObjectPtr src,
+                                        ObjectPtr dst,
+                                        intptr_t offset,
+                                        intptr_t end_offset) {
+    for (; offset < end_offset; offset += kCompressedWordSize) {
+      ForwardCompressedPointer(src, dst, offset);
     }
   }
 
@@ -705,36 +703,6 @@
     StoreCompressedPointerNoBarrier(dst, offset, to);
   }
 
-  // TODO(rmacnak): Can be removed if Contexts are compressed.
-  DART_FORCE_INLINE
-  void ForwardPointer(ObjectPtr src, ObjectPtr dst, intptr_t offset) {
-    auto value = LoadPointer(src, offset);
-    if (!value.IsHeapObject()) {
-      StorePointerNoBarrier(dst, offset, value);
-      return;
-    }
-    const uword tags = TagsFromUntaggedObject(value.untag());
-    if (CanShareObject(value, tags)) {
-      StorePointerNoBarrier(dst, offset, value);
-      return;
-    }
-
-    ObjectPtr existing_to = fast_forward_map_.ForwardedObject(value);
-    if (existing_to != Marker()) {
-      StorePointerNoBarrier(dst, offset, existing_to);
-      return;
-    }
-
-    if (UNLIKELY(!CanCopyObject(tags, value))) {
-      ASSERT(exception_msg_ != nullptr);
-      StorePointerNoBarrier(dst, offset, Object::null());
-      return;
-    }
-
-    auto to = Forward(tags, value);
-    StorePointerNoBarrier(dst, offset, to);
-  }
-
   ObjectPtr Forward(uword tags, ObjectPtr from) {
     const intptr_t header_size = UntaggedObject::SizeTag::decode(tags);
     const auto cid = UntaggedObject::ClassIdTag::decode(tags);
@@ -859,13 +827,13 @@
     }
   }
 
-  void ForwardContextPointers(intptr_t context_length,
-                              const Object& src,
-                              const Object& dst,
-                              intptr_t offset,
-                              intptr_t end_offset) {
-    for (; offset < end_offset; offset += kWordSize) {
-      ForwardPointer(src, dst, offset);
+  void ForwardCompressedContextPointers(intptr_t context_length,
+                                        const Object& src,
+                                        const Object& dst,
+                                        intptr_t offset,
+                                        intptr_t end_offset) {
+    for (; offset < end_offset; offset += kCompressedWordSize) {
+      ForwardCompressedPointer(src, dst, offset);
     }
   }
 
@@ -939,36 +907,6 @@
     StoreCompressedPointerBarrier(dst.ptr(), offset, tmp_.ptr());
   }
 
-  // TODO(rmacnak): Can be removed if Contexts are compressed.
-  DART_FORCE_INLINE
-  void ForwardPointer(const Object& src, const Object& dst, intptr_t offset) {
-    auto value = LoadPointer(src.ptr(), offset);
-    if (!value.IsHeapObject()) {
-      StorePointerNoBarrier(dst.ptr(), offset, value);
-      return;
-    }
-    const uword tags = TagsFromUntaggedObject(value.untag());
-    if (CanShareObject(value, tags)) {
-      StorePointerBarrier(dst.ptr(), offset, value);
-      return;
-    }
-
-    ObjectPtr existing_to = slow_forward_map_.ForwardedObject(value);
-    if (existing_to != Marker()) {
-      StorePointerBarrier(dst.ptr(), offset, existing_to);
-      return;
-    }
-
-    if (UNLIKELY(!CanCopyObject(tags, value))) {
-      ASSERT(exception_msg_ != nullptr);
-      StorePointerNoBarrier(dst.ptr(), offset, Object::null());
-      return;
-    }
-
-    tmp_ = value;
-    tmp_ = Forward(tags, tmp_);  // Only this can cause allocation.
-    StorePointerBarrier(dst.ptr(), offset, tmp_.ptr());
-  }
   ObjectPtr Forward(uword tags, const Object& from) {
     const intptr_t cid = UntaggedObject::ClassIdTag::decode(tags);
     intptr_t size = UntaggedObject::SizeTag::decode(tags);
@@ -1161,12 +1099,11 @@
 
     UntagContext(to)->num_variables_ = UntagContext(from)->num_variables_;
 
-    // TODO(rmacnak): Should use ForwardCompressedPointer once contexts are
-    // compressed.
-    Base::ForwardPointer(from, to, OFFSET_OF(UntaggedContext, parent_));
-    Base::ForwardContextPointers(
+    Base::ForwardCompressedPointer(from, to,
+                                   OFFSET_OF(UntaggedContext, parent_));
+    Base::ForwardCompressedContextPointers(
         length, from, to, Context::variable_offset(0),
-        Context::variable_offset(0) + kWordSize * length);
+        Context::variable_offset(0) + Context::kBytesPerElement * length);
   }
 
   void CopyArray(typename Types::Array from, typename Types::Array to) {
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 7a184af..9e4013f 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -567,7 +567,7 @@
                             Smi::Value(raw_obj->untag()->length()))
 VARIABLE_COMPRESSED_VISITOR(LocalVarDescriptors, raw_obj->untag()->num_entries_)
 VARIABLE_COMPRESSED_VISITOR(ExceptionHandlers, raw_obj->untag()->num_entries_)
-VARIABLE_VISITOR(Context, raw_obj->untag()->num_variables_)
+VARIABLE_COMPRESSED_VISITOR(Context, raw_obj->untag()->num_variables_)
 VARIABLE_COMPRESSED_VISITOR(Array, Smi::Value(raw_obj->untag()->length()))
 VARIABLE_COMPRESSED_VISITOR(
     TypedData,
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 98f481a..ae7d7a9 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -2170,10 +2170,10 @@
 
   int32_t num_variables_;
 
-  POINTER_FIELD(ContextPtr, parent)
+  COMPRESSED_POINTER_FIELD(ContextPtr, parent)
   VISIT_FROM(parent)
   // Variable length data follows here.
-  VARIABLE_POINTER_FIELDS(ObjectPtr, element, data)
+  COMPRESSED_VARIABLE_POINTER_FIELDS(ObjectPtr, element, data)
 
   friend class Object;
   friend void UpdateLengthField(intptr_t,
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index f9b3cdc..211d7e1 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -42,20 +42,4 @@
   return snapshot;
 }
 
-#if 0
-void SnapshotReader::RunDelayedTypePostprocessing() {
-  if (types_to_postprocess_.IsNull()) {
-    return;
-  }
-
-  AbstractType& type = AbstractType::Handle();
-  Code& code = Code::Handle();
-  for (intptr_t i = 0; i < types_to_postprocess_.Length(); ++i) {
-    type ^= types_to_postprocess_.At(i);
-    code = TypeTestingStubGenerator::DefaultCodeForType(type);
-    type.InitializeTypeTestingStubNonAtomic(code);
-  }
-}
-#endif
-
 }  // namespace dart
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index d42c2da..1fb886c 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -7,8 +7,8 @@
 #include "include/dart_tools_api.h"
 #include "platform/assert.h"
 #include "platform/unicode.h"
+#include "vm/app_snapshot.h"
 #include "vm/class_finalizer.h"
-#include "vm/clustered_snapshot.h"
 #include "vm/dart_api_impl.h"
 #include "vm/dart_api_message.h"
 #include "vm/dart_api_state.h"
diff --git a/runtime/vm/stub_code.cc b/runtime/vm/stub_code.cc
index 90576ec..1cb2a07 100644
--- a/runtime/vm/stub_code.cc
+++ b/runtime/vm/stub_code.cc
@@ -6,7 +6,7 @@
 
 #include "platform/assert.h"
 #include "platform/globals.h"
-#include "vm/clustered_snapshot.h"
+#include "vm/app_snapshot.h"
 #include "vm/compiler/assembler/disassembler.h"
 #include "vm/flags.h"
 #include "vm/heap/safepoint.h"
diff --git a/runtime/vm/vm_sources.gni b/runtime/vm/vm_sources.gni
index 2f21ac1..f17cc64 100644
--- a/runtime/vm/vm_sources.gni
+++ b/runtime/vm/vm_sources.gni
@@ -7,6 +7,8 @@
 vm_sources = [
   "allocation.cc",
   "allocation.h",
+  "app_snapshot.cc",
+  "app_snapshot.h",
   "base64.cc",
   "base64.h",
   "base_isolate.h",
@@ -30,8 +32,6 @@
   "class_table.h",
   "closure_functions_cache.cc",
   "closure_functions_cache.h",
-  "clustered_snapshot.cc",
-  "clustered_snapshot.h",
   "code_comments.cc",
   "code_comments.h",
   "code_descriptors.cc",
diff --git a/sdk/lib/core/int.dart b/sdk/lib/core/int.dart
index 9bf2671..f8f5a1b 100644
--- a/sdk/lib/core/int.dart
+++ b/sdk/lib/core/int.dart
@@ -112,8 +112,6 @@
 
   /// Bitwise unsigned right shift by [shiftAmount] bits.
   ///
-  /// NOT IMPLEMENTED YET.
-  ///
   /// The least significant [shiftAmount] bits are dropped,
   /// the remaining bits (if any) are shifted down,
   /// and zero-bits are shifted in as the new most significant bits.
diff --git a/tests/standalone/io/web_socket_test.dart b/tests/standalone/io/web_socket_test.dart
index f5927ba..8f40c32 100644
--- a/tests/standalone/io/web_socket_test.dart
+++ b/tests/standalone/io/web_socket_test.dart
@@ -6,6 +6,10 @@
 // VMOptions=--short_socket_read
 // VMOptions=--short_socket_write
 // VMOptions=--short_socket_read --short_socket_write
+//
+// OtherResources=certificates/server_chain.pem
+// OtherResources=certificates/server_key.pem
+// OtherResources=certificates/trusted_certs.pem
 
 import "dart:async";
 import "dart:convert";
diff --git a/tests/standalone_2/io/web_socket_test.dart b/tests/standalone_2/io/web_socket_test.dart
index 5d7f425..6de369f 100644
--- a/tests/standalone_2/io/web_socket_test.dart
+++ b/tests/standalone_2/io/web_socket_test.dart
@@ -6,6 +6,10 @@
 // VMOptions=--short_socket_read
 // VMOptions=--short_socket_write
 // VMOptions=--short_socket_read --short_socket_write
+//
+// OtherResources=certificates/server_chain.pem
+// OtherResources=certificates/server_key.pem
+// OtherResources=certificates/trusted_certs.pem
 
 // @dart = 2.9
 
diff --git a/tools/VERSION b/tools/VERSION
index 560e5c9..8c0370f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 112
+PRERELEASE 113
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/make_version.py b/tools/make_version.py
index bf2c9c5..79ac27f 100755
--- a/tools/make_version.py
+++ b/tools/make_version.py
@@ -17,7 +17,7 @@
 # backwards-compatible.
 VM_SNAPSHOT_FILES = [
     # Header files.
-    'clustered_snapshot.h',
+    'app_snapshot.h',
     'datastream.h',
     'image_snapshot.h',
     'object.h',
@@ -25,7 +25,7 @@
     'snapshot.h',
     'symbols.h',
     # Source files.
-    'clustered_snapshot.cc',
+    'app_snapshot.cc',
     'dart.cc',
     'dart_api_impl.cc',
     'image_snapshot.cc',