From feefcf0c9431b9cb0c8a2eddb6ae669d04ded9ce Mon Sep 17 00:00:00 2001 From: Jens Johansen Date: Mon, 23 Mar 2020 10:25:23 +0000 Subject: [PATCH] [kernel/CFE] Simplified toString on (ast) nodes This is a bare-bones implementation (and test) for having an explicit toString on all `Node`s. This can then be extended as-needed to better suit our debugging purposes. It's not allowed to leak, though. Change-Id: I8d3f5a9cd13b292ed7a6bf33762e507286f3fa7d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139805 Commit-Queue: Jens Johansen Reviewed-by: Johnni Winther --- .../test/nullable_inference_test.dart | 2 +- .../lib/src/base/instrumentation.dart | 3 +- .../lib/src/fasta/kernel/collections.dart | 40 ++ .../lib/src/fasta/kernel/forest.dart | 5 + .../fasta/kernel/implicit_type_argument.dart | 5 + .../lib/src/fasta/kernel/internal_ast.dart | 262 +++++++- .../kernel/redirecting_factory_body.dart | 5 + .../src/fasta/type_inference/type_schema.dart | 5 + .../type_schema_elimination_test.dart | 33 +- .../test/spell_checking_list_code.txt | 1 + ...ors_with_default_values.dart.strong.expect | 4 +- ...ault_values.dart.strong.transformed.expect | 4 +- ...ors_with_default_values.dart.strong.expect | 4 +- ...ault_values.dart.strong.transformed.expect | 4 +- ...ctors_with_default_values.dart.weak.expect | 4 +- ...efault_values.dart.weak.transformed.expect | 4 +- .../nnbd/constants.dart.strong.expect | 8 +- .../constants.dart.strong.transformed.expect | 8 +- .../testcases/nnbd/constants.dart.weak.expect | 4 +- .../constants.dart.weak.transformed.expect | 4 +- pkg/kernel/lib/ast.dart | 596 +++++++++++++++++- pkg/kernel/lib/text/ast_to_text.dart | 10 + pkg/kernel/test/metadata_test.dart | 4 +- pkg/vm/testcases/bytecode/asserts.dart.expect | 2 +- .../testcases/bytecode/closures.dart.expect | 34 +- .../testcases/bytecode/try_blocks.dart.expect | 4 +- .../testcases/bytecode/type_ops.dart.expect | 2 +- .../bool_expressions.dart.expect | 12 +- .../summary_collector/calls.dart.expect | 2 +- .../summary_collector/constants.dart.expect | 8 +- .../control_flow.dart.expect | 36 +- .../summary_collector/vars.dart.expect | 10 +- .../class_generics_basic.dart.expect | 20 +- .../class_generics_case1.dart.expect | 4 +- .../transformer/const_prop.dart.expect | 4 +- .../dynamic_list_access.dart.expect | 2 +- .../type_flow/transformer/future.dart.expect | 22 +- .../transformer/future_or.dart.expect | 10 +- ...invalidation_field_initializer.dart.expect | 2 +- .../invalidation_new_class1.dart.expect | 2 +- .../invalidation_new_class2.dart.expect | 2 +- ...nvalidation_new_dynamic_target.dart.expect | 2 +- .../invalidation_set_field.dart.expect | 2 +- .../invalidation_set_field2.dart.expect | 4 +- .../transformer/no_such_method.dart.expect | 16 +- ...ypes_before_strong_mode_checks.dart.expect | 4 +- .../transformer/regress_37455.dart.expect | 6 +- .../transformer/regress_37719.dart.expect | 2 +- .../regress_flutter16182.dart.expect | 6 +- .../tear_off_dynamic_method.dart.expect | 2 +- 50 files changed, 1069 insertions(+), 172 deletions(-) diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart index 683a87260fb..67f259f993a 100644 --- a/pkg/dev_compiler/test/nullable_inference_test.dart +++ b/pkg/dev_compiler/test/nullable_inference_test.dart @@ -507,7 +507,7 @@ Future expectNotNull(String code, String expectedNotNull) async { } return c.toString(); } - return e.toString(); + return e.leakingDebugToString(); }) // Filter out our own NotNull annotations. The library prefix changes // per test, so just filter on the suffix. diff --git a/pkg/front_end/lib/src/base/instrumentation.dart b/pkg/front_end/lib/src/base/instrumentation.dart index 7846749e4c6..a1e24433bf0 100644 --- a/pkg/front_end/lib/src/base/instrumentation.dart +++ b/pkg/front_end/lib/src/base/instrumentation.dart @@ -52,7 +52,8 @@ class InstrumentationValueForType extends InstrumentationValue { InstrumentationValueForType(this.type); @override - String toString() => _shortenInstrumentationString(type.toString()); + String toString() => + _shortenInstrumentationString(type.leakingDebugToString()); } /// Instance of [InstrumentationValue] describing a list of [DartType]s. diff --git a/pkg/front_end/lib/src/fasta/kernel/collections.dart b/pkg/front_end/lib/src/fasta/kernel/collections.dart index 6c4f9ca9fd4..5f142ad16c7 100644 --- a/pkg/front_end/lib/src/fasta/kernel/collections.dart +++ b/pkg/front_end/lib/src/fasta/kernel/collections.dart @@ -99,6 +99,11 @@ class SpreadElement extends Expression with ControlFlowElement { void onConvertForElement(TreeNode from, TreeNode to)) { return new SpreadMapEntry(expression, isNullAware)..fileOffset = fileOffset; } + + @override + String toString() { + return "SpreadElement()"; + } } /// An 'if' element in a list or set literal. @@ -155,6 +160,11 @@ class IfElement extends Expression with ControlFlowElement { return new IfMapEntry(condition, thenEntry, otherwiseEntry) ..fileOffset = fileOffset; } + + @override + String toString() { + return "IfElement()"; + } } /// A 'for' element in a list or set literal. @@ -207,6 +217,11 @@ class ForElement extends Expression with ControlFlowElement { onConvertForElement(this, result); return result; } + + @override + String toString() { + return "ForElement()"; + } } /// A 'for-in' element in a list or set literal. @@ -286,6 +301,11 @@ class ForInElement extends Expression with ControlFlowElement { onConvertForElement(this, result); return result; } + + @override + String toString() { + return "ForInElement()"; + } } mixin ControlFlowMapEntry implements MapEntry { @@ -340,6 +360,11 @@ class SpreadMapEntry extends TreeNode with ControlFlowMapEntry { expression?.parent = this; } } + + @override + String toString() { + return "SpreadMapEntry()"; + } } /// An 'if' element in a map literal. @@ -376,6 +401,11 @@ class IfMapEntry extends TreeNode with ControlFlowMapEntry { otherwise?.parent = this; } } + + @override + String toString() { + return "IfMapEntry()"; + } } /// A 'for' element in a map literal. @@ -413,6 +443,11 @@ class ForMapEntry extends TreeNode with ControlFlowMapEntry { body?.parent = this; } } + + @override + String toString() { + return "ForMapEntry()"; + } } /// A 'for-in' element in a map literal. @@ -477,6 +512,11 @@ class ForInMapEntry extends TreeNode with ControlFlowMapEntry { problem?.parent = this; } } + + @override + String toString() { + return "ForInMapEntry()"; + } } /// Convert [entry] to an [Expression], if possible. If [entry] cannot be diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart index c1104f7d656..51a5f213680 100644 --- a/pkg/front_end/lib/src/fasta/kernel/forest.dart +++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart @@ -754,4 +754,9 @@ class _VariablesDeclaration extends Statement { transformChildren(v) { throw unsupported("transformChildren", fileOffset, uri); } + + @override + String toString() { + return "_VariablesDeclaration()"; + } } diff --git a/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart b/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart index 36edb1b9899..1f0d6cc7a5d 100644 --- a/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart +++ b/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart @@ -43,4 +43,9 @@ class ImplicitTypeArgument extends DartType { @override bool equals(Object other, Assumptions assumptions) => this == other; + + @override + String toString() { + return "ImplicitTypeArgument()"; + } } diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart index 227237773bb..6f031d91d4c 100644 --- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart +++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart @@ -21,7 +21,7 @@ import 'dart:core' hide MapEntry; import 'package:kernel/ast.dart'; -import 'package:kernel/text/ast_to_text.dart'; +import 'package:kernel/text/ast_to_text.dart' show Precedence, Printer; import 'package:kernel/core_types.dart'; import '../fasta_codes.dart' @@ -272,6 +272,11 @@ class ForInStatementWithSynthesizedVariable extends InternalStatement { body?.parent = this; } } + + @override + String toString() { + return "ForInStatementWithSynthesizedVariable()"; + } } class TryStatement extends InternalStatement { @@ -309,6 +314,11 @@ class TryStatement extends InternalStatement { finallyBlock?.parent = this; } } + + @override + String toString() { + return "TryStatement()"; + } } class SwitchCaseImpl extends SwitchCase { @@ -319,6 +329,11 @@ class SwitchCaseImpl extends SwitchCase { {bool isDefault: false, this.hasLabel}) : assert(hasLabel != null), super(expressions, expressionOffsets, body, isDefault: isDefault); + + @override + String toString() { + return "SwitchCaseImpl()"; + } } class BreakStatementImpl extends BreakStatement { @@ -328,6 +343,11 @@ class BreakStatementImpl extends BreakStatement { BreakStatementImpl({this.isContinue}) : assert(isContinue != null), super(null); + + @override + String toString() { + return "BreakStatementImpl()"; + } } enum InternalExpressionKind { @@ -455,6 +475,11 @@ class ArgumentsImpl extends Arguments { arguments.types.clear(); arguments._explicitTypeArgumentCount = 0; } + + @override + String toString() { + return "ArgumentsImpl()"; + } } /// Internal expression representing a cascade expression. @@ -517,6 +542,11 @@ class Cascade extends InternalExpression { } transformList(expressions, v, this); } + + @override + String toString() { + return "Cascade()"; + } } /// Internal expression representing a deferred check. @@ -556,6 +586,11 @@ class DeferredCheck extends InternalExpression { expression?.parent = this; } } + + @override + String toString() { + return "DeferredCheck()"; + } } /// Common base class for shadow objects representing expressions in kernel @@ -583,6 +618,11 @@ class FactoryConstructorInvocationJudgment extends StaticInvocation InferenceVisitor visitor, DartType typeContext) { return visitor.visitFactoryConstructorInvocationJudgment(this, typeContext); } + + @override + String toString() { + return "FactoryConstructorInvocationJudgment()"; + } } /// Front end specific implementation of [FunctionDeclaration]. @@ -597,6 +637,11 @@ class FunctionDeclarationImpl extends FunctionDeclaration { FunctionDeclarationImpl declaration, bool hasImplicitReturnType) { declaration.hasImplicitReturnType = hasImplicitReturnType; } + + @override + String toString() { + return "FunctionDeclarationImpl()"; + } } /// Concrete shadow object representing a super initializer in kernel form. @@ -613,6 +658,11 @@ class InvalidSuperInitializerJudgment extends LocalInitializer void acceptInference(InferenceVisitor visitor) { return visitor.visitInvalidSuperInitializerJudgment(this); } + + @override + String toString() { + return "InvalidSuperInitializerJudgment()"; + } } /// Internal expression representing an if-null expression. @@ -656,6 +706,11 @@ class IfNullExpression extends InternalExpression { right?.parent = this; } } + + @override + String toString() { + return "IfNullExpression()"; + } } /// Common base class for shadow objects representing initializers in kernel @@ -704,6 +759,11 @@ class IntJudgment extends IntLiteral implements ExpressionJudgment { InferenceVisitor visitor, DartType typeContext) { return visitor.visitIntJudgment(this, typeContext); } + + @override + String toString() { + return "IntJudgment()"; + } } class ShadowLargeIntLiteral extends IntLiteral implements ExpressionJudgment { @@ -733,6 +793,11 @@ class ShadowLargeIntLiteral extends IntLiteral implements ExpressionJudgment { InferenceVisitor visitor, DartType typeContext) { return visitor.visitShadowLargeIntLiteral(this, typeContext); } + + @override + String toString() { + return "ShadowLargeIntLiteral()"; + } } /// Concrete shadow object representing an invalid initializer in kernel form. @@ -744,6 +809,11 @@ class ShadowInvalidInitializer extends LocalInitializer void acceptInference(InferenceVisitor visitor) { return visitor.visitShadowInvalidInitializer(this); } + + @override + String toString() { + return "ShadowInvalidInitializer()"; + } } /// Concrete shadow object representing an invalid initializer in kernel form. @@ -762,6 +832,11 @@ class ShadowInvalidFieldInitializer extends LocalInitializer void acceptInference(InferenceVisitor visitor) { return visitor.visitShadowInvalidFieldInitializer(this); } + + @override + String toString() { + return "ShadowInvalidFieldInitializer()"; + } } class ExpressionInvocation extends InternalExpression { @@ -800,6 +875,11 @@ class ExpressionInvocation extends InternalExpression { arguments?.parent = this; } } + + @override + String toString() { + return "ExpressionInvocation()"; + } } /// Concrete shadow object representing a named function expression. @@ -821,6 +901,11 @@ class NamedFunctionExpressionJudgment extends Let InferenceVisitor visitor, DartType typeContext) { return visitor.visitNamedFunctionExpressionJudgment(this, typeContext); } + + @override + String toString() { + return "NamedFunctionExpressionJudgment()"; + } } /// Internal expression representing a null-aware method invocation. @@ -868,6 +953,11 @@ class NullAwareMethodInvocation extends InternalExpression { invocation?.parent = this; } } + + @override + String toString() { + return "NullAwareMethodInvocation()"; + } } /// Internal expression representing a null-aware read from a property. @@ -915,6 +1005,11 @@ class NullAwarePropertyGet extends InternalExpression { read?.parent = this; } } + + @override + String toString() { + return "NullAwarePropertyGet()"; + } } /// Internal expression representing a null-aware read from a property. @@ -962,6 +1057,11 @@ class NullAwarePropertySet extends InternalExpression { write?.parent = this; } } + + @override + String toString() { + return "NullAwarePropertySet()"; + } } /// Front end specific implementation of [ReturnStatement]. @@ -970,6 +1070,11 @@ class ReturnStatementImpl extends ReturnStatement { ReturnStatementImpl(this.isArrow, [Expression expression]) : super(expression); + + @override + String toString() { + return "ReturnStatementImpl()"; + } } /// Concrete implementation of [TypePromoter] specialized to work with kernel @@ -1150,6 +1255,11 @@ class VariableGetImpl extends VariableGet { {this.forNullGuardedAccess}) : assert(forNullGuardedAccess != null), super(variable); + + @override + String toString() { + return "VariableGetImpl()"; + } } /// Front end specific implementation of [LoadLibrary]. @@ -1157,6 +1267,11 @@ class LoadLibraryImpl extends LoadLibrary { final Arguments arguments; LoadLibraryImpl(LibraryDependency import, this.arguments) : super(import); + + @override + String toString() { + return "LoadLibraryImpl()"; + } } /// Internal expression representing a tear-off of a `loadLibrary` function. @@ -1190,6 +1305,11 @@ class LoadLibraryTearOff extends InternalExpression { target = target.accept(v); } } + + @override + String toString() { + return "LoadLibraryTearOff()"; + } } /// Internal expression representing an if-null property set. @@ -1254,6 +1374,11 @@ class IfNullPropertySet extends InternalExpression { write?.parent = this; } } + + @override + String toString() { + return "IfNullPropertySet()"; + } } /// Internal expression representing an if-null assignment. @@ -1309,6 +1434,11 @@ class IfNullSet extends InternalExpression { write?.parent = this; } } + + @override + String toString() { + return "IfNullSet()"; + } } /// Internal expression representing an compound extension assignment. @@ -1426,6 +1556,11 @@ class CompoundExtensionSet extends InternalExpression { rhs?.parent = this; } } + + @override + String toString() { + return "CompoundExtensionSet()"; + } } /// Internal expression representing an compound property assignment. @@ -1510,6 +1645,11 @@ class CompoundPropertySet extends InternalExpression { rhs?.parent = this; } } + + @override + String toString() { + return "CompoundPropertySet()"; + } } /// Internal expression representing an compound property assignment. @@ -1570,6 +1710,11 @@ class PropertyPostIncDec extends InternalExpression { write?.parent = this; } } + + @override + String toString() { + return "PropertyPostIncDec()"; + } } /// Internal expression representing an local variable post inc/dec expression. @@ -1618,6 +1763,11 @@ class LocalPostIncDec extends InternalExpression { write?.parent = this; } } + + @override + String toString() { + return "LocalPostIncDec()"; + } } /// Internal expression representing an static member post inc/dec expression. @@ -1666,6 +1816,11 @@ class StaticPostIncDec extends InternalExpression { write?.parent = this; } } + + @override + String toString() { + return "StaticPostIncDec()"; + } } /// Internal expression representing an static member post inc/dec expression. @@ -1714,6 +1869,11 @@ class SuperPostIncDec extends InternalExpression { write?.parent = this; } } + + @override + String toString() { + return "SuperPostIncDec()"; + } } /// Internal expression representing an index get expression. @@ -1755,6 +1915,11 @@ class IndexGet extends InternalExpression { index?.parent = this; } } + + @override + String toString() { + return "IndexGet()"; + } } /// Internal expression representing an index set expression. @@ -1824,6 +1989,11 @@ class IndexSet extends InternalExpression { value?.parent = this; } } + + @override + String toString() { + return "IndexSet()"; + } } /// Internal expression representing a super index set expression. @@ -1880,6 +2050,11 @@ class SuperIndexSet extends InternalExpression { value?.parent = this; } } + + @override + String toString() { + return "SuperIndexSet()"; + } } /// Internal expression representing an extension index set expression. @@ -1960,6 +2135,11 @@ class ExtensionIndexSet extends InternalExpression { value?.parent = this; } } + + @override + String toString() { + return "ExtensionIndexSet()"; + } } /// Internal expression representing an if-null index assignment. @@ -2057,6 +2237,11 @@ class IfNullIndexSet extends InternalExpression { value?.parent = this; } } + + @override + String toString() { + return "IfNullIndexSet()"; + } } /// Internal expression representing an if-null super index set expression. @@ -2139,6 +2324,11 @@ class IfNullSuperIndexSet extends InternalExpression { value?.parent = this; } } + + @override + String toString() { + return "IfNullSuperIndexSet()"; + } } /// Internal expression representing an if-null super index set expression. @@ -2247,6 +2437,11 @@ class IfNullExtensionIndexSet extends InternalExpression { value?.parent = this; } } + + @override + String toString() { + return "IfNullExtensionIndexSet()"; + } } /// Internal expression representing a compound index assignment. @@ -2340,6 +2535,11 @@ class CompoundIndexSet extends InternalExpression { rhs?.parent = this; } } + + @override + String toString() { + return "CompoundIndexSet()"; + } } /// Internal expression representing a null-aware compound assignment. @@ -2447,6 +2647,11 @@ class NullAwareCompoundSet extends InternalExpression { rhs?.parent = this; } } + + @override + String toString() { + return "NullAwareCompoundSet()"; + } } /// Internal expression representing an null-aware if-null property set. @@ -2529,6 +2734,11 @@ class NullAwareIfNullSet extends InternalExpression { value?.parent = this; } } + + @override + String toString() { + return "NullAwareIfNullSet()"; + } } /// Internal expression representing a compound super index assignment. @@ -2615,6 +2825,11 @@ class CompoundSuperIndexSet extends InternalExpression { rhs?.parent = this; } } + + @override + String toString() { + return "CompoundSuperIndexSet()"; + } } /// Internal expression representing a compound extension index assignment. @@ -2738,6 +2953,11 @@ class CompoundExtensionIndexSet extends InternalExpression { rhs?.parent = this; } } + + @override + String toString() { + return "CompoundExtensionIndexSet()"; + } } /// Internal expression representing an assignment to an extension setter. @@ -2820,6 +3040,11 @@ class ExtensionSet extends InternalExpression { value?.parent = this; } } + + @override + String toString() { + return "ExtensionSet()"; + } } /// Internal expression representing an null-aware extension expression. @@ -2866,6 +3091,11 @@ class NullAwareExtension extends InternalExpression { expression?.parent = this; } } + + @override + String toString() { + return "NullAwareExtension()"; + } } /// Front end specific implementation of [PropertySet]. @@ -2881,6 +3111,11 @@ class PropertySetImpl extends PropertySet { {Member interfaceTarget, this.forEffect, this.readOnlyReceiver}) : assert(forEffect != null), super(receiver, name, value, interfaceTarget); + + @override + String toString() { + return "PropertySetImpl()"; + } } /// Internal representation of a read of an extension instance member. @@ -2927,6 +3162,11 @@ class ExtensionTearOff extends InternalExpression { arguments?.parent = this; } } + + @override + String toString() { + return "ExtensionTearOff()"; + } } /// Internal expression for an equals or not-equals expression. @@ -2967,6 +3207,11 @@ class EqualsExpression extends InternalExpression { right?.parent = this; } } + + @override + String toString() { + return "EqualsExpression()"; + } } /// Internal expression for a binary expression. @@ -3006,6 +3251,11 @@ class BinaryExpression extends InternalExpression { right?.parent = this; } } + + @override + String toString() { + return "BinaryExpression()"; + } } /// Internal expression for a unary expression. @@ -3038,6 +3288,11 @@ class UnaryExpression extends InternalExpression { expression?.parent = this; } } + + @override + String toString() { + return "UnaryExpression()"; + } } /// Internal expression for a parenthesized expression. @@ -3069,6 +3324,11 @@ class ParenthesizedExpression extends InternalExpression { expression?.parent = this; } } + + @override + String toString() { + return "ParenthesizedExpression()"; + } } /// Creates a [Let] of [variable] with the given [body] using diff --git a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart index 6b88bcdd967..ed0ca4a9314 100644 --- a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart +++ b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart @@ -129,6 +129,11 @@ class RedirectingFactoryBody extends ExpressionStatement { } return result; } + + @override + String toString() { + return "RedirectingFactoryBody()"; + } } bool isRedirectingFactory(Member member, {EnsureLoaded helper}) { diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart index a632f1ae7e5..48410b5c7e8 100644 --- a/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart +++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart @@ -86,6 +86,11 @@ class UnknownType extends DartType { @override UnknownType withNullability(Nullability nullability) => this; + + @override + String toString() { + return "UnknownType()"; + } } /// Visitor that computes [isKnown]. diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart index 11792bcb315..d08c6e58af8 100644 --- a/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart +++ b/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart @@ -38,11 +38,12 @@ class TypeSchemaEliminationTest { expect( greatestClosure(new FunctionType( [unknownType], dynamicType, Nullability.legacy)) - .toString(), + .leakingDebugToString(), '(dart.core::Null?) →* dynamic'); expect( greatestClosure(new FunctionType([], dynamicType, Nullability.legacy, - namedParameters: [new NamedType('foo', unknownType)])).toString(), + namedParameters: [new NamedType('foo', unknownType)])) + .leakingDebugToString(), '({foo: dart.core::Null?}) →* dynamic'); } @@ -51,18 +52,19 @@ class TypeSchemaEliminationTest { greatestClosure(new FunctionType([ new FunctionType([unknownType], dynamicType, Nullability.legacy) ], dynamicType, Nullability.legacy)) - .toString(), + .leakingDebugToString(), '((dynamic) →* dynamic) →* dynamic'); } void test_greatestClosure_covariant() { expect( greatestClosure(new FunctionType([], unknownType, Nullability.legacy)) - .toString(), + .leakingDebugToString(), '() →* dynamic'); expect( greatestClosure(new InterfaceType( - coreTypes.listClass, Nullability.legacy, [unknownType])).toString(), + coreTypes.listClass, Nullability.legacy, [unknownType])) + .leakingDebugToString(), 'dart.core::List*'); } @@ -73,24 +75,25 @@ class TypeSchemaEliminationTest { namedParameters: [ new NamedType('a', unknownType), new NamedType('b', unknownType) - ])).toString(), + ])).leakingDebugToString(), '(dart.core::Null?, dart.core::Null?, {a: dart.core::Null?, ' 'b: dart.core::Null?}) →* dynamic'); } void test_greatestClosure_simple() { - expect(greatestClosure(unknownType).toString(), 'dynamic'); + expect(greatestClosure(unknownType).leakingDebugToString(), 'dynamic'); } void test_leastClosure_contravariant() { expect( leastClosure(new FunctionType( [unknownType], dynamicType, Nullability.legacy)) - .toString(), + .leakingDebugToString(), '(dynamic) →* dynamic'); expect( leastClosure(new FunctionType([], dynamicType, Nullability.legacy, - namedParameters: [new NamedType('foo', unknownType)])).toString(), + namedParameters: [new NamedType('foo', unknownType)])) + .leakingDebugToString(), '({foo: dynamic}) →* dynamic'); } @@ -99,18 +102,19 @@ class TypeSchemaEliminationTest { leastClosure(new FunctionType([ new FunctionType([unknownType], dynamicType, Nullability.legacy) ], dynamicType, Nullability.legacy)) - .toString(), + .leakingDebugToString(), '((dart.core::Null?) →* dynamic) →* dynamic'); } void test_leastClosure_covariant() { expect( leastClosure(new FunctionType([], unknownType, Nullability.legacy)) - .toString(), + .leakingDebugToString(), '() →* dart.core::Null?'); expect( leastClosure(new InterfaceType( - coreTypes.listClass, Nullability.legacy, [unknownType])).toString(), + coreTypes.listClass, Nullability.legacy, [unknownType])) + .leakingDebugToString(), 'dart.core::List*'); } @@ -121,12 +125,13 @@ class TypeSchemaEliminationTest { namedParameters: [ new NamedType('a', unknownType), new NamedType('b', unknownType) - ])).toString(), + ])).leakingDebugToString(), '(dynamic, dynamic, {a: dynamic, b: dynamic}) →* dart.core::Null?'); } void test_leastClosure_simple() { - expect(leastClosure(unknownType).toString(), 'dart.core::Null?'); + expect( + leastClosure(unknownType).leakingDebugToString(), 'dart.core::Null?'); } } diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt index 2bbde19f0f3..a604ce32fa4 100644 --- a/pkg/front_end/test/spell_checking_list_code.txt +++ b/pkg/front_end/test/spell_checking_list_code.txt @@ -109,6 +109,7 @@ bodied body's bof bom +bones boolean bother boundness diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.expect index 153bb13ab58..483d84dde65 100644 --- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.expect +++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.expect @@ -59,6 +59,6 @@ static method main() → dynamic { constants { #C1 = 0 - #C2 = TypeLiteralConstant(dart.core::String*) - #C3 = TypeLiteralConstant(dart.core::int*) + #C2 = TypeLiteralConstant(core::String*) + #C3 = TypeLiteralConstant(core::int*) } diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.transformed.expect index b2dbf88c3da..fe6627411e5 100644 --- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.transformed.expect @@ -59,6 +59,6 @@ static method main() → dynamic { constants { #C1 = 0 - #C2 = TypeLiteralConstant(dart.core::String*) - #C3 = TypeLiteralConstant(dart.core::int*) + #C2 = TypeLiteralConstant(core::String*) + #C3 = TypeLiteralConstant(core::int*) } diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.expect index 500a9d3aa1b..37d24799cf1 100644 --- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.expect +++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.expect @@ -59,6 +59,6 @@ static method main() → dynamic { constants { #C1 = 0 - #C2 = TypeLiteralConstant(dart.core::String*) - #C3 = TypeLiteralConstant(dart.core::int*) + #C2 = TypeLiteralConstant(core::String*) + #C3 = TypeLiteralConstant(core::int*) } diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.transformed.expect index 9c19e86ea67..a3cedca8c94 100644 --- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.transformed.expect @@ -59,6 +59,6 @@ static method main() → dynamic { constants { #C1 = 0 - #C2 = TypeLiteralConstant(dart.core::String*) - #C3 = TypeLiteralConstant(dart.core::int*) + #C2 = TypeLiteralConstant(core::String*) + #C3 = TypeLiteralConstant(core::int*) } diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.expect index 500a9d3aa1b..37d24799cf1 100644 --- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.expect +++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.expect @@ -59,6 +59,6 @@ static method main() → dynamic { constants { #C1 = 0 - #C2 = TypeLiteralConstant(dart.core::String*) - #C3 = TypeLiteralConstant(dart.core::int*) + #C2 = TypeLiteralConstant(core::String*) + #C3 = TypeLiteralConstant(core::int*) } diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.transformed.expect index 9c19e86ea67..a3cedca8c94 100644 --- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.transformed.expect @@ -59,6 +59,6 @@ static method main() → dynamic { constants { #C1 = 0 - #C2 = TypeLiteralConstant(dart.core::String*) - #C3 = TypeLiteralConstant(dart.core::int*) + #C2 = TypeLiteralConstant(core::String*) + #C3 = TypeLiteralConstant(core::int*) } diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect index 927bfe13e58..0293eeb2a91 100644 --- a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect +++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect @@ -99,13 +99,13 @@ static method id(con::id::T* t) → con::id:: return t; constants { - #C1 = TypeLiteralConstant(dart.core::Object) + #C1 = TypeLiteralConstant(core::Object) #C2 = tearoff con::id #C3 = partial-instantiation con::id #C4 = 0 #C5 = con::Class {field:#C4} #C6 = TypeLiteralConstant((dynamic) → dynamic) - #C7 = TypeLiteralConstant((T%) → T%) + #C7 = TypeLiteralConstant((T%) → T%) #C8 = [#C4] #C9 = null #C10 = [#C4, #C9] @@ -116,11 +116,11 @@ constants { #C15 = core::_ImmutableMap {_kvPairs:#C14} #C16 = false #C17 = [] - #C18 = TypeLiteralConstant(dart.core::Object*) + #C18 = TypeLiteralConstant(core::Object*) #C19 = partial-instantiation con::id #C20 = con::Class {field:#C4} #C21 = TypeLiteralConstant((dynamic) →* dynamic) - #C22 = TypeLiteralConstant((T*) →* T*) + #C22 = TypeLiteralConstant((T*) →* T*) #C23 = [#C4] #C24 = core::_ImmutableMap {_kvPairs:#C10} #C25 = col::_UnmodifiableSet {_map:#C24} diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect index 927bfe13e58..0293eeb2a91 100644 --- a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect +++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect @@ -99,13 +99,13 @@ static method id(con::id::T* t) → con::id:: return t; constants { - #C1 = TypeLiteralConstant(dart.core::Object) + #C1 = TypeLiteralConstant(core::Object) #C2 = tearoff con::id #C3 = partial-instantiation con::id #C4 = 0 #C5 = con::Class {field:#C4} #C6 = TypeLiteralConstant((dynamic) → dynamic) - #C7 = TypeLiteralConstant((T%) → T%) + #C7 = TypeLiteralConstant((T%) → T%) #C8 = [#C4] #C9 = null #C10 = [#C4, #C9] @@ -116,11 +116,11 @@ constants { #C15 = core::_ImmutableMap {_kvPairs:#C14} #C16 = false #C17 = [] - #C18 = TypeLiteralConstant(dart.core::Object*) + #C18 = TypeLiteralConstant(core::Object*) #C19 = partial-instantiation con::id #C20 = con::Class {field:#C4} #C21 = TypeLiteralConstant((dynamic) →* dynamic) - #C22 = TypeLiteralConstant((T*) →* T*) + #C22 = TypeLiteralConstant((T*) →* T*) #C23 = [#C4] #C24 = core::_ImmutableMap {_kvPairs:#C10} #C25 = col::_UnmodifiableSet {_map:#C24} diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect index f7ac5950bc7..d4e1e3f7d33 100644 --- a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect +++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect @@ -99,13 +99,13 @@ static method id(con::id::T* t) → con::id:: return t; constants { - #C1 = TypeLiteralConstant(dart.core::Object*) + #C1 = TypeLiteralConstant(core::Object*) #C2 = tearoff con::id #C3 = partial-instantiation con::id #C4 = 0 #C5 = con::Class {field:#C4} #C6 = TypeLiteralConstant((dynamic) →* dynamic) - #C7 = TypeLiteralConstant((T*) →* T*) + #C7 = TypeLiteralConstant((T*) →* T*) #C8 = [#C4] #C9 = null #C10 = [#C4, #C9] diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect index f7ac5950bc7..d4e1e3f7d33 100644 --- a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect +++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect @@ -99,13 +99,13 @@ static method id(con::id::T* t) → con::id:: return t; constants { - #C1 = TypeLiteralConstant(dart.core::Object*) + #C1 = TypeLiteralConstant(core::Object*) #C2 = tearoff con::id #C3 = partial-instantiation con::id #C4 = 0 #C5 = con::Class {field:#C4} #C6 = TypeLiteralConstant((dynamic) →* dynamic) - #C7 = TypeLiteralConstant((T*) →* T*) + #C7 = TypeLiteralConstant((T*) →* T*) #C8 = [#C4] #C9 = null #C10 = [#C4, #C9] diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart index 92e1b4cfb07..3cce9792535 100644 --- a/pkg/kernel/lib/ast.dart +++ b/pkg/kernel/lib/ast.dart @@ -76,12 +76,83 @@ export 'canonical_name.dart' show CanonicalName; import 'default_language_version.dart'; import 'transformations/flags.dart'; -import 'text/ast_to_text.dart'; +import 'text/ast_to_text.dart' as astToText; import 'core_types.dart'; import 'type_algebra.dart'; import 'type_environment.dart'; import 'src/assumptions.dart'; +String _debugNullability(Nullability nullability) { + switch (nullability) { + case Nullability.legacy: + return '*'; + case Nullability.nullable: + return '?'; + case Nullability.undetermined: + return '%'; + case Nullability.nonNullable: + return ''; + } + throw "Unknown Nullability: $nullability"; +} + +String _debugLibraryName(Library node) { + return node == null ? 'null' : node.name ?? 'library ${node.importUri}'; +} + +String _debugQualifiedClassName(Class node) { + return _debugLibraryName(node.enclosingLibrary) + + '::' + + _debugClassName(node); +} + +String _debugClassName(Class node) { + return node == null + ? 'null' + : node.name ?? 'null-named class ${node.runtimeType} ${node.hashCode}'; +} + +String _debugQualifiedMemberName(Member node) { + if (node.enclosingClass != null) { + return _debugQualifiedClassName(node.enclosingClass) + + '::' + + _debugMemberName(node); + } else { + return _debugLibraryName(node.enclosingLibrary) + + '::' + + _debugMemberName(node); + } +} + +String _debugMemberName(Member node) { + return node.name?.name ?? + "null-named member ${node.runtimeType} ${node.hashCode}"; +} + +String _debugVariableDeclarationName(VariableDeclaration node) { + return node.name ?? + "null-named VariableDeclaration ${node.runtimeType} ${node.hashCode}"; +} + +String _debugQualifiedTypeParameterName(TypeParameter node) { + if (node.parent is Class) { + return _debugQualifiedClassName(node.parent) + + '::' + + _debugTypeParameterName(node); + } + if (node.parent is Member) { + return _debugQualifiedMemberName(node.parent) + + '::' + + _debugTypeParameterName(node); + } + return _debugTypeParameterName(node); +} + +String _debugTypeParameterName(TypeParameter node) { + return node.name ?? + "null-named TypeParameter ${node.runtimeType} ${node.hashCode}"; +} + /// Any type of node in the IR. abstract class Node { const Node(); @@ -91,22 +162,21 @@ abstract class Node { /// Returns the textual representation of this node for use in debugging. /// - /// [toString] should only be used for debugging and short-running test tools - /// as it can cause serious memory leaks. + /// [toString] should only be used for debugging, but should not leak. /// - /// Synthetic names are cached globally to retain consistency across different - /// [toString] calls (hence the memory leak). - /// - /// Nodes that are named, such as [Class] and [Member], return their - /// (possibly synthesized) name, whereas other AST nodes return the complete - /// textual representation of their subtree. - String toString() => debugNodeToString(this); + /// The data is generally bare-bones, but can easily be updated for your + /// specific debugging needs. + String toString(); /// Returns the textual representation of this node for use in debugging. /// /// Note that this adds some nodes to a static map to ensure consistent - /// naming, but that it thus also leaks memory. - String leakingDebugToString() => debugNodeToString(this); + /// naming, but that it thus also leaks memory. [leakingDebugToString] should + /// thus only be used for debugging and short-running test tools. + /// + /// Synthetic names are cached globally to retain consistency across different + /// [leakingDebugToString] calls (hence the memory leak). + String leakingDebugToString() => astToText.debugNodeToString(this); } /// A mutable AST node with a parent pointer. @@ -615,7 +685,7 @@ class Library extends NamedNode /// Returns a possibly synthesized name for this library, consistent with /// the names across all [toString] calls. - String toString() => debugLibraryName(this); + String toString() => _debugLibraryName(this); Location _getLocationInEnclosingFile(int offset) { return _getLocationInComponent(enclosingComponent, fileUri, offset); @@ -698,6 +768,11 @@ class LibraryDependency extends TreeNode { transformList(annotations, v, this); transformList(combinators, v, this); } + + @override + String toString() { + return "LibraryDependency()"; + } } /// A part declaration in a library. @@ -726,6 +801,11 @@ class LibraryPart extends TreeNode { transformChildren(Transformer v) { transformList(annotations, v, this); } + + @override + String toString() { + return "LibraryPart()"; + } } /// A `show` or `hide` clause for an import or export. @@ -750,6 +830,11 @@ class Combinator extends TreeNode { @override transformChildren(Transformer v) {} + + @override + String toString() { + return "Combinator()"; + } } /// Declaration of a type alias. @@ -817,6 +902,11 @@ class Typedef extends NamedNode implements FileUriNode { Location _getLocationInEnclosingFile(int offset) { return _getLocationInComponent(enclosingComponent, fileUri, offset); } + + @override + String toString() { + return "Typedef()"; + } } /// The degree to which the contents of a class have been loaded into memory. @@ -1328,7 +1418,7 @@ class Class extends NamedNode implements Annotatable, FileUriNode { /// Returns a possibly synthesized name for this class, consistent with /// the names used across all [toString] calls. - String toString() => debugQualifiedClassName(this); + String toString() => _debugQualifiedClassName(this); visitChildren(Visitor v) { visitList(annotations, v); @@ -1426,6 +1516,11 @@ class Extension extends NamedNode implements FileUriNode { onType = v.visitDartType(onType); } } + + @override + String toString() { + return "Extension()"; + } } enum ExtensionMemberKind { @@ -1586,7 +1681,7 @@ abstract class Member extends NamedNode implements Annotatable, FileUriNode { /// Returns a possibly synthesized name for this member, consistent with /// the names used across all [toString] calls. - String toString() => debugQualifiedMemberName(this); + String toString() => _debugQualifiedMemberName(this); void addAnnotation(Expression node) { if (annotations.isEmpty) { @@ -2362,6 +2457,11 @@ class InvalidInitializer extends Initializer { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "InvalidInitializer()"; + } } /// A field assignment `field = value` occurring in the initializer list of @@ -2403,6 +2503,11 @@ class FieldInitializer extends Initializer { value?.parent = this; } } + + @override + String toString() { + return "FieldInitializer()"; + } } /// A super call `super(x,y)` occurring in the initializer list of a @@ -2445,6 +2550,11 @@ class SuperInitializer extends Initializer { arguments?.parent = this; } } + + @override + String toString() { + return "SuperInitializer()"; + } } /// A redirecting call `this(x,y)` occurring in the initializer list of @@ -2483,6 +2593,11 @@ class RedirectingInitializer extends Initializer { arguments?.parent = this; } } + + @override + String toString() { + return "RedirectingInitializer()"; + } } /// Binding of a temporary variable in the initializer list of a constructor. @@ -2508,6 +2623,11 @@ class LocalInitializer extends Initializer { variable?.parent = this; } } + + @override + String toString() { + return "LocalInitializer()"; + } } class AssertInitializer extends Initializer { @@ -2527,6 +2647,11 @@ class AssertInitializer extends Initializer { statement = statement.accept(v); statement.parent = this; } + + @override + String toString() { + return "AssertInitializer()"; + } } // ------------------------------------------------------------------------ @@ -2676,6 +2801,11 @@ class FunctionNode extends TreeNode { body?.parent = this; } } + + @override + String toString() { + return "FunctionNode()"; + } } enum AsyncMarker { @@ -2802,6 +2932,11 @@ class InvalidExpression extends Expression { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "InvalidExpression()"; + } } /// Read a local variable, a local function, or a function parameter. @@ -2828,6 +2963,11 @@ class VariableGet extends Expression { promotedType = v.visitDartType(promotedType); } } + + @override + String toString() { + return "VariableGet()"; + } } /// Assign a local variable or function parameter. @@ -2858,6 +2998,11 @@ class VariableSet extends Expression { value?.parent = this; } } + + @override + String toString() { + return "VariableSet()"; + } } /// Expression of form `x.field`. @@ -2918,6 +3063,11 @@ class PropertyGet extends Expression { receiver?.parent = this; } } + + @override + String toString() { + return "PropertyGet($receiver.$name)"; + } } /// Expression of form `x.field = value`. @@ -2973,6 +3123,11 @@ class PropertySet extends Expression { value?.parent = this; } } + + @override + String toString() { + return "PropertySet()"; + } } /// Directly read a field, call a getter, or tear off a method. @@ -3015,6 +3170,11 @@ class DirectPropertyGet extends Expression { return Substitution.fromInterfaceType(receiverType) .substituteType(target.getterType); } + + @override + String toString() { + return "DirectPropertyGet()"; + } } /// Directly assign a field, or call a setter. @@ -3063,6 +3223,11 @@ class DirectPropertySet extends Expression { DartType getStaticType(StaticTypeContext context) => value.getStaticType(context); + + @override + String toString() { + return "DirectPropertySet()"; + } } /// Directly call an instance method, bypassing ordinary dispatch. @@ -3124,6 +3289,11 @@ class DirectMethodInvocation extends InvocationExpression { target.function.typeParameters, arguments.types) .substituteType(returnType); } + + @override + String toString() { + return "DirectMethodInvocation()"; + } } /// Expression of form `super.field`. @@ -3172,6 +3342,11 @@ class SuperPropertyGet extends Expression { } transformChildren(Transformer v) {} + + @override + String toString() { + return "SuperPropertyGet()"; + } } /// Expression of form `super.field = value`. @@ -3218,6 +3393,11 @@ class SuperPropertySet extends Expression { value?.parent = this; } } + + @override + String toString() { + return "SuperPropertySet()"; + } } /// Read a static field, call a static getter, or tear off a static method. @@ -3246,6 +3426,11 @@ class StaticGet extends Expression { } transformChildren(Transformer v) {} + + @override + String toString() { + return "StaticGet()"; + } } /// Assign a static field or call a static setter. @@ -3287,6 +3472,11 @@ class StaticSet extends Expression { value?.parent = this; } } + + @override + String toString() { + return "StaticSet()"; + } } /// The arguments to a function call, divided into type arguments, @@ -3334,6 +3524,11 @@ class Arguments extends TreeNode { transformList(positional, v, this); transformList(named, v, this); } + + @override + String toString() { + return "Arguments()"; + } } /// A named argument, `name: value`. @@ -3357,6 +3552,11 @@ class NamedExpression extends TreeNode { value?.parent = this; } } + + @override + String toString() { + return "NamedExpression()"; + } } /// Common super class for [DirectMethodInvocation], [MethodInvocation], @@ -3486,6 +3686,11 @@ class MethodInvocation extends InvocationExpression { arguments?.parent = this; } } + + @override + String toString() { + return "MethodInvocation()"; + } } /// Expression of form `super.foo(x)`. @@ -3541,6 +3746,11 @@ class SuperMethodInvocation extends InvocationExpression { arguments?.parent = this; } } + + @override + String toString() { + return "SuperMethodInvocation()"; + } } /// Expression of form `foo(x)`, or `const foo(x)` if the target is an @@ -3592,6 +3802,11 @@ class StaticInvocation extends InvocationExpression { arguments?.parent = this; } } + + @override + String toString() { + return "StaticInvocation($targetReference, $arguments)"; + } } /// Expression of form `new Foo(x)` or `const Foo(x)`. @@ -3659,6 +3874,11 @@ class ConstructorInvocation extends InvocationExpression { : new InterfaceType( enclosingClass, Nullability.legacy, arguments.types); } + + @override + String toString() { + return "ConstructorInvocation()"; + } } /// An explicit type instantiation of a generic function. @@ -3692,6 +3912,11 @@ class Instantiation extends Expression { } transformTypeList(typeArguments, v); } + + @override + String toString() { + return "Instantiation()"; + } } /// Expression of form `!x`. @@ -3721,6 +3946,11 @@ class Not extends Expression { operand?.parent = this; } } + + @override + String toString() { + return "Not()"; + } } /// Expression of form `x && y` or `x || y` @@ -3756,6 +3986,11 @@ class LogicalExpression extends Expression { right?.parent = this; } } + + @override + String toString() { + return "LogicalExpression()"; + } } /// Expression of form `x ? y : z`. @@ -3804,6 +4039,11 @@ class ConditionalExpression extends Expression { staticType = v.visitDartType(staticType); } } + + @override + String toString() { + return "ConditionalExpression($condition ? $then : $otherwise)"; + } } /// Convert expressions to strings and concatenate them. Semantically, calls @@ -3834,6 +4074,11 @@ class StringConcatenation extends Expression { transformChildren(Transformer v) { transformList(expressions, v, this); } + + @override + String toString() { + return "StringConcatenation()"; + } } /// Concatenate lists into a single list. @@ -3868,6 +4113,11 @@ class ListConcatenation extends Expression { typeArgument = v.visitDartType(typeArgument); transformList(lists, v, this); } + + @override + String toString() { + return "ListConcatenation()"; + } } /// Concatenate sets into a single set. @@ -3905,6 +4155,11 @@ class SetConcatenation extends Expression { typeArgument = v.visitDartType(typeArgument); transformList(sets, v, this); } + + @override + String toString() { + return "SetConcatenation()"; + } } /// Concatenate maps into a single map. @@ -3948,6 +4203,11 @@ class MapConcatenation extends Expression { valueType = v.visitDartType(valueType); transformList(maps, v, this); } + + @override + String toString() { + return "MapConcatenation()"; + } } /// Create an instance directly from the field values. @@ -4007,6 +4267,11 @@ class InstanceCreation extends Expression { transformList(asserts, v, this); transformList(unusedArguments, v, this); } + + @override + String toString() { + return "InstanceCreation()"; + } } /// A marker indicating that a subexpression originates in a different source @@ -4044,6 +4309,11 @@ class FileUriExpression extends Expression implements FileUriNode { Location _getLocationInEnclosingFile(int offset) { return _getLocationInComponent(enclosingComponent, fileUri, offset); } + + @override + String toString() { + return "FileUriExpression()"; + } } /// Expression of form `x is T`. @@ -4091,6 +4361,11 @@ class IsExpression extends Expression { } type = v.visitDartType(type); } + + @override + String toString() { + return "IsExpression()"; + } } /// Expression of form `x as T`. @@ -4183,6 +4458,11 @@ class AsExpression extends Expression { } type = v.visitDartType(type); } + + @override + String toString() { + return "AsExpression($operand as $type)"; + } } /// Null check expression of form `x!`. @@ -4217,6 +4497,11 @@ class NullCheck extends Expression { operand?.parent = this; } } + + @override + String toString() { + return "NullCheck()"; + } } /// An integer, double, boolean, string, or null constant. @@ -4238,6 +4523,11 @@ class StringLiteral extends BasicLiteral { R accept(ExpressionVisitor v) => v.visitStringLiteral(this); R accept1(ExpressionVisitor1 v, A arg) => v.visitStringLiteral(this, arg); + + @override + String toString() { + return "StringLiteral($value)"; + } } class IntLiteral extends BasicLiteral { @@ -4255,6 +4545,11 @@ class IntLiteral extends BasicLiteral { R accept(ExpressionVisitor v) => v.visitIntLiteral(this); R accept1(ExpressionVisitor1 v, A arg) => v.visitIntLiteral(this, arg); + + @override + String toString() { + return "IntLiteral($value)"; + } } class DoubleLiteral extends BasicLiteral { @@ -4268,6 +4563,11 @@ class DoubleLiteral extends BasicLiteral { R accept(ExpressionVisitor v) => v.visitDoubleLiteral(this); R accept1(ExpressionVisitor1 v, A arg) => v.visitDoubleLiteral(this, arg); + + @override + String toString() { + return "DoubleLiteral($value)"; + } } class BoolLiteral extends BasicLiteral { @@ -4281,6 +4581,11 @@ class BoolLiteral extends BasicLiteral { R accept(ExpressionVisitor v) => v.visitBoolLiteral(this); R accept1(ExpressionVisitor1 v, A arg) => v.visitBoolLiteral(this, arg); + + @override + String toString() { + return "BoolLiteral($value)"; + } } class NullLiteral extends BasicLiteral { @@ -4292,6 +4597,11 @@ class NullLiteral extends BasicLiteral { R accept(ExpressionVisitor v) => v.visitNullLiteral(this); R accept1(ExpressionVisitor1 v, A arg) => v.visitNullLiteral(this, arg); + + @override + String toString() { + return "NullLiteral()"; + } } class SymbolLiteral extends Expression { @@ -4308,6 +4618,11 @@ class SymbolLiteral extends Expression { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "SymbolLiteral(#$value)"; + } } class TypeLiteral extends Expression { @@ -4329,6 +4644,11 @@ class TypeLiteral extends Expression { transformChildren(Transformer v) { type = v.visitDartType(type); } + + @override + String toString() { + return "TypeLiteral($type)"; + } } class ThisExpression extends Expression { @@ -4340,6 +4660,11 @@ class ThisExpression extends Expression { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "ThisExpression()"; + } } class Rethrow extends Expression { @@ -4354,6 +4679,11 @@ class Rethrow extends Expression { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "Rethrow()"; + } } class Throw extends Expression { @@ -4381,6 +4711,11 @@ class Throw extends Expression { expression?.parent = this; } } + + @override + String toString() { + return "Throw()"; + } } class ListLiteral extends Expression { @@ -4411,6 +4746,11 @@ class ListLiteral extends Expression { typeArgument = v.visitDartType(typeArgument); transformList(expressions, v, this); } + + @override + String toString() { + return "ListLiteral()"; + } } class SetLiteral extends Expression { @@ -4441,6 +4781,11 @@ class SetLiteral extends Expression { typeArgument = v.visitDartType(typeArgument); transformList(expressions, v, this); } + + @override + String toString() { + return "SetLiteral()"; + } } class MapLiteral extends Expression { @@ -4478,6 +4823,11 @@ class MapLiteral extends Expression { valueType = v.visitDartType(valueType); transformList(entries, v, this); } + + @override + String toString() { + return "MapLiteral()"; + } } class MapEntry extends TreeNode { @@ -4506,6 +4856,11 @@ class MapEntry extends TreeNode { value?.parent = this; } } + + @override + String toString() { + return "MapEntry()"; + } } /// Expression of form `await x`. @@ -4534,6 +4889,11 @@ class AwaitExpression extends Expression { operand?.parent = this; } } + + @override + String toString() { + return "AwaitExpression()"; + } } /// Common super-interface for [FunctionExpression] and [FunctionDeclaration]. @@ -4569,6 +4929,11 @@ class FunctionExpression extends Expression implements LocalFunction { function?.parent = this; } } + + @override + String toString() { + return "FunctionExpression()"; + } } class ConstantExpression extends Expression { @@ -4594,6 +4959,11 @@ class ConstantExpression extends Expression { constant = v.visitConstant(constant); type = v.visitDartType(type); } + + @override + String toString() { + return "ConstantExpression()"; + } } /// Synthetic expression of form `let v = x in y` @@ -4627,6 +4997,11 @@ class Let extends Expression { body?.parent = this; } } + + @override + String toString() { + return "Let()"; + } } class BlockExpression extends Expression { @@ -4660,6 +5035,11 @@ class BlockExpression extends Expression { value?.parent = this; } } + + @override + String toString() { + return "BlockExpression()"; + } } /// Attempt to load the library referred to by a deferred import. @@ -4691,6 +5071,11 @@ class LoadLibrary extends Expression { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "LoadLibrary()"; + } } /// Checks that the given deferred import has been marked as 'loaded'. @@ -4710,6 +5095,11 @@ class CheckLibraryIsLoaded extends Expression { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "CheckLibraryIsLoaded()"; + } } // ------------------------------------------------------------------------ @@ -4742,6 +5132,11 @@ class ExpressionStatement extends Statement { expression?.parent = this; } } + + @override + String toString() { + return "ExpressionStatement()"; + } } class Block extends Statement { @@ -4771,6 +5166,11 @@ class Block extends Statement { statements.add(node); node.parent = this; } + + @override + String toString() { + return "Block()"; + } } /// A block that is only executed when asserts are enabled. @@ -4806,6 +5206,11 @@ class AssertBlock extends Statement { statements.add(node); node.parent = this; } + + @override + String toString() { + return "AssertBlock()"; + } } class EmptyStatement extends Statement { @@ -4815,6 +5220,11 @@ class EmptyStatement extends Statement { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "EmptyStatement()"; + } } class AssertStatement extends Statement { @@ -4856,6 +5266,11 @@ class AssertStatement extends Statement { message?.parent = this; } } + + @override + String toString() { + return "AssertStatement()"; + } } /// A target of a [Break] statement. @@ -4884,6 +5299,11 @@ class LabeledStatement extends Statement { body?.parent = this; } } + + @override + String toString() { + return "LabeledStatement()"; + } } /// Breaks out of an enclosing [LabeledStatement]. @@ -4917,6 +5337,11 @@ class BreakStatement extends Statement { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "BreakStatement()"; + } } class WhileStatement extends Statement { @@ -4947,6 +5372,11 @@ class WhileStatement extends Statement { body?.parent = this; } } + + @override + String toString() { + return "WhileStatement()"; + } } class DoStatement extends Statement { @@ -4977,6 +5407,11 @@ class DoStatement extends Statement { condition?.parent = this; } } + + @override + String toString() { + return "DoStatement()"; + } } class ForStatement extends Statement { @@ -5015,6 +5450,11 @@ class ForStatement extends Statement { body?.parent = this; } } + + @override + String toString() { + return "ForStatement()"; + } } class ForInStatement extends Statement { @@ -5060,6 +5500,11 @@ class ForInStatement extends Statement { body?.parent = this; } } + + @override + String toString() { + return "ForInStatement()"; + } } /// Statement of form `switch (e) { case x: ... }`. @@ -5091,6 +5536,11 @@ class SwitchStatement extends Statement { } transformList(cases, v, this); } + + @override + String toString() { + return "SwitchStatement()"; + } } /// A group of `case` clauses and/or a `default` clause. @@ -5135,6 +5585,11 @@ class SwitchCase extends TreeNode { body?.parent = this; } } + + @override + String toString() { + return "SwitchCase()"; + } } /// Jump to a case in an enclosing switch. @@ -5149,6 +5604,11 @@ class ContinueSwitchStatement extends Statement { visitChildren(Visitor v) {} transformChildren(Transformer v) {} + + @override + String toString() { + return "ContinueSwitchStatement()"; + } } class IfStatement extends Statement { @@ -5186,6 +5646,11 @@ class IfStatement extends Statement { otherwise?.parent = this; } } + + @override + String toString() { + return "IfStatement()"; + } } class ReturnStatement extends Statement { @@ -5209,6 +5674,11 @@ class ReturnStatement extends Statement { expression?.parent = this; } } + + @override + String toString() { + return "ReturnStatement()"; + } } class TryCatch extends Statement { @@ -5237,6 +5707,11 @@ class TryCatch extends Statement { } transformList(catches, v, this); } + + @override + String toString() { + return "TryCatch()"; + } } class Catch extends TreeNode { @@ -5277,6 +5752,11 @@ class Catch extends TreeNode { body?.parent = this; } } + + @override + String toString() { + return "Catch()"; + } } class TryFinally extends Statement { @@ -5307,6 +5787,11 @@ class TryFinally extends Statement { finalizer?.parent = this; } } + + @override + String toString() { + return "TryFinally()"; + } } /// Statement of form `yield x` or `yield* x`. @@ -5351,6 +5836,11 @@ class YieldStatement extends Statement { expression?.parent = this; } } + + @override + String toString() { + return "YieldStatement()"; + } } /// Declaration of a local variable. @@ -5550,7 +6040,7 @@ class VariableDeclaration extends Statement { /// Returns a possibly synthesized name for this variable, consistent with /// the names used across all [toString] calls. - String toString() => debugVariableDeclarationName(this); + String toString() => _debugVariableDeclarationName(this); } /// Declaration a local function. @@ -5584,6 +6074,11 @@ class FunctionDeclaration extends Statement implements LocalFunction { function?.parent = this; } } + + @override + String toString() { + return "FunctionDeclaration()"; + } } // ------------------------------------------------------------------------ @@ -5637,7 +6132,7 @@ abstract class Name implements Node { /// /// Note that this adds some nodes to a static map to ensure consistent /// naming, but that it thus also leaks memory. - String leakingDebugToString() => debugNodeToString(this); + String leakingDebugToString() => astToText.debugNodeToString(this); } class _PrivateName extends Name { @@ -5800,6 +6295,11 @@ class InvalidType extends DartType { @override InvalidType withNullability(Nullability nullability) => this; + + @override + String toString() { + return "invalid-type"; + } } class DynamicType extends DartType { @@ -5829,6 +6329,11 @@ class DynamicType extends DartType { @override DynamicType withNullability(Nullability nullability) => this; + + @override + String toString() { + return "dynamic"; + } } class VoidType extends DartType { @@ -5858,6 +6363,11 @@ class VoidType extends DartType { @override VoidType withNullability(Nullability nullability) => this; + + @override + String toString() { + return "void"; + } } class NeverType extends DartType { @@ -5892,6 +6402,11 @@ class NeverType extends DartType { NeverType withNullability(Nullability nullability) { return this.nullability == nullability ? this : new NeverType(nullability); } + + @override + String toString() { + return "NeverType()"; + } } class BottomType extends DartType { @@ -5921,6 +6436,11 @@ class BottomType extends DartType { @override BottomType withNullability(Nullability nullability) => this; + + @override + String toString() { + return ""; + } } class InterfaceType extends DartType { @@ -6005,6 +6525,11 @@ class InterfaceType extends DartType { ? this : new InterfaceType.byReference(className, nullability, typeArguments); } + + @override + String toString() { + return "InterfaceType($className${_debugNullability(nullability)})"; + } } /// A possibly generic function type. @@ -6175,6 +6700,11 @@ class FunctionType extends DartType { if (typeParameters.isEmpty) return result; return getFreshTypeParameters(typeParameters).applyToFunctionType(result); } + + @override + String toString() { + return "FunctionType()"; + } } /// A use of a [Typedef] as a type. @@ -6263,6 +6793,11 @@ class TypedefType extends DartType { : new TypedefType.byReference( typedefReference, nullability, typeArguments); } + + @override + String toString() { + return "TypedefType()"; + } } /// A named parameter in [FunctionType]. @@ -6301,6 +6836,11 @@ class NamedType extends Node implements Comparable { void visitChildren(Visitor v) { type.accept(v); } + + @override + String toString() { + return "NamedType()"; + } } /// Reference to a type variable. @@ -6571,6 +7111,11 @@ class TypeParameterType extends DartType { return Nullability.legacy; } + + @override + String toString() { + return "TypeParameterType()"; + } } /// Value set for variance of a type parameter X in a type term T. @@ -6772,7 +7317,7 @@ class TypeParameter extends TreeNode { /// Returns a possibly synthesized name for this type parameter, consistent /// with the names used across all [toString] calls. - String toString() => debugQualifiedTypeParameterName(this); + String toString() => _debugQualifiedTypeParameterName(this); bool get isFunctionTypeTypeParameter => parent == null; } @@ -6820,6 +7365,11 @@ class Supertype extends Node { } return hash; } + + @override + String toString() { + return "Supertype()"; + } } // ------------------------------------------------------------------------ @@ -7256,6 +7806,11 @@ class UnevaluatedConstant extends Constant { @override Expression asExpression() => expression; + + @override + String toString() { + return "UnevaluatedConstant()"; + } } // ------------------------------------------------------------------------ @@ -7394,6 +7949,11 @@ class Component extends TreeNode { void addMetadataRepository(MetadataRepository repository) { metadata[repository.tag] = repository; } + + @override + String toString() { + return "Component()"; + } } /// A tuple with file, line, and column number, for displaying human-readable diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart index 72fb6e714da..e3e2566848c 100644 --- a/pkg/kernel/lib/text/ast_to_text.dart +++ b/pkg/kernel/lib/text/ast_to_text.dart @@ -2294,6 +2294,16 @@ class Printer extends Visitor { endLine(')'); } + visitTypeLiteralConstant(TypeLiteralConstant node) { + writeIndentation(); + writeConstantReference(node); + writeSpaced('='); + writeWord('${node.runtimeType}'); + writeSymbol('('); + writeNode(node.type); + endLine(')'); + } + visitInstanceConstant(InstanceConstant node) { writeIndentation(); writeConstantReference(node); diff --git a/pkg/kernel/test/metadata_test.dart b/pkg/kernel/test/metadata_test.dart index 87ed4e95530..a6d285a4e38 100644 --- a/pkg/kernel/test/metadata_test.dart +++ b/pkg/kernel/test/metadata_test.dart @@ -25,8 +25,8 @@ class Metadata { Member get member => _memberRef?.asMember; Metadata.forNode(TreeNode n) - : this(n.toString(), getMemberReference(getMemberForMetadata(n)), - getTypeForMetadata(n)); + : this(n.leakingDebugToString(), + getMemberReference(getMemberForMetadata(n)), getTypeForMetadata(n)); Metadata(this.string, this._memberRef, this.type); } diff --git a/pkg/vm/testcases/bytecode/asserts.dart.expect b/pkg/vm/testcases/bytecode/asserts.dart.expect index d8c3913ad90..4149a9376b8 100644 --- a/pkg/vm/testcases/bytecode/asserts.dart.expect +++ b/pkg/vm/testcases/bytecode/asserts.dart.expect @@ -90,7 +90,7 @@ ConstantPool { assert(condition); } static method test2(() →* dart.core::bool* condition, () →* dart.core::String* message) → void { - assert([@vm.call-site-attributes.metadata=receiverType:() →* dart.core::bool*] condition.call(), [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::String*] message.call()); + assert([@vm.call-site-attributes.metadata=receiverType:FunctionType()] condition.call(), [@vm.call-site-attributes.metadata=receiverType:FunctionType()] message.call()); } static method main() → dynamic {} } diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect index 558d02ff970..fd792c71d7d 100644 --- a/pkg/vm/testcases/bytecode/closures.dart.expect +++ b/pkg/vm/testcases/bytecode/closures.dart.expect @@ -1770,13 +1770,13 @@ ConstantPool { dart.core::print([#lib::A::T1*, #lib::A::T2*, #lib::A::foo::T3*, #lib::A::foo::T4*, T5*, T6*, T7*, T8*]); #lib::callWithArgs<#lib::A::T1*, #lib::A::T2*, #lib::A::foo::T3*, #lib::A::foo::T4*, T5*, T6*, T7*, T8*>(); }; - [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] nested3.call(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested3.call(); } - [@vm.call-site-attributes.metadata=receiverType:() →* void] nested2.call<#lib::C7*, #lib::C8*>(); - [@vm.call-site-attributes.metadata=receiverType:() →* void] nested2.call*, dart.core::List<#lib::C8*>*>(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested2.call<#lib::C7*, #lib::C8*>(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested2.call*, dart.core::List<#lib::C8*>*>(); } - [@vm.call-site-attributes.metadata=receiverType:() →* void] nested1.call<#lib::C5*, #lib::C6*>(); - [@vm.call-site-attributes.metadata=receiverType:() →* void] nested1.call*, dart.core::List<#lib::C6*>*>(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested1.call<#lib::C5*, #lib::C6*>(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested1.call*, dart.core::List<#lib::C6*>*>(); } } class B extends dart.core::Object { @@ -1798,12 +1798,12 @@ ConstantPool { z = x.{dart.core::num::+}(2); w = this.{#lib::B::foo}.{dart.core::num::+}(y); } - [@vm.call-site-attributes.metadata=receiverType:() →* void] closure2.call(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] closure2.call(); dart.core::print(w); } }; - [@vm.call-site-attributes.metadata=receiverType:(dart.core::int*) →* dart.core::Null?] closure1.call(10); - [@vm.call-site-attributes.metadata=receiverType:(dart.core::int*) →* dart.core::Null?] closure1.call(11); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] closure1.call(10); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] closure1.call(11); dart.core::print(y); dart.core::print(z); } @@ -1814,7 +1814,7 @@ ConstantPool { () →* dart.core::Null? closure3 = () → dart.core::Null? { this.{#lib::B::foo} = x; }; - [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] closure3.call(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] closure3.call(); } } } @@ -1827,8 +1827,8 @@ ConstantPool { dart.core::List* getI = []; dart.core::List* setI = []; for (dart.core::int* i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) { - [@vm.call-site-attributes.metadata=receiverType:dart.core::List*] getI.{dart.core::List::add}(() → dart.core::int* => i.{dart.core::num::+}(delta)); - [@vm.call-site-attributes.metadata=receiverType:dart.core::List*] setI.{dart.core::List::add}((dart.core::int* ii) → dart.core::Null? { + [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::List*)] getI.{dart.core::List::add}(() → dart.core::int* => i.{dart.core::num::+}(delta)); + [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::List*)] setI.{dart.core::List::add}((dart.core::int* ii) → dart.core::Null? { i = ii.{dart.core::num::+}(delta); }); } @@ -1842,7 +1842,7 @@ ConstantPool { () →* dart.core::Null? inc = () → dart.core::Null? { i = i.{dart.core::num::+}(1); }; - [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] inc.call(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] inc.call(); dart.core::print(i); } } @@ -1859,7 +1859,7 @@ ConstantPool { method bar() → dynamic { return () → dart.core::Null? { function inner() → dart.core::Null? {} - [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] inner.call(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] inner.call(); }; } } @@ -1873,18 +1873,18 @@ ConstantPool { abstract method evalArg2() → dart.core::int*; abstract method getE() → #lib::E*; method testCallThroughGetter1() → dart.core::int* - return let final dart.core::int* #t1 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t2 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:(dart.core::int*, dart.core::int*) →* dart.core::int*] this.{#lib::E::foo1}.call(#t1, #t2); + return let final dart.core::int* #t1 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t2 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:FunctionType()] this.{#lib::E::foo1}.call(#t1, #t2); method testCallThroughGetter2() → dart.core::int* - return let final dart.core::int* #t3 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t4 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:(T*, T*) →* dart.core::int*] this.{#lib::E::foo2}.call(#t3, #t4); + return let final dart.core::int* #t3 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t4 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:FunctionType()] this.{#lib::E::foo2}.call(#t3, #t4); method testCallThroughGetter3() → dart.core::int* - return let final #lib::E* #t5 = this.{#lib::E::getE}() in let final dart.core::int* #t6 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t7 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:(T*, T*) →* dart.core::int*] #t5.{#lib::E::foo2}.call(#t6, #t7); + return let final #lib::E* #t5 = this.{#lib::E::getE}() in let final dart.core::int* #t6 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t7 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:FunctionType()] #t5.{#lib::E::foo2}.call(#t6, #t7); } static method simpleClosure() → dart.core::int* { dart.core::int* x = 5; (dart.core::int*) →* dart.core::Null? inc = (dart.core::int* y) → dart.core::Null? { x = x.{dart.core::num::+}(y); }; - [@vm.call-site-attributes.metadata=receiverType:(dart.core::int*) →* dart.core::Null?] inc.call(3); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] inc.call(3); return x; } static method callWithArgs() → void { diff --git a/pkg/vm/testcases/bytecode/try_blocks.dart.expect b/pkg/vm/testcases/bytecode/try_blocks.dart.expect index 4bc3448f5e5..1d0580fb996 100644 --- a/pkg/vm/testcases/bytecode/try_blocks.dart.expect +++ b/pkg/vm/testcases/bytecode/try_blocks.dart.expect @@ -1033,7 +1033,7 @@ ConstantPool { y = 3; } } - [@vm.call-site-attributes.metadata=receiverType:() →* void] foo.call(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] foo.call(); dart.core::print(y); } on dynamic catch(final dynamic e, final dart.core::StackTrace* st) { @@ -1099,7 +1099,7 @@ ConstantPool { dart.core::print(x); dart.core::print(y); } - [@vm.call-site-attributes.metadata=receiverType:() →* void] foo.call(); + [@vm.call-site-attributes.metadata=receiverType:FunctionType()] foo.call(); continue #L4; } finally { diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect index 02d84874e29..1293a71f8ec 100644 --- a/pkg/vm/testcases/bytecode/type_ops.dart.expect +++ b/pkg/vm/testcases/bytecode/type_ops.dart.expect @@ -706,7 +706,7 @@ ConstantPool { if(y is #lib::C*>*) { dart.core::print("22"); } - [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D::P*, #lib::D::Q*>*] this.{#lib::D::foo} = y as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*; + [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::D*)] this.{#lib::D::foo} = y as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*; } method foo3(dynamic z) → dynamic { if(z is #lib::A<#lib::D::foo3::T1*>*) { diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect index f99332f16de..80c11a90d41 100644 --- a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect @@ -6,22 +6,22 @@ RESULT: _T {}? RESULT: _T {}? ------------ #lib::bool_expressions ------------ t0* = _Call direct [#lib::foo] () -t1 = _TypeCheck (t0 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*) +t1 = _TypeCheck (t0 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t2* = _Call direct [#lib::bar] () t3* = _Call [dart.core::num::+] (_T (dart.core::int)+, _T (dart.core::_Smi, 1)) -i_0 = _Join [dart.core::int*] (_T (dart.core::_Smi, 0), t3) +i_0 = _Join [InterfaceType(Reference to root::dart:core::int*)] (_T (dart.core::_Smi, 0), t3) t5* = _Call [dart.core::num::<] (i_0, _T (dart.core::_Smi, 10)) t6* = _Call direct [#lib::bar] () t7* = _Call direct [#lib::foo] () t8 = _Join [dynamic] (_T (dart.core::bool, true), t7) -t9 = _TypeCheck (t8 against dart.core::bool) (for (x{dart.core::bool*} ?{dynamic} true : #lib::foo()) as{TypeError,ForDynamic} dart.core::bool*) +t9 = _TypeCheck (t8 against dart.core::bool) (for AsExpression(ConditionalExpression(VariableGetImpl() ? BoolLiteral(true) : StaticInvocation(Reference to #lib::foo, ArgumentsImpl())) as InterfaceType(Reference to root::dart:core::bool*))) t10* = _Call direct [#lib::bar] () t11* = _Call direct [#lib::bar] () t12* = _Call direct [#lib::foo] () -t13 = _TypeCheck (t12 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*) +t13 = _TypeCheck (t12 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t14* = _Call direct [#lib::foo] () -t15 = _TypeCheck (t14 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*) -y_0 = _Join [dart.core::bool*] (_T (dart.core::bool), _T (dart.core::bool, true)) +t15 = _TypeCheck (t14 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) +y_0 = _Join [InterfaceType(Reference to root::dart:core::bool*)] (_T (dart.core::bool), _T (dart.core::bool, true)) RESULT: _T {}? ------------ #lib::main ------------ diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect index 50d02f9beb9..721f2bd3dd7 100644 --- a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect @@ -38,7 +38,7 @@ t5 = _Call direct [#lib::B::] (_T (#lib::B)) t6 = _Call [#lib::A::foo1] (%aa, _T (#lib::B)) t7 = _Narrow (%aa to _T ANY) t8* = _Call get [#lib::A::foo2] (t7) -t9 = _TypeCheck (t8 against dart.core::int) (for aa.{#lib::A::foo2} as{TypeError,ForDynamic} dart.core::int*) +t9 = _TypeCheck (t8 against dart.core::int) (for AsExpression(PropertyGet(VariableGetImpl().foo2) as InterfaceType(Reference to root::dart:core::int*))) t10 = _Call set [#lib::A::foo3] (t7, t9) t11* = _Call get [#lib::A::foo1] (t7) t12* = _Call get [#lib::A::foo2] (t7) diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect index 774165944ac..b471e61a033 100644 --- a/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect @@ -9,18 +9,18 @@ RESULT: _T (dart.core::int)+ RESULT: _T (dart.core::_OneByteString, abc) ------------ #lib::indexingIntoConstantList1 ------------ %i = _Parameter #0 [_T (dart.core::int)+?] -t1 = _Join [dart.core::int*] (_T (dart.core::_Smi, 1), _T (dart.core::_Smi, 2), _T (dart.core::_Smi, 3)) +t1 = _Join [InterfaceType(Reference to root::dart:core::int*)] (_T (dart.core::_Smi, 1), _T (dart.core::_Smi, 2), _T (dart.core::_Smi, 3)) RESULT: t1 ------------ #lib::indexingIntoConstantList2 ------------ %i = _Parameter #0 [_T (dart.core::int)+?] -t1 = _Join [dart.core::Object*] (_T (dart.core::_OneByteString, hi), _T (dart.core::_Smi, 33), _T {}?, _T (dart.core::_Smi, -5)) +t1 = _Join [InterfaceType(Reference to root::dart:core::Object*)] (_T (dart.core::_OneByteString, hi), _T (dart.core::_Smi, 33), _T {}?, _T (dart.core::_Smi, -5)) RESULT: t1 ------------ #lib::main ------------ RESULT: _T {}? ------------ #lib::_constList1 ------------ -RESULT: _T (dart.core::_ImmutableList, ListConstant([1, 2, 3])) +RESULT: _T (dart.core::_ImmutableList, ListConstant([1, 2, 3])) ------------ #lib::_constList2 ------------ -RESULT: _T (dart.core::_ImmutableList, ListConstant([hi, 33, null, -5])) +RESULT: _T (dart.core::_ImmutableList, ListConstant([hi, 33, null, -5])) diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect index eba938000ac..460c3625c05 100644 --- a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect @@ -28,7 +28,7 @@ t1* = _Call direct get [#lib::TestEnum::_name] (%this) RESULT: t1 ------------ #lib::TestEnum::values ------------ -RESULT: _T (dart.core::_ImmutableList, ListConstant<#lib::TestEnum*>([#lib::TestEnum {index: 0, #lib::_name: TestEnum.v1, }, #lib::TestEnum {index: 1, #lib::_name: TestEnum.v2, }])) +RESULT: _T (dart.core::_ImmutableList, ListConstant([#lib::TestEnum {index: 0, #lib::_name: TestEnum.v1, }, #lib::TestEnum {index: 1, #lib::_name: TestEnum.v2, }])) ------------ #lib::TestEnum::v1 ------------ RESULT: _T (#lib::TestEnum, #lib::TestEnum {index: 0, #lib::_name: TestEnum.v1, }) @@ -71,10 +71,10 @@ RESULT: x_0 t2 = _Call direct [#lib::C1::] (_T (#lib::C1)) t3 = _Call direct [#lib::C2::] (_T (#lib::C2)) t4* = _Call direct [#lib::foo] (_T (#lib::C2)) -t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*) +t5 = _TypeCheck (t4 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t6 = _Call direct [#lib::C3::] (_T (#lib::C3)) t7* = _Call direct [#lib::foo] (_T (#lib::C3)) -t8 = _TypeCheck (t7 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*) +t8 = _TypeCheck (t7 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) x_0 = _Join [dynamic] (_T (#lib::C2), _T (#lib::C3)) t10 = _Call direct [#lib::bar] (x_0) RESULT: x_0 @@ -82,10 +82,10 @@ RESULT: x_0 t0 = _Call direct [#lib::C1::] (_T (#lib::C1)) t1 = _Call direct [#lib::C2::] (_T (#lib::C2)) t2* = _Call direct [#lib::foo] (_T (#lib::C2)) -t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*) +t3 = _TypeCheck (t2 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t4 = _Call direct [#lib::C3::] (_T (#lib::C3)) t5* = _Call direct [#lib::foo] (_T (#lib::C3)) -t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*) +t6 = _TypeCheck (t5 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t7 = _Call direct [#lib::bar] (_T (#lib::C3)) x_0 = _Join [dynamic] (_T (#lib::C2), _T (#lib::C3)) RESULT: x_0 @@ -99,12 +99,12 @@ RESULT: _T {}? %x = _Parameter #0 [_T (dart.core::bool)+?] t1 = _Call direct [#lib::foo] (_T (dart.core::bool, true)) t2 = _Call direct [#lib::bar] (_T (dart.core::bool, false)) -x_0 = _Join [dart.core::bool*] (_T (dart.core::bool, true), _T (dart.core::bool, false)) +x_0 = _Join [InterfaceType(Reference to root::dart:core::bool*)] (_T (dart.core::bool, true), _T (dart.core::bool, false)) t4 = _Call direct [#lib::baz] (x_0) RESULT: _T {}? ------------ #lib::if6b ------------ %x = _Parameter #0 [_T ANY?] -t1 = _TypeCheck (%x against dart.core::bool) (for x as{TypeError,ForDynamic} dart.core::bool*) +t1 = _TypeCheck (%x against dart.core::bool) (for AsExpression(VariableGetImpl() as InterfaceType(Reference to root::dart:core::bool*))) t2 = _Call direct [#lib::foo] (_T (dart.core::bool, true)) t3 = _Call direct [#lib::bar] (_T (dart.core::bool, false)) x_0 = _Join [dynamic] (_T (dart.core::bool, true), _T (dart.core::bool, false)) @@ -138,12 +138,12 @@ RESULT: _T {}? t2 = _Call direct [#lib::C1::] (_T (#lib::C1)) t3 = _Call direct [#lib::C2::] (_T (#lib::C2)) t4* = _Call direct [#lib::foo] (_T (#lib::C2)) -t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*) +t5 = _TypeCheck (t4 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t6 = _Call direct [#lib::C3::] (_T (#lib::C3)) t7 = _Call direct [#lib::C4::] (_T (#lib::C4)) x_0 = _Join [dynamic] (_T (#lib::C3), _T (#lib::C4)) t9 = _Call direct [#lib::foo] (x_0) -t10 = _Join [dart.core::Object*] (_T (#lib::C3), _T (#lib::C4)) +t10 = _Join [InterfaceType(Reference to root::dart:core::Object*)] (_T (#lib::C3), _T (#lib::C4)) t11 = _Narrow (t10 to _T (dart.core::Object)+?) t12 = _Call direct [#lib::bar] (t11) RESULT: _T {}? @@ -153,7 +153,7 @@ RESULT: _T {}? t2 = _Call direct [#lib::C1::] (_T (#lib::C1)) t3 = _Call direct [#lib::C2::] (_T (#lib::C2)) t4* = _Call direct [#lib::foo] (_T (#lib::C2)) -t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*) +t5 = _TypeCheck (t4 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t6 = _Call direct [#lib::C3::] (_T (#lib::C3)) t7 = _Call direct [#lib::C4::] (_T (#lib::C4)) t8* = _Call direct [#lib::foo] (_T (dart.core::_GrowableList<#lib::C4>)) @@ -165,7 +165,7 @@ RESULT: _T {}? t0 = _Call direct [#lib::C1::] (_T (#lib::C1)) x_0 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C2)) t2* = _Call direct [#lib::foo] (x_0) -t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*) +t3 = _TypeCheck (t2 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t4 = _Call direct [#lib::C2::] (_T (#lib::C2)) t5 = _Call direct [#lib::bar] (x_0) RESULT: x_0 @@ -177,13 +177,13 @@ t3 = _Call direct [#lib::C2::] (_T (#lib::C2)) t4 = _Call direct [#lib::bar] (_T (#lib::C2)) t5 = _Call direct [#lib::C3::] (_T (#lib::C3)) t6* = _Call direct [#lib::bar] (_T (#lib::C3)) -t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*) +t7 = _TypeCheck (t6 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::bar, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) RESULT: _T (#lib::C3) ------------ #lib::loop3 ------------ t0 = _Call direct [#lib::C1::] (_T (#lib::C1)) t1 = _Call direct [#lib::C2::] (_T (#lib::C2)) t2* = _Call direct [#lib::foo] (_T (#lib::C2)) -t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*) +t3 = _TypeCheck (t2 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t4 = _Call direct [#lib::C3::] (_T (#lib::C3)) t5 = _Call direct [#lib::bar] (_T (#lib::C2)) RESULT: _T (#lib::C2) @@ -204,10 +204,10 @@ RESULT: x_0 t0 = _Call direct [#lib::C1::] (_T (#lib::C1)) x_0 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C3)) t2* = _Call direct [#lib::foo] (x_0) -t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*) +t3 = _TypeCheck (t2 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t4 = _Call direct [#lib::C2::] (_T (#lib::C2)) t5* = _Call direct [#lib::bar] (_T (#lib::C2)) -t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::bar(x) as{TypeError,ForDynamic} dart.core::bool*) +t6 = _TypeCheck (t5 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::bar, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t7 = _Call direct [#lib::C3::] (_T (#lib::C3)) x_1 = _Join [dynamic] (x_0, _T (#lib::C2)) RESULT: x_1 @@ -216,10 +216,10 @@ t0 = _Call direct [#lib::C1::] (_T (#lib::C1)) x_1 = _Join [dynamic] (_T (#lib::C3), _T (#lib::C2)) x_0 = _Join [dynamic] (_T (#lib::C1), x_1) t3* = _Call direct [#lib::foo] (x_0) -t4 = _TypeCheck (t3 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*) +t4 = _TypeCheck (t3 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t5 = _Call direct [#lib::C2::] (_T (#lib::C2)) t6* = _Call direct [#lib::bar] (_T (#lib::C2)) -t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x) as{TypeError,ForDynamic} dart.core::bool*) +t7 = _TypeCheck (t6 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::bar, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*))) t8 = _Call direct [#lib::C3::] (_T (#lib::C3)) RESULT: x_0 ------------ #lib::try1 ------------ @@ -272,7 +272,7 @@ x_2 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C3)) RESULT: x_2 ------------ #lib::cast1 ------------ %x = _Parameter #0 [_T ANY?] -t1 = _TypeCheck (%x against #lib::C1) (for x as #lib::C1*) +t1 = _TypeCheck (%x against #lib::C1) (for AsExpression(VariableGetImpl() as InterfaceType(Reference to #lib::C1*))) t2 = _Call direct [#lib::foo] (t1) t3 = _Call direct [#lib::bar] (t1) RESULT: _T {}? diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect index 2aff27c9ffd..c6281be8f7d 100644 --- a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect @@ -11,11 +11,11 @@ RESULT: _T {}? %a2 = _Parameter #1 [_T (dart.core::Object)+?] t2* = _Call direct get [#lib::someStatic] () t3 = _Call direct [#lib::A::] (_T (#lib::A)) -a1_0 = _Join [dart.core::Object*] (_T (#lib::A), %a1) +a1_0 = _Join [InterfaceType(Reference to root::dart:core::Object*)] (_T (#lib::A), %a1) t5 = _Call direct [#lib::bar] (a1_0, _T (dart.core::_Smi, 42)) t6 = _Call direct [#lib::B::] (_T (#lib::B)) t7* = _Call [dart.core::Object::==] (_T (#lib::B), %a2) -t8 = _Join [dart.core::Object*] (_T (#lib::B), %a2) +t8 = _Join [InterfaceType(Reference to root::dart:core::Object*)] (_T (#lib::B), %a2) t9 = _Narrow (t8 to _T (dart.core::Object)+?) RESULT: t9 ------------ #lib::bar ------------ @@ -25,7 +25,7 @@ t2 = _Narrow (%a1 to _T (dart.core::int)+) t3* = _Call [dart.core::num::+] (t2, %a2) t4* = _Call [dart.core::num::*] (t3, _T (dart.core::_Smi, 3)) t5* = _Call [dart.core::int::unary-] (_T (dart.core::_Smi, 1)) -%result = _Join [dart.core::int*] (t4, t5) +%result = _Join [InterfaceType(Reference to root::dart:core::int*)] (t4, t5) RESULT: %result ------------ #lib::loop1 ------------ %a1 = _Parameter #0 [_T (dart.core::Object)+?] @@ -35,10 +35,10 @@ RESULT: %a2 ------------ #lib::loop2 ------------ %x = _Parameter #0 [_T (dart.core::int)+?] t1* = _Call [dart.core::num::+] (_T (dart.core::int)+, _T (dart.core::_Smi, 1)) -i_0 = _Join [dart.core::int*] (_T (dart.core::_Smi, 0), t1) +i_0 = _Join [InterfaceType(Reference to root::dart:core::int*)] (_T (dart.core::_Smi, 0), t1) t3* = _Call [dart.core::num::<] (i_0, _T (dart.core::_Smi, 5)) t4* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::_Smi, 10)) -x_0 = _Join [dart.core::int*] (%x, t4) +x_0 = _Join [InterfaceType(Reference to root::dart:core::int*)] (%x, t4) RESULT: x_0 ------------ #lib::main ------------ diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect index fd9dd202d43..6188f8a659f 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect @@ -23,7 +23,7 @@ class E ex : super self::C::•() ; [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foo() → dynamic - return [@vm.inferred-type.metadata=#lib::D] super.{self::C::foo}(); + return [@vm.inferred-type.metadata=#lib::D] super.{self::C::foo}(); [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method bar() → dynamic return new self::D::•(); [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method baz() → dynamic @@ -59,18 +59,18 @@ class C2 extends core::Object { ; [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method id3([@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.0)] generic-covariant-impl core::Comparable* x) → dynamic return x; -[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method id4([@vm.inferred-type.metadata=#lib::K<#lib::J*> (skip check)] generic-covariant-impl self::K*>* x) → dynamic +[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method id4([@vm.inferred-type.metadata=#lib::K (skip check)] generic-covariant-impl self::K*>* x) → dynamic return x; } static method main() → dynamic { - core::print([@vm.direct-call.metadata=#lib::C::foo] [@vm.inferred-type.metadata=#lib::D (skip check)] new self::C::•().{self::C::foo}()); - core::print([@vm.direct-call.metadata=#lib::E::foo] [@vm.inferred-type.metadata=#lib::D (skip check)] new self::E::•().{self::E::foo}()); - core::print([@vm.direct-call.metadata=#lib::E::bar] [@vm.inferred-type.metadata=#lib::D (skip check)] new self::E::•().{self::E::bar}()); - core::print([@vm.direct-call.metadata=#lib::E::baz] [@vm.inferred-type.metadata=#lib::D (skip check)] new self::E::•().{self::E::baz}()); + core::print([@vm.direct-call.metadata=#lib::C::foo] [@vm.inferred-type.metadata=#lib::D (skip check)] new self::C::•().{self::C::foo}()); + core::print([@vm.direct-call.metadata=#lib::E::foo] [@vm.inferred-type.metadata=#lib::D (skip check)] new self::E::•().{self::E::foo}()); + core::print([@vm.direct-call.metadata=#lib::E::bar] [@vm.inferred-type.metadata=#lib::D (skip check)] new self::E::•().{self::E::bar}()); + core::print([@vm.direct-call.metadata=#lib::E::baz] [@vm.inferred-type.metadata=#lib::D (skip check)] new self::E::•().{self::E::baz}()); self::C* c = new self::C::•(); - [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C::id1] [@vm.inferred-type.metadata=!? (skip check)] c.{self::C::id1}(new self::Y::•()); - [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C::id2] c.{self::C::id2}(new self::Z::•()); + [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::C*)] [@vm.direct-call.metadata=#lib::C::id1] [@vm.inferred-type.metadata=!? (skip check)] c.{self::C::id1}(new self::Y::•()); + [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::C*)] [@vm.direct-call.metadata=#lib::C::id2] c.{self::C::id2}(new self::Z::•()); self::C2* c2 = new self::C2::•(); - [@vm.call-site-attributes.metadata=receiverType:#lib::C2*] [@vm.direct-call.metadata=#lib::C2::id3] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id3}(3.0); - [@vm.call-site-attributes.metadata=receiverType:#lib::C2*] [@vm.direct-call.metadata=#lib::C2::id4] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id4}(new self::K::•()); + [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::C2*)] [@vm.direct-call.metadata=#lib::C2::id3] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id3}(3.0); + [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::C2*)] [@vm.direct-call.metadata=#lib::C2::id4] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id4}(new self::K::•()); } diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect index 8c4940c53ad..701445ceaae 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect @@ -10,12 +10,12 @@ class Element extends core::Object { ; } class InheritedElement extends self::Element { -[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<#lib::Element*, dart.core::Object*>] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] final field core::Map* _dependents = {}; +[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] final field core::Map* _dependents = {}; synthetic constructor •() → self::InheritedElement* : super self::Element::•() ; [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method setDependencies([@vm.inferred-type.metadata=!] self::Element* dependent, [@vm.inferred-type.metadata=dart.core::_Smi?] core::Object* value) → void { - [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<#lib::Element*, dart.core::Object*>*] [@vm.direct-call.metadata=dart.collection::__InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin::[]=] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement::_dependents] [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<#lib::Element*, dart.core::Object*>] this.{self::InheritedElement::_dependents}.{core::Map::[]=}(dependent, value); + [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Map*)] [@vm.direct-call.metadata=dart.collection::__InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin::[]=] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement::_dependents] [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap] this.{self::InheritedElement::_dependents}.{core::Map::[]=}(dependent, value); } } static method main() → dynamic { diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect index 5ad5c419f44..9f278403a6b 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect @@ -45,7 +45,7 @@ static method testPassEnum2([@vm.inferred-type.metadata=#lib::B (value: #lib::B } static method getList() → dynamic return #C6; -static method testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant([1, 2, 3]))] dynamic arg1, [[@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant([4, 5]))] dynamic arg2 = #C9]) → void { +static method testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant([1, 2, 3]))] dynamic arg1, [[@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant([4, 5]))] dynamic arg2 = #C9]) → void { core::print(arg1); core::print(arg2); } @@ -56,5 +56,5 @@ static method main() → dynamic { self::testDouble(3.14); self::testStrings(new self::A::•(), "bazz"); self::testPassEnum(#C11); - self::testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant([1, 2, 3]))] self::getList()); + self::testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant([1, 2, 3]))] self::getList()); } diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect index 2f98a40fb0c..c2edab08aec 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect @@ -3,6 +3,6 @@ import self as self; import "dart:core" as core; static method main() → dynamic { - dynamic x = [@vm.inferred-type.metadata=dart.core::_List] core::_List::•(10); + dynamic x = [@vm.inferred-type.metadata=dart.core::_List] core::_List::•(10); [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.direct-call.metadata=dart.core::_List::[]] [@vm.inferred-type.metadata=int? (receiver not int)] x.[](0).+(10); } diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect index be83db06439..406725b3b17 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect @@ -10,21 +10,21 @@ class C extends core::Object { : super core::Object::•() ; [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method test2c([@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] generic-covariant-impl asy::FutureOr* x) → void {} -[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method test3c([@vm.inferred-type.metadata=dart.async::_Future (skip check)] generic-covariant-impl asy::Future* x) → void {} -[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method test4c([@vm.inferred-type.metadata=dart.async::_Future (skip check)] generic-covariant-impl asy::FutureOr* x) → void {} -[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method test2r([@vm.inferred-type.metadata=#lib::C (skip check)] generic-covariant-impl self::C*>* x) → void {} -[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method test3r([@vm.inferred-type.metadata=#lib::C*> (skip check)] generic-covariant-impl self::C*>* x) → void {} -[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method test4r([@vm.inferred-type.metadata=#lib::C*> (skip check)] generic-covariant-impl self::C*>* x) → void {} -[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method test5r([@vm.inferred-type.metadata=#lib::C*>] generic-covariant-impl self::C*>* x) → void {} -[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method test6r([@vm.inferred-type.metadata=#lib::C*> (skip check)] generic-covariant-impl self::C*>* x) → void {} -[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method test7r([@vm.inferred-type.metadata=#lib::C*>] generic-covariant-impl self::C* x) → void {} -[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method test8r([@vm.inferred-type.metadata=#lib::C*>] generic-covariant-impl self::C* x) → void {} +[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method test3c([@vm.inferred-type.metadata=dart.async::_Future (skip check)] generic-covariant-impl asy::Future* x) → void {} +[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method test4c([@vm.inferred-type.metadata=dart.async::_Future (skip check)] generic-covariant-impl asy::FutureOr* x) → void {} +[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method test2r([@vm.inferred-type.metadata=#lib::C (skip check)] generic-covariant-impl self::C*>* x) → void {} +[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method test3r([@vm.inferred-type.metadata=#lib::C (skip check)] generic-covariant-impl self::C*>* x) → void {} +[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method test4r([@vm.inferred-type.metadata=#lib::C (skip check)] generic-covariant-impl self::C*>* x) → void {} +[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method test5r([@vm.inferred-type.metadata=#lib::C] generic-covariant-impl self::C*>* x) → void {} +[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method test6r([@vm.inferred-type.metadata=#lib::C (skip check)] generic-covariant-impl self::C*>* x) → void {} +[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method test7r([@vm.inferred-type.metadata=#lib::C] generic-covariant-impl self::C* x) → void {} +[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method test8r([@vm.inferred-type.metadata=#lib::C] generic-covariant-impl self::C* x) → void {} } static method main() → dynamic { dynamic c = new self::C::•(); [@vm.direct-call.metadata=#lib::C::test2c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test2c(3); - [@vm.direct-call.metadata=#lib::C::test3c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3c([@vm.inferred-type.metadata=dart.async::_Future] asy::Future::value(3)); - [@vm.direct-call.metadata=#lib::C::test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4c([@vm.inferred-type.metadata=dart.async::_Future] asy::Future::value(3)); + [@vm.direct-call.metadata=#lib::C::test3c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3c([@vm.inferred-type.metadata=dart.async::_Future] asy::Future::value(3)); + [@vm.direct-call.metadata=#lib::C::test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4c([@vm.inferred-type.metadata=dart.async::_Future] asy::Future::value(3)); [@vm.direct-call.metadata=#lib::C::test2r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test2r(new self::C::•()); [@vm.direct-call.metadata=#lib::C::test3r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3r(new self::C::•*>()); [@vm.direct-call.metadata=#lib::C::test4r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4r(new self::C::•*>()); diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect index d7385b23964..f97cfd3cb32 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect @@ -16,11 +16,11 @@ class B extends self::A { ; } [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown; -static method foo1_a1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] dynamic x) → void {} +static method foo1_a1([@vm.inferred-type.metadata=dart.async::_Future] dynamic x) → void {} static method foo1_a2([@vm.inferred-type.metadata=#lib::B] dynamic x) → void {} -static method foo1_a3([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] dynamic x) → void {} +static method foo1_a3([@vm.inferred-type.metadata=dart.async::_Future] dynamic x) → void {} static method foo1_a4([@vm.inferred-type.metadata=#lib::B] dynamic x) → void {} -static method foo1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future* a1, [@vm.inferred-type.metadata=#lib::B] self::A* a2, [@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::FutureOr* a3, [@vm.inferred-type.metadata=#lib::B] asy::FutureOr* a4) → void { +static method foo1([@vm.inferred-type.metadata=dart.async::_Future] asy::Future* a1, [@vm.inferred-type.metadata=#lib::B] self::A* a2, [@vm.inferred-type.metadata=dart.async::_Future] asy::FutureOr* a3, [@vm.inferred-type.metadata=#lib::B] asy::FutureOr* a4) → void { self::foo1_a1(a1); self::foo1_a2(a2); self::foo1_a3(a3); @@ -37,8 +37,8 @@ static method foo2([@vm.inferred-type.metadata=dart.async::_Future?] asy::Future self::foo2_a4(a4); } static method getDynamic() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(); static method main(core::List* args) → dynamic { - self::foo1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value(new self::B::•()), new self::B::•()); + self::foo1([@vm.inferred-type.metadata=dart.async::_Future] asy::Future::value(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future] asy::Future::value(new self::B::•()), new self::B::•()); self::foo2(self::getDynamic() as{TypeError,ForDynamic} asy::Future*, self::getDynamic() as{TypeError,ForDynamic} self::A*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr*); } diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect index 6d5cf67ec65..975ada13ef0 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect @@ -64,7 +64,7 @@ class DeepCaller2 extends core::Object { [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown; static field core::Object* field1 = [@vm.inferred-type.metadata=!] self::getValue(); static method getDynamic() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(); static method getValue() → core::Object* { self::A* aa = self::getDynamic() as{TypeError,ForDynamic} self::A*; return [@vm.inferred-type.metadata=!] aa.{self::A::foo}(); diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect index 95c4d004d7e..5685ec8af47 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect @@ -33,7 +33,7 @@ static method use1([@vm.inferred-type.metadata=#lib::Intermediate] self::Interme static method use2([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate* i, [@vm.inferred-type.metadata=#lib::B?] self::A* aa) → dynamic return [@vm.direct-call.metadata=#lib::Intermediate::bar] [@vm.inferred-type.metadata=#lib::T1 (skip check)] i.{self::Intermediate::bar}(aa); static method getDynamic() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(); static method allocateB() → dynamic { new self::B::•(); } diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect index 614926714bb..1718427db26 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect @@ -59,7 +59,7 @@ static method use2([@vm.inferred-type.metadata=#lib::Intermediate] self::Interme static method use3([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate* i, self::A* aa) → dynamic return [@vm.direct-call.metadata=#lib::Intermediate::bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa); static method getDynamic() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(); static method allocateB() → dynamic { new self::B::•(); } diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect index c86de6e58ee..9321536ca53 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect @@ -49,7 +49,7 @@ static method use_bar(dynamic x) → dynamic static method use_bazz(dynamic x) → dynamic return [@vm.inferred-type.metadata=#lib::T3] x.bazz(); static method getDynamic() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(); static method allocateA() → dynamic { new self::A::•(); } diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect index 6698bb7ae12..c4aba2f7c8a 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect @@ -51,7 +51,7 @@ static method use1([@vm.inferred-type.metadata=#lib::DeepCaller1] self::DeepCall static method use2([@vm.inferred-type.metadata=#lib::DeepCaller2] self::DeepCaller2* x, [@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic return [@vm.direct-call.metadata=#lib::DeepCaller2::barL1] [@vm.inferred-type.metadata=! (skip check)] x.{self::DeepCaller2::barL1}(aa); static method getDynamic() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(); static method setField2([@vm.inferred-type.metadata=#lib::A] self::A* aa, [@vm.inferred-type.metadata=#lib::T2] dynamic value) → void { [@vm.direct-call.metadata=#lib::A::field2] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::field2} = value; } diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect index 9372e70f9c8..fdbf579ab9e 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect @@ -28,8 +28,8 @@ class Q extends core::Object { : self::Q::result = result, super core::Object::•() ; } -static method foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::T1*>] core::List* list) → dynamic { - [@vm.direct-call.metadata=#lib::T3::run] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::T1::go??] [@vm.inferred-type.metadata=#lib::T3 (skip check)] [@vm.direct-call.metadata=#lib::Q::result??] [@vm.direct-call.metadata=dart._internal::ListIterable::first] [@vm.inferred-type.metadata=#lib::Q?] [@vm.direct-call.metadata=dart.collection::_ListBase&Object&ListMixin::map] [@vm.inferred-type.metadata=dart._internal::MappedListIterable<#lib::T1*, ?> (skip check)] list.{core::Iterable::map}*>((self::T1* t1) → self::Q* => new self::Q::•(t1)).{core::Iterable::first}.{self::Q::result}.{self::T1::go}().{self::T3::run}(); +static method foo1([@vm.inferred-type.metadata=dart.core::_GrowableList] core::List* list) → dynamic { + [@vm.direct-call.metadata=#lib::T3::run] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::T1::go??] [@vm.inferred-type.metadata=#lib::T3 (skip check)] [@vm.direct-call.metadata=#lib::Q::result??] [@vm.direct-call.metadata=dart._internal::ListIterable::first] [@vm.inferred-type.metadata=#lib::Q?] [@vm.direct-call.metadata=dart.collection::_ListBase&Object&ListMixin::map] [@vm.inferred-type.metadata=dart._internal::MappedListIterable (skip check)] list.{core::Iterable::map}*>((self::T1* t1) → self::Q* => new self::Q::•(t1)).{core::Iterable::first}.{self::Q::result}.{self::T1::go}().{self::T3::run}(); } static method foo2NewValue() → self::Q* return new self::Q::•(new self::T2::•()); diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect index fa129adcd7f..52f7c57f4fd 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect @@ -49,11 +49,11 @@ class B extends self::A { return new self::T1::•(); } [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] no-such-method-forwarder get bar() → dynamic - return _in::unsafeCast([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); + return _in::unsafeCast([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] no-such-method-forwarder method foo() → dynamic - return _in::unsafeCast([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); + return _in::unsafeCast([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [[@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::Null? (value: null)] dynamic a5 = #C1]) → dynamic - return _in::unsafeCast([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable([a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); + return _in::unsafeCast([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable([a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); } abstract class C extends core::Object { synthetic constructor •() → self::C* @@ -68,11 +68,11 @@ class D extends self::C implements self::A { : super self::C::•() ; [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] no-such-method-forwarder get bar() → dynamic - return _in::unsafeCast([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); + return _in::unsafeCast([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] no-such-method-forwarder method foo() → dynamic - return _in::unsafeCast([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); + return _in::unsafeCast([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [[@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::Null? (value: null)] dynamic a5 = #C1]) → dynamic - return _in::unsafeCast([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable([a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); + return _in::unsafeCast([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable([a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); } class E extends core::Object implements self::A { synthetic constructor •() → self::E* @@ -82,7 +82,7 @@ class E extends core::Object implements self::A { return new self::T4::•(); } [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] no-such-method-forwarder get bar() → dynamic - return _in::unsafeCast([@vm.direct-call.metadata=#lib::E::noSuchMethod] [@vm.inferred-type.metadata=#lib::T4 (skip check)] this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); + return _in::unsafeCast([@vm.direct-call.metadata=#lib::E::noSuchMethod] [@vm.inferred-type.metadata=#lib::T4 (skip check)] this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView] core::Map::unmodifiable(#C5)))); } class F extends core::Object { synthetic constructor •() → self::F* @@ -114,7 +114,7 @@ class H extends core::Object { [@vm.inferred-type.metadata=#lib::D?]static field self::A* dd = new self::D::•(); [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown; static method getDynamic() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(); static method main(core::List* args) → dynamic { core::print([@vm.direct-call.metadata=#lib::B::foo??] [@vm.inferred-type.metadata=#lib::T1 (skip check)] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::foo}()); core::print([@vm.direct-call.metadata=#lib::B::bar??] [@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::bar}); diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect index 0378ccece70..3a1361a2821 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect @@ -49,9 +49,9 @@ static method func2(self::T0* t0) → void { [@vm.direct-call.metadata=#lib::T2::foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(); } static method getDynamic() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(); static method use(dynamic x) → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(x); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(x); static method main(core::List* args) → dynamic { self::func1(self::getDynamic() as{TypeError,ForDynamic} self::T0*); self::use(#C1); diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect index a7ca2b50bdc..471befff048 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect @@ -14,18 +14,18 @@ class B extends core::Object { synthetic constructor •() → self::B* : super core::Object::•() ; -[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method _foo([@vm.inferred-type.metadata=dart._internal::ListIterator] core::Iterator* iter) → core::List* { +[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method _foo([@vm.inferred-type.metadata=dart._internal::ListIterator] core::Iterator* iter) → core::List* { core::List* result = []; while ([@vm.direct-call.metadata=dart._internal::ListIterator::moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] iter.{core::Iterator::moveNext}()) { if([@vm.direct-call.metadata=dart.core::_IntegerImplementation::*] [@vm.direct-call.metadata=dart.core::_GrowableList::add] [@vm.inferred-type.metadata=!? (skip check)] result.{core::List::add}(new self::A::•([@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList (skip check)] this.{self::B::_foo}(iter))); + [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::List*)] [@vm.direct-call.metadata=dart.core::_GrowableList::add] [@vm.inferred-type.metadata=!? (skip check)] result.{core::List::add}(new self::A::•([@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList (skip check)] this.{self::B::_foo}(iter))); } return result; } } static method main() → void { - core::List* list = [@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList::iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator][1, 2, 3].{core::Iterable::iterator}); + core::List* list = [@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList::iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator][1, 2, 3].{core::Iterable::iterator}); core::print(list); } diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect index de1797614a4..bb1f31d1fa2 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect @@ -2,7 +2,7 @@ library #lib; import self as self; import "dart:core" as core; -[@vm.unboxing-info.metadata=(b)->i]static method foo([@vm.inferred-type.metadata=dart.core::_GrowableList] core::List* x) → dynamic +[@vm.unboxing-info.metadata=(b)->i]static method foo([@vm.inferred-type.metadata=dart.core::_GrowableList] core::List* x) → dynamic return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=dart.core::_GrowableList::[]] [@vm.inferred-type.metadata=int? (skip check)] x.{core::List::[]}(0)); static method main() → dynamic return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::print([@vm.inferred-type.metadata=int] self::foo([1])); diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect index ab1a24ee663..3b00d52c1da 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect @@ -117,7 +117,7 @@ class B4 extends core::Object { [@vm.inferred-type.metadata=dart.core::_Closure?]static field core::Function* unknown4 = () → dynamic => self::bb4; static method test1() → void { self::B1* bb = new self::B1::•(); - let final self::B1* #t1 = bb in let final core::int* #t2 = 1 in let final core::int* #t3 = 2 in let final core::int* #t4 = 3 in let final core::int* #t5 = 4 in let final self::T1* #t6 = new self::T1::•() in [@vm.call-site-attributes.metadata=receiverType:#lib::A1*] [@vm.direct-call.metadata=#lib::A1::call] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::B1::aa1] [@vm.inferred-type.metadata=#lib::A1] #t1.{self::B1::aa1}.{self::A1::call}(#t2, #t3, #t4, #t5, #t6); + let final self::B1* #t1 = bb in let final core::int* #t2 = 1 in let final core::int* #t3 = 2 in let final core::int* #t4 = 3 in let final core::int* #t5 = 4 in let final self::T1* #t6 = new self::T1::•() in [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::A1*)] [@vm.direct-call.metadata=#lib::A1::call] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::B1::aa1] [@vm.inferred-type.metadata=#lib::A1] #t1.{self::B1::aa1}.{self::A1::call}(#t2, #t3, #t4, #t5, #t6); self::ok = false; [@vm.direct-call.metadata=#lib::T1::doTest1??] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::A1::foo] [@vm.inferred-type.metadata=#lib::T1?] [@vm.direct-call.metadata=#lib::B1::aa1] [@vm.inferred-type.metadata=#lib::A1] bb.{self::B1::aa1}.{self::A1::foo}.{self::T1::doTest1}(); exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok); @@ -130,7 +130,7 @@ static method test2() → void { exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok); } static method getDynamic3() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown3.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown3.call(); static method test3() → void { self::getDynamic3().aa3(1, 2, 3, 4, 5, 6, new self::T3::•()); self::ok = false; @@ -138,7 +138,7 @@ static method test3() → void { exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok); } static method getDynamic4() → dynamic - return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown4.call(); + return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown4.call(); static method test4() → void { self::getDynamic4().aa4(1, 2, 3, 4, 5, 6, 7, new self::T4::•()); self::ok = false; diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect index e3c29962993..f2aa9f54f57 100644 --- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect +++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect @@ -25,5 +25,5 @@ static method knownResult() → dynamic return new self::B::•(); static method main(core::List* args) → dynamic { core::Function* closure = () → self::B* => new self::B::•(); - new self::TearOffDynamicMethod::•([@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] closure.call()); + new self::TearOffDynamicMethod::•([@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] closure.call()); }