[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 <jensj@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
committed by
commit-bot@chromium.org
parent
34742535d6
commit
feefcf0c94
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -754,4 +754,9 @@ class _VariablesDeclaration extends Statement {
|
||||
transformChildren(v) {
|
||||
throw unsupported("transformChildren", fileOffset, uri);
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "_VariablesDeclaration()";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,4 +43,9 @@ class ImplicitTypeArgument extends DartType {
|
||||
|
||||
@override
|
||||
bool equals(Object other, Assumptions assumptions) => this == other;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "ImplicitTypeArgument()";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TreeNode>(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
|
||||
|
||||
@@ -129,6 +129,11 @@ class RedirectingFactoryBody extends ExpressionStatement {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "RedirectingFactoryBody()";
|
||||
}
|
||||
}
|
||||
|
||||
bool isRedirectingFactory(Member member, {EnsureLoaded helper}) {
|
||||
|
||||
@@ -86,6 +86,11 @@ class UnknownType extends DartType {
|
||||
|
||||
@override
|
||||
UnknownType withNullability(Nullability nullability) => this;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return "UnknownType()";
|
||||
}
|
||||
}
|
||||
|
||||
/// Visitor that computes [isKnown].
|
||||
|
||||
@@ -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<dynamic>*');
|
||||
}
|
||||
|
||||
@@ -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<dart.core::Null?>*');
|
||||
}
|
||||
|
||||
@@ -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?');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -109,6 +109,7 @@ bodied
|
||||
body's
|
||||
bof
|
||||
bom
|
||||
bones
|
||||
boolean
|
||||
bother
|
||||
boundness
|
||||
|
||||
+2
-2
@@ -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*)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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*)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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*)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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*)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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*)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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*)
|
||||
}
|
||||
|
||||
@@ -99,13 +99,13 @@ static method id<T extends core::Object* = dynamic>(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 <core::int>
|
||||
#C4 = 0
|
||||
#C5 = con::Class<core::int> {field:#C4}
|
||||
#C6 = TypeLiteralConstant((dynamic) → dynamic)
|
||||
#C7 = TypeLiteralConstant(<T extends dart.core::Object? = dynamic>(T%) → T%)
|
||||
#C7 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T%) → T%)
|
||||
#C8 = <core::int>[#C4]
|
||||
#C9 = null
|
||||
#C10 = <dynamic>[#C4, #C9]
|
||||
@@ -116,11 +116,11 @@ constants {
|
||||
#C15 = core::_ImmutableMap<core::int, core::String> {_kvPairs:#C14}
|
||||
#C16 = false
|
||||
#C17 = <core::int?>[]
|
||||
#C18 = TypeLiteralConstant(dart.core::Object*)
|
||||
#C18 = TypeLiteralConstant(core::Object*)
|
||||
#C19 = partial-instantiation con::id <core::int*>
|
||||
#C20 = con::Class<core::int*> {field:#C4}
|
||||
#C21 = TypeLiteralConstant((dynamic) →* dynamic)
|
||||
#C22 = TypeLiteralConstant(<T extends dart.core::Object* = dynamic>(T*) →* T*)
|
||||
#C22 = TypeLiteralConstant(<T extends core::Object* = dynamic>(T*) →* T*)
|
||||
#C23 = <core::int*>[#C4]
|
||||
#C24 = core::_ImmutableMap<core::int*, core::Null?> {_kvPairs:#C10}
|
||||
#C25 = col::_UnmodifiableSet<core::int*> {_map:#C24}
|
||||
|
||||
@@ -99,13 +99,13 @@ static method id<T extends core::Object* = dynamic>(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 <core::int>
|
||||
#C4 = 0
|
||||
#C5 = con::Class<core::int> {field:#C4}
|
||||
#C6 = TypeLiteralConstant((dynamic) → dynamic)
|
||||
#C7 = TypeLiteralConstant(<T extends dart.core::Object? = dynamic>(T%) → T%)
|
||||
#C7 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T%) → T%)
|
||||
#C8 = <core::int>[#C4]
|
||||
#C9 = null
|
||||
#C10 = <dynamic>[#C4, #C9]
|
||||
@@ -116,11 +116,11 @@ constants {
|
||||
#C15 = core::_ImmutableMap<core::int, core::String> {_kvPairs:#C14}
|
||||
#C16 = false
|
||||
#C17 = <core::int?>[]
|
||||
#C18 = TypeLiteralConstant(dart.core::Object*)
|
||||
#C18 = TypeLiteralConstant(core::Object*)
|
||||
#C19 = partial-instantiation con::id <core::int*>
|
||||
#C20 = con::Class<core::int*> {field:#C4}
|
||||
#C21 = TypeLiteralConstant((dynamic) →* dynamic)
|
||||
#C22 = TypeLiteralConstant(<T extends dart.core::Object* = dynamic>(T*) →* T*)
|
||||
#C22 = TypeLiteralConstant(<T extends core::Object* = dynamic>(T*) →* T*)
|
||||
#C23 = <core::int*>[#C4]
|
||||
#C24 = core::_ImmutableMap<core::int*, core::Null?> {_kvPairs:#C10}
|
||||
#C25 = col::_UnmodifiableSet<core::int*> {_map:#C24}
|
||||
|
||||
@@ -99,13 +99,13 @@ static method id<T extends core::Object* = dynamic>(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 <core::int*>
|
||||
#C4 = 0
|
||||
#C5 = con::Class<core::int*> {field:#C4}
|
||||
#C6 = TypeLiteralConstant((dynamic) →* dynamic)
|
||||
#C7 = TypeLiteralConstant(<T extends dart.core::Object* = dynamic>(T*) →* T*)
|
||||
#C7 = TypeLiteralConstant(<T extends core::Object* = dynamic>(T*) →* T*)
|
||||
#C8 = <core::int*>[#C4]
|
||||
#C9 = null
|
||||
#C10 = <dynamic>[#C4, #C9]
|
||||
|
||||
@@ -99,13 +99,13 @@ static method id<T extends core::Object* = dynamic>(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 <core::int*>
|
||||
#C4 = 0
|
||||
#C5 = con::Class<core::int*> {field:#C4}
|
||||
#C6 = TypeLiteralConstant((dynamic) →* dynamic)
|
||||
#C7 = TypeLiteralConstant(<T extends dart.core::Object* = dynamic>(T*) →* T*)
|
||||
#C7 = TypeLiteralConstant(<T extends core::Object* = dynamic>(T*) →* T*)
|
||||
#C8 = <core::int*>[#C4]
|
||||
#C9 = null
|
||||
#C10 = <dynamic>[#C4, #C9]
|
||||
|
||||
+578
-18
File diff suppressed because it is too large
Load Diff
@@ -2294,6 +2294,16 @@ class Printer extends Visitor<Null> {
|
||||
endLine(')');
|
||||
}
|
||||
|
||||
visitTypeLiteralConstant(TypeLiteralConstant node) {
|
||||
writeIndentation();
|
||||
writeConstantReference(node);
|
||||
writeSpaced('=');
|
||||
writeWord('${node.runtimeType}');
|
||||
writeSymbol('(');
|
||||
writeNode(node.type);
|
||||
endLine(')');
|
||||
}
|
||||
|
||||
visitInstanceConstant(InstanceConstant node) {
|
||||
writeIndentation();
|
||||
writeConstantReference(node);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 {}
|
||||
}
|
||||
|
||||
@@ -1770,13 +1770,13 @@ ConstantPool {
|
||||
dart.core::print(<dart.core::Type*>[#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:<T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() →* void] nested2.call<#lib::C7*, #lib::C8*>();
|
||||
[@vm.call-site-attributes.metadata=receiverType:<T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() →* void] nested2.call<dart.core::List<#lib::C7*>*, 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::C7*>*, dart.core::List<#lib::C8*>*>();
|
||||
}
|
||||
[@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic>() →* void] nested1.call<#lib::C5*, #lib::C6*>();
|
||||
[@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic>() →* void] nested1.call<dart.core::List<#lib::C5*>*, 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::C5*>*, 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<dart.core::Function*>* getI = <dart.core::Function*>[];
|
||||
dart.core::List<dart.core::Function*>* setI = <dart.core::Function*>[];
|
||||
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<dart.core::Function*>*] getI.{dart.core::List::add}(() → dart.core::int* => i.{dart.core::num::+}(delta));
|
||||
[@vm.call-site-attributes.metadata=receiverType:dart.core::List<dart.core::Function*>*] 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 extends dart.core::Object* = dynamic>(T*, T*) →* dart.core::int*] this.{#lib::E::foo2}.call<dart.core::int*>(#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<dart.core::int*>(#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 extends dart.core::Object* = dynamic>(T*, T*) →* dart.core::int*] #t5.{#lib::E::foo2}.call<dart.core::int*>(#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<dart.core::int*>(#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<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic, T3 extends dart.core::Object* = dynamic, T4 extends dart.core::Object* = dynamic, T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic, T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() → void {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -706,7 +706,7 @@ ConstantPool {
|
||||
if(y is #lib::C<dynamic, #lib::D::Q*, dart.core::List<#lib::D::P*>*>*) {
|
||||
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<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic>(dynamic z) → dynamic {
|
||||
if(z is #lib::A<#lib::D::foo3::T1*>*) {
|
||||
|
||||
+6
-6
@@ -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 ------------
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<dart.core::int*>([1, 2, 3]))
|
||||
RESULT: _T (dart.core::_ImmutableList, ListConstant<InterfaceType(Reference to root::dart:core::int*)>([1, 2, 3]))
|
||||
------------ #lib::_constList2 ------------
|
||||
|
||||
RESULT: _T (dart.core::_ImmutableList, ListConstant<dart.core::Object*>([hi, 33, null, -5]))
|
||||
RESULT: _T (dart.core::_ImmutableList, ListConstant<InterfaceType(Reference to root::dart:core::Object*)>([hi, 33, null, -5]))
|
||||
|
||||
+18
-18
@@ -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<InterfaceType(Reference to #lib::TestEnum*)>([#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 {}?
|
||||
|
||||
@@ -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 ------------
|
||||
|
||||
|
||||
+10
-10
@@ -23,7 +23,7 @@ class E<S extends core::Object* = dynamic, T extends core::Object* = dynamic> 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<dart.core::String*>] super.{self::C::foo}();
|
||||
return [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::String*)>] 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::•<self::E::S*>();
|
||||
[@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<T extends core::Object* = dynamic> 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<self::C2::T*>* 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<self::I<self::C2::T*>*>* 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<InterfaceType(Reference to #lib::J*)> (skip check)] generic-covariant-impl self::K<self::I<self::C2::T*>*>* x) → dynamic
|
||||
return x;
|
||||
}
|
||||
static method main() → dynamic {
|
||||
core::print([@vm.direct-call.metadata=#lib::C::foo] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::C::•<core::int*>().{self::C::foo}());
|
||||
core::print([@vm.direct-call.metadata=#lib::E::foo] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::foo}());
|
||||
core::print([@vm.direct-call.metadata=#lib::E::bar] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::bar}());
|
||||
core::print([@vm.direct-call.metadata=#lib::E::baz] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::baz}());
|
||||
core::print([@vm.direct-call.metadata=#lib::C::foo] [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::int*)> (skip check)] new self::C::•<core::int*>().{self::C::foo}());
|
||||
core::print([@vm.direct-call.metadata=#lib::E::foo] [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::String*)> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::foo}());
|
||||
core::print([@vm.direct-call.metadata=#lib::E::bar] [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::int*)> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::bar}());
|
||||
core::print([@vm.direct-call.metadata=#lib::E::baz] [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::String*)> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::baz}());
|
||||
self::C<self::X*>* c = new self::C::•<self::Y*>();
|
||||
[@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<core::num*>* c2 = new self::C2::•<core::num*>();
|
||||
[@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num*>*] [@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<dart.core::num*>*] [@vm.direct-call.metadata=#lib::C2::id4] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id4}(new self::K::•<self::J*>());
|
||||
[@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::•<self::J*>());
|
||||
}
|
||||
|
||||
+2
-2
@@ -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<self::Element*, core::Object*>* _dependents = <self::Element*, core::Object*>{};
|
||||
[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<InterfaceType(Reference to #lib::Element*), InterfaceType(Reference to root::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<self::Element*, core::Object*>* _dependents = <self::Element*, core::Object*>{};
|
||||
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<InterfaceType(Reference to #lib::Element*), InterfaceType(Reference to root::dart:core::Object*)>] this.{self::InheritedElement::_dependents}.{core::Map::[]=}(dependent, value);
|
||||
}
|
||||
}
|
||||
static method main() → dynamic {
|
||||
|
||||
@@ -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<dart.core::int*>([1, 2, 3]))] dynamic arg1, [[@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<dart.core::int*>([4, 5]))] dynamic arg2 = #C9]) → void {
|
||||
static method testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<InterfaceType(Reference to root::dart:core::int*)>([1, 2, 3]))] dynamic arg1, [[@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<InterfaceType(Reference to root::dart:core::int*)>([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<dart.core::int*>([1, 2, 3]))] self::getList());
|
||||
self::testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<InterfaceType(Reference to root::dart:core::int*)>([1, 2, 3]))] self::getList());
|
||||
}
|
||||
|
||||
+1
-1
@@ -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<dart.core::int*>] core::_List::•<core::int*>(10);
|
||||
dynamic x = [@vm.inferred-type.metadata=dart.core::_List<InterfaceType(Reference to root::dart:core::int*)>] core::_List::•<core::int*>(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);
|
||||
}
|
||||
|
||||
@@ -10,21 +10,21 @@ class C<T extends core::Object* = dynamic> 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<self::C::T*>* 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<dart.core::int*> (skip check)] generic-covariant-impl asy::Future<self::C::T*>* 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<dart.core::int*> (skip check)] generic-covariant-impl asy::FutureOr<self::C::T*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method test2r([@vm.inferred-type.metadata=#lib::C<dart.core::int*> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method test3r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int*>*> (skip check)] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method test4r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int*>*> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method test5r([@vm.inferred-type.metadata=#lib::C<dart.async::FutureOr<dart.core::int*>*>] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method test6r([@vm.inferred-type.metadata=#lib::C<dart.async::FutureOr<dart.core::int*>*> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method test7r([@vm.inferred-type.metadata=#lib::C<dart.async::FutureOr<dart.core::int*>*>] generic-covariant-impl self::C<self::C::T*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method test8r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int*>*>] generic-covariant-impl self::C<self::C::T*>* 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<InterfaceType(Reference to root::dart:core::int*)> (skip check)] generic-covariant-impl asy::Future<self::C::T*>* 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<InterfaceType(Reference to root::dart:core::int*)> (skip check)] generic-covariant-impl asy::FutureOr<self::C::T*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method test2r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:core::int*)> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method test3r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::Future*)> (skip check)] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method test4r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::Future*)> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method test5r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::FutureOr*)>] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method test6r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::FutureOr*)> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method test7r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::FutureOr*)>] generic-covariant-impl self::C<self::C::T*>* x) → void {}
|
||||
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method test8r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::Future*)>] generic-covariant-impl self::C<self::C::T*>* x) → void {}
|
||||
}
|
||||
static method main() → dynamic {
|
||||
dynamic c = new self::C::•<core::int*>();
|
||||
[@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<dart.core::int*>] asy::Future::value<core::int*>(3));
|
||||
[@vm.direct-call.metadata=#lib::C::test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*>] asy::Future::value<core::int*>(3));
|
||||
[@vm.direct-call.metadata=#lib::C::test3c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3c([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to root::dart:core::int*)>] asy::Future::value<core::int*>(3));
|
||||
[@vm.direct-call.metadata=#lib::C::test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4c([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to root::dart:core::int*)>] asy::Future::value<core::int*>(3));
|
||||
[@vm.direct-call.metadata=#lib::C::test2r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test2r(new self::C::•<core::int*>());
|
||||
[@vm.direct-call.metadata=#lib::C::test3r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3r(new self::C::•<asy::Future<core::int*>*>());
|
||||
[@vm.direct-call.metadata=#lib::C::test4r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4r(new self::C::•<asy::Future<core::int*>*>());
|
||||
|
||||
@@ -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<InterfaceType(Reference to #lib::B*)>] 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<InterfaceType(Reference to #lib::B*)>] 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<self::A*>* a1, [@vm.inferred-type.metadata=#lib::B] self::A* a2, [@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::FutureOr<self::A*>* a3, [@vm.inferred-type.metadata=#lib::B] asy::FutureOr<self::A*>* a4) → void {
|
||||
static method foo1([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] asy::Future<self::A*>* a1, [@vm.inferred-type.metadata=#lib::B] self::A* a2, [@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] asy::FutureOr<self::A*>* a3, [@vm.inferred-type.metadata=#lib::B] asy::FutureOr<self::A*>* 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<core::String*>* args) → dynamic {
|
||||
self::foo1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•());
|
||||
self::foo1([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•());
|
||||
self::foo2(self::getDynamic() as{TypeError,ForDynamic} asy::Future<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} self::A*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr<self::A*>*);
|
||||
}
|
||||
|
||||
+1
-1
@@ -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}();
|
||||
|
||||
+1
-1
@@ -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::•();
|
||||
}
|
||||
|
||||
+1
-1
@@ -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::•();
|
||||
}
|
||||
|
||||
+1
-1
@@ -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::•();
|
||||
}
|
||||
|
||||
+1
-1
@@ -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;
|
||||
}
|
||||
|
||||
+2
-2
@@ -28,8 +28,8 @@ class Q<T extends core::Object* = dynamic> extends core::Object {
|
||||
: self::Q::result = result, super core::Object::•()
|
||||
;
|
||||
}
|
||||
static method foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::T1*>] core::List<self::T1*>* 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::Q<self::T1*>*>((self::T1* t1) → self::Q<self::T1*>* => new self::Q::•<self::T1*>(t1)).{core::Iterable::first}.{self::Q::result}.{self::T1::go}().{self::T3::run}();
|
||||
static method foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<InterfaceType(Reference to #lib::T1*)>] core::List<self::T1*>* 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<InterfaceType(Reference to #lib::T1*), ?> (skip check)] list.{core::Iterable::map}<self::Q<self::T1*>*>((self::T1* t1) → self::Q<self::T1*>* => new self::Q::•<self::T1*>(t1)).{core::Iterable::first}.{self::Q::result}.{self::T1::go}().{self::T3::run}();
|
||||
}
|
||||
static method foo2NewValue() → self::Q<dynamic>*
|
||||
return new self::Q::•<self::T2*>(new self::T2::•());
|
||||
|
||||
@@ -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<dynamic>([@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<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
|
||||
return _in::unsafeCast<dynamic>([@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<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#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<dynamic>([@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<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
|
||||
return _in::unsafeCast<dynamic>([@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<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#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<dynamic>([@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<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
|
||||
return _in::unsafeCast<dynamic>([@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<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#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<dynamic>([@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<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
|
||||
return _in::unsafeCast<dynamic>([@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<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#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<dynamic>([@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<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
|
||||
return _in::unsafeCast<dynamic>([@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<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#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<dynamic>([@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<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
|
||||
return _in::unsafeCast<dynamic>([@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<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#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<dynamic>([@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<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
|
||||
return _in::unsafeCast<dynamic>([@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<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#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<core::String*>* 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});
|
||||
|
||||
+2
-2
@@ -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<core::String*>* args) → dynamic {
|
||||
self::func1(self::getDynamic() as{TypeError,ForDynamic} self::T0*);
|
||||
self::use(#C1);
|
||||
|
||||
@@ -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<dart.core::int*>] core::Iterator<core::int*>* iter) → core::List<dynamic>* {
|
||||
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method _foo([@vm.inferred-type.metadata=dart._internal::ListIterator<InterfaceType(Reference to root::dart:core::int*)>] core::Iterator<core::int*>* iter) → core::List<dynamic>* {
|
||||
core::List<dynamic>* result = <dynamic>[];
|
||||
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.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart._internal::ListIterator::current] [@vm.inferred-type.metadata=int?] iter.{core::Iterator::current}.{core::num::<}(0)) {
|
||||
return result;
|
||||
}
|
||||
[@vm.call-site-attributes.metadata=receiverType:dart.core::List<dynamic>*] [@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<dynamic> (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<dynamic> (skip check)] this.{self::B::_foo}(iter)));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
static method main() → void {
|
||||
core::List<dynamic>* list = [@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList::iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int*>]<core::int*>[1, 2, 3].{core::Iterable::iterator});
|
||||
core::List<dynamic>* list = [@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList::iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<InterfaceType(Reference to root::dart:core::int*)>]<core::int*>[1, 2, 3].{core::Iterable::iterator});
|
||||
core::print(list);
|
||||
}
|
||||
|
||||
@@ -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<dart.core::int*>] core::List<core::int*>* x) → dynamic
|
||||
[@vm.unboxing-info.metadata=(b)->i]static method foo([@vm.inferred-type.metadata=dart.core::_GrowableList<InterfaceType(Reference to root::dart:core::int*)>] core::List<core::int*>* 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(<core::int*>[1]));
|
||||
|
||||
+3
-3
@@ -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;
|
||||
|
||||
+1
-1
@@ -25,5 +25,5 @@ static method knownResult() → dynamic
|
||||
return new self::B::•();
|
||||
static method main(core::List<core::String*>* 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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user