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',
