Version 2.5.0-dev.4.0
Merge commit '027071318ff1333fefcf7b4e475c10a8f68ebc0d' into dev
diff --git a/DEPS b/DEPS
index b32253a..8aba950 100644
--- a/DEPS
+++ b/DEPS
@@ -107,7 +107,7 @@
"mustache_tag" : "5e81b12215566dbe2473b2afd01a8a8aedd56ad9",
"oauth2_tag": "1.2.1",
"observatory_pub_packages_rev": "0894122173b0f98eb08863a7712e78407d4477bc",
- "package_config_tag": "1.0.5",
+ "package_config_tag": "2453cd2e78c2db56ee2669ced17ce70dd00bf576", # should be 1.1.0
"package_resolver_tag": "1.0.10",
"path_tag": "1.6.2",
"pedantic_tag": "v1.8.0",
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index b919610..48fbe59 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -498,6 +498,7 @@
ParserErrorCode.INVALID_CONSTRUCTOR_NAME,
ParserErrorCode.INVALID_GENERIC_FUNCTION_TYPE,
ParserErrorCode.INVALID_HEX_ESCAPE,
+ ParserErrorCode.INVALID_INITIALIZER,
ParserErrorCode.INVALID_LITERAL_IN_CONFIGURATION,
ParserErrorCode.INVALID_OPERATOR,
ParserErrorCode.INVALID_OPERATOR_FOR_SUPER,
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
index cec3fe1..d5a9bbb 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.dart
@@ -357,6 +357,8 @@
static const ParserErrorCode INVALID_HEX_ESCAPE = _INVALID_HEX_ESCAPE;
+ static const ParserErrorCode INVALID_INITIALIZER = _INVALID_INITIALIZER;
+
static const ParserErrorCode INVALID_LITERAL_IN_CONFIGURATION =
const ParserErrorCode('INVALID_LITERAL_IN_CONFIGURATION',
"The literal in a configuration can't contain interpolation.",
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index 80d4ee8b..732496e 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -97,6 +97,7 @@
_EXTERNAL_CONSTRUCTOR_WITH_BODY,
_FIELD_INITIALIZED_OUTSIDE_DECLARING_CLASS,
_VAR_AND_TYPE,
+ _INVALID_INITIALIZER,
];
const ParserErrorCode _ABSTRACT_CLASS_MEMBER = const ParserErrorCode(
@@ -190,7 +191,7 @@
const ParserErrorCode _DUPLICATED_MODIFIER = const ParserErrorCode(
'DUPLICATED_MODIFIER', r"The modifier '#lexeme' was already specified.",
- correction: "Try removing all but one occurence of the modifier.");
+ correction: "Try removing all but one occurrence of the modifier.");
const ParserErrorCode _DUPLICATE_DEFERRED = const ParserErrorCode(
'DUPLICATE_DEFERRED',
@@ -342,6 +343,10 @@
'INVALID_HEX_ESCAPE',
r"An escape sequence starting with '\x' must be followed by 2 hexadecimal digits.");
+const ParserErrorCode _INVALID_INITIALIZER = const ParserErrorCode(
+ 'INVALID_INITIALIZER', r"Not a valid initializer.",
+ correction: "To initialize a field, use the syntax 'name = value'.");
+
const ParserErrorCode _INVALID_OPERATOR = const ParserErrorCode(
'INVALID_OPERATOR',
r"The string '#lexeme' isn't a user-definable operator.");
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 131f83f..71e5474 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -32,6 +32,7 @@
messageFieldInitializerOutsideConstructor,
messageIllegalAssignmentToNonAssignable,
messageInterpolationInUri,
+ messageInvalidInitializer,
messageInvalidSuperInInitializer,
messageInvalidThisInInitializer,
messageMissingAssignableSelector,
@@ -419,8 +420,7 @@
initializerObject.target, initializerObject);
}
- throw new UnsupportedError('unsupported initializer:'
- ' ${initializerObject.runtimeType} :: $initializerObject');
+ return null;
}
AstNode buildInitializerTargetExpressionRecovery(
@@ -455,9 +455,7 @@
return ast.redirectingConstructorInvocation(
target.thisKeyword, null, null, argumentList);
}
- throw new UnsupportedError('unsupported initializer:'
- ' ${initializerObject.runtimeType} :: $initializerObject'
- ' %% target : ${target.runtimeType} :: $target');
+ return null;
}
void checkFieldFormalParameters(FormalParameterList parameters) {
@@ -1367,11 +1365,14 @@
var initializers = <ConstructorInitializer>[];
for (Object initializerObject in initializerObjects) {
ConstructorInitializer initializer = buildInitializer(initializerObject);
- if (initializer == null) {
- throw new UnsupportedError('unsupported initializer:'
- ' ${initializerObject.runtimeType} :: $initializerObject');
+ if (initializer != null) {
+ initializers.add(initializer);
+ } else {
+ handleRecoverableError(
+ messageInvalidInitializer,
+ initializerObject is AstNode ? initializerObject.beginToken : colon,
+ initializerObject is AstNode ? initializerObject.endToken : colon);
}
- initializers.add(initializer);
}
push(initializers);
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index bde9710..63c5052 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -792,11 +792,7 @@
return;
}
if (_checkForEachParts(node, identifier)) {
- Element variableElement = identifier.staticElement;
- if (variableElement is VariableElement && variableElement.isConst) {
- _errorReporter.reportErrorForNode(
- CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE, identifier);
- }
+ _checkForAssignmentToFinal(identifier);
}
super.visitForEachPartsWithIdentifier(node);
}
diff --git a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
index 586123a..426c86f 100644
--- a/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_text_printer.dart
@@ -333,6 +333,26 @@
}
@override
+ void visitExtensionDeclaration(ExtensionDeclaration node) {
+ _compilationUnitMember(node);
+ _token(node.extensionKeyword);
+ node.name?.accept(this);
+ node.typeParameters?.accept(this);
+ _token(node.onKeyword);
+ node.extendedType.accept(this);
+ _token(node.leftBracket);
+ node.members.accept(this);
+ _token(node.rightBracket);
+ }
+
+ @override
+ void visitExtensionOverride(ExtensionOverride node) {
+ node.extensionName.accept(this);
+ node.typeArguments.accept(this);
+ node.argumentList.accept(this);
+ }
+
+ @override
void visitFieldDeclaration(FieldDeclaration node) {
_classMember(node);
_token(node.staticKeyword);
diff --git a/pkg/analyzer/test/generated/compile_time_error_code.dart b/pkg/analyzer/test/generated/compile_time_error_code.dart
index e011614..899e2e5 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code.dart
@@ -1571,7 +1571,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE, 28, 1),
+ error(StaticWarningCode.ASSIGNMENT_TO_CONST, 28, 1),
]);
}
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
index ba715e5..eb70ef3 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -231,7 +231,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE, 28, 1),
+ error(StaticWarningCode.ASSIGNMENT_TO_CONST, 28, 1),
]);
}
diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart
index 383986c..3718020 100644
--- a/pkg/analyzer/test/generated/parser_fasta_test.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_test.dart
@@ -97,6 +97,14 @@
expect(rightHandSide.name, 'value');
}
+ void test_parseConstructor_invalidInitializer() {
+ // https://github.com/dart-lang/sdk/issues/37693
+ parseCompilationUnit('class C{ C() : super() * (); }', errors: [
+ expectedError(ParserErrorCode.INVALID_INITIALIZER, 15, 12),
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 26, 1),
+ ]);
+ }
+
void test_parseConstructor_nullSuperArgList_openBrace_37735() {
// https://github.com/dart-lang/sdk/issues/37735
var unit = parseCompilationUnit('class{const():super.{n', errors: [
@@ -1232,6 +1240,14 @@
]);
}
+ void test_listLiteral_invalidElement_37697() {
+ // https://github.com/dart-lang/sdk/issues/37674
+ parseExpression('[<y.<z>(){}]', errors: [
+ expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 4, 1),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 6, 1),
+ ]);
+ }
+
void test_listLiteral_spread_disabled() {
ListLiteral list =
parseExpression('[1, ...[2]]', featureSet: beforeUiAsCode, errors: [
diff --git a/pkg/analyzer/test/src/context/source_test.dart b/pkg/analyzer/test/src/context/source_test.dart
index 74b8c43..5bc3108 100644
--- a/pkg/analyzer/test/src/context/source_test.dart
+++ b/pkg/analyzer/test/src/context/source_test.dart
@@ -58,4 +58,19 @@
Uri resolve(Uri packageUri, {Uri notFound(Uri packageUri)}) {
fail('Unexpected invocation of resolve');
}
+
+ @override
+ String get defaultPackageName {
+ fail('Unexpected invocation of defaultPackageName');
+ }
+
+ @override
+ String libraryMetadata(Uri libraryUri, String key) {
+ fail('Unexpected invocation of libraryMetadata');
+ }
+
+ @override
+ String packageMetadata(String packageName, String key) {
+ fail('Unexpected invocation of packageMetadata');
+ }
}
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart
index a3b7863..a9022b5 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart
@@ -61,4 +61,16 @@
error(StaticWarningCode.ASSIGNMENT_TO_CONST, 23, 1),
]);
}
+
+ test_localVariable_inForEach() async {
+ await assertErrorsInCode('''
+f() {
+ const x = 0;
+ for (x in <int>[1, 2]) {
+ print(x);
+ }
+}''', [
+ error(StaticWarningCode.ASSIGNMENT_TO_CONST, 28, 1),
+ ]);
+ }
}
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
index 2839d0a..cef7998 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
@@ -113,6 +113,18 @@
]);
}
+ test_localVariable_inForEach() async {
+ await assertErrorsInCode('''
+f() {
+ final x = 0;
+ for (x in <int>[1, 2]) {
+ print(x);
+ }
+}''', [
+ error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 28, 1),
+ ]);
+ }
+
test_topLevelVariable() async {
await assertErrorsInCode('''
final x = 0;
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index af985cd..ab3bc02 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -6044,7 +6044,7 @@
FunctionEntity function, TypeVariableType typeVariable) {
DartType bound =
_elementEnvironment.getTypeVariableDefaultType(typeVariable.element);
- if (bound.containsTypeVariables) {
+ if (bound.containsTypeVariables && !options.experimentNewRti) {
// TODO(33422): Support type variables in default
// types. Temporarily using the "any" type (encoded as -2) to
// avoid failing on bounds checks.
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index b081701..e1cb003 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -494,7 +494,8 @@
if (contents != null) {
_packagesUri = file;
try {
- Map<String, Uri> map = package_config.parse(contents, file);
+ Map<String, Uri> map =
+ package_config.parse(contents, file, allowDefaultPackage: true);
return new MapPackages(map);
} on FormatException catch (e) {
report(
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index 7db58b7..81f0051 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -6402,6 +6402,7 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messageInvalidInitializer = const MessageCode(
"InvalidInitializer",
+ index: 90,
message: r"""Not a valid initializer.""",
tip: r"""To initialize a field, use the syntax 'name = value'.""");
diff --git a/pkg/front_end/lib/src/fasta/flow_analysis/flow_analysis.dart b/pkg/front_end/lib/src/fasta/flow_analysis/flow_analysis.dart
index e17c773..29ae839 100644
--- a/pkg/front_end/lib/src/fasta/flow_analysis/flow_analysis.dart
+++ b/pkg/front_end/lib/src/fasta/flow_analysis/flow_analysis.dart
@@ -26,7 +26,7 @@
}
void beginStatement() {
- var set = Set<Variable>.identity();
+ Set<Variable> set = Set<Variable>.identity();
_stack.add(set);
}
@@ -35,7 +35,7 @@
}
void write(Variable variable) {
- for (var i = 0; i < _stack.length; ++i) {
+ for (int i = 0; i < _stack.length; ++i) {
_stack[i].add(variable);
}
}
@@ -100,7 +100,8 @@
TypeOperations<Variable, Type> typeOperations,
FunctionBodyAccess<Variable> functionBody,
) {
- var emptySet = FlowModel<Variable, Type>(false).notAssigned;
+ _VariableSet<Variable> emptySet =
+ FlowModel<Variable, Type>(false).notAssigned;
return FlowAnalysis._(
nodeOperations,
typeOperations,
@@ -139,8 +140,8 @@
}
void conditional_elseBegin(Expression thenExpression) {
- var afterThen = _current;
- var falseCondition = _stack.removeLast();
+ FlowModel<Variable, Type> afterThen = _current;
+ FlowModel<Variable, Type> falseCondition = _stack.removeLast();
_conditionalEnd(thenExpression);
// Tail of the stack: falseThen, trueThen
@@ -151,20 +152,20 @@
void conditional_end(
Expression conditionalExpression, Expression elseExpression) {
- var afterThen = _stack.removeLast();
- var afterElse = _current;
+ FlowModel<Variable, Type> afterThen = _stack.removeLast();
+ FlowModel<Variable, Type> afterElse = _current;
_conditionalEnd(elseExpression);
// Tail of the stack: falseThen, trueThen, falseElse, trueElse
- var trueElse = _stack.removeLast();
- var falseElse = _stack.removeLast();
+ FlowModel<Variable, Type> trueElse = _stack.removeLast();
+ FlowModel<Variable, Type> falseElse = _stack.removeLast();
- var trueThen = _stack.removeLast();
- var falseThen = _stack.removeLast();
+ FlowModel<Variable, Type> trueThen = _stack.removeLast();
+ FlowModel<Variable, Type> falseThen = _stack.removeLast();
- var trueResult = _join(trueThen, trueElse);
- var falseResult = _join(falseThen, falseElse);
+ FlowModel<Variable, Type> trueResult = _join(trueThen, trueElse);
+ FlowModel<Variable, Type> falseResult = _join(falseThen, falseElse);
_condition = conditionalExpression;
_conditionTrue = trueResult;
@@ -177,7 +178,7 @@
_conditionalEnd(condition);
// Tail of the stack: falseCondition, trueCondition
- var trueCondition = _stack.removeLast();
+ FlowModel<Variable, Type> trueCondition = _stack.removeLast();
_current = trueCondition;
}
@@ -191,7 +192,8 @@
}
_condition = binaryExpression;
- var currentPromoted = _current.markNonNullable(typeOperations, variable);
+ FlowModel<Variable, Type> currentPromoted =
+ _current.markNonNullable(typeOperations, variable);
if (notEqual) {
_conditionTrue = currentPromoted;
_conditionFalse = _current;
@@ -214,7 +216,7 @@
void doStatement_conditionBegin() {
// Tail of the stack: break, continue
- var continueState = _stack.removeLast();
+ FlowModel<Variable, Type> continueState = _stack.removeLast();
_current = _join(_current, continueState);
}
@@ -223,8 +225,8 @@
// Tail of the stack: break, falseCondition, trueCondition
_stack.removeLast(); // trueCondition
- var falseCondition = _stack.removeLast();
- var breakState = _stack.removeLast();
+ FlowModel<Variable, Type> falseCondition = _stack.removeLast();
+ FlowModel<Variable, Type> breakState = _stack.removeLast();
_current = _join(falseCondition, breakState);
}
@@ -234,7 +236,7 @@
void finish() {
assert(_stack.isEmpty);
assert(() {
- var variablesNotAdded =
+ Set<Variable> variablesNotAdded =
_referencedVariables.difference(Set<Variable>.from(_addedVariables));
assert(variablesNotAdded.isEmpty,
'Variables not passed to add: $variablesNotAdded');
@@ -249,7 +251,7 @@
}
void forEachStatement_end() {
- var afterIterable = _stack.removeLast();
+ FlowModel<Variable, Type> afterIterable = _stack.removeLast();
_current = _join(_current, afterIterable);
}
@@ -257,7 +259,7 @@
_conditionalEnd(condition);
// Tail of the stack: falseCondition, trueCondition
- var trueCondition = _stack.removeLast();
+ FlowModel<Variable, Type> trueCondition = _stack.removeLast();
_statementToStackIndex[node] = _stack.length;
_stack.add(null); // break
@@ -273,16 +275,16 @@
void forStatement_end() {
// Tail of the stack: falseCondition, break
- var breakState = _stack.removeLast();
- var falseCondition = _stack.removeLast();
+ FlowModel<Variable, Type> breakState = _stack.removeLast();
+ FlowModel<Variable, Type> falseCondition = _stack.removeLast();
_current = _join(falseCondition, breakState);
}
void forStatement_updaterBegin() {
// Tail of the stack: falseCondition, break, continue
- var afterBody = _current;
- var continueState = _stack.removeLast();
+ FlowModel<Variable, Type> afterBody = _current;
+ FlowModel<Variable, Type> continueState = _stack.removeLast();
_current = _join(afterBody, continueState);
}
@@ -291,9 +293,9 @@
_stack.add(_current);
Set<Variable> notPromoted = null;
- for (var entry in _current.promoted.entries) {
- var variable = entry.key;
- var promotedType = entry.value;
+ for (MapEntry<Variable, Type> entry in _current.promoted.entries) {
+ Variable variable = entry.key;
+ Type promotedType = entry.value;
if (promotedType != null &&
functionBody.isPotentiallyMutatedInScope(variable)) {
notPromoted ??= Set<Variable>.identity();
@@ -311,7 +313,7 @@
}
void handleBreak(Statement target) {
- var breakIndex = _statementToStackIndex[target];
+ int breakIndex = _statementToStackIndex[target];
if (breakIndex != null) {
_stack[breakIndex] = _join(_stack[breakIndex], _current);
}
@@ -319,9 +321,9 @@
}
void handleContinue(Statement target) {
- var breakIndex = _statementToStackIndex[target];
+ int breakIndex = _statementToStackIndex[target];
if (breakIndex != null) {
- var continueIndex = breakIndex + 1;
+ int continueIndex = breakIndex + 1;
_stack[continueIndex] = _join(_stack[continueIndex], _current);
}
_current = _current.setReachable(false);
@@ -334,7 +336,7 @@
}
void ifNullExpression_end() {
- var afterLeft = _stack.removeLast();
+ FlowModel<Variable, Type> afterLeft = _stack.removeLast();
_current = _join(_current, afterLeft);
}
@@ -343,8 +345,8 @@
}
void ifStatement_elseBegin() {
- var afterThen = _current;
- var falseCondition = _stack.removeLast();
+ FlowModel<Variable, Type> afterThen = _current;
+ FlowModel<Variable, Type> falseCondition = _stack.removeLast();
_stack.add(afterThen);
_current = falseCondition;
}
@@ -366,7 +368,7 @@
_conditionalEnd(condition);
// Tail of the stack: falseCondition, trueCondition
- var trueCondition = _stack.removeLast();
+ FlowModel<Variable, Type> trueCondition = _stack.removeLast();
_current = trueCondition;
}
@@ -398,11 +400,11 @@
_conditionalEnd(rightOperand);
// Tail of the stack: falseLeft, trueLeft, falseRight, trueRight
- var trueRight = _stack.removeLast();
- var falseRight = _stack.removeLast();
+ FlowModel<Variable, Type> trueRight = _stack.removeLast();
+ FlowModel<Variable, Type> falseRight = _stack.removeLast();
- var trueLeft = _stack.removeLast();
- var falseLeft = _stack.removeLast();
+ FlowModel<Variable, Type> trueLeft = _stack.removeLast();
+ FlowModel<Variable, Type> falseLeft = _stack.removeLast();
FlowModel<Variable, Type> trueResult;
FlowModel<Variable, Type> falseResult;
@@ -414,7 +416,7 @@
falseResult = falseRight;
}
- var afterResult = _join(trueResult, falseResult);
+ FlowModel<Variable, Type> afterResult = _join(trueResult, falseResult);
_condition = wholeExpression;
_conditionTrue = trueResult;
@@ -429,18 +431,18 @@
// Tail of the stack: falseLeft, trueLeft
if (isAnd) {
- var trueLeft = _stack.last;
+ FlowModel<Variable, Type> trueLeft = _stack.last;
_current = trueLeft;
} else {
- var falseLeft = _stack[_stack.length - 2];
+ FlowModel<Variable, Type> falseLeft = _stack[_stack.length - 2];
_current = falseLeft;
}
}
void logicalNot_end(Expression notExpression, Expression operand) {
_conditionalEnd(operand);
- var trueExpr = _stack.removeLast();
- var falseExpr = _stack.removeLast();
+ FlowModel<Variable, Type> trueExpr = _stack.removeLast();
+ FlowModel<Variable, Type> falseExpr = _stack.removeLast();
_condition = notExpression;
_conditionTrue = falseExpr;
@@ -465,9 +467,9 @@
void switchStatement_end(Statement switchStatement, bool hasDefault) {
// Tail of the stack: break, continue, afterExpression
- var afterExpression = _current = _stack.removeLast();
+ FlowModel<Variable, Type> afterExpression = _current = _stack.removeLast();
_stack.removeLast(); // continue
- var breakState = _stack.removeLast();
+ FlowModel<Variable, Type> breakState = _stack.removeLast();
if (hasDefault) {
// breakState should not be null because we should have joined it with
@@ -493,25 +495,26 @@
void tryCatchStatement_bodyEnd(Set<Variable> assignedInBody) {
_variablesReferenced(assignedInBody);
- var beforeBody = _stack.removeLast();
- var beforeCatch = beforeBody.removePromotedAll(assignedInBody);
+ FlowModel<Variable, Type> beforeBody = _stack.removeLast();
+ FlowModel<Variable, Type> beforeCatch =
+ beforeBody.removePromotedAll(assignedInBody);
_stack.add(beforeCatch);
_stack.add(_current); // afterBodyAndCatches
// Tail of the stack: beforeCatch, afterBodyAndCatches
}
void tryCatchStatement_catchBegin() {
- var beforeCatch = _stack[_stack.length - 2];
+ FlowModel<Variable, Type> beforeCatch = _stack[_stack.length - 2];
_current = beforeCatch;
}
void tryCatchStatement_catchEnd() {
- var afterBodyAndCatches = _stack.last;
+ FlowModel<Variable, Type> afterBodyAndCatches = _stack.last;
_stack.last = _join(afterBodyAndCatches, _current);
}
void tryCatchStatement_end() {
- var afterBodyAndCatches = _stack.removeLast();
+ FlowModel<Variable, Type> afterBodyAndCatches = _stack.removeLast();
_stack.removeLast(); // beforeCatch
_current = afterBodyAndCatches;
}
@@ -522,7 +525,7 @@
void tryFinallyStatement_end(Set<Variable> assignedInFinally) {
_variablesReferenced(assignedInFinally);
- var afterBody = _stack.removeLast();
+ FlowModel<Variable, Type> afterBody = _stack.removeLast();
_current = _current.restrict(
typeOperations,
_emptySet,
@@ -533,8 +536,8 @@
void tryFinallyStatement_finallyBegin(Set<Variable> assignedInBody) {
_variablesReferenced(assignedInBody);
- var beforeTry = _stack.removeLast();
- var afterBody = _current;
+ FlowModel<Variable, Type> beforeTry = _stack.removeLast();
+ FlowModel<Variable, Type> afterBody = _current;
_stack.add(afterBody);
_current = _join(afterBody, beforeTry.removePromotedAll(assignedInBody));
}
@@ -544,7 +547,7 @@
_conditionalEnd(condition);
// Tail of the stack: falseCondition, trueCondition
- var trueCondition = _stack.removeLast();
+ FlowModel<Variable, Type> trueCondition = _stack.removeLast();
_statementToStackIndex[whileStatement] = _stack.length;
_stack.add(null); // break
@@ -560,8 +563,8 @@
void whileStatement_end() {
_stack.removeLast(); // continue
- var breakState = _stack.removeLast();
- var falseCondition = _stack.removeLast();
+ FlowModel<Variable, Type> breakState = _stack.removeLast();
+ FlowModel<Variable, Type> falseCondition = _stack.removeLast();
_current = _join(falseCondition, breakState);
}
@@ -657,8 +660,9 @@
/// optional [assigned] boolean indicates whether the variable is assigned at
/// the point of declaration.
FlowModel<Variable, Type> add(Variable variable, {bool assigned: false}) {
- var newNotAssigned = assigned ? notAssigned : notAssigned.add(variable);
- var newPromoted = Map<Variable, Type>.from(promoted);
+ _VariableSet<Variable> newNotAssigned =
+ assigned ? notAssigned : notAssigned.add(variable);
+ Map<Variable, Type> newPromoted = Map<Variable, Type>.from(promoted);
newPromoted[variable] = null;
return FlowModel<Variable, Type>._(
@@ -675,12 +679,12 @@
/// assigned? Does it matter?
FlowModel<Variable, Type> markNonNullable(
TypeOperations<Variable, Type> typeOperations, Variable variable) {
- var previousType = promoted[variable];
+ Type previousType = promoted[variable];
previousType ??= typeOperations.variableType(variable);
- var type = typeOperations.promoteToNonNull(previousType);
+ Type type = typeOperations.promoteToNonNull(previousType);
if (!typeOperations.isSameType(type, previousType)) {
- var newPromoted = <Variable, Type>{}..addAll(promoted);
+ Map<Variable, Type> newPromoted = <Variable, Type>{}..addAll(promoted);
newPromoted[variable] = type;
return FlowModel<Variable, Type>._(
reachable,
@@ -706,12 +710,12 @@
Variable variable,
Type type,
) {
- var previousType = promoted[variable];
+ Type previousType = promoted[variable];
previousType ??= typeOperations.variableType(variable);
if (typeOperations.isSubtypeOf(type, previousType) &&
!typeOperations.isSameType(type, previousType)) {
- var newPromoted = <Variable, Type>{}..addAll(promoted);
+ Map<Variable, Type> newPromoted = <Variable, Type>{}..addAll(promoted);
newPromoted[variable] = type;
return FlowModel<Variable, Type>._(
reachable,
@@ -743,7 +747,7 @@
/// later in the loop body. If we switch to a fixed point analysis, we should
/// be able to remove this method.
FlowModel<Variable, Type> removePromotedAll(Set<Variable> variables) {
- var newPromoted = _removePromotedAll(promoted, variables);
+ Map<Variable, Type> newPromoted = _removePromotedAll(promoted, variables);
if (identical(newPromoted, promoted)) return this;
@@ -780,8 +784,8 @@
FlowModel<Variable, Type> other,
Set<Variable> unsafe,
) {
- var newReachable = reachable && other.reachable;
- var newNotAssigned = notAssigned.intersect(
+ bool newReachable = reachable && other.reachable;
+ _VariableSet<Variable> newNotAssigned = notAssigned.intersect(
empty: emptySet,
other: other.notAssigned,
);
@@ -792,13 +796,13 @@
newNotAssigned = other.notAssigned;
}
- var newPromoted = <Variable, Type>{};
+ Map<Variable, Type> newPromoted = <Variable, Type>{};
bool promotedMatchesThis = true;
bool promotedMatchesOther = other.promoted.length == promoted.length;
- for (var entry in promoted.entries) {
- var variable = entry.key;
- var thisType = entry.value;
- var otherType = other.promoted[variable];
+ for (MapEntry<Variable, Type> entry in promoted.entries) {
+ Variable variable = entry.key;
+ Type thisType = entry.value;
+ Type otherType = other.promoted[variable];
if (!unsafe.contains(variable)) {
if (otherType != null &&
(thisType == null ||
@@ -867,11 +871,12 @@
/// TODO(paulberry): allow for writes that preserve type promotions.
FlowModel<Variable, Type> write(TypeOperations<Variable, Type> typeOperations,
_VariableSet<Variable> emptySet, Variable variable) {
- var newNotAssigned = typeOperations.isLocalVariable(variable)
- ? notAssigned.remove(emptySet, variable)
- : notAssigned;
+ _VariableSet<Variable> newNotAssigned =
+ typeOperations.isLocalVariable(variable)
+ ? notAssigned.remove(emptySet, variable)
+ : notAssigned;
- var newPromoted = _removePromoted(promoted, variable);
+ Map<Variable, Type> newPromoted = _removePromoted(promoted, variable);
if (identical(newNotAssigned, notAssigned) &&
identical(newPromoted, promoted)) {
@@ -891,7 +896,7 @@
Map<Variable, Type> map, Variable variable) {
if (map[variable] == null) return map;
- var result = Map<Variable, Type>.from(map);
+ Map<Variable, Type> result = Map<Variable, Type>.from(map);
result[variable] = null;
return result;
}
@@ -905,11 +910,11 @@
if (map.isEmpty) return const {};
if (variables.isEmpty) return map;
- var result = <Variable, Type>{};
- var noChanges = true;
- for (var entry in map.entries) {
- var variable = entry.key;
- var promotedType = entry.value;
+ Map<Variable, Type> result = <Variable, Type>{};
+ bool noChanges = true;
+ for (MapEntry<Variable, Type> entry in map.entries) {
+ Variable variable = entry.key;
+ Type promotedType = entry.value;
if (variables.contains(variable) && promotedType != null) {
result[variable] = null;
noChanges = false;
@@ -943,9 +948,10 @@
if (first.reachable && !second.reachable) return first;
if (!first.reachable && second.reachable) return second;
- var newReachable = first.reachable || second.reachable;
- var newNotAssigned = first.notAssigned.union(second.notAssigned);
- var newPromoted =
+ bool newReachable = first.reachable || second.reachable;
+ _VariableSet<Variable> newNotAssigned =
+ first.notAssigned.union(second.notAssigned);
+ Map<Variable, Type> newPromoted =
FlowModel.joinPromoted(typeOperations, first.promoted, second.promoted);
return FlowModel._identicalOrNew(
@@ -967,16 +973,16 @@
if (identical(first, second)) return first;
if (first.isEmpty || second.isEmpty) return const {};
- var result = <Variable, Type>{};
- var alwaysFirst = true;
- var alwaysSecond = true;
- for (var entry in first.entries) {
- var variable = entry.key;
+ Map<Variable, Type> result = <Variable, Type>{};
+ bool alwaysFirst = true;
+ bool alwaysSecond = true;
+ for (MapEntry<Variable, Type> entry in first.entries) {
+ Variable variable = entry.key;
if (!second.containsKey(variable)) {
alwaysFirst = false;
} else {
- var firstType = entry.value;
- var secondType = second[variable];
+ Type firstType = entry.value;
+ Type secondType = second[variable];
if (identical(firstType, secondType)) {
result[variable] = firstType;
} else if (firstType == null) {
@@ -1039,9 +1045,9 @@
Map<Variable, Type> p2) {
if (p1.length != p2.length) return false;
if (!p1.keys.toSet().containsAll(p2.keys)) return false;
- for (var entry in p1.entries) {
- var p1Value = entry.value;
- var p2Value = p2[entry.key];
+ for (MapEntry<Variable, Type> entry in p1.entries) {
+ Type p1Value = entry.value;
+ Type p2Value = p2[entry.key];
if (p1Value == null) {
if (p2Value != null) return false;
} else {
@@ -1098,9 +1104,9 @@
return this;
}
- var length = variables.length;
- var newVariables = List<Variable>(length + 1);
- for (var i = 0; i < length; ++i) {
+ int length = variables.length;
+ List<Variable> newVariables = List<Variable>(length + 1);
+ for (int i = 0; i < length; ++i) {
newVariables[i] = variables[i];
}
newVariables[length] = addedVariable;
@@ -1108,16 +1114,16 @@
}
_VariableSet<Variable> addAll(Iterable<Variable> variables) {
- var result = this;
- for (var variable in variables) {
+ _VariableSet<Variable> result = this;
+ for (Variable variable in variables) {
result = result.add(variable);
}
return result;
}
bool contains(Variable variable) {
- var length = variables.length;
- for (var i = 0; i < length; ++i) {
+ int length = variables.length;
+ for (int i = 0; i < length; ++i) {
if (identical(variables[i], variable)) {
return true;
}
@@ -1133,7 +1139,7 @@
if (identical(this, other)) return this;
// TODO(scheglov) optimize
- var newVariables =
+ List<Variable> newVariables =
variables.toSet().intersection(other.variables.toSet()).toList();
if (newVariables.isEmpty) return empty;
@@ -1148,15 +1154,15 @@
return this;
}
- var length = variables.length;
+ int length = variables.length;
if (length == 1) {
return empty;
}
- var newVariables = List<Variable>(length - 1);
- var newIndex = 0;
- for (var i = 0; i < length; ++i) {
- var variable = variables[i];
+ List<Variable> newVariables = List<Variable>(length - 1);
+ int newIndex = 0;
+ for (int i = 0; i < length; ++i) {
+ Variable variable = variables[i];
if (!identical(variable, removedVariable)) {
newVariables[newIndex++] = variable;
}
@@ -1173,10 +1179,10 @@
return this;
}
- var result = this;
- var otherVariables = other.variables;
- for (var i = 0; i < otherVariables.length; ++i) {
- var otherVariable = otherVariables[i];
+ _VariableSet<Variable> result = this;
+ List<Variable> otherVariables = other.variables;
+ for (int i = 0; i < otherVariables.length; ++i) {
+ Variable otherVariable = otherVariables[i];
result = result.add(otherVariable);
}
return result;
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index c15646d..5d697e6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -740,7 +740,7 @@
debugEvent("endInitializer");
inFieldInitializer = false;
assert(!inInitializer);
- final member = this.member;
+ final ModifierBuilder member = this.member;
Object node = pop();
Initializer initializer;
if (node is Initializer) {
@@ -2507,7 +2507,7 @@
@override
void endForControlFlow(Token token) {
debugEvent("ForControlFlow");
- var entry = pop();
+ Object entry = pop();
int updateExpressionCount = pop();
pop(); // left separator
pop(); // left parenthesis
@@ -2638,7 +2638,7 @@
List<Expression> expressions =
new List<Expression>.filled(count, null, growable: true);
for (int i = count - 1; i >= 0; i--) {
- var elem = pop();
+ Object elem = pop();
if (elem != invalidCollectionElement) {
expressions[i] = toValue(elem);
} else {
@@ -2691,9 +2691,9 @@
typeArgument = implicitTypeArgument;
}
- var expressions = <Expression>[];
+ List<Expression> expressions = <Expression>[];
if (setOrMapEntries != null) {
- for (var entry in setOrMapEntries) {
+ for (dynamic entry in setOrMapEntries) {
if (entry is MapEntry) {
// TODO(danrubel): report the error on the colon
addProblem(fasta.templateExpectedButGot.withArguments(','),
@@ -2730,9 +2730,10 @@
) {
debugEvent("LiteralSetOrMap");
- var setOrMapEntries = new List<dynamic>.filled(count, null, growable: true);
+ List<dynamic> setOrMapEntries =
+ new List<dynamic>.filled(count, null, growable: true);
for (int i = count - 1; i >= 0; i--) {
- var elem = pop();
+ Object elem = pop();
// TODO(danrubel): Revise this to handle control flow and spread
if (elem == invalidCollectionElement) {
setOrMapEntries.removeAt(i);
@@ -2751,7 +2752,7 @@
// TODO(danrubel): Since type resolution is needed to disambiguate
// set or map in some situations, consider always deferring determination
// until the type resolution phase.
- final typeArgCount = typeArguments?.length;
+ final int typeArgCount = typeArguments?.length;
bool isSet = typeArgCount == 1 ? true : typeArgCount != null ? false : null;
for (int i = 0; i < setOrMapEntries.length; ++i) {
@@ -3981,8 +3982,8 @@
@override
void endIfControlFlow(Token token) {
debugEvent("endIfControlFlow");
- var entry = pop();
- var condition = pop(); // parenthesized expression
+ Object entry = pop();
+ Object condition = pop(); // parenthesized expression
Token ifToken = pop();
typePromoter?.enterElse();
typePromoter?.exitConditional();
@@ -4020,9 +4021,9 @@
@override
void endIfElseControlFlow(Token token) {
debugEvent("endIfElseControlFlow");
- var elseEntry = pop(); // else entry
- var thenEntry = pop(); // then entry
- var condition = pop(); // parenthesized expression
+ Object elseEntry = pop(); // else entry
+ Object thenEntry = pop(); // then entry
+ Object condition = pop(); // parenthesized expression
Token ifToken = pop();
typePromoter?.exitConditional();
if (!library.loader.target.enableControlFlowCollections) {
@@ -4098,7 +4099,7 @@
@override
void handleSpreadExpression(Token spreadToken) {
debugEvent("SpreadExpression");
- var expression = pop();
+ Object expression = pop();
if (!library.loader.target.enableSpreadCollections) {
handleRecoverableError(
fasta.templateUnexpectedToken.withArguments(spreadToken),
@@ -4418,7 +4419,7 @@
@override
void endForInControlFlow(Token token) {
debugEvent("ForInControlFlow");
- var entry = pop();
+ Object entry = pop();
Token inToken = pop();
Token forToken = pop();
Token awaitToken = pop(NullValue.AwaitToken);
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index a025fd0..d9ba7e9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -11,6 +11,7 @@
show
Constructor,
Field,
+ IntLiteral,
InvalidExpression,
Let,
Node,
@@ -85,6 +86,9 @@
import '../scope.dart';
+import '../type_inference/type_promotion.dart'
+ show TypePromotionFact, TypePromotionScope;
+
import 'body_builder.dart' show noLocation;
import 'constness.dart' show Constness;
@@ -194,7 +198,7 @@
/// The returned expression evaluates to the assigned value, unless
/// [voidContext] is true, in which case it may evaluate to anything.
Expression buildAssignment(Expression value, {bool voidContext: false}) {
- var complexAssignment = startComplexAssignment(value);
+ ComplexAssignmentJudgment complexAssignment = startComplexAssignment(value);
return _finish(_makeSimpleWrite(value, voidContext, complexAssignment),
complexAssignment);
}
@@ -215,9 +219,9 @@
Expression buildNullAwareAssignment(
Expression value, DartType type, int offset,
{bool voidContext: false}) {
- var complexAssignment = startComplexAssignment(value);
+ ComplexAssignmentJudgment complexAssignment = startComplexAssignment(value);
if (voidContext) {
- var nullAwareCombiner = _forest.createConditionalExpression(
+ Expression nullAwareCombiner = _forest.createConditionalExpression(
buildIsNull(_makeRead(complexAssignment), offset, _helper),
null,
_makeWrite(value, false, complexAssignment),
@@ -227,8 +231,9 @@
complexAssignment?.nullAwareCombiner = nullAwareCombiner;
return _finish(nullAwareCombiner, complexAssignment);
}
- var tmp = new VariableDeclaration.forValue(_makeRead(complexAssignment));
- var nullAwareCombiner = _forest.createConditionalExpression(
+ VariableDeclaration tmp =
+ new VariableDeclaration.forValue(_makeRead(complexAssignment));
+ Expression nullAwareCombiner = _forest.createConditionalExpression(
buildIsNull(new VariableGet(tmp), offset, _helper),
null,
_makeWrite(value, false, complexAssignment),
@@ -247,11 +252,11 @@
Procedure interfaceTarget,
bool isPreIncDec: false,
bool isPostIncDec: false}) {
- var complexAssignment = startComplexAssignment(value);
+ ComplexAssignmentJudgment complexAssignment = startComplexAssignment(value);
complexAssignment?.isPreIncDec = isPreIncDec;
complexAssignment?.isPostIncDec = isPostIncDec;
- var combiner = makeBinary(_makeRead(complexAssignment), binaryOperator,
- interfaceTarget, value, _helper,
+ Expression combiner = makeBinary(_makeRead(complexAssignment),
+ binaryOperator, interfaceTarget, value, _helper,
offset: offset);
complexAssignment?.combiner = combiner;
return _finish(_makeWrite(combiner, voidContext, complexAssignment),
@@ -286,18 +291,20 @@
interfaceTarget: interfaceTarget,
isPostIncDec: true);
}
- var rhs = _forest.createIntLiteral(1, null)..fileOffset = offset;
- var complexAssignment = startComplexAssignment(rhs);
- var value = new VariableDeclaration.forValue(_makeRead(complexAssignment));
+ IntLiteral rhs = _forest.createIntLiteral(1, null)..fileOffset = offset;
+ ComplexAssignmentJudgment complexAssignment = startComplexAssignment(rhs);
+ VariableDeclaration value =
+ new VariableDeclaration.forValue(_makeRead(complexAssignment));
valueAccess() => new VariableGet(value);
- var combiner = makeBinary(
+ Expression combiner = makeBinary(
valueAccess(), binaryOperator, interfaceTarget, rhs, _helper,
offset: offset);
complexAssignment?.combiner = combiner;
complexAssignment?.isPostIncDec = true;
- var dummy = new VariableDeclarationJudgment.forValue(
- _makeWrite(combiner, true, complexAssignment),
- _helper.functionNestingLevel);
+ VariableDeclarationJudgment dummy =
+ new VariableDeclarationJudgment.forValue(
+ _makeWrite(combiner, true, complexAssignment),
+ _helper.functionNestingLevel);
return _finish(
makeLet(value, makeLet(dummy, valueAccess())), complexAssignment);
}
@@ -531,10 +538,10 @@
@override
Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
- var fact = _helper.typePromoter
+ TypePromotionFact fact = _helper.typePromoter
?.getFactForAccess(variable, _helper.functionNestingLevel);
- var scope = _helper.typePromoter?.currentScope;
- var read = new VariableGetJudgment(variable, fact, scope)
+ TypePromotionScope scope = _helper.typePromoter?.currentScope;
+ VariableGetJudgment read = new VariableGetJudgment(variable, fact, scope)
..fileOffset = offsetForToken(token);
complexAssignment?.read = read;
return read;
@@ -664,7 +671,7 @@
@override
Expression _makeSimpleWrite(Expression value, bool voidContext,
ComplexAssignmentJudgment complexAssignment) {
- var write = new PropertySet(receiver, name, value, setter)
+ PropertySet write = new PropertySet(receiver, name, value, setter)
..fileOffset = offsetForToken(token);
complexAssignment?.write = write;
return write;
@@ -672,7 +679,7 @@
@override
Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
- var read = new PropertyGet(receiverAccess(), name, getter)
+ PropertyGet read = new PropertyGet(receiverAccess(), name, getter)
..fileOffset = offsetForToken(token);
complexAssignment?.read = read;
return read;
@@ -681,7 +688,7 @@
@override
Expression _makeWrite(Expression value, bool voidContext,
ComplexAssignmentJudgment complexAssignment) {
- var write = new PropertySet(receiverAccess(), name, value, setter)
+ PropertySet write = new PropertySet(receiverAccess(), name, value, setter)
..fileOffset = offsetForToken(token);
complexAssignment?.write = write;
return write;
@@ -780,7 +787,7 @@
if (getter == null) {
_helper.warnUnresolvedGet(name, offsetForToken(token));
}
- var read =
+ PropertyGet read =
new PropertyGet(_forest.createThisExpression(token), name, getter)
..fileOffset = offsetForToken(token);
complexAssignment?.read = read;
@@ -793,7 +800,7 @@
if (setter == null) {
_helper.warnUnresolvedSet(name, offsetForToken(token));
}
- var write = new PropertySet(
+ PropertySet write = new PropertySet(
_forest.createThisExpression(token), name, value, setter)
..fileOffset = offsetForToken(token);
complexAssignment?.write = write;
@@ -866,7 +873,7 @@
@override
Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
- var read = new PropertyGet(receiverAccess(), name, getter)
+ PropertyGet read = new PropertyGet(receiverAccess(), name, getter)
..fileOffset = offsetForToken(token);
complexAssignment?.read = read;
return read;
@@ -875,7 +882,7 @@
@override
Expression _makeWrite(Expression value, bool voidContext,
ComplexAssignmentJudgment complexAssignment) {
- var write = new PropertySet(receiverAccess(), name, value, setter)
+ PropertySet write = new PropertySet(receiverAccess(), name, value, setter)
..fileOffset = offsetForToken(token);
complexAssignment?.write = write;
return write;
@@ -884,8 +891,8 @@
@override
Expression _finish(
Expression body, ComplexAssignmentJudgment complexAssignment) {
- var offset = offsetForToken(token);
- var nullAwareGuard = _forest.createConditionalExpression(
+ int offset = offsetForToken(token);
+ Expression nullAwareGuard = _forest.createConditionalExpression(
buildIsNull(receiverAccess(), offset, _helper),
null,
_forest.createNullLiteral(null)..fileOffset = offset,
@@ -955,8 +962,9 @@
_helper.warnUnresolvedGet(name, offsetForToken(token), isSuper: true);
}
// TODO(ahe): Use [DirectPropertyGet] when possible.
- var read = new SuperPropertyGetJudgment(name, interfaceTarget: getter)
- ..fileOffset = offsetForToken(token);
+ SuperPropertyGetJudgment read =
+ new SuperPropertyGetJudgment(name, interfaceTarget: getter)
+ ..fileOffset = offsetForToken(token);
complexAssignment?.read = read;
return read;
}
@@ -968,7 +976,7 @@
_helper.warnUnresolvedSet(name, offsetForToken(token), isSuper: true);
}
// TODO(ahe): Use [DirectPropertySet] when possible.
- var write = new SuperPropertySet(name, value, setter)
+ SuperPropertySet write = new SuperPropertySet(name, value, setter)
..fileOffset = offsetForToken(token);
complexAssignment?.write = write;
return write;
@@ -1048,8 +1056,8 @@
@override
Expression _makeSimpleRead() {
- var read = new MethodInvocationJudgment(receiver, indexGetName,
- _forest.createArguments(<Expression>[index], token),
+ MethodInvocationJudgment read = new MethodInvocationJudgment(receiver,
+ indexGetName, _forest.createArguments(<Expression>[index], token),
interfaceTarget: getter)
..fileOffset = offsetForToken(token);
return read;
@@ -1059,7 +1067,9 @@
Expression _makeSimpleWrite(Expression value, bool voidContext,
ComplexAssignmentJudgment complexAssignment) {
if (!voidContext) return _makeWriteAndReturn(value, complexAssignment);
- var write = new MethodInvocationJudgment(receiver, indexSetName,
+ MethodInvocationJudgment write = new MethodInvocationJudgment(
+ receiver,
+ indexSetName,
_forest.createArguments(<Expression>[index, value], token),
interfaceTarget: setter)
..fileOffset = offsetForToken(token);
@@ -1069,7 +1079,9 @@
@override
Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
- var read = new MethodInvocationJudgment(receiverAccess(), indexGetName,
+ MethodInvocationJudgment read = new MethodInvocationJudgment(
+ receiverAccess(),
+ indexGetName,
_forest.createArguments(<Expression>[indexAccess()], token),
interfaceTarget: getter)
..fileOffset = offsetForToken(token);
@@ -1081,7 +1093,9 @@
Expression _makeWrite(Expression value, bool voidContext,
ComplexAssignmentJudgment complexAssignment) {
if (!voidContext) return _makeWriteAndReturn(value, complexAssignment);
- var write = new MethodInvocationJudgment(receiverAccess(), indexSetName,
+ MethodInvocationJudgment write = new MethodInvocationJudgment(
+ receiverAccess(),
+ indexSetName,
_forest.createArguments(<Expression>[indexAccess(), value], token),
interfaceTarget: setter)
..fileOffset = offsetForToken(token);
@@ -1095,8 +1109,8 @@
Expression value, ComplexAssignmentJudgment complexAssignment) {
// The call to []= does not return the value like direct-style assignments
// do. We need to bind the value in a let.
- var valueVariable = new VariableDeclaration.forValue(value);
- var write = new MethodInvocationJudgment(
+ VariableDeclaration valueVariable = new VariableDeclaration.forValue(value);
+ MethodInvocationJudgment write = new MethodInvocationJudgment(
receiverAccess(),
indexSetName,
_forest.createArguments(
@@ -1104,8 +1118,9 @@
interfaceTarget: setter)
..fileOffset = offsetForToken(token);
complexAssignment?.write = write;
- var dummy = new VariableDeclarationJudgment.forValue(
- write, _helper.functionNestingLevel);
+ VariableDeclarationJudgment dummy =
+ new VariableDeclarationJudgment.forValue(
+ write, _helper.functionNestingLevel);
return makeLet(
valueVariable, makeLet(dummy, new VariableGet(valueVariable)));
}
@@ -1194,8 +1209,8 @@
Expression _makeWriteAndReturn(
Expression value, ComplexAssignmentJudgment complexAssignment) {
- var valueVariable = new VariableDeclaration.forValue(value);
- var write = new MethodInvocationJudgment(
+ VariableDeclaration valueVariable = new VariableDeclaration.forValue(value);
+ MethodInvocationJudgment write = new MethodInvocationJudgment(
_forest.createThisExpression(token),
indexSetName,
_forest.createArguments(
@@ -1203,7 +1218,7 @@
interfaceTarget: setter)
..fileOffset = offsetForToken(token);
complexAssignment?.write = write;
- var dummy = new VariableDeclaration.forValue(write);
+ VariableDeclaration dummy = new VariableDeclaration.forValue(write);
return makeLet(
valueVariable, makeLet(dummy, new VariableGet(valueVariable)));
}
@@ -1220,7 +1235,7 @@
Expression _makeSimpleWrite(Expression value, bool voidContext,
ComplexAssignmentJudgment complexAssignment) {
if (!voidContext) return _makeWriteAndReturn(value, complexAssignment);
- var write = new MethodInvocationJudgment(
+ MethodInvocationJudgment write = new MethodInvocationJudgment(
_forest.createThisExpression(token),
indexSetName,
_forest.createArguments(<Expression>[index, value], token),
@@ -1232,7 +1247,7 @@
@override
Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
- var read = new MethodInvocationJudgment(
+ MethodInvocationJudgment read = new MethodInvocationJudgment(
_forest.createThisExpression(token),
indexGetName,
_forest.createArguments(<Expression>[indexAccess()], token),
@@ -1246,7 +1261,7 @@
Expression _makeWrite(Expression value, bool voidContext,
ComplexAssignmentJudgment complexAssignment) {
if (!voidContext) return _makeWriteAndReturn(value, complexAssignment);
- var write = new MethodInvocationJudgment(
+ MethodInvocationJudgment write = new MethodInvocationJudgment(
_forest.createThisExpression(token),
indexSetName,
_forest.createArguments(<Expression>[indexAccess(), value], token),
@@ -1311,19 +1326,19 @@
Expression _makeWriteAndReturn(
Expression value, ComplexAssignmentJudgment complexAssignment) {
- var valueVariable = new VariableDeclaration.forValue(value);
+ VariableDeclaration valueVariable = new VariableDeclaration.forValue(value);
if (setter == null) {
_helper.warnUnresolvedMethod(indexSetName, offsetForToken(token),
isSuper: true);
}
- var write = new SuperMethodInvocation(
+ SuperMethodInvocation write = new SuperMethodInvocation(
indexSetName,
_forest.createArguments(
<Expression>[indexAccess(), new VariableGet(valueVariable)], token),
setter)
..fileOffset = offsetForToken(token);
complexAssignment?.write = write;
- var dummy = new VariableDeclaration.forValue(write);
+ VariableDeclaration dummy = new VariableDeclaration.forValue(write);
return makeLet(
valueVariable, makeLet(dummy, new VariableGet(valueVariable)));
}
@@ -1349,7 +1364,7 @@
_helper.warnUnresolvedMethod(indexSetName, offsetForToken(token),
isSuper: true);
}
- var write = new SuperMethodInvocation(indexSetName,
+ SuperMethodInvocation write = new SuperMethodInvocation(indexSetName,
_forest.createArguments(<Expression>[index, value], token), setter)
..fileOffset = offsetForToken(token);
complexAssignment?.write = write;
@@ -1362,7 +1377,7 @@
_helper.warnUnresolvedMethod(indexGetName, offsetForToken(token),
isSuper: true);
}
- var read = new SuperMethodInvocation(indexGetName,
+ SuperMethodInvocation read = new SuperMethodInvocation(indexGetName,
_forest.createArguments(<Expression>[indexAccess()], token), getter)
..fileOffset = offsetForToken(token);
complexAssignment?.read = read;
@@ -1377,7 +1392,7 @@
_helper.warnUnresolvedMethod(indexSetName, offsetForToken(token),
isSuper: true);
}
- var write = new SuperMethodInvocation(
+ SuperMethodInvocation write = new SuperMethodInvocation(
indexSetName,
_forest.createArguments(<Expression>[indexAccess(), value], token),
setter)
@@ -1802,7 +1817,7 @@
@override
Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
builder.importDependency.targetLibrary;
- var read = new LoadLibraryTearOffJudgment(
+ LoadLibraryTearOffJudgment read = new LoadLibraryTearOffJudgment(
builder.importDependency, builder.createTearoffMethod(_helper.forest))
..fileOffset = offsetForToken(token);
complexAssignment?.read = read;
@@ -3266,7 +3281,7 @@
sink.write(", name: ");
sink.write(name.name);
sink.write(", arguments: ");
- var node = arguments;
+ Arguments node = arguments;
if (node is Node) {
printNodeOn(node, sink);
} else {
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 2c7a1d3..dcfc73d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -56,9 +56,9 @@
}
void visitAssertStatementJudgment(AssertStatementJudgment node) {
- var conditionJudgment = node.conditionJudgment;
- var messageJudgment = node.messageJudgment;
- var expectedType = inferrer.coreTypes.boolClass.rawType;
+ Expression conditionJudgment = node.conditionJudgment;
+ Expression messageJudgment = node.messageJudgment;
+ InterfaceType expectedType = inferrer.coreTypes.boolClass.rawType;
inferrer.inferExpression(
conditionJudgment, expectedType, !inferrer.isTopLevel);
inferrer.ensureAssignable(
@@ -77,7 +77,7 @@
if (!inferrer.typeSchemaEnvironment.isEmptyContext(typeContext)) {
typeContext = inferrer.wrapFutureOrType(typeContext);
}
- var operand = node.operand;
+ Expression operand = node.operand;
inferrer.inferExpression(operand, typeContext, true, isVoidAllowed: true);
inferrer.storeInferredType(
node,
@@ -86,7 +86,7 @@
}
void visitBlockJudgment(BlockJudgment node) {
- for (var judgment in node.judgments) {
+ for (Statement judgment in node.judgments) {
inferrer.inferStatement(judgment);
}
}
@@ -103,7 +103,7 @@
node.inferredType =
inferrer.inferExpression(node.targetJudgment, typeContext, true);
node.variable.type = getInferredType(node, inferrer);
- for (var judgment in node.cascadeJudgments) {
+ for (Expression judgment in node.cascadeJudgments) {
inferrer.inferExpression(
judgment, const UnknownType(), !inferrer.isTopLevel,
isVoidAllowed: true);
@@ -114,10 +114,10 @@
@override
void visitConditionalExpression(
ConditionalExpression node, DartType typeContext) {
- var condition = node.condition;
- var then = node.then;
- var otherwise = node.otherwise;
- var expectedType = inferrer.coreTypes.boolClass.rawType;
+ Expression condition = node.condition;
+ Expression then = node.then;
+ Expression otherwise = node.otherwise;
+ InterfaceType expectedType = inferrer.coreTypes.boolClass.rawType;
inferrer.inferExpression(condition, expectedType, !inferrer.isTopLevel);
inferrer.ensureAssignable(
expectedType,
@@ -135,7 +135,7 @@
@override
void visitConstructorInvocation(
ConstructorInvocation node, DartType typeContext) {
- var library = inferrer.engine.beingInferred[node.target];
+ LibraryBuilder library = inferrer.engine.beingInferred[node.target];
if (library != null) {
// There is a cyclic dependency where inferring the types of the
// initializing formals of a constructor required us to infer the
@@ -152,26 +152,30 @@
node.target.fileOffset,
name.length,
node.target.fileUri);
- for (var declaration in node.target.function.positionalParameters) {
+ for (VariableDeclaration declaration
+ in node.target.function.positionalParameters) {
declaration.type ??= const InvalidType();
}
- for (var declaration in node.target.function.namedParameters) {
+ for (VariableDeclaration declaration
+ in node.target.function.namedParameters) {
declaration.type ??= const InvalidType();
}
} else if ((library = inferrer.engine.toBeInferred[node.target]) != null) {
inferrer.engine.toBeInferred.remove(node.target);
inferrer.engine.beingInferred[node.target] = library;
- for (var declaration in node.target.function.positionalParameters) {
+ for (VariableDeclaration declaration
+ in node.target.function.positionalParameters) {
inferrer.engine.inferInitializingFormal(declaration, node.target);
}
- for (var declaration in node.target.function.namedParameters) {
+ for (VariableDeclaration declaration
+ in node.target.function.namedParameters) {
inferrer.engine.inferInitializingFormal(declaration, node.target);
}
inferrer.engine.beingInferred.remove(node.target);
}
bool hasExplicitTypeArguments =
getExplicitTypeArguments(node.arguments) != null;
- var inferenceResult = inferrer.inferInvocation(
+ ExpressionInferenceResult inferenceResult = inferrer.inferInvocation(
typeContext,
node.fileOffset,
node.target.function.functionType,
@@ -196,16 +200,16 @@
DeferredCheckJudgment node, DartType typeContext) {
// Since the variable is not used in the body we don't need to type infer
// it. We can just type infer the body.
- var judgment = node.judgment;
+ Expression judgment = node.judgment;
inferrer.inferExpression(judgment, typeContext, true, isVoidAllowed: true);
node.inferredType = getInferredType(judgment, inferrer);
return null;
}
void visitDoJudgment(DoJudgment node) {
- var conditionJudgment = node.conditionJudgment;
+ Expression conditionJudgment = node.conditionJudgment;
inferrer.inferStatement(node.body);
- var boolType = inferrer.coreTypes.boolClass.rawType;
+ InterfaceType boolType = inferrer.coreTypes.boolClass.rawType;
inferrer.inferExpression(conditionJudgment, boolType, !inferrer.isTopLevel);
inferrer.ensureAssignable(
boolType,
@@ -232,7 +236,7 @@
FactoryConstructorInvocationJudgment node, DartType typeContext) {
bool hadExplicitTypeArguments =
getExplicitTypeArguments(node.arguments) != null;
- var inferenceResult = inferrer.inferInvocation(
+ ExpressionInferenceResult inferenceResult = inferrer.inferInvocation(
typeContext,
node.fileOffset,
node.target.function.functionType,
@@ -252,7 +256,7 @@
}
void visitShadowFieldInitializer(ShadowFieldInitializer node) {
- var initializerType =
+ DartType initializerType =
inferrer.inferExpression(node.value, node.field.type, true);
inferrer.ensureAssignable(
node.field.type, initializerType, node.value, node.fileOffset);
@@ -410,7 +414,7 @@
}
void visitForJudgment(ForJudgment node) {
- var conditionJudgment = node.conditionJudgment;
+ Expression conditionJudgment = node.conditionJudgment;
for (VariableDeclaration variable in node.variables) {
if (variable.name == null) {
Expression initializer = variable.initializer;
@@ -424,7 +428,7 @@
}
}
if (conditionJudgment != null) {
- var expectedType = inferrer.coreTypes.boolClass.rawType;
+ InterfaceType expectedType = inferrer.coreTypes.boolClass.rawType;
inferrer.inferExpression(
conditionJudgment, expectedType, !inferrer.isTopLevel);
inferrer.ensureAssignable(
@@ -433,7 +437,7 @@
node.condition,
node.condition.fileOffset);
}
- for (var update in node.updateJudgments) {
+ for (Expression update in node.updateJudgments) {
inferrer.inferExpression(
update, const UnknownType(), !inferrer.isTopLevel,
isVoidAllowed: true);
@@ -454,22 +458,22 @@
inferrer.inferMetadataKeepingHelper(node.variable.annotations);
DartType returnContext =
node._hasImplicitReturnType ? null : node.function.returnType;
- var inferenceResult = visitFunctionNodeJudgment(
+ ExpressionInferenceResult inferenceResult = visitFunctionNodeJudgment(
node.functionJudgment, null, returnContext, node.fileOffset);
node.variable.type = inferenceResult.type;
}
@override
void visitFunctionExpression(FunctionExpression node, DartType typeContext) {
- var inferenceResult = visitFunctionNodeJudgment(
+ ExpressionInferenceResult inferenceResult = visitFunctionNodeJudgment(
node.function, typeContext, null, node.fileOffset);
inferrer.storeInferredType(node, inferenceResult.type);
}
void visitInvalidSuperInitializerJudgment(
InvalidSuperInitializerJudgment node) {
- var substitution = Substitution.fromSupertype(inferrer.classHierarchy
- .getClassAsInstanceOf(
+ Substitution substitution = Substitution.fromSupertype(
+ inferrer.classHierarchy.getClassAsInstanceOf(
inferrer.thisType.classNode, node.target.enclosingClass));
inferrer.inferInvocation(
null,
@@ -482,12 +486,12 @@
}
void visitIfNullJudgment(IfNullJudgment node, DartType typeContext) {
- var leftJudgment = node.leftJudgment;
- var rightJudgment = node.rightJudgment;
+ Expression leftJudgment = node.leftJudgment;
+ Expression rightJudgment = node.rightJudgment;
// To infer `e0 ?? e1` in context K:
// - Infer e0 in context K to get T0
inferrer.inferExpression(leftJudgment, typeContext, true);
- var lhsType = getInferredType(leftJudgment, inferrer);
+ DartType lhsType = getInferredType(leftJudgment, inferrer);
node.variable.type = lhsType;
// - Let J = T0 if K is `?` else K.
// - Infer e1 in context J to get T1
@@ -498,7 +502,7 @@
inferrer.inferExpression(rightJudgment, typeContext, true,
isVoidAllowed: true);
}
- var rhsType = getInferredType(rightJudgment, inferrer);
+ DartType rhsType = getInferredType(rightJudgment, inferrer);
// - Let T = greatest closure of K with respect to `?` if K is not `_`, else
// UP(t0, t1)
// - Then the inferred type is T.
@@ -509,8 +513,8 @@
}
void visitIfJudgment(IfJudgment node) {
- var conditionJudgment = node.conditionJudgment;
- var expectedType = inferrer.coreTypes.boolClass.rawType;
+ Expression conditionJudgment = node.conditionJudgment;
+ InterfaceType expectedType = inferrer.coreTypes.boolClass.rawType;
inferrer.inferExpression(
conditionJudgment, expectedType, !inferrer.isTopLevel);
inferrer.ensureAssignable(
@@ -539,13 +543,13 @@
void visitIndexAssignmentJudgment(
IndexAssignmentJudgment node, DartType typeContext) {
- var receiverType = node._inferReceiver(inferrer);
- var writeMember =
+ DartType receiverType = node._inferReceiver(inferrer);
+ Object writeMember =
inferrer.findMethodInvocationMember(receiverType, node.write);
// To replicate analyzer behavior, we base type inference on the write
// member. TODO(paulberry): would it be better to use the read member
// when doing compound assignment?
- var calleeType = inferrer.getCalleeFunctionType(
+ FunctionType calleeType = inferrer.getCalleeFunctionType(
inferrer.getCalleeType(writeMember, receiverType), false);
DartType expectedIndexTypeForWrite;
DartType indexContext = const UnknownType();
@@ -558,7 +562,7 @@
writeContext = calleeType.positionalParameters[1];
}
inferrer.inferExpression(node.index, indexContext, true);
- var indexType = getInferredType(node.index, inferrer);
+ DartType indexType = getInferredType(node.index, inferrer);
node._storeLetType(inferrer, node.index, indexType);
if (writeContext is! UnknownType) {
inferrer.ensureAssignable(
@@ -570,9 +574,9 @@
InvocationExpression read = node.read;
DartType readType;
if (read != null) {
- var readMember = inferrer.findMethodInvocationMember(receiverType, read,
- instrumented: false);
- var calleeFunctionType = inferrer.getCalleeFunctionType(
+ Object readMember = inferrer
+ .findMethodInvocationMember(receiverType, read, instrumented: false);
+ FunctionType calleeFunctionType = inferrer.getCalleeFunctionType(
inferrer.getCalleeType(readMember, receiverType), false);
inferrer.ensureAssignable(
getPositionalParameterType(calleeFunctionType, 0),
@@ -580,10 +584,12 @@
node._getInvocationArguments(inferrer, read).positional[0],
read.fileOffset);
readType = calleeFunctionType.returnType;
- var desugaredInvocation = read is MethodInvocation ? read : null;
- var checkKind = inferrer.preCheckInvocationContravariance(node.receiver,
- receiverType, readMember, desugaredInvocation, read.arguments, read);
- var replacedRead = inferrer.handleInvocationContravariance(
+ MethodInvocation desugaredInvocation =
+ read is MethodInvocation ? read : null;
+ MethodContravarianceCheckKind checkKind =
+ inferrer.preCheckInvocationContravariance(node.receiver, receiverType,
+ readMember, desugaredInvocation, read.arguments, read);
+ Expression replacedRead = inferrer.handleInvocationContravariance(
checkKind,
desugaredInvocation,
read.arguments,
@@ -855,8 +861,8 @@
void visitListLiteralJudgment(
ListLiteralJudgment node, DartType typeContext) {
- var listClass = inferrer.coreTypes.listClass;
- var listType = listClass.thisType;
+ Class listClass = inferrer.coreTypes.listClass;
+ InterfaceType listType = listClass.thisType;
List<DartType> inferredTypes;
DartType inferredTypeArgument;
List<DartType> formalTypes;
@@ -930,9 +936,9 @@
@override
void visitLogicalExpression(LogicalExpression node, DartType typeContext) {
- var boolType = inferrer.coreTypes.boolClass.rawType;
- var left = node.left;
- var right = node.right;
+ InterfaceType boolType = inferrer.coreTypes.boolClass.rawType;
+ Expression left = node.left;
+ Expression right = node.right;
inferrer.inferExpression(left, boolType, !inferrer.isTopLevel);
inferrer.inferExpression(right, boolType, !inferrer.isTopLevel);
inferrer.ensureAssignable(boolType, getInferredType(left, inferrer),
@@ -1267,8 +1273,8 @@
}
void visitMapLiteralJudgment(MapLiteralJudgment node, DartType typeContext) {
- var mapClass = inferrer.coreTypes.mapClass;
- var mapType = mapClass.thisType;
+ Class mapClass = inferrer.coreTypes.mapClass;
+ InterfaceType mapType = mapClass.thisType;
List<DartType> inferredTypes;
DartType inferredKeyType;
DartType inferredValueType;
@@ -1551,7 +1557,7 @@
}
}
}
- var inferenceResult = inferrer.inferMethodInvocation(
+ ExpressionInferenceResult inferenceResult = inferrer.inferMethodInvocation(
node, node.receiver, node.fileOffset, node._isImplicitCall, typeContext,
desugaredInvocation: node);
node.inferredType = inferenceResult.type;
@@ -1568,8 +1574,8 @@
@override
void visitNot(Not node, DartType typeContext) {
- var operand = node.operand;
- var boolType = inferrer.coreTypes.boolClass.rawType;
+ Expression operand = node.operand;
+ InterfaceType boolType = inferrer.coreTypes.boolClass.rawType;
inferrer.inferExpression(operand, boolType, !inferrer.isTopLevel);
inferrer.ensureAssignable(boolType, getInferredType(operand, inferrer),
node.operand, node.fileOffset);
@@ -1577,7 +1583,7 @@
void visitNullAwareMethodInvocationJudgment(
NullAwareMethodInvocationJudgment node, DartType typeContext) {
- var inferenceResult = inferrer.inferMethodInvocation(
+ ExpressionInferenceResult inferenceResult = inferrer.inferMethodInvocation(
node, node.variable.initializer, node.fileOffset, false, typeContext,
receiverVariable: node.variable,
desugaredInvocation: node._desugaredInvocation);
@@ -1615,12 +1621,12 @@
void visitPropertyAssignmentJudgment(
PropertyAssignmentJudgment node, DartType typeContext) {
- var receiverType = node._inferReceiver(inferrer);
+ DartType receiverType = node._inferReceiver(inferrer);
DartType readType;
if (node.read != null) {
- var readMember = inferrer.findPropertyGetMember(receiverType, node.read,
- instrumented: false);
+ Object readMember = inferrer
+ .findPropertyGetMember(receiverType, node.read, instrumented: false);
readType = inferrer.getCalleeType(readMember, receiverType);
inferrer.handlePropertyGetContravariance(
node.receiver,
@@ -1638,7 +1644,7 @@
// To replicate analyzer behavior, we base type inference on the write
// member. TODO(paulberry): would it be better to use the read member when
// doing compound assignment?
- var writeContext = inferrer.getSetterType(writeMember, receiverType);
+ DartType writeContext = inferrer.getSetterType(writeMember, receiverType);
node._inferRhs(inferrer, readType, writeContext);
node.nullAwareGuard?.staticType = node.inferredType;
node._replaceWithDesugared();
@@ -1676,8 +1682,8 @@
void visitRethrow(Rethrow node, DartType typeContext) {}
void visitReturnJudgment(ReturnJudgment node) {
- var judgment = node.judgment;
- var closureContext = inferrer.closureContext;
+ Expression judgment = node.judgment;
+ ClosureContext closureContext = inferrer.closureContext;
DartType typeContext = !closureContext.isGenerator
? closureContext.returnOrYieldContext
: const UnknownType();
@@ -1694,8 +1700,8 @@
}
void visitSetLiteralJudgment(SetLiteralJudgment node, DartType typeContext) {
- var setClass = inferrer.coreTypes.setClass;
- var setType = setClass.thisType;
+ Class setClass = inferrer.coreTypes.setClass;
+ InterfaceType setType = setClass.thisType;
List<DartType> inferredTypes;
DartType inferredTypeArgument;
List<DartType> formalTypes;
@@ -1772,14 +1778,14 @@
void visitStaticAssignmentJudgment(
StaticAssignmentJudgment node, DartType typeContext) {
DartType readType = const DynamicType(); // Only used in error recovery
- var read = node.read;
+ Expression read = node.read;
if (read is StaticGet) {
readType = read.target.getterType;
node._storeLetType(inferrer, read, readType);
}
Member writeMember;
DartType writeContext = const UnknownType();
- var write = node.write;
+ Expression write = node.write;
if (write is StaticSet) {
writeContext = write.target.setterType;
writeMember = write.target;
@@ -1792,9 +1798,9 @@
@override
void visitStaticGet(StaticGet node, DartType typeContext) {
- var target = node.target;
+ Member target = node.target;
TypeInferenceEngine.resolveInferenceNode(target);
- var type = target.getterType;
+ DartType type = target.getterType;
if (target is Procedure && target.kind == ProcedureKind.Method) {
type = inferrer.instantiateTearOff(type, typeContext, node);
}
@@ -1808,8 +1814,12 @@
: new FunctionType([], const DynamicType());
bool hadExplicitTypeArguments =
getExplicitTypeArguments(node.arguments) != null;
- var inferenceResult = inferrer.inferInvocation(typeContext, node.fileOffset,
- calleeType, calleeType.returnType, node.arguments);
+ ExpressionInferenceResult inferenceResult = inferrer.inferInvocation(
+ typeContext,
+ node.fileOffset,
+ calleeType,
+ calleeType.returnType,
+ node.arguments);
inferrer.storeInferredType(node, inferenceResult.type);
if (!hadExplicitTypeArguments && node.target != null) {
inferrer.library?.checkBoundsInStaticInvocation(
@@ -1822,7 +1832,7 @@
void visitStringConcatenation(
StringConcatenation node, DartType typeContext) {
if (!inferrer.isTopLevel) {
- for (var expression in node.expressions) {
+ for (Expression expression in node.expressions) {
inferrer.inferExpression(
expression, const UnknownType(), !inferrer.isTopLevel);
}
@@ -1833,8 +1843,8 @@
void visitStringLiteral(StringLiteral node, DartType typeContext) {}
void visitSuperInitializerJudgment(SuperInitializerJudgment node) {
- var substitution = Substitution.fromSupertype(inferrer.classHierarchy
- .getClassAsInstanceOf(
+ Substitution substitution = Substitution.fromSupertype(
+ inferrer.classHierarchy.getClassAsInstanceOf(
inferrer.thisType.classNode, node.target.enclosingClass));
inferrer.inferInvocation(
null,
@@ -1852,7 +1862,7 @@
inferrer.instrumentation?.record(inferrer.uri, node.fileOffset, 'target',
new InstrumentationValueForMember(node.interfaceTarget));
}
- var inferenceResult = inferrer.inferMethodInvocation(
+ ExpressionInferenceResult inferenceResult = inferrer.inferMethodInvocation(
node, null, node.fileOffset, false, typeContext,
interfaceMember: node.interfaceTarget,
methodName: node.name,
@@ -1871,12 +1881,12 @@
}
void visitSwitchStatementJudgment(SwitchStatementJudgment node) {
- var expressionJudgment = node.expressionJudgment;
+ Expression expressionJudgment = node.expressionJudgment;
inferrer.inferExpression(expressionJudgment, const UnknownType(), true);
- var expressionType = getInferredType(expressionJudgment, inferrer);
+ DartType expressionType = getInferredType(expressionJudgment, inferrer);
- for (var switchCase in node.caseJudgments) {
- for (var caseExpression in switchCase.expressionJudgments) {
+ for (SwitchCaseJudgment switchCase in node.caseJudgments) {
+ for (Expression caseExpression in switchCase.expressionJudgments) {
DartType caseExpressionType =
inferrer.inferExpression(caseExpression, expressionType, true);
@@ -1958,7 +1968,7 @@
void visitTryCatchJudgment(TryCatchJudgment node) {
inferrer.inferStatement(node.body);
- for (var catch_ in node.catchJudgments) {
+ for (CatchJudgment catch_ in node.catchJudgments) {
visitCatchJudgment(catch_);
}
}
@@ -1977,12 +1987,12 @@
void visitVariableAssignmentJudgment(
VariableAssignmentJudgment node, DartType typeContext) {
DartType readType;
- var read = node.read;
+ Expression read = node.read;
if (read is VariableGet) {
readType = read.promotedType ?? read.variable.type;
}
DartType writeContext = const UnknownType();
- var write = node.write;
+ Expression write = node.write;
if (write is VariableSet) {
writeContext = write.variable.type;
if (read != null) {
@@ -1995,8 +2005,9 @@
}
void visitVariableDeclarationJudgment(VariableDeclarationJudgment node) {
- var initializerJudgment = node.initializerJudgment;
- var declaredType = node._implicitlyTyped ? const UnknownType() : node.type;
+ Expression initializerJudgment = node.initializerJudgment;
+ DartType declaredType =
+ node._implicitlyTyped ? const UnknownType() : node.type;
DartType inferredType;
DartType initializerType;
if (initializerJudgment != null) {
@@ -2014,7 +2025,7 @@
node.type = inferredType;
}
if (node.initializer != null) {
- var replacedInitializer = inferrer.ensureAssignable(
+ Expression replacedInitializer = inferrer.ensureAssignable(
node.type, initializerType, node.initializer, node.fileOffset,
isVoidAllowed: node.type is VoidType);
if (replacedInitializer != null) {
@@ -2033,7 +2044,7 @@
void visitUnresolvedTargetInvocationJudgment(
UnresolvedTargetInvocationJudgment node, DartType typeContext) {
- var result = visitSyntheticExpressionJudgment(node, typeContext);
+ void result = visitSyntheticExpressionJudgment(node, typeContext);
inferrer.inferInvocation(
typeContext,
node.fileOffset,
@@ -2065,7 +2076,7 @@
'promotedType', new InstrumentationValueForType(promotedType));
}
node.promotedType = promotedType;
- var type = promotedType ?? declaredOrInferredType;
+ DartType type = promotedType ?? declaredOrInferredType;
if (variable._isLocalFunction) {
type = inferrer.instantiateTearOff(type, typeContext, node);
}
@@ -2074,8 +2085,8 @@
}
void visitWhileJudgment(WhileJudgment node) {
- var conditionJudgment = node.conditionJudgment;
- var expectedType = inferrer.coreTypes.boolClass.rawType;
+ Expression conditionJudgment = node.conditionJudgment;
+ InterfaceType expectedType = inferrer.coreTypes.boolClass.rawType;
inferrer.inferExpression(
conditionJudgment, expectedType, !inferrer.isTopLevel);
inferrer.ensureAssignable(
@@ -2087,10 +2098,10 @@
}
void visitYieldJudgment(YieldJudgment node) {
- var judgment = node.judgment;
- var closureContext = inferrer.closureContext;
+ Expression judgment = node.judgment;
+ ClosureContext closureContext = inferrer.closureContext;
if (closureContext.isGenerator) {
- var typeContext = closureContext.returnOrYieldContext;
+ DartType typeContext = closureContext.returnOrYieldContext;
if (node.isYieldStar && typeContext != null) {
typeContext = inferrer.wrapType(
typeContext,
@@ -2111,7 +2122,7 @@
node.inferredType =
inferrer.typeSchemaEnvironment.futureType(const DynamicType());
if (node.arguments != null) {
- var calleeType = new FunctionType([], node.inferredType);
+ FunctionType calleeType = new FunctionType([], node.inferredType);
inferrer.inferInvocation(typeContext, node.fileOffset, calleeType,
calleeType.returnType, node.argumentJudgments);
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index db9a1c5..00f8141 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -33,6 +33,8 @@
InstrumentationValueForType,
InstrumentationValueForTypeArgs;
+import '../builder/library_builder.dart' show LibraryBuilder;
+
import '../fasta_codes.dart'
show
messageCantDisambiguateAmbiguousInformation,
@@ -65,7 +67,12 @@
show IncludesTypeParametersNonCovariantly, TypeInferenceEngine;
import '../type_inference/type_inferrer.dart'
- show ExpressionInferenceResult, TypeInferrer, TypeInferrerImpl;
+ show
+ ClosureContext,
+ ExpressionInferenceResult,
+ MethodContravarianceCheckKind,
+ TypeInferrer,
+ TypeInferrerImpl;
import '../type_inference/type_promotion.dart'
show TypePromoter, TypePromoterImpl, TypePromotionFact, TypePromotionScope;
@@ -323,7 +330,7 @@
ComplexAssignmentJudgment._(this.rhs) : super._(null);
String toString() {
- var parts = _getToStringParts();
+ List<String> parts = _getToStringParts();
return '${runtimeType}(${parts.join(', ')})';
}
@@ -350,7 +357,7 @@
inferrer.helper
?.addProblem(messageVoidExpression, read.fileOffset, noLength);
}
- var writeOffset = write == null ? -1 : write.fileOffset;
+ int writeOffset = write == null ? -1 : write.fileOffset;
Procedure combinerMember;
DartType combinedType;
if (combiner != null) {
@@ -362,7 +369,7 @@
.isOverloadedArithmeticOperatorAndType(combinerMember, readType);
}
DartType rhsType;
- var combinerType = inferrer.getCalleeFunctionType(
+ FunctionType combinerType = inferrer.getCalleeFunctionType(
inferrer.getCalleeType(combinerMember, readType), false);
if (isPreIncDec || isPostIncDec) {
rhsType = inferrer.coreTypes.intClass.rawType;
@@ -377,7 +384,7 @@
rhsType = getInferredType(rhs, inferrer);
// Do not use rhs after this point because it may be a Shadow node
// that has been replaced in the tree with its desugaring.
- var expectedType = getPositionalParameterType(combinerType, 0);
+ DartType expectedType = getPositionalParameterType(combinerType, 0);
inferrer.ensureAssignable(expectedType, rhsType,
combiner.arguments.positional.first, combiner.fileOffset);
}
@@ -387,9 +394,10 @@
} else {
combinedType = combinerType.returnType;
}
- var checkKind = inferrer.preCheckInvocationContravariance(read, readType,
- combinerMember, combiner, combiner.arguments, combiner);
- var replacedCombiner = inferrer.handleInvocationContravariance(
+ MethodContravarianceCheckKind checkKind =
+ inferrer.preCheckInvocationContravariance(read, readType,
+ combinerMember, combiner, combiner.arguments, combiner);
+ Expression replacedCombiner = inferrer.handleInvocationContravariance(
checkKind,
combiner,
combiner.arguments,
@@ -397,7 +405,7 @@
combinedType,
combinerType,
combiner.fileOffset);
- var replacedCombiner2 = inferrer.ensureAssignable(
+ Expression replacedCombiner2 = inferrer.ensureAssignable(
writeContext, combinedType, replacedCombiner, writeOffset);
if (replacedCombiner2 != null) {
replacedCombiner = replacedCombiner2;
@@ -406,8 +414,8 @@
} else {
inferrer.inferExpression(rhs, writeContext ?? const UnknownType(), true,
isVoidAllowed: true);
- var rhsType = getInferredType(rhs, inferrer);
- var replacedRhs = inferrer.ensureAssignable(
+ DartType rhsType = getInferredType(rhs, inferrer);
+ Expression replacedRhs = inferrer.ensureAssignable(
writeContext, rhsType, rhs, writeOffset,
isVoidAllowed: writeContext is VoidType);
_storeLetType(inferrer, replacedRhs ?? rhs, rhsType);
@@ -453,7 +461,7 @@
@override
List<String> _getToStringParts() {
- var parts = super._getToStringParts();
+ List<String> parts = super._getToStringParts();
if (receiver != null) parts.add('receiver=$receiver');
if (isSuper) parts.add('isSuper=true');
return parts;
@@ -462,7 +470,7 @@
DartType _inferReceiver(ShadowTypeInferrer inferrer) {
if (receiver != null) {
inferrer.inferExpression(receiver, const UnknownType(), true);
- var receiverType = getInferredType(receiver, inferrer);
+ DartType receiverType = getInferredType(receiver, inferrer);
_storeLetType(inferrer, receiver, receiverType);
return receiverType;
} else if (isSuper) {
@@ -750,7 +758,7 @@
@override
List<String> _getToStringParts() {
- var parts = super._getToStringParts();
+ List<String> parts = super._getToStringParts();
if (index != null) parts.add('index=$index');
return parts;
}
@@ -1029,7 +1037,7 @@
@override
List<String> _getToStringParts() {
- var parts = super._getToStringParts();
+ List<String> parts = super._getToStringParts();
if (nullAwareGuard != null) parts.add('nullAwareGuard=$nullAwareGuard');
return parts;
}
@@ -1256,7 +1264,7 @@
while (true) {
if (desugared is Let) {
Let desugaredLet = desugared;
- var variable = desugaredLet.variable;
+ VariableDeclaration variable = desugaredLet.variable;
if (identical(variable.initializer, expression)) {
variable.type = type;
return;
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index 1fcfc87..b1ff995 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -118,6 +118,9 @@
default:
fileUri = uri;
+ // Check for empty package name entry (redirecting to package name
+ // from which we should get the fragment part).
+ packageFragment = target.uriTranslator?.getDefaultPackageFragment();
break;
}
}
diff --git a/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart b/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart
index 9a462ff..c7899be 100644
--- a/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart
+++ b/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart
@@ -915,7 +915,7 @@
}
parser.reportRecoverableErrorWithToken(next, fasta.templateExpectedType);
if (!isOneOfOrEof(
- next, const ['>', ')', '[', ']', '[]', '{', '}', ',', ';'])) {
+ next, const ['<', '>', ')', '[', ']', '[]', '{', '}', ',', ';'])) {
// When in doubt, consume the token to ensure we make progress
token = next;
next = token.next;
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 7b7f7a7..affb84563 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -688,8 +688,9 @@
/// Recover given out-of-order clauses in an import directive where [token] is
/// the import keyword.
Token parseImportRecovery(Token token) {
- final primaryListener = listener;
- final recoveryListener = new ImportRecoveryListener();
+ final Listener primaryListener = listener;
+ final ImportRecoveryListener recoveryListener =
+ new ImportRecoveryListener();
// Reparse to determine which clauses have already been parsed
// but intercept the events so they are not sent to the primary listener
@@ -1817,8 +1818,9 @@
/// Recover given out-of-order clauses in a class header.
Token parseClassHeaderRecovery(Token token, Token begin, Token classKeyword) {
- final primaryListener = listener;
- final recoveryListener = new ClassHeaderRecoveryListener();
+ final Listener primaryListener = listener;
+ final ClassHeaderRecoveryListener recoveryListener =
+ new ClassHeaderRecoveryListener();
// Reparse to determine which clauses have already been parsed
// but intercept the events so they are not sent to the primary listener.
@@ -1977,8 +1979,9 @@
Token parseMixinHeaderRecovery(
Token token, Token mixinKeyword, Token headerStart) {
- final primaryListener = listener;
- final recoveryListener = new MixinHeaderRecoveryListener();
+ final Listener primaryListener = listener;
+ final MixinHeaderRecoveryListener recoveryListener =
+ new MixinHeaderRecoveryListener();
// Reparse to determine which clauses have already been parsed
// but intercept the events so they are not sent to the primary listener.
@@ -3729,7 +3732,7 @@
return parseExpressionStatementOrDeclarationAfterModifiers(
token, token, null, null, null, false);
}
- final value = token.next.stringValue;
+ final String value = token.next.stringValue;
if (identical(value, '{')) {
// The scanner ensures that `{` always has a closing `}`.
return parseBlock(token, null);
@@ -4243,7 +4246,7 @@
}
Token parsePrimary(Token token, IdentifierContext context) {
- final kind = token.next.kind;
+ final int kind = token.next.kind;
if (kind == IDENTIFIER_TOKEN) {
return parseSendOrFunctionLiteral(token, context);
} else if (kind == INT_TOKEN || kind == HEXADECIMAL_TOKEN) {
@@ -4468,8 +4471,8 @@
}
// This looks like the start of an expression.
// Report an error, insert the comma, and continue parsing.
- var comma = new SyntheticToken(TokenType.COMMA, next.offset);
- var message = ifCount > 0
+ SyntheticToken comma = new SyntheticToken(TokenType.COMMA, next.offset);
+ Message message = ifCount > 0
? fasta.messageExpectedElseOrComma
: fasta.templateExpectedButGot.withArguments(',');
next = rewriteAndRecover(token, message, comma);
@@ -4492,7 +4495,7 @@
return next;
}
- final old = mayParseFunctionExpressions;
+ final bool old = mayParseFunctionExpressions;
mayParseFunctionExpressions = true;
int count = 0;
// TODO(danrubel): hasSetEntry parameter exists for replicating existing
@@ -4506,7 +4509,7 @@
// TODO(danrubel): Remove this section and use the while loop below
// once hasSetEntry is no longer needed.
token = parseExpression(token);
- var isMapEntry = optional(':', token.next);
+ bool isMapEntry = optional(':', token.next);
hasSetEntry ??= !isMapEntry;
if (isMapEntry) {
Token colon = token.next;
@@ -4550,8 +4553,9 @@
// If this looks like the start of an expression,
// then report an error, insert the comma, and continue parsing.
// TODO(danrubel): Consider better error message
- var comma = new SyntheticToken(TokenType.COMMA, next.offset);
- var message = ifCount > 0
+ SyntheticToken comma =
+ new SyntheticToken(TokenType.COMMA, next.offset);
+ Message message = ifCount > 0
? fasta.messageExpectedElseOrComma
: fasta.templateExpectedButGot.withArguments(',');
token = rewriteAndRecover(token, message, comma);
@@ -4868,7 +4872,7 @@
// Parsing the prefix, for instance 'x of 'x${id}y${id}z'
int interpolationCount = 0;
Token next = token.next;
- var kind = next.kind;
+ int kind = next.kind;
while (kind != EOF_TOKEN) {
if (identical(kind, STRING_INTERPOLATION_TOKEN)) {
// Parsing ${expression}.
@@ -5285,7 +5289,7 @@
// look past the next expression
// to determine if this is part of a conditional expression
//
- final originalListener = listener;
+ Listener originalListener = listener;
listener = new ForwardingListener();
// TODO(danrubel): consider using TokenStreamGhostWriter here
Token afterExpression =
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
index a10dea0..dab1b69 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_constraint_gatherer.dart
@@ -67,11 +67,12 @@
/// Returns the set of type constraints that was gathered.
Map<TypeParameter, TypeConstraint> computeConstraints() {
- var result = <TypeParameter, TypeConstraint>{};
- for (var parameter in _parametersToConstrain) {
+ Map<TypeParameter, TypeConstraint> result =
+ <TypeParameter, TypeConstraint>{};
+ for (TypeParameter parameter in _parametersToConstrain) {
result[parameter] = new TypeConstraint();
}
- for (var protoConstraint in _protoConstraints) {
+ for (_ProtoConstraint protoConstraint in _protoConstraints) {
if (protoConstraint.isUpper) {
addUpperBound(result[protoConstraint.parameter], protoConstraint.bound);
} else {
@@ -133,9 +134,11 @@
return false;
}
if (subtype.typeParameters.isNotEmpty) {
- var subtypeSubstitution = <TypeParameter, DartType>{};
- var supertypeSubstitution = <TypeParameter, DartType>{};
- var freshTypeVariables = <TypeParameter>[];
+ Map<TypeParameter, DartType> subtypeSubstitution =
+ <TypeParameter, DartType>{};
+ Map<TypeParameter, DartType> supertypeSubstitution =
+ <TypeParameter, DartType>{};
+ List<TypeParameter> freshTypeVariables = <TypeParameter>[];
if (!_matchTypeFormals(subtype.typeParameters, supertype.typeParameters,
subtypeSubstitution, supertypeSubstitution, freshTypeVariables)) {
return false;
@@ -155,8 +158,8 @@
// Test the parameter types.
for (int i = 0; i < supertype.positionalParameters.length; ++i) {
- var supertypeParameter = supertype.positionalParameters[i];
- var subtypeParameter = subtype.positionalParameters[i];
+ DartType supertypeParameter = supertype.positionalParameters[i];
+ DartType subtypeParameter = subtype.positionalParameters[i];
// Termination: Both types shrink in size.
if (!_isSubtypeMatch(supertypeParameter, subtypeParameter)) {
return false;
@@ -201,7 +204,7 @@
// of supertypes of a given type more than once, the order of the checks
// above is irrelevant; we just need to find the matched superclass,
// substitute, and then iterate through type variables.
- var matchingSupertypeOfSubtype =
+ InterfaceType matchingSupertypeOfSubtype =
getTypeAsInstanceOf(subtype, supertype.classNode);
if (matchingSupertypeOfSubtype == null) return false;
for (int i = 0; i < supertype.classNode.typeParameters.length; i++) {
@@ -266,14 +269,14 @@
// Handle FutureOr<T> union type.
if (subtype is InterfaceType &&
identical(subtype.classNode, futureOrClass)) {
- var subtypeArg = subtype.typeArguments[0];
+ DartType subtypeArg = subtype.typeArguments[0];
if (supertype is InterfaceType &&
identical(supertype.classNode, futureOrClass)) {
// `FutureOr<P>` is a subtype match for `FutureOr<Q>` with respect to
// `L` under constraints `C`:
// - If `P` is a subtype match for `Q` with respect to `L` under
// constraints `C`.
- var supertypeArg = supertype.typeArguments[0];
+ DartType supertypeArg = supertype.typeArguments[0];
return _isSubtypeMatch(subtypeArg, supertypeArg);
}
@@ -283,7 +286,7 @@
// constraints `C0`.
// - And `P` is a subtype match for `Q` with respect to `L` under
// constraints `C1`.
- var subtypeFuture = futureType(subtypeArg);
+ InterfaceType subtypeFuture = futureType(subtypeArg);
return _isSubtypeMatch(subtypeFuture, supertype) &&
_isSubtypeMatch(subtypeArg, supertype);
}
@@ -298,8 +301,8 @@
// under constraints `C`
// - And `P` is a subtype match for `Q` with respect to `L` under
// constraints `C`
- var supertypeArg = supertype.typeArguments[0];
- var supertypeFuture = futureType(supertypeArg);
+ DartType supertypeArg = supertype.typeArguments[0];
+ InterfaceType supertypeFuture = futureType(supertypeArg);
return trySubtypeMatch(subtype, supertypeFuture) ||
_isSubtypeMatch(subtype, supertypeArg);
}
@@ -342,9 +345,9 @@
// and `F` is a subtype match for a type `Q` with respect to `L` under
// constraints `C`.
if (subtype is InterfaceType) {
- var callMember = getInterfaceMember(subtype.classNode, callName);
+ Member callMember = getInterfaceMember(subtype.classNode, callName);
if (callMember is Procedure && !callMember.isGetter) {
- var callType = callMember.getterType;
+ DartType callType = callMember.getterType;
if (callType != null) {
callType =
Substitution.fromInterfaceType(subtype).substituteType(callType);
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 0bd0d70..7c8edce 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -56,7 +56,7 @@
import 'package:kernel/core_types.dart' show CoreTypes;
import 'package:kernel/type_algebra.dart'
- show getFreshTypeParameters, Substitution;
+ show FreshTypeParameters, getFreshTypeParameters, Substitution;
import 'package:kernel/src/bounds_checks.dart' show calculateBounds;
@@ -132,13 +132,14 @@
show
getNamedParameterType,
getPositionalParameterType,
+ TypeConstraint,
TypeVariableEliminator,
TypeSchemaEnvironment;
/// Given a [FunctionNode], gets the named parameter identified by [name], or
/// `null` if there is no parameter with the given name.
VariableDeclaration getNamedFormal(FunctionNode function, String name) {
- for (var formal in function.namedParameters) {
+ for (VariableDeclaration formal in function.namedParameters) {
if (formal.name == name) return formal;
}
return null;
@@ -245,7 +246,7 @@
ReturnStatement statement, DartType expressionType) {
// The rules for valid returns for functions with return type T and possibly
// a return expression with static type S.
- var flattenedReturnType = isAsync
+ DartType flattenedReturnType = isAsync
? inferrer.typeSchemaEnvironment.unfutureType(returnType)
: returnType;
if (statement.expression == null) {
@@ -273,7 +274,7 @@
// Sync: invalid if T is void and S is not void, dynamic, or Null
// Async: invalid if T is void and flatten(S) is not void, dynamic, or Null.
- var flattenedExpressionType = isAsync
+ DartType flattenedExpressionType = isAsync
? inferrer.typeSchemaEnvironment.unfutureType(expressionType)
: expressionType;
if (returnType is VoidType &&
@@ -332,7 +333,7 @@
// Not assignable, use the expectation.
type = greatestClosure(inferrer.coreTypes, returnOrYieldContext);
}
- var unwrappedType = type;
+ DartType unwrappedType = type;
if (isAsync) {
unwrappedType = inferrer.typeSchemaEnvironment.unfutureType(type);
}
@@ -359,7 +360,7 @@
void handleYield(TypeInferrerImpl inferrer, bool isYieldStar, DartType type,
Expression expression, int fileOffset) {
if (!isGenerator) return;
- var expectedType = isYieldStar
+ DartType expectedType = isYieldStar
? _wrapAsyncOrGenerator(inferrer, returnOrYieldContext)
: returnOrYieldContext;
if (inferrer.ensureAssignable(expectedType, type, expression, fileOffset,
@@ -368,7 +369,7 @@
type = greatestClosure(inferrer.coreTypes, expectedType);
}
if (_needToInferReturnType) {
- var unwrappedType = type;
+ DartType unwrappedType = type;
if (isYieldStar) {
unwrappedType = inferrer.getDerivedTypeArgumentOf(
type,
@@ -633,23 +634,29 @@
// should tear off `.call`.
// TODO(paulberry): use resolveTypeParameter. See findInterfaceMember.
if (actualType is InterfaceType) {
- var classNode = (actualType as InterfaceType).classNode;
- var callMember = classHierarchy.getInterfaceMember(classNode, callName);
+ Class classNode = (actualType as InterfaceType).classNode;
+ Member callMember =
+ classHierarchy.getInterfaceMember(classNode, callName);
if (callMember is Procedure && callMember.kind == ProcedureKind.Method) {
if (_shouldTearOffCall(expectedType, actualType)) {
// Replace expression with:
// `let t = expression in t == null ? null : t.call`
- var parent = expression.parent;
- var t = new VariableDeclaration.forValue(expression, type: actualType)
- ..fileOffset = fileOffset;
- var nullCheck = buildIsNull(new VariableGet(t), fileOffset, helper);
- var tearOff =
+ TreeNode parent = expression.parent;
+ VariableDeclaration t =
+ new VariableDeclaration.forValue(expression, type: actualType)
+ ..fileOffset = fileOffset;
+ Expression nullCheck =
+ buildIsNull(new VariableGet(t), fileOffset, helper);
+ PropertyGet tearOff =
new PropertyGet(new VariableGet(t), callName, callMember)
..fileOffset = fileOffset;
actualType = getCalleeType(callMember, actualType);
- var conditional = new ConditionalExpression(nullCheck,
- new NullLiteral()..fileOffset = fileOffset, tearOff, actualType);
- var let = new Let(t, conditional)..fileOffset = fileOffset;
+ ConditionalExpression conditional = new ConditionalExpression(
+ nullCheck,
+ new NullLiteral()..fileOffset = fileOffset,
+ tearOff,
+ actualType);
+ Let let = new Let(t, conditional)..fileOffset = fileOffset;
parent?.replaceChild(expression, let);
expression = let;
}
@@ -673,7 +680,7 @@
if (!typeSchemaEnvironment.isSubtypeOf(expectedType, actualType)) {
// Error: not assignable. Perform error recovery.
- var parent = expression.parent;
+ TreeNode parent = expression.parent;
Expression errorNode = new AsExpression(
expression,
// TODO(ahe): The outline phase doesn't correctly remove invalid
@@ -693,21 +700,23 @@
parent?.replaceChild(expression, errorNode);
return errorNode;
} else {
- var template = _getPreciseTypeErrorTemplate(expression);
+ Template<Message Function(DartType, DartType)> template =
+ _getPreciseTypeErrorTemplate(expression);
if (template != null) {
// The type of the expression is known precisely, so an implicit
// downcast is guaranteed to fail. Insert a compile-time error.
- var parent = expression.parent;
- var errorNode = helper.wrapInProblem(expression,
+ TreeNode parent = expression.parent;
+ Expression errorNode = helper.wrapInProblem(expression,
template.withArguments(actualType, expectedType), noLength);
parent?.replaceChild(expression, errorNode);
return errorNode;
} else {
// Insert an implicit downcast.
- var parent = expression.parent;
- var typeCheck = new AsExpression(expression, initialExpectedType)
- ..isTypeError = true
- ..fileOffset = fileOffset;
+ TreeNode parent = expression.parent;
+ AsExpression typeCheck =
+ new AsExpression(expression, initialExpectedType)
+ ..isTypeError = true
+ ..fileOffset = fileOffset;
parent?.replaceChild(expression, typeCheck);
return typeCheck;
}
@@ -785,21 +794,21 @@
// TODO(paulberry): could we add getters to InvocationExpression to make
// these is-checks unnecessary?
if (methodInvocation is MethodInvocation) {
- var interfaceMember = findInterfaceMember(
+ Object interfaceMember = findInterfaceMember(
receiverType, methodInvocation.name, methodInvocation.fileOffset,
errorTemplate: templateUndefinedMethod,
expression: methodInvocation,
receiver: methodInvocation.receiver,
instrumented: instrumented);
if (receiverType == const DynamicType() && interfaceMember is Procedure) {
- var arguments = methodInvocation.arguments;
- var signature = interfaceMember.function;
+ Arguments arguments = methodInvocation.arguments;
+ FunctionNode signature = interfaceMember.function;
if (arguments.positional.length < signature.requiredParameterCount ||
arguments.positional.length >
signature.positionalParameters.length) {
return null;
}
- for (var argument in arguments.named) {
+ for (kernel.NamedExpression argument in arguments.named) {
if (!signature.namedParameters
.any((declaration) => declaration.name == argument.name)) {
return null;
@@ -816,7 +825,7 @@
return interfaceMember;
} else if (methodInvocation is SuperMethodInvocation) {
assert(receiverType != const DynamicType());
- var interfaceMember = findInterfaceMember(
+ Object interfaceMember = findInterfaceMember(
receiverType, methodInvocation.name, methodInvocation.fileOffset,
instrumented: instrumented);
if (interfaceMember is Member) {
@@ -836,7 +845,7 @@
// TODO(paulberry): could we add a common base class to PropertyGet and
// SuperPropertyGet to make these is-checks unnecessary?
if (propertyGet is PropertyGet) {
- var interfaceMember = findInterfaceMember(
+ Object interfaceMember = findInterfaceMember(
receiverType, propertyGet.name, propertyGet.fileOffset,
errorTemplate: templateUndefinedGetter,
expression: propertyGet,
@@ -854,7 +863,7 @@
return interfaceMember;
} else if (propertyGet is SuperPropertyGet) {
assert(receiverType != const DynamicType());
- var interfaceMember = findInterfaceMember(
+ Object interfaceMember = findInterfaceMember(
receiverType, propertyGet.name, propertyGet.fileOffset,
instrumented: instrumented);
if (interfaceMember is Member) {
@@ -872,7 +881,7 @@
Object findPropertySetMember(DartType receiverType, Expression propertySet,
{bool instrumented: true}) {
if (propertySet is PropertySet) {
- var interfaceMember = findInterfaceMember(
+ Object interfaceMember = findInterfaceMember(
receiverType, propertySet.name, propertySet.fileOffset,
errorTemplate: templateUndefinedSetter,
expression: propertySet,
@@ -891,7 +900,7 @@
return interfaceMember;
} else if (propertySet is SuperPropertySet) {
assert(receiverType != const DynamicType());
- var interfaceMember = findInterfaceMember(
+ Object interfaceMember = findInterfaceMember(
receiverType, propertySet.name, propertySet.fileOffset,
setter: true, instrumented: instrumented);
if (interfaceMember is Member) {
@@ -908,9 +917,9 @@
if (calleeType is FunctionType) {
return calleeType;
} else if (followCall && calleeType is InterfaceType) {
- var member =
+ Member member =
_getInterfaceMember(calleeType.classNode, callName, false, -1);
- var callType = getCalleeType(member, calleeType);
+ DartType callType = getCalleeType(member, calleeType);
if (callType is FunctionType) {
return callType;
}
@@ -924,7 +933,7 @@
} else if (interfaceMember == null) {
return const DynamicType();
} else if (interfaceMember is Member) {
- var memberClass = interfaceMember.enclosingClass;
+ Class memberClass = interfaceMember.enclosingClass;
DartType calleeType;
if (interfaceMember is Procedure) {
if (interfaceMember.kind == ProcedureKind.Getter) {
@@ -941,7 +950,7 @@
if (memberClass.typeParameters.isNotEmpty) {
receiverType = resolveTypeParameter(receiverType);
if (receiverType is InterfaceType) {
- var castedType =
+ InterfaceType castedType =
classHierarchy.getTypeAsInstanceOf(receiverType, memberClass);
calleeType = Substitution.fromInterfaceType(castedType)
.substituteType(calleeType);
@@ -956,7 +965,7 @@
DartType getDerivedTypeArgumentOf(DartType type, Class class_) {
if (type is InterfaceType) {
- var typeAsInstanceOfClass =
+ InterfaceType typeAsInstanceOfClass =
classHierarchy.getTypeAsInstanceOf(type, class_);
if (typeAsInstanceOfClass != null) {
return typeAsInstanceOfClass.typeArguments[0];
@@ -984,11 +993,12 @@
} else if (interfaceMember == null) {
return const DynamicType();
} else if (interfaceMember is Member) {
- var memberClass = interfaceMember.enclosingClass;
+ Class memberClass = interfaceMember.enclosingClass;
DartType setterType;
if (interfaceMember is Procedure) {
assert(interfaceMember.kind == ProcedureKind.Setter);
- var setterParameters = interfaceMember.function.positionalParameters;
+ List<VariableDeclaration> setterParameters =
+ interfaceMember.function.positionalParameters;
setterType = setterParameters.length > 0
? setterParameters[0].type
: const DynamicType();
@@ -1001,7 +1011,7 @@
if (memberClass.typeParameters.isNotEmpty) {
receiverType = resolveTypeParameter(receiverType);
if (receiverType is InterfaceType) {
- var castedType =
+ InterfaceType castedType =
classHierarchy.getTypeAsInstanceOf(receiverType, memberClass);
setterType = Substitution.fromInterfaceType(castedType)
.substituteType(setterType);
@@ -1035,13 +1045,14 @@
DartType inferredType,
FunctionType functionType,
int fileOffset) {
- var expressionToReplace = desugaredInvocation ?? expression;
+ Expression expressionToReplace = desugaredInvocation ?? expression;
switch (checkKind) {
case MethodContravarianceCheckKind.checkMethodReturn:
- var parent = expressionToReplace.parent;
- var replacement = new AsExpression(expressionToReplace, inferredType)
- ..isTypeError = true
- ..fileOffset = fileOffset;
+ TreeNode parent = expressionToReplace.parent;
+ AsExpression replacement =
+ new AsExpression(expressionToReplace, inferredType)
+ ..isTypeError = true
+ ..fileOffset = fileOffset;
parent.replaceChild(expressionToReplace, replacement);
if (instrumentation != null) {
int offset = arguments.fileOffset == -1
@@ -1052,13 +1063,13 @@
}
return replacement;
case MethodContravarianceCheckKind.checkGetterReturn:
- var parent = expressionToReplace.parent;
- var propertyGet = new PropertyGet(desugaredInvocation.receiver,
+ TreeNode parent = expressionToReplace.parent;
+ PropertyGet propertyGet = new PropertyGet(desugaredInvocation.receiver,
desugaredInvocation.name, desugaredInvocation.interfaceTarget);
- var asExpression = new AsExpression(propertyGet, functionType)
+ AsExpression asExpression = new AsExpression(propertyGet, functionType)
..isTypeError = true
..fileOffset = fileOffset;
- var replacement = new MethodInvocation(
+ MethodInvocation replacement = new MethodInvocation(
asExpression, callName, desugaredInvocation.arguments);
parent.replaceChild(expressionToReplace, replacement);
if (instrumentation != null) {
@@ -1099,10 +1110,10 @@
interfaceMember.enclosingClass, interfaceMember.type);
}
}
- var replacedExpression = desugaredGet ?? expression;
+ Expression replacedExpression = desugaredGet ?? expression;
if (checkReturn) {
- var expressionToReplace = replacedExpression;
- var parent = expressionToReplace.parent;
+ Expression expressionToReplace = replacedExpression;
+ TreeNode parent = expressionToReplace.parent;
replacedExpression = new AsExpression(expressionToReplace, inferredType)
..isTypeError = true
..fileOffset = fileOffset;
@@ -1151,7 +1162,7 @@
assert(closureContext == null);
assert(!isTopLevel);
this.helper = helper;
- var actualType =
+ DartType actualType =
inferExpression(initializer, context, true, isVoidAllowed: true);
ensureAssignable(context, actualType, initializer, initializer.fileOffset,
isVoidAllowed: context is VoidType);
@@ -1190,7 +1201,7 @@
// type parameters for the callee (see dartbug.com/31759).
// TODO(paulberry): is it possible to find a narrower set of circumstances
// in which me must do this, to avoid a performance regression?
- var fresh = getFreshTypeParameters(calleeTypeParameters);
+ FreshTypeParameters fresh = getFreshTypeParameters(calleeTypeParameters);
calleeType = fresh.applyToFunctionType(calleeType);
returnType = fresh.substitute(returnType);
calleeTypeParameters = fresh.freshTypeParameters;
@@ -1239,7 +1250,7 @@
DartType inferredFormalType = substitution != null
? substitution.substituteType(formalType)
: formalType;
- var expressionType = inferExpression(
+ DartType expressionType = inferExpression(
expression,
inferredFormalType,
inferenceNeeded ||
@@ -1256,28 +1267,30 @@
});
// Check for and remove duplicated named arguments.
- var named = arguments.named;
+ List<kernel.NamedExpression> named = arguments.named;
if (named.length == 2) {
if (named[0].name == named[1].name) {
- var name = named[1].name;
- var error = helper.desugarSyntheticExpression(helper.buildProblem(
- templateDuplicatedNamedArgument.withArguments(name),
- named[1].fileOffset,
- name.length));
+ String name = named[1].name;
+ Expression error = helper.desugarSyntheticExpression(
+ helper.buildProblem(
+ templateDuplicatedNamedArgument.withArguments(name),
+ named[1].fileOffset,
+ name.length));
arguments.named = [new kernel.NamedExpression(named[1].name, error)];
formalTypes.removeLast();
actualTypes.removeLast();
}
} else if (named.length > 2) {
- var seenNames = <String, kernel.NamedExpression>{};
- var hasProblem = false;
- var namedTypeIndex = arguments.positional.length;
- var uniqueNamed = <kernel.NamedExpression>[];
- for (var expression in named) {
- var name = expression.name;
+ Map<String, kernel.NamedExpression> seenNames =
+ <String, kernel.NamedExpression>{};
+ bool hasProblem = false;
+ int namedTypeIndex = arguments.positional.length;
+ List<kernel.NamedExpression> uniqueNamed = <kernel.NamedExpression>[];
+ for (kernel.NamedExpression expression in named) {
+ String name = expression.name;
if (seenNames.containsKey(name)) {
hasProblem = true;
- var prevNamedExpression = seenNames[name];
+ kernel.NamedExpression prevNamedExpression = seenNames[name];
prevNamedExpression.value = helper.desugarSyntheticExpression(
helper.buildProblem(
templateDuplicatedNamedArgument.withArguments(name),
@@ -1322,12 +1335,12 @@
// Argument counts and names match. Compare types.
int numPositionalArgs = arguments.positional.length;
for (int i = 0; i < formalTypes.length; i++) {
- var formalType = formalTypes[i];
- var expectedType = substitution != null
+ DartType formalType = formalTypes[i];
+ DartType expectedType = substitution != null
? substitution.substituteType(formalType)
: formalType;
- var actualType = actualTypes[i];
- var expression = i < numPositionalArgs
+ DartType actualType = actualTypes[i];
+ Expression expression = i < numPositionalArgs
? arguments.positional[i]
: arguments.named[i - numPositionalArgs].value;
ensureAssignable(
@@ -1354,15 +1367,16 @@
returnContext = const DynamicType();
}
if (!isTopLevel) {
- var positionalParameters = function.positionalParameters;
- for (var i = 0; i < positionalParameters.length; i++) {
- var parameter = positionalParameters[i];
+ List<VariableDeclaration> positionalParameters =
+ function.positionalParameters;
+ for (int i = 0; i < positionalParameters.length; i++) {
+ VariableDeclaration parameter = positionalParameters[i];
inferMetadataKeepingHelper(parameter.annotations);
if (parameter.initializer != null) {
inferExpression(parameter.initializer, parameter.type, !isTopLevel);
}
}
- for (var parameter in function.namedParameters) {
+ for (VariableDeclaration parameter in function.namedParameters) {
inferMetadataKeepingHelper(parameter.annotations);
inferExpression(parameter.initializer, parameter.type, !isTopLevel);
}
@@ -1404,7 +1418,8 @@
// Let `[T/S]` denote the type substitution where each `Si` is replaced
// with the corresponding `Ti`.
- var substitutionMap = <TypeParameter, DartType>{};
+ Map<TypeParameter, DartType> substitutionMap =
+ <TypeParameter, DartType>{};
for (int i = 0; i < typeContext.typeParameters.length; i++) {
substitutionMap[typeContext.typeParameters[i]] =
i < typeParameters.length
@@ -1497,9 +1512,9 @@
// Place annotations in a temporary list literal so that they will have a
// parent. This is necessary in case any of the annotations need to get
// replaced during type inference.
- var parents = annotations.map((e) => e.parent).toList();
+ List<TreeNode> parents = annotations.map((e) => e.parent).toList();
new ListLiteral(annotations);
- for (var annotation in annotations) {
+ for (Expression annotation in annotations) {
inferExpression(annotation, const UnknownType(), !isTopLevel);
}
for (int i = 0; i < annotations.length; ++i) {
@@ -1522,7 +1537,7 @@
Name methodName,
Arguments arguments}) {
// First infer the receiver so we can look up the method that was invoked.
- var receiverType = receiver == null
+ DartType receiverType = receiver == null
? thisType
: inferExpression(receiver, const UnknownType(), true);
receiverVariable?.type = receiverType;
@@ -1535,26 +1550,32 @@
bool isOverloadedArithmeticOperator = interfaceMember is Procedure &&
typeSchemaEnvironment.isOverloadedArithmeticOperatorAndType(
interfaceMember, receiverType);
- var calleeType = getCalleeType(interfaceMember, receiverType);
- var functionType = getCalleeFunctionType(calleeType, !isImplicitCall);
+ DartType calleeType = getCalleeType(interfaceMember, receiverType);
+ FunctionType functionType =
+ getCalleeFunctionType(calleeType, !isImplicitCall);
if (interfaceMember != null &&
calleeType is! DynamicType &&
calleeType != coreTypes.functionClass.rawType &&
identical(functionType, unknownFunction)) {
- var parent = expression.parent;
+ TreeNode parent = expression.parent;
kernel.Expression error = helper.wrapInProblem(expression,
templateInvokeNonFunction.withArguments(methodName.name), noLength);
parent?.replaceChild(expression, error);
return new ExpressionInferenceResult(null, const DynamicType());
}
- var checkKind = preCheckInvocationContravariance(receiver, receiverType,
- interfaceMember, desugaredInvocation, arguments, expression);
- var inferenceResult = inferInvocation(typeContext, fileOffset, functionType,
- functionType.returnType, arguments,
+ MethodContravarianceCheckKind checkKind = preCheckInvocationContravariance(
+ receiver,
+ receiverType,
+ interfaceMember,
+ desugaredInvocation,
+ arguments,
+ expression);
+ ExpressionInferenceResult inferenceResult = inferInvocation(typeContext,
+ fileOffset, functionType, functionType.returnType, arguments,
isOverloadedArithmeticOperator: isOverloadedArithmeticOperator,
receiverType: receiverType);
- var inferredType = inferenceResult.type;
+ DartType inferredType = inferenceResult.type;
if (methodName.name == '==') {
inferredType = coreTypes.boolClass.rawType;
}
@@ -1567,8 +1588,8 @@
interfaceMember.kind == ProcedureKind.Method) &&
receiverType is! DynamicType &&
receiverType != typeSchemaEnvironment.rawFunctionType) {
- var parent = expression.parent;
- var errorNode = helper.wrapInProblem(
+ TreeNode parent = expression.parent;
+ Expression errorNode = helper.wrapInProblem(
expression,
templateImplicitCallOfNonMethod.withArguments(receiverType),
noLength);
@@ -1619,7 +1640,7 @@
assert(closureContext == null);
this.helper = helper;
assert(declaredType != null);
- var actualType = inferExpression(initializer, declaredType, true);
+ DartType actualType = inferExpression(initializer, declaredType, true);
ensureAssignable(
declaredType, actualType, initializer, initializer.fileOffset);
this.helper = null;
@@ -1657,8 +1678,8 @@
desugaredGet.interfaceTarget = interfaceMember;
}
}
- var inferredType = getCalleeType(interfaceMember, receiverType);
- var replacedExpression = handlePropertyGetContravariance(receiver,
+ DartType inferredType = getCalleeType(interfaceMember, receiverType);
+ Expression replacedExpression = handlePropertyGetContravariance(receiver,
interfaceMember, desugaredGet, expression, inferredType, fileOffset);
if ((interfaceMember is Procedure &&
interfaceMember.kind == ProcedureKind.Method)) {
@@ -1686,21 +1707,21 @@
if (tearoffType is FunctionType &&
context is FunctionType &&
context.typeParameters.isEmpty) {
- var typeParameters = tearoffType.typeParameters;
+ List<TypeParameter> typeParameters = tearoffType.typeParameters;
if (typeParameters.isNotEmpty) {
- var inferredTypes = new List<DartType>.filled(
+ List<DartType> inferredTypes = new List<DartType>.filled(
typeParameters.length, const UnknownType());
- var instantiatedType = tearoffType.withoutTypeParameters;
+ FunctionType instantiatedType = tearoffType.withoutTypeParameters;
typeSchemaEnvironment.inferGenericFunctionOrType(
instantiatedType, typeParameters, [], [], context, inferredTypes);
if (!isTopLevel) {
- var parent = expression.parent;
+ TreeNode parent = expression.parent;
parent.replaceChild(
expression,
new Instantiation(expression, inferredTypes)
..fileOffset = expression.fileOffset);
}
- var substitution =
+ Substitution substitution =
Substitution.fromPairs(typeParameters, inferredTypes);
return substitution.substituteType(instantiatedType);
}
@@ -1745,7 +1766,7 @@
if (interfaceMember is Field ||
interfaceMember is Procedure &&
interfaceMember.kind == ProcedureKind.Getter) {
- var getType = getCalleeType(interfaceMember, receiverType);
+ DartType getType = getCalleeType(interfaceMember, receiverType);
if (getType is DynamicType) {
return MethodContravarianceCheckKind.none;
}
@@ -1781,7 +1802,7 @@
}
}
- var resolved = resolveOneStep(type);
+ DartType resolved = resolveOneStep(type);
if (resolved == null) return type;
// Detect circularities using the tortoise-and-hare algorithm.
@@ -1795,9 +1816,9 @@
}
// Hare takes two steps
- var step1 = resolveOneStep(hare);
+ DartType step1 = resolveOneStep(hare);
if (step1 == null) return hare;
- var step2 = resolveOneStep(step1);
+ DartType step2 = resolveOneStep(step1);
if (step2 == null) return hare;
hare = step2;
@@ -1818,7 +1839,7 @@
}
DartType wrapFutureType(DartType type) {
- var typeWithoutFutureOr = type ?? const DynamicType();
+ DartType typeWithoutFutureOr = type ?? const DynamicType();
return new InterfaceType(
coreTypes.futureClass, <DartType>[typeWithoutFutureOr]);
}
@@ -1829,10 +1850,10 @@
void _forEachArgument(
Arguments arguments, void callback(String name, Expression expression)) {
- for (var expression in arguments.positional) {
+ for (Expression expression in arguments.positional) {
callback(null, expression);
}
- for (var namedExpression in arguments.named) {
+ for (kernel.NamedExpression namedExpression in arguments.named) {
callback(namedExpression.name, namedExpression.value);
}
}
@@ -1872,7 +1893,7 @@
return templateInvalidCastNewExpr;
}
if (expression is StaticGet) {
- var target = expression.target;
+ Member target = expression.target;
if (target is Procedure && target.kind == ProcedureKind.Method) {
if (target.enclosingClass != null) {
return templateInvalidCastStaticMethod;
@@ -1883,7 +1904,7 @@
return null;
}
if (expression is VariableGet) {
- var variable = expression.variable;
+ VariableDeclaration variable = expression.variable;
if (variable is VariableDeclarationJudgment &&
VariableDeclarationJudgment.isLocalFunction(variable)) {
return templateInvalidCastLocalFunction;
@@ -1949,7 +1970,7 @@
// abstract class S0&S1<...> extends Object implements S0, S1 {}
// abstract class S0&S1<...> = S0 with S1;
// abstract class S0&S1<...> extends S0 implements S1 {}
- var mixinSuperclass = mixinSupertype.classNode;
+ Class mixinSuperclass = mixinSupertype.classNode;
if (mixinSuperclass.mixedInType == null &&
mixinSuperclass.implementedTypes.length != 1 &&
(mixinSuperclass.superclass != coreTypes.objectClass ||
@@ -1962,7 +1983,7 @@
mixinSuperclass.fileOffset,
mixinSuperclass.fileUri);
}
- var substitution = Substitution.fromSupertype(mixinSupertype);
+ Substitution substitution = Substitution.fromSupertype(mixinSupertype);
Supertype s0, s1;
if (mixinSuperclass.implementedTypes.length == 2) {
s0 = mixinSuperclass.implementedTypes[0];
@@ -2015,10 +2036,10 @@
generateConstraints(mixinClass, baseType, mixinSupertype);
// Solve them to get a map from type parameters to upper and lower
// bounds.
- var result = gatherer.computeConstraints();
+ Map<TypeParameter, TypeConstraint> result = gatherer.computeConstraints();
// Generate new type parameters with the solution as bounds.
List<TypeParameter> parameters = mixinClass.typeParameters.map((p) {
- var constraint = result[p];
+ TypeConstraint constraint = result[p];
// Because we solved for equality, a valid solution has a parameter
// either unconstrained or else with identical upper and lower bounds.
if (constraint != null && constraint.upper != constraint.lower) {
@@ -2036,9 +2057,10 @@
}).toList();
// Bounds might mention the mixin class's type parameters so we have to
// substitute them before calling instantiate to bounds.
- var substitution = Substitution.fromPairs(mixinClass.typeParameters,
+ Substitution substitution = Substitution.fromPairs(
+ mixinClass.typeParameters,
parameters.map((p) => new TypeParameterType(p)).toList());
- for (var p in parameters) {
+ for (TypeParameter p in parameters) {
p.bound = substitution.substituteType(p.bound);
}
// Use instantiate to bounds.
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_promotion.dart b/pkg/front_end/lib/src/fasta/type_inference/type_promotion.dart
index 69c352e..f8f0ff5 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_promotion.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_promotion.dart
@@ -230,8 +230,8 @@
void enterLogicalExpression(Expression lhs, String operator) {
debugEvent('enterLogicalExpression');
// Figure out what the facts are based on possible LHS outcomes.
- var trueFacts = _factsWhenTrue(lhs);
- var falseFacts = _factsWhenFalse(lhs);
+ TypePromotionFact trueFacts = _factsWhenTrue(lhs);
+ TypePromotionFact falseFacts = _factsWhenFalse(lhs);
// Record the fact that we are entering a new scope, and save the
// appropriate facts for the case where the expression gets short-cut.
bool isAnd = identical(operator, '&&');
@@ -246,8 +246,8 @@
void enterThen(Expression condition) {
debugEvent('enterThen');
// Figure out what the facts are based on possible condition outcomes.
- var trueFacts = _factsWhenTrue(condition);
- var falseFacts = _factsWhenFalse(condition);
+ TypePromotionFact trueFacts = _factsWhenTrue(condition);
+ TypePromotionFact falseFacts = _factsWhenFalse(condition);
// Record the fact that we are entering a new scope, and save the "false"
// facts for when we enter the "else" branch.
_currentScope = new _ConditionalScope(_currentScope, falseFacts);
@@ -295,7 +295,7 @@
TypePromotionFact getFactForAccess(
VariableDeclaration variable, int functionNestingLevel) {
debugEvent('getFactForAccess');
- var fact = _computeCurrentFactMap()[variable];
+ TypePromotionFact fact = _computeCurrentFactMap()[variable];
TypePromotionFact._recordAccessedInScope(
fact, _currentScope, functionNestingLevel);
return fact;
@@ -309,7 +309,7 @@
VariableDeclaration variable, DartType type, int functionNestingLevel) {
debugEvent('handleIsCheck');
if (!isPromotionCandidate(variable)) return;
- var isCheck = new _IsCheck(
+ _IsCheck isCheck = new _IsCheck(
++_lastFactSequenceNumber,
variable,
_currentFacts,
@@ -333,7 +333,7 @@
/// mutated.
void mutateVariable(VariableDeclaration variable, int functionNestingLevel) {
debugEvent('mutateVariable');
- var fact = _computeCurrentFactMap()[variable];
+ TypePromotionFact fact = _computeCurrentFactMap()[variable];
TypePromotionFact._recordMutatedInScope(fact, _currentScope);
if (getVariableFunctionNestingLevel(variable) < functionNestingLevel) {
setVariableMutatedInClosure(variable);
@@ -386,7 +386,7 @@
for (TypePromotionFact newState = _currentFacts;
!identical(newState, commonAncestor);
newState = newState.previous) {
- var currentlyCached = _factCache[newState.variable];
+ TypePromotionFact currentlyCached = _factCache[newState.variable];
// Note: Since we roll forward the most recent facts first, we need to be
// careful not write an older fact over a newer one.
if (currentlyCached == null ||
@@ -654,13 +654,13 @@
@override
DartType _computePromotedType(
TypePromoterImpl promoter, TypePromotionScope scope) {
- var previousPromotedType =
+ DartType previousPromotedType =
previousForVariable?._computePromotedType(promoter, scope);
// If the variable was mutated somewhere in the scope of the potential
// promotion, promotion does not occur.
if (_mutatedInScopes != null) {
- for (var assignmentScope in _mutatedInScopes) {
+ for (TypePromotionScope assignmentScope in _mutatedInScopes) {
if (assignmentScope.containsScope(scope)) {
return previousPromotedType;
}
@@ -672,7 +672,7 @@
// not occur.
if (promoter.wasVariableMutatedAnywhere(variable) &&
_accessedInClosureInScopes != null) {
- for (var accessScope in _accessedInClosureInScopes) {
+ for (TypePromotionScope accessScope in _accessedInClosureInScopes) {
if (accessScope.containsScope(scope)) {
return previousPromotedType;
}
@@ -681,7 +681,7 @@
// What we do now depends on the relationship between the previous type of
// the variable and the type we are checking against.
- var previousType = previousPromotedType ?? variable.type;
+ DartType previousType = previousPromotedType ?? variable.type;
if (promoter.typeSchemaEnvironment.isSubtypeOf(checkedType, previousType)) {
// The type we are checking against is a subtype of the previous type of
// the variable, so this is a refinement; we can promote.
diff --git a/pkg/front_end/lib/src/fasta/uri_translator.dart b/pkg/front_end/lib/src/fasta/uri_translator.dart
index 4d0d91e..bb2b025 100644
--- a/pkg/front_end/lib/src/fasta/uri_translator.dart
+++ b/pkg/front_end/lib/src/fasta/uri_translator.dart
@@ -50,6 +50,16 @@
return packageBaseUri.fragment;
}
+ /// Get the fragment for the package specified as the default package, if any.
+ String getDefaultPackageFragment() {
+ Uri emptyPackageRedirect = packages.asMap()[""];
+ if (emptyPackageRedirect == null) return null;
+ String packageName = emptyPackageRedirect.toString();
+ Uri packageBaseUri = packages.asMap()[packageName];
+ if (packageBaseUri == null) return null;
+ return packageBaseUri.fragment;
+ }
+
bool isLibrarySupported(String libraryName) {
// TODO(sigmund): change this to `?? false` when all backends provide the
// `libraries.json` file by default (Issue #32657).
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 76adabd..56dfe2e 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -323,7 +323,6 @@
InvalidCatchArguments/example: Fail
InvalidContinueTarget/analyzerCode: Fail
InvalidContinueTarget/example: Fail
-InvalidInitializer/analyzerCode: Fail # The analyzer reports a different error
InvalidInitializer/example: Fail
InvalidPackageUri/analyzerCode: Fail
InvalidPackageUri/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 4b3a96a..0b53548 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -925,8 +925,10 @@
# TODO(danrubel): Review where this error is generated and consider generating
# FieldInitializedOutsideDeclaringClass instead of this in some situations.
InvalidInitializer:
+ index: 90
template: "Not a valid initializer."
tip: "To initialize a field, use the syntax 'name = value'."
+ analyzerCode: ParserErrorCode.INVALID_INITIALIZER
FieldInitializedOutsideDeclaringClass:
index: 88
diff --git a/pkg/front_end/pubspec.yaml b/pkg/front_end/pubspec.yaml
index 731b221..2842dbf 100644
--- a/pkg/front_end/pubspec.yaml
+++ b/pkg/front_end/pubspec.yaml
@@ -9,7 +9,7 @@
sdk: '>=2.2.2 <3.0.0'
dependencies:
kernel: 0.3.22
- package_config: '^1.0.1'
+ package_config: '^1.1.0'
path: '^1.3.9'
yaml: '^2.1.12'
dev_dependencies:
diff --git a/pkg/front_end/test/fasta/outline_test.dart b/pkg/front_end/test/fasta/outline_test.dart
index 3551732..43e9cc9 100644
--- a/pkg/front_end/test/fasta/outline_test.dart
+++ b/pkg/front_end/test/fasta/outline_test.dart
@@ -10,7 +10,6 @@
Future<FastaContext> createContext(
Chain suite, Map<String, String> environment) {
- environment[LEGACY_MODE] = "";
return FastaContext.create(suite, environment);
}
diff --git a/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/.packages b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/.packages
new file mode 100644
index 0000000..6a19ae2
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/.packages
@@ -0,0 +1 @@
+foo:lib/#dart=
\ No newline at end of file
diff --git a/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/lib/foo.dart b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/lib/foo.dart
new file mode 100644
index 0000000..c669c23
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/lib/foo.dart
@@ -0,0 +1,13 @@
+/*error: LanguageVersionInvalidInDotPackages*/
+// Copyright (c) 2019, 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.
+
+/*library: languageVersion=2.8*/
+
+import 'foo2.dart';
+
+foo() {
+ print("Hello from foo!");
+ foo2();
+}
diff --git a/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/lib/foo2.dart b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/lib/foo2.dart
new file mode 100644
index 0000000..0e38837
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/lib/foo2.dart
@@ -0,0 +1,12 @@
+/*error: LanguageVersionInvalidInDotPackages*/
+// Copyright (c) 2019, 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.
+
+// @dart = 2.4
+
+/*library: languageVersion=2.4*/
+
+foo2() {
+ print("Hello from foo2!");
+}
diff --git a/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/main.dart b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/main.dart
new file mode 100644
index 0000000..cabb316
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/main.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2019, 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.
+
+// Set version of this file (not technically in package) explicitly to test as
+// much as possibly separately.
+
+// @dart = 2.4
+
+import 'package:foo/foo.dart';
+
+/*library: languageVersion=2.4*/
+
+main() {
+ foo();
+}
diff --git a/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/pubspec.yaml b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/pubspec.yaml
new file mode 100644
index 0000000..ff98642
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_default_version_is_empty/pubspec.yaml
@@ -0,0 +1,5 @@
+# Copyright (c) 2019, 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.
+
+# Analyzer workaround, see https://github.com/dart-lang/sdk/issues/37513
\ No newline at end of file
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_default_version/.packages b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/.packages
new file mode 100644
index 0000000..b18dc60
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/.packages
@@ -0,0 +1,2 @@
+foo:lib/#dart=2.5.3-dev.2
+:foo
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_default_version/lib/foo.dart b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/lib/foo.dart
new file mode 100644
index 0000000..1fe23f3
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/lib/foo.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2019, 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.
+
+/*library: languageVersion=2.5*/
+
+foo() {
+ print("Hello from foo!");
+}
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_default_version/main.dart b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/main.dart
new file mode 100644
index 0000000..3870a48
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/main.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2019, 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 'package:foo/foo.dart';
+
+// Version comes from "default package" in .packages.
+
+/*library: languageVersion=2.5*/
+
+main() {
+ foo();
+}
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_default_version/pubspec.yaml b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/pubspec.yaml
new file mode 100644
index 0000000..ff98642
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/pubspec.yaml
@@ -0,0 +1,5 @@
+# Copyright (c) 2019, 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.
+
+# Analyzer workaround, see https://github.com/dart-lang/sdk/issues/37513
\ No newline at end of file
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/.packages b/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/.packages
new file mode 100644
index 0000000..c86b3a4
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/.packages
@@ -0,0 +1 @@
+foo:lib/#dart=2.5.3-dev.2
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/lib/foo.dart b/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/lib/foo.dart
new file mode 100644
index 0000000..1fe23f3
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/lib/foo.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2019, 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.
+
+/*library: languageVersion=2.5*/
+
+foo() {
+ print("Hello from foo!");
+}
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/main.dart b/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/main.dart
new file mode 100644
index 0000000..5117999
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/main.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2019, 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 'package:foo/foo.dart';
+
+/*library: languageVersion=2.8*/
+
+main() {
+ foo();
+}
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/pubspec.yaml b/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/pubspec.yaml
new file mode 100644
index 0000000..ff98642
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_no_default_version/pubspec.yaml
@@ -0,0 +1,5 @@
+# Copyright (c) 2019, 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.
+
+# Analyzer workaround, see https://github.com/dart-lang/sdk/issues/37513
\ No newline at end of file
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/.packages b/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/.packages
new file mode 100644
index 0000000..24fcebf
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/.packages
@@ -0,0 +1,2 @@
+foo:lib/#dart=2.5.3-dev.2
+:bar
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/lib/foo.dart b/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/lib/foo.dart
new file mode 100644
index 0000000..1fe23f3
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/lib/foo.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2019, 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.
+
+/*library: languageVersion=2.5*/
+
+foo() {
+ print("Hello from foo!");
+}
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/main.dart b/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/main.dart
new file mode 100644
index 0000000..5117999
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/main.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2019, 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 'package:foo/foo.dart';
+
+/*library: languageVersion=2.8*/
+
+main() {
+ foo();
+}
diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/pubspec.yaml b/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/pubspec.yaml
new file mode 100644
index 0000000..ff98642
--- /dev/null
+++ b/pkg/front_end/test/language_versioning/data/package_non_package_wrong_redirect/pubspec.yaml
@@ -0,0 +1,5 @@
+# Copyright (c) 2019, 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.
+
+# Analyzer workaround, see https://github.com/dart-lang/sdk/issues/37513
\ No newline at end of file
diff --git a/pkg/front_end/test/lint_test.status b/pkg/front_end/test/lint_test.status
index 606ccfd..e22cfe5 100644
--- a/pkg/front_end/test/lint_test.status
+++ b/pkg/front_end/test/lint_test.status
@@ -1,13 +1,3 @@
# Copyright (c) 2019, 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.md file.
-
-src/fasta/flow_analysis/flow_analysis: Fail
-src/fasta/kernel/body_builder: Fail
-src/fasta/kernel/expression_generator: Fail
-src/fasta/kernel/inference_visitor: Fail
-src/fasta/kernel/kernel_shadow_ast: Fail
-src/fasta/parser/parser: Fail
-src/fasta/type_inference/type_constraint_gatherer: Fail
-src/fasta/type_inference/type_inferrer: Fail
-src/fasta/type_inference/type_promotion: Fail
diff --git a/pkg/front_end/test/old_dill_test.dart b/pkg/front_end/test/old_dill_test.dart
new file mode 100644
index 0000000..df757c40
--- /dev/null
+++ b/pkg/front_end/test/old_dill_test.dart
@@ -0,0 +1,128 @@
+// Copyright (c) 2019, 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' show Future;
+
+import 'dart:io';
+
+import 'package:kernel/binary/tag.dart' show Tag;
+
+import 'package:testing/testing.dart'
+ show ChainContext, Result, Step, TestDescription, Chain, runMe;
+
+Future<Null> main([List<String> arguments = const []]) async {
+ if (arguments.length == 1 && arguments[0] == "--generate") {
+ print("Should now generate a dill of dart2js.");
+ await generateDill();
+ return null;
+ } else if (arguments.length == 1 && arguments[0] == "--checkDill") {
+ await checkDill();
+ return null;
+ }
+ await runMe(arguments, createContext, "../testing.json");
+ await checkDill();
+}
+
+String get dartVm => Platform.resolvedExecutable;
+
+Uri generateOutputUri(int binaryVersion, int compileNumber) {
+ return Uri.base.resolve("pkg/front_end/testcases/old_dills/"
+ "dart2js"
+ ".version.$binaryVersion"
+ ".compile.$compileNumber"
+ ".dill");
+}
+
+verifyNotUsingCheckedInDart() {
+ String vm = dartVm.replaceAll(r"\", "/");
+ if (vm.contains("tools/sdks/dart-sdk/bin/dart")) {
+ throw "Running with checked-in VM which is not supported";
+ }
+}
+
+Future<Null> checkDill() async {
+ Uri uri = generateOutputUri(Tag.BinaryFormatVersion, 1);
+ if (!new File.fromUri(uri).existsSync()) {
+ print("File $uri doesn't exist. Generate running script");
+ print("${Platform.script.toFilePath()} --generate");
+ exit(1);
+ }
+}
+
+Future<Null> generateDill() async {
+ Uri fastaCompile = Uri.base.resolve("pkg/front_end/tool/_fasta/compile.dart");
+ if (!new File.fromUri(fastaCompile).existsSync()) {
+ throw "compile.dart from fasta tools couldn't be found";
+ }
+
+ Uri dart2js = Uri.base.resolve("pkg/compiler/bin/dart2js.dart");
+ if (!new File.fromUri(dart2js).existsSync()) {
+ throw "dart2js couldn't be found";
+ }
+
+ int compileNumber = 0;
+ Uri output;
+ do {
+ compileNumber++;
+ output = generateOutputUri(Tag.BinaryFormatVersion, compileNumber);
+ } while (new File.fromUri(output).existsSync());
+
+ ProcessResult result = await Process.run(
+ dartVm,
+ [
+ fastaCompile.toFilePath(),
+ "sdkroot:/pkg/compiler/bin/dart2js.dart",
+ "-o",
+ output.toFilePath(),
+ "--target=vm",
+ "--single-root-base=${Uri.base.toFilePath()}",
+ "--single-root-scheme=sdkroot",
+ ],
+ workingDirectory: Uri.base.toFilePath());
+ if (result.exitCode != 0) {
+ print("stdout: ${result.stdout}");
+ print("stderr: ${result.stderr}");
+ print("Exit code: ${result.exitCode}");
+ throw "Got exit code ${result.exitCode}";
+ } else {
+ print("File generated.");
+ }
+}
+
+Future<Context> createContext(
+ Chain suite, Map<String, String> environment) async {
+ return new Context();
+}
+
+class Context extends ChainContext {
+ final List<Step> steps = const <Step>[
+ const RunDill(),
+ ];
+}
+
+class RunDill extends Step<TestDescription, TestDescription, Context> {
+ const RunDill();
+
+ String get name => "RunDill";
+
+ Future<Result<TestDescription>> run(
+ TestDescription description, Context context) async {
+ verifyNotUsingCheckedInDart();
+ ProcessResult result = await Process.run(
+ dartVm,
+ [
+ "--compile_all",
+ description.uri.toFilePath(),
+ "-h",
+ ],
+ workingDirectory: Uri.base.toFilePath());
+ print("stdout: ${result.stdout}");
+ print("stderr: ${result.stderr}");
+ print("Exit code: ${result.exitCode}");
+ if (result.exitCode != 0) {
+ return fail(description, "Got exit code ${result.exitCode}");
+ }
+ return pass(description);
+ }
+}
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 794a2a1..df8d7bd 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -108,6 +108,7 @@
dictionary
differs
dillfile
+dills
dirname
disagree
disconnect
@@ -316,6 +317,8 @@
scans
screen
scripts
+sdkroot
+sdks
secondary
seconds
segment
diff --git a/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect b/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect
index f7cedf9..dfcdbe8 100644
--- a/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_instance_access.dart.outline.expect
@@ -1,61 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension Extension on Class {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:24: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension Extension on Class {
-// ^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:24: Error: 'Class' is already declared in this scope.
-// extension Extension on Class {
-// ^^^^^
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:5:7: Context: Previous declaration of 'Class'.
-// class Class {
-// ^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension GenericExtension<T> on GenericClass<T> {
-// ^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:31: Error: Expected '{' before this.
-// extension GenericExtension<T> on GenericClass<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:34: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension GenericExtension<T> on GenericClass<T> {
-// ^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:34: Error: 'GenericClass' is already declared in this scope.
-// extension GenericExtension<T> on GenericClass<T> {
-// ^^^^^^^^^^^^
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:69:7: Context: Previous declaration of 'GenericClass'.
-// class GenericClass<T> {
-// ^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:1: Warning: Type 'extension' not found.
-// extension Extension on Class {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:9:21: Warning: Type 'on' not found.
-// extension Extension on Class {
-// ^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:1: Warning: Type 'extension' not found.
-// extension GenericExtension<T> on GenericClass<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_instance_access.dart:73:31: Warning: Type 'on' not found.
-// extension GenericExtension<T> on GenericClass<T> {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -69,8 +12,105 @@
synthetic constructor •() → self::GenericClass<self::GenericClass::T*>*
;
}
-static field invalid-type Extension;
-static method GenericExtension<T extends core::Object* = dynamic>() → invalid-type
+extension Extension on self::Class* {
+ method readGetter = self::Extension|readGetter;
+ method writeSetterRequired = self::Extension|writeSetterRequired;
+ method writeSetterOptional = self::Extension|writeSetterOptional;
+ method writeSetterNamed = self::Extension|writeSetterNamed;
+ get tearOffGetterNoArgs = self::Extension|get#tearOffGetterNoArgs;
+ get tearOffGetterRequired = self::Extension|get#tearOffGetterRequired;
+ get tearOffGetterOptional = self::Extension|get#tearOffGetterOptional;
+ get tearOffGetterNamed = self::Extension|get#tearOffGetterNamed;
+ get property = self::Extension|get#property;
+ method invocations = self::Extension|invocations;
+ method tearOffs = self::Extension|tearOffs;
+ method getterCalls = self::Extension|getterCalls;
+ set property = self::Extension|set#property;
+}
+extension GenericExtension<T extends core::Object* = dynamic> on self::GenericClass<T*>* {
+ method readGetter = self::GenericExtension|readGetter;
+ method writeSetterRequired = self::GenericExtension|writeSetterRequired;
+ method writeSetterOptional = self::GenericExtension|writeSetterOptional;
+ method writeSetterNamed = self::GenericExtension|writeSetterNamed;
+ method genericWriteSetterRequired = self::GenericExtension|genericWriteSetterRequired;
+ method genericWriteSetterOptional = self::GenericExtension|genericWriteSetterOptional;
+ method genericWriteSetterNamed = self::GenericExtension|genericWriteSetterNamed;
+ get property = self::GenericExtension|get#property;
+ get tearOffGetterNoArgs = self::GenericExtension|get#tearOffGetterNoArgs;
+ get tearOffGetterRequired = self::GenericExtension|get#tearOffGetterRequired;
+ get tearOffGetterOptional = self::GenericExtension|get#tearOffGetterOptional;
+ get tearOffGetterNamed = self::GenericExtension|get#tearOffGetterNamed;
+ get tearOffGetterGenericRequired = self::GenericExtension|get#tearOffGetterGenericRequired;
+ get tearOffGetterGenericOptional = self::GenericExtension|get#tearOffGetterGenericOptional;
+ get tearOffGetterGenericNamed = self::GenericExtension|get#tearOffGetterGenericNamed;
+ method invocations = self::GenericExtension|invocations;
+ method tearOffs = self::GenericExtension|tearOffs;
+ method getterCalls = self::GenericExtension|getterCalls;
+ set property = self::GenericExtension|set#property;
+}
+static method Extension|readGetter(final self::Class* #this) → dynamic
+ ;
+static method Extension|writeSetterRequired(final self::Class* #this, dynamic value) → dynamic
+ ;
+static method Extension|writeSetterOptional(final self::Class* #this, [dynamic value]) → dynamic
+ ;
+static method Extension|writeSetterNamed(final self::Class* #this, {dynamic value}) → dynamic
+ ;
+static method Extension|get#tearOffGetterNoArgs(final self::Class* #this) → dynamic
+ ;
+static method Extension|get#tearOffGetterRequired(final self::Class* #this) → dynamic
+ ;
+static method Extension|get#tearOffGetterOptional(final self::Class* #this) → dynamic
+ ;
+static method Extension|get#tearOffGetterNamed(final self::Class* #this) → dynamic
+ ;
+static method Extension|get#property(final self::Class* #this) → dynamic
+ ;
+static method Extension|set#property(final self::Class* #this, dynamic value) → void
+ ;
+static method Extension|invocations(final self::Class* #this, dynamic value) → dynamic
+ ;
+static method Extension|tearOffs(final self::Class* #this, dynamic value) → dynamic
+ ;
+static method Extension|getterCalls(final self::Class* #this, dynamic value) → dynamic
+ ;
+static method GenericExtension|readGetter<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|readGetter::#T*>* #this) → self::GenericExtension|readGetter::#T*
+ ;
+static method GenericExtension|writeSetterRequired<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterRequired::#T*>* #this, self::GenericExtension|writeSetterRequired::#T* value) → dynamic
+ ;
+static method GenericExtension|writeSetterOptional<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterOptional::#T*>* #this, [self::GenericExtension|writeSetterOptional::#T* value]) → dynamic
+ ;
+static method GenericExtension|writeSetterNamed<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|writeSetterNamed::#T*>* #this, {self::GenericExtension|writeSetterNamed::#T* value}) → dynamic
+ ;
+static method GenericExtension|genericWriteSetterRequired<#T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterRequired::#T = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterRequired::#T*>* #this, self::GenericExtension|genericWriteSetterRequired::S value) → dynamic
+ ;
+static method GenericExtension|genericWriteSetterOptional<#T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterOptional::#T = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterOptional::#T*>* #this, [self::GenericExtension|genericWriteSetterOptional::S value]) → dynamic
+ ;
+static method GenericExtension|genericWriteSetterNamed<#T extends core::Object* = dynamic, S extends self::GenericExtension|genericWriteSetterNamed::#T = dynamic>(final self::GenericClass<self::GenericExtension|genericWriteSetterNamed::#T*>* #this, {self::GenericExtension|genericWriteSetterNamed::S value}) → dynamic
+ ;
+static method GenericExtension|get#property<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#property::#T*>* #this) → self::GenericExtension|get#property::#T*
+ ;
+static method GenericExtension|set#property<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|set#property::#T*>* #this, self::GenericExtension|set#property::#T* value) → void
+ ;
+static method GenericExtension|get#tearOffGetterNoArgs<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNoArgs::#T*>* #this) → dynamic
+ ;
+static method GenericExtension|get#tearOffGetterRequired<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterRequired::#T*>* #this) → dynamic
+ ;
+static method GenericExtension|get#tearOffGetterOptional<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterOptional::#T*>* #this) → dynamic
+ ;
+static method GenericExtension|get#tearOffGetterNamed<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterNamed::#T*>* #this) → dynamic
+ ;
+static method GenericExtension|get#tearOffGetterGenericRequired<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericRequired::#T*>* #this) → dynamic
+ ;
+static method GenericExtension|get#tearOffGetterGenericOptional<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericOptional::#T*>* #this) → dynamic
+ ;
+static method GenericExtension|get#tearOffGetterGenericNamed<#T extends core::Object* = dynamic>(final self::GenericClass<self::GenericExtension|get#tearOffGetterGenericNamed::#T*>* #this) → dynamic
+ ;
+static method GenericExtension|invocations<#T extends core::Object* = dynamic, S extends self::GenericExtension|invocations::#T = dynamic>(final self::GenericClass<self::GenericExtension|invocations::#T*>* #this, self::GenericExtension|invocations::S value) → dynamic
+ ;
+static method GenericExtension|tearOffs<#T extends core::Object* = dynamic, S extends self::GenericExtension|tearOffs::#T = dynamic>(final self::GenericClass<self::GenericExtension|tearOffs::#T*>* #this, self::GenericExtension|tearOffs::S value) → dynamic
+ ;
+static method GenericExtension|getterCalls<#T extends core::Object* = dynamic, S extends self::GenericExtension|getterCalls::#T = dynamic>(final self::GenericClass<self::GenericExtension|getterCalls::#T*>* #this, self::GenericExtension|getterCalls::S value) → dynamic
;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect b/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect
index e6826b8..5a1e9ab 100644
--- a/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/direct_static_access.dart.outline.expect
@@ -1,36 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension Extension<T> on Class<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:24: Error: Expected '{' before this.
-// extension Extension<T> on Class<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:27: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension Extension<T> on Class<T> {
-// ^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:27: Error: 'Class' is already declared in this scope.
-// extension Extension<T> on Class<T> {
-// ^^^^^
-// pkg/front_end/testcases/extensions/direct_static_access.dart:5:7: Context: Previous declaration of 'Class'.
-// class Class<T> {
-// ^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:1: Warning: Type 'extension' not found.
-// extension Extension<T> on Class<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/direct_static_access.dart:9:24: Warning: Type 'on' not found.
-// extension Extension<T> on Class<T> {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -39,7 +7,81 @@
synthetic constructor •() → self::Class<self::Class::T*>*
;
}
-static method Extension<T extends core::Object* = dynamic>() → invalid-type
+extension Extension<T extends core::Object* = dynamic> on self::Class<T*>* {
+ static get property = get self::Extension|property;
+ static field field = self::Extension|field;
+ static method readGetter = self::Extension|readGetter;
+ static method writeSetterRequired = self::Extension|writeSetterRequired;
+ static method writeSetterOptional = self::Extension|writeSetterOptional;
+ static method writeSetterNamed = self::Extension|writeSetterNamed;
+ static method genericWriteSetterRequired = self::Extension|genericWriteSetterRequired;
+ static method genericWriteSetterOptional = self::Extension|genericWriteSetterOptional;
+ static method genericWriteSetterNamed = self::Extension|genericWriteSetterNamed;
+ static get tearOffGetterNoArgs = get self::Extension|tearOffGetterNoArgs;
+ static get tearOffGetterRequired = get self::Extension|tearOffGetterRequired;
+ static get tearOffGetterOptional = get self::Extension|tearOffGetterOptional;
+ static get tearOffGetterNamed = get self::Extension|tearOffGetterNamed;
+ static get tearOffGetterGenericRequired = get self::Extension|tearOffGetterGenericRequired;
+ static get tearOffGetterGenericOptional = get self::Extension|tearOffGetterGenericOptional;
+ static get tearOffGetterGenericNamed = get self::Extension|tearOffGetterGenericNamed;
+ static method invocationsFromStaticContext = self::Extension|invocationsFromStaticContext;
+ static method tearOffsFromStaticContext = self::Extension|tearOffsFromStaticContext;
+ static method fieldAccessFromStaticContext = self::Extension|fieldAccessFromStaticContext;
+ static method getterCallsFromStaticContext = self::Extension|getterCallsFromStaticContext;
+ method invocationsFromInstanceContext = self::Extension|invocationsFromInstanceContext;
+ method tearOffsFromInstanceContext = self::Extension|tearOffsFromInstanceContext;
+ method fieldAccessFromInstanceContext = self::Extension|fieldAccessFromInstanceContext;
+ method getterCallsFromInstanceContext = self::Extension|getterCallsFromInstanceContext;
+ static set property = set self::Extension|property;
+}
+static field dynamic Extension|field;
+static get Extension|property() → dynamic
+ ;
+static set Extension|property(dynamic value) → void
+ ;
+static method Extension|readGetter() → dynamic
+ ;
+static method Extension|writeSetterRequired(dynamic value) → dynamic
+ ;
+static method Extension|writeSetterOptional([dynamic value]) → dynamic
+ ;
+static method Extension|writeSetterNamed({dynamic value}) → dynamic
+ ;
+static method Extension|genericWriteSetterRequired<S extends core::Object* = dynamic>(self::Extension|genericWriteSetterRequired::S* value) → dynamic
+ ;
+static method Extension|genericWriteSetterOptional<S extends core::Object* = dynamic>([self::Extension|genericWriteSetterOptional::S* value]) → dynamic
+ ;
+static method Extension|genericWriteSetterNamed<S extends core::Object* = dynamic>({self::Extension|genericWriteSetterNamed::S* value}) → dynamic
+ ;
+static get Extension|tearOffGetterNoArgs() → dynamic
+ ;
+static get Extension|tearOffGetterRequired() → dynamic
+ ;
+static get Extension|tearOffGetterOptional() → dynamic
+ ;
+static get Extension|tearOffGetterNamed() → dynamic
+ ;
+static get Extension|tearOffGetterGenericRequired() → dynamic
+ ;
+static get Extension|tearOffGetterGenericOptional() → dynamic
+ ;
+static get Extension|tearOffGetterGenericNamed() → dynamic
+ ;
+static method Extension|invocationsFromStaticContext(core::int* value) → dynamic
+ ;
+static method Extension|tearOffsFromStaticContext(core::int* value) → dynamic
+ ;
+static method Extension|fieldAccessFromStaticContext() → dynamic
+ ;
+static method Extension|getterCallsFromStaticContext(core::int* value) → dynamic
+ ;
+static method Extension|invocationsFromInstanceContext<#T extends core::Object* = dynamic>(final self::Class<self::Extension|invocationsFromInstanceContext::#T*>* #this, self::Extension|invocationsFromInstanceContext::#T* value) → dynamic
+ ;
+static method Extension|tearOffsFromInstanceContext<#T extends core::Object* = dynamic>(final self::Class<self::Extension|tearOffsFromInstanceContext::#T*>* #this, self::Extension|tearOffsFromInstanceContext::#T* value) → dynamic
+ ;
+static method Extension|fieldAccessFromInstanceContext<#T extends core::Object* = dynamic>(final self::Class<self::Extension|fieldAccessFromInstanceContext::#T*>* #this) → dynamic
+ ;
+static method Extension|getterCallsFromInstanceContext<#T extends core::Object* = dynamic>(final self::Class<self::Extension|getterCallsFromInstanceContext::#T*>* #this, self::Extension|getterCallsFromInstanceContext::#T* value) → dynamic
;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect b/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect
index 6102ceb..0819186 100644
--- a/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/explicit_this.dart.outline.expect
@@ -1,32 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-// ^^
-// pkg/front_end/testcases/extensions/explicit_this.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/explicit_this.dart:10:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -37,6 +9,16 @@
method method1() → void
;
}
-static field invalid-type A2;
+extension A2 on self::A1* {
+ method method2 = self::A2|method2;
+ method method3 = self::A2|method3;
+ method method4 = self::A2|method4;
+}
+static method A2|method2(final self::A1* #this) → void
+ ;
+static method A2|method3(final self::A1* #this) → core::Object*
+ ;
+static method A2|method4(final self::A1* #this, core::Object* o) → void
+ ;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect b/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect
index ba9ea5f..0819186 100644
--- a/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/implicit_this.dart.outline.expect
@@ -1,32 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-// ^^
-// pkg/front_end/testcases/extensions/implicit_this.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/implicit_this.dart:10:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -37,6 +9,16 @@
method method1() → void
;
}
-static field invalid-type A2;
+extension A2 on self::A1* {
+ method method2 = self::A2|method2;
+ method method3 = self::A2|method3;
+ method method4 = self::A2|method4;
+}
+static method A2|method2(final self::A1* #this) → void
+ ;
+static method A2|method3(final self::A1* #this) → core::Object*
+ ;
+static method A2|method4(final self::A1* #this, core::Object* o) → void
+ ;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect b/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect
index f1182fb..c2ae0c9 100644
--- a/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/instance_members.dart.outline.expect
@@ -1,61 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-// ^^
-// pkg/front_end/testcases/extensions/instance_members.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1 {}
-// ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension B2<T> on B1<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:17: Error: Expected '{' before this.
-// extension B2<T> on B1<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:20: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension B2<T> on B1<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:20: Error: 'B1' is already declared in this scope.
-// extension B2<T> on B1<T> {
-// ^^
-// pkg/front_end/testcases/extensions/instance_members.dart:28:7: Context: Previous declaration of 'B1'.
-// class B1<T> {}
-// ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:7:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:1: Warning: Type 'extension' not found.
-// extension B2<T> on B1<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/instance_members.dart:30:17: Warning: Type 'on' not found.
-// extension B2<T> on B1<T> {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -67,8 +10,27 @@
synthetic constructor •() → self::B1<self::B1::T*>*
;
}
-static field invalid-type A2;
-static method B2<T extends core::Object* = dynamic>() → invalid-type
+extension A2 on self::A1* {
+ method method1 = self::A2|method1;
+ method method2 = self::A2|method2;
+ method method3 = self::A2|method3;
+ method method4 = self::A2|method4;
+}
+extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+ method method1 = self::B2|method1;
+ method method2 = self::B2|method2;
+}
+static method A2|method1(final self::A1* #this) → self::A1*
+ ;
+static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1*
+ ;
+static method A2|method3<T extends core::Object* = dynamic>(final self::A1* #this, [self::A2|method3::T* o]) → self::A1*
+ ;
+static method A2|method4<T extends core::Object* = dynamic>(final self::A1* #this, {self::A2|method4::T* o}) → self::A1*
+ ;
+static method B2|method1<#T extends core::Object* = dynamic>(final self::B1<self::B2|method1::#T*>* #this) → self::B1<self::B2|method1::#T*>*
+ ;
+static method B2|method2<#T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::#T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::#T*>*
;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect b/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect
index a323fdb..48438c1 100644
--- a/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/other_kinds.dart.outline.expect
@@ -1,32 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-// ^^
-// pkg/front_end/testcases/extensions/other_kinds.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/other_kinds.dart:18:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -44,6 +16,24 @@
static method setStaticField(core::int* value) → void
;
}
-static field invalid-type A2;
+extension A2 on self::A1* {
+ get instanceProperty = self::A2|get#instanceProperty;
+ operator + = self::A2|+;
+ static field staticField = self::A2|staticField;
+ static get staticProperty = get self::A2|staticProperty;
+ set instanceProperty = self::A2|set#instanceProperty;
+ static set staticProperty = set self::A2|staticProperty;
+}
+static field core::int* A2|staticField;
+static method A2|get#instanceProperty(final self::A1* #this) → core::int*
+ ;
+static method A2|set#instanceProperty(final self::A1* #this, core::int* value) → void
+ ;
+static method A2|+(final self::A1* #this, core::int* value) → core::int*
+ ;
+static get A2|staticProperty() → core::int*
+ ;
+static set A2|staticProperty(core::int* value) → void
+ ;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/extensions/static_access.dart.outline.expect b/pkg/front_end/testcases/extensions/static_access.dart.outline.expect
index 8334102..4e9dc86 100644
--- a/pkg/front_end/testcases/extensions/static_access.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/static_access.dart.outline.expect
@@ -1,32 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension Extension on Class {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:24: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension Extension on Class {
-// ^^^^^
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:24: Error: 'Class' is already declared in this scope.
-// extension Extension on Class {
-// ^^^^^
-// pkg/front_end/testcases/extensions/static_access.dart:5:7: Context: Previous declaration of 'Class'.
-// class Class {}
-// ^^^^^
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:1: Warning: Type 'extension' not found.
-// extension Extension on Class {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/static_access.dart:7:21: Warning: Type 'on' not found.
-// extension Extension on Class {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -34,6 +6,21 @@
synthetic constructor •() → self::Class*
;
}
-static field invalid-type Extension;
+extension Extension on self::Class* {
+ static method method = self::Extension|method;
+ static method genericMethod = self::Extension|genericMethod;
+ static get property = get self::Extension|property;
+ static field field = self::Extension|field;
+ static set property = set self::Extension|property;
+}
+static field dynamic Extension|field;
+static method Extension|method() → dynamic
+ ;
+static method Extension|genericMethod<T extends core::Object* = dynamic>(self::Extension|genericMethod::T* t) → dynamic
+ ;
+static get Extension|property() → dynamic
+ ;
+static set Extension|property(dynamic value) → void
+ ;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect b/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect
index a6d69ea..3689d95 100644
--- a/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/type_variables.dart.outline.expect
@@ -1,36 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2<T> on A1<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:17: Error: Expected '{' before this.
-// extension A2<T> on A1<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:20: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2<T> on A1<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:20: Error: 'A1' is already declared in this scope.
-// extension A2<T> on A1<T> {
-// ^^
-// pkg/front_end/testcases/extensions/type_variables.dart:5:7: Context: Previous declaration of 'A1'.
-// class A1<T> {}
-// ^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:1: Warning: Type 'extension' not found.
-// extension A2<T> on A1<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/type_variables.dart:7:17: Warning: Type 'on' not found.
-// extension A2<T> on A1<T> {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -38,7 +6,13 @@
synthetic constructor •() → self::A1<self::A1::T*>*
;
}
-static method A2<T extends core::Object* = dynamic>() → invalid-type
+extension A2<T extends core::Object* = dynamic> on self::A1<T*>* {
+ method method1 = self::A2|method1;
+ method method2 = self::A2|method2;
+}
+static method A2|method1<#T extends core::Object* = dynamic, S extends self::A2|method1::#T = dynamic>(final self::A1<self::A2|method1::#T*>* #this) → self::A1<self::A2|method1::#T*>*
+ ;
+static method A2|method2<#T extends core::Object* = dynamic, S extends self::A1<self::A2|method2::#T>* = dynamic>(final self::A1<self::A2|method2::#T*>* #this, self::A2|method2::S* o) → self::A1<self::A2|method2::#T*>*
;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/extensions/use_this.dart.outline.expect b/pkg/front_end/testcases/extensions/use_this.dart.outline.expect
index 9c0d4ca..dbd8b2e 100644
--- a/pkg/front_end/testcases/extensions/use_this.dart.outline.expect
+++ b/pkg/front_end/testcases/extensions/use_this.dart.outline.expect
@@ -1,61 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:17: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension A2 on A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:17: Error: 'A1' is already declared in this scope.
-// extension A2 on A1 {
-// ^^
-// pkg/front_end/testcases/extensions/use_this.dart:7:7: Context: Previous declaration of 'A1'.
-// class A1 {}
-// ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:11: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension B2<T> on B1<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:17: Error: Expected '{' before this.
-// extension B2<T> on B1<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:20: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension B2<T> on B1<T> {
-// ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:20: Error: 'B1' is already declared in this scope.
-// extension B2<T> on B1<T> {
-// ^^
-// pkg/front_end/testcases/extensions/use_this.dart:20:7: Context: Previous declaration of 'B1'.
-// class B1<T> {}
-// ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:1: Warning: Type 'extension' not found.
-// extension A2 on A1 {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:9:14: Warning: Type 'on' not found.
-// extension A2 on A1 {
-// ^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:1: Warning: Type 'extension' not found.
-// extension B2<T> on B1<T> {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/extensions/use_this.dart:22:17: Warning: Type 'on' not found.
-// extension B2<T> on B1<T> {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -67,8 +10,21 @@
synthetic constructor •() → self::B1<self::B1::T*>*
;
}
-static field invalid-type A2;
-static method B2<T extends core::Object* = dynamic>() → invalid-type
+extension A2 on self::A1* {
+ method method1 = self::A2|method1;
+ method method2 = self::A2|method2;
+}
+extension B2<T extends core::Object* = dynamic> on self::B1<T*>* {
+ method method1 = self::B2|method1;
+ method method2 = self::B2|method2;
+}
+static method A2|method1(final self::A1* #this) → self::A1*
+ ;
+static method A2|method2<T extends core::Object* = dynamic>(final self::A1* #this, self::A2|method2::T* o) → self::A1*
+ ;
+static method B2|method1<#T extends core::Object* = dynamic>(final self::B1<self::B2|method1::#T*>* #this) → self::B1<self::B2|method1::#T*>*
+ ;
+static method B2|method2<#T extends core::Object* = dynamic, S extends core::Object* = dynamic>(final self::B1<self::B2|method2::#T*>* #this, self::B2|method2::S* o) → self::B1<self::B2|method2::#T*>*
;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/DeltaBlue.dart.outline.expect b/pkg/front_end/testcases/general/DeltaBlue.dart.outline.expect
index daecf9e..0d1797b 100644
--- a/pkg/front_end/testcases/general/DeltaBlue.dart.outline.expect
+++ b/pkg/front_end/testcases/general/DeltaBlue.dart.outline.expect
@@ -183,13 +183,13 @@
method execute() → void
;
}
-static const field dynamic REQUIRED = const self::Strength::•(0, "required");
-static const field dynamic STRONG_PREFERRED = const self::Strength::•(1, "strongPreferred");
-static const field dynamic PREFERRED = const self::Strength::•(2, "preferred");
-static const field dynamic STRONG_DEFAULT = const self::Strength::•(3, "strongDefault");
-static const field dynamic NORMAL = const self::Strength::•(4, "normal");
-static const field dynamic WEAK_DEFAULT = const self::Strength::•(5, "weakDefault");
-static const field dynamic WEAKEST = const self::Strength::•(6, "weakest");
+static const field self::Strength* REQUIRED = const self::Strength::•(0, "required");
+static const field self::Strength* STRONG_PREFERRED = const self::Strength::•(1, "strongPreferred");
+static const field self::Strength* PREFERRED = const self::Strength::•(2, "preferred");
+static const field self::Strength* STRONG_DEFAULT = const self::Strength::•(3, "strongDefault");
+static const field self::Strength* NORMAL = const self::Strength::•(4, "normal");
+static const field self::Strength* WEAK_DEFAULT = const self::Strength::•(5, "weakDefault");
+static const field self::Strength* WEAKEST = const self::Strength::•(6, "weakest");
static const field core::int* NONE = 1;
static const field core::int* FORWARD = 2;
static const field core::int* BACKWARD = 0;
diff --git a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.outline.expect b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.outline.expect
index 466c02c..4c54d2f 100644
--- a/pkg/front_end/testcases/general/annotation_on_enum_values.dart.outline.expect
+++ b/pkg/front_end/testcases/general/annotation_on_enum_values.dart.outline.expect
@@ -14,7 +14,7 @@
static const field core::List<self::Foo*>* values = const <self::Foo*>[self::Foo::bar, self::Foo::baz, self::Foo::cafebabe];
@self::hest
static const field self::Foo* bar = const self::Foo::•(0, "Foo.bar");
- @self::Fisk::fisk<dynamic>(self::hest)
+ @self::Fisk::fisk<core::int*>(self::hest)
static const field self::Foo* baz = const self::Foo::•(1, "Foo.baz");
static const field self::Foo* cafebabe = const self::Foo::•(2, "Foo.cafebabe");
const constructor •(core::int* index, core::String* _name) → self::Foo*
diff --git a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.outline.expect b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.outline.expect
index 60367e2..750b872 100644
--- a/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bounds_check_depends_on_inference.dart.outline.expect
@@ -5,13 +5,13 @@
class A<X extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::X*>*
;
- method bar<generic-covariant-impl Y extends self::A::X* = dynamic>() → dynamic
+ method bar<generic-covariant-impl Y extends self::A::X* = self::A::X*>() → dynamic
;
}
class B extends core::Object {
synthetic constructor •() → self::B*
;
- static method foo<Y extends core::Object* = dynamic>() → self::A<self::B::foo::Y*>*
+ static method foo<Y extends core::Object* = core::Object*>() → self::A<self::B::foo::Y*>*
;
}
static method baz() → dynamic
diff --git a/pkg/front_end/testcases/general/bug30695.dart.outline.expect b/pkg/front_end/testcases/general/bug30695.dart.outline.expect
index bb6576d..8ab1586 100644
--- a/pkg/front_end/testcases/general/bug30695.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug30695.dart.outline.expect
@@ -13,7 +13,7 @@
import "dart:core" as core;
class A extends core::Object {
- field dynamic foo;
+ field core::int* foo;
synthetic constructor •() → self::A*
;
}
diff --git a/pkg/front_end/testcases/general/bug31124.dart.outline.expect b/pkg/front_end/testcases/general/bug31124.dart.outline.expect
index 8e65e77..7ac93d0 100644
--- a/pkg/front_end/testcases/general/bug31124.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug31124.dart.outline.expect
@@ -15,5 +15,6 @@
// ^
//
import self as self;
+import "dart:core" as core;
-static field dynamic a;
+static field () →* core::String* a;
diff --git a/pkg/front_end/testcases/general/bug32866.dart.outline.expect b/pkg/front_end/testcases/general/bug32866.dart.outline.expect
index cb6153c..6857612 100644
--- a/pkg/front_end/testcases/general/bug32866.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug32866.dart.outline.expect
@@ -9,9 +9,9 @@
}
class A extends core::Object implements self::B {
final field core::String* f;
- constructor •(dynamic f) → self::A*
+ constructor •(core::String* f) → self::A*
;
}
-static field dynamic a;
+static field self::A* a;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/bug35470.dart.outline.expect b/pkg/front_end/testcases/general/bug35470.dart.outline.expect
index e3abe47..c18a369 100644
--- a/pkg/front_end/testcases/general/bug35470.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug35470.dart.outline.expect
@@ -5,7 +5,7 @@
class A<X extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::A<self::A::X*>*
;
- method foo<generic-covariant-impl Y extends self::A::X* = dynamic>() → dynamic
+ method foo<generic-covariant-impl Y extends self::A::X* = self::A::X*>() → dynamic
;
}
class B extends self::A<dynamic> {
diff --git a/pkg/front_end/testcases/general/bug37476.dart.outline.expect b/pkg/front_end/testcases/general/bug37476.dart.outline.expect
index 6c89350..50be2c0 100644
--- a/pkg/front_end/testcases/general/bug37476.dart.outline.expect
+++ b/pkg/front_end/testcases/general/bug37476.dart.outline.expect
@@ -2,13 +2,13 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
method foo() → <S extends self::A::T* = dynamic>(S*) →* void
;
}
-class B<T extends core::num* = dynamic> extends core::Object {
+class B<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::B<self::B::T*>*
;
method foo() → (self::B::T*) →* void
diff --git a/pkg/front_end/testcases/general/check_deferred_allocation.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_allocation.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_allocation.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_allocation.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_as_check.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_as_check.dart.outline.expect
index a5d2ec8..efd56f1 100644
--- a/pkg/front_end/testcases/general/check_deferred_as_check.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_as_check.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_args.dart.outline.expect
index a513a65..9871382 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args.dart.outline.expect
@@ -21,6 +21,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_args2.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_args2.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_call.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_call.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_call.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_call.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_before_write.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_before_write.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_before_write.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_before_write.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_is_check.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_is_check.dart.outline.expect
index a5d2ec8..efd56f1 100644
--- a/pkg/front_end/testcases/general/check_deferred_is_check.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_is_check.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_read.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_read.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_read.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_static_field.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_read_type.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_read_type.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_read_type.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_read_type.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_static_method_call.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.outline.expect b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.outline.expect
index 82269cd..37e88f3 100644
--- a/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.outline.expect
+++ b/pkg/front_end/testcases/general/check_deferred_type_declaration.dart.outline.expect
@@ -19,6 +19,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.outline.expect b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.outline.expect
index 297fe46..fb0387c 100644
--- a/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.outline.expect
+++ b/pkg/front_end/testcases/general/circularity-via-initializing-formal.dart.outline.expect
@@ -1,12 +1,20 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/circularity-via-initializing-formal.dart:15:3: Error: Can't infer the type of 'C._circular': circularity found during type inference.
+// Specify the type explicitly.
+// C._circular(this.f);
+// ^^^^^^^^^^^
+//
import self as self;
import "dart:core" as core;
class C extends core::Object {
- field dynamic f;
- constructor _circular(dynamic f) → self::C*
+ field self::C* f;
+ constructor _circular(self::C* f) → self::C*
;
}
-static field dynamic x;
+static field self::C* x;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/clone_function_type.dart.outline.expect b/pkg/front_end/testcases/general/clone_function_type.dart.outline.expect
index a2cf5b5..24bf6bc 100644
--- a/pkg/front_end/testcases/general/clone_function_type.dart.outline.expect
+++ b/pkg/front_end/testcases/general/clone_function_type.dart.outline.expect
@@ -26,6 +26,74 @@
// class Ef1<X extends Function({int})> {
// ^
//
+// pkg/front_end/testcases/general/clone_function_type.dart:67:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Bm2<Z> extends Object with Am2<Function(int), Z> {}
+// ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+// ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:70:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Cm2<Z> extends Object with Am2<Function(int x), Z> {}
+// ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+// ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:86:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Jm2<Z> extends Object with Am2<Function, Z> {}
+// ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+// ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:89:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Object with Am2'.
+// - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Km2<Z> extends Object with Am2<Function(Function Function), Z> {}
+// ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+// ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:95:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Mm2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Mm2<Z> = Object with Am2<Function(int), Z>;
+// ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+// ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:98:7: Error: Type argument 'dynamic Function(int)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Nm2'.
+// Try changing type arguments so that they conform to the bounds.
+// class Nm2<Z> = Object with Am2<Function(int x), Z>;
+// ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+// ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:114:7: Error: Type argument 'Function' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Um2'.
+// - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Um2<Z> = Object with Am2<Function, Z>;
+// ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+// ^
+//
+// pkg/front_end/testcases/general/clone_function_type.dart:117:7: Error: Type argument 'dynamic Function(Function)' doesn't conform to the bound 'dynamic Function()' of the type variable 'X' on 'Am2' in the supertype 'Am2' of class 'Vm2'.
+// - 'Function' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class Vm2<Z> = Object with Am2<Function(Function Function), Z>;
+// ^
+// pkg/front_end/testcases/general/clone_function_type.dart:64:11: Context: This is the type variable whose bound isn't conformed to.
+// class Am2<X extends Function(), Y> {}
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -197,7 +265,7 @@
: super core::Object::•()
;
}
-class Am2<X extends () →* dynamic = dynamic, Y extends core::Object* = dynamic> extends core::Object {
+class Am2<X extends () →* dynamic = () →* dynamic, Y extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::Am2<self::Am2::X*, self::Am2::Y*>*
;
}
@@ -449,87 +517,87 @@
synthetic constructor •() → self::Km3<self::Km3::Z*>*
;
}
-class Af1<X extends (core::int*) →* dynamic = dynamic> extends core::Object {
+class Af1<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Af1<self::Af1::foo::X*>*
;
}
-class Bf1<X extends (core::int*) →* dynamic = dynamic> extends core::Object {
+class Bf1<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Bf1<self::Bf1::foo::X*>*
;
}
-class Cf1<X extends () →* core::int* = dynamic> extends core::Object {
+class Cf1<X extends () →* core::int* = () →* core::int*> extends core::Object {
static factory foo<X extends () →* core::int* = dynamic>() → self::Cf1<self::Cf1::foo::X*>*
;
}
-class Df1<X extends () →* dynamic = dynamic> extends core::Object {
+class Df1<X extends () →* dynamic = () →* dynamic> extends core::Object {
static factory foo<X extends () →* dynamic = dynamic>() → self::Df1<self::Df1::foo::X*>*
;
}
-class Ef1<X extends () →* dynamic = dynamic> extends core::Object {
+class Ef1<X extends () →* dynamic = () →* dynamic> extends core::Object {
static factory foo<X extends () →* dynamic = dynamic>() → self::Ef1<self::Ef1::foo::X*>*
;
}
-class Ff1<X extends ({x: core::int*}) →* dynamic = dynamic> extends core::Object {
+class Ff1<X extends ({x: core::int*}) →* dynamic = ({x: core::int*}) →* dynamic> extends core::Object {
static factory foo<X extends ({x: core::int*}) →* dynamic = dynamic>() → self::Ff1<self::Ff1::foo::X*>*
;
}
-class Gf1<X extends ([core::int*]) →* dynamic = dynamic> extends core::Object {
+class Gf1<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::Gf1<self::Gf1::foo::X*>*
;
}
-class Hf1<X extends ([core::int*]) →* dynamic = dynamic> extends core::Object {
+class Hf1<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::Hf1<self::Hf1::foo::X*>*
;
}
-class If1<X extends core::Function* = dynamic> extends core::Object {
+class If1<X extends core::Function* = core::Function*> extends core::Object {
static factory foo<X extends core::Function* = dynamic>() → self::If1<self::If1::foo::X*>*
;
}
-class Jf1<X extends (core::Function*) →* dynamic = dynamic> extends core::Object {
+class Jf1<X extends (core::Function*) →* dynamic = (core::Function*) →* dynamic> extends core::Object {
static factory foo<X extends (core::Function*) →* dynamic = dynamic>() → self::Jf1<self::Jf1::foo::X*>*
;
}
-class Kf1<X extends () →* (() →* core::Function*) →* dynamic = dynamic> extends core::Object {
+class Kf1<X extends () →* (() →* core::Function*) →* dynamic = () →* (() →* core::Function*) →* dynamic> extends core::Object {
static factory foo<X extends () →* (() →* core::Function*) →* dynamic = dynamic>() → self::Kf1<self::Kf1::foo::X*>*
;
}
-class Bf2<X extends (core::int*) →* dynamic = dynamic> extends core::Object {
+class Bf2<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Bf2<self::Bf2::foo::X*>*
;
}
-class Cf2<X extends (core::int*) →* dynamic = dynamic> extends core::Object {
+class Cf2<X extends (core::int*) →* dynamic = (core::int*) →* dynamic> extends core::Object {
static factory foo<X extends (core::int*) →* dynamic = dynamic>() → self::Cf2<self::Cf2::foo::X*>*
;
}
-class Df2<X extends () →* core::int* = dynamic> extends core::Object {
+class Df2<X extends () →* core::int* = () →* core::int*> extends core::Object {
static factory foo<X extends () →* core::int* = dynamic>() → self::Df2<self::Df2::foo::X*>*
;
}
-class Ef2<X extends () →* dynamic = dynamic> extends core::Object {
+class Ef2<X extends () →* dynamic = () →* dynamic> extends core::Object {
static factory foo<X extends () →* dynamic = dynamic>() → self::Ef2<self::Ef2::foo::X*>*
;
}
-class Ff2<X extends () →* dynamic = dynamic> extends core::Object {
+class Ff2<X extends () →* dynamic = () →* dynamic> extends core::Object {
static factory foo<X extends () →* dynamic = dynamic>() → self::Ff2<self::Ff2::foo::X*>*
;
}
-class Gf2<X extends ({x: core::int*}) →* dynamic = dynamic> extends core::Object {
+class Gf2<X extends ({x: core::int*}) →* dynamic = ({x: core::int*}) →* dynamic> extends core::Object {
static factory foo<X extends ({x: core::int*}) →* dynamic = dynamic>() → self::Gf2<self::Gf2::foo::X*>*
;
}
-class Hf2<X extends ([core::int*]) →* dynamic = dynamic> extends core::Object {
+class Hf2<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::Hf2<self::Hf2::foo::X*>*
;
}
-class If2<X extends ([core::int*]) →* dynamic = dynamic> extends core::Object {
+class If2<X extends ([core::int*]) →* dynamic = ([core::int*]) →* dynamic> extends core::Object {
static factory foo<X extends ([core::int*]) →* dynamic = dynamic>() → self::If2<self::If2::foo::X*>*
;
}
-class Jf2<X extends (core::Function*) →* dynamic = dynamic> extends core::Object {
+class Jf2<X extends (core::Function*) →* dynamic = (core::Function*) →* dynamic> extends core::Object {
static factory foo<X extends (core::Function*) →* dynamic = dynamic>() → self::Jf2<self::Jf2::foo::X*>*
;
}
-class Kf2<X extends () →* (() →* core::Function*) →* dynamic = dynamic> extends core::Object {
+class Kf2<X extends () →* (() →* core::Function*) →* dynamic = () →* (() →* core::Function*) →* dynamic> extends core::Object {
static factory foo<X extends () →* (() →* core::Function*) →* dynamic = dynamic>() → self::Kf2<self::Kf2::foo::X*>*
;
}
diff --git a/pkg/front_end/testcases/general/closure.dart.outline.expect b/pkg/front_end/testcases/general/closure.dart.outline.expect
index 0f97df6..4f62ce2 100644
--- a/pkg/front_end/testcases/general/closure.dart.outline.expect
+++ b/pkg/front_end/testcases/general/closure.dart.outline.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
class Foo extends core::Object {
- field dynamic _field;
+ field self::Bar* _field;
synthetic constructor •() → self::Foo*
;
}
diff --git a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.outline.expect b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.outline.expect
index 901ca71..73716f7 100644
--- a/pkg/front_end/testcases/general/complex_class_hierarchy.dart.outline.expect
+++ b/pkg/front_end/testcases/general/complex_class_hierarchy.dart.outline.expect
@@ -18,7 +18,7 @@
synthetic constructor •() → self::D*
;
}
-class G<T extends self::A* = dynamic> extends core::Object {
+class G<T extends self::A* = self::A*> extends core::Object {
synthetic constructor •() → self::G<self::G::T*>*
;
}
diff --git a/pkg/front_end/testcases/general/deferred_type_annotation.dart.outline.expect b/pkg/front_end/testcases/general/deferred_type_annotation.dart.outline.expect
index 7640695..1446703 100644
--- a/pkg/front_end/testcases/general/deferred_type_annotation.dart.outline.expect
+++ b/pkg/front_end/testcases/general/deferred_type_annotation.dart.outline.expect
@@ -20,6 +20,6 @@
static method m() → core::int*
;
}
-static field dynamic x;
+static field core::int* x;
static method m(dynamic x) → dynamic
;
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.outline.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.outline.expect
index bedeadd..42a79f3 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.outline.expect
@@ -9,11 +9,11 @@
// class Dupe {}
// ^^^^
//
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Warning: Type 'Dupe.a' not found.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
// Dupe.a b;
// ^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Warning: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
// import 'duplicated_bad_prefix_lib2.dart' as dupe;
// ^
//
diff --git a/pkg/front_end/testcases/general/duplicated_declarations.dart.outline.expect b/pkg/front_end/testcases/general/duplicated_declarations.dart.outline.expect
index 6764ff8..1b8f882 100644
--- a/pkg/front_end/testcases/general/duplicated_declarations.dart.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_declarations.dart.outline.expect
@@ -299,7 +299,7 @@
// typedef Typedef = Object Function();
// ^^^^^^^
//
-// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Warning: 'C' isn't a type.
+// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Error: 'C' isn't a type.
// class Sub extends C {
// ^
// pkg/front_end/testcases/general/duplicated_declarations.dart:65:19: Context: This isn't a type.
@@ -332,7 +332,7 @@
;
}
class C#2 extends core::Object { // from org-dartlang-testcase:///duplicated_declarations_part.dart
- field dynamic field;
+ field core::String* field;
constructor •(dynamic a) → self::C#2*
;
method m() → dynamic
@@ -347,7 +347,7 @@
;
}
class C extends core::Object {
- field dynamic field;
+ field core::String* field;
constructor •(dynamic a) → self::C*
;
method m() → dynamic
@@ -439,7 +439,7 @@
method toString() → core::String*
return this.{=self::AnotherEnum::_name};
}
-static field dynamic field;
+static field core::String* field;
static method main() → dynamic
;
static method foo() → dynamic
diff --git a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.outline.expect b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.outline.expect
index 8e9604a..96aece8 100644
--- a/pkg/front_end/testcases/general/duplicated_field_initializer.dart.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_field_initializer.dart.outline.expect
@@ -14,7 +14,7 @@
class A extends core::Object {
field core::int* a;
- constructor •(dynamic a) → self::A*
+ constructor •(core::int* a) → self::A*
;
}
static method main() → void
diff --git a/pkg/front_end/testcases/general/dynamic_and_void.dart.outline.expect b/pkg/front_end/testcases/general/dynamic_and_void.dart.outline.expect
index 4327762..9583c9b 100644
--- a/pkg/front_end/testcases/general/dynamic_and_void.dart.outline.expect
+++ b/pkg/front_end/testcases/general/dynamic_and_void.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/dynamic_and_void.dart:10:27: Warning: Type 'dynamic' not found.
+// pkg/front_end/testcases/general/dynamic_and_void.dart:10:27: Error: Type 'dynamic' not found.
// /*@warning=TypeNotFound*/ dynamic testDynamic() => 0;
// ^^^^^^^
//
diff --git a/pkg/front_end/testcases/general/extension_methods.dart.outline.expect b/pkg/front_end/testcases/general/extension_methods.dart.outline.expect
index 5fcae20..98495a1 100644
--- a/pkg/front_end/testcases/general/extension_methods.dart.outline.expect
+++ b/pkg/front_end/testcases/general/extension_methods.dart.outline.expect
@@ -1,32 +1,4 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:1: Error: This requires the 'extension-methods' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// extension E on C {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:16: Error: A function declaration needs an explicit list of parameters.
-// Try adding a parameter list to the function declaration.
-// extension E on C {
-// ^
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:16: Error: 'C' is already declared in this scope.
-// extension E on C {
-// ^
-// pkg/front_end/testcases/general/extension_methods.dart:9:7: Context: Previous declaration of 'C'.
-// class C {
-// ^
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:1: Warning: Type 'extension' not found.
-// extension E on C {
-// ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/extension_methods.dart:13:13: Warning: Type 'on' not found.
-// extension E on C {
-// ^^
-//
import self as self;
import "dart:core" as core;
@@ -38,6 +10,10 @@
get one() → core::int*
;
}
-static field invalid-type E;
+extension E on self::C* {
+ get two = self::E|get#two;
+}
+static method E|get#two(final self::C* #this) → core::int*
+ ;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/function_in_field.dart.outline.expect b/pkg/front_end/testcases/general/function_in_field.dart.outline.expect
index 3470a7a..9f1148b 100644
--- a/pkg/front_end/testcases/general/function_in_field.dart.outline.expect
+++ b/pkg/front_end/testcases/general/function_in_field.dart.outline.expect
@@ -1,6 +1,7 @@
library;
import self as self;
+import "dart:core" as core;
-static field dynamic x;
+static field () →* core::int* x;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/function_type_assignments.dart.outline.expect b/pkg/front_end/testcases/general/function_type_assignments.dart.outline.expect
index 055c6c8..3edc43d 100644
--- a/pkg/front_end/testcases/general/function_type_assignments.dart.outline.expect
+++ b/pkg/front_end/testcases/general/function_type_assignments.dart.outline.expect
@@ -7,9 +7,9 @@
static field core::String* z;
static method identity<T extends core::Object* = dynamic>(self::identity::T* t) → self::identity::T*
;
-static method identityObject<T extends core::Object* = dynamic>(self::identityObject::T* t) → self::identityObject::T*
+static method identityObject<T extends core::Object* = core::Object*>(self::identityObject::T* t) → self::identityObject::T*
;
-static method identityList<T extends core::List<self::identityList::T>* = dynamic>(self::identityList::T* t) → self::identityList::T*
+static method identityList<T extends core::List<self::identityList::T>* = core::List<dynamic>*>(self::identityList::T* t) → self::identityList::T*
;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/function_type_default_value.dart.outline.expect b/pkg/front_end/testcases/general/function_type_default_value.dart.outline.expect
index 9bfb098..9d451cd 100644
--- a/pkg/front_end/testcases/general/function_type_default_value.dart.outline.expect
+++ b/pkg/front_end/testcases/general/function_type_default_value.dart.outline.expect
@@ -10,7 +10,7 @@
// void Function({obj: Object}) x;
// ^
//
-// pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Warning: Type 'obj' not found.
+// pkg/front_end/testcases/general/function_type_default_value.dart:5:16: Error: Type 'obj' not found.
// void Function({obj: Object}) x;
// ^^^
//
diff --git a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.outline.expect b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.outline.expect
index 07147d2..55f17dd 100644
--- a/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.outline.expect
+++ b/pkg/front_end/testcases/general/implicit_const_with_static_fields.dart.outline.expect
@@ -3,11 +3,11 @@
import "dart:core" as core;
class C extends core::Object {
- static const field dynamic constField = 87;
+ static const field core::int* constField = 87;
const constructor •(dynamic x) → self::C*
: super core::Object::•()
;
}
-static const field dynamic constTopLevelField = 42;
+static const field core::int* constTopLevelField = 42;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.outline.expect b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.outline.expect
new file mode 100644
index 0000000..5494096
--- /dev/null
+++ b/pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart.outline.expect
@@ -0,0 +1,41 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected '.' before this.
+// C.a(this);
+// ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:6:11: Error: Expected an identifier, but got ')'.
+// C.a(this);
+// ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:7:12: Error: Expected an identifier, but got ')'.
+// C.b(this.);
+// ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected '.' before this.
+// C.c(this, p);
+// ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:8:11: Error: Expected an identifier, but got ','.
+// C.c(this, p);
+// ^
+//
+// pkg/front_end/testcases/general/incomplete_field_formal_parameter.dart:9:12: Error: Expected an identifier, but got ','.
+// C.d(this., p);
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ constructor a() → self::C*
+ ;
+ constructor b() → self::C*
+ ;
+ constructor c() → self::C*
+ ;
+ constructor d() → self::C*
+ ;
+}
diff --git a/pkg/front_end/testcases/general/many_errors.dart.outline.expect b/pkg/front_end/testcases/general/many_errors.dart.outline.expect
index 27f485d..8485710 100644
--- a/pkg/front_end/testcases/general/many_errors.dart.outline.expect
+++ b/pkg/front_end/testcases/general/many_errors.dart.outline.expect
@@ -15,7 +15,7 @@
// const A.named2() : x = new Object();
// ^^^
//
-// pkg/front_end/testcases/general/many_errors.dart:10:24: Warning: 'x' is a final instance variable that has already been initialized.
+// pkg/front_end/testcases/general/many_errors.dart:10:24: Error: 'x' is a final instance variable that has already been initialized.
// const A.named2() : x = new Object();
// ^
// pkg/front_end/testcases/general/many_errors.dart:6:9: Context: 'x' was initialized here.
diff --git a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
index fd825b0..c8bbb73 100644
--- a/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_application_override.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -12,7 +12,7 @@
// class A0 = S with M;
// ^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -22,7 +22,7 @@
// class A1 = S with M1, M;
// ^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -32,7 +32,7 @@
// class A2 = S with M1, M2, M;
// ^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -42,7 +42,7 @@
// class A0X = S with M, MX;
// ^^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -52,7 +52,7 @@
// class A1X = S with M1, M, MX;
// ^^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -62,7 +62,7 @@
// class A2X = S with M1, M2, M, MX;
// ^^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -72,7 +72,7 @@
// class B0 extends S with M {}
// ^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -82,7 +82,7 @@
// class B1 extends S with M1, M {}
// ^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -92,7 +92,7 @@
// class B2 extends S with M1, M2, M {}
// ^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -102,7 +102,7 @@
// class B0X extends S with M, MX {}
// ^^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
@@ -112,7 +112,7 @@
// class B1X extends S with M1, M, MX {}
// ^^^
//
-// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Warning: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
+// pkg/front_end/testcases/general/mixin_application_override.dart:12:3: Error: The method 'M.foo' has fewer positional arguments than those of overridden method 'S.foo'.
// foo() {}
// ^
// pkg/front_end/testcases/general/mixin_application_override.dart:8:3: Context: This is the overridden method ('foo').
diff --git a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
index 485f78a..5d68397 100644
--- a/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_inherited_setter_for_mixed_in_field.dart.outline.expect
@@ -6,7 +6,7 @@
synthetic constructor •() → self::A*
;
}
-class C<T extends self::A* = dynamic> extends core::Object {
+class C<T extends self::A* = self::A*> extends core::Object {
generic-covariant-impl field self::C::T* _field;
synthetic constructor •() → self::C<self::C::T*>*
;
diff --git a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.outline.expect b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.outline.expect
index d28f088..2da0b47 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_after_inference.dart.outline.expect
@@ -1,4 +1,27 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:26:9: Error: The return type of the method 'F.y' is 'A', which does not match the return type, 'B', of the overridden method, 'D.y'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+// - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+// Change to a subtype of 'B'.
+// A get y => null;
+// ^
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:16:7: Context: This is the overridden method ('y').
+// get y => null; // Inferred type: B
+// ^
+//
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:25:16: Error: The parameter 'value' of the method 'F.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.x'.
+// - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_after_inference.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void set x(B value) {}
+// ^
+// pkg/front_end/testcases/general/override_check_accessor_after_inference.dart:15:12: Context: This is the overridden method ('x').
+// void set x(value) {} // Inferred type: A
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.outline.expect b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.outline.expect
index ba70391..5e1469f 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_basic.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_basic.dart.outline.expect
@@ -1,4 +1,27 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:21:14: Error: The return type of the method 'E.y' is 'Object', which does not match the return type, 'A', of the overridden method, 'C.y'.
+// - 'Object' is from 'dart:core'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
+// Change to a subtype of 'A'.
+// Object get y => null;
+// ^
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:11:9: Context: This is the overridden method ('y').
+// A get y => null;
+// ^
+//
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:20:16: Error: The parameter 'value' of the method 'E.x' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.x'.
+// - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void set x(B value) {}
+// ^
+// pkg/front_end/testcases/general/override_check_accessor_basic.dart:10:12: Context: This is the overridden method ('x').
+// void set x(A value) {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.outline.expect
index a3eaa5e..c042245 100644
--- a/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart.outline.expect
@@ -1,4 +1,26 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:22:17: Error: The parameter 'value' of the method 'D.x4' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.x4'.
+// - 'B' is from 'pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void set x4(B value) {} // Not covariant
+// ^
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:13:12: Context: This is the overridden method ('x4').
+// void set x4(A value) {}
+// ^
+//
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:23:32: Error: The parameter 'value' of the method 'D.x5' has type 'String', which does not match the corresponding type, 'A', in the overridden method, 'C.x5'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void set x5(covariant String value) {}
+// ^
+// pkg/front_end/testcases/general/override_check_accessor_with_covariant_modifier.dart:14:12: Context: This is the overridden method ('x5').
+// void set x5(covariant A value) {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/override_check_after_inference.dart.outline.expect b/pkg/front_end/testcases/general/override_check_after_inference.dart.outline.expect
index 3f00110..a04839a 100644
--- a/pkg/front_end/testcases/general/override_check_after_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_after_inference.dart.outline.expect
@@ -1,4 +1,17 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_after_inference.dart:22:12: Error: The parameter 'x' of the method 'F.f' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'D.f'.
+// - 'B' is from 'pkg/front_end/testcases/general/override_check_after_inference.dart'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_after_inference.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void f(B x) {}
+// ^
+// pkg/front_end/testcases/general/override_check_after_inference.dart:14:8: Context: This is the overridden method ('f').
+// void f(x) {} // Inferred type: (A) -> void
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/override_check_basic.dart.outline.expect b/pkg/front_end/testcases/general/override_check_basic.dart.outline.expect
index aa8593d..82a45c2 100644
--- a/pkg/front_end/testcases/general/override_check_basic.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_basic.dart.outline.expect
@@ -1,4 +1,47 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:27:10: Error: The return type of the method 'E.f4' is 'Object', which does not match the return type, 'A', of the overridden method, 'C.f4'.
+// - 'Object' is from 'dart:core'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a subtype of 'A'.
+// Object f4() {}
+// ^
+// pkg/front_end/testcases/general/override_check_basic.dart:13:5: Context: This is the overridden method ('f4').
+// A f4() {}
+// ^
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:26:14: Error: The parameter 'x' of the method 'E.f3' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f3'.
+// - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void f3({B x}) {}
+// ^
+// pkg/front_end/testcases/general/override_check_basic.dart:12:8: Context: This is the overridden method ('f3').
+// void f3({A x}) {}
+// ^
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:24:13: Error: The parameter 'x' of the method 'E.f1' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f1'.
+// - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void f1(B x) {}
+// ^
+// pkg/front_end/testcases/general/override_check_basic.dart:10:8: Context: This is the overridden method ('f1').
+// void f1(A x) {}
+// ^
+//
+// pkg/front_end/testcases/general/override_check_basic.dart:25:14: Error: The parameter 'x' of the method 'E.f2' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f2'.
+// - 'B' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_basic.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void f2([B x]) {}
+// ^
+// pkg/front_end/testcases/general/override_check_basic.dart:11:8: Context: This is the overridden method ('f2').
+// void f2([A x]) {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.outline.expect b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.outline.expect
index 6865779..193f75c 100644
--- a/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_generic_method_f_bounded.dart.outline.expect
@@ -2,20 +2,20 @@
import self as self;
import "dart:core" as core;
-class Foo<T extends self::Foo<self::Foo::T>* = dynamic> extends core::Object {
+class Foo<T extends self::Foo<self::Foo::T>* = self::Foo<dynamic>*> extends core::Object {
synthetic constructor •() → self::Foo<self::Foo::T*>*
;
}
abstract class Bar extends core::Object {
synthetic constructor •() → self::Bar*
;
- abstract method fisk<S extends self::Foo<self::Bar::fisk::S>* = dynamic>() → void;
+ abstract method fisk<S extends self::Foo<self::Bar::fisk::S>* = self::Foo<dynamic>*>() → void;
}
class Hest extends core::Object implements self::Bar {
synthetic constructor •() → self::Hest*
;
@core::override
- method fisk<U extends self::Foo<self::Hest::fisk::U>* = dynamic>() → void
+ method fisk<U extends self::Foo<self::Hest::fisk::U>* = self::Foo<dynamic>*>() → void
;
}
static method main() → void
diff --git a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.outline.expect b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.outline.expect
index a65975c..4c08082 100644
--- a/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart.outline.expect
@@ -1,4 +1,26 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:23:28: Error: The parameter 'x' of the method 'D.f5' has type 'String', which does not match the corresponding type, 'A', in the overridden method, 'C.f5'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void f5(covariant String x) {}
+// ^
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:14:8: Context: This is the overridden method ('f5').
+// void f5(covariant A x) {}
+// ^
+//
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:22:13: Error: The parameter 'x' of the method 'D.f4' has type 'B', which does not match the corresponding type, 'A', in the overridden method, 'C.f4'.
+// - 'B' is from 'pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart'.
+// - 'A' is from 'pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart'.
+// Change to a supertype of 'A', or, for a covariant parameter, a subtype.
+// void f4(B x) {} // Not covariant
+// ^
+// pkg/front_end/testcases/general/override_check_with_covariant_modifier.dart:13:8: Context: This is the overridden method ('f4').
+// void f4(A x) {}
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.outline.expect b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.outline.expect
index 6cf04c8..65071a6 100644
--- a/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.outline.expect
+++ b/pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart:8:6: Warning: Using 'pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart' but its 'part of' declaration says 'foo'.
+// pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart:8:6: Error: Using 'pkg/front_end/testcases/general/part_not_part_of_same_named_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_not_part_of_same_named_library.dart' but its 'part of' declaration says 'foo'.
// Try changing the 'part of' declaration to use a relative file name.
// part 'part_not_part_of_same_named_library_lib1.dart';
// ^
diff --git a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.outline.expect b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.outline.expect
index de523ea..bcd74cd 100644
--- a/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.outline.expect
+++ b/pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart:8:6: Warning: Using 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart' but its 'part of' declaration says 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib2.dart'.
+// pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart:8:6: Error: Using 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib1.dart' as part of 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library.dart' but its 'part of' declaration says 'pkg/front_end/testcases/general/part_part_of_different_unnamed_library_lib2.dart'.
// part 'part_part_of_different_unnamed_library_lib1.dart';
// ^
//
diff --git a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.outline.expect b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.outline.expect
index 886001a..4f277c37 100644
--- a/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.outline.expect
+++ b/pkg/front_end/testcases/general/part_part_of_differently_named_library.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/part_part_of_differently_named_library.dart:10:6: Warning: Using 'pkg/front_end/testcases/general/part_part_of_differently_named_library_lib1.dart' as part of 'foo' but its 'part of' declaration says 'bar'.
+// pkg/front_end/testcases/general/part_part_of_differently_named_library.dart:10:6: Error: Using 'pkg/front_end/testcases/general/part_part_of_differently_named_library_lib1.dart' as part of 'foo' but its 'part of' declaration says 'bar'.
// part 'part_part_of_differently_named_library_lib1.dart';
// ^
//
diff --git a/pkg/front_end/testcases/general/qualified.dart.outline.expect b/pkg/front_end/testcases/general/qualified.dart.outline.expect
index 08d37e9..c8750b5 100644
--- a/pkg/front_end/testcases/general/qualified.dart.outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.outline.expect
@@ -9,18 +9,14 @@
// class Bad extends lib.Missing {
// ^^^
//
-// pkg/front_end/testcases/general/qualified.dart:11:19: Warning: Type 'lib.Missing' not found.
-// class Bad extends lib.Missing {
-// ^^^^^^^^^^^
-//
-// pkg/front_end/testcases/general/qualified.dart:12:3: Warning: Type 'lib.Missing' not found.
-// lib.Missing method() {}
-// ^^^^^^^^^^^
-//
// pkg/front_end/testcases/general/qualified.dart:11:19: Error: Type 'lib.Missing' not found.
// class Bad extends lib.Missing {
// ^^^^^^^^^^^
//
+// pkg/front_end/testcases/general/qualified.dart:12:3: Error: Type 'lib.Missing' not found.
+// lib.Missing method() {}
+// ^^^^^^^^^^^
+//
// pkg/front_end/testcases/general/qualified.dart:18:7: Error: The type 'lib.VoidFunction' can't be used as supertype.
// class IllegalSupertype extends lib.VoidFunction {}
// ^
diff --git a/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect
index c4b1096..ba037f1 100644
--- a/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory.dart.outline.expect
@@ -1,4 +1,13 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/redirecting_factory.dart:7:28: Error: The constructor function type 'Foo<Tf> Function(int)' isn't a subtype of 'FooBase<Tf> Function(int)'.
+// - 'Foo' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+// - 'FooBase' is from 'pkg/front_end/testcases/general/redirecting_factory.dart'.
+// factory FooBase(int x) = Foo<Tf>;
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect
index c5cbd80..b81eb59 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_chain_test.dart.outline.expect
@@ -3,10 +3,13 @@
import "dart:core" as core;
class A extends core::Object {
- constructor •() → void
+ static field dynamic _redirecting# = <dynamic>[self::A::first, self::A::second];
+ constructor •() → self::A*
;
- redirecting_factory first() = self::A::•;
- redirecting_factory second() = self::A::first;
+ static factory first() → self::A*
+ let dynamic #redirecting_factory = self::A::• in invalid-expression;
+ static factory second() → self::A*
+ let dynamic #redirecting_factory = self::A::first in invalid-expression;
}
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect
index 8d1d812..636af62 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_metadata.dart.outline.expect
@@ -10,8 +10,8 @@
static factory •(dynamic p) → self::Foo*
let dynamic #redirecting_factory = self::Foo::named in invalid-expression;
}
-static const field dynamic forParameter = 1;
-static const field dynamic forFactoryItself = 2;
-static const field dynamic anotherForParameter = 3;
+static const field core::int* forParameter = 1;
+static const field core::int* forFactoryItself = 2;
+static const field core::int* anotherForParameter = 3;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect
index f14f820..fc62503 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_simple_test.dart.outline.expect
@@ -3,9 +3,11 @@
import "dart:core" as core;
class A extends core::Object {
- constructor •() → void
+ static field dynamic _redirecting# = <dynamic>[self::A::redir];
+ constructor •() → self::A*
;
- redirecting_factory redir() = self::A::•;
+ static factory redir() → self::A*
+ let dynamic #redirecting_factory = self::A::• in invalid-expression;
}
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect
index e691673..caf6826 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeargs_test.dart.outline.expect
@@ -3,20 +3,22 @@
import "dart:core" as core;
class X extends core::Object {
- synthetic constructor •() → void
+ synthetic constructor •() → self::X*
;
}
class Y extends self::X {
- synthetic constructor •() → void
+ synthetic constructor •() → self::Y*
;
}
class A extends core::Object {
- constructor •() → void
+ static field dynamic _redirecting# = <dynamic>[self::A::redir];
+ constructor •() → self::A*
;
- redirecting_factory redir() = self::B::•<self::Y>;
+ static factory redir() → self::A*
+ let dynamic #redirecting_factory = self::B::• in let self::Y* #typeArg0 = null in invalid-expression;
}
-class B<T extends self::X> extends self::A {
- constructor •() → void
+class B<T extends self::X* = self::X*> extends self::A {
+ constructor •() → self::B<self::B::T*>*
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect
index 8e9ac92..4526c6e 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparam_test.dart.outline.expect
@@ -2,10 +2,12 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::Object, S extends core::Object> extends core::Object {
- constructor •(self::A::T t, self::A::S s) → void
+class A<T extends core::Object* = dynamic, S extends core::Object* = dynamic> extends core::Object {
+ static field dynamic _redirecting# = <dynamic>[self::A::redir];
+ constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
;
- redirecting_factory redir<T extends core::Object, S extends core::Object>(T t, S s) = self::A::•<T, S>;
+ static factory redir<T extends core::Object* = dynamic, S extends core::Object* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
+ let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
}
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect
index 01df3c7..5c26d8c 100644
--- a/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_factory_typeparambounds_test.dart.outline.expect
@@ -3,17 +3,19 @@
import "dart:core" as core;
class X extends core::Object {
- synthetic constructor •() → void
+ synthetic constructor •() → self::X*
;
}
class Y extends self::X {
- synthetic constructor •() → void
+ synthetic constructor •() → self::Y*
;
}
-class A<T extends core::Object, S extends self::A::T> extends core::Object {
- constructor •(self::A::T t, self::A::S s) → void
+class A<T extends core::Object* = dynamic, S extends self::A::T* = dynamic> extends core::Object {
+ static field dynamic _redirecting# = <dynamic>[self::A::redir];
+ constructor •(self::A::T* t, self::A::S* s) → self::A<self::A::T*, self::A::S*>*
;
- redirecting_factory redir<T extends core::Object, S extends T>(T t, S s) = self::A::•<T, S>;
+ static factory redir<T extends core::Object* = dynamic, S extends self::A::redir::T* = dynamic>(self::A::redir::T* t, self::A::redir::S* s) → self::A<self::A::redir::T*, self::A::redir::S*>*
+ let dynamic #redirecting_factory = self::A::• in let self::A::redir::T* #typeArg0 = null in let self::A::redir::S* #typeArg1 = null in invalid-expression;
}
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.outline.expect b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.outline.expect
index f130ab6..0974ead 100644
--- a/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.outline.expect
+++ b/pkg/front_end/testcases/general/redirecting_initializer_arguments_assignable_test.dart.outline.expect
@@ -6,7 +6,7 @@
synthetic constructor •() → self::X*
;
}
-class Foo<T extends self::X* = dynamic> extends core::Object {
+class Foo<T extends self::X* = self::X*> extends core::Object {
generic-covariant-impl field self::Foo::T* x;
constructor fromX(self::X* _init) → self::Foo<self::Foo::T*>*
;
diff --git a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.outline.expect b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.outline.expect
index af53cce..2160bc2 100644
--- a/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.outline.expect
+++ b/pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart.outline.expect
@@ -1,4 +1,11 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/reject_generic_function_types_in_bounds.dart:8:12: Error: Type variables can't have generic function types in their bounds.
+// class Hest<TypeX extends TypeY Function<TypeY>(TypeY)> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/stringliteral.dart.outline.expect b/pkg/front_end/testcases/general/stringliteral.dart.outline.expect
index a46e629..0c2680f 100644
--- a/pkg/front_end/testcases/general/stringliteral.dart.outline.expect
+++ b/pkg/front_end/testcases/general/stringliteral.dart.outline.expect
@@ -1,11 +1,12 @@
library;
import self as self;
+import "dart:core" as core;
-static field dynamic color;
-static field dynamic thing;
-static field dynamic phrase;
-static field dynamic adjacent;
-static field dynamic linebreaks;
-static field dynamic other;
+static field core::String* color;
+static field core::String* thing;
+static field core::String* phrase;
+static field core::String* adjacent;
+static field core::String* linebreaks;
+static field core::String* other;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/general/type_variable_prefix.dart.outline.expect b/pkg/front_end/testcases/general/type_variable_prefix.dart.outline.expect
index 8174b6c..519578a 100644
--- a/pkg/front_end/testcases/general/type_variable_prefix.dart.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_prefix.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Warning: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
+// pkg/front_end/testcases/general/type_variable_prefix.dart:8:3: Error: 'T.String' can't be used as a type because 'T' doesn't refer to an import prefix.
// T.String method() => "Hello, World!";
// ^^^^^^^^
//
diff --git a/pkg/front_end/testcases/general/type_variable_uses.dart.outline.expect b/pkg/front_end/testcases/general/type_variable_uses.dart.outline.expect
index 9bdf117..6de5e4c 100644
--- a/pkg/front_end/testcases/general/type_variable_uses.dart.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_uses.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/type_variable_uses.dart:7:15: Warning: Can only use type variables in instance methods.
+// pkg/front_end/testcases/general/type_variable_uses.dart:7:15: Error: Can only use type variables in instance methods.
// static C<T> staticMethod() {
// ^
//
diff --git a/pkg/front_end/testcases/general/unsound_promotion.dart.outline.expect b/pkg/front_end/testcases/general/unsound_promotion.dart.outline.expect
index 45f6ecf..9a8c9d9 100644
--- a/pkg/front_end/testcases/general/unsound_promotion.dart.outline.expect
+++ b/pkg/front_end/testcases/general/unsound_promotion.dart.outline.expect
@@ -15,7 +15,7 @@
;
}
static field core::List<self::A*>* list;
-static method g<T extends self::A* = dynamic>(self::g::T* t) → core::List<self::g::T*>*
+static method g<T extends self::A* = self::A*>(self::g::T* t) → core::List<self::g::T*>*
;
static method f<S extends core::Object* = dynamic>(self::f::S* s) → core::List<self::f::S*>*
;
diff --git a/pkg/front_end/testcases/general/var_as_type_name.dart.outline.expect b/pkg/front_end/testcases/general/var_as_type_name.dart.outline.expect
index 421073f..6da5c74 100644
--- a/pkg/front_end/testcases/general/var_as_type_name.dart.outline.expect
+++ b/pkg/front_end/testcases/general/var_as_type_name.dart.outline.expect
@@ -6,7 +6,7 @@
// Map<String, var> m;
// ^^^
//
-// pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Warning: Type 'var' not found.
+// pkg/front_end/testcases/general/var_as_type_name.dart:6:15: Error: Type 'var' not found.
// Map<String, var> m;
// ^^^
//
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.outline.expect
new file mode 100644
index 0000000..2582eae
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_flatten.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field asy::Future<core::int*>* futureInt;
+static field () →* asy::Future<core::int*>* f;
+static field () →* asy::Future<core::int*>* g;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.outline.expect
new file mode 100644
index 0000000..0231dd0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+static field () →* asy::Future<core::int*>* f;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.outline.expect b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.outline.expect
new file mode 100644
index 0000000..d290a5b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/async_closure_return_type_future_or.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field asy::FutureOr<core::int*>* futureOrInt;
+static field () →* asy::FutureOr<core::int*>* f;
+static field () →* asy::Future<core::int*>* g;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.outline.expect
new file mode 100644
index 0000000..49da2ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_futures.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+
+import "dart:async";
+import "dart:math";
+
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.outline.expect
new file mode 100644
index 0000000..49da2ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_all_returns_are_values.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+
+import "dart:async";
+import "dart:math";
+
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.outline.expect
new file mode 100644
index 0000000..49da2ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_mix_of_values_and_futures.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+
+import "dart:async";
+import "dart:math";
+
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.outline.expect
new file mode 100644
index 0000000..666bc54
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_async_star.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+import "dart:async";
+
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_basic.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.outline.expect
new file mode 100644
index 0000000..d08afaa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field () →* core::String* g;
+static method f() → core::String*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.outline.expect
new file mode 100644
index 0000000..55e2ed1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+import "dart:async";
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.outline.expect
new file mode 100644
index 0000000..55e2ed1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_async_star.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+import "dart:async";
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.outline.expect
new file mode 100644
index 0000000..672fbfb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h;
+static method foo((core::Object*) →* core::int* f) → void
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_infer_bottom_sync_star.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.outline.expect
new file mode 100644
index 0000000..0a623d0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_lub.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+import "dart:math";
+
+static method test2() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_nested_lambdas.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_no_return.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.outline.expect b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/block_bodied_lambdas_sync_star.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/bottom.dart.outline.expect b/pkg/front_end/testcases/inference/bottom.dart.outline.expect
new file mode 100644
index 0000000..0387d83
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bottom.dart.outline.expect
@@ -0,0 +1,6 @@
+library test;
+import self as self;
+
+static field dynamic v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/bottom_in_closure.dart.outline.expect b/pkg/front_end/testcases/inference/bottom_in_closure.dart.outline.expect
new file mode 100644
index 0000000..5497bda
--- /dev/null
+++ b/pkg/front_end/testcases/inference/bottom_in_closure.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field () →* core::Null* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.outline.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.outline.expect
new file mode 100644
index 0000000..97b8e80
--- /dev/null
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// ^
+//
+import self as self;
+
+static field invalid-type x;
+static field () →* invalid-type y;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.outline.expect b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.outline.expect
new file mode 100644
index 0000000..947182a0
--- /dev/null
+++ b/pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/circular_reference_via_closures_initializer_types.dart:8:5: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@ returnType=() ->* invalid-type */ () => y;
+// ^
+//
+import self as self;
+
+static field invalid-type x;
+static field () →* invalid-type y;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/conditional_lub.dart.outline.expect b/pkg/front_end/testcases/inference/conditional_lub.dart.outline.expect
index caf7760..a57d812 100644
--- a/pkg/front_end/testcases/inference/conditional_lub.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conditional_lub.dart.outline.expect
@@ -5,6 +5,6 @@
static field core::bool* b;
static field core::int* x;
static field core::double* y;
-static field dynamic z;
+static field core::num* z;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
new file mode 100644
index 0000000..10031dd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
@@ -0,0 +1,51 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:25:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// Try adding an explicit type.
+// get a => null;
+// ^
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// Try adding an explicit type.
+// get a => null;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class I1 extends core::Object {
+ field core::int* x;
+ synthetic constructor •() → self::I1*
+ ;
+}
+class I2 extends self::I1 {
+ field core::int* y;
+ synthetic constructor •() → self::I2*
+ ;
+}
+class A extends core::Object {
+ final field self::I1* a;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends core::Object {
+ final field self::I2* a;
+ synthetic constructor •() → self::B*
+ ;
+}
+class C1 extends core::Object implements self::A, self::B {
+ synthetic constructor •() → self::C1*
+ ;
+ get a() → invalid-type
+ ;
+}
+class C2 extends core::Object implements self::B, self::A {
+ synthetic constructor •() → self::C2*
+ ;
+ get a() → invalid-type
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
new file mode 100644
index 0000000..f509791
--- /dev/null
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
@@ -0,0 +1,52 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:34:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
+// Try adding an explicit type.
+// get a => null;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class I1 extends core::Object {
+ field core::int* x;
+ synthetic constructor •() → self::I1*
+ ;
+}
+class I2 extends core::Object {
+ field core::int* y;
+ synthetic constructor •() → self::I2*
+ ;
+}
+class I3 extends core::Object implements self::I1, self::I2 {
+ field core::int* x;
+ field core::int* y;
+ synthetic constructor •() → self::I3*
+ ;
+}
+class A extends core::Object {
+ final field self::I1* a;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends core::Object {
+ final field self::I2* a;
+ synthetic constructor •() → self::B*
+ ;
+}
+class C1 extends core::Object implements self::A, self::B {
+ synthetic constructor •() → self::C1*
+ ;
+ get a() → self::I3*
+ ;
+}
+class C2 extends core::Object implements self::A, self::B {
+ synthetic constructor •() → self::C2*
+ ;
+ get a() → invalid-type
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.outline.expect
new file mode 100644
index 0000000..be7aa62
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_downwards_with_constraint.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B*
+ ;
+}
+class Foo<T extends self::A* = self::A*> extends core::Object {
+ synthetic constructor •() → self::Foo<self::Foo::T*>*
+ ;
+}
+static method main() → void
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.outline.expect
new file mode 100644
index 0000000..704851c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field self::C::T* t;
+ constructor •(self::C::T* t) → self::C<self::C::T*>*
+ ;
+}
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.outline.expect
index a195c85..0a07ab4 100644
--- a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_argument_not_assignable.dart.outline.expect
@@ -7,7 +7,7 @@
synthetic constructor •() → self::A*
;
}
-class C<T extends self::A* = dynamic> extends core::Object {
+class C<T extends self::A* = self::A*> extends core::Object {
constructor •(() →* self::C::T* f) → self::C<self::C::T*>*
;
}
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.outline.expect
new file mode 100644
index 0000000..da1258f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ final field self::C::T* t;
+ const constructor •(self::C::T* t) → self::C<self::C::T*>*
+ : self::C::t = t, super core::Object::•()
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.outline.expect
new file mode 100644
index 0000000..cbb70eb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_const_with_upper_bound.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+ final field self::C::T* x;
+ const constructor •(self::C::T* x) → self::C<self::C::T*>*
+ : self::C::x = x, super core::Object::•()
+ ;
+}
+class D<T extends core::num* = core::num*> extends core::Object {
+ const constructor •() → self::D<self::D::T*>*
+ : super core::Object::•()
+ ;
+}
+static method main() → void
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.outline.expect
new file mode 100644
index 0000000..1936950
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_downwards_from_constructor.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(core::List<self::C::T*>* list) → self::C<self::C::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.outline.expect
new file mode 100644
index 0000000..c33e3cc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field self::C::T* t;
+ constructor _() → self::C<self::C::T*>*
+ ;
+ static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
+ ;
+}
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.outline.expect
new file mode 100644
index 0000000..9bb0a3d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_factory_calls_constructor.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field self::A<self::A::T*>* f;
+ constructor •() → self::A<self::A::T*>*
+ ;
+ static factory factory<T extends core::Object* = dynamic>() → self::A<self::A::factory::T*>*
+ ;
+ method m() → self::A<self::A::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.outline.expect
new file mode 100644
index 0000000..ba86a01
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field self::C::T* t;
+ constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.outline.expect
new file mode 100644
index 0000000..28ffdec
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_named_factory.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field self::C::T* t;
+ constructor •() → self::C<self::C::T*>*
+ ;
+ static factory named<T extends core::Object* = dynamic>(self::C::named::T* t) → self::C<self::C::named::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.outline.expect
new file mode 100644
index 0000000..306987f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field self::C::T* t;
+ constructor •(self::C::T* t) → self::C<self::C::T*>*
+ ;
+ constructor named(core::List<self::C::T*>* t) → self::C<self::C::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect
new file mode 100644
index 0000000..b66d0d6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_infer_from_arguments_redirecting_factory.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class C<T extends core::Object* = dynamic> extends core::Object {
+ static field dynamic _redirecting# = <dynamic>[self::C::•];
+ abstract get t() → self::C::T*;
+ abstract set t(generic-covariant-impl self::C::T* x) → void;
+ static factory •<T extends core::Object* = dynamic>(self::C::•::T* t) → self::C<self::C::•::T*>*
+ let dynamic #redirecting_factory = self::CImpl::• in let self::C::•::T* #typeArg0 = null in invalid-expression;
+}
+class CImpl<T extends core::Object* = dynamic> extends core::Object implements self::C<self::CImpl::T*> {
+ generic-covariant-impl field self::CImpl::T* t;
+ constructor •(self::CImpl::T* t) → self::CImpl<self::CImpl::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.outline.expect
index ee4e32e..4d266f4 100644
--- a/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/constructors_inference_f_bounded.dart.outline.expect
@@ -6,7 +6,7 @@
synthetic constructor •() → self::Cloneable<self::Cloneable::T*>*
;
}
-class Pair<T extends self::Cloneable<self::Pair::T>* = dynamic, U extends self::Cloneable<self::Pair::U>* = dynamic> extends core::Object {
+class Pair<T extends self::Cloneable<self::Pair::T>* = self::Cloneable<dynamic>*, U extends self::Cloneable<self::Pair::U>* = self::Cloneable<dynamic>*> extends core::Object {
generic-covariant-impl field self::Pair::T* t;
generic-covariant-impl field self::Pair::U* u;
constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
diff --git a/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.outline.expect
new file mode 100644
index 0000000..f1f5c5d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_reverse_type_parameters.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Pair<T extends core::Object* = dynamic, U extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field self::Pair::T* t;
+ generic-covariant-impl field self::Pair::U* u;
+ constructor •(self::Pair::T* t, self::Pair::U* u) → self::Pair<self::Pair::T*, self::Pair::U*>*
+ ;
+ get reversed() → self::Pair<self::Pair::U*, self::Pair::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.outline.expect b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.outline.expect
new file mode 100644
index 0000000..38f29cd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/constructors_too_many_positional_arguments.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::A<self::A::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.outline.expect b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.outline.expect
new file mode 100644
index 0000000..908d36a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart.outline.expect
@@ -0,0 +1,30 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:13:49: Error: The return type of the method 'B.x' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'A.x'.
+// Change to a subtype of 'int'.
+// /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+// ^
+// pkg/front_end/testcases/inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer.dart:9:13: Context: This is the overridden method ('x').
+// final int x = 2;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ final field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends core::Object implements self::A {
+ synthetic constructor •() → self::B*
+ ;
+ get x() → dynamic
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.outline.expect b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.outline.expect
new file mode 100644
index 0000000..13d8894
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_field_type_when_initializer_is_null.dart.outline.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static field dynamic x;
+ static field core::int* y;
+ field dynamic x2;
+ field core::int* y2;
+ synthetic constructor •() → self::A*
+ ;
+}
+static field dynamic x;
+static field core::int* y;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_type_on_dynamic.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.outline.expect b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/dont_infer_type_when_initializer_is_null.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.outline.expect b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.outline.expect
new file mode 100644
index 0000000..5df14ed
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downward_inference_miscellaneous.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef Function2<S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
+class A<T extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field (self::A::T*) →* self::A::T* x;
+ constructor •((self::A::T*) →* self::A::T* x) → self::A<self::A::T*>*
+ ;
+}
+static method main() → void
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect
index 14bb442..2aa6d59 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations.dart.outline.expect
@@ -10,12 +10,12 @@
: super core::Object::•()
;
}
-@self::Foo::•(const <dynamic>[])
+@self::Foo::•(const <core::String*>[])
class Bar extends core::Object {
synthetic constructor •() → self::Bar*
;
}
-@self::Foo::named(const <dynamic>[])
+@self::Foo::named(const <core::String*>[])
class Baz extends core::Object {
synthetic constructor •() → self::Baz*
;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.outline.expect
index 779bc69..5b2f604 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_annotations_class_members.dart.outline.expect
@@ -8,12 +8,12 @@
;
}
abstract class Bar extends core::Object {
- @self::Foo::•(const <dynamic>[])
+ @self::Foo::•(const <core::String*>[])
field dynamic x;
- @self::Foo::•(const <dynamic>[])
+ @self::Foo::•(const <core::String*>[])
constructor •() → self::Bar*
;
- @self::Foo::•(const <dynamic>[])
+ @self::Foo::•(const <core::String*>[])
abstract method f() → void;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.outline.expect
new file mode 100644
index 0000000..c74ce2b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_assignment_statements.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.outline.expect
new file mode 100644
index 0000000..7554b7c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_async_await.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method main() → asy::Future<dynamic>*
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect
new file mode 100644
index 0000000..3d473dc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_for_each.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
+ static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
+ ;
+}
+static method F<T extends core::Object* = dynamic>() → self::F::T*
+ ;
+static method f() → asy::Future<dynamic>*
+ ;
+static method main() → asy::Future<dynamic>*
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.outline.expect
new file mode 100644
index 0000000..e0a7edc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_initializing_formal_default_formal.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef Function2<S extends core::Object* = dynamic, T extends core::Object* = dynamic> = ([S*]) →* T*;
+class Foo extends core::Object {
+ field core::List<core::int*>* x;
+ constructor •([core::List<core::int*>* x]) → self::Foo*
+ ;
+ constructor named([core::List<core::int*>* x]) → self::Foo*
+ ;
+}
+static field ([core::List<core::int*>*]) →* core::String* g;
+static method f([core::List<core::int*>* l]) → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.outline.expect
new file mode 100644
index 0000000..6794a5c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field self::B<core::int*>* b;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(self::B::T* x) → self::B<self::B::T*>*
+ ;
+}
+static field self::A* t1;
+static field core::List<self::B<core::int*>*>* t2;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.outline.expect
index e341531..9d0ad6f 100644
--- a/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/downwards_inference_inside_top_level_2.dart.outline.expect
@@ -6,6 +6,6 @@
constructor •(self::A::T* x) → self::A<self::A::T*>*
;
}
-static field dynamic t1;
+static field core::List<self::A<core::int*>*>* t1;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..3ec491b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_constructor_arguments_infer_downwards.dart.outline.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class F0 extends core::Object {
+ constructor •(core::List<core::int*>* a) → self::F0*
+ ;
+}
+class F1 extends core::Object {
+ constructor •({core::List<core::int*>* a}) → self::F1*
+ ;
+}
+class F2 extends core::Object {
+ constructor •(core::Iterable<core::int*>* a) → self::F2*
+ ;
+}
+class F3 extends core::Object {
+ constructor •(core::Iterable<core::Iterable<core::int*>*>* a) → self::F3*
+ ;
+}
+class F4 extends core::Object {
+ constructor •({core::Iterable<core::Iterable<core::int*>*>* a}) → self::F4*
+ ;
+}
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..2037825
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_arguments_infer_downwards.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f0(core::List<core::int*>* a) → void
+ ;
+static method f1({core::List<core::int*>* a}) → void
+ ;
+static method f2(core::Iterable<core::int*>* a) → void
+ ;
+static method f3(core::Iterable<core::Iterable<core::int*>*>* a) → void
+ ;
+static method f4({core::Iterable<core::Iterable<core::int*>*>* a}) → void
+ ;
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.outline.expect
new file mode 100644
index 0000000..3539aa7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_expressions.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef Function2<S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* T*;
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.outline.expect
new file mode 100644
index 0000000..27b374a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_function_of_t_using_the_t.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → void
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.outline.expect
new file mode 100644
index 0000000..ba76888
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_empty_list.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class F3<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+ ;
+}
+class F4<T extends core::Object* = dynamic> extends core::Object {
+ constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a}) → self::F4<self::F4::T*>*
+ ;
+}
+static method main() → void
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..c651d5f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_constructor_arguments_infer_downwards.dart.outline.expect
@@ -0,0 +1,28 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class F0<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(core::List<self::F0::T*>* a) → self::F0<self::F0::T*>*
+ ;
+}
+class F1<T extends core::Object* = dynamic> extends core::Object {
+ constructor •({core::List<self::F1::T*>* a}) → self::F1<self::F1::T*>*
+ ;
+}
+class F2<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(core::Iterable<self::F2::T*>* a) → self::F2<self::F2::T*>*
+ ;
+}
+class F3<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(core::Iterable<core::Iterable<self::F3::T*>*>* a) → self::F3<self::F3::T*>*
+ ;
+}
+class F4<T extends core::Object* = dynamic> extends core::Object {
+ constructor •({core::Iterable<core::Iterable<self::F4::T*>*>* a}) → self::F4<self::F4::T*>*
+ ;
+}
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.outline.expect
new file mode 100644
index 0000000..c74ce2b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_generic_function_expressions.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..2bf3613
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_instance_creations_infer_downwards.dart.outline.expect
@@ -0,0 +1,44 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field self::A::S* x;
+ generic-covariant-impl field self::A::T* y;
+ constructor •(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+ ;
+ constructor named(self::A::S* x, self::A::T* y) → self::A<self::A::S*, self::A::T*>*
+ ;
+}
+class B<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::B::T*, self::B::S*> {
+ constructor •(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+ ;
+ constructor named(self::B::S* y, self::B::T* x) → self::B<self::B::S*, self::B::T*>*
+ ;
+}
+class C<S extends core::Object* = dynamic> extends self::B<self::C::S*, self::C::S*> {
+ constructor •(self::C::S* a) → self::C<self::C::S*>*
+ ;
+ constructor named(self::C::S* a) → self::C<self::C::S*>*
+ ;
+}
+class D<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::B<self::D::T*, core::int*> {
+ constructor •(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+ ;
+ constructor named(self::D::T* a) → self::D<self::D::S*, self::D::T*>*
+ ;
+}
+class E<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::C<self::E::S*>*, self::E::T*> {
+ constructor •(self::E::T* a) → self::E<self::E::S*, self::E::T*>*
+ ;
+}
+class F<S extends core::Object* = dynamic, T extends core::Object* = dynamic> extends self::A<self::F::S*, self::F::T*> {
+ constructor •(self::F::S* x, self::F::T* y, {core::List<self::F::S*>* a, core::List<self::F::T*>* b}) → self::F<self::F::S*, self::F::T*>*
+ ;
+ constructor named(self::F::S* x, self::F::T* y, [self::F::S* a, self::F::T* b]) → self::F<self::F::S*, self::F::T*>*
+ ;
+}
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.outline.expect
new file mode 100644
index 0000000..a92d585
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_downwards.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::List<core::String*>* list1, core::List<core::String*>* list2]) → void
+ ;
+static method main() → void
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.outline.expect
new file mode 100644
index 0000000..57c5b68
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_list_literals_infer_if_value_types_match_context.dart.outline.expect
@@ -0,0 +1,38 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef Asserter<T extends core::Object* = dynamic> = (T*) →* void;
+typedef AsserterBuilder<S extends core::Object* = dynamic, T extends core::Object* = dynamic> = (S*) →* (T*) →* void;
+class DartType extends core::Object {
+ synthetic constructor •() → self::DartType*
+ ;
+}
+abstract class C extends core::Object {
+ static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
+ field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
+ synthetic constructor •() → self::C*
+ ;
+ static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
+ ;
+ abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
+ method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic
+ ;
+}
+abstract class G<T extends core::Object* = dynamic> extends core::Object {
+ field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertAOf;
+ synthetic constructor •() → self::G<self::G::T*>*
+ ;
+ abstract get assertDOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void;
+ method method((core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertEOf) → dynamic
+ ;
+}
+static field (self::DartType*) →* void _isInt;
+static field (self::DartType*) →* void _isString;
+static field (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void assertBOf;
+static get assertCOf() → (core::List<(self::DartType*) →* void>*) →* (self::DartType*) →* void
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.outline.expect
new file mode 100644
index 0000000..2456a4af
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_on_map_literals.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method foo([core::Map<core::int*, core::String*>* m1, core::Map<core::int*, core::String*>* m2]) → void
+ ;
+static method test() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect
new file mode 100644
index 0000000..e1e83f3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/downwards_inference_yield_yield_star.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+abstract class MyStream<T extends core::Object* = dynamic> extends asy::Stream<self::MyStream::T*> {
+ static factory •<T extends core::Object* = dynamic>() → self::MyStream<self::MyStream::•::T*>*
+ ;
+}
+static method foo() → asy::Stream<core::List<core::int*>*>*
+ ;
+static method bar() → core::Iterable<core::Map<core::int*, core::int*>*>*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.outline.expect b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.outline.expect
new file mode 100644
index 0000000..0ac31d4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_refers_to_static_getter.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ final field core::int* x;
+ synthetic constructor •() → self::C*
+ ;
+ static get _x() → core::int*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.outline.expect b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.outline.expect
new file mode 100644
index 0000000..2df00b8e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/field_refers_to_top_level_getter.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ final field core::int* x;
+ synthetic constructor •() → self::C*
+ ;
+}
+static get y() → core::int*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/future_or_subtyping.dart.outline.expect b/pkg/front_end/testcases/inference/future_or_subtyping.dart.outline.expect
new file mode 100644
index 0000000..c763edf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/future_or_subtyping.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static method add(core::int* x) → void
+ ;
+static method add2(core::int* y) → dynamic
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.outline.expect b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.outline.expect
new file mode 100644
index 0000000..c410a31
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_functions_return_typedef.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef ToValue<T extends core::Object* = dynamic> = (T*) →* void;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.outline.expect
new file mode 100644
index 0000000..9f34989
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_basic_downward_inference.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f<S extends core::Object* = dynamic, T extends core::Object* = dynamic>(self::f::S* s) → self::f::T*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.outline.expect
index 464dcd7..1a8b966 100644
--- a/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_correctly_recognize_generic_upper_bound.dart.outline.expect
@@ -2,10 +2,10 @@
import self as self;
import "dart:core" as core;
-class Foo<T extends core::Pattern* = dynamic> extends core::Object {
+class Foo<T extends core::Pattern* = core::Pattern*> extends core::Object {
synthetic constructor •() → self::Foo<self::Foo::T*>*
;
- method method<generic-covariant-impl U extends self::Foo::T* = dynamic>(self::Foo::method::U* u) → self::Foo::method::U*
+ method method<generic-covariant-impl U extends self::Foo::T* = self::Foo::T*>(self::Foo::method::U* u) → self::Foo::method::U*
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.outline.expect
new file mode 100644
index 0000000..47b4040
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_dart_math_min_max.dart.outline.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math";
+
+static method printInt(core::int* x) → void
+ ;
+static method printDouble(core::double* x) → void
+ ;
+static method myMax(core::num* x, core::num* y) → core::num*
+ ;
+static method f() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.outline.expect
new file mode 100644
index 0000000..07bf679
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart.outline.expect
@@ -0,0 +1,36 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:13:3: Error: Declared type variables of 'D.m' doesn't match those on overridden method 'C.m'.
+// m(x) => x;
+// ^
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Context: This is the overridden method ('m').
+// T m<T>(T x) => x;
+// ^
+//
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:13:3: Error: The return type of the method 'D.m' is 'dynamic', which does not match the return type, 'T', of the overridden method, 'C.m'.
+// Change to a subtype of 'T'.
+// m(x) => x;
+// ^
+// pkg/front_end/testcases/inference/generic_methods_do_not_infer_invalid_override_of_generic_method.dart:9:5: Context: This is the overridden method ('m').
+// T m<T>(T x) => x;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+ ;
+}
+class D extends self::C {
+ synthetic constructor •() → self::D*
+ ;
+ method m(dynamic x) → dynamic
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.outline.expect
new file mode 100644
index 0000000..649bb11
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_affects_arguments.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object* = dynamic>(core::List<self::f::T*>* s) → self::f::T*
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.outline.expect
new file mode 100644
index 0000000..b3ae44d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_downwards_inference_fold.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+static method test() → void
+ ;
+static method functionExpressionInvocation() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.outline.expect
new file mode 100644
index 0000000..9bbf070
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart.outline.expect
@@ -0,0 +1,55 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:5: Error: Declared type variables of 'D.m' doesn't match those on overridden method 'C.m'.
+// T m<T>(T x) => x;
+// ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:9:3: Context: This is the overridden method ('m').
+// m(x) => x;
+// ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:14:12: Error: The parameter 'x' of the method 'D.m' has type 'T', which does not match the corresponding type, 'dynamic', in the overridden method, 'C.m'.
+// Change to a supertype of 'dynamic', or, for a covariant parameter, a subtype.
+// T m<T>(T x) => x;
+// ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:9:3: Context: This is the overridden method ('m').
+// m(x) => x;
+// ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:5: Error: Declared type variables of 'D.g' doesn't match those on overridden method 'C.g'.
+// T g<T>(T x) => x;
+// ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:10:11: Context: This is the overridden method ('g').
+// dynamic g(int x) => x;
+// ^
+//
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:15:12: Error: The parameter 'x' of the method 'D.g' has type 'T', which does not match the corresponding type, 'int', in the overridden method, 'C.g'.
+// Change to a supertype of 'int', or, for a covariant parameter, a subtype.
+// T g<T>(T x) => x;
+// ^
+// pkg/front_end/testcases/inference/generic_methods_handle_override_of_non_generic_with_generic.dart:10:11: Context: This is the overridden method ('g').
+// dynamic g(int x) => x;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method m(dynamic x) → dynamic
+ ;
+ method g(core::int* x) → dynamic
+ ;
+}
+class D extends self::C {
+ synthetic constructor •() → self::D*
+ ;
+ method m<T extends core::Object* = dynamic>(self::D::m::T* x) → self::D::m::T*
+ ;
+ method g<T extends core::Object* = dynamic>(self::D::g::T* x) → self::D::g::T*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.outline.expect
new file mode 100644
index 0000000..465372c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<V extends core::Object* = dynamic> = (V*) →* void;
+class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
+ synthetic constructor •() → self::C<self::C::T*>*
+ ;
+ method f<U extends core::Object* = dynamic>(self::C::f::U* x) → (self::C::f::U*) →* void
+ ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::D<self::D::T*>*
+ ;
+ method f<U extends core::Object* = dynamic>(self::D::f::U* u) → (self::D::f::U*) →* void
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.outline.expect
new file mode 100644
index 0000000..cd56022
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_parameter_type2.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef G<V extends core::Object* = dynamic> = () →* core::List<V*>*;
+class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
+ synthetic constructor •() → self::C<self::C::T*>*
+ ;
+ method f<U extends core::Object* = dynamic>(() →* core::List<self::C::f::U*>* g) → void
+ ;
+}
+abstract class D<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::D<self::D::T*>*
+ ;
+ abstract method f<U extends core::Object* = dynamic>(() →* core::List<self::D::f::U*>* g) → void;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.outline.expect
new file mode 100644
index 0000000..0a73a00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_function_return_type.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<V extends core::Object* = dynamic> = () →* V*;
+class C<T extends core::Object* = dynamic> extends self::D<self::C::T*> {
+ synthetic constructor •() → self::C<self::C::T*>*
+ ;
+ method f<U extends core::Object* = dynamic>(self::C::f::U* x) → () →* self::C::f::U*
+ ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::D<self::D::T*>*
+ ;
+ method f<U extends core::Object* = dynamic>(self::D::f::U* u) → () →* self::D::f::U*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.outline.expect
new file mode 100644
index 0000000..e19be4b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_instantiation.dart.outline.expect
@@ -0,0 +1,45 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+import "dart:math";
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method m<T extends core::num* = core::num*>(self::C::m::T* x, self::C::m::T* y) → self::C::m::T*
+ ;
+}
+static method test() → dynamic
+ ;
+static method takeIII((core::int*, core::int*) →* core::int* fn) → void
+ ;
+static method takeDDD((core::double*, core::double*) →* core::double* fn) → void
+ ;
+static method takeIDI((core::double*, core::int*) →* core::int* fn) → void
+ ;
+static method takeDID((core::int*, core::double*) →* core::double* fn) → void
+ ;
+static method takeIDN((core::double*, core::int*) →* core::num* fn) → void
+ ;
+static method takeDIN((core::int*, core::double*) →* core::num* fn) → void
+ ;
+static method takeIIN((core::int*, core::int*) →* core::num* fn) → void
+ ;
+static method takeDDN((core::double*, core::double*) →* core::num* fn) → void
+ ;
+static method takeNNN((core::num*, core::num*) →* core::num* fn) → void
+ ;
+static method takeOON((core::Object*, core::Object*) →* core::num* fn) → void
+ ;
+static method takeOOO((core::Object*, core::Object*) →* core::num* fn) → void
+ ;
+static method takeOOI((core::Object*, core::Object*) →* core::int* fn) → void
+ ;
+static method takeIIO((core::int*, core::int*) →* core::Object* fn) → void
+ ;
+static method takeDDO((core::double*, core::double*) →* core::Object* fn) → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.outline.expect
new file mode 100644
index 0000000..45f2f2b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_infer_generic_method_type.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+ ;
+}
+class D extends self::C {
+ synthetic constructor •() → self::D*
+ ;
+ method m<S extends core::Object* = dynamic>(self::D::m::S* x) → self::D::m::S*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.outline.expect
new file mode 100644
index 0000000..824697a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_inference_error.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method f() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.outline.expect
new file mode 100644
index 0000000..abf425d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static method make(core::int* x) → asy::Future<core::int*>*
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.outline.expect
new file mode 100644
index 0000000..41b11c5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_nested_generic_instantiation.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "dart:math" as math;
+
+class Trace extends core::Object {
+ field core::List<self::Frame*>* frames;
+ synthetic constructor •() → self::Trace*
+ ;
+}
+class Frame extends core::Object {
+ field core::String* location;
+ synthetic constructor •() → self::Frame*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.outline.expect b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.outline.expect
new file mode 100644
index 0000000..2afc98d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/generic_methods_uses_greatest_lower_bound.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = (core::int*) →* core::Iterable<core::num*>*;
+typedef G = (core::double*) →* core::List<core::int*>*;
+static method generic<T extends core::Object* = dynamic>((self::generic::T*) →* dynamic a, (self::generic::T*) →* dynamic b) → self::generic::T*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect
index 4046a6c..1374798 100644
--- a/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_accessor_from_later_inferred_field.dart.outline.expect
@@ -5,13 +5,13 @@
class A extends core::Object implements self::B {
synthetic constructor •() → self::A*
;
- get x() → dynamic
+ get x() → core::int*
;
- set x(dynamic value) → void
+ set x(core::int* value) → void
;
}
class B extends core::Object {
- field dynamic x;
+ field core::int* x;
synthetic constructor •() → self::B*
;
}
diff --git a/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.outline.expect b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.outline.expect
new file mode 100644
index 0000000..7971d4a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_assign_to_ref.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::int* f;
+ synthetic constructor •() → self::A*
+ ;
+}
+static field self::A* a;
+static field core::int* c;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_custom.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_custom.dart.outline.expect
new file mode 100644
index 0000000..f9000f4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_custom.dart.outline.expect
@@ -0,0 +1,16 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A*
+ ;
+ operator +(dynamic other) → core::int*
+ ;
+ operator -(dynamic other) → core::double*
+ ;
+}
+static field core::int* v_add;
+static field core::double* v_minus;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_double.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.outline.expect
new file mode 100644
index 0000000..fc1ae00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_double_double.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal;
+static field core::bool* a_notEqual;
+static field core::double* a_add;
+static field core::double* a_subtract;
+static field core::double* a_multiply;
+static field core::double* a_divide;
+static field core::int* a_floorDivide;
+static field core::bool* a_greater;
+static field core::bool* a_less;
+static field core::bool* a_greaterEqual;
+static field core::bool* a_lessEqual;
+static field core::double* a_modulo;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_double_int.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.outline.expect
new file mode 100644
index 0000000..fc1ae00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_double_int.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal;
+static field core::bool* a_notEqual;
+static field core::double* a_add;
+static field core::double* a_subtract;
+static field core::double* a_multiply;
+static field core::double* a_divide;
+static field core::int* a_floorDivide;
+static field core::bool* a_greater;
+static field core::bool* a_less;
+static field core::bool* a_greaterEqual;
+static field core::bool* a_lessEqual;
+static field core::double* a_modulo;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_double.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.outline.expect
new file mode 100644
index 0000000..fc1ae00
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_int_double.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal;
+static field core::bool* a_notEqual;
+static field core::double* a_add;
+static field core::double* a_subtract;
+static field core::double* a_multiply;
+static field core::double* a_divide;
+static field core::int* a_floorDivide;
+static field core::bool* a_greater;
+static field core::bool* a_less;
+static field core::bool* a_greaterEqual;
+static field core::bool* a_lessEqual;
+static field core::double* a_modulo;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_binary_int_int.dart.outline.expect b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.outline.expect
new file mode 100644
index 0000000..cc7c479
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_binary_int_int.dart.outline.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_equal;
+static field core::bool* a_notEqual;
+static field core::int* a_bitXor;
+static field core::int* a_bitAnd;
+static field core::int* a_bitOr;
+static field core::int* a_bitShiftRight;
+static field core::int* a_bitShiftLeft;
+static field core::int* a_add;
+static field core::int* a_subtract;
+static field core::int* a_multiply;
+static field core::double* a_divide;
+static field core::int* a_floorDivide;
+static field core::bool* a_greater;
+static field core::bool* a_less;
+static field core::bool* a_greaterEqual;
+static field core::bool* a_lessEqual;
+static field core::int* a_modulo;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_conditional.dart.outline.expect b/pkg/front_end/testcases/inference/infer_conditional.dart.outline.expect
new file mode 100644
index 0000000..6ea6d78
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_conditional.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::num* a;
+static field core::num* b;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.outline.expect
new file mode 100644
index 0000000..d58d84f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2.dart.outline.expect
@@ -0,0 +1,35 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_consts_transitively_2_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
+
+static const field core::int* m1 = inf::a1;
+static const field core::int* m2 = inf::a2;
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as inf;
+import "dart:core" as core;
+import "infer_consts_transitively_2.dart" as self;
+import "infer_consts_transitively_2_b.dart" as inf2;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
+import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
+
+static const field core::int* a1 = self::m2;
+static const field core::int* a2 = inf2::b1;
+static method main() → dynamic
+ ;
+
+library;
+import self as inf2;
+import "dart:core" as core;
+
+static const field core::int* b1 = 2;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.outline.expect
new file mode 100644
index 0000000..cb88599
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_a.dart.outline.expect
@@ -0,0 +1,35 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "infer_consts_transitively_2.dart" as test;
+import "infer_consts_transitively_2_b.dart" as inf;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2.dart";
+import "org-dartlang-testcase:///infer_consts_transitively_2_b.dart";
+
+static const field core::int* a1 = test::m2;
+static const field core::int* a2 = inf::b1;
+static method main() → dynamic
+ ;
+
+library test;
+import self as test;
+import "dart:core" as core;
+import "infer_consts_transitively_2_a.dart" as self;
+
+import "org-dartlang-testcase:///infer_consts_transitively_2_a.dart";
+
+static const field core::int* m1 = self::a1;
+static const field core::int* m2 = self::a2;
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+static const field core::int* b1 = 2;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.outline.expect
new file mode 100644
index 0000000..afdd6d7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_2_b.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* b1 = 2;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.outline.expect b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.outline.expect
new file mode 100644
index 0000000..afdd6d7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_consts_transitively_b.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* b1 = 2;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.outline.expect b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.outline.expect
new file mode 100644
index 0000000..dfad962
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_correctly_on_multiple_variables_declared_together.dart.outline.expect
@@ -0,0 +1,23 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field dynamic x;
+ field core::int* y;
+ field core::String* z;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends core::Object implements self::A {
+ field dynamic x;
+ field core::int* y;
+ field core::String* z;
+ field core::int* w;
+ synthetic constructor •() → self::B*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect
index 218f5e9..4f999da 100644
--- a/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_from_later_inferred_field.dart.outline.expect
@@ -3,12 +3,12 @@
import "dart:core" as core;
class A extends core::Object implements self::B {
- field dynamic x;
+ field core::int* x;
synthetic constructor •() → self::A*
;
}
class B extends core::Object {
- field dynamic x;
+ field core::int* x;
synthetic constructor •() → self::B*
;
}
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
index b917227..915eb44 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_and_setter.dart.outline.expect
@@ -11,7 +11,7 @@
}
class B extends self::A {
final field core::int* x;
- constructor •(dynamic x) → self::B*
+ constructor •(core::int* x) → self::B*
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
index 167fce8..b79c1b0 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_getter_only.dart.outline.expect
@@ -9,7 +9,7 @@
}
class B extends self::A {
final field core::int* x;
- constructor •(dynamic x) → self::B*
+ constructor •(core::int* x) → self::B*
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
index afb8687..9e5258a 100644
--- a/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_final_field_setter_only.dart.outline.expect
@@ -10,7 +10,7 @@
}
class B extends self::A {
final field core::double* x;
- constructor •(dynamic x) → self::B*
+ constructor •(core::double* x) → self::B*
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.outline.expect
new file mode 100644
index 0000000..1a5ccea
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.outline.expect
@@ -0,0 +1,41 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:19:46: Error: Getter not found: 'x'.
+// var b = new B(/*error:UNDEFINED_IDENTIFIER*/ x); // allocations
+// ^
+//
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:21:34: Error: Getter not found: 'x'.
+// /*error:UNDEFINED_IDENTIFIER*/ x
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+ operator +(dynamic other) → self::B*
+ ;
+}
+class B extends self::A {
+ constructor •(dynamic ignore) → self::B*
+ ;
+}
+static field self::A* a;
+static field self::B* b;
+static field core::List<dynamic>* c1;
+static field core::List<dynamic>* c2;
+static field core::Map<dynamic, dynamic>* d;
+static field self::A* e;
+static field core::int* f;
+static field core::int* g;
+static field self::B* h;
+static field dynamic i;
+static field self::B* j;
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.outline.expect
new file mode 100644
index 0000000..c17611a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field dynamic x;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends core::Object implements self::A {
+ field dynamic x;
+ synthetic constructor •() → self::B*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.outline.expect
new file mode 100644
index 0000000..8b9dd44
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ final field dynamic x;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends core::Object implements self::A {
+ final field dynamic x;
+ synthetic constructor •() → self::B*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.outline.expect
new file mode 100644
index 0000000..6a7760a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on.dart.outline.expect
@@ -0,0 +1,51 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart";
+
+static field core::int* y;
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+static field core::int* x;
+static method main() → dynamic
+ ;
+
+library test;
+import self as self3;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+ static field core::int* y;
+ synthetic constructor •() → self3::B*
+ ;
+}
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as self4;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+ static field core::int* x;
+ synthetic constructor •() → self4::A*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.outline.expect
new file mode 100644
index 0000000..e70d202
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2.dart.outline.expect
@@ -0,0 +1,29 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+ static field core::int* y;
+ synthetic constructor •() → self::B*
+ ;
+}
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+ static field core::int* x;
+ synthetic constructor •() → self2::A*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.outline.expect
new file mode 100644
index 0000000..6cdbef6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart.outline.expect
@@ -0,0 +1,29 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+ static field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+}
+static method main() → dynamic
+ ;
+
+library test;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+ static field core::int* y;
+ synthetic constructor •() → self2::B*
+ ;
+}
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.outline.expect
new file mode 100644
index 0000000..7a1dac1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a.dart.outline.expect
@@ -0,0 +1,39 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+static field core::int* x;
+static method main() → dynamic
+ ;
+
+library test;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2_a.dart";
+
+class B extends core::Object {
+ static field core::int* y;
+ synthetic constructor •() → self2::B*
+ ;
+}
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_cycle_libs_when_flag_is_on2.dart";
+
+class A extends core::Object {
+ static field core::int* x;
+ synthetic constructor •() → self3::A*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.outline.expect
new file mode 100644
index 0000000..a618e67
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag_a.dart";
+
+static field core::int* y;
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static field core::int* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.outline.expect
new file mode 100644
index 0000000..07b69ed
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2.dart.outline.expect
@@ -0,0 +1,27 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_from_variables_in_non_cycle_imports_with_flag2_a.dart";
+
+class B extends core::Object {
+ static field core::int* y;
+ synthetic constructor •() → self::B*
+ ;
+}
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static field core::int* x;
+ synthetic constructor •() → self2::A*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.outline.expect
new file mode 100644
index 0000000..9aa0236
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag2_a.dart.outline.expect
@@ -0,0 +1,11 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.outline.expect
new file mode 100644
index 0000000..59f6600
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_from_variables_in_non_cycle_imports_with_flag_a.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.outline.expect
new file mode 100644
index 0000000..dc27164
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_named.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method m<T extends core::Object* = dynamic>(core::int* a, {core::String* b, self::C::m::T* c}) → self::C::m::T*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.outline.expect
new file mode 100644
index 0000000..fab9845
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method m<T extends core::Object* = dynamic>(core::int* a, [self::C::m::T* b]) → self::C::m::T*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.outline.expect
new file mode 100644
index 0000000..da0aacf
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_positional2.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method m<T extends core::Object* = dynamic>(core::int* a, [core::String* b, self::C::m::T* c]) → self::C::m::T*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.outline.expect b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.outline.expect
new file mode 100644
index 0000000..2798d5a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_generic_method_type_required.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method m<T extends core::Object* = dynamic>(self::C::m::T* x) → self::C::m::T*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.outline.expect b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.outline.expect
new file mode 100644
index 0000000..1421f70
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_list_literal_nested_in_map_literal.dart.outline.expect
@@ -0,0 +1,20 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Resource extends core::Object {
+ synthetic constructor •() → self::Resource*
+ ;
+}
+class Folder extends self::Resource {
+ synthetic constructor •() → self::Folder*
+ ;
+}
+class Foo<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(self::Foo::T* t) → self::Foo<self::Foo::T*>*
+ ;
+}
+static method getResource(core::String* str) → self::Resource*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.outline.expect b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_local_function_return_type.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.outline.expect
new file mode 100644
index 0000000..f87eb4f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_field.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends self::D {
+ synthetic constructor •() → self::C*
+ ;
+ set foo(core::int* x) → void
+ ;
+}
+class D extends core::Object {
+ field core::int* foo;
+ synthetic constructor •() → self::D*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.outline.expect b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.outline.expect
new file mode 100644
index 0000000..8d523c6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_parameter_type_setter_from_setter.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends self::D {
+ synthetic constructor •() → self::C*
+ ;
+ set foo(core::int* x) → void
+ ;
+}
+class D extends core::Object {
+ synthetic constructor •() → self::D*
+ ;
+ set foo(core::int* x) → void
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression.dart.outline.expect b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.outline.expect
new file mode 100644
index 0000000..5594f99
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* a_not;
+static field core::int* a_complement;
+static field core::int* a_negate;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.outline.expect b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.outline.expect
new file mode 100644
index 0000000..264d18b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_prefix_expression_custom.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ constructor •() → self::A*
+ ;
+ operator ~() → core::int*
+ ;
+ operator unary-() → core::double*
+ ;
+}
+static field self::A* a;
+static field core::int* v_complement;
+static field core::double* v_negate;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.outline.expect b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.outline.expect
new file mode 100644
index 0000000..628cf39
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_return_of_statement_lambda.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method strings() → core::List<core::String*>*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.outline.expect
new file mode 100644
index 0000000..531005e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively.dart.outline.expect
@@ -0,0 +1,36 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
+
+static final field core::int* m1;
+static final field core::int* m2;
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+ static final field core::int* a2;
+ synthetic constructor •() → self2::A*
+ ;
+}
+static final field core::int* a1;
+static method main() → dynamic
+ ;
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static final field core::int* b1;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.outline.expect
new file mode 100644
index 0000000..376e563
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively2.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static const field core::int* x1 = 1;
+static final field core::int* x2;
+static final field core::int* y1;
+static final field core::int* y2;
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.outline.expect
new file mode 100644
index 0000000..992d62b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3.dart.outline.expect
@@ -0,0 +1,32 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_statics_transitively3_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_statics_transitively3_a.dart";
+import "org-dartlang-testcase:///infer_statics_transitively3_a.dart" as p;
+
+static const field core::int* t1 = 1;
+static const field core::int* t2 = self::t1;
+static const field core::int* t3 = inf::a1;
+static const field core::int* t4 = inf::a2;
+static const field dynamic t5 = inf::A::a3;
+static const field dynamic t6 = inf::A::a3;
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as inf;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static const field dynamic a3 = null;
+ synthetic constructor •() → inf::A*
+ ;
+}
+static const field core::int* a1 = 3;
+static const field core::int* a2 = 4;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.outline.expect
new file mode 100644
index 0000000..7eda95a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively3_a.dart.outline.expect
@@ -0,0 +1,13 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static const field dynamic a3 = null;
+ synthetic constructor •() → self::A*
+ ;
+}
+static const field core::int* a1 = 3;
+static const field core::int* a2 = 4;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.outline.expect
new file mode 100644
index 0000000..b62ec89
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_2_a.dart.outline.expect
@@ -0,0 +1,52 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+ static final field core::int* a2;
+ synthetic constructor •() → self::A*
+ ;
+}
+static final field core::int* a1;
+static method main() → dynamic
+ ;
+
+library test;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
+
+static final field core::int* m1;
+static final field core::int* m2;
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static final field core::int* b1;
+static method main() → dynamic
+ ;
+
+library;
+import self as self4;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+ static final field core::int* a2;
+ synthetic constructor •() → self4::A*
+ ;
+}
+static final field core::int* a1;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.outline.expect
new file mode 100644
index 0000000..54f49cbb7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_a.dart.outline.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively.dart";
+import "org-dartlang-testcase:///infer_statics_transitively_b.dart";
+
+class A extends core::Object {
+ static final field core::int* a2;
+ synthetic constructor •() → self::A*
+ ;
+}
+static final field core::int* a1;
+static method main() → dynamic
+ ;
+
+library test;
+import self as self2;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_transitively_a.dart";
+
+static final field core::int* m1;
+static final field core::int* m2;
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as self3;
+import "dart:core" as core;
+
+static final field core::int* b1;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.outline.expect
new file mode 100644
index 0000000..1634bbb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_transitively_b.dart.outline.expect
@@ -0,0 +1,7 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static final field core::int* b1;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.outline.expect
new file mode 100644
index 0000000..82eac85
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations.dart.outline.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_statics_with_method_invocations_a.dart";
+
+class T extends core::Object {
+ static final field self::T* foo;
+ synthetic constructor •() → self::T*
+ ;
+ static method m1(core::String* m) → self::T*
+ ;
+ static method m2(dynamic e) → core::String*
+ ;
+}
+static method main() → dynamic
+ ;
+
+library;
+import self as self2;
+import "dart:core" as core;
+
+static method m3(core::String* a, core::String* b, [dynamic a1, dynamic a2]) → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.outline.expect
new file mode 100644
index 0000000..92e6635
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_statics_with_method_invocations_a.dart.outline.expect
@@ -0,0 +1,8 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+static method m3(core::String* a, core::String* b, [dynamic a1, dynamic a2]) → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_throw.dart.outline.expect b/pkg/front_end/testcases/inference/infer_throw.dart.outline.expect
new file mode 100644
index 0000000..a26c77f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_throw.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::bool* t;
+static field dynamic a;
+static field core::int* b;
+static field core::int* c;
+static field core::int* d;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.outline.expect
new file mode 100644
index 0000000..fdad487
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields2.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B*
+ ;
+ get x() → core::int*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.outline.expect
new file mode 100644
index 0000000..740163e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_overridden_fields4.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ final field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends core::Object implements self::A {
+ synthetic constructor •() → self::B*
+ ;
+ get x() → core::int*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var2.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.outline.expect
new file mode 100644
index 0000000..59396ab
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var2.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test2() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.outline.expect
new file mode 100644
index 0000000..556acab
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_field.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::int* x;
+ field core::int* y;
+ final field core::int* z;
+ synthetic constructor •() → self::A*
+ ;
+ method test1() → dynamic
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.outline.expect
new file mode 100644
index 0000000..818f5f5e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_on_var_from_top_level.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::int* x;
+static field core::int* y;
+static final field core::int* z;
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.outline.expect
new file mode 100644
index 0000000..6e632b8
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles.dart.outline.expect
@@ -0,0 +1,36 @@
+library test;
+import self as self;
+import "infer_type_regardless_of_declaration_order_or_cycles_b.dart" as inf;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
+
+class C extends inf::B {
+ synthetic constructor •() → self::C*
+ ;
+ get x() → core::int*
+ ;
+}
+class A extends core::Object {
+ synthetic constructor •() → self::A*
+ ;
+ get x() → core::int*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as inf;
+import "infer_type_regardless_of_declaration_order_or_cycles.dart" as self;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
+
+class B extends self::A {
+ synthetic constructor •() → inf::B*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.outline.expect b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.outline.expect
new file mode 100644
index 0000000..3dc6858
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_type_regardless_of_declaration_order_or_cycles_b.dart.outline.expect
@@ -0,0 +1,36 @@
+library;
+import self as self;
+import "infer_type_regardless_of_declaration_order_or_cycles.dart" as test;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles.dart";
+
+class B extends test::A {
+ synthetic constructor •() → self::B*
+ ;
+}
+static method main() → dynamic
+ ;
+
+library test;
+import self as test;
+import "infer_type_regardless_of_declaration_order_or_cycles_b.dart" as self;
+import "dart:core" as core;
+
+import "org-dartlang-testcase:///infer_type_regardless_of_declaration_order_or_cycles_b.dart";
+
+class C extends self::B {
+ synthetic constructor •() → test::C*
+ ;
+ get x() → core::int*
+ ;
+}
+class A extends core::Object {
+ synthetic constructor •() → test::A*
+ ;
+ get x() → core::int*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.outline.expect b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.outline.expect
new file mode 100644
index 0000000..de41e4b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_typed_map_literal.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::Map<core::int*, core::String*>* a;
+static field core::Map<core::double*, core::int*>* b;
+static field core::Map<core::List<core::int*>*, core::Map<core::String*, core::double*>*>* c;
+static field core::Map<core::int*, dynamic>* d;
+static field core::Map<dynamic, core::int*>* e;
+static field core::Map<dynamic, dynamic>* f;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.outline.expect
new file mode 100644
index 0000000..fd0db16
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_3.dart.outline.expect
@@ -0,0 +1,22 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+ final field self::A::T* x;
+ final field self::A::T* w;
+ synthetic constructor •() → self::A<self::A::T*>*
+ ;
+}
+class B extends core::Object implements self::A<core::int*> {
+ synthetic constructor •() → self::B*
+ ;
+ get x() → core::int*
+ ;
+ get w() → core::int*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.outline.expect
new file mode 100644
index 0000000..42d4b2e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_4.dart.outline.expect
@@ -0,0 +1,20 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+ generic-covariant-impl field self::A::T* x;
+ synthetic constructor •() → self::A<self::A::T*>*
+ ;
+}
+class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> {
+ generic-covariant-impl field self::B::E* y;
+ synthetic constructor •() → self::B<self::B::E*>*
+ ;
+ get x() → self::B::E*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.outline.expect
new file mode 100644
index 0000000..f7f66a7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_5.dart.outline.expect
@@ -0,0 +1,33 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+abstract class I<E extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::I<self::I::E*>*
+ ;
+ abstract method m(dynamic a, (dynamic, self::I::E*) →* core::String* f) → core::String*;
+}
+abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<self::A::E*> {
+ const constructor •() → self::A<self::A::E*>*
+ : super core::Object::•()
+ ;
+ abstract method m(dynamic a, (dynamic, self::A::E*) →* core::String* f) → core::String*;
+}
+abstract class M extends core::Object {
+ final field core::int* y;
+ synthetic constructor •() → self::M*
+ ;
+}
+class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M {
+ const constructor •() → self::B<self::B::E*>*
+ : super self::A::•()
+ ;
+ get y() → core::int*
+ ;
+ method m(dynamic a, (dynamic, self::B::E*) →* dynamic f) → core::String*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.outline.expect
new file mode 100644
index 0000000..d10152ae
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle.dart.outline.expect
@@ -0,0 +1,46 @@
+library test;
+import self as self;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle_a.dart" as inf;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
+
+abstract class A<E extends core::Object* = dynamic> extends core::Object implements inf::I<self::A::E*> {
+ final field self::A::E* value = null;
+ const constructor •() → self::A<self::A::E*>*
+ : super core::Object::•()
+ ;
+}
+abstract class M extends core::Object {
+ final field core::int* y;
+ synthetic constructor •() → self::M*
+ ;
+}
+class B<E extends core::Object* = dynamic> extends self::A<self::B::E*> implements self::M {
+ const constructor •() → self::B<self::B::E*>*
+ : super self::A::•()
+ ;
+ get y() → core::int*
+ ;
+ method m(dynamic a, (dynamic, core::int*) →* dynamic f) → self::A<self::B::E*>*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+library;
+import self as inf;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle.dart" as self;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
+
+abstract class I<E extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → inf::I<inf::I::E*>*
+ ;
+ abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → self::A<inf::I::E*>*;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.outline.expect
new file mode 100644
index 0000000..4b3a052
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_in_library_cycle_a.dart.outline.expect
@@ -0,0 +1,46 @@
+library;
+import self as self;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle.dart" as test;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle.dart";
+
+abstract class I<E extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::I<self::I::E*>*
+ ;
+ abstract method m(dynamic a, (dynamic, core::int*) →* core::String* f) → test::A<self::I::E*>*;
+}
+static method main() → dynamic
+ ;
+
+library test;
+import self as test;
+import "dart:core" as core;
+import "infer_types_on_generic_instantiations_in_library_cycle_a.dart" as self;
+
+import "org-dartlang-testcase:///infer_types_on_generic_instantiations_in_library_cycle_a.dart";
+
+abstract class A<E extends core::Object* = dynamic> extends core::Object implements self::I<test::A::E*> {
+ final field test::A::E* value = null;
+ const constructor •() → test::A<test::A::E*>*
+ : super core::Object::•()
+ ;
+}
+abstract class M extends core::Object {
+ final field core::int* y;
+ synthetic constructor •() → test::M*
+ ;
+}
+class B<E extends core::Object* = dynamic> extends test::A<test::B::E*> implements test::M {
+ const constructor •() → test::B<test::B::E*>*
+ : super test::A::•()
+ ;
+ get y() → core::int*
+ ;
+ method m(dynamic a, (dynamic, core::int*) →* dynamic f) → test::A<test::B::E*>*
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.outline.expect
new file mode 100644
index 0000000..6186c9d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart.outline.expect
@@ -0,0 +1,30 @@
+library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:13:49: Error: The return type of the method 'B.x' is 'dynamic', which does not match the return type, 'int', of the overridden method, 'A.x'.
+// Change to a subtype of 'int'.
+// /*error:INVALID_METHOD_OVERRIDE*/ dynamic get x => 3;
+// ^
+// pkg/front_end/testcases/inference/infer_types_on_generic_instantiations_infer.dart:9:11: Context: This is the overridden method ('x').
+// final T x = null;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+ final field self::A::T* x;
+ synthetic constructor •() → self::A<self::A::T*>*
+ ;
+}
+class B extends core::Object implements self::A<core::int*> {
+ synthetic constructor •() → self::B*
+ ;
+ get x() → dynamic
+ ;
+}
+static method foo() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.outline.expect
new file mode 100644
index 0000000..2ecbacc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop.dart.outline.expect
@@ -0,0 +1,25 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+ field core::int* bar;
+ synthetic constructor •() → self::Foo*
+ ;
+}
+class Bar<T extends core::Iterable<core::String*>* = core::Iterable<core::String*>*> extends core::Object {
+ synthetic constructor •() → self::Bar<self::Bar::T*>*
+ ;
+ method foo(generic-covariant-impl self::Bar::T* t) → void
+ ;
+}
+class Baz<T extends core::Object* = dynamic, E extends core::Iterable<self::Baz::T*>* = core::Iterable<dynamic>*, S extends self::Baz::E* = core::Iterable<dynamic>*> extends core::Object {
+ synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
+ ;
+ method foo(generic-covariant-impl self::Baz::S* t) → void
+ ;
+}
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
index 15b2a4d..43bc546 100644
--- a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_each_loop_async.dart.outline.expect
@@ -10,13 +10,13 @@
synthetic constructor •() → self::Foo*
;
}
-class Bar<T extends asy::Stream<core::String*>* = dynamic> extends core::Object {
+class Bar<T extends asy::Stream<core::String*>* = asy::Stream<core::String*>*> extends core::Object {
synthetic constructor •() → self::Bar<self::Bar::T*>*
;
method foo(generic-covariant-impl self::Bar::T* t) → dynamic
;
}
-class Baz<T extends core::Object* = dynamic, E extends asy::Stream<self::Baz::T*>* = dynamic, S extends self::Baz::E* = dynamic> extends core::Object {
+class Baz<T extends core::Object* = dynamic, E extends asy::Stream<self::Baz::T*>* = asy::Stream<dynamic>*, S extends self::Baz::E* = asy::Stream<dynamic>*> extends core::Object {
synthetic constructor •() → self::Baz<self::Baz::T*, self::Baz::E*, self::Baz::S*>*
;
method foo(generic-covariant-impl self::Baz::S* t) → dynamic
diff --git a/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.outline.expect b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.outline.expect
new file mode 100644
index 0000000..8e85697
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_types_on_loop_indices_for_loop_with_inference.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/infer_variable_void.dart.outline.expect b/pkg/front_end/testcases/inference/infer_variable_void.dart.outline.expect
new file mode 100644
index 0000000..3c20c2d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/infer_variable_void.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+
+static field void x;
+static method f() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.outline.expect
new file mode 100644
index 0000000..e484bfb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_initializing_formal_checks_default_value.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class Foo extends core::Object {
+ field core::int* x;
+ constructor •([core::int* x]) → self::Foo*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.outline.expect
new file mode 100644
index 0000000..10e00b4
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_static_field_complex.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ static field core::String* x;
+ field core::Map<core::String*, core::Map<core::String*, core::String*>*>* y;
+ synthetic constructor •() → self::C*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.outline.expect
new file mode 100644
index 0000000..546284f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_nonstatic_field_depends_on_top_level_var_simple.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ field core::String* y;
+ synthetic constructor •() → self::C*
+ ;
+}
+static field core::String* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_block_closure_no_args_no_return.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_cascade.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.outline.expect
new file mode 100644
index 0000000..558a097
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_cascade.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::int* a;
+ field core::List<core::int*>* b;
+ synthetic constructor •() → self::A*
+ ;
+ method m() → void
+ ;
+}
+static field self::A* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.outline.expect
new file mode 100644
index 0000000..023351f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ operator *(self::C* other) → core::bool*
+ ;
+}
+static field self::C* c;
+static field core::bool* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.outline.expect
new file mode 100644
index 0000000..e63cff7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_binary_op_via_interface.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+ synthetic constructor •() → self::I*
+ ;
+ operator *(self::C* other) → core::bool*
+ ;
+}
+abstract class C extends core::Object implements self::I {
+ synthetic constructor •() → self::C*
+ ;
+}
+static field self::C* c;
+static field core::bool* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.outline.expect
new file mode 100644
index 0000000..0bc720e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ operator [](core::int* index) → core::bool*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.outline.expect
new file mode 100644
index 0000000..071abaa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_index_op_via_interface.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+ synthetic constructor •() → self::I*
+ ;
+ operator [](core::int* index) → core::bool*
+ ;
+}
+abstract class C extends core::Object implements self::I {
+ synthetic constructor •() → self::C*
+ ;
+}
+static method f() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.outline.expect
new file mode 100644
index 0000000..4c4ec52
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op.dart.outline.expect
@@ -0,0 +1,14 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ operator unary-() → core::bool*
+ ;
+}
+static field self::C* c;
+static field core::bool* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.outline.expect
new file mode 100644
index 0000000..01d1040
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_custom_unary_op_via_interface.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+ synthetic constructor •() → self::I*
+ ;
+ operator unary-() → core::bool*
+ ;
+}
+abstract class C extends core::Object implements self::I {
+ synthetic constructor •() → self::C*
+ ;
+}
+static field self::C* c;
+static field core::bool* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.outline.expect
new file mode 100644
index 0000000..7f7e2d3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method g() → core::bool*
+ ;
+}
+static field () →* core::bool* x;
+static method f() → self::C*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.outline.expect
new file mode 100644
index 0000000..dd6d6c5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_extract_method_tear_off_via_interface.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+ synthetic constructor •() → self::I*
+ ;
+ method g() → core::bool*
+ ;
+}
+abstract class C extends core::Object implements self::I {
+ synthetic constructor •() → self::C*
+ ;
+}
+static field () →* core::bool* x;
+static method f() → self::C*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.outline.expect
new file mode 100644
index 0000000..093165a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_from_top_level_executable_tear_off.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field (core::Object*) →* void v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.outline.expect
new file mode 100644
index 0000000..64a0c83
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method g() → core::bool*
+ ;
+}
+static field core::bool* x;
+static method f() → self::C*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.outline.expect
new file mode 100644
index 0000000..1dc5beb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_invoke_method_via_interface.dart.outline.expect
@@ -0,0 +1,19 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class I extends core::Object {
+ synthetic constructor •() → self::I*
+ ;
+ method g() → core::bool*
+ ;
+}
+abstract class C extends core::Object implements self::I {
+ synthetic constructor •() → self::C*
+ ;
+}
+static field core::bool* x;
+static method f() → self::C*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.outline.expect
new file mode 100644
index 0000000..f34fca1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::Object {
+ final field core::int* index;
+ final field core::String* _name;
+ static const field core::List<self::E*>* values = const <self::E*>[self::E::v1];
+ static const field self::E* v1 = const self::E::•(0, "E.v1");
+ const constructor •(core::int* index, core::String* _name) → self::E*
+ : self::E::index = index, self::E::_name = _name, super core::Object::•()
+ ;
+ method toString() → core::String*
+ return this.{=self::E::_name};
+}
+static final field self::E* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.outline.expect
new file mode 100644
index 0000000..c337f19
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_enum_values.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::Object {
+ final field core::int* index;
+ final field core::String* _name;
+ static const field core::List<self::E*>* values = const <self::E*>[self::E::v1];
+ static const field self::E* v1 = const self::E::•(0, "E.v1");
+ const constructor •(core::int* index, core::String* _name) → self::E*
+ : self::E::index = index, self::E::_name = _name, super core::Object::•()
+ ;
+ method toString() → core::String*
+ return this.{=self::E::_name};
+}
+static final field core::List<self::E*>* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.outline.expect
new file mode 100644
index 0000000..8c72258
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* void;
+static final field core::Map<core::String*, () →* void>* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.outline.expect
new file mode 100644
index 0000000..41a8e7b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_is_typedef_parameterized.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F<T extends core::Object* = dynamic> = () →* T*;
+static final field core::Map<core::String*, () →* core::int*>* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.outline.expect
new file mode 100644
index 0000000..022fc54
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<() →* core::Object*>* v;
+static method f() → core::int*
+ ;
+static method g() → core::String*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.outline.expect
new file mode 100644
index 0000000..19ea551
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_function_typed_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<((core::String*) →* core::int*) →* core::Object*>* v;
+static method f((core::String*) →* core::int* x) → core::int*
+ ;
+static method g((core::String*) →* core::int* x) → core::String*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.outline.expect
new file mode 100644
index 0000000..13063fa5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_named_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<({x: core::int*}) →* core::Object*>* v;
+static method f({core::int* x}) → core::int*
+ ;
+static method g({core::int* x}) → core::String*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.outline.expect
new file mode 100644
index 0000000..bd37456
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_positional_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<([core::int*]) →* core::Object*>* v;
+static method f([core::int* x]) → core::int*
+ ;
+static method g([core::int* x]) → core::String*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.outline.expect
new file mode 100644
index 0000000..4de588f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_uses_synthetic_function_type_required_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<(core::int*) →* core::Object*>* v;
+static method f(core::int* x) → core::int*
+ ;
+static method g(core::int* x) → core::String*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.outline.expect
new file mode 100644
index 0000000..4673ba3
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_multiple_levels_of_nesting.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ static final field (core::bool*) →* (core::int*) →* core::Map<core::int*, core::bool*>* f;
+ synthetic constructor •() → self::C*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.outline.expect
new file mode 100644
index 0000000..a4ec082
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_depends_on_args.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ static final field (core::bool*) →* core::bool* f;
+ synthetic constructor •() → self::C*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.outline.expect
new file mode 100644
index 0000000..40aeb8e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_field.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ static final field (core::bool*) →* core::int* f;
+ synthetic constructor •() → self::C*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.outline.expect
new file mode 100644
index 0000000..d303dfc
--- /dev/null
+++ b/pkg/front_end/testcases/inference/inferred_type_via_closure_type_independent_of_args_top_level.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static final field (core::bool*) →* core::int* f;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect
index 3a1211f..d0bd559 100644
--- a/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/inheritance_does_not_imply_circularity.dart.outline.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
class I1 extends core::Object {
- final field dynamic x;
+ final field core::int* x;
synthetic constructor •() → self::I1*
;
}
@@ -18,6 +18,6 @@
get x() → core::int*
;
}
-static field dynamic y;
+static field core::int* y;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.outline.expect
new file mode 100644
index 0000000..6aa475b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_after.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class B<T extends self::A<core::int*>* = self::A<core::int*>*> extends core::Object {
+ synthetic constructor •() → self::B<self::B::T*>*
+ ;
+}
+class A<T extends core::int* = core::int*> extends core::Object {
+ synthetic constructor •() → self::A<self::A::T*>*
+ ;
+}
+static field self::B<self::A<core::int*>*>* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.outline.expect
new file mode 100644
index 0000000..90698fa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_has_bound_defined_before.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::int* = core::int*> extends core::Object {
+ synthetic constructor •() → self::A<self::A::T*>*
+ ;
+}
+class B<T extends self::A<core::int*>* = self::A<core::int*>*> extends core::Object {
+ synthetic constructor •() → self::B<self::B::T*>*
+ ;
+}
+static field self::B<self::A<core::int*>*>* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.outline.expect
new file mode 100644
index 0000000..0a2734e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic2_no_bound.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::A<self::A::T*>*
+ ;
+}
+class B<T extends self::A<dynamic>* = self::A<dynamic>*> extends core::Object {
+ synthetic constructor •() → self::B<self::B::T*>*
+ ;
+}
+static field self::B<self::A<dynamic>*>* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.outline.expect
new file mode 100644
index 0000000..34b5179
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_after.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::int* = core::int*> extends core::Object {
+ synthetic constructor •() → self::A<self::A::T*>*
+ ;
+}
+static field self::A<core::int*>* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.outline.expect
new file mode 100644
index 0000000..34b5179
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_generic_has_bound_defined_before.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A<T extends core::int* = core::int*> extends core::Object {
+ synthetic constructor •() → self::A<self::A::T*>*
+ ;
+}
+static field self::A<core::int*>* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.outline.expect
new file mode 100644
index 0000000..fc54b7b
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_no_bound.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::C<self::C::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.outline.expect
new file mode 100644
index 0000000..2d88b5d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_invoke_constructor_type_args_exact.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+ synthetic constructor •() → self::C<self::C::T*>*
+ ;
+}
+static field self::C<core::int*>* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.outline.expect b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.outline.expect
new file mode 100644
index 0000000..8f0c87e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/instantiate_to_bounds_not_generic.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ synthetic constructor •() → self::A*
+ ;
+}
+class B<T extends self::A* = self::A*> extends core::Object {
+ synthetic constructor •() → self::B<self::B::T*>*
+ ;
+}
+static field self::B<self::A*>* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.outline.expect b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.outline.expect
new file mode 100644
index 0000000..a021f96
--- /dev/null
+++ b/pkg/front_end/testcases/inference/lambda_does_not_have_propagated_type_hint.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method getListOfString() → core::List<core::String*>*
+ ;
+static method foo() → void
+ ;
+static method bar() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/list_literal_typed.dart.outline.expect b/pkg/front_end/testcases/inference/list_literal_typed.dart.outline.expect
index ecd13b6..683fac8 100644
--- a/pkg/front_end/testcases/inference/list_literal_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/list_literal_typed.dart.outline.expect
@@ -1,9 +1,10 @@
library test;
import self as self;
+import "dart:core" as core;
-static field dynamic a;
-static field dynamic b;
-static field dynamic c;
-static field dynamic d;
+static field core::List<core::int*>* a;
+static field core::List<core::double*>* b;
+static field core::List<core::List<core::int*>*>* c;
+static field core::List<dynamic>* d;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/list_literals.dart.outline.expect b/pkg/front_end/testcases/inference/list_literals.dart.outline.expect
new file mode 100644
index 0000000..893540e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literals.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+ ;
+static method test2() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.outline.expect b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literals_can_infer_null_bottom.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/list_literals_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/list_literals_top_level.dart.outline.expect
new file mode 100644
index 0000000..24cab9d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/list_literals_top_level.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* x1;
+static field core::List<core::num*>* x2;
+static method test1() → dynamic
+ ;
+static method test2() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/map_literals.dart.outline.expect b/pkg/front_end/testcases/inference/map_literals.dart.outline.expect
new file mode 100644
index 0000000..893540e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/map_literals.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+ ;
+static method test2() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.outline.expect b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/map_literals_can_infer_null.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/map_literals_top_level.dart.outline.expect b/pkg/front_end/testcases/inference/map_literals_top_level.dart.outline.expect
new file mode 100644
index 0000000..f63db32
--- /dev/null
+++ b/pkg/front_end/testcases/inference/map_literals_top_level.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::Map<core::int*, core::String*>* x1;
+static field core::Map<core::num*, core::Pattern*>* x2;
+static method test1() → dynamic
+ ;
+static method test2() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.outline.expect
new file mode 100644
index 0000000..9bfb5d5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+ ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::D<self::D::T*>*
+ ;
+}
+static field self::D<core::int*>* f;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.outline.expect
new file mode 100644
index 0000000..26e19b2
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_instance_method_identifier_sequence.dart.outline.expect
@@ -0,0 +1,18 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+ ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::D<self::D::T*>*
+ ;
+}
+static field self::C* c;
+static field self::D<core::int*>* f;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.outline.expect
new file mode 100644
index 0000000..ee571a5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_static_method.dart.outline.expect
@@ -0,0 +1,17 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ static method f<T extends core::Object* = dynamic>() → self::D<self::C::f::T*>*
+ ;
+}
+class D<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::D<self::D::T*>*
+ ;
+}
+static field self::D<core::int*>* f;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.outline.expect b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.outline.expect
new file mode 100644
index 0000000..5edbaf7
--- /dev/null
+++ b/pkg/front_end/testcases/inference/method_call_with_type_arguments_top_level_function.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class D<T extends core::Object* = dynamic> extends core::Object {
+ synthetic constructor •() → self::D<self::D::T*>*
+ ;
+}
+static field self::D<core::int*>* g;
+static method f<T extends core::Object* = dynamic>() → self::D<self::f::T*>*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect
index a7ce02f..07c3f61 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_1.dart.outline.expect
@@ -6,7 +6,7 @@
synthetic constructor •() → self::I<self::I::X*>*
;
}
-class M0<X extends core::Object* = dynamic, Y extends core::String* = dynamic> extends self::I<self::M0::X*> {
+class M0<X extends core::Object* = dynamic, Y extends core::String* = core::String*> extends self::I<self::M0::X*> {
synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
;
}
diff --git a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect
index 6af70be..f952fac 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart.outline.expect
@@ -1,4 +1,16 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:13:7: Error: Type argument 'Comparable<dynamic>' doesn't conform to the bound 'Comparable<Y>' of the type variable 'Y' on 'M0' in the supertype 'M0' of class 'M1 with M0'.
+// - 'Comparable' is from 'dart:core'.
+// Try changing type arguments so that they conform to the bounds.
+// class A extends M1 with M0 {}
+// ^
+// pkg/front_end/testcases/inference/mixin_inference_instantiate_to_bounds_3.dart:7:13: Context: This is the type variable whose bound isn't conformed to.
+// class M0<X, Y extends Comparable<Y>> extends I<X> {}
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -6,7 +18,7 @@
synthetic constructor •() → self::I<self::I::X*>*
;
}
-class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y>* = dynamic> extends self::I<self::M0::X*> {
+class M0<X extends core::Object* = dynamic, Y extends core::Comparable<self::M0::Y>* = core::Comparable<dynamic>*> extends self::I<self::M0::X*> {
synthetic constructor •() → self::M0<self::M0::X*, self::M0::Y*>*
;
}
diff --git a/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.outline.expect b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.outline.expect
new file mode 100644
index 0000000..3619892
--- /dev/null
+++ b/pkg/front_end/testcases/inference/no_error_when_declared_type_is_num_and_assigned_null.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+
+static method test1() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator.dart.outline.expect b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.outline.expect b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_coalescing_operator_2.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.outline.expect b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.outline.expect
new file mode 100644
index 0000000..672fbfb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/null_literal_should_not_infer_as_bottom.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic h;
+static method foo((core::Object*) →* core::int* f) → void
+ ;
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.outline.expect b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.outline.expect
index 583e980..3c44d0cc 100644
--- a/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/override_inference_depends_on_field_inference.dart.outline.expect
@@ -3,13 +3,13 @@
import "dart:core" as core;
class A<X extends core::Object* = dynamic> extends core::Object {
- final field dynamic foo;
+ final field core::String* foo;
synthetic constructor •() → self::A<self::A::X*>*
;
}
class B<Y extends core::Object* = dynamic> extends self::A<self::B::Y*> {
- final field dynamic foo;
- constructor •(dynamic foo) → self::B<self::B::Y*>*
+ final field core::String* foo;
+ constructor •(core::String* foo) → self::B<self::B::Y*>*
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect b/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect
index 2efb122..6bd3591 100644
--- a/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/promote_bounds.dart.outline.expect
@@ -12,7 +12,7 @@
;
abstract method bar() → void;
}
-static method f<T extends self::B* = dynamic>(self::f::T* a) → void
+static method f<T extends self::B* = self::B*>(self::f::T* a) → void
;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.outline.expect
new file mode 100644
index 0000000..24a81b6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.outline.expect
new file mode 100644
index 0000000..24a81b6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_to_field_in_class_dynamic_warnings.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.outline.expect
new file mode 100644
index 0000000..630505e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+}
+static method test5() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.outline.expect b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.outline.expect
new file mode 100644
index 0000000..b31847d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/propagate_inference_transitively2.dart.outline.expect
@@ -0,0 +1,26 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ field core::int* x;
+ synthetic constructor •() → self::A*
+ ;
+}
+class B extends core::Object {
+ field self::A* a;
+ synthetic constructor •() → self::B*
+ ;
+}
+class C extends core::Object {
+ field self::B* b;
+ synthetic constructor •() → self::C*
+ ;
+}
+class D extends core::Object {
+ field self::C* c;
+ synthetic constructor •() → self::D*
+ ;
+}
+static method main() → void
+ ;
diff --git a/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect b/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect
index 1ec74b1..b1da205 100644
--- a/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/property_get_toplevel.dart.outline.expect
@@ -12,7 +12,7 @@
;
}
static field self::C* c;
-static field dynamic function_ref;
-static field dynamic function_ref_list;
+static field () →* core::int* function_ref;
+static field core::List<() →* core::int*>* function_ref_list;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/reference_to_typedef.dart.outline.expect b/pkg/front_end/testcases/inference/reference_to_typedef.dart.outline.expect
new file mode 100644
index 0000000..a1ba81e
--- /dev/null
+++ b/pkg/front_end/testcases/inference/reference_to_typedef.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* void;
+static final field core::Type* x;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.outline.expect
new file mode 100644
index 0000000..4b7a850
--- /dev/null
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_double.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+ generic-covariant-impl field self::C::T* a;
+ synthetic constructor •() → self::C<self::C::T*>*
+ ;
+ method op(core::double* b) → void
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.outline.expect
new file mode 100644
index 0000000..c8572b5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_int.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+ generic-covariant-impl field self::C::T* a;
+ synthetic constructor •() → self::C<self::C::T*>*
+ ;
+ method op(core::int* b) → void
+ ;
+ method opEq(core::int* b) → void
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.outline.expect b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.outline.expect
new file mode 100644
index 0000000..5050ee5
--- /dev/null
+++ b/pkg/front_end/testcases/inference/refine_binary_expression_type_type_parameter_t_t.dart.outline.expect
@@ -0,0 +1,15 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::num* = core::num*> extends core::Object {
+ generic-covariant-impl field self::C::T* a;
+ synthetic constructor •() → self::C<self::C::T*>*
+ ;
+ method op(generic-covariant-impl self::C::T* b) → void
+ ;
+ method opEq(generic-covariant-impl self::C::T* b) → void
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/simple_literal_bool.dart.outline.expect b/pkg/front_end/testcases/inference/simple_literal_bool.dart.outline.expect
index 7e1ab76..7cc78f5 100644
--- a/pkg/front_end/testcases/inference/simple_literal_bool.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_bool.dart.outline.expect
@@ -1,6 +1,7 @@
library test;
import self as self;
+import "dart:core" as core;
-static field dynamic a;
+static field core::bool* a;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/simple_literal_double.dart.outline.expect b/pkg/front_end/testcases/inference/simple_literal_double.dart.outline.expect
index 7e1ab76..ce3f6d5 100644
--- a/pkg/front_end/testcases/inference/simple_literal_double.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_double.dart.outline.expect
@@ -1,6 +1,7 @@
library test;
import self as self;
+import "dart:core" as core;
-static field dynamic a;
+static field core::double* a;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/simple_literal_int.dart.outline.expect b/pkg/front_end/testcases/inference/simple_literal_int.dart.outline.expect
index 7e1ab76..0596698 100644
--- a/pkg/front_end/testcases/inference/simple_literal_int.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/simple_literal_int.dart.outline.expect
@@ -1,6 +1,7 @@
library test;
import self as self;
+import "dart:core" as core;
-static field dynamic a;
+static field core::int* a;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/static_method_tear_off.dart.outline.expect b/pkg/front_end/testcases/inference/static_method_tear_off.dart.outline.expect
new file mode 100644
index 0000000..74e9791
--- /dev/null
+++ b/pkg/front_end/testcases/inference/static_method_tear_off.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ static method f(core::String* s) → core::int*
+ ;
+}
+static const field (core::String*) →* core::int* v = self::C::f;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/string_literal.dart.outline.expect b/pkg/front_end/testcases/inference/string_literal.dart.outline.expect
index b10c845..506fd95 100644
--- a/pkg/front_end/testcases/inference/string_literal.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/string_literal.dart.outline.expect
@@ -1,9 +1,10 @@
library test;
import self as self;
+import "dart:core" as core;
-static field dynamic x;
-static field dynamic a;
-static field dynamic b;
-static field dynamic c;
+static field core::int* x;
+static field core::String* a;
+static field core::String* b;
+static field core::String* c;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect
index b8b9db0..2148ea4 100644
--- a/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get.dart.outline.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
class C extends core::Object {
- field dynamic x;
+ field core::int* x;
synthetic constructor •() → self::C*
;
}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect
index 4752269..50d69f8 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_function_typed.dart.outline.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
class C extends core::Object {
- field dynamic f;
+ field () →* core::int* f;
synthetic constructor •() → self::C*
;
}
diff --git a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect
index ec6089a..93be11a 100644
--- a/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/super_property_get_invoke_implicit_call.dart.outline.expect
@@ -9,7 +9,7 @@
;
}
class C extends core::Object {
- field dynamic f;
+ field self::CallableClass* f;
synthetic constructor •() → self::C*
;
}
diff --git a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.outline.expect b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.outline.expect
index 3b44c95..e393ff8 100644
--- a/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/toplevel_inference_toplevel_var.dart.outline.expect
@@ -1,6 +1,7 @@
library test;
import self as self;
+import "dart:core" as core;
-static field dynamic i;
+static field core::int* i;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/type_cast.dart.outline.expect b/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
index 0cf1b92..32f2f1d 100644
--- a/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/type_cast.dart.outline.expect
@@ -13,6 +13,6 @@
;
}
static field self::A<core::num*>* a;
-static field dynamic b;
+static field self::B<core::int*>* b;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_closure_call.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.outline.expect
new file mode 100644
index 0000000..bd31fbd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+ ;
+}
+static field self::C<dynamic>* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..19474ef
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_explicit_type_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+ ;
+}
+static field self::C<core::int*>* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..be2806f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_implicit_type_param.dart.outline.expect
@@ -0,0 +1,10 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C<T extends core::Object* = dynamic> extends core::Object {
+ constructor •(() →* self::C::T* x) → self::C<self::C::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.outline.expect
new file mode 100644
index 0000000..db56dbb
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_constructor_call_no_type_param.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ constructor •(() →* dynamic x) → self::C*
+ ;
+}
+static field self::C* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.outline.expect
new file mode 100644
index 0000000..10eb51f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<dynamic>* v;
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
new file mode 100644
index 0000000..10eb51f
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<dynamic>* v;
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..f0dd2fa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v;
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
new file mode 100644
index 0000000..f0dd2fa
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
@@ -0,0 +1,9 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field core::List<core::int*>* v;
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..c7133df
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+ ;
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.outline.expect
new file mode 100644
index 0000000..c7133df
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+ ;
+static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.outline.expect
new file mode 100644
index 0000000..8c0f7c6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+ ;
+static method f(dynamic x) → core::double*
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.outline.expect
new file mode 100644
index 0000000..8c0f7c6
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr.dart.outline.expect
@@ -0,0 +1,8 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static method main() → dynamic
+ ;
+static method f(dynamic x) → core::double*
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_dynamic.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.outline.expect
new file mode 100644
index 0000000..87c776d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_typed.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* core::int*;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_list_untyped.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_dynamic.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.outline.expect
new file mode 100644
index 0000000..87c776d
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_typed.dart.outline.expect
@@ -0,0 +1,7 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+typedef F = () →* core::int*;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.outline.expect
new file mode 100644
index 0000000..09dc88c
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_in_map_untyped.dart.outline.expect
@@ -0,0 +1,5 @@
+library test;
+import self as self;
+
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.outline.expect
new file mode 100644
index 0000000..a207fbd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..a207fbd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_explicit_type_param.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.outline.expect
new file mode 100644
index 0000000..a207fbd
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_implicit_type_param.dart.outline.expect
@@ -0,0 +1,12 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method f<T extends core::Object* = dynamic>(() →* self::C::f::T* g) → core::List<self::C::f::T*>*
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.outline.expect b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.outline.expect
new file mode 100644
index 0000000..2579e0a
--- /dev/null
+++ b/pkg/front_end/testcases/inference/unsafe_block_closure_inference_method_call_no_type_param.dart.outline.expect
@@ -0,0 +1,13 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method f(dynamic x) → core::double*
+ ;
+}
+static field core::double* v;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.outline.expect
new file mode 100644
index 0000000..24086b1
--- /dev/null
+++ b/pkg/front_end/testcases/inference/void_return_type_subtypes_dynamic.dart.outline.expect
@@ -0,0 +1,11 @@
+library test;
+import self as self;
+import "dart:core" as core;
+
+static field dynamic x;
+static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T*
+ ;
+static method printRunning() → void
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect
index a833221..7ba11cd 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart.outline.expect
@@ -1,4 +1,12 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_generic_method.dart:18:5: Error: Can't infer the type of 'b': circularity found during type inference.
+// Specify the type explicitly.
+// var b = /*@ returnType=() ->* invalid-type */ () =>
+// ^
+//
import self as self;
import "dart:core" as core;
@@ -10,10 +18,10 @@
method g(dynamic i) → core::int*
;
}
-static field dynamic a;
-static field dynamic b;
-static field dynamic c;
-static field dynamic d;
-static field dynamic e;
+static field self::A* a;
+static field invalid-type b;
+static field () →* invalid-type c;
+static field () →* () →* core::int* d;
+static field () →* core::int* e;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.outline.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.outline.expect
index 078aa97..c44763e 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.outline.expect
@@ -1,15 +1,23 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
+// Specify the type explicitly.
+// var a = /*@ returnType=num* */ () => intValue /*@target=num::+*/ + b;
+// ^
+//
import self as self;
import "dart:core" as core;
static field core::int* intValue;
static field core::num* numValue;
static field core::double* doubleValue;
-static field dynamic a;
+static field invalid-type a;
static field dynamic b;
-static field dynamic c;
-static field dynamic d;
-static field dynamic e;
-static field dynamic f;
+static field () →* core::num* c;
+static field core::num* d;
+static field () →* core::double* e;
+static field core::double* f;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect
index 7322015..f42e8b5 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level.dart.outline.expect
@@ -11,6 +11,6 @@
constructor •(self::B::T* x) → self::B<self::B::T*>*
;
}
-static field dynamic t3;
+static field core::List<self::B<core::int*>*>* t3;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.outline.expect b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.outline.expect
index 7ce484e..382933c 100644
--- a/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/downwards_inference_inside_top_level_2.dart.outline.expect
@@ -6,6 +6,6 @@
constructor •(self::A::T* x) → self::A<self::A::T*>*
;
}
-static field dynamic t2;
+static field core::List<self::A<core::int*>*>* t2;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect
index 93bd955..c95d0de 100644
--- a/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/field_inference_circularity.dart.outline.expect
@@ -1,16 +1,24 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/field_inference_circularity.dart:12:7: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@returnType=invalid-type*/ () => new B(). /*@target=B::x*/ x;
+// ^
+//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field dynamic x;
- field dynamic y;
+ field invalid-type x;
+ field () →* invalid-type y;
synthetic constructor •() → self::A*
;
}
class B extends self::A {
- field dynamic x;
- field dynamic y;
+ field invalid-type x;
+ field () →* invalid-type y;
synthetic constructor •() → self::B*
;
}
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.outline.expect
index 4f84fb6..b3128a3 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_index.dart.outline.expect
@@ -3,6 +3,6 @@
import "dart:core" as core;
static field core::List<core::double*>* a;
-static field dynamic b;
+static field core::double* b;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect
index 30d498e..e5e9410 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property.dart.outline.expect
@@ -7,13 +7,13 @@
synthetic constructor •() → self::A*
;
}
-static field dynamic v_assign;
-static field dynamic v_plus;
-static field dynamic v_minus;
-static field dynamic v_multiply;
-static field dynamic v_prefix_pp;
-static field dynamic v_prefix_mm;
-static field dynamic v_postfix_pp;
-static field dynamic v_postfix_mm;
+static field core::int* v_assign;
+static field core::int* v_plus;
+static field core::int* v_minus;
+static field core::int* v_multiply;
+static field core::int* v_prefix_pp;
+static field core::int* v_prefix_mm;
+static field core::int* v_postfix_pp;
+static field core::int* v_postfix_mm;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect
index abd1782..f0cfbcc 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_property_custom.dart.outline.expect
@@ -15,9 +15,9 @@
synthetic constructor •() → self::B*
;
}
-static field dynamic v_prefix_pp;
-static field dynamic v_prefix_mm;
-static field dynamic v_postfix_pp;
-static field dynamic v_postfix_mm;
+static field core::int* v_prefix_pp;
+static field core::double* v_prefix_mm;
+static field self::A* v_postfix_pp;
+static field self::A* v_postfix_mm;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect
index 1e6470c..454ab6d 100644
--- a/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_assign_to_ref.dart.outline.expect
@@ -8,8 +8,8 @@
;
}
static field self::A* a;
-static field dynamic b;
-static field dynamic c;
-static field dynamic d;
+static field core::int* b;
+static field core::int* c;
+static field core::int* d;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect
index fe43c76..a468053 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_accessor_ref.dart.outline.expect
@@ -23,8 +23,8 @@
synthetic constructor •() → self::D*
;
}
-static field dynamic a;
-static field dynamic x;
-static field dynamic y;
+static field self::A* a;
+static field self::C* x;
+static field self::C* y;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect
index f51db36..8c060c2 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref.dart.outline.expect
@@ -20,8 +20,8 @@
synthetic constructor •() → self::D*
;
}
-static field dynamic a;
-static field dynamic x;
-static field dynamic y;
+static field self::A* a;
+static field self::C* x;
+static field self::C* y;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect
index aae5d7d..fee3471 100644
--- a/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart.outline.expect
@@ -1,15 +1,23 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/infer_instance_field_ref_circular.dart:11:7: Error: Can't infer the type of 'b': circularity found during type inference.
+// Specify the type explicitly.
+// var b = /*@ returnType=() ->* invalid-type */ () => x;
+// ^
+//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- field dynamic b;
- field dynamic c;
+ field invalid-type b;
+ field () →* () →* invalid-type c;
synthetic constructor •() → self::A*
;
}
-static field dynamic a;
-static field dynamic x;
-static field dynamic y;
+static field self::A* a;
+static field () →* invalid-type x;
+static field () →* () →* () →* invalid-type y;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/infer_logical.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_logical.dart.outline.expect
index 2f9d5ce..13732dc 100644
--- a/pkg/front_end/testcases/inference_new/infer_logical.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_logical.dart.outline.expect
@@ -2,8 +2,8 @@
import self as self;
import "dart:core" as core;
-static field dynamic x;
-static field dynamic y;
+static field core::bool* x;
+static field core::bool* y;
static method f<T extends core::Object* = dynamic>() → self::f::T*
;
static method test() → void
diff --git a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
index 093da51..2013872 100644
--- a/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_use_of_void.dart.outline.expect
@@ -14,6 +14,6 @@
method f() → void
;
}
-static field dynamic x;
+static field void x;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.outline.expect b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.outline.expect
index 2c1f8c3..51cd968 100644
--- a/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/invalid_assignment_during_toplevel_inference.dart.outline.expect
@@ -4,6 +4,6 @@
static field core::int* i;
static field core::String* s;
-static field dynamic x;
+static field core::String* x;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.outline.expect b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.outline.expect
index cbf3089..efecb76 100644
--- a/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/list_literals_can_infer_null_top_level.dart.outline.expect
@@ -1,6 +1,7 @@
library test;
import self as self;
+import "dart:core" as core;
-static field dynamic x;
+static field core::List<core::Null*>* x;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.outline.expect b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.outline.expect
index cbf3089..0f28e73 100644
--- a/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/map_literals_can_infer_null_top_level.dart.outline.expect
@@ -1,6 +1,7 @@
library test;
import self as self;
+import "dart:core" as core;
-static field dynamic x;
+static field core::Map<core::Null*, core::Null*>* x;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect
index c49eaef..ea79db2 100644
--- a/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/property_get_toplevel.dart.outline.expect
@@ -12,11 +12,11 @@
;
}
static field self::C* c;
-static field dynamic field_ref;
-static field dynamic getter_ref;
-static field dynamic function_ref;
-static field dynamic field_ref_list;
-static field dynamic getter_ref_list;
-static field dynamic function_ref_list;
+static field core::int* field_ref;
+static field core::int* getter_ref;
+static field () →* core::int* function_ref;
+static field core::List<core::int*>* field_ref_list;
+static field core::List<core::int*>* getter_ref_list;
+static field core::List<() →* core::int*>* function_ref_list;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.outline.expect b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.outline.expect
index 34725d5..e14b203 100644
--- a/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/strongly_connected_component.dart.outline.expect
@@ -1,10 +1,18 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/inference_new/strongly_connected_component.dart:17:5: Error: Can't infer the type of 'x': circularity found during type inference.
+// Specify the type explicitly.
+// var x = /*@ returnType=() ->* invalid-type */ () => f() ? y : z;
+// ^
+//
import self as self;
import "dart:core" as core;
-static field dynamic x;
-static field dynamic y;
-static field dynamic z;
+static field invalid-type x;
+static field () →* invalid-type y;
+static field () →* invalid-type z;
static method f() → core::bool*
;
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
index 3e04860..d517114 100644
--- a/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/top_level_field_depends_on_multiple_inheritance.dart.outline.expect
@@ -40,7 +40,7 @@
method foo() → self::C*
;
}
-static field dynamic x;
+static field self::B* x;
static method bar() → self::G*
;
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
index 81dff1f..f0dd2fa 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-static field dynamic v;
+static field core::List<core::int*>* v;
static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
;
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
index 81dff1f..f0dd2fa 100644
--- a/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-static field dynamic v;
+static field core::List<core::int*>* v;
static method f<T extends core::Object* = dynamic>(() →* self::f::T* g) → core::List<self::f::T*>*
;
static method main() → dynamic
diff --git a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.outline.expect b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.outline.expect
index abbb66b..46dad28 100644
--- a/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/void_return_type_subtypes_dynamic.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-static field dynamic y;
+static field void y;
static method run<T extends core::Object* = dynamic>(() →* self::run::T* f) → self::run::T*
;
static method printRunning() → void
diff --git a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.outline.expect
index 773a50f..b3d2329 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/all_steps.dart.outline.expect
@@ -10,7 +10,7 @@
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-class D<X extends self::B<self::D::X, self::D::Y>* = dynamic, Y extends self::C<self::D::X*, self::D::Y>* = dynamic, Z extends (self::D::Y*) →* self::D::X* = dynamic, W extends core::num* = dynamic> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y>* = self::C<dynamic, dynamic>*, Z extends (self::D::Y*) →* self::D::X* = (core::Null*) →* self::B<dynamic, dynamic>*, W extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*, self::D::Z*, self::D::W*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect
index 1c9866f..ddec6fc 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_list.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect
index 1c9866f..ddec6fc 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_literal_map.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect
index a44d4e1..b719a1c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_super_bounded_type.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-class A<T extends self::A<self::A::T>* = dynamic> extends core::Object {
+class A<T extends self::A<self::A::T>* = self::A<dynamic>*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect
index 44ba958..3d491c7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_list.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef A<T extends core::num* = dynamic> = (T*) →* dynamic;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
class B extends core::Object {
synthetic constructor •() → self::B*
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect
index 44ba958..3d491c7 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_literal_map.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef A<T extends core::num* = dynamic> = (T*) →* dynamic;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
class B extends core::Object {
synthetic constructor •() → self::B*
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect
new file mode 100644
index 0000000..9038ebd
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/body_typedef_super_bounded_type.dart.outline.expect
@@ -0,0 +1,14 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef B<U extends (U) →* dynamic = (dynamic) →* dynamic> = (U*) →* dynamic;
+class C extends core::Object {
+ synthetic constructor •() → self::C*
+ ;
+ method foo() → dynamic
+ ;
+}
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.outline.expect
index 5a9d18f..941b9b6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence.dart.outline.expect
@@ -2,10 +2,10 @@
import self as self;
import "dart:core" as core;
-class C<X extends core::num* = dynamic, Y extends (self::C::X*) →* void = dynamic> extends core::Object {
+class C<X extends core::num* = core::num*, Y extends (self::C::X*) →* void = (core::Null*) →* void> extends core::Object {
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-static field self::C<dynamic, dynamic>* c;
+static field self::C<core::num*, (core::Null*) →* void>* c;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.outline.expect
index 38c128d..28f1f4b 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_dependence_in_literals.dart.outline.expect
@@ -2,11 +2,11 @@
import self as self;
import "dart:core" as core;
-class C<X extends core::num* = dynamic, Y extends (self::C::X*) →* void = dynamic> extends core::Object {
+class C<X extends core::num* = core::num*, Y extends (self::C::X*) →* void = (core::Null*) →* void> extends core::Object {
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-static field dynamic lc;
-static field dynamic mc;
+static field core::List<self::C<core::num*, (core::Null*) →* void>*>* lc;
+static field core::Map<self::C<core::num*, (core::Null*) →* void>*, self::C<core::num*, (core::Null*) →* void>*>* mc;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.outline.expect
index 42b3335..543c453 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence.dart.outline.expect
@@ -2,15 +2,15 @@
import self as self;
import "dart:core" as core;
-class D<X extends (self::D::X, self::D::Y) →* void = dynamic, Y extends (self::D::X*, self::D::Y) →* void = dynamic> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) →* void = (core::Null*, core::Null*) →* void, Y extends (self::D::X*, self::D::Y) →* void = (core::Null*, core::Null*) →* void> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
;
}
-class E<X extends (self::E::X) →* void = dynamic> extends core::Object {
+class E<X extends (self::E::X) →* void = (core::Null*) →* void> extends core::Object {
synthetic constructor •() → self::E<self::E::X*>*
;
}
-static field self::D<dynamic, dynamic>* d;
-static field self::E<dynamic>* e;
+static field self::D<(core::Null*, core::Null*) →* void, (core::Null*, core::Null*) →* void>* d;
+static field self::E<(core::Null*) →* void>* e;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.outline.expect
index b75263b..bcf89d2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/contravariant_mutual_dependence_in_literals.dart.outline.expect
@@ -2,17 +2,17 @@
import self as self;
import "dart:core" as core;
-class D<X extends (self::D::X, self::D::Y) →* void = dynamic, Y extends (self::D::X*, self::D::Y) →* void = dynamic> extends core::Object {
+class D<X extends (self::D::X, self::D::Y) →* void = (core::Null*, core::Null*) →* void, Y extends (self::D::X*, self::D::Y) →* void = (core::Null*, core::Null*) →* void> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
;
}
-class E<X extends (self::E::X) →* void = dynamic> extends core::Object {
+class E<X extends (self::E::X) →* void = (core::Null*) →* void> extends core::Object {
synthetic constructor •() → self::E<self::E::X*>*
;
}
-static field dynamic ld;
-static field dynamic md;
-static field dynamic le;
-static field dynamic me;
+static field core::List<self::D<(core::Null*, core::Null*) →* void, (core::Null*, core::Null*) →* void>*>* ld;
+static field core::Map<self::D<(core::Null*, core::Null*) →* void, (core::Null*, core::Null*) →* void>*, self::D<(core::Null*, core::Null*) →* void, (core::Null*, core::Null*) →* void>*>* md;
+static field core::List<self::E<(core::Null*) →* void>*>* le;
+static field core::Map<self::E<(core::Null*) →* void>*, self::E<(core::Null*) →* void>*>* me;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.outline.expect
index 06bc06a..e6c39b1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence.dart.outline.expect
@@ -6,25 +6,25 @@
synthetic constructor •() → self::A<self::A::X*>*
;
}
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = dynamic> extends core::Object {
+class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-class D<X extends core::num* = dynamic, Y extends self::A<self::D::X*>* = dynamic> extends core::Object {
+class D<X extends core::num* = core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
;
}
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = dynamic> extends core::Object {
+class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
;
}
-class F<X extends core::num* = dynamic, Y extends () →* self::F::X* = dynamic> extends core::Object {
+class F<X extends core::num* = core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
;
}
-static field self::C<dynamic, dynamic>* c;
-static field self::D<dynamic, dynamic>* d;
-static field self::E<dynamic, dynamic>* e;
-static field self::F<dynamic, dynamic>* f;
+static field self::C<dynamic, self::A<dynamic>*>* c;
+static field self::D<core::num*, self::A<core::num*>*>* d;
+static field self::E<dynamic, () →* dynamic>* e;
+static field self::F<core::num*, () →* core::num*>* f;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.outline.expect
index 32d8cdb..3bf392c8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_dependence_in_literals.dart.outline.expect
@@ -6,29 +6,29 @@
synthetic constructor •() → self::A<self::A::X*>*
;
}
-class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = dynamic> extends core::Object {
+class C<X extends core::Object* = dynamic, Y extends self::A<self::C::X*>* = self::A<dynamic>*> extends core::Object {
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-class D<X extends core::num* = dynamic, Y extends self::A<self::D::X*>* = dynamic> extends core::Object {
+class D<X extends core::num* = core::num*, Y extends self::A<self::D::X*>* = self::A<core::num*>*> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
;
}
-class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = dynamic> extends core::Object {
+class E<X extends core::Object* = dynamic, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
;
}
-class F<X extends core::num* = dynamic, Y extends () →* self::F::X* = dynamic> extends core::Object {
+class F<X extends core::num* = core::num*, Y extends () →* self::F::X* = () →* core::num*> extends core::Object {
synthetic constructor •() → self::F<self::F::X*, self::F::Y*>*
;
}
-static field dynamic lc;
-static field dynamic mc;
-static field dynamic ld;
-static field dynamic md;
-static field dynamic le;
-static field dynamic me;
-static field dynamic lf;
-static field dynamic mf;
+static field core::List<self::C<dynamic, self::A<dynamic>*>*>* lc;
+static field core::Map<self::C<dynamic, self::A<dynamic>*>*, self::C<dynamic, self::A<dynamic>*>*>* mc;
+static field core::List<self::D<core::num*, self::A<core::num*>*>*>* ld;
+static field core::Map<self::D<core::num*, self::A<core::num*>*>*, self::D<core::num*, self::A<core::num*>*>*>* md;
+static field core::List<self::E<dynamic, () →* dynamic>*>* le;
+static field core::Map<self::E<dynamic, () →* dynamic>*, self::E<dynamic, () →* dynamic>*>* me;
+static field core::List<self::F<core::num*, () →* core::num*>*>* lf;
+static field core::Map<self::F<core::num*, () →* core::num*>*, self::F<core::num*, () →* core::num*>*>* mf;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.outline.expect
index 2c04aba..ab32947 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence.dart.outline.expect
@@ -10,20 +10,20 @@
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-class D<X extends self::B<self::D::X, self::D::Y>* = dynamic, Y extends self::C<self::D::X*, self::D::Y>* = dynamic> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y>* = self::C<dynamic, dynamic>*> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
;
}
-class E<X extends self::B<self::E::X, self::E::Y>* = dynamic, Y extends () →* self::E::X* = dynamic> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
;
}
-class F<X extends () →* self::F::X = dynamic> extends core::Object {
+class F<X extends () →* self::F::X = () →* dynamic> extends core::Object {
synthetic constructor •() → self::F<self::F::X*>*
;
}
-static field self::D<dynamic, dynamic>* d;
-static field self::E<dynamic, dynamic>* e;
-static field self::F<dynamic>* f;
+static field self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* d;
+static field self::E<self::B<dynamic, dynamic>*, () →* dynamic>* e;
+static field self::F<() →* dynamic>* f;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.outline.expect
index 6cfd9f5..e9f5ac1 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/covariant_mutual_dependence_in_literals.dart.outline.expect
@@ -10,23 +10,23 @@
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-class D<X extends self::B<self::D::X, self::D::Y>* = dynamic, Y extends self::C<self::D::X*, self::D::Y>* = dynamic> extends core::Object {
+class D<X extends self::B<self::D::X, self::D::Y>* = self::B<dynamic, dynamic>*, Y extends self::C<self::D::X*, self::D::Y>* = self::C<dynamic, dynamic>*> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
;
}
-class E<X extends self::B<self::E::X, self::E::Y>* = dynamic, Y extends () →* self::E::X* = dynamic> extends core::Object {
+class E<X extends self::B<self::E::X, self::E::Y>* = self::B<dynamic, dynamic>*, Y extends () →* self::E::X* = () →* dynamic> extends core::Object {
synthetic constructor •() → self::E<self::E::X*, self::E::Y*>*
;
}
-class F<X extends () →* self::F::X = dynamic> extends core::Object {
+class F<X extends () →* self::F::X = () →* dynamic> extends core::Object {
synthetic constructor •() → self::F<self::F::X*>*
;
}
-static field dynamic ld;
-static field dynamic md;
-static field dynamic le;
-static field dynamic me;
-static field dynamic lf;
-static field dynamic mf;
+static field core::List<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* ld;
+static field core::Map<self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::D<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*>* md;
+static field core::List<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* le;
+static field core::Map<self::E<self::B<dynamic, dynamic>*, () →* dynamic>*, self::E<self::B<dynamic, dynamic>*, () →* dynamic>*>* me;
+static field core::List<self::F<() →* dynamic>*>* lf;
+static field core::Map<self::F<() →* dynamic>*, self::F<() →* dynamic>*>* mf;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.outline.expect
index 1a94d9d..e767b17 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence.dart.outline.expect
@@ -6,15 +6,15 @@
synthetic constructor •() → self::A<self::A::X*>*
;
}
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = dynamic> extends core::Object {
+class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-class D<X extends core::num* = dynamic, Y extends (self::D::X*) →* self::D::X* = dynamic> extends core::Object {
+class D<X extends core::num* = core::num*, Y extends (self::D::X*) →* self::D::X* = (core::Null*) →* core::num*> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
;
}
-static field self::C<dynamic, dynamic>* c;
-static field self::D<dynamic, dynamic>* d;
+static field self::C<dynamic, (core::Null*) →* dynamic>* c;
+static field self::D<core::num*, (core::Null*) →* core::num*>* d;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.outline.expect
index e27f41f..04e5fdf 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/dependence_in_literals.dart.outline.expect
@@ -6,17 +6,17 @@
synthetic constructor •() → self::A<self::A::X*>*
;
}
-class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = dynamic> extends core::Object {
+class C<X extends core::Object* = dynamic, Y extends (self::C::X*) →* self::C::X* = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-class D<X extends core::num* = dynamic, Y extends (self::D::X*) →* self::D::X* = dynamic> extends core::Object {
+class D<X extends core::num* = core::num*, Y extends (self::D::X*) →* self::D::X* = (core::Null*) →* core::num*> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
;
}
-static field dynamic lc;
-static field dynamic mc;
-static field dynamic ld;
-static field dynamic md;
+static field core::List<self::C<dynamic, (core::Null*) →* dynamic>*>* lc;
+static field core::Map<self::C<dynamic, (core::Null*) →* dynamic>*, self::C<dynamic, (core::Null*) →* dynamic>*>* mc;
+static field core::List<self::D<core::num*, (core::Null*) →* core::num*>*>* ld;
+static field core::Map<self::D<core::num*, (core::Null*) →* core::num*>*, self::D<core::num*, (core::Null*) →* core::num*>*>* md;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect
index a014cc8..053b62f 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/generic_classes_from_dill.dart.outline.expect
@@ -4,6 +4,6 @@
import "dart:collection";
-static field col::LinkedListEntry<dynamic>* y;
+static field col::LinkedListEntry<col::LinkedListEntry<dynamic>*>* y;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect
index b01dcf6..86fbb12 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_constrained_by_bound.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect
index b01dcf6..86fbb12 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_defaults_to_bound.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect
index 8db9fc1..1a8907a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_gives_input.dart.outline.expect
@@ -6,7 +6,7 @@
synthetic constructor •() → self::A<self::A::T*>*
;
}
-class B<T extends core::num* = dynamic, S extends core::List<self::B::T*>* = dynamic> extends self::A<self::B::T*> {
+class B<T extends core::num* = core::num*, S extends core::List<self::B::T*>* = core::List<core::num*>*> extends self::A<self::B::T*> {
constructor •([self::B::T* x]) → self::B<self::B::T*, self::B::S*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect
index dafb049..4b449c4 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/inference_super_bounded_rejected.dart.outline.expect
@@ -2,10 +2,10 @@
import self as self;
import "dart:core" as core;
-class B<T extends core::Comparable<self::B::T>* = dynamic> extends core::Object {
+class B<T extends core::Comparable<self::B::T>* = core::Comparable<dynamic>*> extends core::Object {
synthetic constructor •() → self::B<self::B::T*>*
;
}
-static field dynamic y;
+static field self::B<core::Comparable<dynamic>*>* y;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect
index 4db0df2..7bd7cea 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/instantiated_in_outline.dart.outline.expect
@@ -2,16 +2,16 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
class B extends core::Object {
synthetic constructor •() → self::B*
;
- method foo(self::A<dynamic>* a) → dynamic
+ method foo(self::A<core::num*>* a) → dynamic
;
- method bar() → self::A<dynamic>*
+ method bar() → self::A<core::num*>*
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect
index c7fd878..048cb6e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_list.dart.outline.expect
@@ -2,10 +2,10 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
-static field dynamic a;
+static field core::List<self::A<core::num*>*>* a;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect
index c7fd878..1fef771 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/literal_map.dart.outline.expect
@@ -2,10 +2,10 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
-static field dynamic a;
+static field core::Map<self::A<core::num*>*, self::A<core::num*>*>* a;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect
index 81409aa..556a2ee 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/multiple_strongly_connected.dart.outline.expect
@@ -37,40 +37,40 @@
synthetic constructor •() → self::C<self::C::X*, self::C::Y*>*
;
}
-class D<X extends self::A<self::D::X>* = dynamic, Y extends self::A<self::D::Y>* = dynamic> extends core::Object {
+class D<X extends self::A<self::D::X>* = self::A<dynamic>*, Y extends self::A<self::D::Y>* = self::A<dynamic>*> extends core::Object {
synthetic constructor •() → self::D<self::D::X*, self::D::Y*>*
;
}
-class E<W extends self::B<self::E::W, self::E::X>* = dynamic, X extends self::C<self::E::W*, self::E::X>* = dynamic, Y extends self::B<self::E::Y, self::E::Z>* = dynamic, Z extends self::C<self::E::Y*, self::E::Z>* = dynamic> extends core::Object {
+class E<W extends self::B<self::E::W, self::E::X>* = self::B<dynamic, dynamic>*, X extends self::C<self::E::W*, self::E::X>* = self::C<dynamic, dynamic>*, Y extends self::B<self::E::Y, self::E::Z>* = self::B<dynamic, dynamic>*, Z extends self::C<self::E::Y*, self::E::Z>* = self::C<dynamic, dynamic>*> extends core::Object {
synthetic constructor •() → self::E<self::E::W*, self::E::X*, self::E::Y*, self::E::Z*>*
;
}
-class F<V extends core::num* = dynamic, W extends self::B<self::F::W, self::F::X>* = dynamic, X extends self::C<self::F::W*, self::F::X>* = dynamic, Y extends self::B<self::F::W*, self::F::X*>* = dynamic, Z extends self::C<self::F::Y*, self::F::Z>* = dynamic> extends core::Object {
+class F<V extends core::num* = core::num*, W extends self::B<self::F::W, self::F::X>* = self::B<dynamic, dynamic>*, X extends self::C<self::F::W*, self::F::X>* = self::C<dynamic, dynamic>*, Y extends self::B<self::F::W*, self::F::X*>* = self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, Z extends self::C<self::F::Y*, self::F::Z>* = self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*> extends core::Object {
synthetic constructor •() → self::F<self::F::V*, self::F::W*, self::F::X*, self::F::Y*, self::F::Z*>*
;
}
-class G<V extends core::num* = dynamic, W extends self::B<self::G::V*, self::G::X>* = dynamic, X extends self::C<self::G::W*, self::G::V*>* = dynamic, Y extends self::B<self::G::W*, self::G::X*>* = dynamic, Z extends self::C<self::G::Y*, self::G::Z>* = dynamic> extends core::Object {
+class G<V extends core::num* = core::num*, W extends self::B<self::G::V*, self::G::X>* = self::B<core::num*, dynamic>*, X extends self::C<self::G::W*, self::G::V*>* = self::C<dynamic, core::num*>*, Y extends self::B<self::G::W*, self::G::X*>* = self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, Z extends self::C<self::G::Y*, self::G::Z>* = self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*> extends core::Object {
synthetic constructor •() → self::G<self::G::V*, self::G::W*, self::G::X*, self::G::Y*, self::G::Z*>*
;
}
-class H<S extends self::A<self::H::S>* = dynamic, T extends self::B<self::H::T, self::H::U>* = dynamic, U extends self::C<self::H::T*, self::H::U>* = dynamic, V extends self::A<self::H::V>* = dynamic, W extends self::H::S* = dynamic, X extends self::H::T* = dynamic, Y extends self::H::U* = dynamic, Z extends self::H::V* = dynamic> extends core::Object {
+class H<S extends self::A<self::H::S>* = self::A<dynamic>*, T extends self::B<self::H::T, self::H::U>* = self::B<dynamic, dynamic>*, U extends self::C<self::H::T*, self::H::U>* = self::C<dynamic, dynamic>*, V extends self::A<self::H::V>* = self::A<dynamic>*, W extends self::H::S* = self::A<dynamic>*, X extends self::H::T* = self::B<dynamic, dynamic>*, Y extends self::H::U* = self::C<dynamic, dynamic>*, Z extends self::H::V* = self::A<dynamic>*> extends core::Object {
synthetic constructor •() → self::H<self::H::S*, self::H::T*, self::H::U*, self::H::V*, self::H::W*, self::H::X*, self::H::Y*, self::H::Z*>*
;
}
-class I<T extends self::I::U = dynamic, U extends self::I::Y = dynamic, V extends (self::I::W) →* dynamic = dynamic, W extends (self::I::X) →* dynamic = dynamic, X extends (self::I::V*) →* dynamic = dynamic, Y extends self::I::Z = dynamic, Z extends self::I::T = dynamic> extends core::Object {
+class I<T extends self::I::U = dynamic, U extends self::I::Y = dynamic, V extends (self::I::W) →* dynamic = (core::Null*) →* dynamic, W extends (self::I::X) →* dynamic = (core::Null*) →* dynamic, X extends (self::I::V*) →* dynamic = (core::Null*) →* dynamic, Y extends self::I::Z = dynamic, Z extends self::I::T = dynamic> extends core::Object {
synthetic constructor •() → self::I<self::I::T, self::I::U, self::I::V*, self::I::W*, self::I::X*, self::I::Y, self::I::Z>*
;
}
-class J<S extends (self::J::U) →* self::J::T = dynamic, T extends (self::J::S*) →* self::J::U = dynamic, U extends (self::J::T*) →* self::J::S* = dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) →* self::J::Y = dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X* = dynamic> extends core::Object {
+class J<S extends (self::J::U) →* self::J::T = (core::Null*) →* dynamic, T extends (self::J::S*) →* self::J::U = (core::Null*) →* dynamic, U extends (self::J::T*) →* self::J::S* = (core::Null*) →* dynamic, V extends self::J::W = dynamic, W extends self::J::X = dynamic, X extends (self::J::V) →* self::J::Y = (core::Null*) →* dynamic, Y extends self::J::Z = dynamic, Z extends self::J::X* = dynamic> extends core::Object {
synthetic constructor •() → self::J<self::J::S*, self::J::T*, self::J::U*, self::J::V, self::J::W, self::J::X*, self::J::Y, self::J::Z*>*
;
}
-static field self::D<dynamic, dynamic>* d;
-static field self::E<dynamic, dynamic, dynamic, dynamic>* e;
-static field self::F<dynamic, dynamic, dynamic, dynamic, dynamic>* f;
-static field self::G<dynamic, dynamic, dynamic, dynamic, dynamic>* g;
-static field self::H<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>* h;
-static field self::I<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>* i;
-static field self::J<dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic, dynamic>* j;
+static field self::D<self::A<dynamic>*, self::A<dynamic>*>* d;
+static field self::E<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>* e;
+static field self::F<core::num*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, self::C<self::B<self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*>*, dynamic>*>* f;
+static field self::G<core::num*, self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*, self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, self::C<self::B<self::B<core::num*, dynamic>*, self::C<dynamic, core::num*>*>*, dynamic>*>* g;
+static field self::H<self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*, self::A<dynamic>*, self::B<dynamic, dynamic>*, self::C<dynamic, dynamic>*, self::A<dynamic>*>* h;
+static field self::I<dynamic, dynamic, (core::Null*) →* dynamic, (core::Null*) →* dynamic, (core::Null*) →* dynamic, dynamic, dynamic>* i;
+static field self::J<(core::Null*) →* dynamic, (core::Null*) →* dynamic, (core::Null*) →* dynamic, dynamic, dynamic, (core::Null*) →* dynamic, dynamic, dynamic>* j;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.outline.expect
index 8c2fc53..78b6d1c 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence.dart.outline.expect
@@ -6,50 +6,50 @@
synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
;
}
-class C1<X extends (self::C1::Y) →* self::C1::X = dynamic, Y extends (self::C1::Y) →* self::C1::X* = dynamic> extends core::Object {
+class C1<X extends (self::C1::Y) →* self::C1::X = (core::Null*) →* dynamic, Y extends (self::C1::Y) →* self::C1::X* = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
;
}
-class C2<X extends (self::C2::Y) →* self::C2::X = dynamic, Y extends (self::C2::X*) →* self::C2::Y = dynamic> extends core::Object {
+class C2<X extends (self::C2::Y) →* self::C2::X = (core::Null*) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
;
}
-class C3<X extends (self::C3::X, self::C3::Y) →* self::C3::X = dynamic, Y extends (self::C3::X*, self::C3::Y) →* self::C3::X* = dynamic> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) →* self::C3::X = (core::Null*, core::Null*) →* dynamic, Y extends (self::C3::X*, self::C3::Y) →* self::C3::X* = (core::Null*, core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
;
}
-class C4<X extends (self::C4::X, self::C4::Y) →* self::C4::X = dynamic, Y extends (self::C4::X*, self::C4::Y) →* self::C4::Y = dynamic> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) →* self::C4::X = (core::Null*, core::Null*) →* dynamic, Y extends (self::C4::X*, self::C4::Y) →* self::C4::Y = (core::Null*, core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
;
}
-class D1<X extends self::B<self::D1::X, self::D1::Y>* = dynamic, Y extends (self::D1::Y) →* self::D1::X* = dynamic> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y) →* self::D1::X* = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
;
}
-class D2<X extends self::B<self::D2::X, self::D2::Y>* = dynamic, Y extends (self::D2::X*) →* self::D2::Y = dynamic> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
;
}
-class D3<X extends self::B<self::D3::X, self::D3::Y>* = dynamic, Y extends (self::D3::X*, self::D3::Y) →* self::D3::X* = dynamic> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y) →* self::D3::X* = (core::Null*, core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
;
}
-class D4<X extends self::B<self::D4::X, self::D4::Y>* = dynamic, Y extends (self::D4::X*, self::D4::Y) →* self::D4::Y = dynamic> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y) →* self::D4::Y = (core::Null*, core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
;
}
-class E<X extends (self::E::X) →* self::E::X = dynamic> extends core::Object {
+class E<X extends (self::E::X) →* self::E::X = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::E<self::E::X*>*
;
}
-static field self::C1<dynamic, dynamic>* c1;
-static field self::C2<dynamic, dynamic>* c2;
-static field self::C3<dynamic, dynamic>* c3;
-static field self::C4<dynamic, dynamic>* c4;
-static field self::D1<dynamic, dynamic>* d1;
-static field self::D2<dynamic, dynamic>* d2;
-static field self::D3<dynamic, dynamic>* d3;
-static field self::D4<dynamic, dynamic>* d4;
-static field self::E<dynamic>* e;
+static field self::C1<(core::Null*) →* dynamic, (core::Null*) →* dynamic>* c1;
+static field self::C2<(core::Null*) →* dynamic, (core::Null*) →* dynamic>* c2;
+static field self::C3<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>* c3;
+static field self::C4<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>* c4;
+static field self::D1<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>* d1;
+static field self::D2<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>* d2;
+static field self::D3<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>* d3;
+static field self::D4<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>* d4;
+static field self::E<(core::Null*) →* dynamic>* e;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.outline.expect
index b742990..0db7d67 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/mutual_dependence_in_literals.dart.outline.expect
@@ -6,59 +6,59 @@
synthetic constructor •() → self::B<self::B::X*, self::B::Y*>*
;
}
-class C1<X extends (self::C1::Y) →* self::C1::X = dynamic, Y extends (self::C1::Y) →* self::C1::X* = dynamic> extends core::Object {
+class C1<X extends (self::C1::Y) →* self::C1::X = (core::Null*) →* dynamic, Y extends (self::C1::Y) →* self::C1::X* = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C1<self::C1::X*, self::C1::Y*>*
;
}
-class C2<X extends (self::C2::Y) →* self::C2::X = dynamic, Y extends (self::C2::X*) →* self::C2::Y = dynamic> extends core::Object {
+class C2<X extends (self::C2::Y) →* self::C2::X = (core::Null*) →* dynamic, Y extends (self::C2::X*) →* self::C2::Y = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C2<self::C2::X*, self::C2::Y*>*
;
}
-class C3<X extends (self::C3::X, self::C3::Y) →* self::C3::X = dynamic, Y extends (self::C3::X*, self::C3::Y) →* self::C3::X* = dynamic> extends core::Object {
+class C3<X extends (self::C3::X, self::C3::Y) →* self::C3::X = (core::Null*, core::Null*) →* dynamic, Y extends (self::C3::X*, self::C3::Y) →* self::C3::X* = (core::Null*, core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C3<self::C3::X*, self::C3::Y*>*
;
}
-class C4<X extends (self::C4::X, self::C4::Y) →* self::C4::X = dynamic, Y extends (self::C4::X*, self::C4::Y) →* self::C4::Y = dynamic> extends core::Object {
+class C4<X extends (self::C4::X, self::C4::Y) →* self::C4::X = (core::Null*, core::Null*) →* dynamic, Y extends (self::C4::X*, self::C4::Y) →* self::C4::Y = (core::Null*, core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::C4<self::C4::X*, self::C4::Y*>*
;
}
-class D1<X extends self::B<self::D1::X, self::D1::Y>* = dynamic, Y extends (self::D1::Y) →* self::D1::X* = dynamic> extends core::Object {
+class D1<X extends self::B<self::D1::X, self::D1::Y>* = self::B<dynamic, dynamic>*, Y extends (self::D1::Y) →* self::D1::X* = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::D1<self::D1::X*, self::D1::Y*>*
;
}
-class D2<X extends self::B<self::D2::X, self::D2::Y>* = dynamic, Y extends (self::D2::X*) →* self::D2::Y = dynamic> extends core::Object {
+class D2<X extends self::B<self::D2::X, self::D2::Y>* = self::B<dynamic, dynamic>*, Y extends (self::D2::X*) →* self::D2::Y = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::D2<self::D2::X*, self::D2::Y*>*
;
}
-class D3<X extends self::B<self::D3::X, self::D3::Y>* = dynamic, Y extends (self::D3::X*, self::D3::Y) →* self::D3::X* = dynamic> extends core::Object {
+class D3<X extends self::B<self::D3::X, self::D3::Y>* = self::B<dynamic, dynamic>*, Y extends (self::D3::X*, self::D3::Y) →* self::D3::X* = (core::Null*, core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::D3<self::D3::X*, self::D3::Y*>*
;
}
-class D4<X extends self::B<self::D4::X, self::D4::Y>* = dynamic, Y extends (self::D4::X*, self::D4::Y) →* self::D4::Y = dynamic> extends core::Object {
+class D4<X extends self::B<self::D4::X, self::D4::Y>* = self::B<dynamic, dynamic>*, Y extends (self::D4::X*, self::D4::Y) →* self::D4::Y = (core::Null*, core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::D4<self::D4::X*, self::D4::Y*>*
;
}
-class E<X extends (self::E::X) →* self::E::X = dynamic> extends core::Object {
+class E<X extends (self::E::X) →* self::E::X = (core::Null*) →* dynamic> extends core::Object {
synthetic constructor •() → self::E<self::E::X*>*
;
}
-static field dynamic lc1;
-static field dynamic mc1;
-static field dynamic lc2;
-static field dynamic mc2;
-static field dynamic lc3;
-static field dynamic mc3;
-static field dynamic lc4;
-static field dynamic mc4;
-static field dynamic ld1;
-static field dynamic md1;
-static field dynamic ld2;
-static field dynamic md2;
-static field dynamic ld3;
-static field dynamic md3;
-static field dynamic ld4;
-static field dynamic md4;
-static field dynamic le;
-static field dynamic me;
+static field core::List<self::C1<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*>* lc1;
+static field core::Map<self::C1<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*, self::C1<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*>* mc1;
+static field core::List<self::C2<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*>* lc2;
+static field core::Map<self::C2<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*, self::C2<(core::Null*) →* dynamic, (core::Null*) →* dynamic>*>* mc2;
+static field core::List<self::C3<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*>* lc3;
+static field core::Map<self::C3<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*, self::C3<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*>* mc3;
+static field core::List<self::C4<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*>* lc4;
+static field core::Map<self::C4<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*, self::C4<(core::Null*, core::Null*) →* dynamic, (core::Null*, core::Null*) →* dynamic>*>* mc4;
+static field core::List<self::D1<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*>* ld1;
+static field core::Map<self::D1<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*, self::D1<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*>* md1;
+static field core::List<self::D2<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*>* ld2;
+static field core::Map<self::D2<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*, self::D2<self::B<dynamic, dynamic>*, (core::Null*) →* dynamic>*>* md2;
+static field core::List<self::D3<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*>* ld3;
+static field core::Map<self::D3<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*, self::D3<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*>* md3;
+static field core::List<self::D4<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*>* ld4;
+static field core::Map<self::D4<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*, self::D4<self::B<dynamic, dynamic>*, (core::Null*, core::Null*) →* dynamic>*>* md4;
+static field core::List<self::E<(core::Null*) →* dynamic>*>* le;
+static field core::Map<self::E<(core::Null*) →* dynamic>*, self::E<(core::Null*) →* dynamic>*>* me;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect
index 5f6a80b..18774f6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart.outline.expect
@@ -1,4 +1,15 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:12:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// class B<TypeU extends A> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_non_simple.dart:10:16: Context: Bound of this variable references variable 'TypeT' from the same declaration.
+// class A<TypeT, TypeS extends TypeT> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
@@ -10,10 +21,10 @@
synthetic constructor •() → self::B<self::B::TypeU*>*
;
}
-class C<TypeV extends self::B<dynamic>* = dynamic> extends core::Object {
+class C<TypeV extends self::B<dynamic>* = self::B<dynamic>*> extends core::Object {
synthetic constructor •() → self::C<self::C::TypeV*>*
;
}
-static field self::C<dynamic>* c;
+static field self::C<self::B<dynamic>*>* c;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect
index 81293ce..c2e470a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart.outline.expect
@@ -1,4 +1,15 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:11:9: Error: Generic type 'A' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'A' here.
+// class B<TypeU extends A> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_bound_due_to_variables.dart:9:16: Context: Bound of this variable references variable 'TypeT' from the same declaration.
+// class A<TypeT, TypeS extends TypeT> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect
index 6729f04..33a14b2 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart.outline.expect
@@ -1,9 +1,23 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:9: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef Fisk = void Function<TypeY extends Hest>();
+// ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:11:30: Context: Bound of this variable references raw type 'Hest'.
+// typedef Fisk = void Function<TypeY extends Hest>();
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_parametrized_typedef_cycle.dart:9:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-typedef Fisk = <TypeY extends self::Hest<dynamic>* = dynamic>() →* void;
-class Hest<TypeX extends <TypeY extends self::Hest<dynamic>* = dynamic>() →* void = dynamic> extends core::Object {
+typedef Fisk = <TypeY extends core::Object* = dynamic>() →* void;
+class Hest<TypeX extends <TypeY extends core::Object* = dynamic>() →* void = <TypeY extends core::Object* = dynamic>() →* void> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect
index a6fe87c..1283fc5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart.outline.expect
@@ -1,9 +1,23 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:14: Error: Generic type 'Fisk' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// typedef void Fisk<TypeY extends Hest>();
+// ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:10:19: Context: Bound of this variable references raw type 'Hest'.
+// typedef void Fisk<TypeY extends Hest>();
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_class_typedef_cycle.dart:8:12: Context: Bound of this variable references raw type 'Fisk'.
+// class Hest<TypeX extends Fisk> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-typedef Fisk<TypeY extends self::Hest<dynamic>* = dynamic> = () →* void;
-class Hest<TypeX extends () →* void = dynamic> extends core::Object {
+typedef Fisk<TypeY extends core::Object* = dynamic> = () →* void;
+class Hest<TypeX extends () →* void = () →* void> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect
index b15092d..a14595a 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart.outline.expect
@@ -1,8 +1,16 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-class Hest<TypeX extends self::Hest<dynamic>* = dynamic> extends core::Object {
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect
index 2c55b6f..667c623 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart.outline.expect
@@ -1,8 +1,21 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest, TypeY extends Hest> {}
+// ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_for_each.dart:8:32: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Hest, TypeY extends Hest> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-class Hest<TypeX extends self::Hest<dynamic, dynamic>* = dynamic, TypeY extends self::Hest<dynamic, dynamic>* = dynamic> extends core::Object {
+class Hest<TypeX extends core::Object* = dynamic, TypeY extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*, self::Hest::TypeY*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect
index ce84ab3..84aeb37 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart.outline.expect
@@ -1,8 +1,16 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_co_inductive_no_dup.dart:9:12: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables.
+// Try providing type arguments to 'Hest' here.
+// class Hest<TypeX extends Map<Hest, Hest>> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-class Hest<TypeX extends core::Map<self::Hest<dynamic>*, self::Hest<dynamic>*>* = dynamic> extends core::Object {
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect
index 39ff531..e90977d 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_folded_regress.dart.outline.expect
@@ -6,7 +6,7 @@
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
-class Fisk<TypeY extends self::Hest<self::Hest<core::Object*>*>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Hest<self::Hest<core::Object*>*>* = self::Hest<self::Hest<core::Object*>*>*> extends core::Object {
synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect
index 35c5f78..09fd8ad 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart.outline.expect
@@ -1,12 +1,31 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+// ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:11:32: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest, TypeZ extends Hest> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_for_each.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
-class Fisk<TypeY extends self::Hest<dynamic>* = dynamic, TypeZ extends self::Hest<dynamic>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic, TypeZ extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
synthetic constructor •() → self::Fisk<self::Fisk::TypeY*, self::Fisk::TypeZ*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect
index 286a5ac..261be38 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart.outline.expect
@@ -1,11 +1,19 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_from_compiled.dart:15:12: Error: Generic type 'LinkedListEntry' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'LinkedListEntry' here.
+// class Hest<X extends LinkedListEntry> {}
+// ^
+//
import self as self;
import "dart:collection" as col;
import "dart:core" as core;
import "dart:collection";
-class Hest<X extends col::LinkedListEntry<dynamic>* = dynamic> extends core::Object {
+class Hest<X extends col::LinkedListEntry<col::LinkedListEntry<dynamic>*>* = dynamic> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::X*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect
index 760a2bd..b4a29e8 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart.outline.expect
@@ -1,8 +1,15 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_generic_function_in_bound_regress.dart:11:12: Error: Type variables can't have generic function types in their bounds.
+// class Fisk<TypeY extends Function<TypeZ extends Hest<Null>>(TypeZ)> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect
index 175cfb3..cda7cca 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart.outline.expect
@@ -1,16 +1,35 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:8:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+// ^^^^^
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:12:15: Error: Generic type 'Fisk' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Fisk' here.
+// class Naebdyr<TypeZ extends Map<Hest, Fisk>> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many.dart:10:12: Context: Bound of this variable references variable 'TypeY' from the same declaration.
+// class Fisk<TypeY extends Fisk<TypeY>> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
-class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Fisk<self::Fisk::TypeY>* = self::Fisk<dynamic>*> extends core::Object {
synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
;
}
-class Naebdyr<TypeZ extends core::Map<self::Hest<dynamic>*, self::Fisk<dynamic>*>* = dynamic> extends core::Object {
+class Naebdyr<TypeZ extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Fisk<self::Fisk<dynamic>*>*>* = dynamic> extends core::Object {
synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect
index ed0fbab..fb1db93 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart.outline.expect
@@ -1,11 +1,24 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:7: Error: Generic type 'Hest' can't be used without type arguments in the bounds of its own type variables. It is referenced indirectly through 'Hest'.
+// Try providing type arguments to 'Hest' here or to some other raw types in the bounds along the reference chain.
+// class Hest<TypeX extends lib.Hest> {}
+// ^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle.dart:11:12: Context: Bound of this variable references raw type 'Hest'.
+// class Hest<TypeX extends lib.Hest> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_many_libs_same_name_cycle_lib.dart:16:12: Context: Bound of this variable references raw type 'Hest'.
+// class Hest<TypeY extends lib.Hest> {}
+// ^^^^^
+//
import self as self;
-import "non_simple_many_libs_same_name_cycle_lib.dart" as non;
import "dart:core" as core;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle_lib.dart" as lib;
-class Hest<TypeX extends non::Hest<dynamic>* = dynamic> extends core::Object {
+class Hest<TypeX extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
@@ -13,13 +26,13 @@
;
library non_simple_many_libs_same_name_cycle_lib;
-import self as non;
+import self as self2;
import "non_simple_many_libs_same_name_cycle.dart" as self;
import "dart:core" as core;
import "org-dartlang-testcase:///non_simple_many_libs_same_name_cycle.dart" as lib;
-class Hest<TypeY extends self::Hest<dynamic>* = dynamic> extends core::Object {
- synthetic constructor •() → non::Hest<non::Hest::TypeY*>*
+class Hest<TypeY extends self::Hest<dynamic>* = self::Hest<dynamic>*> extends core::Object {
+ synthetic constructor •() → self2::Hest<self2::Hest::TypeY*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect
index a81c103..2337453 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart.outline.expect
@@ -1,12 +1,23 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Map<Hest, Hest>> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_no_dup.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
-class Fisk<TypeY extends core::Map<self::Hest<dynamic>*, self::Hest<dynamic>*>* = dynamic> extends core::Object {
+class Fisk<TypeY extends core::Map<self::Hest<self::Hest<dynamic>*>*, self::Hest<self::Hest<dynamic>*>*>* = dynamic> extends core::Object {
synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect
index 57cdeed..bd2bd0e 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart.outline.expect
@@ -1,16 +1,27 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:11:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_suppress_consequence.dart:9:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
-class Fisk<TypeY extends self::Hest<dynamic>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
;
}
-class Naebdyr<TypeZ extends self::Fisk<dynamic>* = dynamic> extends core::Object {
+class Naebdyr<TypeZ extends self::Fisk<dynamic>* = self::Fisk<dynamic>*> extends core::Object {
synthetic constructor •() → self::Naebdyr<self::Naebdyr::TypeZ*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect
index 49f116a..2097fc5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart.outline.expect
@@ -1,12 +1,23 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:12:12: Error: Generic type 'Hest' can't be used without type arguments in a type variable bound.
+// Try providing type arguments to 'Hest' here.
+// class Fisk<TypeY extends Hest> {}
+// ^^^^^
+// pkg/front_end/testcases/instantiate_to_bound/non_simple_variables_from_same.dart:10:12: Context: Bound of this variable references variable 'TypeX' from the same declaration.
+// class Hest<TypeX extends Hest<TypeX>> {}
+// ^^^^^
+//
import self as self;
import "dart:core" as core;
-class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = dynamic> extends core::Object {
+class Hest<TypeX extends self::Hest<self::Hest::TypeX>* = self::Hest<dynamic>*> extends core::Object {
synthetic constructor •() → self::Hest<self::Hest::TypeX*>*
;
}
-class Fisk<TypeY extends self::Hest<dynamic>* = dynamic> extends core::Object {
+class Fisk<TypeY extends self::Hest<self::Hest<dynamic>*>* = dynamic> extends core::Object {
synthetic constructor •() → self::Fisk<self::Fisk::TypeY*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect
index 77163cf..ff215ac 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/raw_in_bound.dart.outline.expect
@@ -2,11 +2,11 @@
import self as self;
import "dart:core" as core;
-class A<T extends core::num* = dynamic> extends core::Object {
+class A<T extends core::num* = core::num*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
-class B<T extends self::A<dynamic>* = dynamic> extends core::Object {
+class B<T extends self::A<core::num*>* = self::A<core::num*>*> extends core::Object {
synthetic constructor •() → self::B<self::B::T*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.outline.expect
index c1cd644..040e2a3 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_in_bound.dart.outline.expect
@@ -2,11 +2,11 @@
import self as self;
import "dart:core" as core;
-class A<X extends core::Comparable<self::A::X>* = dynamic> extends core::Object {
+class A<X extends core::Comparable<self::A::X>* = core::Comparable<dynamic>*> extends core::Object {
synthetic constructor •() → self::A<self::A::X*>*
;
}
-class B<Y extends self::A<dynamic>* = dynamic> extends core::Object {
+class B<Y extends self::A<dynamic>* = self::A<dynamic>*> extends core::Object {
synthetic constructor •() → self::B<self::B::Y*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect
index a2a9d19..2075628 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/super_bounded_type.dart.outline.expect
@@ -2,10 +2,10 @@
import self as self;
import "dart:core" as core;
-class A<T extends self::A<self::A::T>* = dynamic> extends core::Object {
+class A<T extends self::A<self::A::T>* = self::A<dynamic>*> extends core::Object {
synthetic constructor •() → self::A<self::A::T*>*
;
}
-static field self::A<dynamic>* a;
+static field self::A<self::A<dynamic>*>* a;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect
index c64d3c5..63d1e70 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/supertypes.dart.outline.expect
@@ -8,11 +8,11 @@
synthetic constructor •() → self::B*
;
}
-class X<T extends self::B* = dynamic> extends core::Object {
+class X<T extends self::B* = self::B*> extends core::Object {
synthetic constructor •() → self::X<self::X::T*>*
;
}
-class Y extends self::X<dynamic> {
+class Y extends self::X<self::B*> {
synthetic constructor •() → self::Y*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect
index a05dade..a9a5b64 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_instantiated_in_outline.dart.outline.expect
@@ -2,13 +2,13 @@
import self as self;
import "dart:core" as core;
-typedef A<T extends core::num* = dynamic> = (T*) →* dynamic;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
class B extends core::Object {
synthetic constructor •() → self::B*
;
- method foo((dynamic) →* dynamic a) → dynamic
+ method foo((core::num*) →* dynamic a) → dynamic
;
- method bar() → (dynamic) →* dynamic
+ method bar() → (core::num*) →* dynamic
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect
index e1932d8..9af14c6 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_list.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef A<T extends core::num* = dynamic> = (T*) →* dynamic;
-static field dynamic a;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
+static field core::List<(core::num*) →* dynamic>* a;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect
index e1932d8..a1238c5 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_literal_map.dart.outline.expect
@@ -2,7 +2,7 @@
import self as self;
import "dart:core" as core;
-typedef A<T extends core::num* = dynamic> = (T*) →* dynamic;
-static field dynamic a;
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
+static field core::Map<(core::num*) →* dynamic, (core::num*) →* dynamic>* a;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect
index 434a8b9..345eb14 100644
--- a/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_raw_in_bound.dart.outline.expect
@@ -2,8 +2,8 @@
import self as self;
import "dart:core" as core;
-typedef A<T extends core::num* = dynamic> = (T*) →* dynamic;
-class B<T extends (dynamic) →* dynamic = dynamic> extends core::Object {
+typedef A<T extends core::num* = core::num*> = (T*) →* dynamic;
+class B<T extends (core::num*) →* dynamic = (core::num*) →* dynamic> extends core::Object {
synthetic constructor •() → self::B<self::B::T*>*
;
}
diff --git a/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect
new file mode 100644
index 0000000..7fd0a96
--- /dev/null
+++ b/pkg/front_end/testcases/instantiate_to_bound/typedef_super_bounded_type.dart.outline.expect
@@ -0,0 +1,9 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+typedef A<T extends core::Object* = dynamic> = (T*) →* dynamic;
+typedef B<S extends (S) →* dynamic = (dynamic) →* dynamic> = (S*) →* dynamic;
+static field ((dynamic) →* dynamic) →* dynamic b;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/late.dart.outline.expect b/pkg/front_end/testcases/nnbd/late.dart.outline.expect
index 0c33cf6..3ab3586 100644
--- a/pkg/front_end/testcases/nnbd/late.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/late.dart.outline.expect
@@ -1,140 +1,18 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/late.dart:5:6: Error: Expected ';' after this.
-// late int lateStaticField;
-// ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:5:10: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-// late int lateStaticField;
-// ^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:6:1: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-// late final int finalLateStaticField;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:6:1: Error: Expected ';' after this.
-// late final int finalLateStaticField;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:6:16: Error: The final variable 'finalLateStaticField' must be initialized.
-// Try adding an initializer ('= <expression>') to the declaration.
-// late final int finalLateStaticField;
-// ^^^^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:9:8: Error: Expected ';' after this.
-// late int lateInstanceField;
-// ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:9:12: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-// late int lateInstanceField;
-// ^^^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:10:3: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-// late final int finalLateInstanceField = 0;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:10:3: Error: Expected ';' after this.
-// late final int finalLateInstanceField = 0;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:12:15: Error: Expected ';' after this.
-// static late int lateStaticField;
-// ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:12:15: Error: 'int' is already declared in this scope.
-// static late int lateStaticField;
-// ^^^
-// pkg/front_end/testcases/nnbd/late.dart:9:8: Context: Previous declaration of 'int'.
-// late int lateInstanceField;
-// ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:12:19: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-// static late int lateStaticField;
-// ^^^^^^^^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:13:10: Error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
-// Try adding the name of the type of the variable or the keyword 'var'.
-// static late final int finalLateStaticField = 0;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:13:10: Error: Expected ';' after this.
-// static late final int finalLateStaticField = 0;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:13:10: Error: 'late' is already declared in this scope.
-// static late final int finalLateStaticField = 0;
-// ^^^^
-// pkg/front_end/testcases/nnbd/late.dart:10:3: Context: Previous declaration of 'late'.
-// late final int finalLateInstanceField = 0;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:9:3: Warning: 'late' isn't a type.
-// late int lateInstanceField;
-// ^^^^
-// pkg/front_end/testcases/nnbd/late.dart:9:3: Context: This isn't a type.
-// late int lateInstanceField;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:10:14: Warning: 'int' isn't a type.
-// late final int finalLateInstanceField = 0;
-// ^^^
-// pkg/front_end/testcases/nnbd/late.dart:10:14: Context: This isn't a type.
-// late final int finalLateInstanceField = 0;
-// ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:12:10: Warning: 'late' isn't a type.
-// static late int lateStaticField;
-// ^^^^
-// pkg/front_end/testcases/nnbd/late.dart:12:10: Context: This isn't a type.
-// static late int lateStaticField;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:13:21: Warning: 'int' isn't a type.
-// static late final int finalLateStaticField = 0;
-// ^^^
-// pkg/front_end/testcases/nnbd/late.dart:13:21: Context: This isn't a type.
-// static late final int finalLateStaticField = 0;
-// ^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:5:1: Warning: 'late' isn't a type.
-// late int lateStaticField;
-// ^^^^
-// pkg/front_end/testcases/nnbd/late.dart:6:1: Context: This isn't a type.
-// late final int finalLateStaticField;
-// ^^^^
-//
-// pkg/front_end/testcases/nnbd/late.dart:6:12: Warning: 'int' isn't a type.
-// late final int finalLateStaticField;
-// ^^^
-// pkg/front_end/testcases/nnbd/late.dart:5:6: Context: This isn't a type.
-// late int lateStaticField;
-// ^^^
-//
import self as self;
import "dart:core" as core;
class Class extends core::Object {
- field invalid-type int;
- field dynamic lateInstanceField;
- field dynamic late;
- final field invalid-type finalLateInstanceField;
- field dynamic lateStaticField;
- final field invalid-type finalLateStaticField;
+ late field core::int* lateInstanceField;
+ late final field core::int* finalLateInstanceField;
+ late static field core::int* lateStaticField;
+ late static final field core::int* finalLateStaticField;
synthetic constructor •() → self::Class*
;
method method() → dynamic
;
}
-static field invalid-type int;
-static field dynamic lateStaticField;
-static field dynamic late;
-static final field invalid-type finalLateStaticField;
+late static field core::int* lateStaticField;
+late static final field core::int* finalLateStaticField;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/nnbd/nullable_param.dart.outline.expect b/pkg/front_end/testcases/nnbd/nullable_param.dart.outline.expect
index b50f3c71..0a3ac11 100644
--- a/pkg/front_end/testcases/nnbd/nullable_param.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_param.dart.outline.expect
@@ -2,26 +2,6 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/nnbd/nullable_param.dart:5:6: Error: This requires the 'non-nullable' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// int? field;
-// ^
-//
-// pkg/front_end/testcases/nnbd/nullable_param.dart:6:6: Error: This requires the 'non-nullable' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// int? bar(int? x);
-// ^
-//
-// pkg/front_end/testcases/nnbd/nullable_param.dart:6:15: Error: This requires the 'non-nullable' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// int? bar(int? x);
-// ^
-//
-// pkg/front_end/testcases/nnbd/nullable_param.dart:17:54: Error: This requires the 'non-nullable' experiment to be enabled.
-// Try enabling this experiment by adding it to the command line when compiling and running.
-// int test_nullable_function_type_formal_param({int f()? : null}) {
-// ^
-//
// pkg/front_end/testcases/nnbd/nullable_param.dart:4:7: Error: The non-abstract class 'Foo' is missing implementations for these members:
// - Foo.bar
// Try to either
diff --git a/pkg/front_end/testcases/nnbd/required.dart.outline.expect b/pkg/front_end/testcases/nnbd/required.dart.outline.expect
index 156e7c1..97154f2 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.outline.expect
@@ -1,60 +1,17 @@
library;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/required.dart:5:29: Error: Expected '}' before this.
-// method({int a, required int b, required final int c}) {}
-// ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:8:31: Error: Expected '}' before this.
-// method({int a, required int b, required final int c, required covariant final int d}) {}
-// ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:12:50: Error: Expected '}' before this.
-// typedef Typedef1 = Function({int a, required int b});
-// ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:14:39: Error: Expected '}' before this.
-// typedef Typedef2({int a, required int b});
-// ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:16:31: Error: Expected '}' before this.
-// Function({int a, required int b}) field;
-// ^
-//
-// pkg/front_end/testcases/nnbd/required.dart:5:16: Warning: Type 'required' not found.
-// method({int a, required int b, required final int c}) {}
-// ^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/required.dart:8:18: Warning: Type 'required' not found.
-// method({int a, required int b, required final int c, required covariant final int d}) {}
-// ^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/required.dart:12:37: Warning: Type 'required' not found.
-// typedef Typedef1 = Function({int a, required int b});
-// ^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/required.dart:14:26: Warning: Type 'required' not found.
-// typedef Typedef2({int a, required int b});
-// ^^^^^^^^
-//
-// pkg/front_end/testcases/nnbd/required.dart:16:18: Warning: Type 'required' not found.
-// Function({int a, required int b}) field;
-// ^^^^^^^^
-//
import self as self;
import "dart:core" as core;
-typedef Typedef1 = ({a: core::int*, int: invalid-type}) →* dynamic;
-typedef Typedef2 = ({a: core::int*, int: invalid-type}) →* dynamic;
+typedef Typedef1 = ({a: core::int*, required b: core::int*}) →* dynamic;
+typedef Typedef2 = ({a: core::int*, required b: core::int*}) →* dynamic;
class Class extends core::Object {
synthetic constructor •() → self::Class*
;
- method method({core::int* a, invalid-type int}) → dynamic
+ method method({core::int* a, required core::int* b, required final core::int* c, required covariant final core::int* d}) → dynamic
;
}
-static field ({a: core::int*, int: invalid-type}) →* dynamic field;
-static method method({core::int* a, invalid-type int}) → dynamic
+static field ({a: core::int*, required b: core::int*}) →* dynamic field;
+static method method({core::int* a, required core::int* b, required final core::int* c}) → dynamic
;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/old_dills/dart2js.version.25.compile.1.dill b/pkg/front_end/testcases/old_dills/dart2js.version.25.compile.1.dill
new file mode 100644
index 0000000..deb7a1a
--- /dev/null
+++ b/pkg/front_end/testcases/old_dills/dart2js.version.25.compile.1.dill
Binary files differ
diff --git a/pkg/front_end/testcases/old_dills/dart2js.version.27.compile.1.dill b/pkg/front_end/testcases/old_dills/dart2js.version.27.compile.1.dill
new file mode 100644
index 0000000..40f0b90
--- /dev/null
+++ b/pkg/front_end/testcases/old_dills/dart2js.version.27.compile.1.dill
Binary files differ
diff --git a/pkg/front_end/testcases/old_dills/dart2js.version.28.compile.1.dill b/pkg/front_end/testcases/old_dills/dart2js.version.28.compile.1.dill
new file mode 100644
index 0000000..606bbf1
--- /dev/null
+++ b/pkg/front_end/testcases/old_dills/dart2js.version.28.compile.1.dill
Binary files differ
diff --git a/pkg/front_end/testcases/old_dills/dart2js.version.29.compile.1.dill b/pkg/front_end/testcases/old_dills/dart2js.version.29.compile.1.dill
new file mode 100644
index 0000000..060ab45
--- /dev/null
+++ b/pkg/front_end/testcases/old_dills/dart2js.version.29.compile.1.dill
Binary files differ
diff --git a/pkg/front_end/testcases/old_dills/old_dills.status b/pkg/front_end/testcases/old_dills/old_dills.status
new file mode 100644
index 0000000..e22cfe5
--- /dev/null
+++ b/pkg/front_end/testcases/old_dills/old_dills.status
@@ -0,0 +1,3 @@
+# Copyright (c) 2019, 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.md file.
diff --git a/pkg/front_end/testcases/outline.status b/pkg/front_end/testcases/outline.status
index 3b44d70..4037f63 100644
--- a/pkg/front_end/testcases/outline.status
+++ b/pkg/front_end/testcases/outline.status
@@ -2,247 +2,41 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE.md file.
-general/incomplete_field_formal_parameter: Fail # Fasta doesn't recover well
-general/redirecting_factory_chain_test: Fail # Missing support for RedirectingFactoryConstructor.
-general/redirecting_factory_simple_test: Fail # Missing support for RedirectingFactoryConstructor.
-general/redirecting_factory_typeargs_test: Fail # Missing support for RedirectingFactoryConstructor.
-general/redirecting_factory_typeparam_test: Fail # Missing support for RedirectingFactoryConstructor.
-general/redirecting_factory_typeparambounds_test: Fail # Missing support for RedirectingFactoryConstructor.
+general/abstract_members: TypeCheckError
+general/bug30695: TypeCheckError
+general/bug30695: TypeCheckError
+general/ignore_function: TypeCheckError
+general/mixin_application_override: TypeCheckError
+general/override_check_accessor_after_inference: TypeCheckError
+general/override_check_accessor_basic: TypeCheckError
+general/override_check_accessor_with_covariant_modifier: TypeCheckError
+general/override_check_after_inference: TypeCheckError
+general/override_check_basic: TypeCheckError
+general/override_check_with_covariant_modifier: TypeCheckError
-inference/async_closure_return_type_flatten: Fail
-inference/async_closure_return_type_future: Fail
-inference/async_closure_return_type_future_or: Fail
-inference/block_bodied_lambdas_async_all_returns_are_futures: Fail
-inference/block_bodied_lambdas_async_all_returns_are_values: Fail
-inference/block_bodied_lambdas_async_mix_of_values_and_futures: Fail
-inference/block_bodied_lambdas_async_star: Fail
-inference/block_bodied_lambdas_basic: Fail
-inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference: Fail
-inference/block_bodied_lambdas_downwards_incompatible_with_upwards_inference_top_level: Fail
-inference/block_bodied_lambdas_infer_bottom_async: Fail
-inference/block_bodied_lambdas_infer_bottom_async_star: Fail
-inference/block_bodied_lambdas_infer_bottom_sync: Fail
-inference/block_bodied_lambdas_infer_bottom_sync_star: Fail
-inference/block_bodied_lambdas_lub: Fail
-inference/block_bodied_lambdas_nested_lambdas: Fail
-inference/block_bodied_lambdas_no_return: Fail
-inference/block_bodied_lambdas_sync_star: Fail
-inference/bottom: Fail
-inference/bottom_in_closure: Fail
-inference/circular_reference_via_closures: Fail
-inference/circular_reference_via_closures_initializer_types: Fail
-inference/conflicts_can_happen: Fail
+inference/conflicting_fields: TypeCheckError
inference/conflicts_can_happen2: Fail
-inference/constructors_downwards_with_constraint: Fail
-inference/constructors_infer_from_arguments: Fail
-inference/constructors_infer_from_arguments_const: Fail
-inference/constructors_infer_from_arguments_const_with_upper_bound: Fail
-inference/constructors_infer_from_arguments_downwards_from_constructor: Fail
-inference/constructors_infer_from_arguments_factory: Fail
-inference/constructors_infer_from_arguments_factory_calls_constructor: Fail
-inference/constructors_infer_from_arguments_named: Fail
-inference/constructors_infer_from_arguments_named_factory: Fail
-inference/constructors_infer_from_arguments_redirecting: Fail
-inference/constructors_infer_from_arguments_redirecting_factory: Fail
-inference/constructors_reverse_type_parameters: Fail
-inference/constructors_too_many_positional_arguments: Fail
+inference/conflicts_can_happen: Fail
inference/do_not_infer_overridden_fields_that_explicitly_say_dynamic_infer: Fail
-inference/dont_infer_field_type_when_initializer_is_null: Fail
-inference/dont_infer_type_on_dynamic: Fail
-inference/dont_infer_type_when_initializer_is_null: Fail
-inference/downward_inference_miscellaneous: Fail
-inference/downwards_inference_assignment_statements: Fail
-inference/downwards_inference_async_await: Fail
-inference/downwards_inference_for_each: Fail
-inference/downwards_inference_initializing_formal_default_formal: Fail
-inference/downwards_inference_inside_top_level: Fail
-inference/downwards_inference_on_constructor_arguments_infer_downwards: Fail
-inference/downwards_inference_on_function_arguments_infer_downwards: Fail
-inference/downwards_inference_on_function_expressions: Fail
-inference/downwards_inference_on_function_of_t_using_the_t: Fail
-inference/downwards_inference_on_generic_constructor_arguments_empty_list: Fail
-inference/downwards_inference_on_generic_constructor_arguments_infer_downwards: Fail
-inference/downwards_inference_on_generic_function_expressions: Fail
-inference/downwards_inference_on_instance_creations_infer_downwards: Fail
-inference/downwards_inference_on_list_literals_infer_downwards: Fail
-inference/downwards_inference_on_list_literals_infer_if_value_types_match_context: Fail
-inference/downwards_inference_on_map_literals: Fail
-inference/downwards_inference_yield_yield_star: Fail
-inference/field_refers_to_static_getter: Fail
-inference/field_refers_to_top_level_getter: Fail
-inference/future_or_subtyping: Fail
-inference/generic_functions_return_typedef: Fail
-inference/generic_methods_basic_downward_inference: Fail
-inference/generic_methods_dart_math_min_max: Fail
inference/generic_methods_do_not_infer_invalid_override_of_generic_method: Fail
-inference/generic_methods_downwards_inference_affects_arguments: Fail
-inference/generic_methods_downwards_inference_fold: Fail
inference/generic_methods_handle_override_of_non_generic_with_generic: Fail
-inference/generic_methods_infer_generic_function_parameter_type: Fail
-inference/generic_methods_infer_generic_function_parameter_type2: Fail
-inference/generic_methods_infer_generic_function_return_type: Fail
-inference/generic_methods_infer_generic_instantiation: Fail
-inference/generic_methods_infer_generic_method_type: Fail
-inference/generic_methods_inference_error: Fail
-inference/generic_methods_iterable_and_future: Fail
-inference/generic_methods_nested_generic_instantiation: Fail
-inference/generic_methods_uses_greatest_lower_bound: Fail
+inference/inconsistent_overrides: TypeCheckError
inference/infer_assign_to_index: Fail
inference/infer_assign_to_property: Fail
inference/infer_assign_to_property_custom: Fail
-inference/infer_assign_to_ref: Fail
-inference/infer_binary_custom: Fail
-inference/infer_binary_double_double: Fail
-inference/infer_binary_double_int: Fail
-inference/infer_binary_int_double: Fail
-inference/infer_binary_int_int: Fail
-inference/infer_conditional: Fail
-inference/infer_consts_transitively_2: Fail
-inference/infer_consts_transitively_2_a: Fail
-inference/infer_consts_transitively_2_b: Fail
-inference/infer_consts_transitively_b: Fail
-inference/infer_correctly_on_multiple_variables_declared_together: Fail
-inference/infer_from_complex_expressions_if_outer_most_value_is_precise: Fail
-inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields: Fail
-inference/infer_from_rhs_only_if_it_wont_conflict_with_overridden_fields2: Fail
-inference/infer_from_variables_in_cycle_libs_when_flag_is_on: Fail
-inference/infer_from_variables_in_cycle_libs_when_flag_is_on2: Fail
-inference/infer_from_variables_in_cycle_libs_when_flag_is_on2_a: Fail
-inference/infer_from_variables_in_cycle_libs_when_flag_is_on_a: Fail
-inference/infer_from_variables_in_non_cycle_imports_with_flag: Fail
-inference/infer_from_variables_in_non_cycle_imports_with_flag2: Fail
-inference/infer_from_variables_in_non_cycle_imports_with_flag2_a: Fail
-inference/infer_from_variables_in_non_cycle_imports_with_flag_a: Fail
-inference/infer_generic_method_type_named: Fail
-inference/infer_generic_method_type_positional: Fail
-inference/infer_generic_method_type_positional2: Fail
-inference/infer_generic_method_type_required: Fail
-inference/infer_list_literal_nested_in_map_literal: Fail
-inference/infer_local_function_return_type: Fail
-inference/infer_parameter_type_setter_from_field: Fail
-inference/infer_parameter_type_setter_from_setter: Fail
-inference/infer_prefix_expression: Fail
-inference/infer_prefix_expression_custom: Fail
-inference/infer_return_of_statement_lambda: Fail
-inference/infer_statics_transitively: Fail
-inference/infer_statics_transitively2: Fail
-inference/infer_statics_transitively3: Fail
-inference/infer_statics_transitively3_a: Fail
-inference/infer_statics_transitively_2_a: Fail
-inference/infer_statics_transitively_a: Fail
-inference/infer_statics_transitively_b: Fail
-inference/infer_statics_with_method_invocations: Fail
-inference/infer_statics_with_method_invocations_a: Fail
-inference/infer_throw: Fail
+inference/infer_field_override_multiple: TypeCheckError
+inference/infer_method_missing_params: TypeCheckError
inference/infer_type_cast: Fail
-inference/infer_type_on_overridden_fields2: Fail
-inference/infer_type_on_overridden_fields4: Fail
-inference/infer_type_on_var: Fail
-inference/infer_type_on_var2: Fail
-inference/infer_type_on_var_from_field: Fail
-inference/infer_type_on_var_from_top_level: Fail
-inference/infer_type_regardless_of_declaration_order_or_cycles: Fail
-inference/infer_type_regardless_of_declaration_order_or_cycles_b: Fail
-inference/infer_typed_list_literal: Fail
-inference/infer_typed_map_literal: Fail
-inference/infer_types_on_generic_instantiations_3: Fail
-inference/infer_types_on_generic_instantiations_4: Fail
-inference/infer_types_on_generic_instantiations_5: Fail
-inference/infer_types_on_generic_instantiations_in_library_cycle: Fail
-inference/infer_types_on_generic_instantiations_in_library_cycle_a: Fail
-inference/infer_types_on_generic_instantiations_infer: Fail
-inference/infer_types_on_loop_indices_for_each_loop: Fail
-inference/infer_types_on_loop_indices_for_loop_with_inference: Fail
-inference/infer_variable_void: Fail
-inference/inferred_initializing_formal_checks_default_value: Fail
-inference/inferred_nonstatic_field_depends_on_static_field_complex: Fail
-inference/inferred_nonstatic_field_depends_on_top_level_var_simple: Fail
-inference/inferred_type_block_closure_no_args_no_return: Fail
-inference/inferred_type_cascade: Fail
-inference/inferred_type_custom_binary_op: Fail
-inference/inferred_type_custom_binary_op_via_interface: Fail
-inference/inferred_type_custom_index_op: Fail
-inference/inferred_type_custom_index_op_via_interface: Fail
-inference/inferred_type_custom_unary_op: Fail
-inference/inferred_type_custom_unary_op_via_interface: Fail
-inference/inferred_type_extract_method_tear_off: Fail
-inference/inferred_type_extract_method_tear_off_via_interface: Fail
-inference/inferred_type_from_top_level_executable_tear_off: Fail
-inference/inferred_type_invoke_method: Fail
-inference/inferred_type_invoke_method_via_interface: Fail
-inference/inferred_type_is_enum: Fail
-inference/inferred_type_is_enum_values: Fail
-inference/inferred_type_is_typedef: Fail
-inference/inferred_type_is_typedef_parameterized: Fail
-inference/inferred_type_uses_synthetic_function_type: Fail
-inference/inferred_type_uses_synthetic_function_type_function_typed_param: Fail
-inference/inferred_type_uses_synthetic_function_type_named_param: Fail
-inference/inferred_type_uses_synthetic_function_type_positional_param: Fail
-inference/inferred_type_uses_synthetic_function_type_required_param: Fail
-inference/inferred_type_via_closure_multiple_levels_of_nesting: Fail
-inference/inferred_type_via_closure_type_depends_on_args: Fail
-inference/inferred_type_via_closure_type_independent_of_args_field: Fail
-inference/inferred_type_via_closure_type_independent_of_args_top_level: Fail
-inference/instantiate_to_bounds_generic2_has_bound_defined_after: Fail
-inference/instantiate_to_bounds_generic2_has_bound_defined_before: Fail
-inference/instantiate_to_bounds_generic2_no_bound: Fail
-inference/instantiate_to_bounds_generic_has_bound_defined_after: Fail
-inference/instantiate_to_bounds_generic_has_bound_defined_before: Fail
-inference/instantiate_to_bounds_invoke_constructor_no_bound: Fail
-inference/instantiate_to_bounds_invoke_constructor_type_args_exact: Fail
-inference/instantiate_to_bounds_not_generic: Fail
-inference/lambda_does_not_have_propagated_type_hint: Fail
-inference/list_literals: Fail
-inference/list_literals_can_infer_null_bottom: Fail
-inference/list_literals_top_level: Fail
-inference/map_literals: Fail
-inference/map_literals_can_infer_null: Fail
-inference/map_literals_top_level: Fail
-inference/method_call_with_type_arguments_instance_method: Fail
-inference/method_call_with_type_arguments_instance_method_identifier_sequence: Fail
-inference/method_call_with_type_arguments_static_method: Fail
-inference/method_call_with_type_arguments_top_level_function: Fail
-inference/no_error_when_declared_type_is_num_and_assigned_null: Fail
-inference/null_coalescing_operator: Fail
-inference/null_coalescing_operator_2: Fail
-inference/null_literal_should_not_infer_as_bottom: Fail
-inference/propagate_inference_to_field_in_class: Fail
-inference/propagate_inference_to_field_in_class_dynamic_warnings: Fail
-inference/propagate_inference_transitively: Fail
-inference/propagate_inference_transitively2: Fail
-inference/reference_to_typedef: Fail
-inference/refine_binary_expression_type_type_parameter_t_double: Fail
-inference/refine_binary_expression_type_type_parameter_t_int: Fail
-inference/refine_binary_expression_type_type_parameter_t_t: Fail
-inference/static_method_tear_off: Fail
-inference/unsafe_block_closure_inference_closure_call: Fail
-inference/unsafe_block_closure_inference_constructor_call_explicit_dynamic_param: Fail
-inference/unsafe_block_closure_inference_constructor_call_explicit_type_param: Fail
-inference/unsafe_block_closure_inference_constructor_call_implicit_type_param: Fail
-inference/unsafe_block_closure_inference_constructor_call_no_type_param: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr2: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_type_param: Fail
-inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr2: Fail
-inference/unsafe_block_closure_inference_function_call_implicit_type_param: Fail
-inference/unsafe_block_closure_inference_function_call_implicit_type_param_via_expr: Fail
-inference/unsafe_block_closure_inference_function_call_no_type_param: Fail
-inference/unsafe_block_closure_inference_function_call_no_type_param_via_expr: Fail
-inference/unsafe_block_closure_inference_in_list_dynamic: Fail
-inference/unsafe_block_closure_inference_in_list_typed: Fail
-inference/unsafe_block_closure_inference_in_list_untyped: Fail
-inference/unsafe_block_closure_inference_in_map_dynamic: Fail
-inference/unsafe_block_closure_inference_in_map_typed: Fail
-inference/unsafe_block_closure_inference_in_map_untyped: Fail
-inference/unsafe_block_closure_inference_method_call_explicit_dynamic_param: Fail
-inference/unsafe_block_closure_inference_method_call_explicit_type_param: Fail
-inference/unsafe_block_closure_inference_method_call_implicit_type_param: Fail
-inference/unsafe_block_closure_inference_method_call_no_type_param: Fail
-inference/void_return_type_subtypes_dynamic: Fail
+inference/infer_types_on_generic_instantiations_infer: TypeCheckError
+inference/mixin_inference_outwards_3: TypeCheckError
+inference/mixin_inference_outwards_4: TypeCheckError
+inference/mixin_inference_unification_1: TypeCheckError
+inference/mixin_inference_unification_2: TypeCheckError
+inference_new/infer_field_getter_setter_mismatch: TypeCheckError
+inference_new/infer_field_override_accessors: TypeCheckError
+inference_new/infer_field_override_getter_overrides_setter: TypeCheckError
-rasta/issue_000047: Fail
rasta/native_is_illegal: Pass # Issue 29763
-rasta/type_with_parse_error: Fail
-instantiate_to_bound/body_typedef_super_bounded_type: Fail # Issue 33444
-instantiate_to_bound/typedef_super_bounded_type: Fail # Issue 33444
+runtime_checks_new/mixin_forwarding_stub_field: TypeCheckError
+runtime_checks_new/mixin_forwarding_stub_setter: TypeCheckError
diff --git a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.outline.expect b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.outline.expect
index e6caacb..dfa4ba4 100644
--- a/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_constructor_redirection.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Warning: Too many positional arguments: 0 allowed, but 1 found.
+// pkg/front_end/testcases/rasta/bad_constructor_redirection.dart:6:21: Error: Too many positional arguments: 0 allowed, but 1 found.
// Try removing the extra positional arguments.
// const C() : this.x(1);
// ^
diff --git a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.outline.expect b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.outline.expect
index d7e7781..a7b1099 100644
--- a/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Warning: Too few positional arguments: 1 required, 0 given.
+// pkg/front_end/testcases/rasta/bad_explicit_super_constructor.dart:10:20: Error: Too few positional arguments: 1 required, 0 given.
// const B() : super();
// ^
//
diff --git a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
index f3e48bc..256fe64 100644
--- a/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/class_hierarchy.dart.outline.expect
@@ -2,22 +2,6 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:5:17: Warning: Type 'Missing' not found.
-// class A extends Missing {}
-// ^^^^^^^
-//
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:7:20: Warning: Type 'Missing' not found.
-// class B implements Missing {}
-// ^^^^^^^
-//
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:23: Warning: Type 'Missing' not found.
-// class C = Object with Missing;
-// ^^^^^^^
-//
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:7: Error: The type 'Missing' can't be mixed in.
-// class C = Object with Missing;
-// ^
-//
// pkg/front_end/testcases/rasta/class_hierarchy.dart:5:17: Error: Type 'Missing' not found.
// class A extends Missing {}
// ^^^^^^^
@@ -30,11 +14,15 @@
// class C = Object with Missing;
// ^^^^^^^
//
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Warning: Couldn't find constructor 'Missing'.
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:9:7: Error: The type 'Missing' can't be mixed in.
+// class C = Object with Missing;
+// ^
+//
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:17: Error: Couldn't find constructor 'Missing'.
// factory D() = Missing;
// ^
//
-// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:11: Warning: Redirection constructor target not found: 'Missing'
+// pkg/front_end/testcases/rasta/class_hierarchy.dart:12:11: Error: Redirection constructor target not found: 'Missing'
// factory D() = Missing;
// ^
//
diff --git a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.outline.expect b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.outline.expect
index c9b0d8b..2188126 100644
--- a/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/constant_get_and_invoke.dart.outline.expect
@@ -1,6 +1,7 @@
library;
import self as self;
+import "dart:core" as core;
-static const field dynamic c = 1;
+static const field core::int* c = 1;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
index 185910f..3938bc8 100644
--- a/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/generic_factory.dart.outline.expect
@@ -2,14 +2,28 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Warning: Couldn't find constructor 'Missing'.
+// pkg/front_end/testcases/rasta/generic_factory.dart:16:19: Error: Couldn't find constructor 'Missing'.
// factory A.c() = Missing;
// ^
//
-// pkg/front_end/testcases/rasta/generic_factory.dart:16:11: Warning: Redirection constructor target not found: 'Missing'
+// pkg/front_end/testcases/rasta/generic_factory.dart:16:11: Error: Redirection constructor target not found: 'Missing'
// factory A.c() = Missing;
// ^
//
+// pkg/front_end/testcases/rasta/generic_factory.dart:15:19: Error: The constructor function type 'B<C1> Function()' isn't a subtype of 'A<T> Function()'.
+// - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+// - 'C1' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+// - 'A' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+// factory A.b() = B<C1>.a;
+// ^
+//
+// pkg/front_end/testcases/rasta/generic_factory.dart:23:19: Error: The constructor function type 'C<C2> Function()' isn't a subtype of 'B<S> Function()'.
+// - 'C' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+// - 'C2' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+// - 'B' is from 'pkg/front_end/testcases/rasta/generic_factory.dart'.
+// factory B.b() = C<C2>;
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/rasta/issue_000002.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000002.dart.outline.expect
index 1e569d8..742dcd7 100644
--- a/pkg/front_end/testcases/rasta/issue_000002.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000002.dart.outline.expect
@@ -12,6 +12,6 @@
static factory fac(dynamic value) → self::Foo*
;
}
-static field dynamic list;
+static field core::List<core::int*>* list;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/rasta/issue_000006.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000006.dart.outline.expect
index 0ff4007..6de5524 100644
--- a/pkg/front_end/testcases/rasta/issue_000006.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000006.dart.outline.expect
@@ -1,6 +1,7 @@
library;
import self as self;
+import "dart:core" as core;
-static field dynamic list;
+static field core::List<core::int*>* list;
static method main() → dynamic
;
diff --git a/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect
index 147a7db..cdccc71 100644
--- a/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000026.dart.outline.expect
@@ -4,15 +4,15 @@
class C extends core::Object {
field dynamic a;
- field dynamic b;
- field dynamic c;
+ field core::int* b;
+ field core::int* c;
synthetic constructor •() → self::C*
;
}
class D extends core::Object {
field dynamic a;
- field dynamic b;
- field dynamic c;
+ field core::int* b;
+ field core::int* c;
constructor •() → self::D*
;
}
diff --git a/pkg/front_end/testcases/rasta/issue_000033.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000033.dart.outline.expect
index 44fbbbc..feabb09 100644
--- a/pkg/front_end/testcases/rasta/issue_000033.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000033.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Warning: Method not found: 'JS'.
+// pkg/front_end/testcases/rasta/issue_000033.dart:5:2: Error: Method not found: 'JS'.
// @JS()
// ^^
//
diff --git a/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
index 35d0544..cd96d0f 100644
--- a/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000044.dart.outline.expect
@@ -17,11 +17,11 @@
// C notEvenAConstructor(a) = h;
// ^
//
-// pkg/front_end/testcases/rasta/issue_000044.dart:7:1: Warning: Type 'a' not found.
+// pkg/front_end/testcases/rasta/issue_000044.dart:7:1: Error: Type 'a' not found.
// a b(c) = d;
// ^
//
-// pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Warning: Couldn't find constructor 'h'.
+// pkg/front_end/testcases/rasta/issue_000044.dart:21:30: Error: Couldn't find constructor 'h'.
// C notEvenAConstructor(a) = h;
// ^
//
diff --git a/pkg/front_end/testcases/rasta/issue_000047.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000047.dart.outline.expect
index ab80bb0b..de792f5 100644
--- a/pkg/front_end/testcases/rasta/issue_000047.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000047.dart.outline.expect
@@ -1,5 +1,13 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/issue_000047.dart:5:17: Error: Expected ')' before this.
+// typedef void T(C<C>);
+// ^
+//
import self as self;
-static method main() → invalid-type
+typedef T = (dynamic) →* void;
+static method main() → (dynamic) →* void
;
diff --git a/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect b/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
index 45c7070..afa2636 100644
--- a/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/issue_000070.dart.outline.expect
@@ -11,7 +11,7 @@
constructor empty() → self::A<self::A::N*, self::A::S*, self::A::U*>*
;
const constructor c(self::A::U* u, self::A::S* s) → self::A<self::A::N*, self::A::S*, self::A::U*>*
- : self::A::field = const <dynamic>[null], super core::Object::•()
+ : self::A::field = const <core::Null*>[null], super core::Object::•()
;
static factory f<N extends core::Object* = dynamic, S extends core::Object* = dynamic, U extends core::Object* = dynamic>(self::A::f::S* s) → self::A<self::A::f::N*, self::A::f::S*, self::A::f::U*>*
;
diff --git a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect
index a53eb28..186fdea 100644
--- a/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/malformed_const_constructor.dart.outline.expect
@@ -24,7 +24,7 @@
import "dart:core" as core;
class A extends core::Object {
- field dynamic x;
+ field core::String* x;
constructor •() → self::A*
;
}
diff --git a/pkg/front_end/testcases/rasta/static.dart.outline.expect b/pkg/front_end/testcases/rasta/static.dart.outline.expect
index eac130a..c9bb1ac 100644
--- a/pkg/front_end/testcases/rasta/static.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/static.dart.outline.expect
@@ -3,8 +3,8 @@
import "dart:core" as core;
class Foo extends core::Object {
- static const field dynamic staticConstant = 42;
- static field dynamic staticField;
+ static const field core::int* staticConstant = 42;
+ static field core::int* staticField;
synthetic constructor •() → self::Foo*
;
static method staticFunction() → dynamic
diff --git a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.outline.expect b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.outline.expect
index 6b89dbc..36905b0 100644
--- a/pkg/front_end/testcases/rasta/type_with_parse_error.dart.outline.expect
+++ b/pkg/front_end/testcases/rasta/type_with_parse_error.dart.outline.expect
@@ -1,15 +1,23 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/rasta/type_with_parse_error.dart:21:7: Error: Expected ';' after this.
+// int i
+// ^
+//
import self as self;
import "dart:core" as core;
class A extends core::Object {
- constructor •() → void
+ synthetic constructor •() → self::A*
;
method foo() → dynamic
;
}
-class B extends core::Object {
- constructor •() → void
+class B<T extends core::Object* = dynamic> extends core::Object {
+ field core::int* i;
+ synthetic constructor •() → self::B<self::B::T*>*
;
}
static method main() → dynamic
diff --git a/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect b/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
index bdc4a96..254a3b9 100644
--- a/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_29981.dart.outline.expect
@@ -1,9 +1,16 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_29981.dart:6:3: Error: Expected 1 type arguments.
+// C<String, String> field;
+// ^
+//
import self as self;
import "dart:core" as core;
class C<T extends core::Object* = dynamic> extends core::Object {
- field self::C<dynamic>* field;
+ field invalid-type field;
synthetic constructor •() → self::C<self::C::T*>*
;
}
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect
index c60e8a0..a5b32ff 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.outline.expect
@@ -10,7 +10,7 @@
// type T = Map<A, B>
// ^
//
-// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Warning: Type 'type' not found.
+// pkg/front_end/testcases/regress/issue_31188.dart:7:1: Error: Type 'type' not found.
// type T = Map<A, B>
// ^^^^
//
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect b/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
index 7a2a75f..d75581b 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.outline.expect
@@ -2,12 +2,12 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Warning: Can't use type arguments with type variable 'T'.
+// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Can't use type arguments with type variable 'T'.
// Try removing the type arguments.
// T<U> v;
// ^
//
-// pkg/front_end/testcases/regress/issue_31190.dart:6:5: Warning: Type 'U' not found.
+// pkg/front_end/testcases/regress/issue_31190.dart:6:5: Error: Type 'U' not found.
// T<U> v;
// ^
//
diff --git a/pkg/front_end/testcases/regress/issue_32200.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32200.dart.outline.expect
index 496a079..75340ee 100644
--- a/pkg/front_end/testcases/regress/issue_32200.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32200.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/regress/issue_32200.dart:8:3: Warning: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
+// pkg/front_end/testcases/regress/issue_32200.dart:8:3: Error: 'self.Foo' can't be used as a type because 'self' doesn't refer to an import prefix.
// self.Foo self;
// ^^^^^^^^
//
diff --git a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
index 6a0f6b8..e4d2c10 100644
--- a/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_32660.dart.outline.expect
@@ -2,7 +2,7 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Warning: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
+// pkg/front_end/testcases/regress/issue_32660.dart:21:3: Error: The method 'D.foo' has fewer named arguments than those of overridden method 'E.foo'.
// foo(int x) => x;
// ^
// pkg/front_end/testcases/regress/issue_32660.dart:25:3: Context: This is the overridden method ('foo').
@@ -12,7 +12,7 @@
// class E extends D {
// ^
//
-// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Warning: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
+// pkg/front_end/testcases/regress/issue_32660.dart:6:3: Error: The method 'A.foo' has fewer named arguments than those of overridden method 'B.foo'.
// foo(int x) => x;
// ^
// pkg/front_end/testcases/regress/issue_32660.dart:10:3: Context: This is the overridden method ('foo').
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect
index 40c4590..98135e9 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.outline.expect
@@ -1,7 +1,13 @@
library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// lib.A<B> foo() {}
+// ^
+//
import self as self;
import "dart:core" as core;
-import "issue_34291_lib.dart" as iss;
import "org-dartlang-testcase:///issue_34291_lib.dart" as lib;
@@ -9,16 +15,16 @@
synthetic constructor •() → self::B*
;
}
-static method foo() → iss::A*
+static method foo() → invalid-type
;
static method main() → dynamic
;
library;
-import self as iss;
+import self as self2;
import "dart:core" as core;
class A extends core::Object {
- synthetic constructor •() → iss::A*
+ synthetic constructor •() → self2::A*
;
}
diff --git a/pkg/front_end/testcases/regress/issue_34498.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34498.dart.outline.expect
index da300e9..79df073 100644
--- a/pkg/front_end/testcases/regress/issue_34498.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34498.dart.outline.expect
@@ -2,23 +2,23 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/regress/issue_34498.dart:8:3: Warning: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
+// pkg/front_end/testcases/regress/issue_34498.dart:8:3: Error: 'lib.MyClass' can't be used as a type because 'lib' doesn't refer to an import prefix.
// lib.MyClass get lib => null; // (1)
// ^^^^^^^^^^^
//
-// pkg/front_end/testcases/regress/issue_34498.dart:10:3: Warning: 'foo' isn't a type.
+// pkg/front_end/testcases/regress/issue_34498.dart:10:3: Error: 'foo' isn't a type.
// foo foo() {}
// ^^^
// pkg/front_end/testcases/regress/issue_34498.dart:10:7: Context: This isn't a type.
// foo foo() {}
// ^^^
//
-// pkg/front_end/testcases/regress/issue_34498.dart:20:3: Warning: Can't use type arguments with type variable 'T'.
+// pkg/front_end/testcases/regress/issue_34498.dart:20:3: Error: Can't use type arguments with type variable 'T'.
// Try removing the type arguments.
// T<String> foo() {}
// ^
//
-// pkg/front_end/testcases/regress/issue_34498.dart:12:3: Warning: Type 'Missing' not found.
+// pkg/front_end/testcases/regress/issue_34498.dart:12:3: Error: Type 'Missing' not found.
// Missing bar() {}
// ^^^^^^^
//
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.outline.expect b/pkg/front_end/testcases/regress/issue_34850.dart.outline.expect
index 8f7f0f5..71b4abc 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.outline.expect
@@ -27,21 +27,29 @@
// Future<List<>> f3() async {
// ^^
//
-// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Warning: Type 'foo' not found.
+// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Type 'foo' not found.
// <foo<
// ^^^
//
-// pkg/front_end/testcases/regress/issue_34850.dart:11:1: Warning: Type 'foo' not found.
+// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Expected 0 type arguments.
+// <foo<
+// ^
+//
+// pkg/front_end/testcases/regress/issue_34850.dart:11:1: Error: Type 'foo' not found.
// foo
// ^^^
//
-// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Warning: 'Future' isn't a type.
+// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: 'Future' isn't a type.
// Future<List<>> f3() async {
// ^^^^^^
// pkg/front_end/testcases/regress/issue_34850.dart:12:1: Context: This isn't a type.
// Future<List<int>> f2() async => null;
// ^^^^^^
//
+// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: Expected 0 type arguments.
+// Future<List<>> f3() async {
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect b/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect
index 67e0fdb..83a6c1d 100644
--- a/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_35259.dart.outline.expect
@@ -9,19 +9,19 @@
// factory Supertype() = Unresolved;
// ^^^^^^^^^
//
-// pkg/front_end/testcases/regress/issue_35259.dart:6:25: Warning: Couldn't find constructor 'Unresolved'.
+// pkg/front_end/testcases/regress/issue_35259.dart:6:25: Error: Couldn't find constructor 'Unresolved'.
// factory Supertype() = Unresolved;
// ^
//
-// pkg/front_end/testcases/regress/issue_35259.dart:7:25: Warning: Couldn't find constructor 'Unresolved'.
+// pkg/front_end/testcases/regress/issue_35259.dart:7:25: Error: Couldn't find constructor 'Unresolved'.
// factory Supertype() = Unresolved;
// ^
//
-// pkg/front_end/testcases/regress/issue_35259.dart:7:11: Warning: Redirection constructor target not found: 'Unresolved'
+// pkg/front_end/testcases/regress/issue_35259.dart:7:11: Error: Redirection constructor target not found: 'Unresolved'
// factory Supertype() = Unresolved;
// ^
//
-// pkg/front_end/testcases/regress/issue_35259.dart:6:11: Warning: Redirection constructor target not found: 'Unresolved'
+// pkg/front_end/testcases/regress/issue_35259.dart:6:11: Error: Redirection constructor target not found: 'Unresolved'
// factory Supertype() = Unresolved;
// ^
//
diff --git a/pkg/front_end/testcases/regress/issue_36647.dart.outline.expect b/pkg/front_end/testcases/regress/issue_36647.dart.outline.expect
index b7df60a..47f8846 100644
--- a/pkg/front_end/testcases/regress/issue_36647.dart.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_36647.dart.outline.expect
@@ -53,7 +53,7 @@
// class xxx xx XXX extends XXX {
// ^^^
//
-// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:11: Warning: Type 'xx' not found.
+// pkg/front_end/testcases/regress/issue_36647_lib2.dart:5:11: Error: Type 'xx' not found.
// class xxx xx XXX extends XXX {
// ^^
//
diff --git a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect
index ddce3da..e13202c 100644
--- a/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/contravariant_generic_method_type_parameter.dart.outline.expect
@@ -6,7 +6,7 @@
class C<T extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::C<self::C::T*>*
;
- method f<U extends (self::C::T*) →* void = dynamic>(self::C::f::U* x) → void
+ method f<U extends (self::C::T*) →* void = (self::C::T*) →* void>(self::C::f::U* x) → void
;
}
static method g(self::C<core::num*>* c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect
index 717c2fb..463d57a 100644
--- a/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/covariant_generic_method_type_parameter.dart.outline.expect
@@ -5,9 +5,9 @@
class C<T extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::C<self::C::T*>*
;
- method f<generic-covariant-impl U extends self::C::T* = dynamic>(self::C::f::U* x) → void
+ method f<generic-covariant-impl U extends self::C::T* = self::C::T*>(self::C::f::U* x) → void
;
- method g1<generic-covariant-impl U extends self::C::T* = dynamic>() → void
+ method g1<generic-covariant-impl U extends self::C::T* = self::C::T*>() → void
;
}
static method g2(self::C<core::Object*>* c) → void
diff --git a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect
index ebf34c1..a30e2aa 100644
--- a/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks/dynamic_invocation_generic.dart.outline.expect
@@ -5,7 +5,7 @@
class C<T extends core::Object* = dynamic> extends core::Object {
synthetic constructor •() → self::C<self::C::T*>*
;
- method f<generic-covariant-impl U extends self::C::T* = dynamic>(self::C::f::U* x) → void
+ method f<generic-covariant-impl U extends self::C::T* = self::C::T*>(self::C::f::U* x) → void
;
}
static method g1(dynamic d) → void
diff --git a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect
index 2f68f15..3c7dca2 100644
--- a/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/contravariant_combiner.dart.outline.expect
@@ -3,7 +3,7 @@
import "dart:core" as core;
typedef F<T extends core::Object* = dynamic> = (T*) →* void;
-class B<T extends core::Object* = dynamic, U extends (self::B::T*) →* void = dynamic> extends core::Object {
+class B<T extends core::Object* = dynamic, U extends (self::B::T*) →* void = (dynamic) →* void> extends core::Object {
synthetic constructor •() → self::B<self::B::T*, self::B::U*>*
;
operator +(dynamic other) → self::B<self::B::T*, (self::B::T*) →* void>*
diff --git a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect
index 63c538e..9a2b5c5 100644
--- a/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/derived_class_typed.dart.outline.expect
@@ -9,7 +9,7 @@
;
method g({generic-covariant-impl self::B::T* x}) → void
;
- method h<generic-covariant-impl U extends self::B::T* = dynamic>() → void
+ method h<generic-covariant-impl U extends self::B::T* = self::B::T*>() → void
;
}
class C extends self::B<core::int*> {
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
index c22b5fd..4aaa576 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart.outline.expect
@@ -1,4 +1,19 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:48:7: Error: The return type of the method 'M.y' is 'int', which does not match the return type, 'Object', of the overridden method, 'I.y'.
+// - 'Object' is from 'dart:core'.
+// Change to a subtype of 'Object'.
+// int y;
+// ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:43:12: Context: This is the overridden method ('y').
+// void set y(covariant Object value);
+// ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_field.dart:51:7: Context: Override was introduced in the mixin application class 'C'.
+// class C = B with M implements I<int>;
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
index 9b609d2..e7cad7c 100644
--- a/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart.outline.expect
@@ -1,4 +1,19 @@
library test;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:53:18: Error: The parameter 'value' of the method 'M.y' has type 'int', which does not match the corresponding type, 'Object', in the overridden method, 'I.y'.
+// - 'Object' is from 'dart:core'.
+// Change to a supertype of 'Object', or, for a covariant parameter, a subtype.
+// void set y(int value) {
+// ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:43:12: Context: This is the overridden method ('y').
+// void set y(covariant Object value);
+// ^
+// pkg/front_end/testcases/runtime_checks_new/mixin_forwarding_stub_setter.dart:58:7: Context: Override was introduced in the mixin application class 'C'.
+// class C = B with M implements I<int>;
+// ^
+//
import self as self;
import "dart:core" as core;
diff --git a/pkg/front_end/testing.json b/pkg/front_end/testing.json
index 3f10468..9ee45ec 100644
--- a/pkg/front_end/testing.json
+++ b/pkg/front_end/testing.json
@@ -221,6 +221,19 @@
},
{
+ "name": "old_dill_test",
+ "kind": "Chain",
+ "source": "test/old_dill_test.dart",
+ "path": "testcases/old_dills/",
+ "status": "testcases/old_dills/old_dills.status",
+ "pattern": [
+ ".*\\.dill$"
+ ],
+ "exclude": [
+ ]
+ },
+
+ {
"name": "lint_test",
"kind": "Chain",
"source": "test/lint_test.dart",
diff --git a/pkg/kernel/PRESUBMIT.py b/pkg/kernel/PRESUBMIT.py
new file mode 100644
index 0000000..9d898e4
--- /dev/null
+++ b/pkg/kernel/PRESUBMIT.py
@@ -0,0 +1,61 @@
+# Copyright (c) 2019, 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.
+"""Front-end specific presubmit script.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into gcl.
+"""
+
+import imp
+import os.path
+import subprocess
+
+
+def runSmokeTest(input_api, output_api):
+ hasChangedFiles = False
+ for git_file in input_api.AffectedTextFiles():
+ filename = git_file.AbsoluteLocalPath()
+ if filename.endswith(".dart"):
+ hasChangedFiles = True
+ break
+
+ if hasChangedFiles:
+ local_root = input_api.change.RepositoryRoot()
+ utils = imp.load_source('utils',
+ os.path.join(local_root, 'tools', 'utils.py'))
+ dart = os.path.join(utils.CheckedInSdkPath(), 'bin', 'dart')
+ smoke_test = os.path.join(local_root, 'pkg', 'kernel', 'tool',
+ 'smoke_test_quick.dart')
+
+ windows = utils.GuessOS() == 'win32'
+ if windows:
+ dart += '.exe'
+
+ if not os.path.isfile(dart):
+ print('WARNING: dart not found: %s' % dart)
+ return []
+
+ if not os.path.isfile(smoke_test):
+ print('WARNING: kernel smoke test not found: %s' % smoke_test)
+ return []
+
+ args = [dart, smoke_test]
+ process = subprocess.Popen(
+ args, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
+ outs, _ = process.communicate()
+
+ if process.returncode != 0:
+ return [output_api.PresubmitError(
+ 'Kernel smoke test failure(s):',
+ long_text=outs)]
+
+ return []
+
+
+def CheckChangeOnCommit(input_api, output_api):
+ return runSmokeTest(input_api, output_api)
+
+
+def CheckChangeOnUpload(input_api, output_api):
+ return runSmokeTest(input_api, output_api)
diff --git a/pkg/kernel/tool/smoke_test_quick.dart b/pkg/kernel/tool/smoke_test_quick.dart
new file mode 100644
index 0000000..2065aea
--- /dev/null
+++ b/pkg/kernel/tool/smoke_test_quick.dart
@@ -0,0 +1,62 @@
+// Copyright (c) 2019, 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:io';
+
+final String repoDir = _computeRepoDir();
+
+String get dartVm => Platform.executable;
+
+main(List<String> args) async {
+ Stopwatch stopwatch = new Stopwatch()..start();
+ List<Future> futures = new List<Future>();
+ futures.add(run("pkg/front_end/test/old_dill_test.dart", ["--checkDill"]));
+ await Future.wait(futures);
+ print("\n-----------------------\n");
+ print("Done with exitcode $exitCode in ${stopwatch.elapsedMilliseconds} ms");
+}
+
+Future<void> run(String script, List<String> scriptArguments,
+ {bool filter: true}) async {
+ List<String> arguments = [];
+ arguments.add("$script");
+ arguments.addAll(scriptArguments);
+
+ Stopwatch stopwatch = new Stopwatch()..start();
+ ProcessResult result =
+ await Process.run(dartVm, arguments, workingDirectory: repoDir);
+ String runWhat = "${dartVm} ${arguments.join(' ')}";
+ if (result.exitCode != 0) {
+ exitCode = result.exitCode;
+ print("-----");
+ print("Running: $runWhat: "
+ "Failed with exit code ${result.exitCode} "
+ "in ${stopwatch.elapsedMilliseconds} ms.");
+ String stdout = result.stdout.toString();
+ if (filter) {
+ List<String> lines = stdout.split("\n");
+ int lastIgnored = -1;
+ for (int i = 0; i < lines.length; i++) {
+ if (lines[i].startsWith("[ ")) lastIgnored = i;
+ }
+ lines.removeRange(0, lastIgnored + 1);
+ stdout = lines.join("\n");
+ }
+ stdout = stdout.trim();
+ if (stdout.isNotEmpty) {
+ print(stdout);
+ print("-----");
+ }
+ } else {
+ print("Running: $runWhat: Done in ${stopwatch.elapsedMilliseconds} ms.");
+ }
+}
+
+String _computeRepoDir() {
+ ProcessResult result = Process.runSync(
+ 'git', ['rev-parse', '--show-toplevel'],
+ runInShell: true,
+ workingDirectory: new File.fromUri(Platform.script).parent.path);
+ return (result.stdout as String).trim();
+}
diff --git a/pkg/vm_service/example/vm_service_assert.dart b/pkg/vm_service/example/vm_service_assert.dart
index 8010e63..df11b53 100644
--- a/pkg/vm_service/example/vm_service_assert.dart
+++ b/pkg/vm_service/example/vm_service_assert.dart
@@ -28,14 +28,14 @@
return obj;
}
-List<int> assertInts(List<int> list) {
+List<int> assertListOfInt(List<int> list) {
for (int elem in list) {
assertInt(elem);
}
return list;
}
-List<String> assertStrings(List<String> list) {
+List<String> assertListOfString(List<String> list) {
for (String elem in list) {
assertString(elem);
}
@@ -236,7 +236,7 @@
vms.AllocationProfile assertAllocationProfile(vms.AllocationProfile obj) {
assertNotNull(obj);
assertString(obj.type);
- assertClassHeapStatss(obj.members);
+ assertListOfClassHeapStats(obj.members);
assertMemoryUsage(obj.memoryUsage);
return obj;
}
@@ -273,7 +273,8 @@
return obj;
}
-List<vms.BoundVariable> assertBoundVariables(List<vms.BoundVariable> list) {
+List<vms.BoundVariable> assertListOfBoundVariable(
+ List<vms.BoundVariable> list) {
for (vms.BoundVariable elem in list) {
assertBoundVariable(elem);
}
@@ -296,7 +297,7 @@
return obj;
}
-List<vms.Breakpoint> assertBreakpoints(List<vms.Breakpoint> list) {
+List<vms.Breakpoint> assertListOfBreakpoint(List<vms.Breakpoint> list) {
for (vms.Breakpoint elem in list) {
assertBreakpoint(elem);
}
@@ -311,7 +312,7 @@
return obj;
}
-List<vms.ClassRef> assertClassRefs(List<vms.ClassRef> list) {
+List<vms.ClassRef> assertListOfClassRef(List<vms.ClassRef> list) {
for (vms.ClassRef elem in list) {
assertClassRef(elem);
}
@@ -326,10 +327,10 @@
assertBool(obj.isAbstract);
assertBool(obj.isConst);
assertLibraryRef(obj.library);
- assertInstanceRefs(obj.interfaces);
- assertFieldRefs(obj.fields);
- assertFuncRefs(obj.functions);
- assertClassRefs(obj.subclasses);
+ assertListOfInstanceRef(obj.interfaces);
+ assertListOfFieldRef(obj.fields);
+ assertListOfFuncRef(obj.functions);
+ assertListOfClassRef(obj.subclasses);
return obj;
}
@@ -344,7 +345,8 @@
return obj;
}
-List<vms.ClassHeapStats> assertClassHeapStatss(List<vms.ClassHeapStats> list) {
+List<vms.ClassHeapStats> assertListOfClassHeapStats(
+ List<vms.ClassHeapStats> list) {
for (vms.ClassHeapStats elem in list) {
assertClassHeapStats(elem);
}
@@ -354,7 +356,7 @@
vms.ClassList assertClassList(vms.ClassList obj) {
assertNotNull(obj);
assertString(obj.type);
- assertClassRefs(obj.classes);
+ assertListOfClassRef(obj.classes);
return obj;
}
@@ -367,7 +369,7 @@
return obj;
}
-List<vms.CodeRef> assertCodeRefs(List<vms.CodeRef> list) {
+List<vms.CodeRef> assertListOfCodeRef(List<vms.CodeRef> list) {
for (vms.CodeRef elem in list) {
assertCodeRef(elem);
}
@@ -391,7 +393,7 @@
return obj;
}
-List<vms.ContextRef> assertContextRefs(List<vms.ContextRef> list) {
+List<vms.ContextRef> assertListOfContextRef(List<vms.ContextRef> list) {
for (vms.ContextRef elem in list) {
assertContextRef(elem);
}
@@ -403,7 +405,7 @@
assertString(obj.type);
assertString(obj.id);
assertInt(obj.length);
- assertContextElements(obj.variables);
+ assertListOfContextElement(obj.variables);
return obj;
}
@@ -419,7 +421,8 @@
return obj;
}
-List<vms.ContextElement> assertContextElements(List<vms.ContextElement> list) {
+List<vms.ContextElement> assertListOfContextElement(
+ List<vms.ContextElement> list) {
for (vms.ContextElement elem in list) {
assertContextElement(elem);
}
@@ -435,7 +438,7 @@
return obj;
}
-List<vms.ErrorRef> assertErrorRefs(List<vms.ErrorRef> list) {
+List<vms.ErrorRef> assertListOfErrorRef(List<vms.ErrorRef> list) {
for (vms.ErrorRef elem in list) {
assertErrorRef(elem);
}
@@ -477,7 +480,7 @@
return obj;
}
-List<vms.FieldRef> assertFieldRefs(List<vms.FieldRef> list) {
+List<vms.FieldRef> assertListOfFieldRef(List<vms.FieldRef> list) {
for (vms.FieldRef elem in list) {
assertFieldRef(elem);
}
@@ -505,7 +508,7 @@
return obj;
}
-List<vms.Flag> assertFlags(List<vms.Flag> list) {
+List<vms.Flag> assertListOfFlag(List<vms.Flag> list) {
for (vms.Flag elem in list) {
assertFlag(elem);
}
@@ -515,7 +518,7 @@
vms.FlagList assertFlagList(vms.FlagList obj) {
assertNotNull(obj);
assertString(obj.type);
- assertFlags(obj.flags);
+ assertListOfFlag(obj.flags);
return obj;
}
@@ -526,7 +529,7 @@
return obj;
}
-List<vms.Frame> assertFrames(List<vms.Frame> list) {
+List<vms.Frame> assertListOfFrame(List<vms.Frame> list) {
for (vms.Frame elem in list) {
assertFrame(elem);
}
@@ -552,7 +555,7 @@
return obj;
}
-List<vms.FuncRef> assertFuncRefs(List<vms.FuncRef> list) {
+List<vms.FuncRef> assertListOfFuncRef(List<vms.FuncRef> list) {
for (vms.FuncRef elem in list) {
assertFuncRef(elem);
}
@@ -585,7 +588,7 @@
return obj;
}
-List<vms.InstanceRef> assertInstanceRefs(List<vms.InstanceRef> list) {
+List<vms.InstanceRef> assertListOfInstanceRef(List<vms.InstanceRef> list) {
for (vms.InstanceRef elem in list) {
assertInstanceRef(elem);
}
@@ -610,7 +613,7 @@
return obj;
}
-List<vms.IsolateRef> assertIsolateRefs(List<vms.IsolateRef> list) {
+List<vms.IsolateRef> assertListOfIsolateRef(List<vms.IsolateRef> list) {
for (vms.IsolateRef elem in list) {
assertIsolateRef(elem);
}
@@ -628,8 +631,8 @@
assertInt(obj.livePorts);
assertBool(obj.pauseOnExit);
assertEvent(obj.pauseEvent);
- assertLibraryRefs(obj.libraries);
- assertBreakpoints(obj.breakpoints);
+ assertListOfLibraryRef(obj.libraries);
+ assertListOfBreakpoint(obj.breakpoints);
assertExceptionPauseMode(obj.exceptionPauseMode);
return obj;
}
@@ -637,7 +640,7 @@
vms.InboundReferences assertInboundReferences(vms.InboundReferences obj) {
assertNotNull(obj);
assertString(obj.type);
- assertInboundReferences(obj.references);
+ assertListOfInboundReference(obj.references);
return obj;
}
@@ -647,11 +650,19 @@
return obj;
}
+List<vms.InboundReference> assertListOfInboundReference(
+ List<vms.InboundReference> list) {
+ for (vms.InboundReference elem in list) {
+ assertInboundReference(elem);
+ }
+ return list;
+}
+
vms.InstanceSet assertInstanceSet(vms.InstanceSet obj) {
assertNotNull(obj);
assertString(obj.type);
assertInt(obj.totalCount);
- assertObjRefs(obj.instances);
+ assertListOfObjRef(obj.instances);
return obj;
}
@@ -664,7 +675,7 @@
return obj;
}
-List<vms.LibraryRef> assertLibraryRefs(List<vms.LibraryRef> list) {
+List<vms.LibraryRef> assertListOfLibraryRef(List<vms.LibraryRef> list) {
for (vms.LibraryRef elem in list) {
assertLibraryRef(elem);
}
@@ -678,11 +689,11 @@
assertString(obj.name);
assertString(obj.uri);
assertBool(obj.debuggable);
- assertLibraryDependencies(obj.dependencies);
- assertScriptRefs(obj.scripts);
- assertFieldRefs(obj.variables);
- assertFuncRefs(obj.functions);
- assertClassRefs(obj.classes);
+ assertListOfLibraryDependency(obj.dependencies);
+ assertListOfScriptRef(obj.scripts);
+ assertListOfFieldRef(obj.variables);
+ assertListOfFuncRef(obj.functions);
+ assertListOfClassRef(obj.classes);
return obj;
}
@@ -695,7 +706,7 @@
return obj;
}
-List<vms.LibraryDependency> assertLibraryDependencies(
+List<vms.LibraryDependency> assertListOfLibraryDependency(
List<vms.LibraryDependency> list) {
for (vms.LibraryDependency elem in list) {
assertLibraryDependency(elem);
@@ -755,7 +766,7 @@
return obj;
}
-List<vms.Message> assertMessages(List<vms.Message> list) {
+List<vms.Message> assertListOfMessage(List<vms.Message> list) {
for (vms.Message elem in list) {
assertMessage(elem);
}
@@ -772,7 +783,7 @@
return obj;
}
-List<vms.NullValRef> assertNullValRefs(List<vms.NullValRef> list) {
+List<vms.NullValRef> assertListOfNullValRef(List<vms.NullValRef> list) {
for (vms.NullValRef elem in list) {
assertNullValRef(elem);
}
@@ -796,7 +807,7 @@
return obj;
}
-List<vms.ObjRef> assertObjRefs(List<vms.ObjRef> list) {
+List<vms.ObjRef> assertListOfObjRef(List<vms.ObjRef> list) {
for (vms.ObjRef elem in list) {
assertObjRef(elem);
}
@@ -823,12 +834,20 @@
return obj;
}
+List<vms.RetainingObject> assertListOfRetainingObject(
+ List<vms.RetainingObject> list) {
+ for (vms.RetainingObject elem in list) {
+ assertRetainingObject(elem);
+ }
+ return list;
+}
+
vms.RetainingPath assertRetainingPath(vms.RetainingPath obj) {
assertNotNull(obj);
assertString(obj.type);
assertInt(obj.length);
assertString(obj.gcRootType);
- assertRetainingObjects(obj.elements);
+ assertListOfRetainingObject(obj.elements);
return obj;
}
@@ -854,7 +873,7 @@
return obj;
}
-List<vms.ScriptRef> assertScriptRefs(List<vms.ScriptRef> list) {
+List<vms.ScriptRef> assertListOfScriptRef(List<vms.ScriptRef> list) {
for (vms.ScriptRef elem in list) {
assertScriptRef(elem);
}
@@ -873,7 +892,7 @@
vms.ScriptList assertScriptList(vms.ScriptList obj) {
assertNotNull(obj);
assertString(obj.type);
- assertScriptRefs(obj.scripts);
+ assertListOfScriptRef(obj.scripts);
return obj;
}
@@ -888,16 +907,16 @@
vms.SourceReport assertSourceReport(vms.SourceReport obj) {
assertNotNull(obj);
assertString(obj.type);
- assertSourceReportRanges(obj.ranges);
- assertScriptRefs(obj.scripts);
+ assertListOfSourceReportRange(obj.ranges);
+ assertListOfScriptRef(obj.scripts);
return obj;
}
vms.SourceReportCoverage assertSourceReportCoverage(
vms.SourceReportCoverage obj) {
assertNotNull(obj);
- assertInts(obj.hits);
- assertInts(obj.misses);
+ assertListOfInt(obj.hits);
+ assertListOfInt(obj.misses);
return obj;
}
@@ -910,7 +929,7 @@
return obj;
}
-List<vms.SourceReportRange> assertSourceReportRanges(
+List<vms.SourceReportRange> assertListOfSourceReportRange(
List<vms.SourceReportRange> list) {
for (vms.SourceReportRange elem in list) {
assertSourceReportRange(elem);
@@ -921,15 +940,15 @@
vms.Stack assertStack(vms.Stack obj) {
assertNotNull(obj);
assertString(obj.type);
- assertFrames(obj.frames);
- assertMessages(obj.messages);
+ assertListOfFrame(obj.frames);
+ assertListOfMessage(obj.messages);
return obj;
}
vms.Timeline assertTimeline(vms.Timeline obj) {
assertNotNull(obj);
assertString(obj.type);
- assertTimelineEvents(obj.traceEvents);
+ assertListOfTimelineEvent(obj.traceEvents);
assertInt(obj.timeOriginMicros);
assertInt(obj.timeExtentMicros);
return obj;
@@ -940,7 +959,8 @@
return obj;
}
-List<vms.TimelineEvent> assertTimelineEvents(List<vms.TimelineEvent> list) {
+List<vms.TimelineEvent> assertListOfTimelineEvent(
+ List<vms.TimelineEvent> list) {
for (vms.TimelineEvent elem in list) {
assertTimelineEvent(elem);
}
@@ -951,8 +971,8 @@
assertNotNull(obj);
assertString(obj.type);
assertString(obj.recorderName);
- assertStrings(obj.availableStreams);
- assertStrings(obj.recordedStreams);
+ assertListOfString(obj.availableStreams);
+ assertListOfString(obj.recordedStreams);
return obj;
}
@@ -971,7 +991,7 @@
return obj;
}
-List<vms.TypeArgumentsRef> assertTypeArgumentsRefs(
+List<vms.TypeArgumentsRef> assertListOfTypeArgumentsRef(
List<vms.TypeArgumentsRef> list) {
for (vms.TypeArgumentsRef elem in list) {
assertTypeArgumentsRef(elem);
@@ -984,7 +1004,7 @@
assertString(obj.type);
assertString(obj.id);
assertString(obj.name);
- assertInstanceRefs(obj.types);
+ assertListOfInstanceRef(obj.types);
return obj;
}
@@ -1010,7 +1030,7 @@
return obj;
}
-List<vms.VMRef> assertVMRefs(List<vms.VMRef> list) {
+List<vms.VMRef> assertListOfVMRef(List<vms.VMRef> list) {
for (vms.VMRef elem in list) {
assertVMRef(elem);
}
@@ -1028,6 +1048,6 @@
assertString(obj.version);
assertInt(obj.pid);
assertInt(obj.startTime);
- assertIsolateRefs(obj.isolates);
+ assertListOfIsolateRef(obj.isolates);
return obj;
}
diff --git a/pkg/vm_service/java/version.properties b/pkg/vm_service/java/version.properties
index 3360053..55a8c99 100644
--- a/pkg/vm_service/java/version.properties
+++ b/pkg/vm_service/java/version.properties
@@ -1 +1 @@
-version=3.25
+version=3.26
diff --git a/pkg/vm_service/lib/vm_service.dart b/pkg/vm_service/lib/vm_service.dart
index 64dcf89..edaf14b 100644
--- a/pkg/vm_service/lib/vm_service.dart
+++ b/pkg/vm_service/lib/vm_service.dart
@@ -17,7 +17,7 @@
export 'src/service_extension_registry.dart' show ServiceExtensionRegistry;
-const String vmServiceVersion = '3.25.0';
+const String vmServiceVersion = '3.26.0';
/// @optional
const String optional = 'optional';
@@ -186,6 +186,7 @@
'registerService': const ['Success'],
'reloadSources': const ['ReloadReport'],
'removeBreakpoint': const ['Success'],
+ 'requestHeapSnapshot': const ['Success'],
'resume': const ['Success'],
'setExceptionPauseMode': const ['Success'],
'setFlag': const ['Success'],
@@ -692,6 +693,15 @@
/// See [Success].
Future<Success> removeBreakpoint(String isolateId, String breakpointId);
+ /// Requests a dump of the Dart heap of the given isolate.
+ ///
+ /// This method immediately returns success. The VM will then begin delivering
+ /// binary events on the `HeapSnapshot` event stream. The binary data in these
+ /// events, when concatenated together, conforms to the SnapshotGraph type.
+ /// The splitting of the SnapshotGraph into events can happen at any byte
+ /// offset, including the middle of scalar fields.
+ Future<Success> requestHeapSnapshot(String isolateId);
+
/// The `resume` RPC is used to resume execution of a paused isolate.
///
/// If the `step` parameter is not provided, the program will resume regular
@@ -795,6 +805,7 @@
/// Timeline | TimelineEvents
/// Logging | Logging
/// Service | ServiceRegistered, ServiceUnregistered
+ /// HeapSnapshot | HeapSnapshot
///
/// Additionally, some embedders provide the `Stdout` and `Stderr` streams.
/// These streams allow the client to subscribe to writes to stdout and
@@ -1052,6 +1063,11 @@
params['breakpointId'],
);
break;
+ case 'requestHeapSnapshot':
+ response = await _serviceImplementation.requestHeapSnapshot(
+ params['isolateId'],
+ );
+ break;
case 'resume':
response = await _serviceImplementation.resume(
params['isolateId'],
@@ -1233,6 +1249,10 @@
// ServiceRegistered, ServiceUnregistered
Stream<Event> get onServiceEvent => _getEventController('Service').stream;
+ // HeapSnapshot
+ Stream<Event> get onHeapSnapshotEvent =>
+ _getEventController('HeapSnapshot').stream;
+
// WriteEvent
Stream<Event> get onStdoutEvent => _getEventController('Stdout').stream;
@@ -1510,6 +1530,11 @@
}
@override
+ Future<Success> requestHeapSnapshot(String isolateId) {
+ return _call('requestHeapSnapshot', {'isolateId': isolateId});
+ }
+
+ @override
Future<Success> resume(String isolateId,
{/*StepOption*/ String step, int frameIndex}) {
Map m = {'isolateId': isolateId};
@@ -1841,6 +1866,7 @@
static const String kTimeline = 'Timeline';
static const String kLogging = 'Logging';
static const String kService = 'Service';
+ static const String kHeapSnapshot = 'HeapSnapshot';
static const String kStdout = 'Stdout';
static const String kStderr = 'Stderr';
}
diff --git a/pkg/vm_service/tool/dart/generate_dart.dart b/pkg/vm_service/tool/dart/generate_dart.dart
index 04e8b59..244f517 100644
--- a/pkg/vm_service/tool/dart/generate_dart.dart
+++ b/pkg/vm_service/tool/dart/generate_dart.dart
@@ -811,14 +811,14 @@
return obj;
}
-List<int> assertInts(List<int> list) {
+List<int> assertListOfInt(List<int> list) {
for (int elem in list) {
assertInt(elem);
}
return list;
}
-List<String> assertStrings(List<String> list) {
+List<String> assertListOfString(List<String> list) {
for (String elem in list) {
assertString(elem);
}
@@ -902,15 +902,17 @@
[
'BoundVariable',
'Breakpoint',
+ 'ClassHeapStats',
+ 'CodeRegion',
'ContextElement',
'Flag',
'Frame',
+ 'InboundReference',
'LibraryDependency',
'Message',
- 'SourceReportRange',
- 'ClassHeapStats',
- 'CodeRegion',
'ProfileFunction',
+ 'RetainingObject',
+ 'SourceReportRange',
'TimelineEvent',
].contains(type.name)) {
type.generateListAssert(gen);
@@ -1187,10 +1189,6 @@
name == 'bool' ||
name == 'double');
- String get namePlural => name.endsWith('y')
- ? name.substring(0, name.length - 1) + 'ies'
- : name + 's';
-
String toString() => ref;
}
@@ -1207,6 +1205,8 @@
void generate(DartGenerator gen) {
gen.write('${type.ref} ${name}');
}
+
+ String toString() => '$type $name';
}
class Type extends Member {
@@ -1251,10 +1251,6 @@
bool get isRef => name.endsWith('Ref');
- String get namePlural => name.endsWith('y')
- ? name.substring(0, name.length - 1) + 'ies'
- : name + 's';
-
bool get supportsIdentity {
if (fields.any((f) => f.name == 'id')) return true;
return superName == null ? false : getSuper().supportsIdentity;
@@ -1535,9 +1531,9 @@
if (type.isArray) {
TypeRef arrayType = type.types.first;
if (arrayType.arrayDepth == 1) {
- String assertMethodName = 'assert' +
+ String assertMethodName = 'assertListOf' +
arrayType.name.substring(0, 1).toUpperCase() +
- arrayType.namePlural.substring(1);
+ arrayType.name.substring(1);
gen.writeln('$assertMethodName(obj.${field.generatableName});');
} else {
gen.writeln(
@@ -1574,7 +1570,7 @@
void generateListAssert(DartGenerator gen) {
gen.writeln('List<vms.${name}> '
- 'assert${namePlural}(List<vms.${name}> list) {');
+ 'assertListOf${name}(List<vms.${name}> list) {');
gen.writeln('for (vms.${name} elem in list) {');
gen.writeln('assert${name}(elem);');
gen.writeln('}');
diff --git a/pkg/vm_service/tool/generate.dart b/pkg/vm_service/tool/generate.dart
index 151814f..73e8d2e 100644
--- a/pkg/vm_service/tool/generate.dart
+++ b/pkg/vm_service/tool/generate.dart
@@ -46,7 +46,11 @@
dart.api.parse(nodes);
dart.api.generate(generator);
outputFile.writeAsStringSync(generator.toString());
- Process.runSync('dartfmt', ['-w', outDirPath]);
+ ProcessResult result = Process.runSync('dartfmt', ['-w', outDirPath]);
+ if (result.exitCode != 0) {
+ print('dartfmt: ${result.stdout}\n${result.stderr}');
+ throw result.exitCode;
+ }
if (_stampPubspecVersion) {
// Update the pubspec file.
@@ -99,7 +103,11 @@
dart.api.parse(nodes);
dart.api.generateAsserts(generator);
outputFile.writeAsStringSync(generator.toString());
- Process.runSync('dartfmt', ['-w', outDirPath]);
+ ProcessResult result = Process.runSync('dartfmt', ['-w', outDirPath]);
+ if (result.exitCode != 0) {
+ print('dartfmt: ${result.stdout}\n${result.stderr}');
+ throw result.exitCode;
+ }
if (_stampPubspecVersion) {
// Update the pubspec file.
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index a3f6a6e..27cdef7 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -608,7 +608,7 @@
instr->kind(),
Integer::Handle(Z, Integer::Cast(left).BitOp(Token::kBIT_AND,
Integer::Cast(right))),
- Smi::Handle(Z, Smi::New(0)));
+ Object::smi_zero());
SetValue(instr, result ? Bool::True() : Bool::False());
} else {
SetValue(instr, non_constant_);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 2f3c3af..a0db6a8 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -223,9 +223,8 @@
const intptr_t num_counters = flow_graph_.preorder().length();
const Array& edge_counters =
Array::Handle(Array::New(num_counters, Heap::kOld));
- const Smi& zero_smi = Smi::Handle(Smi::New(0));
for (intptr_t i = 0; i < num_counters; ++i) {
- edge_counters.SetAt(i, zero_smi);
+ edge_counters.SetAt(i, Object::smi_zero());
}
edge_counters_array_ = edge_counters.raw();
}
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index e39e0fa..8cbf68a 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -2623,7 +2623,7 @@
new DeoptimizeInstr(ICData::kDeoptBinarySmiOp, GetDeoptId());
flow_graph->InsertBefore(this, deopt, env(), FlowGraph::kEffect);
// Replace with zero since it always throws.
- return CreateConstantResult(flow_graph, Integer::Handle(Smi::New(0)));
+ return CreateConstantResult(flow_graph, Object::smi_zero());
}
break;
@@ -2633,7 +2633,7 @@
return left()->definition();
} else if ((rhs >= kBitsPerInt64) ||
((rhs >= result_bits) && is_truncating())) {
- return CreateConstantResult(flow_graph, Integer::Handle(Smi::New(0)));
+ return CreateConstantResult(flow_graph, Object::smi_zero());
} else if ((rhs < 0) || ((rhs >= result_bits) && !is_truncating())) {
// Instruction will always throw on negative rhs operand or
// deoptimize on large rhs operand.
@@ -2647,7 +2647,7 @@
new DeoptimizeInstr(ICData::kDeoptBinarySmiOp, GetDeoptId());
flow_graph->InsertBefore(this, deopt, env(), FlowGraph::kEffect);
// Replace with zero since it overshifted or always throws.
- return CreateConstantResult(flow_graph, Integer::Handle(Smi::New(0)));
+ return CreateConstantResult(flow_graph, Object::smi_zero());
}
break;
}
@@ -2898,7 +2898,7 @@
MethodRecognizer::kByteDataFactory) {
// A _ByteDataView returned from the ByteData constructor always
// has an offset of 0.
- return flow_graph->GetConstant(Smi::Handle(Smi::New(0)));
+ return flow_graph->GetConstant(Object::smi_zero());
}
}
} else if (slot().IsTypeArguments()) {
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index a71a380..8f5492a 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -2891,7 +2891,7 @@
// Check adjusted_length > 0.
// TODO(ajcbik): this is a synthetic check that cannot
// be directly linked to a use, is that a sign of wrong use?
- ConstantInstr* zero = flow_graph->GetConstant(Smi::Handle(Z, Smi::New(0)));
+ ConstantInstr* zero = flow_graph->GetConstant(Object::smi_zero());
Definition* check =
flow_graph->CreateCheckBound(adjusted_length, zero, call->deopt_id());
*cursor =
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index b350e13..84e1557 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -1137,7 +1137,7 @@
}
if (left == NULL) {
- left = flow_graph_->GetConstant(Smi::Handle(Smi::New(0)));
+ left = flow_graph_->GetConstant(Object::smi_zero());
}
if (right == NULL) {
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 14f3026..5d8dc50 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -17,6 +17,7 @@
#include "vm/flags.h"
#include "vm/globals.h"
#include "vm/interpreter.h"
+#include "vm/isolate_reload.h"
#include "vm/json_stream.h"
#include "vm/kernel.h"
#include "vm/longjump.h"
@@ -2032,6 +2033,7 @@
// TODO(hausner): Could possibly be combined with RemoveOptimizedCode()
const ClassTable& class_table = *isolate_->class_table();
Zone* zone = Thread::Current()->zone();
+ CallSiteResetter resetter(zone);
Class& cls = Class::Handle(zone);
Array& functions = Array::Handle(zone);
GrowableObjectArray& closures = GrowableObjectArray::Handle(zone);
@@ -2060,7 +2062,7 @@
}
code = function.unoptimized_code();
if (!code.IsNull()) {
- code.ResetSwitchableCalls(zone);
+ resetter.ResetSwitchableCalls(code);
}
// Also disable any optimized implicit closure functions.
if (function.HasImplicitClosureFunction()) {
@@ -2070,7 +2072,7 @@
}
code = function.unoptimized_code();
if (!code.IsNull()) {
- code.ResetSwitchableCalls(zone);
+ resetter.ResetSwitchableCalls(code);
}
}
}
@@ -2089,7 +2091,7 @@
}
code = function.unoptimized_code();
if (!code.IsNull()) {
- code.ResetSwitchableCalls(zone);
+ resetter.ResetSwitchableCalls(code);
}
}
#endif // defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 5fe3c39..87cfc24 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -1883,13 +1883,14 @@
Code& code = Code::Handle(zone);
Bytecode& bytecode = Bytecode::Handle(zone);
Function& function = Function::Handle(zone);
+ CallSiteResetter resetter(zone);
DartFrameIterator iterator(thread,
StackFrameIterator::kNoCrossThreadIteration);
StackFrame* frame = iterator.NextFrame();
while (frame != NULL) {
if (frame->is_interpreted()) {
bytecode = frame->LookupDartBytecode();
- bytecode.ResetICDatas(zone);
+ resetter.ResetICDatas(bytecode);
} else {
code = frame->LookupDartCode();
if (code.is_optimized() && !code.is_force_optimized()) {
@@ -1899,11 +1900,11 @@
function = code.function();
code = function.unoptimized_code();
ASSERT(!code.IsNull());
- code.ResetSwitchableCalls(zone);
- code.ResetICDatas(zone);
+ resetter.ResetSwitchableCalls(code);
+ resetter.ResetICDatas(code);
} else {
- code.ResetSwitchableCalls(zone);
- code.ResetICDatas(zone);
+ resetter.ResetSwitchableCalls(code);
+ resetter.ResetICDatas(code);
}
}
frame = iterator.NextFrame();
@@ -1985,6 +1986,8 @@
}
}
+ CallSiteResetter resetter(zone);
+
Class& owning_class = Class::Handle(zone);
Library& owning_lib = Library::Handle(zone);
Code& code = Code::Handle(zone);
@@ -2010,12 +2013,12 @@
// Zero edge counters, before clearing the ICDataArray, since that's where
// they're held.
- func.ZeroEdgeCounters();
+ resetter.ZeroEdgeCounters(func);
if (!bytecode.IsNull()) {
// We are preserving the bytecode, fill all ICData arrays with
// the sentinel values so that we have no stale type feedback.
- bytecode.ResetICDatas(zone);
+ resetter.ResetICDatas(bytecode);
}
if (stub_code) {
@@ -2030,8 +2033,8 @@
} else {
// We are preserving the unoptimized code, fill all ICData arrays with
// the sentinel values so that we have no stale type feedback.
- code.ResetSwitchableCalls(zone);
- code.ResetICDatas(zone);
+ resetter.ResetSwitchableCalls(code);
+ resetter.ResetICDatas(code);
}
// Clear counters.
diff --git a/runtime/vm/isolate_reload.h b/runtime/vm/isolate_reload.h
index f21c539..6937915 100644
--- a/runtime/vm/isolate_reload.h
+++ b/runtime/vm/isolate_reload.h
@@ -372,6 +372,38 @@
static Dart_FileModifiedCallback file_modified_callback_;
};
+class CallSiteResetter : public ValueObject {
+ public:
+ explicit CallSiteResetter(Zone* zone);
+
+ void ZeroEdgeCounters(const Function& function);
+ void ResetICDatas(const Code& code);
+ void ResetICDatas(const Bytecode& code);
+ void ResetICDatas(const ObjectPool& pool);
+ void Reset(const ICData& ic);
+ void ResetSwitchableCalls(const Code& code);
+
+ private:
+ Zone* zone_;
+ Instructions& instrs_;
+ ObjectPool& pool_;
+ Object& object_;
+ String& name_;
+ Class& new_cls_;
+ Library& new_lib_;
+ Function& new_function_;
+ Field& new_field_;
+ Array& entries_;
+ Function& old_target_;
+ Function& new_target_;
+ Function& caller_;
+ Array& args_desc_array_;
+ Array& ic_data_array_;
+ Array& edge_counters_;
+ PcDescriptors& descriptors_;
+ ICData& ic_data_;
+};
+
} // namespace dart
#endif // !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 1a07cc9..b9322cf 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -871,6 +871,7 @@
*bool_false_ = Bool::New(false);
*smi_illegal_cid_ = Smi::New(kIllegalCid);
+ *smi_zero_ = Smi::New(0);
String& error_str = String::Handle();
error_str = String::New("SnapshotWriter Error", Heap::kOld);
@@ -962,6 +963,7 @@
ASSERT(!bool_false_->IsSmi());
ASSERT(bool_false_->IsBool());
ASSERT(smi_illegal_cid_->IsSmi());
+ ASSERT(smi_zero_->IsSmi());
ASSERT(!snapshot_writer_error_->IsSmi());
ASSERT(snapshot_writer_error_->IsLanguageError());
ASSERT(!branch_offset_error_->IsSmi());
@@ -10995,7 +10997,7 @@
static RawArray* NewDictionary(intptr_t initial_size) {
const Array& dict = Array::Handle(Array::New(initial_size + 1, Heap::kOld));
// The last element of the dictionary specifies the number of in use slots.
- dict.SetAt(initial_size, Smi::Handle(Smi::New(0)));
+ dict.SetAt(initial_size, Object::smi_zero());
return dict.raw();
}
@@ -13685,7 +13687,10 @@
const intptr_t len = Length();
ASSERT(index >= 0);
ASSERT(index < len);
- Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
const intptr_t start = index * TestEntryLength();
const intptr_t end = start + TestEntryLength();
for (intptr_t i = start; i < end; i++) {
@@ -13712,7 +13717,10 @@
const intptr_t num_args_tested = NumArgsTested();
if (num_args_tested == 0) {
// No type feedback is being collected.
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
// Static calls with no argument checks hold only one target and the
// sentinel value.
ASSERT(len == 2);
@@ -13722,24 +13730,24 @@
data.SetAt(TargetIndexFor(num_args_tested), func);
// Set count to 0 as this is called during compilation, before the
// call has been executed.
- const Smi& value = Smi::Handle(Smi::New(0));
- data.SetAt(CountIndexFor(num_args_tested), value);
+ data.SetAt(CountIndexFor(num_args_tested), Object::smi_zero());
} else {
// Type feedback on arguments is being collected.
- const Array& data = Array::Handle(entries());
-
// Fill all but the first entry with the sentinel.
for (intptr_t i = len - 1; i > 0; i--) {
WriteSentinelAt(i);
}
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
// Rewrite the dummy entry.
const Smi& object_cid = Smi::Handle(Smi::New(kObjectCid));
for (intptr_t i = 0; i < NumArgsTested(); i++) {
data.SetAt(i, object_cid);
}
data.SetAt(TargetIndexFor(num_args_tested), func);
- const Smi& value = Smi::Handle(Smi::New(0));
- data.SetAt(CountIndexFor(num_args_tested), value);
+ data.SetAt(CountIndexFor(num_args_tested), Object::smi_zero());
}
}
@@ -13803,7 +13811,10 @@
// Can add only once.
const intptr_t old_num = NumberOfChecks();
ASSERT(old_num == 0);
- Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
const intptr_t new_len = data.Length() + TestEntryLength();
data = Array::Grow(data, new_len, Heap::kOld);
WriteSentinel(data, TestEntryLength());
@@ -13812,8 +13823,7 @@
data.SetAt(data_pos + TargetIndexFor(NumArgsTested()), target);
// Set count to 0 as this is called during compilation, before the
// call has been executed.
- const Smi& value = Smi::Handle(Smi::New(0));
- data.SetAt(data_pos + CountIndexFor(NumArgsTested()), value);
+ data.SetAt(data_pos + CountIndexFor(NumArgsTested()), Object::smi_zero());
// Multithreaded access to ICData requires setting of array to be the last
// operation.
set_entries(data);
@@ -13977,7 +13987,10 @@
if (!is_tracking_exactness()) {
return StaticTypeExactnessState::NotTracking();
}
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
intptr_t data_pos =
index * TestEntryLength() + ExactnessIndexFor(NumArgsTested());
return StaticTypeExactnessState::Decode(
@@ -13991,7 +14004,10 @@
ASSERT(class_ids != NULL);
ASSERT(target != NULL);
class_ids->Clear();
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
intptr_t data_pos = index * TestEntryLength();
for (intptr_t i = 0; i < NumArgsTested(); i++) {
class_ids->Add(Smi::Value(Smi::RawCast(data.At(data_pos + i))));
@@ -14001,7 +14017,10 @@
bool ICData::IsSentinelAt(intptr_t index) const {
ASSERT(index < Length());
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
const intptr_t entry_length = TestEntryLength();
intptr_t data_pos = index * TestEntryLength();
for (intptr_t i = 0; i < entry_length; i++) {
@@ -14019,7 +14038,10 @@
ASSERT(class_ids != NULL);
ASSERT(!IsSentinelAt(index));
class_ids->Clear();
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
intptr_t data_pos = index * TestEntryLength();
for (intptr_t i = 0; i < NumArgsTested(); i++) {
class_ids->Add(Smi::Value(Smi::RawCast(data.At(data_pos++))));
@@ -14032,7 +14054,10 @@
ASSERT(class_id != NULL);
ASSERT(target != NULL);
ASSERT(NumArgsTested() == 1);
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
const intptr_t data_pos = index * TestEntryLength();
*class_id = Smi::Value(Smi::RawCast(data.At(data_pos)));
*target ^= data.At(data_pos + TargetIndexFor(NumArgsTested()));
@@ -14040,7 +14065,10 @@
intptr_t ICData::GetCidAt(intptr_t index) const {
ASSERT(NumArgsTested() == 1);
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
const intptr_t data_pos = index * TestEntryLength();
return Smi::Value(Smi::RawCast(data.At(data_pos)));
}
@@ -14090,7 +14118,10 @@
ASSERT(0 <= value);
ASSERT(value <= Smi::kMaxValue);
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
const intptr_t data_pos =
index * TestEntryLength() + CountIndexFor(NumArgsTested());
data.SetAt(data_pos, Smi::Handle(Smi::New(value)));
@@ -14098,7 +14129,10 @@
intptr_t ICData::GetCountAt(intptr_t index) const {
ASSERT(Isolate::Current()->compilation_allowed());
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
const intptr_t data_pos =
index * TestEntryLength() + CountIndexFor(NumArgsTested());
intptr_t value = Smi::Value(Smi::RawCast(data.At(data_pos)));
@@ -14122,7 +14156,10 @@
void ICData::SetCodeAt(intptr_t index, const Code& value) const {
ASSERT(!Isolate::Current()->compilation_allowed());
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
const intptr_t data_pos =
index * TestEntryLength() + CodeIndexFor(NumArgsTested());
data.SetAt(data_pos, value);
@@ -14130,7 +14167,10 @@
void ICData::SetEntryPointAt(intptr_t index, const Smi& value) const {
ASSERT(!Isolate::Current()->compilation_allowed());
- const Array& data = Array::Handle(entries());
+ Thread* thread = Thread::Current();
+ REUSABLE_ARRAY_HANDLESCOPE(thread);
+ Array& data = thread->ArrayHandle();
+ data = entries();
const intptr_t data_pos =
index * TestEntryLength() + EntryPointIndexFor(NumArgsTested());
data.SetAt(data_pos, value);
@@ -14432,8 +14472,7 @@
}
bool ICData::IsImmutable() const {
- const Array& data = Array::Handle(entries());
- return data.IsImmutable();
+ return entries()->IsImmutableArray();
}
RawICData* ICData::New() {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 09a7c02..c5ab60c 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -413,6 +413,7 @@
V(Bool, bool_true) \
V(Bool, bool_false) \
V(Smi, smi_illegal_cid) \
+ V(Smi, smi_zero) \
V(LanguageError, snapshot_writer_error) \
V(LanguageError, branch_offset_error) \
V(LanguageError, speculative_inlining_error) \
@@ -2065,6 +2066,7 @@
friend class SnapshotWriter;
friend class Serializer;
friend class Deserializer;
+ friend class CallSiteResetter;
};
// Often used constants for number of free function type parameters.
@@ -2172,10 +2174,6 @@
intptr_t num_free_fun_type_params = kAllFree,
TrailPtr trail = NULL) const;
- // Reloading support:
- void Reparent(const Class& new_cls) const;
- void ZeroEdgeCounters() const;
-
RawClass* Owner() const;
void set_owner(const Object& value) const;
RawClass* origin() const;
@@ -4567,9 +4565,6 @@
StoreNonPointer(&EntryAddr(index)->raw_value_, raw_value);
}
- // Used during reloading (see object_reload.cc). Calls Reset on all ICDatas.
- void ResetICDatas(Zone* zone) const;
-
static intptr_t InstanceSize() {
ASSERT(sizeof(RawObjectPool) ==
OFFSET_OF_RETURNED_VALUE(RawObjectPool, data));
@@ -5292,11 +5287,6 @@
StorePointer(&raw_ptr()->code_source_map_, code_source_map.raw());
}
- // Used during reloading (see object_reload.cc). Calls Reset on all ICDatas
- // that are embedded inside the Code or ObjecPool objects.
- void ResetICDatas(Zone* zone) const;
- void ResetSwitchableCalls(Zone* zone) const;
-
// Array of DeoptInfo objects.
RawArray* deopt_info_array() const {
#if defined(DART_PRECOMPILED_RUNTIME)
@@ -5691,6 +5681,7 @@
// So that the RawFunction pointer visitor can determine whether code the
// function points to is optimized.
friend class RawFunction;
+ friend class CallSiteResetter;
};
class Bytecode : public Object {
@@ -5731,10 +5722,6 @@
StorePointer(&raw_ptr()->function_, function.raw());
}
- // Used during reloading (see object_reload.cc). Calls Reset on all ICDatas
- // that are embedded inside the Code or ObjecPool objects.
- void ResetICDatas(Zone* zone) const;
-
static intptr_t InstanceSize() {
return RoundedAllocationSize(sizeof(RawBytecode));
}
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index f3faad4..0120e58 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -21,57 +21,55 @@
DECLARE_FLAG(bool, trace_reload_verbose);
DECLARE_FLAG(bool, two_args_smi_icd);
-class ObjectReloadUtils : public AllStatic {
- static void DumpLibraryDictionary(const Library& lib) {
- DictionaryIterator it(lib);
- Object& entry = Object::Handle();
- String& name = String::Handle();
- TIR_Print("Dumping dictionary for %s\n", lib.ToCString());
- while (it.HasNext()) {
- entry = it.GetNext();
- name = entry.DictionaryName();
- TIR_Print("%s -> %s\n", name.ToCString(), entry.ToCString());
- }
- }
-};
-
-void Function::Reparent(const Class& new_cls) const {
- set_owner(new_cls);
-}
-
-void Function::ZeroEdgeCounters() const {
- const Array& saved_ic_data = Array::Handle(ic_data_array());
- if (saved_ic_data.IsNull()) {
+void CallSiteResetter::ZeroEdgeCounters(const Function& function) {
+ ic_data_array_ = function.ic_data_array();
+ if (ic_data_array_.IsNull()) {
return;
}
- const intptr_t saved_ic_datalength = saved_ic_data.Length();
- ASSERT(saved_ic_datalength > 0);
- const Array& edge_counters_array =
- Array::Handle(Array::RawCast(saved_ic_data.At(0)));
- if (edge_counters_array.IsNull()) {
+ ASSERT(ic_data_array_.Length() > 0);
+ edge_counters_ ^= ic_data_array_.At(0);
+ if (edge_counters_.IsNull()) {
return;
}
// Fill edge counters array with zeros.
- const Smi& zero = Smi::Handle(Smi::New(0));
- for (intptr_t i = 0; i < edge_counters_array.Length(); i++) {
- edge_counters_array.SetAt(i, zero);
+ for (intptr_t i = 0; i < edge_counters_.Length(); i++) {
+ edge_counters_.SetAt(i, Object::smi_zero());
}
}
-void Code::ResetICDatas(Zone* zone) const {
-// Iterate over the Code's object pool and reset all ICDatas.
+CallSiteResetter::CallSiteResetter(Zone* zone)
+ : zone_(zone),
+ instrs_(Instructions::Handle(zone)),
+ pool_(ObjectPool::Handle(zone)),
+ object_(Object::Handle(zone)),
+ name_(String::Handle(zone)),
+ new_cls_(Class::Handle(zone)),
+ new_lib_(Library::Handle(zone)),
+ new_function_(Function::Handle(zone)),
+ new_field_(Field::Handle(zone)),
+ entries_(Array::Handle(zone)),
+ old_target_(Function::Handle(zone)),
+ new_target_(Function::Handle(zone)),
+ caller_(Function::Handle(zone)),
+ args_desc_array_(Array::Handle(zone)),
+ ic_data_array_(Array::Handle(zone)),
+ edge_counters_(Array::Handle(zone)),
+ descriptors_(PcDescriptors::Handle(zone)),
+ ic_data_(ICData::Handle(zone)) {}
+
+void CallSiteResetter::ResetICDatas(const Code& code) {
+ // Iterate over the Code's object pool and reset all ICDatas.
#ifdef TARGET_ARCH_IA32
// IA32 does not have an object pool, but, we can iterate over all
// embedded objects by using the variable length data section.
- if (!is_alive()) {
+ if (!code.is_alive()) {
return;
}
- const Instructions& instrs = Instructions::Handle(zone, instructions());
- ASSERT(!instrs.IsNull());
- uword base_address = instrs.PayloadStart();
- Object& object = Object::Handle(zone);
- intptr_t offsets_length = pointer_offsets_length();
- const int32_t* offsets = raw_ptr()->data();
+ instrs_ = code.instructions();
+ ASSERT(!instrs_.IsNull());
+ uword base_address = instrs_.PayloadStart();
+ intptr_t offsets_length = code.pointer_offsets_length();
+ const int32_t* offsets = code.raw_ptr()->data();
for (intptr_t i = 0; i < offsets_length; i++) {
int32_t offset = offsets[i];
RawObject** object_ptr =
@@ -80,15 +78,15 @@
if (!raw_object->IsHeapObject()) {
continue;
}
- object = raw_object;
- if (object.IsICData()) {
- ICData::Cast(object).Reset(zone);
+ object_ = raw_object;
+ if (object_.IsICData()) {
+ Reset(ICData::Cast(object_));
}
}
#else
- const ObjectPool& pool = ObjectPool::Handle(zone, object_pool());
- ASSERT(!pool.IsNull());
- pool.ResetICDatas(zone);
+ pool_ = code.object_pool();
+ ASSERT(!pool_.IsNull());
+ ResetICDatas(pool_);
#endif
}
@@ -117,17 +115,17 @@
}
#endif // !defined(TARGET_ARCH_DBC)
-void Code::ResetSwitchableCalls(Zone* zone) const {
+void CallSiteResetter::ResetSwitchableCalls(const Code& code) {
#if !defined(TARGET_ARCH_DBC)
- if (is_optimized()) {
+ if (code.is_optimized()) {
return; // No switchable calls in optimized code.
}
- const Object& owner = Object::Handle(zone, this->owner());
- if (!owner.IsFunction()) {
+ object_ = code.owner();
+ if (!object_.IsFunction()) {
return; // No switchable calls in stub code.
}
- const Function& function = Function::Cast(owner);
+ const Function& function = Function::Cast(object_);
if (function.kind() == RawFunction::kIrregexpFunction) {
// Regex matchers do not support breakpoints or stepping, and they only call
@@ -138,102 +136,92 @@
return;
}
- const Array& ic_data_array = Array::Handle(zone, function.ic_data_array());
- if (ic_data_array.IsNull()) {
+ ic_data_array_ = function.ic_data_array();
+ if (ic_data_array_.IsNull()) {
// The megamorphic miss stub and some recognized function doesn't populate
// their ic_data_array. Check this only happens for functions without IC
// calls.
#if defined(DEBUG)
- const PcDescriptors& descriptors =
- PcDescriptors::Handle(zone, pc_descriptors());
- PcDescriptors::Iterator iter(descriptors, RawPcDescriptors::kIcCall);
+ descriptors_ = code.pc_descriptors();
+ PcDescriptors::Iterator iter(descriptors_, RawPcDescriptors::kIcCall);
while (iter.MoveNext()) {
- FATAL1("%s has IC calls but no ic_data_array\n", owner.ToCString());
+ FATAL1("%s has IC calls but no ic_data_array\n", object_.ToCString());
}
#endif
return;
}
- ICData& ic_data = ICData::Handle(zone);
- Object& data = Object::Handle(zone);
- const PcDescriptors& descriptors =
- PcDescriptors::Handle(zone, pc_descriptors());
- PcDescriptors::Iterator iter(descriptors, RawPcDescriptors::kIcCall);
+ descriptors_ = code.pc_descriptors();
+ PcDescriptors::Iterator iter(descriptors_, RawPcDescriptors::kIcCall);
while (iter.MoveNext()) {
- uword pc = PayloadStart() + iter.PcOffset();
- CodePatcher::GetInstanceCallAt(pc, *this, &data);
+ uword pc = code.PayloadStart() + iter.PcOffset();
+ CodePatcher::GetInstanceCallAt(pc, code, &object_);
// This check both avoids unnecessary patching to reduce log spam and
// prevents patching over breakpoint stubs.
- if (!data.IsICData()) {
- FindICData(ic_data_array, iter.DeoptId(), &ic_data);
- ASSERT(ic_data.rebind_rule() == ICData::kInstance);
- ASSERT(ic_data.NumArgsTested() == 1);
+ if (!object_.IsICData()) {
+ FindICData(ic_data_array_, iter.DeoptId(), &ic_data_);
+ ASSERT(ic_data_.rebind_rule() == ICData::kInstance);
+ ASSERT(ic_data_.NumArgsTested() == 1);
const Code& stub =
- ic_data.is_tracking_exactness()
+ ic_data_.is_tracking_exactness()
? StubCode::OneArgCheckInlineCacheWithExactnessCheck()
: StubCode::OneArgCheckInlineCache();
- CodePatcher::PatchInstanceCallAt(pc, *this, ic_data, stub);
+ CodePatcher::PatchInstanceCallAt(pc, code, ic_data_, stub);
if (FLAG_trace_ic) {
OS::PrintErr("Instance call at %" Px
" resetting to polymorphic dispatch, %s\n",
- pc, ic_data.ToCString());
+ pc, ic_data_.ToCString());
}
}
}
#endif
}
-void Bytecode::ResetICDatas(Zone* zone) const {
+void CallSiteResetter::ResetICDatas(const Bytecode& bytecode) {
// Iterate over the Bytecode's object pool and reset all ICDatas.
- const ObjectPool& pool = ObjectPool::Handle(zone, object_pool());
- ASSERT(!pool.IsNull());
- pool.ResetICDatas(zone);
+ pool_ = bytecode.object_pool();
+ ASSERT(!pool_.IsNull());
+ ResetICDatas(pool_);
- Object& object = Object::Handle(zone);
- String& name = String::Handle(zone);
- Class& new_cls = Class::Handle(zone);
- Library& new_lib = Library::Handle(zone);
- Function& new_function = Function::Handle(zone);
- Field& new_field = Field::Handle(zone);
- for (intptr_t i = 0; i < pool.Length(); i++) {
- ObjectPool::EntryType entry_type = pool.TypeAt(i);
+ for (intptr_t i = 0; i < pool_.Length(); i++) {
+ ObjectPool::EntryType entry_type = pool_.TypeAt(i);
if (entry_type != ObjectPool::EntryType::kTaggedObject) {
continue;
}
- object = pool.ObjectAt(i);
- if (object.IsFunction()) {
- const Function& old_function = Function::Cast(object);
+ object_ = pool_.ObjectAt(i);
+ if (object_.IsFunction()) {
+ const Function& old_function = Function::Cast(object_);
if (old_function.IsClosureFunction()) {
continue;
}
- name = old_function.name();
- new_cls = old_function.Owner();
- if (new_cls.IsTopLevel()) {
- new_lib = new_cls.library();
- new_function = new_lib.LookupLocalFunction(name);
+ name_ = old_function.name();
+ new_cls_ = old_function.Owner();
+ if (new_cls_.IsTopLevel()) {
+ new_lib_ = new_cls_.library();
+ new_function_ = new_lib_.LookupLocalFunction(name_);
} else {
- new_function = new_cls.LookupFunction(name);
+ new_function_ = new_cls_.LookupFunction(name_);
}
- if (!new_function.IsNull() &&
- (new_function.is_static() == old_function.is_static()) &&
- (new_function.kind() == old_function.kind())) {
- pool.SetObjectAt(i, new_function);
+ if (!new_function_.IsNull() &&
+ (new_function_.is_static() == old_function.is_static()) &&
+ (new_function_.kind() == old_function.kind())) {
+ pool_.SetObjectAt(i, new_function_);
} else {
VTIR_Print("Cannot rebind function %s\n", old_function.ToCString());
}
- } else if (object.IsField()) {
- const Field& old_field = Field::Cast(object);
- name = old_field.name();
- new_cls = old_field.Owner();
- if (new_cls.IsTopLevel()) {
- new_lib = new_cls.library();
- new_field = new_lib.LookupLocalField(name);
+ } else if (object_.IsField()) {
+ const Field& old_field = Field::Cast(object_);
+ name_ = old_field.name();
+ new_cls_ = old_field.Owner();
+ if (new_cls_.IsTopLevel()) {
+ new_lib_ = new_cls_.library();
+ new_field_ = new_lib_.LookupLocalField(name_);
} else {
- new_field = new_cls.LookupField(name);
+ new_field_ = new_cls_.LookupField(name_);
}
- if (!new_field.IsNull() &&
- (new_field.is_static() == old_field.is_static())) {
- pool.SetObjectAt(i, new_field);
+ if (!new_field_.IsNull() &&
+ (new_field_.is_static() == old_field.is_static())) {
+ pool_.SetObjectAt(i, new_field_);
} else {
VTIR_Print("Cannot rebind field %s\n", old_field.ToCString());
}
@@ -241,16 +229,15 @@
}
}
-void ObjectPool::ResetICDatas(Zone* zone) const {
- Object& object = Object::Handle(zone);
- for (intptr_t i = 0; i < Length(); i++) {
- ObjectPool::EntryType entry_type = TypeAt(i);
+void CallSiteResetter::ResetICDatas(const ObjectPool& pool) {
+ for (intptr_t i = 0; i < pool.Length(); i++) {
+ ObjectPool::EntryType entry_type = pool.TypeAt(i);
if (entry_type != ObjectPool::EntryType::kTaggedObject) {
continue;
}
- object = ObjectAt(i);
- if (object.IsICData()) {
- ICData::Cast(object).Reset(zone);
+ object_ = pool.ObjectAt(i);
+ if (object_.IsICData()) {
+ Reset(ICData::Cast(object_));
}
}
}
@@ -702,6 +689,9 @@
IsolateReloadContext* context) const {
ASSERT(IsolateReloadContext::IsSameClass(*this, replacement));
+ // Ensure is_enum_class etc have been set.
+ replacement.EnsureDeclarationLoaded();
+
// Class cannot change enum property.
if (is_enum_class() != replacement.is_enum_class()) {
context->AddReasonForCancelling(new (context->zone()) EnumClassConflict(
@@ -838,96 +828,90 @@
}
}
-static const Function* static_call_target = NULL;
-
-void ICData::Reset(Zone* zone) const {
- RebindRule rule = rebind_rule();
- if (rule == kInstance) {
- const intptr_t num_args = NumArgsTested();
- const bool tracking_exactness = is_tracking_exactness();
- const intptr_t len = Length();
+void CallSiteResetter::Reset(const ICData& ic) {
+ ICData::RebindRule rule = ic.rebind_rule();
+ if (rule == ICData::kInstance) {
+ const intptr_t num_args = ic.NumArgsTested();
+ const bool tracking_exactness = ic.is_tracking_exactness();
+ const intptr_t len = ic.Length();
// We need at least one non-sentinel entry to require a check
// for the smi fast path case.
if (num_args == 2 && len >= 2) {
- if (IsImmutable()) {
+ if (ic.IsImmutable()) {
return;
}
- Zone* zone = Thread::Current()->zone();
- const String& name = String::Handle(target_name());
- const Class& smi_class = Class::Handle(Smi::Class());
+ name_ = ic.target_name();
+ const Class& smi_class = Class::Handle(zone_, Smi::Class());
const Function& smi_op_target = Function::Handle(
- Resolver::ResolveDynamicAnyArgs(zone, smi_class, name));
+ zone_, Resolver::ResolveDynamicAnyArgs(zone_, smi_class, name_));
GrowableArray<intptr_t> class_ids(2);
- Function& target = Function::Handle();
- GetCheckAt(0, &class_ids, &target);
+ Function& target = Function::Handle(zone_);
+ ic.GetCheckAt(0, &class_ids, &target);
if ((target.raw() == smi_op_target.raw()) && (class_ids[0] == kSmiCid) &&
(class_ids[1] == kSmiCid)) {
// The smi fast path case, preserve the initial entry but reset the
// count.
- ClearCountAt(0);
- WriteSentinelAt(1);
- const Array& array = Array::Handle(entries());
- array.Truncate(2 * TestEntryLength());
+ ic.ClearCountAt(0);
+ ic.WriteSentinelAt(1);
+ entries_ = ic.entries();
+ entries_.Truncate(2 * ic.TestEntryLength());
return;
}
// Fall back to the normal behavior with cached empty ICData arrays.
}
- const Array& data_array = Array::Handle(
- zone, CachedEmptyICDataArray(num_args, tracking_exactness));
- set_entries(data_array);
- set_is_megamorphic(false);
+ entries_ = ICData::CachedEmptyICDataArray(num_args, tracking_exactness);
+ ic.set_entries(entries_);
+ ic.set_is_megamorphic(false);
return;
- } else if (rule == kNoRebind || rule == kNSMDispatch) {
+ } else if (rule == ICData::kNoRebind || rule == ICData::kNSMDispatch) {
// TODO(30877) we should account for addition/removal of NSM.
// Don't rebind dispatchers.
return;
- } else if (rule == kStatic || rule == kSuper) {
- const Function& old_target = Function::Handle(zone, GetTargetAt(0));
- if (old_target.IsNull()) {
+ } else if (rule == ICData::kStatic || rule == ICData::kSuper) {
+ old_target_ = ic.GetTargetAt(0);
+ if (old_target_.IsNull()) {
FATAL("old_target is NULL.\n");
}
- static_call_target = &old_target;
+ name_ = old_target_.name();
- const String& selector = String::Handle(zone, old_target.name());
- Function& new_target = Function::Handle(zone);
-
- if (rule == kStatic) {
- ASSERT(old_target.is_static() ||
- old_target.kind() == RawFunction::kConstructor);
+ if (rule == ICData::kStatic) {
+ ASSERT(old_target_.is_static() ||
+ old_target_.kind() == RawFunction::kConstructor);
// This can be incorrect if the call site was an unqualified invocation.
- const Class& cls = Class::Handle(zone, old_target.Owner());
- new_target = cls.LookupFunction(selector);
- if (new_target.kind() != old_target.kind()) {
- new_target = Function::null();
+ new_cls_ = old_target_.Owner();
+ new_target_ = new_cls_.LookupFunction(name_);
+ if (new_target_.kind() != old_target_.kind()) {
+ new_target_ = Function::null();
}
} else {
// Super call.
- Function& caller = Function::Handle(zone);
- caller = Owner();
- ASSERT(!caller.is_static());
- Class& cls = Class::Handle(zone, caller.Owner());
- cls = cls.SuperClass();
- while (!cls.IsNull()) {
+ caller_ = ic.Owner();
+ ASSERT(!caller_.is_static());
+ new_cls_ = caller_.Owner();
+ new_cls_ = new_cls_.SuperClass();
+ new_target_ = Function::null();
+ while (!new_cls_.IsNull()) {
// TODO(rmacnak): Should use Resolver::ResolveDynamicAnyArgs to handle
// method-extractors and call-through-getters, but we're in a no
// safepoint scope here.
- new_target = cls.LookupDynamicFunction(selector);
- if (!new_target.IsNull()) {
+ new_target_ = new_cls_.LookupDynamicFunction(name_);
+ if (!new_target_.IsNull()) {
break;
}
- cls = cls.SuperClass();
+ new_cls_ = new_cls_.SuperClass();
}
}
- const Array& args_desc_array = Array::Handle(zone, arguments_descriptor());
- ArgumentsDescriptor args_desc(args_desc_array);
- if (new_target.IsNull() || !new_target.AreValidArguments(args_desc, NULL)) {
+ args_desc_array_ = ic.arguments_descriptor();
+ ArgumentsDescriptor args_desc(args_desc_array_);
+ if (new_target_.IsNull() ||
+ !new_target_.AreValidArguments(args_desc, NULL)) {
// TODO(rmacnak): Patch to a NSME stub.
VTIR_Print("Cannot rebind static call to %s from %s\n",
- old_target.ToCString(),
- Object::Handle(zone, Owner()).ToCString());
+ old_target_.ToCString(),
+ Object::Handle(zone_, ic.Owner()).ToCString());
return;
}
- ClearAndSetStaticTarget(new_target);
+ ic.ClearAndSetStaticTarget(new_target_);
} else {
FATAL("Unexpected rebind rule.");
}
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 50a922e..7d9126c 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -1352,6 +1352,7 @@
friend class StackFrame;
friend class Profiler;
friend class FunctionDeserializationCluster;
+ friend class CallSiteResetter;
};
class RawBytecode : public RawObject {
diff --git a/runtime/vm/regexp_test.cc b/runtime/vm/regexp_test.cc
index f800931..5ba4056 100644
--- a/runtime/vm/regexp_test.cc
+++ b/runtime/vm/regexp_test.cc
@@ -17,7 +17,7 @@
Zone* zone = thread->zone();
const RegExp& regexp =
RegExp::Handle(RegExpEngine::CreateRegExp(thread, pat, RegExpFlags()));
- const Smi& idx = Smi::Handle(Smi::New(0));
+ const Smi& idx = Object::smi_zero();
return IRRegExpMacroAssembler::Execute(regexp, str, idx, /*sticky=*/false,
zone);
}
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 032bfd1..4a01769 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -894,8 +894,8 @@
// No source code for this assertion, set url to null.
args.SetAt(1, String::Handle(zone, String::null()));
- args.SetAt(2, Smi::Handle(zone, Smi::New(0)));
- args.SetAt(3, Smi::Handle(zone, Smi::New(0)));
+ args.SetAt(2, Object::smi_zero());
+ args.SetAt(3, Object::smi_zero());
args.SetAt(4, String::Handle(zone, String::null()));
Exceptions::ThrowByType(Exceptions::kAssertion, args);
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 7981794..d212875 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -4064,6 +4064,7 @@
static const MethodParameter* request_heap_snapshot_params[] = {
RUNNABLE_ISOLATE_PARAMETER,
+ NULL,
};
static bool RequestHeapSnapshot(Thread* thread, JSONStream* js) {
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index 6d65362..b0ae846 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -261,7 +261,7 @@
It is considered a _backwards compatible_ change to add a new type of event to an existing stream.
Clients should be written to handle this gracefully.
-### Binary Events
+## Binary Events
Some events are associated with bulk binary data. These events are delivered as
WebSocket binary frames instead of text frames. A binary event's metadata
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
index d3ff62f..e388cd6 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
@@ -372,13 +372,6 @@
return rawField;
})()''');
-// TODO(jmesserly): the debugger extension hardcodes a call to this private
-// function. Fix that.
-@Deprecated('use replNameLookup')
-_dhelperRepl(obj, field, Function(Object) callback) {
- return callback(replNameLookup(obj, field));
-}
-
/// Shared code for dsend, dindex, and dsetindex.
callMethod(obj, name, typeArgs, args, named, displayName) {
if (JS('!', 'typeof # == "function" && # == "call"', obj, name)) {
diff --git a/tests/lib_2/isolate/spawn_function_custom_class_test.dart b/tests/lib_2/isolate/spawn_function_custom_class_test.dart
index 515c973..d3ccfc1 100644
--- a/tests/lib_2/isolate/spawn_function_custom_class_test.dart
+++ b/tests/lib_2/isolate/spawn_function_custom_class_test.dart
@@ -14,26 +14,38 @@
import "remote_unittest_helper.dart";
class MyClass {
- var myVar = 'there';
+ final myVar = 'there';
myFunc(msg) {
return '$msg $myVar';
}
}
-child(args) {
- var reply = args[1];
- var msg = args[0];
+isolateEntryPoint(args) {
+ final reply = args[1];
+ final msg = args[0];
reply.send('re: ${new MyClass().myFunc(msg)}');
}
void main([args, port]) {
- if (testRemote(main, port)) return;
- test('message - reply chain', () {
- ReceivePort port = new ReceivePort();
- Isolate.spawn(child, ['hi', port.sendPort]);
- port.listen((msg) {
- port.close();
+ if (testRemote(main, port)) {
+ return;
+ }
+
+ test('message - reply chain', () async {
+ final exitPort = ReceivePort();
+ final replyPort = ReceivePort();
+
+ final isolate = Isolate.spawn(isolateEntryPoint, ['hi', replyPort.sendPort],
+ onExit: exitPort.sendPort);
+
+ replyPort.listen((msg) {
+ replyPort.close();
expect(msg, equals('re: hi there'));
});
+
+ // Explicitly await spawned isolate exit to enforce main isolate not
+ // completing (and the stand-alone runtime exiting) before the spawned
+ // isolate is done.
+ await exitPort.first;
});
}
diff --git a/tools/VERSION b/tools/VERSION
index 69ff003..45046d5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -33,7 +33,7 @@
MAJOR 2
MINOR 5
PATCH 0
-PRERELEASE 3
+PRERELEASE 4
PRERELEASE_PATCH 0
ABI_VERSION 11
OLDEST_SUPPORTED_ABI_VERSION 11
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index ca38187..e3c30d5 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -208,17 +208,16 @@
out/ReleaseIA32/dart --profile-period=10000 --packages=.packages hello.dart
out/ReleaseIA32/dart-sdk/bin/dart2js --packages=.packages --out=out.js -m hello.dart
third_party/d8/linux/ia32/d8 --stack_size=1024 sdk/lib/_internal/js_runtime/lib/preambles/d8.js out.js
- out/ReleaseIA32/dart-sdk/bin/dart2js --checked --packages=.packages --out=out.js -m hello.dart
- third_party/d8/linux/ia32/d8 --stack_size=1024 sdk/lib/_internal/js_runtime/lib/preambles/d8.js out.js
out/ReleaseIA32/dart-sdk/bin/dart2js --packages=.packages --out=out.js -m hello.dart
LD_LIBRARY_PATH=third_party/firefox_jsshell/linux/jsshell/ third_party/firefox_jsshell/linux/jsshell/js -f sdk/lib/_internal/js_runtime/lib/preambles/jsshell.js -f out.js
out/ReleaseIA32/dart-sdk/bin/dart2js --benchmarking-production --packages=.packages --out=out.js -m hello.dart
third_party/d8/linux/ia32/d8 --stack_size=1024 sdk/lib/_internal/js_runtime/lib/preambles/d8.js out.js
+ out/ReleaseIA32/dart-sdk/bin/dart2js --benchmarking-x --packages=.packages --out=out.js -m hello.dart
+ third_party/d8/linux/ia32/d8 --stack_size=1024 sdk/lib/_internal/js_runtime/lib/preambles/d8.js out.js
out/ReleaseIA32/dart-sdk/bin/dart2js --use-kernel --packages=.packages --out=out.js -m hello.dart
third_party/d8/linux/ia32/d8 --stack_size=1024 sdk/lib/_internal/js_runtime/lib/preambles/d8.js out.js
out/ReleaseIA32/dart pkg/front_end/tool/perf.dart parse hello.dart
out/ReleaseIA32/dart pkg/front_end/tool/perf.dart scan hello.dart
- out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart --legacy kernel_gen_e2e hello.dart
out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart kernel_gen_e2e hello.dart
out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart scan hello.dart
out/ReleaseIA32/dart --print_metrics pkg/analyzer_cli/bin/analyzer.dart --dart-sdk=sdk hello.dart
@@ -398,7 +397,6 @@
out/ReleaseX64/dart --profile-period=10000 --packages=.packages --use-bytecode-compiler --optimization-counter-threshold=-1 hello.dart
out/ReleaseX64/dart pkg/front_end/tool/perf.dart parse hello.dart
out/ReleaseX64/dart pkg/front_end/tool/perf.dart scan hello.dart
- out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart --legacy kernel_gen_e2e hello.dart
out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart kernel_gen_e2e hello.dart
out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart scan hello.dart
out/ReleaseX64/dart pkg/analysis_server/benchmark/benchmarks.dart run --quick --repeat 1 analysis-server-cold