Kernel driver: pass options and use it for its compiler context

This ensures we don't accidentally override options (e.g. strongMode was being
overriden accidentally as a result).

R=scheglov@google.com

Review-Url: https://codereview.chromium.org/2992773002 .
This commit is contained in:
Sigmund Cherem 2017-07-31 13:22:45 -07:00
parent a67d798841
commit 13a4906be9
5 changed files with 27 additions and 30 deletions

View file

@ -12,8 +12,10 @@ import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/kernel/resynthesize.dart';
import 'package:analyzer/src/summary/resynthesize.dart';
import 'package:front_end/compiler_options.dart';
import 'package:front_end/file_system.dart';
import 'package:front_end/src/base/performace_logger.dart';
import 'package:front_end/src/base/processed_options.dart';
import 'package:front_end/src/fasta/uri_translator_impl.dart';
import 'package:front_end/src/incremental/byte_store.dart';
import 'package:front_end/src/incremental/kernel_driver.dart';
@ -79,12 +81,14 @@ class ResynthesizeKernelStrongTest extends ResynthesizeTest {
var uriTranslator =
new UriTranslatorImpl(dartLibraries, {}, Packages.noPackages);
var driver = new KernelDriver(
new PerformanceLog(null),
new _FileSystemAdaptor(resourceProvider),
new MemoryByteStore(),
uriTranslator,
new NoneTarget(new TargetFlags(strongMode: isStrongMode)));
var options = new ProcessedOptions(new CompilerOptions()
..target = new NoneTarget(new TargetFlags(strongMode: isStrongMode))
..reportMessages = false
..logger = new PerformanceLog(null)
..fileSystem = new _FileSystemAdaptor(resourceProvider)
..byteStore = new MemoryByteStore());
var driver = new KernelDriver(options.logger, options.fileSystem,
options.byteStore, uriTranslator, options);
KernelResult kernelResult = await driver.getKernel(testUri);

View file

@ -34,6 +34,10 @@ Future<IncrementalCompiler> createIncrementalCompiler(String entry,
..packagesFileUri = Uri.base.resolve('.packages')
..strongMode = false
..dartLibraries = loadDartLibraries(sdkRoot)
// Note: we do not report error on the console because the incremental
// compiler is an ongoing background service that shouldn't polute stdout.
// TODO(sigmund): do something with the errors.
..onError = (_) {}
..byteStore =
persistent ? new FileByteStore(tmpDir.path) : new MemoryByteStore();
return IncrementalCompiler.create(options, entryUri);

View file

@ -4,7 +4,6 @@
import 'dart:async';
import 'package:front_end/compiler_options.dart';
import 'package:front_end/file_system.dart';
import 'package:front_end/src/base/api_signature.dart';
import 'package:front_end/src/base/performace_logger.dart';
@ -22,7 +21,6 @@ import 'package:kernel/binary/ast_from_binary.dart';
import 'package:kernel/core_types.dart';
import 'package:kernel/kernel.dart' hide Source;
import 'package:kernel/src/incremental_class_hierarchy.dart';
import 'package:kernel/target/targets.dart' show Target;
import 'package:kernel/type_environment.dart';
import 'package:meta/meta.dart';
@ -62,8 +60,8 @@ class KernelDriver {
/// The object that knows how to resolve "package:" and "dart:" URIs.
final UriTranslator _uriTranslator;
/// The backend target to generate kernels for.
final Target _target;
/// Options used by the kernel compiler.
final ProcessedOptions _options;
/// The function that is invoked when a new file is about to be added to
/// the current file state. The [Future] that it returns is awaited before
@ -84,7 +82,7 @@ class KernelDriver {
final _TestView _testView = new _TestView();
KernelDriver(this._logger, this._fileSystem, this._byteStore,
this._uriTranslator, this._target,
this._uriTranslator, this._options,
{KernelDriverFileAddedFn fileAddedFn})
: _fileAddedFn = fileAddedFn {
_computeSalt();
@ -135,8 +133,8 @@ class KernelDriver {
});
CanonicalName nameRoot = new CanonicalName.root();
DillTarget dillTarget =
new DillTarget(new Ticker(isVerbose: false), _uriTranslator, _target);
DillTarget dillTarget = new DillTarget(
new Ticker(isVerbose: false), _uriTranslator, _options.target);
List<LibraryCycleResult> results = [];
_testView.compiledCycles.clear();
@ -171,15 +169,8 @@ class KernelDriver {
}
Future<T> runWithFrontEndContext<T>(String msg, Future<T> f()) async {
var options = new CompilerOptions()
..target = _target
// Note: we do not report error on the console because the driver is an
// ongoing background service that shouldn't polute stdout.
// TODO(scheglov,sigmund): add an error handler to forward errors to
// analyzer driver and incremental kernel generator.
..reportMessages = false;
return await CompilerContext.runWithOptions(
new ProcessedOptions(options), (_) => _logger.runAsync(msg, f));
_options, (_) => _logger.runAsync(msg, f));
}
/// Return the [TypeEnvironment] that corresponds to the [results].
@ -303,7 +294,7 @@ class KernelDriver {
void _computeSalt() {
var saltBuilder = new ApiSignature();
saltBuilder.addInt(DATA_VERSION);
saltBuilder.addBool(_target.strongMode);
saltBuilder.addBool(_options.strongMode);
_salt = saltBuilder.toByteList();
}

View file

@ -11,8 +11,6 @@ import 'package:front_end/src/fasta/uri_translator.dart';
import 'package:front_end/src/incremental/file_state.dart';
import 'package:front_end/src/incremental/kernel_driver.dart';
import 'package:kernel/kernel.dart' hide Source;
import 'package:kernel/target/targets.dart';
import 'package:kernel/target/vm_fasta.dart';
import 'package:meta/meta.dart';
/// Implementation of [IncrementalKernelGenerator].
@ -59,11 +57,7 @@ class IncrementalKernelGeneratorImpl implements IncrementalKernelGenerator {
}
_driver = new KernelDriver(
_logger,
options.fileSystem,
options.byteStore,
uriTranslator,
new VmFastaTarget(new TargetFlags(strongMode: options.strongMode)),
_logger, options.fileSystem, options.byteStore, uriTranslator, options,
fileAddedFn: onFileAdded);
}

View file

@ -4,8 +4,10 @@
import 'dart:async';
import 'package:front_end/compiler_options.dart';
import 'package:front_end/memory_file_system.dart';
import 'package:front_end/src/base/performace_logger.dart';
import 'package:front_end/src/base/processed_options.dart';
import 'package:front_end/src/fasta/kernel/utils.dart';
import 'package:front_end/src/fasta/uri_translator_impl.dart';
import 'package:front_end/src/incremental/byte_store.dart';
@ -656,7 +658,9 @@ import 'b.dart';
fileSystem,
new MemoryByteStore(),
uriTranslator,
new NoneTarget(new TargetFlags(strongMode: true)),
new ProcessedOptions(new CompilerOptions()
..strongMode = true
..target = new NoneTarget(new TargetFlags(strongMode: true))),
fileAddedFn: fileAddedFn);
}