[VM] Add experimental flags to gen_kernel.

Bug: https://github.com/dart-lang/sdk/issues/35602
Change-Id: I41cc7fcfe2ec520d4b6cf1d8e9535c618b09637d
Reviewed-on: https://dart-review.googlesource.com/c/90540
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Liam Appelbe <liama@google.com>
diff --git a/pkg/front_end/lib/src/api_unstable/vm.dart b/pkg/front_end/lib/src/api_unstable/vm.dart
index 6564a5b..5d7cd8c 100644
--- a/pkg/front_end/lib/src/api_unstable/vm.dart
+++ b/pkg/front_end/lib/src/api_unstable/vm.dart
@@ -2,7 +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.
 
-export '../api_prototype/compiler_options.dart' show CompilerOptions;
+export '../api_prototype/compiler_options.dart'
+    show CompilerOptions, parseExperimentalFlags;
 
 export '../api_prototype/diagnostic_message.dart'
     show DiagnosticMessage, DiagnosticMessageHandler, getMessageUri;
diff --git a/pkg/vm/lib/kernel_front_end.dart b/pkg/vm/lib/kernel_front_end.dart
index e48e30b..6b50c79 100644
--- a/pkg/vm/lib/kernel_front_end.dart
+++ b/pkg/vm/lib/kernel_front_end.dart
@@ -27,6 +27,7 @@
         StandardFileSystem,
         getMessageUri,
         kernelForProgram,
+        parseExperimentalFlags,
         printDiagnosticMessage;
 
 import 'package:kernel/type_environment.dart' show TypeEnvironment;
@@ -107,6 +108,8 @@
       help: 'Drop AST for members with bytecode', defaultsTo: false);
   args.addFlag('use-future-bytecode-format',
       help: 'Generate bytecode in the bleeding edge format', defaultsTo: false);
+  args.addMultiOption('enable-experiment',
+      help: 'Comma separated list of experimental features to enable.');
 }
 
 /// Create ArgParser and populate it with options consumed by [runCompiler].
@@ -148,6 +151,7 @@
   final bool enableAsserts = options['enable-asserts'];
   final bool enableConstantEvaluation = options['enable-constant-evaluation'];
   final bool splitOutputByPackages = options['split-output-by-packages'];
+  final List<String> experimentalFlags = options['enable-experiment'];
   final Map<String, String> environmentDefines = {};
 
   if (!parseCommandLineDefines(options['define'], environmentDefines, usage)) {
@@ -187,6 +191,7 @@
     ..fileSystem = fileSystem
     ..linkedDependencies = linkedDependencies
     ..packagesFileUri = packagesUri
+    ..experimentalFlags = parseExperimentalFlags(experimentalFlags, print)
     ..onDiagnostic = (DiagnosticMessage m) {
       errorDetector(m);
     }