Files
sdk/pkg/analyzer_fe_comparison/bin/compare_programs.dart
T
Paul Berry a48120aabd Wire up placeholder executable in pkg/analyzer_fe_comparison.
The placeholder executable is replaced by a shell script that invokes
pkg/analyzer_fe_comparison (in a similar way to how
sdk/bin/dartanalyzer invokes pkg/analyzer_cli).  This required some
rewriting of pkg/analyzer_fe_comparison to support analysis of a
single test case (as opposed to analysis of a package, which is what
it did before).

It's now possible to run the comparison tool over the test suite in
language_2.  There are many failures, which I'll begin addressing in
follow-up CLs.

Change-Id: I52d8f3b53064e8e29028571d416f2573c6cba35d
Reviewed-on: https://dart-review.googlesource.com/74820
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-09-13 16:41:20 +00:00

49 lines
1.8 KiB
Dart

// Copyright (c) 2018, 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 'dart:async';
import 'dart:io';
import 'package:analyzer/src/command_line/arguments.dart';
import 'package:analyzer_fe_comparison/comparison.dart';
import 'package:args/args.dart';
import 'package:path/path.dart' as path;
/// Compares the analyzer and front_end behavior when compiling a program.
main(List<String> args) async {
ArgResults options = _parseArgs(args);
var sourcePaths = options.rest;
if (sourcePaths.length != 1) {
throw new StateError('Exactly one source file must be specified.');
}
var sourcePath = sourcePaths[0];
var scriptPath = Platform.script.toFilePath();
var sdkRepoPath =
path.normalize(path.join(path.dirname(scriptPath), '..', '..', '..'));
var buildPath = await _findBuildDir(sdkRepoPath, 'ReleaseX64');
var dillPath = path.join(buildPath, 'vm_platform_strong.dill');
var packagesFilePath = path.join(sdkRepoPath, '.packages');
await compareTestPrograms(sourcePath, dillPath, packagesFilePath);
}
Future<String> _findBuildDir(String sdkRepoPath, String targetName) async {
for (var subdirName in ['out', 'xcodebuild']) {
var candidatePath = path.join(sdkRepoPath, subdirName, targetName);
if (await new Directory(candidatePath).exists()) {
return candidatePath;
}
}
throw new StateError('Cannot find build directory');
}
ArgResults _parseArgs(List<String> args) {
var parser = new ArgParser(allowTrailingOptions: true);
parser.addOption('dart-sdk', help: 'The path to the Dart SDK.');
if (args.contains('--ignore-unrecognized-flags')) {
args = filterUnknownArguments(args, parser);
}
return parser.parse(args);
}