mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 00:29:48 +00:00
Flow analysis: move into front_end.
This will allow it to be used by both the front end and the analyzer. Change-Id: I3af67aaf3ad7ff2cca0cb245518570892ad473e9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109986 Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
parent
24c0507d73
commit
baaeafa2bb
|
@ -9,8 +9,8 @@ import 'package:analyzer/dart/element/element.dart';
|
|||
import 'package:analyzer/dart/element/type.dart';
|
||||
import 'package:analyzer/dart/element/type_system.dart';
|
||||
import 'package:analyzer/src/dart/element/type.dart';
|
||||
import 'package:analyzer/src/dart/resolver/flow_analysis.dart';
|
||||
import 'package:analyzer/src/generated/variable_type_provider.dart';
|
||||
import 'package:front_end/src/fasta/flow_analysis/flow_analysis.dart';
|
||||
|
||||
/// The helper for performing flow analysis during resolution.
|
||||
///
|
||||
|
|
|
@ -16,7 +16,6 @@ import 'export_test.dart' as export_;
|
|||
import 'extension_method_test.dart' as extension_method;
|
||||
import 'extension_override_test.dart' as extension_override;
|
||||
import 'flow_analysis_test.dart' as flow_analysis;
|
||||
import 'flow_analysis_unit_test.dart' as flow_analysis_unit;
|
||||
import 'for_element_test.dart' as for_element;
|
||||
import 'for_in_test.dart' as for_in;
|
||||
import 'function_expression_invocation_test.dart'
|
||||
|
@ -56,7 +55,6 @@ main() {
|
|||
extension_method.main();
|
||||
extension_override.main();
|
||||
flow_analysis.main();
|
||||
flow_analysis_unit.main();
|
||||
for_element.main();
|
||||
for_in.main();
|
||||
function_expression_invocation.main();
|
||||
|
|
|
@ -95,7 +95,7 @@ class FlowAnalysis<Statement, Expression, Variable, Type> {
|
|||
/// erroneous code, it's possible that a variable might be used before its
|
||||
/// declaration.
|
||||
final Set<Variable> _referencedVariables =
|
||||
_assertionsEnabled ? <Variable>{} : null;
|
||||
_assertionsEnabled ? Set<Variable>() : null;
|
||||
|
||||
factory FlowAnalysis(
|
||||
NodeOperations<Expression> nodeOperations,
|
|
@ -2,7 +2,7 @@
|
|||
// 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/src/dart/resolver/flow_analysis.dart';
|
||||
import 'package:front_end/src/fasta/flow_analysis/flow_analysis.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
main() {
|
||||
|
@ -295,7 +295,7 @@ main() {
|
|||
.add(objectQVar)
|
||||
.add(intQVar)
|
||||
.promote(h, objectQVar, _Type('int'));
|
||||
var s2 = s1.removePromotedAll({intQVar});
|
||||
var s2 = s1.removePromotedAll([intQVar].toSet());
|
||||
expect(s2, same(s1));
|
||||
});
|
||||
|
||||
|
@ -306,7 +306,7 @@ main() {
|
|||
.add(intQVar)
|
||||
.promote(h, objectQVar, _Type('int'))
|
||||
.promote(h, intQVar, _Type('int'));
|
||||
var s2 = s1.removePromotedAll({intQVar});
|
||||
var s2 = s1.removePromotedAll([intQVar].toSet());
|
||||
expect(s2.reachable, true);
|
||||
expect(s2.notAssigned, same(s1.notAssigned));
|
||||
_Type.allowComparisons(() {
|
||||
|
@ -320,12 +320,13 @@ main() {
|
|||
var h = _Harness();
|
||||
var reachable = State<_Var, _Type>(true);
|
||||
var unreachable = reachable.setReachable(false);
|
||||
expect(reachable.restrict(h, emptySet, reachable, {}), same(reachable));
|
||||
expect(reachable.restrict(h, emptySet, unreachable, {}),
|
||||
expect(
|
||||
reachable.restrict(h, emptySet, reachable, Set()), same(reachable));
|
||||
expect(reachable.restrict(h, emptySet, unreachable, Set()),
|
||||
same(unreachable));
|
||||
expect(unreachable.restrict(h, emptySet, unreachable, {}),
|
||||
expect(unreachable.restrict(h, emptySet, unreachable, Set()),
|
||||
same(unreachable));
|
||||
expect(unreachable.restrict(h, emptySet, unreachable, {}),
|
||||
expect(unreachable.restrict(h, emptySet, unreachable, Set()),
|
||||
same(unreachable));
|
||||
});
|
||||
|
||||
|
@ -338,7 +339,7 @@ main() {
|
|||
var s0 = State<_Var, _Type>(true).add(a).add(b).add(c).add(d);
|
||||
var s1 = s0.write(h, emptySet, a).write(h, emptySet, b);
|
||||
var s2 = s0.write(h, emptySet, a).write(h, emptySet, c);
|
||||
var result = s1.restrict(h, emptySet, s2, {});
|
||||
var result = s1.restrict(h, emptySet, s2, Set());
|
||||
expect(result.notAssigned.contains(a), false);
|
||||
expect(result.notAssigned.contains(b), false);
|
||||
expect(result.notAssigned.contains(c), false);
|
||||
|
@ -353,7 +354,8 @@ main() {
|
|||
var s0 = State<_Var, _Type>(true).add(x, assigned: true);
|
||||
var s1 = thisType == null ? s0 : s0.promote(h, x, _Type(thisType));
|
||||
var s2 = otherType == null ? s0 : s0.promote(h, x, _Type(otherType));
|
||||
var result = s1.restrict(h, emptySet, s2, unsafe ? {x} : {});
|
||||
var result =
|
||||
s1.restrict(h, emptySet, s2, unsafe ? [x].toSet() : Set());
|
||||
if (expectedType == null) {
|
||||
expect(result.promoted, isNot(contains(x)));
|
||||
} else {
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
import 'package:analyzer/dart/element/element.dart';
|
||||
import 'package:analyzer/dart/element/type_system.dart';
|
||||
import 'package:analyzer/src/dart/resolver/flow_analysis.dart';
|
||||
import 'package:front_end/src/fasta/flow_analysis/flow_analysis.dart';
|
||||
import 'package:nnbd_migration/src/decorated_type.dart';
|
||||
import 'package:nnbd_migration/src/node_builder.dart';
|
||||
|
||||
|
|
Loading…
Reference in a new issue