blob: efc131548c61020f65f2cd8d1cdd982affed58cc [file]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// 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 '../experiments/flags.dart';
import '../scanner/abstract_scanner.dart' show ScannerConfiguration;
/// Interface for determining which features are enabled during parsing.
abstract class ExperimentalFeatures {
bool isExperimentEnabled(ExperimentalFlag flag);
}
/// Implementation of [ExperimentalFeatures] that uses the enables the
/// experiments currently enabled by default.
///
/// This should only be used for testing. For actual parsing, the enabled
/// features should be determined by language version and enabled experiments.
class DefaultExperimentalFeatures implements ExperimentalFeatures {
const DefaultExperimentalFeatures();
@override
bool isExperimentEnabled(ExperimentalFlag flag) => flag.isEnabledByDefault;
}
extension ExperimentalFeaturesExtension on ExperimentalFeatures {
ScannerConfiguration buildScannerConfiguration() {
return new ScannerConfiguration(
enableTripleShift: isExperimentEnabled(ExperimentalFlag.tripleShift),
enableAugmentations: isExperimentEnabled(ExperimentalFlag.augmentations),
);
}
}