1
0
mirror of https://github.com/dart-lang/sdk synced 2024-07-05 09:20:04 +00:00

[vm/aot] Split inferred argument type metadata from inferred type metadata

This change moves inferred types of incoming arguments to a separate
metadata. Incoming argument type may be different from inferred
type of a parameter variable as parameter variable could be
modified in the method body.

This is a preparation for adding inferred types of captured
variables - parameter variable can be captured and can have both
inferred type of incoming argument and inferred type of a captured
variable.

TEST=ci
Issue: https://github.com/dart-lang/sdk/issues/51102

Change-Id: I9f77b8f5ed87477424f4fd3d339fdfb8e55abf82
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/320121
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
This commit is contained in:
Alexander Markov 2023-08-15 15:26:14 +00:00 committed by Commit Queue
parent 54234979a3
commit aa74293d3a
69 changed files with 231 additions and 193 deletions

View File

@ -10,7 +10,7 @@ import 'package:kernel/binary/ast_from_binary.dart'
import 'package:vm/metadata/direct_call.dart' show DirectCallMetadataRepository;
import 'package:vm/metadata/inferred_type.dart'
show InferredTypeMetadataRepository;
show InferredTypeMetadataRepository, InferredArgTypeMetadataRepository;
import 'package:vm/metadata/procedure_attributes.dart'
show ProcedureAttributesMetadataRepository;
import 'package:vm/metadata/table_selector.dart'
@ -43,6 +43,7 @@ main(List<String> arguments) async {
// Register VM-specific metadata.
component.addMetadataRepository(new DirectCallMetadataRepository());
component.addMetadataRepository(new InferredTypeMetadataRepository());
component.addMetadataRepository(new InferredArgTypeMetadataRepository());
component.addMetadataRepository(new ProcedureAttributesMetadataRepository());
component.addMetadataRepository(new TableSelectorMetadataRepository());
component.addMetadataRepository(new UnboxingInfoMetadataRepository());

View File

@ -136,3 +136,11 @@ class InferredTypeMetadataRepository extends MetadataRepository<InferredType> {
concreteClassReference, constantValue, flags, null);
}
}
/// Repository for incoming argument [InferredType].
class InferredArgTypeMetadataRepository extends InferredTypeMetadataRepository {
static const String repositoryTag = 'vm.inferred-arg-type.metadata';
@override
String get tag => repositoryTag;
}

View File

@ -304,6 +304,7 @@ class AnnotateKernel extends RecursiveVisitor {
final FieldMorpher fieldMorpher;
final DirectCallMetadataRepository _directCallMetadataRepository;
final InferredTypeMetadataRepository _inferredTypeMetadata;
final InferredArgTypeMetadataRepository _inferredArgTypeMetadata;
final UnreachableNodeMetadataRepository _unreachableNodeMetadata;
final ProcedureAttributesMetadataRepository _procedureAttributesMetadata;
final TableSelectorMetadataRepository _tableSelectorMetadata;
@ -318,14 +319,15 @@ class AnnotateKernel extends RecursiveVisitor {
: _directCallMetadataRepository =
component.metadata[DirectCallMetadataRepository.repositoryTag]
as DirectCallMetadataRepository,
_inferredTypeMetadata = new InferredTypeMetadataRepository(),
_unreachableNodeMetadata = new UnreachableNodeMetadataRepository(),
_procedureAttributesMetadata =
new ProcedureAttributesMetadataRepository(),
_tableSelectorMetadata = new TableSelectorMetadataRepository(),
_unboxingInfoMetadata = new UnboxingInfoMetadataRepository(),
_inferredTypeMetadata = InferredTypeMetadataRepository(),
_inferredArgTypeMetadata = InferredArgTypeMetadataRepository(),
_unreachableNodeMetadata = UnreachableNodeMetadataRepository(),
_procedureAttributesMetadata = ProcedureAttributesMetadataRepository(),
_tableSelectorMetadata = TableSelectorMetadataRepository(),
_unboxingInfoMetadata = UnboxingInfoMetadataRepository(),
_intClass = _typeFlowAnalysis.environment.coreTypes.intClass {
component.addMetadataRepository(_inferredTypeMetadata);
component.addMetadataRepository(_inferredArgTypeMetadata);
component.addMetadataRepository(_unreachableNodeMetadata);
component.addMetadataRepository(_procedureAttributesMetadata);
component.addMetadataRepository(_tableSelectorMetadata);
@ -397,6 +399,13 @@ class AnnotateKernel extends RecursiveVisitor {
}
}
void _setInferredArgType(TreeNode node, Type type, {bool skipCheck = false}) {
final inferredType = _convertType(type, skipCheck: skipCheck);
if (inferredType != null) {
_inferredArgTypeMetadata.mapping[node] = inferredType;
}
}
void _setUnreachable(TreeNode node) {
_unreachableNodeMetadata.mapping[node] = const UnreachableNode();
}
@ -484,7 +493,7 @@ class AnnotateKernel extends RecursiveVisitor {
firstParamIndex + positionalParams.length);
for (int i = 0; i < positionalParams.length; i++) {
_setInferredType(
_setInferredArgType(
positionalParams[i], argTypes.values[firstParamIndex + i],
skipCheck: uncheckedParameters!.contains(positionalParams[i]));
}
@ -494,7 +503,7 @@ class AnnotateKernel extends RecursiveVisitor {
final names = argTypes.names;
for (int i = 0; i < names.length; i++) {
final param = findNamedParameter(member.function!, names[i])!;
_setInferredType(param,
_setInferredArgType(param,
argTypes.values[firstParamIndex + positionalParams.length + i],
skipCheck: uncheckedParameters!.contains(param));
}

View File

@ -15,12 +15,12 @@ abstract final class WChar extends ffi::AbiSpecificInteger /*hasConstConstructor
}
@#C18
final class WCharStruct extends ffi::Struct {
constructor #fromTypedDataBase([@vm.inferred-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::WCharStruct
constructor #fromTypedDataBase([@vm.inferred-arg-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::WCharStruct
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] get a0() → core::int
return [@vm.inferred-type.metadata=int] ffi::_loadAbiSpecificInt<self::WChar>([@vm.direct-call.metadata=dart.ffi::_Compound._typedDataBase] [@vm.inferred-type.metadata=dart.ffi::Pointer] this.{ffi::_Compound::_typedDataBase}{core::Object}, #C20.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->i] set a0([@vm.inferred-type.metadata=dart.core::_Smi] core::int #externalFieldValue) → void
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->i] set a0([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int #externalFieldValue) → void
return [@vm.inferred-type.metadata=int] ffi::_storeAbiSpecificInt<self::WChar>([@vm.direct-call.metadata=dart.ffi::_Compound._typedDataBase] [@vm.inferred-type.metadata=dart.ffi::Pointer] this.{ffi::_Compound::_typedDataBase}{core::Object}, #C20.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue);
[@vm.unboxing-info.metadata=()->i] @#C10
static get #sizeOf() → core::int*
@ -28,7 +28,7 @@ final class WCharStruct extends ffi::Struct {
}
@#C27
final class WCharArrayStruct extends ffi::Struct {
constructor #fromTypedDataBase([@vm.inferred-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::WCharArrayStruct
constructor #fromTypedDataBase([@vm.inferred-arg-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::WCharArrayStruct
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] get a0() → ffi::Array<self::WChar>

View File

@ -15,12 +15,12 @@ abstract final class Incomplete extends ffi::AbiSpecificInteger /*hasConstConstr
}
@#C15
final class IncompleteStruct extends ffi::Struct {
constructor #fromTypedDataBase([@vm.inferred-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::IncompleteStruct
constructor #fromTypedDataBase([@vm.inferred-arg-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::IncompleteStruct
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=()->i] get a0() → core::int
return [@vm.inferred-type.metadata=int] ffi::_loadAbiSpecificInt<self::Incomplete>([@vm.direct-call.metadata=dart.ffi::_Compound._typedDataBase] [@vm.inferred-type.metadata=dart.ffi::Pointer] this.{ffi::_Compound::_typedDataBase}{core::Object}, #C17.{core::List::[]}(ffi::_abi()){(core::int) → core::int*});
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->i] set a0([@vm.inferred-type.metadata=dart.core::_Smi] core::int #externalFieldValue) → void
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->i] set a0([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int #externalFieldValue) → void
return [@vm.inferred-type.metadata=int] ffi::_storeAbiSpecificInt<self::Incomplete>([@vm.direct-call.metadata=dart.ffi::_Compound._typedDataBase] [@vm.inferred-type.metadata=dart.ffi::Pointer] this.{ffi::_Compound::_typedDataBase}{core::Object}, #C17.{core::List::[]}(ffi::_abi()){(core::int) → core::int*}, #externalFieldValue);
[@vm.unboxing-info.metadata=()->i] @#C8
static get #sizeOf() → core::int*
@ -28,7 +28,7 @@ final class IncompleteStruct extends ffi::Struct {
}
@#C24
final class IncompleteArrayStruct extends ffi::Struct {
constructor #fromTypedDataBase([@vm.inferred-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::IncompleteArrayStruct
constructor #fromTypedDataBase([@vm.inferred-arg-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::IncompleteArrayStruct
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] get a0() → ffi::Array<self::Incomplete>

View File

@ -41,16 +41,16 @@ class NativeClassy extends nat::NativeFieldWrapperClass1 {
} =>#t3;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method goodHasReceiverHandle() → void
return self::NativeClassy::_goodHasReceiverHandle$Method$FfiNative$Ptr(this, #C7){(self::NativeClassy, core::int) → void};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method goodHasReceiverHandleAndPtr([@vm.inferred-type.metadata=#lib::NativeClassy] self::NativeClassy v) → void
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method goodHasReceiverHandleAndPtr([@vm.inferred-arg-type.metadata=#lib::NativeClassy] self::NativeClassy v) → void
return block {
final self::NativeClassy #t4 = this;
final nat::NativeFieldWrapperClass1 #t5 = v;
final void #t6 = self::NativeClassy::_goodHasReceiverHandleAndPtr$Method$FfiNative$Ptr(#t4, ffi::_fromAddress<ffi::Void>([@vm.inferred-type.metadata=int] nat::_getNativeField(#t5))){(self::NativeClassy, ffi::Pointer<ffi::Void>) → void};
_in::reachabilityFence(#t5);
} =>#t6;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method goodHasReceiverHandleAndHandle([@vm.inferred-type.metadata=#lib::NativeClassy] self::NativeClassy v) → void
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method goodHasReceiverHandleAndHandle([@vm.inferred-arg-type.metadata=#lib::NativeClassy] self::NativeClassy v) → void
return self::NativeClassy::_goodHasReceiverHandleAndHandle$Method$FfiNative$Ptr(this, v){(self::NativeClassy, self::NativeClassy) → void};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method goodHasReceiverPtrAndHandle([@vm.inferred-type.metadata=#lib::NativeClassy] self::NativeClassy v) → void
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method goodHasReceiverPtrAndHandle([@vm.inferred-arg-type.metadata=#lib::NativeClassy] self::NativeClassy v) → void
return block {
final nat::NativeFieldWrapperClass1 #t7 = this;
final self::NativeClassy #t8 = v;
@ -100,7 +100,7 @@ class NativeClassy extends nat::NativeFieldWrapperClass1 {
} =>#pointerAddress)){(ffi::Pointer<ffi::Void>) → core::bool};
_in::reachabilityFence(#t15);
} =>#t16;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] set myField([@vm.inferred-type.metadata=dart.core::bool] core::bool value) → void
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] set myField([@vm.inferred-arg-type.metadata=dart.core::bool] core::bool value) → void
return block {
final nat::NativeFieldWrapperClass1 #t17 = this;
final core::bool #t18 = value;

View File

@ -14,7 +14,7 @@ class MyFinalizable extends core::Object implements ffi::Finalizable {
}
static method doSomething() → asy::Future<core::int> async /* futureValueType= core::int */
return 3;
static method useFinalizableAsync([@vm.inferred-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → asy::Future<core::int> async /* futureValueType= core::int */ {
static method useFinalizableAsync([@vm.inferred-arg-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → asy::Future<core::int> async /* futureValueType= core::int */ {
await block {
final synthesized asy::Future<core::int> :expressionValueWrappedFinalizable = asy::Future::sync<core::int>(() → core::int => 6);
_in::reachabilityFence(finalizable);

View File

@ -14,7 +14,7 @@ class MyFinalizable extends core::Object implements ffi::Finalizable {
}
[@vm.unboxing-info.metadata=()->i]static method doSomething() → core::int
return 3;
static method useFinalizableAsyncStar([@vm.inferred-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → asy::Stream<core::int> async* {
static method useFinalizableAsyncStar([@vm.inferred-arg-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → asy::Stream<core::int> async* {
final self::MyFinalizable finalizable2 = new self::MyFinalizable::•();
yield block {
final synthesized core::int :expressionValueWrappedFinalizable = self::doSomething();

View File

@ -23,14 +23,14 @@ static method main() → void {
let final core::Object #t1 = new core::Object::•() in self::_extension#1|baz(foo);
_in::reachabilityFence(foo);
}
[@vm.unboxing-info.metadata=(b)->i]static extension-member method _extension#0|bar([@vm.inferred-type.metadata=#lib::Foo] lowered final ffi::Finalizable #this) → core::int {
[@vm.unboxing-info.metadata=(b)->i]static extension-member method _extension#0|bar([@vm.inferred-arg-type.metadata=#lib::Foo] lowered final ffi::Finalizable #this) → core::int {
core::print("123");
return block {
final synthesized core::int :expressionValueWrappedFinalizable = 4;
_in::reachabilityFence(#this);
} =>:expressionValueWrappedFinalizable;
}
[@vm.unboxing-info.metadata=(b)->i]static extension-member method _extension#1|baz([@vm.inferred-type.metadata=#lib::Foo] self::Foo foo) → core::int {
[@vm.unboxing-info.metadata=(b)->i]static extension-member method _extension#1|baz([@vm.inferred-arg-type.metadata=#lib::Foo] self::Foo foo) → core::int {
core::print("456");
return block {
final synthesized core::int :expressionValueWrappedFinalizable = 5;

View File

@ -18,7 +18,7 @@ class A extends core::Object implements ffi::Finalizable {
}
class B extends core::Object implements ffi::Finalizable {
[@vm.inferred-type.metadata=#lib::A] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] final field self::A a;
constructor •([@vm.inferred-type.metadata=#lib::A] self::A a) → self::B
constructor •([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → self::B
: self::B::a = a, super core::Object::•() {
;
_in::reachabilityFence(this);

View File

@ -13,7 +13,7 @@ class MyFinalizable extends core::Object implements ffi::Finalizable {
}
[@vm.unboxing-info.metadata=()->i]static method doSomething() → core::int
return 3;
[@vm.unboxing-info.metadata=(b)->i]static method useFinalizableSync([@vm.inferred-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → core::int {
[@vm.unboxing-info.metadata=(b)->i]static method useFinalizableSync([@vm.inferred-arg-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → core::int {
return block {
final synthesized core::int :expressionValueWrappedFinalizable = [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] self::doSomething();
_in::reachabilityFence(finalizable);

View File

@ -13,7 +13,7 @@ class MyFinalizable extends core::Object implements ffi::Finalizable {
}
[@vm.unboxing-info.metadata=()->i]static method doSomething() → core::int
return 3;
static method useFinalizableSyncStar([@vm.inferred-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → core::Iterable<core::int> sync* {
static method useFinalizableSyncStar([@vm.inferred-arg-type.metadata=#lib::MyFinalizable] ffi::Finalizable finalizable) → core::Iterable<core::int> sync* {
yield block {
final synthesized core::int :expressionValueWrappedFinalizable = self::doSomething();
_in::reachabilityFence(finalizable);

View File

@ -3,7 +3,7 @@ import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
[@vm.unboxing-info.metadata=(i)->b]static method isPrime([@vm.inferred-type.metadata=int] dynamic n) → core::bool {
[@vm.unboxing-info.metadata=(i)->b]static method isPrime([@vm.inferred-arg-type.metadata=int] dynamic n) → core::bool {
if(_in::unsafeCast<core::bool>([@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool] n{dynamic}.<(2)))
return false;
for (core::int i = 2; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<=] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart.core::_IntegerImplementation.*] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::*}(i){(core::num) → core::int}.{core::num::<=}(_in::unsafeCast<core::num>(n)){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num) → core::int}) {

View File

@ -12,9 +12,9 @@ class _Vector extends core::Object {
constructor •() → self::_Vector
: self::_Vector::_offset = 0, self::_Vector::_length = #C1, self::_Vector::_elements = [@vm.inferred-type.metadata=dart.typed_data::_Float64List] typ::Float64List::•(#C1), super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:4] [@vm.unboxing-info.metadata=(i)->d] operator []([@vm.inferred-type.metadata=int] core::int i) → core::double
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:4] [@vm.unboxing-info.metadata=(i)->d] operator []([@vm.inferred-arg-type.metadata=int] core::int i) → core::double
return [@vm.direct-call.metadata=dart.typed_data::_Float64List.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector._elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}{core::List<core::double>}.{core::List::[]}([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector._offset] [@vm.inferred-type.metadata=dart.core::_Smi (value: 0)] this.{self::_Vector::_offset}{core::int}){(core::num) → core::int}){(core::int) → core::double};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] [@vm.unboxing-info.metadata=(b)->d] operator *([@vm.inferred-type.metadata=#lib::_Vector] self::_Vector a) → core::double {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] [@vm.unboxing-info.metadata=(b)->d] operator *([@vm.inferred-arg-type.metadata=#lib::_Vector] self::_Vector a) → core::double {
core::double result = 0.0;
for (core::int i = 0; [@vm.direct-call.metadata=dart.core::_IntegerImplementation.<] [@vm.inferred-type.metadata=dart.core::bool (skip check)] i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector._length] [@vm.inferred-type.metadata=dart.core::_Smi (value: 10)] this.{self::_Vector::_length}{core::int}){(core::num) → core::bool}; i = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] i.{core::num::+}(1){(core::num) → core::int})
result = [@vm.direct-call.metadata=dart.core::_Double.+] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] result.{core::double::+}([@vm.direct-call.metadata=dart.core::_Double.*] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] [@vm.direct-call.metadata=#lib::_Vector.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] this.{self::_Vector::[]}(i){(core::int) → core::double}.{core::double::*}([@vm.direct-call.metadata=#lib::_Vector.[]] [@vm.inferred-type.metadata=dart.core::_Double (skip check)] a.{self::_Vector::[]}(i){(core::int) → core::double}){(core::num) → core::double}){(core::num) → core::double};

View File

@ -8,9 +8,9 @@ class C<T extends core::Object? = dynamic> extends core::Object {
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foo() → dynamic
return new self::D::•<self::C::T%>();
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method id1([@vm.inferred-type.metadata=#lib::Y (skip check)] covariant-by-class self::C::T% x) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method id1([@vm.inferred-arg-type.metadata=#lib::Y (skip check)] covariant-by-class self::C::T% x) → dynamic
return x;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method id2([@vm.inferred-type.metadata=#lib::Z] covariant-by-class self::C::T% x) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method id2([@vm.inferred-arg-type.metadata=#lib::Z] covariant-by-class self::C::T% x) → dynamic
return x;
}
class D<T extends core::Object? = dynamic> extends core::Object {
@ -57,9 +57,9 @@ class C2<T extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::C2<self::C2::T%>
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(d)->d] method id3([@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.0)] covariant-by-class core::Comparable<self::C2::T%> x) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(d)->d] method id3([@vm.inferred-arg-type.metadata=dart.core::_Double (skip check) (value: 3.0)] covariant-by-class 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)] covariant-by-class 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-arg-type.metadata=#lib::K<#lib::J> (skip check)] covariant-by-class self::K<self::I<self::C2::T%>> x) → dynamic
return x;
}
static method main() → dynamic {

View File

@ -14,7 +14,7 @@ class InheritedElement extends self::Element {
synthetic constructor •() → self::InheritedElement
: self::InheritedElement::_dependents = <self::Element, core::Object?>{}, super self::Element::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] method setDependencies([@vm.inferred-type.metadata=!] self::Element dependent, [@vm.inferred-type.metadata=dart.core::_Smi?] core::Object? value) → void {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] method setDependencies([@vm.inferred-arg-type.metadata=!] self::Element dependent, [@vm.inferred-arg-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::__Map&_HashVMBase&MapMixin&_HashBase&_OperatorEqualsAndHashCode&_LinkedHashMapMixin.[]=] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement._dependents] [@vm.inferred-type.metadata=dart.collection::_Map<#lib::Element, dart.core::Object?>] this.{self::InheritedElement::_dependents}{core::Map<self::Element, core::Object?>}.{core::Map::[]=}(dependent, value){(self::Element, core::Object?) → void};
}
}

View File

@ -30,7 +30,7 @@ static method testDouble() → void {
core::print(#C4);
core::print([@vm.inferred-type.metadata=dart.core::_Double (value: 100.0)] self::getD);
}
static method testStrings([@vm.inferred-type.metadata=#lib::A] self::A a0) → void {
static method testStrings([@vm.inferred-arg-type.metadata=#lib::A] self::A a0) → void {
core::print([@vm.direct-call.metadata=#lib::A.foo] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "foo")] a0.{self::A::foo}{core::String});
core::print([@vm.direct-call.metadata=#lib::A.getBar] [@vm.inferred-type.metadata=dart.core::_OneByteString (skip check) (value: "bar")] a0.{self::A::getBar}(){() → core::String});
core::print(#C5);

View File

@ -36,22 +36,22 @@ class E extends core::Object {
}
[@vm.inferred-type.metadata=#lib::D]late static field self::A dd;
[@vm.inferred-type.metadata=#lib::E]static field self::E ee = new self::E::•();
static method callerA1([@vm.inferred-type.metadata=!] self::A aa) → void {
static method callerA1([@vm.inferred-arg-type.metadata=!] self::A aa) → void {
[@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() → core::int};
}
static method callerA2([@vm.inferred-type.metadata=#lib::B] self::A aa) → void {
static method callerA2([@vm.inferred-arg-type.metadata=#lib::B] self::A aa) → void {
[@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() → core::int};
}
static method callerA3([@vm.inferred-type.metadata=#lib::C] self::A aa) → void {
static method callerA3([@vm.inferred-arg-type.metadata=#lib::C] self::A aa) → void {
[@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() → core::int};
}
static method callerA4([@vm.inferred-type.metadata=#lib::D] self::A aa) → void {
static method callerA4([@vm.inferred-arg-type.metadata=#lib::D] self::A aa) → void {
[@vm.direct-call.metadata=#lib::C.foo] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::foo}(){() → core::int};
}
static method callerE1() → void {
[@vm.direct-call.metadata=dart.core::_StringBase.toString] [@vm.inferred-type.metadata=!? (skip check) (receiver not int)] #C1.{core::Object::toString}(){() → core::String};
}
static method callerE2([@vm.inferred-type.metadata=#lib::E] dynamic x) → void {
static method callerE2([@vm.inferred-arg-type.metadata=#lib::E] dynamic x) → void {
[@vm.direct-call.metadata=#lib::E.toString] [@vm.inferred-type.metadata=!? (skip check) (receiver not int)] x.{core::Object::toString}(){() → core::String};
}
static method main(core::List<core::String> args) → dynamic {

View File

@ -9,19 +9,19 @@ import "dart:ffi";
@#C6
final class Struct1 extends ffi::Struct {
constructor #fromTypedDataBase([@vm.inferred-type.metadata=dart.typed_data::_Uint8List] synthesized core::Object #typedDataBase) → self::Struct1
constructor #fromTypedDataBase([@vm.inferred-arg-type.metadata=dart.typed_data::_Uint8List] synthesized core::Object #typedDataBase) → self::Struct1
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
}
@#C6
final class Struct2 extends ffi::Struct {
constructor #fromTypedDataBase([@vm.inferred-type.metadata=dart.typed_data::_Uint8List] synthesized core::Object #typedDataBase) → self::Struct2
constructor #fromTypedDataBase([@vm.inferred-arg-type.metadata=dart.typed_data::_Uint8List] synthesized core::Object #typedDataBase) → self::Struct2
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
}
@#C6
final class Struct3 extends ffi::Struct {
constructor #fromTypedDataBase([@vm.inferred-type.metadata=dart.typed_data::_Uint8List] synthesized core::Object #typedDataBase) → self::Struct3
constructor #fromTypedDataBase([@vm.inferred-arg-type.metadata=dart.typed_data::_Uint8List] synthesized core::Object #typedDataBase) → self::Struct3
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
}
@ -36,7 +36,7 @@ abstract final class Struct7 extends ffi::Struct {
}
@#C10
final class Struct11 extends ffi::Struct {
constructor #fromTypedDataBase([@vm.inferred-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::Struct11
constructor #fromTypedDataBase([@vm.inferred-arg-type.metadata=dart.ffi::Pointer] synthesized core::Object #typedDataBase) → self::Struct11
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] get nested() → self::Struct12
@ -47,7 +47,7 @@ final class Struct11 extends ffi::Struct {
}
@#C6
final class Struct12 extends ffi::Struct {
constructor #fromTypedDataBase([@vm.inferred-type.metadata=!] synthesized core::Object #typedDataBase) → self::Struct12
constructor #fromTypedDataBase([@vm.inferred-arg-type.metadata=!] synthesized core::Object #typedDataBase) → self::Struct12
: super ffi::Struct::_fromTypedDataBase(#typedDataBase)
;
}

View File

@ -9,16 +9,16 @@ class C<T extends core::Object? = dynamic> extends core::Object {
synthetic constructor •() → self::C<self::C::T%>
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->b] method test2c([@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] covariant-by-class 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)] covariant-by-class 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)] covariant-by-class 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)] covariant-by-class self::C<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)] covariant-by-class 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)] covariant-by-class self::C<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<FutureOr<dart.core::int>?>] covariant-by-class 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<FutureOr<dart.core::int>?> (skip check)] covariant-by-class self::C<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<FutureOr<dart.core::int>?>] covariant-by-class 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>>] covariant-by-class self::C<self::C::T%> x) → void {}
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i)->b] method test2c([@vm.inferred-arg-type.metadata=dart.core::_Smi (skip check) (value: 3)] covariant-by-class FutureOr<self::C::T%>x) → void {}
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method test3c([@vm.inferred-arg-type.metadata=dart.async::_Future<dart.core::int> (skip check)] covariant-by-class 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-arg-type.metadata=dart.async::_Future<dart.core::int> (skip check)] covariant-by-class FutureOr<self::C::T%>x) → void {}
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method test2r([@vm.inferred-arg-type.metadata=#lib::C<dart.core::int> (skip check)] covariant-by-class self::C<FutureOr<self::C::T%>> x) → void {}
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method test3r([@vm.inferred-arg-type.metadata=#lib::C<dart.async::Future<dart.core::int>> (skip check)] covariant-by-class 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-arg-type.metadata=#lib::C<dart.async::Future<dart.core::int>> (skip check)] covariant-by-class self::C<FutureOr<self::C::T%>> x) → void {}
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method test5r([@vm.inferred-arg-type.metadata=#lib::C<FutureOr<dart.core::int>?>] covariant-by-class 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-arg-type.metadata=#lib::C<FutureOr<dart.core::int>?> (skip check)] covariant-by-class self::C<FutureOr<self::C::T%>> x) → void {}
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method test7r([@vm.inferred-arg-type.metadata=#lib::C<FutureOr<dart.core::int>?>] covariant-by-class 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-arg-type.metadata=#lib::C<dart.async::Future<dart.core::int>>] covariant-by-class self::C<self::C::T%> x) → void {}
}
static method main() → dynamic {
dynamic c = new self::C::•<core::int>();

View File

@ -20,28 +20,28 @@ static field dynamic usedObject;
static method use(dynamic object) → void {
self::usedObject == null ?{dynamic} self::usedObject = object : null;
}
static method foo1_a1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B>] dynamic x) → void {
static method foo1_a1([@vm.inferred-arg-type.metadata=dart.async::_Future<#lib::B>] dynamic x) → void {
self::use(x);
}
static method foo1_a2([@vm.inferred-type.metadata=#lib::B] dynamic x) → void {
static method foo1_a2([@vm.inferred-arg-type.metadata=#lib::B] dynamic x) → void {
self::use(x);
}
static method foo1_a3([@vm.inferred-type.metadata=dart.async::_Future<#lib::B>] dynamic x) → void {
static method foo1_a3([@vm.inferred-arg-type.metadata=dart.async::_Future<#lib::B>] dynamic x) → void {
self::use(x);
}
static method foo1_a4([@vm.inferred-type.metadata=#lib::B] dynamic x) → void {
static method foo1_a4([@vm.inferred-arg-type.metadata=#lib::B] dynamic x) → void {
self::use(x);
}
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>] FutureOr<self::A>a3, [@vm.inferred-type.metadata=#lib::B] FutureOr<self::A>a4) → void {
static method foo1([@vm.inferred-arg-type.metadata=dart.async::_Future<#lib::B>] asy::Future<self::A> a1, [@vm.inferred-arg-type.metadata=#lib::B] self::A a2, [@vm.inferred-arg-type.metadata=dart.async::_Future<#lib::B>] FutureOr<self::A>a3, [@vm.inferred-arg-type.metadata=#lib::B] FutureOr<self::A>a4) → void {
self::foo1_a1(a1);
self::foo1_a2(a2);
self::foo1_a3(a3);
self::foo1_a4(a4);
}
static method foo2_a1([@vm.inferred-type.metadata=dart.async::_Future?] dynamic x) → void {
static method foo2_a1([@vm.inferred-arg-type.metadata=dart.async::_Future?] dynamic x) → void {
self::use(x);
}
static method foo2_a2([@vm.inferred-type.metadata=#lib::B?] dynamic x) → void {
static method foo2_a2([@vm.inferred-arg-type.metadata=#lib::B?] dynamic x) → void {
self::use(x);
}
static method foo2_a3(dynamic x) → void {
@ -50,7 +50,7 @@ static method foo2_a3(dynamic x) → void {
static method foo2_a4(dynamic x) → void {
self::use(x);
}
static method foo2([@vm.inferred-type.metadata=dart.async::_Future?] asy::Future<self::A>? a1, [@vm.inferred-type.metadata=#lib::B?] self::A? a2, FutureOr<self::A>? a3, FutureOr<self::A>? a4) → void {
static method foo2([@vm.inferred-arg-type.metadata=dart.async::_Future?] asy::Future<self::A>? a1, [@vm.inferred-arg-type.metadata=#lib::B?] self::A? a2, FutureOr<self::A>? a3, FutureOr<self::A>? a4) → void {
self::foo2_a1(a1);
self::foo2_a2(a2);
self::foo2_a3(a3);

View File

@ -17,11 +17,11 @@ extension type IC2(core::int id) {
static method bar1 = self::IC2|bar1;
constructor • = self::IC2|;
}
[@vm.unboxing-info.metadata=(i)->i]static inline-class-member method IC2|([@vm.inferred-type.metadata=int] core::int id) → self::IC2 /* = core::int */ {
[@vm.unboxing-info.metadata=(i)->i]static inline-class-member method IC2|([@vm.inferred-arg-type.metadata=int] core::int id) → self::IC2 /* = core::int */ {
lowered final self::IC2 /* = core::int */ #this = id;
return #this;
}
[@vm.unboxing-info.metadata=(i)->i]static inline-class-member method IC2|foo1([@vm.inferred-type.metadata=dart.core::_Smi (value: 42)] lowered final self::IC2 /* = core::int */ #this) → core::int
[@vm.unboxing-info.metadata=(i)->i]static inline-class-member method IC2|foo1([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 42)] lowered final self::IC2 /* = core::int */ #this) → core::int
return [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] _in::unsafeCast<core::int>(#this).{core::num::+}(1){(core::num) → core::int};
[@vm.unboxing-info.metadata=()->i]static inline-class-member method IC2|bar1() → self::IC2 /* = core::int */
return [@vm.inferred-type.metadata=int] self::IC2|([@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] _in::unsafeCast<core::int>(#C1).{core::num::+}(1){(core::num) → core::int});

View File

@ -17,7 +17,7 @@ class A extends core::Object {
: dynamic #t6 = self::sideEffect(1), dynamic #t7 = [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] self::sideEffect(2), self::A::f7 = [@vm.inferred-type.metadata=dart.core::_Smi (value: 7)] self::sideEffect(7), dynamic #t8 = self::sideEffect(8), dynamic #t9 = [@vm.inferred-type.metadata=dart.core::_Smi (value: 801)] self::sideEffect(801), super core::Object::•()
;
}
[@vm.unboxing-info.metadata=(i)->i]static method sideEffect([@vm.inferred-type.metadata=dart.core::_Smi] core::int x) → core::int {
[@vm.unboxing-info.metadata=(i)->i]static method sideEffect([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int x) → core::int {
core::print(x);
return x;
}

View File

@ -46,7 +46,7 @@ class _GeneratedStreamImpl extends self::_StreamImpl {
}
abstract class StreamView extends self::Stream {
[@vm.inferred-type.metadata=!] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5] final field self::Stream _stream;
constructor •([@vm.inferred-type.metadata=!] self::Stream stream) → self::StreamView
constructor •([@vm.inferred-arg-type.metadata=!] self::Stream stream) → self::StreamView
: self::StreamView::_stream = stream, super self::Stream::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method foobar() → self::StreamSubscription {
@ -54,7 +54,7 @@ abstract class StreamView extends self::Stream {
}
}
class ByteStream extends self::StreamView {
constructor •([@vm.inferred-type.metadata=!] self::Stream stream) → self::ByteStream
constructor •([@vm.inferred-arg-type.metadata=!] self::Stream stream) → self::ByteStream
: super self::StreamView::•(stream)
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7] method super_foobar1() → dynamic {

View File

@ -52,13 +52,13 @@ class DeepCaller2 extends core::Object {
synthetic constructor •() → self::DeepCaller2
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method barL1([@vm.inferred-type.metadata=#lib::D] self::D dd) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method barL1([@vm.inferred-arg-type.metadata=#lib::D] self::D dd) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller2.barL2] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL2}(dd){(self::D) → dynamic};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method barL2([@vm.inferred-type.metadata=#lib::D] self::D dd) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method barL2([@vm.inferred-arg-type.metadata=#lib::D] self::D dd) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller2.barL3] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL3}(dd){(self::D) → dynamic};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method barL3([@vm.inferred-type.metadata=#lib::D] self::D dd) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method barL3([@vm.inferred-arg-type.metadata=#lib::D] self::D dd) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller2.barL4] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL4}(dd){(self::D) → dynamic};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method barL4([@vm.inferred-type.metadata=#lib::D] self::D dd) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method barL4([@vm.inferred-arg-type.metadata=#lib::D] self::D dd) → dynamic
return [@vm.direct-call.metadata=#lib::D.field2] [@vm.inferred-type.metadata=!] dd.{self::D::field2}{core::Object};
}
[@vm.inferred-type.metadata=!]late static field core::Function unknown;
@ -69,9 +69,9 @@ static method getValue() → core::Object {
self::A aa = self::getDynamic() as{TypeError,ForDynamic} self::A;
return [@vm.inferred-type.metadata=!] aa.{self::A::foo}(){() → core::Object};
}
static method use1([@vm.inferred-type.metadata=#lib::DeepCaller1] self::DeepCaller1 x) → dynamic
static method use1([@vm.inferred-arg-type.metadata=#lib::DeepCaller1] self::DeepCaller1 x) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller1.barL1] [@vm.inferred-type.metadata=! (skip check)] x.{self::DeepCaller1::barL1}(){() → dynamic};
static method use2([@vm.inferred-type.metadata=#lib::DeepCaller2] self::DeepCaller2 x) → dynamic
static method use2([@vm.inferred-arg-type.metadata=#lib::DeepCaller2] self::DeepCaller2 x) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller2.barL1] [@vm.inferred-type.metadata=! (skip check)] x.{self::DeepCaller2::barL1}(new self::D::•()){(self::D) → dynamic};
static method createC() → dynamic {
new self::C::•();

View File

@ -24,13 +24,13 @@ class Intermediate extends core::Object {
synthetic constructor •() → self::Intermediate
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method bar([@vm.inferred-type.metadata=#lib::B] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method bar([@vm.inferred-arg-type.metadata=#lib::B] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::B.foo] [@vm.inferred-type.metadata=#lib::T1 (skip check)] aa.{self::A::foo}(){() → dynamic};
}
[@vm.inferred-type.metadata=!]late static field core::Function unknown;
static method use1([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-type.metadata=#lib::B] self::A aa) → dynamic
static method use1([@vm.inferred-arg-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-arg-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){(self::A) → dynamic};
static method use2([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-type.metadata=#lib::B] self::A aa) → dynamic
static method use2([@vm.inferred-arg-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-arg-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){(self::A) → dynamic};
static method getDynamic() → dynamic
return self::unknown();

View File

@ -48,15 +48,15 @@ class Intermediate extends core::Object {
synthetic constructor •() → self::Intermediate
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method bar([@vm.inferred-type.metadata=!] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method bar([@vm.inferred-arg-type.metadata=!] self::A aa) → dynamic
return [@vm.inferred-type.metadata=!] aa.{self::A::foo}(){() → dynamic};
}
[@vm.inferred-type.metadata=!]late static field core::Function unknown;
static method use1([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-type.metadata=!] self::A aa) → dynamic
static method use1([@vm.inferred-arg-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-arg-type.metadata=!] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa){(self::A) → dynamic};
static method use2([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-type.metadata=!] self::A aa) → dynamic
static method use2([@vm.inferred-arg-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-arg-type.metadata=!] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa){(self::A) → dynamic};
static method use3([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-type.metadata=!] self::A aa) → dynamic
static method use3([@vm.inferred-arg-type.metadata=#lib::Intermediate] self::Intermediate i, [@vm.inferred-arg-type.metadata=!] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::Intermediate.bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa){(self::A) → dynamic};
static method getDynamic() → dynamic
return self::unknown();

View File

@ -23,36 +23,36 @@ class DeepCaller1 extends core::Object {
synthetic constructor •() → self::DeepCaller1
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method barL1([@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method barL1([@vm.inferred-arg-type.metadata=#lib::A] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller1.barL2] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::DeepCaller1::barL2}(aa){(self::A) → dynamic};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method barL2([@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] method barL2([@vm.inferred-arg-type.metadata=#lib::A] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller1.barL3] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::DeepCaller1::barL3}(aa){(self::A) → dynamic};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method barL3([@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method barL3([@vm.inferred-arg-type.metadata=#lib::A] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller1.barL4] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::DeepCaller1::barL4}(aa){(self::A) → dynamic};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method barL4([@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method barL4([@vm.inferred-arg-type.metadata=#lib::A] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::A.field1] [@vm.inferred-type.metadata=#lib::T1] aa.{self::A::field1}{dynamic};
}
class DeepCaller2 extends core::Object {
synthetic constructor •() → self::DeepCaller2
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method barL1([@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method barL1([@vm.inferred-arg-type.metadata=#lib::A] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller2.barL2] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL2}(aa){(self::A) → dynamic};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method barL2([@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method barL2([@vm.inferred-arg-type.metadata=#lib::A] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller2.barL3] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL3}(aa){(self::A) → dynamic};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method barL3([@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method barL3([@vm.inferred-arg-type.metadata=#lib::A] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller2.barL4] [@vm.inferred-type.metadata=! (skip check)] this.{self::DeepCaller2::barL4}(aa){(self::A) → dynamic};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method barL4([@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method barL4([@vm.inferred-arg-type.metadata=#lib::A] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::A.field2] [@vm.inferred-type.metadata=!] aa.{self::A::field2}{dynamic};
}
[@vm.inferred-type.metadata=!]late static field core::Function unknown;
static method use1([@vm.inferred-type.metadata=#lib::DeepCaller1] self::DeepCaller1 x, [@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
static method use1([@vm.inferred-arg-type.metadata=#lib::DeepCaller1] self::DeepCaller1 x, [@vm.inferred-arg-type.metadata=#lib::A] self::A aa) → dynamic
return [@vm.direct-call.metadata=#lib::DeepCaller1.barL1] [@vm.inferred-type.metadata=#lib::T1 (skip check)] x.{self::DeepCaller1::barL1}(aa){(self::A) → dynamic};
static method use2([@vm.inferred-type.metadata=#lib::DeepCaller2] self::DeepCaller2 x, [@vm.inferred-type.metadata=#lib::A] self::A aa) → dynamic
static method use2([@vm.inferred-arg-type.metadata=#lib::DeepCaller2] self::DeepCaller2 x, [@vm.inferred-arg-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){(self::A) → dynamic};
static method getDynamic() → dynamic
return self::unknown();
static method setField2([@vm.inferred-type.metadata=#lib::A] self::A aa, [@vm.inferred-type.metadata=#lib::T2] dynamic value) → void {
static method setField2([@vm.inferred-arg-type.metadata=#lib::A] self::A aa, [@vm.inferred-arg-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;
}
static method main(core::List<core::String> args) → dynamic {

View File

@ -24,11 +24,11 @@ class T3 extends core::Object {
}
class Q<T extends core::Object? = dynamic> extends core::Object {
[@vm.inferred-type.metadata=!] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5] final field self::Q::T% result;
constructor •([@vm.inferred-type.metadata=!] self::Q::T% result) → self::Q<self::Q::T%>
constructor •([@vm.inferred-arg-type.metadata=!] self::Q::T% result) → self::Q<self::Q::T%>
: 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 {
static method foo1([@vm.inferred-arg-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.inferred-type.metadata=!] [@vm.direct-call.metadata=dart._internal::ListIterable.first] [@vm.inferred-type.metadata=#lib::Q] [@vm.direct-call.metadata=dart.collection::ListBase.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)){((self::T1) → self::Q<self::T1>) → core::Iterable<self::Q<self::T1>>}.{core::Iterable::first}{self::Q<self::T1>}.{self::Q::result}{self::T1}.{self::T1::go}(){() → self::T3}.{self::T3::run}(){() → dynamic};
}
static method foo2NewValue() → self::Q<dynamic>

View File

@ -19,7 +19,7 @@ class T2 extends core::Object implements self::I {
}
class Point extends core::Object /*hasConstConstructor*/ {
[@vm.inferred-type.metadata=!] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] final field self::I x;
const constructor •([@vm.inferred-type.metadata=!] self::I x) → self::Point
const constructor •([@vm.inferred-arg-type.metadata=!] self::I x) → self::Point
: self::Point::x = x, super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] method newPoint1() → self::Point
@ -27,7 +27,7 @@ class Point extends core::Object /*hasConstConstructor*/ {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7] method newPoint2() → self::Point
return new self::Point::•([@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!] this.{self::Point::x}{self::I});
}
static method getX([@vm.inferred-type.metadata=#lib::Point] dynamic point) → dynamic {
static method getX([@vm.inferred-arg-type.metadata=#lib::Point] dynamic point) → dynamic {
[@vm.direct-call.metadata=#lib::Point.x] [@vm.inferred-type.metadata=!? (receiver not int)] point{dynamic}.x;
}
static method main() → dynamic {

View File

@ -9,7 +9,7 @@ import "dart:math";
import "package:expect/expect.dart";
abstract class TestNamedOrderBase extends core::Object {
[@vm.unboxing-info.metadata=(i,i,i,i)->b] constructor •([@vm.inferred-type.metadata=int] dynamic w, [@vm.inferred-type.metadata=int] core::int? x, [@vm.inferred-type.metadata=int] core::int? y, [@vm.inferred-type.metadata=int] core::int? z) → self::TestNamedOrderBase
[@vm.unboxing-info.metadata=(i,i,i,i)->b] constructor •([@vm.inferred-arg-type.metadata=int] dynamic w, [@vm.inferred-arg-type.metadata=int] core::int? x, [@vm.inferred-arg-type.metadata=int] core::int? y, [@vm.inferred-arg-type.metadata=int] core::int? z) → self::TestNamedOrderBase
: super core::Object::•() {
self::testNamedOrder(_in::unsafeCast<core::int>(w), x, y, z);
}
@ -26,7 +26,7 @@ class TestNamedOrderSub extends self::TestNamedOrderBase {
return self::global = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.+] [@vm.inferred-type.metadata=int (skip check)] [@vm.inferred-type.metadata=int] self::global.{core::num::+}(1){(core::num) → core::int};
[@vm.unboxing-info.metadata=()->i]static method dec() → core::int
return self::global = [@vm.inferred-type.metadata=int] math::max<core::int>(0, self::global = [@vm.direct-call.metadata=dart.core::_IntegerImplementation.-] [@vm.inferred-type.metadata=int (skip check)] [@vm.inferred-type.metadata=int] self::global.{core::num::-}(1){(core::num) → core::int});
[@vm.unboxing-info.metadata=(i,i,i,i)->b]static method testNamedOrder([@vm.inferred-type.metadata=int] core::int w, [@vm.inferred-type.metadata=int] core::int? x, [@vm.inferred-type.metadata=int] core::int? y, [@vm.inferred-type.metadata=int] core::int? z) → void {
[@vm.unboxing-info.metadata=(i,i,i,i)->b]static method testNamedOrder([@vm.inferred-arg-type.metadata=int] core::int w, [@vm.inferred-arg-type.metadata=int] core::int? x, [@vm.inferred-arg-type.metadata=int] core::int? y, [@vm.inferred-arg-type.metadata=int] core::int? z) → void {
exp::Expect::equals(w, 1);
exp::Expect::equals(z, 2);
exp::Expect::equals(y, 3);

View File

@ -54,7 +54,7 @@ class B extends self::A {
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(#C1, 0, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
[@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(#C5, 1, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] [@vm.unboxing-info.metadata=(i,i,i,i)->b] 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) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] [@vm.unboxing-info.metadata=(i,i,i,i)->b] no-such-method-forwarder method bazz([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] dynamic a4) → 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, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
}
abstract class C extends core::Object {
@ -73,7 +73,7 @@ class D extends self::C implements self::A {
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(#C1, 0, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
[@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(#C5, 1, #C2, #C3, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] [@vm.unboxing-info.metadata=(i,i,i,i)->b] 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) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] [@vm.unboxing-info.metadata=(i,i,i,i)->b] no-such-method-forwarder method bazz([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] dynamic a4) → 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, #C2, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal5<dynamic>()), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))){(core::Invocation) → dynamic});
}
class E extends core::Object implements self::A {
@ -106,7 +106,7 @@ class H extends core::Object {
synthetic constructor •() → self::H
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:8,getterSelectorId:9] method foo({[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic left = #C7, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic right = #C7}) → dynamic
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:8,getterSelectorId:9] method foo({[@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 1)] dynamic left = #C7, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic right = #C7}) → dynamic
return new self::T6::•();
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:7] method noSuchMethod(core::Invocation invocation) → dynamic {
return new self::T7::•();

View File

@ -7,16 +7,16 @@ class A extends core::Object {
[@vm.inferred-type.metadata=dart.core::_OneByteString] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] field core::String? nonNullable;
[@vm.inferred-type.metadata=dart.core::_OneByteString?] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] field core::String? nullable;
[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] field core::String? alwaysNull;
constructor •([@vm.inferred-type.metadata=dart.core::_OneByteString] core::String? nonNullable, [@vm.inferred-type.metadata=dart.core::_OneByteString?] core::String? nullable) → self::A
constructor •([@vm.inferred-arg-type.metadata=dart.core::_OneByteString] core::String? nonNullable, [@vm.inferred-arg-type.metadata=dart.core::_OneByteString?] core::String? nullable) → self::A
: self::A::nonNullable = nonNullable, self::A::nullable = nullable, self::A::alwaysNull = #C1, super core::Object::•()
;
}
[@vm.inferred-type.metadata=#lib::A]static field self::A staticField = new self::A::•("hi", "bye");
static method testNonNullable([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic
static method testNonNullable([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic
return _in::unsafeCast<core::String>([@vm.direct-call.metadata=#lib::A.nonNullable] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable}{core::String?});
static method testNullable([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic
static method testNullable([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic
return [@vm.direct-call.metadata=#lib::A.nullable] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}{core::String?}!;
static method testAlwaysNull([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic
static method testAlwaysNull([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic
return [@vm.direct-call.metadata=#lib::A.alwaysNull] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull}{core::String?}!;
static method main() → void {
final core::List<self::A> list = [@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::A>] core::_GrowableList::_literal2<self::A>(new self::A::•("foo", null), [@vm.inferred-type.metadata=#lib::A] self::staticField);

View File

@ -7,22 +7,22 @@ class A extends core::Object {
[@vm.inferred-type.metadata=dart.core::_OneByteString] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] field core::String? nonNullable;
[@vm.inferred-type.metadata=dart.core::_OneByteString?] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] field core::String? nullable;
[@vm.inferred-type.metadata=dart.core::Null? (value: null)] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] field core::String? alwaysNull;
constructor •([@vm.inferred-type.metadata=dart.core::_OneByteString] core::String? nonNullable, [@vm.inferred-type.metadata=dart.core::_OneByteString?] core::String? nullable) → self::A
constructor •([@vm.inferred-arg-type.metadata=dart.core::_OneByteString] core::String? nonNullable, [@vm.inferred-arg-type.metadata=dart.core::_OneByteString?] core::String? nullable) → self::A
: self::A::nonNullable = nonNullable, self::A::nullable = nullable, self::A::alwaysNull = #C1, super core::Object::•()
;
}
[@vm.inferred-type.metadata=#lib::A]static field self::A staticField = new self::A::•("hi", "bye");
static method testNonNullableIf1([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic {
static method testNonNullableIf1([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic {
{
[@vm.direct-call.metadata=#lib::A.nonNullable] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable}{core::String?};
}
}
static method testNullableIf1([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic {
static method testNullableIf1([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic {
if([@vm.direct-call.metadata=#lib::A.nullable] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}{core::String?} == null) {
core::print("null");
}
}
static method testAlwaysNullIf1([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic {
static method testAlwaysNullIf1([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic {
{
[@vm.direct-call.metadata=#lib::A.alwaysNull] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull}{core::String?};
{
@ -30,7 +30,7 @@ static method testAlwaysNullIf1([@vm.inferred-type.metadata=#lib::A] self::A a)
}
}
}
static method testNonNullableIf2([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic {
static method testNonNullableIf2([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic {
if( block {
{
[@vm.direct-call.metadata=#lib::A.nonNullable] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable}{core::String?};
@ -39,23 +39,23 @@ static method testNonNullableIf2([@vm.inferred-type.metadata=#lib::A] self::A a)
core::print("not null");
}
}
static method testNullableIf2([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic {
static method testNullableIf2([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic {
if(!([@vm.direct-call.metadata=#lib::A.nullable] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}{core::String?} == null) && _in::unsafeCast<core::bool>([@vm.inferred-type.metadata=dart.core::bool] self::someCondition())) {
core::print("not null");
}
}
static method testAlwaysNullIf2([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic {
static method testAlwaysNullIf2([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic {
{
[@vm.direct-call.metadata=#lib::A.alwaysNull] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull}{core::String?};
}
}
static method testNonNullableCondExpr([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic
static method testNonNullableCondExpr([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic
return block {
[@vm.direct-call.metadata=#lib::A.nonNullable] [@vm.inferred-type.metadata=dart.core::_OneByteString] a.{self::A::nonNullable}{core::String?};
} =>"not null";
static method testNullableCondExpr([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic
static method testNullableCondExpr([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic
return !([@vm.direct-call.metadata=#lib::A.nullable] [@vm.inferred-type.metadata=dart.core::_OneByteString?] a.{self::A::nullable}{core::String?} == null) ?{core::String} "not null" : "null";
static method testAlwaysNullCondExpr([@vm.inferred-type.metadata=#lib::A] self::A a) → dynamic
static method testAlwaysNullCondExpr([@vm.inferred-arg-type.metadata=#lib::A] self::A a) → dynamic
return block {
[@vm.direct-call.metadata=#lib::A.alwaysNull] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] a.{self::A::alwaysNull}{core::String?};
} =>"null";

View File

@ -5,7 +5,7 @@ import "dart:_internal" as _in;
static method _defaultCheck([dynamic _ = #C1]) → core::bool
return true;
static method testStaticTypeOfConditional<T extends core::Object? = dynamic>([@vm.inferred-type.metadata=dart.core::_Closure] (self::testStaticTypeOfConditional::T%) →? core::bool check) → void {
static method testStaticTypeOfConditional<T extends core::Object? = dynamic>([@vm.inferred-arg-type.metadata=dart.core::_Closure] (self::testStaticTypeOfConditional::T%) →? core::bool check) → void {
if(#C2 is self::testStaticTypeOfConditional::T% && (let final (self::testStaticTypeOfConditional::T%) →? core::bool #t1 = check in _in::unsafeCast<core::Function>(#t1{(self::testStaticTypeOfConditional::T%) → core::bool}))(#C2) as{TypeError,ForDynamic} core::bool) {
core::print("ok");
}

View File

@ -42,7 +42,7 @@ class D extends core::Object {
}
}
[@vm.inferred-type.metadata=!]late static field core::Function unknown;
static method func1([@vm.inferred-type.metadata=#lib::T2] self::T0 t0) → void {
static method func1([@vm.inferred-arg-type.metadata=#lib::T2] self::T0 t0) → void {
[@vm.direct-call.metadata=#lib::T2.foo] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}(){() → void};
}
static method func2(self::T0 t0) → void {

View File

@ -68,7 +68,7 @@ class FooKeep extends pro::GeneratedMessage {
get barKeep() → self::BarKeep
return [@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>(){(core::int) → self::BarKeep};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C9
set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
set barKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(v){(core::int, core::Object) → void};
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] @#C11
@ -78,7 +78,7 @@ class FooKeep extends pro::GeneratedMessage {
get aKeep() → core::int
return [@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4){(core::int) → core::int};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(i)->b] @#C13
set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v){(core::int, core::int) → void};
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] @#C15
@ -108,7 +108,7 @@ class BarKeep extends pro::GeneratedMessage {
get aKeep() → core::int
return [@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(i)->b] @#C9
set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int v) → void {
set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
}
}

View File

@ -50,7 +50,7 @@ class FooKeep extends pro::GeneratedMessage {
constructor _() → self::FooKeep
: super pro::GeneratedMessage::•()
;
static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> i) → self::FooKeep
static factory fromBuffer([@vm.inferred-arg-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> i) → self::FooKeep
return let final self::FooKeep #t4 = [@vm.inferred-type.metadata=foo.pb.dart::FooKeep] self::FooKeep::create() in block {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::GeneratedMessage::mergeFromBuffer}(i){(core::List<core::int>, [pro::ExtensionRegistry]) → void};
} =>#t4;

View File

@ -63,7 +63,7 @@ class FooKeep extends pro::GeneratedMessage {
static method create() → self::FooKeep
return new self::FooKeep::_();
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2] @#C10
set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
set barKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(1, v){(core::int, core::Object) → void};
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3] @#C12
@ -73,15 +73,15 @@ class FooKeep extends pro::GeneratedMessage {
get mapDrop() → core::Map<core::String, self::ZopDrop>
return [@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_getMap] [@vm.inferred-type.metadata=! (skip check)] this.{pro::GeneratedMessage::$_getMap}<core::String, self::ZopDrop>(3){(core::int) → core::Map<core::String, self::ZopDrop>};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] [@vm.unboxing-info.metadata=(i)->b] @#C16
set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v){(core::int, core::int) → void};
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6] @#C18
set hasKeep([@vm.inferred-type.metadata=foo.pb.dart::HasKeep] self::HasKeep v) → void {
set hasKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::HasKeep] self::HasKeep v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(6, v){(core::int, core::Object) → void};
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7] @#C20
set clearKeep([@vm.inferred-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep v) → void {
set clearKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::ClearKeep] self::ClearKeep v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(7, v){(core::int, core::Object) → void};
}
}
@ -102,11 +102,11 @@ class BarKeep extends pro::GeneratedMessage {
static method create() → self::BarKeep
return new self::BarKeep::_();
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:8] [@vm.unboxing-info.metadata=(i)->b] @#C10
set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int v) → void {
set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9] [@vm.unboxing-info.metadata=(i)->b] @#C22
set bDrop([@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] core::int v) → void {
set bDrop([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] core::int v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(1, v){(core::int, core::int) → void};
}
}
@ -158,7 +158,7 @@ class ZopDrop extends pro::GeneratedMessage {
static method create() → self::ZopDrop
return new self::ZopDrop::_();
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:10] [@vm.unboxing-info.metadata=(i)->b] @#C10
set aDrop([@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] core::int v) → void {
set aDrop([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] core::int v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
}
}

View File

@ -72,7 +72,7 @@ class FooKeep extends pro::GeneratedMessage {
get barKeep() → self::BarKeep
return [@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_getN] [@vm.inferred-type.metadata=foo.pb.dart::BarKeep (skip check)] this.{pro::GeneratedMessage::$_getN}<self::BarKeep>(){(core::int) → self::BarKeep};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] @#C9
set barKeep([@vm.inferred-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
set barKeep([@vm.inferred-arg-type.metadata=foo.pb.dart::BarKeep] self::BarKeep v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.setField] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::setField}(v){(core::int, core::Object) → void};
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:4] @#C11
@ -82,7 +82,7 @@ class FooKeep extends pro::GeneratedMessage {
get aKeep() → core::int
return [@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(4){(core::int) → core::int};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(i)->b] @#C13
set aKeep([@vm.inferred-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 43)] core::int v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(4, v){(core::int, core::int) → void};
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] @#C15
@ -112,7 +112,7 @@ class BarKeep extends pro::GeneratedMessage {
get aKeep() → core::int
return [@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_getIZ] [@vm.inferred-type.metadata=int (skip check)] this.{pro::GeneratedMessage::$_getIZ}(0){(core::int) → core::int};
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] [@vm.unboxing-info.metadata=(i)->b] @#C9
set aKeep([@vm.inferred-type.metadata=dart.core::_Smi] core::int v) → void {
set aKeep([@vm.inferred-arg-type.metadata=dart.core::_Smi] core::int v) → void {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.$_setSignedInt32] [@vm.inferred-type.metadata=!? (skip check)] this.{pro::GeneratedMessage::$_setSignedInt32}(0, v){(core::int, core::int) → void};
}
}

View File

@ -40,7 +40,7 @@ class NameManglingKeep extends pro::GeneratedMessage {
constructor _() → self::NameManglingKeep
: super pro::GeneratedMessage::•()
;
static factory fromBuffer([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> i) → self::NameManglingKeep
static factory fromBuffer([@vm.inferred-arg-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<core::int> i) → self::NameManglingKeep
return let final self::NameManglingKeep #t4 = [@vm.inferred-type.metadata=name_mangling.pb.dart::NameManglingKeep] self::NameManglingKeep::create() in block {
[@vm.direct-call.metadata=library package:protobuf/protobuf.dart::GeneratedMessage.mergeFromBuffer] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::GeneratedMessage::mergeFromBuffer}(i){(core::List<core::int>, [pro::ExtensionRegistry]) → void};
} =>#t4;

View File

@ -5,11 +5,11 @@ import "dart:core" as core;
[@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::Object>]static field dynamic list = [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Object>] core::_GrowableList::_literal2<core::Object>("abc", (42, {foo42: "foo42"}));
static method recordLiteral() → dynamic
return (#C1, #C2, {bar: #C3});
[@vm.unboxing-info.metadata=(b)->i]static method recordFieldAccess1([@vm.inferred-type.metadata=dart.core::_Record](core::int, core::String) rec) → dynamic
[@vm.unboxing-info.metadata=(b)->i]static method recordFieldAccess1([@vm.inferred-arg-type.metadata=dart.core::_Record](core::int, core::String) rec) → dynamic
return rec.$1{core::int};
[@vm.unboxing-info.metadata=(b)->i]static method recordFieldAccess2([@vm.inferred-type.metadata=dart.core::_Record]({required a: core::int, required b: core::String}) rec) → dynamic
[@vm.unboxing-info.metadata=(b)->i]static method recordFieldAccess2([@vm.inferred-arg-type.metadata=dart.core::_Record]({required a: core::int, required b: core::String}) rec) → dynamic
return rec.a{core::int};
static method recordDynamicFieldAccess([@vm.inferred-type.metadata=!] dynamic x) → dynamic
static method recordDynamicFieldAccess([@vm.inferred-arg-type.metadata=!] dynamic x) → dynamic
return [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "foo42")] x{dynamic}.foo42;
static method main() → dynamic {
core::print(#C7);

View File

@ -3,11 +3,11 @@ import self as self;
import "dart:core" as core;
[@vm.inferred-type.metadata=dart.core::_GrowableList?<dart.core::Object>]static field dynamic list = <core::Object>["abc", (42, {foo42: "foo42"})];
[@vm.unboxing-info.metadata=(i,i,i)->b]static method recordLiteral([@vm.inferred-type.metadata=dart.core::_BoxedInt] dynamic x, [@vm.inferred-type.metadata=dart.core::_BoxedInt] dynamic y, [@vm.inferred-type.metadata=dart.core::_BoxedInt] dynamic z) → dynamic
[@vm.unboxing-info.metadata=(i,i,i)->b]static method recordLiteral([@vm.inferred-arg-type.metadata=dart.core::_BoxedInt] dynamic x, [@vm.inferred-arg-type.metadata=dart.core::_BoxedInt] dynamic y, [@vm.inferred-arg-type.metadata=dart.core::_BoxedInt] dynamic z) → dynamic
return (x, y, {bar: z});
static method recordFieldAccess1([@vm.inferred-type.metadata=dart.core::Record_2](core::int, core::String) rec) → dynamic
static method recordFieldAccess1([@vm.inferred-arg-type.metadata=dart.core::Record_2](core::int, core::String) rec) → dynamic
return rec.$1{core::int};
static method recordFieldAccess2([@vm.inferred-type.metadata=dart.core::Record_0_a_b]({required a: core::int, required b: core::String}) rec) → dynamic
static method recordFieldAccess2([@vm.inferred-arg-type.metadata=dart.core::Record_0_a_b]({required a: core::int, required b: core::String}) rec) → dynamic
return rec.a{core::int};
static method recordDynamicFieldAccess(dynamic x) → dynamic
return x{dynamic}.foo42;

View File

@ -4,7 +4,7 @@ import "dart:core" as core;
class A extends core::Object {
[@vm.inferred-type.metadata=!] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] final field core::List<dynamic> afield;
constructor •([@vm.inferred-type.metadata=!] core::List<dynamic> afield) → self::A
constructor •([@vm.inferred-arg-type.metadata=!] core::List<dynamic> afield) → self::A
: self::A::afield = afield, super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:2,getterSelectorId:3] method toString() → core::String
@ -14,7 +14,7 @@ class B extends core::Object {
synthetic constructor •() → self::B
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5] 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:4,getterSelectorId:5] method _foo([@vm.inferred-arg-type.metadata=dart._internal::ListIterator<dart.core::int>] core::Iterator<core::int> iter) → core::List<dynamic> {
core::List<dynamic> result = [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::•<dynamic>(0);
while ([@vm.direct-call.metadata=dart._internal::ListIterator.moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] iter.{core::Iterator::moveNext}(){() → core::bool}) {
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::int}.{core::num::<}(0){(core::num) → core::bool}) {

View File

@ -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-arg-type.metadata=dart.core::_GrowableList<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){(core::int) → core::int}){(core::num) → core::int};
static method main() → dynamic
return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::print([@vm.inferred-type.metadata=int] self::foo([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::_GrowableList::_literal1<core::int>(1)));

View File

@ -17,7 +17,7 @@ abstract class _SplayTree<Node extends self::_SplayTreeNode<self::_SplayTree::No
synthetic constructor •() → self::_SplayTree<self::_SplayTree::Node>
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method add([@vm.inferred-type.metadata=#lib::_SplayTreeMapNode<dynamic>] covariant-by-class self::_SplayTree::Node n) → dynamic {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] method add([@vm.inferred-arg-type.metadata=#lib::_SplayTreeMapNode<dynamic>] covariant-by-class self::_SplayTree::Node n) → dynamic {
self::_SplayTree::Node? root = [@vm.direct-call.metadata=#lib::SplayTreeMap._root] [@vm.inferred-type.metadata=#lib::_SplayTreeMapNode<dynamic>] this.{self::_SplayTree::_root}{self::_SplayTree::Node?};
;
core::print([@vm.direct-call.metadata=#lib::_SplayTreeNode.left] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] root{self::_SplayTree::Node}.{self::_SplayTreeNode::left}{self::_SplayTree::Node?});

View File

@ -13,7 +13,7 @@ class A extends core::Object {
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] @#C3
method foo([@vm.inferred-type.metadata=int?] core::int? x) → void
method foo([@vm.inferred-arg-type.metadata=int?] core::int? x) → void
return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd] [@vm.inferred-type.metadata=dart.core::bool] x!.{core::int::isOdd}{core::bool});
}
class B extends core::Object {
@ -21,7 +21,7 @@ class B extends core::Object {
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] @#C3
method foo([@vm.inferred-type.metadata=int] core::int? x) → void
method foo([@vm.inferred-arg-type.metadata=int] core::int? x) → void
return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd] [@vm.inferred-type.metadata=dart.core::bool] _in::unsafeCast<core::int>(x).{core::int::isOdd}{core::bool});
}
class C extends self::A implements self::B {

View File

@ -13,7 +13,7 @@ class A extends core::Object {
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] @#C3
method bar([@vm.inferred-type.metadata=int] core::int? x) → void
method bar([@vm.inferred-arg-type.metadata=int] core::int? x) → void
return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd] [@vm.inferred-type.metadata=dart.core::bool] _in::unsafeCast<core::int>(x).{core::int::isOdd}{core::bool});
}
class B extends core::Object {
@ -21,7 +21,7 @@ class B extends core::Object {
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] @#C3
method bar([@vm.inferred-type.metadata=int?] core::int? x) → void
method bar([@vm.inferred-arg-type.metadata=int?] core::int? x) → void
return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] exp::Expect::isTrue([@vm.direct-call.metadata=dart.core::_IntegerImplementation.isOdd] [@vm.inferred-type.metadata=dart.core::bool] x!.{core::int::isOdd}{core::bool});
}
class C extends self::A implements self::B {

View File

@ -6,7 +6,7 @@ class A extends core::Object {
synthetic constructor •() → self::A
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method doTest([@vm.inferred-type.metadata=#lib::X] self::Z a) → void {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method doTest([@vm.inferred-arg-type.metadata=#lib::X] self::Z a) → void {
core::print([@vm.direct-call.metadata=#lib::Base.appName] [@vm.inferred-type.metadata=dart.core::_OneByteString (value: "x")] a.{self::Z::appName}{core::String?});
}
}

View File

@ -5,7 +5,7 @@ import "dart:_internal" as _in;
class Model<T extends core::num> extends core::Object {
[@vm.inferred-type.metadata=dart.core::_Smi?] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] final field self::Model::T? value;
constructor _([@vm.inferred-type.metadata=dart.core::_Smi?] self::Model::T? value) → self::Model<self::Model::T>
constructor _([@vm.inferred-arg-type.metadata=dart.core::_Smi?] self::Model::T? value) → self::Model<self::Model::T>
: self::Model::value = value, super core::Object::•()
;
static factory •<T extends core::num>() → self::Model<self::Model::•::T> {

View File

@ -2,9 +2,9 @@ library #lib;
import self as self;
import "dart:core" as core;
static method test1([@vm.inferred-type.metadata=dart.core::_Closure] core::Function x, [@vm.inferred-type.metadata=dart.core::_Closure] core::Object y) → core::bool
static method test1([@vm.inferred-arg-type.metadata=dart.core::_Closure] core::Function x, [@vm.inferred-arg-type.metadata=dart.core::_Closure] core::Object y) → core::bool
return [@vm.direct-call.metadata=dart.core::_Closure.==] [@vm.inferred-type.metadata=dart.core::bool (skip check) (receiver not int)] x =={core::Function::==}{(core::Object) → core::bool} y;
static method test2([@vm.inferred-type.metadata=dart.core::_Closure] () → void x, [@vm.inferred-type.metadata=dart.core::_Closure] core::Object y) → core::bool
static method test2([@vm.inferred-arg-type.metadata=dart.core::_Closure] () → void x, [@vm.inferred-arg-type.metadata=dart.core::_Closure] core::Object y) → core::bool
return [@vm.direct-call.metadata=dart.core::_Closure.==] [@vm.inferred-type.metadata=dart.core::bool (skip check) (receiver not int)] x =={core::Object::==}{(core::Object) → core::bool} y;
static method foo1() → void {}
static method foo2() → void {}

View File

@ -5,7 +5,7 @@ import "dart:math" as math;
import "dart:math" show Random;
static method listEquals<E extends core::Object? = dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<self::listEquals::E%> list1, [@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<self::listEquals::E%> list2) → core::bool {
static method listEquals<E extends core::Object? = dynamic>([@vm.inferred-arg-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<self::listEquals::E%> list1, [@vm.inferred-arg-type.metadata=dart.core::_GrowableList<dart.core::int>] core::List<self::listEquals::E%> list2) → core::bool {
if(core::identical(list1, list2)) {
return true;
}

View File

@ -19,7 +19,7 @@ class A1 extends core::Object {
synthetic constructor •() → self::A1
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method call([[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-type.metadata=#lib::T1] dynamic a5 = #C1]) → void {
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] method call([[@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 1)] dynamic a1 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic a2 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] dynamic a3 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-arg-type.metadata=#lib::T1] dynamic a5 = #C1]) → void {
[@vm.direct-call.metadata=#lib::A1.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A1::foo} = _in::unsafeCast<self::T1?>(a5);
}
}
@ -42,7 +42,7 @@ class A2 extends core::Object {
synthetic constructor •() → self::A2
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method call([[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 5)] dynamic a5 = #C1, [@vm.inferred-type.metadata=#lib::T2] dynamic a6 = #C1]) → void {
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method call([[@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 1)] dynamic a1 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic a2 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] dynamic a3 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 5)] dynamic a5 = #C1, [@vm.inferred-arg-type.metadata=#lib::T2] dynamic a6 = #C1]) → void {
[@vm.direct-call.metadata=#lib::A2.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A2::foo} = a6;
}
}
@ -75,7 +75,7 @@ class A3 extends core::Object {
synthetic constructor •() → self::A3
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:24,getterSelectorId:25] method call([[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 5)] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 6)] dynamic a6 = #C1, [@vm.inferred-type.metadata=#lib::T3] dynamic a7 = #C1]) → void {
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:24,getterSelectorId:25] method call([[@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 1)] dynamic a1 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic a2 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] dynamic a3 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 5)] dynamic a5 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 6)] dynamic a6 = #C1, [@vm.inferred-arg-type.metadata=#lib::T3] dynamic a7 = #C1]) → void {
[@vm.direct-call.metadata=#lib::A3.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A3::foo} = a7;
}
}
@ -98,7 +98,7 @@ class A4 extends core::Object {
synthetic constructor •() → self::A4
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:32,getterSelectorId:33] method call([[@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 5)] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 6)] dynamic a6 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 7)] dynamic a7 = #C1, [@vm.inferred-type.metadata=#lib::T4] dynamic a8 = #C1]) → void {
[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:32,getterSelectorId:33] method call([[@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 1)] dynamic a1 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic a2 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 3)] dynamic a3 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 5)] dynamic a5 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 6)] dynamic a6 = #C1, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 7)] dynamic a7 = #C1, [@vm.inferred-arg-type.metadata=#lib::T4] dynamic a8 = #C1]) → void {
[@vm.direct-call.metadata=#lib::A4.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A4::foo} = a8;
}
}

View File

@ -19,7 +19,7 @@ class B<T extends core::Object? = dynamic> extends self::A<core::String> impleme
return throw "Not implemented";
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] no-such-method-forwarder method then<R extends core::Object? = dynamic>((self::B::T%) → FutureOr<self::B::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::B::then::R%>
return _in::unsafeCast<asy::Future<self::B::then::R%>>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<core::Type*>([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::Type*>] core::_GrowableList::_literal1<core::Type*>(self::B::then::R%)), [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onValue)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C3: onError}))){(core::Invocation) → dynamic});
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] no-such-method-forwarder method catchError([@vm.inferred-type.metadata=dart.core::_Closure] core::Function onError) → asy::Future<self::B::T%>
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] no-such-method-forwarder method catchError([@vm.inferred-arg-type.metadata=dart.core::_Closure] core::Function onError) → asy::Future<self::B::T%>
return _in::unsafeCast<asy::Future<self::B::T%>>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C4, 0, #C5, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(onError)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C6: #C1}))){(core::Invocation) → dynamic});
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] no-such-method-forwarder method whenComplete(() → FutureOr<void>action) → asy::Future<self::B::T%>
return _in::unsafeCast<asy::Future<self::B::T%>>([@vm.direct-call.metadata=#lib::B.noSuchMethod] [@vm.inferred-type.metadata=! (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C5, [@vm.inferred-type.metadata=dart.core::_ImmutableList] core::List::unmodifiable<dynamic>([@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic>] core::_GrowableList::_literal1<dynamic>(action)), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C8))){(core::Invocation) → dynamic});

View File

@ -20,7 +20,7 @@ class B extends self::A {
}
class TearOffInterfaceMethod extends core::Object {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] field dynamic bazz;
constructor •([@vm.inferred-type.metadata=#lib::B] self::A arg) → self::TearOffInterfaceMethod
constructor •([@vm.inferred-arg-type.metadata=#lib::B] self::A arg) → self::TearOffInterfaceMethod
: self::TearOffInterfaceMethod::bazz = arg.{self::A::foo}{() → core::int}, super core::Object::•()
;
}

View File

@ -23,7 +23,7 @@ class UsedClass extends core::Object implements self::UnusedInterface {
: super core::Object::•()
;
}
static method usedMethod([@vm.inferred-type.metadata=#lib::UsedClass] self::UnusedInterface c) → dynamic {
static method usedMethod([@vm.inferred-arg-type.metadata=#lib::UsedClass] self::UnusedInterface c) → dynamic {
[@vm.direct-call.metadata=#lib::UsedClass.usedInterfaceField] [@vm.inferred-type.metadata=!? (skip check)] c.{self::UnusedInterface::usedInterfaceField} = [@vm.direct-call.metadata=#lib::UsedClass.usedInterfaceField] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] c.{self::UnusedInterface::usedInterfaceField}{core::int?};
}
static method main() → dynamic {

View File

@ -13,7 +13,7 @@ class Class extends core::Object implements lib::Interface {
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] set /*isLegacy*/ field2(synthesized core::int? value) → void;
}
static method method([@vm.inferred-type.metadata=#lib::Class] lib::Interface i) → void {
static method method([@vm.inferred-arg-type.metadata=#lib::Class] lib::Interface i) → void {
[@vm.direct-call.metadata=#lib::Class.field2] [@vm.inferred-type.metadata=!? (skip check)] i.{lib::Interface::field2} = [@vm.direct-call.metadata=#lib::Class.field1] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] i.{lib::Interface::field1}{core::int?};
[@vm.direct-call.metadata=#lib::Class.field3] [@vm.inferred-type.metadata=!? (skip check)] i.{lib::Interface::field3} = [@vm.direct-call.metadata=#lib::Class.field3] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] i.{lib::Interface::field3}{core::int?};
}

View File

@ -13,7 +13,7 @@ class Class extends core::Object implements lib::Interface {
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5] set /*isLegacy*/ field2(synthesized core::int? value) → void;
}
static method method([@vm.inferred-type.metadata=#lib::Class] lib::Interface i) → void {
static method method([@vm.inferred-arg-type.metadata=#lib::Class] lib::Interface i) → void {
[@vm.direct-call.metadata=#lib::Class.field2] [@vm.inferred-type.metadata=!? (skip check)] i.{lib::Interface::field2} = [@vm.direct-call.metadata=#lib::Class.field1] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] i.{lib::Interface::field1}{core::int?};
[@vm.direct-call.metadata=#lib::Class.field3] [@vm.inferred-type.metadata=!? (skip check)] i.{lib::Interface::field3} = [@vm.direct-call.metadata=#lib::Class.field3] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] i.{lib::Interface::field3}{core::int?};
}

View File

@ -37,19 +37,19 @@ static method testObjectNegative() → dynamic
return let dynamic #t1 = #C2 in #t1 as core::Object;
static method testNullableObject() → dynamic
return #C2;
static method testAOfNum1([@vm.inferred-type.metadata=#lib::B<dart.core::int>] dynamic x) → dynamic
static method testAOfNum1([@vm.inferred-arg-type.metadata=#lib::B<dart.core::int>] dynamic x) → dynamic
return _in::unsafeCast<self::A<core::num>>(x);
static method testAOfNum2negative([@vm.inferred-type.metadata=#lib::B<dart.core::int?>] dynamic x) → dynamic
static method testAOfNum2negative([@vm.inferred-arg-type.metadata=#lib::B<dart.core::int?>] dynamic x) → dynamic
return x as self::A<core::num>;
static method testAOfNum3negative() → dynamic
return #C2 as self::A<core::num>;
static method testAOfNullableNum([@vm.inferred-type.metadata=#lib::B<dart.core::int?>] dynamic x) → dynamic
static method testAOfNullableNum([@vm.inferred-arg-type.metadata=#lib::B<dart.core::int?>] dynamic x) → dynamic
return _in::unsafeCast<self::A<core::num?>>(x);
static method testNullableAOfNum() → dynamic
return _in::unsafeCast<self::A<core::num>?>(#C2);
static method testNullableAOfNumNegative([@vm.inferred-type.metadata=#lib::B<dart.core::int?>] dynamic x) → dynamic
static method testNullableAOfNumNegative([@vm.inferred-arg-type.metadata=#lib::B<dart.core::int?>] dynamic x) → dynamic
return x as self::A<core::num>?;
static method testNullableAOfNullableNum([@vm.inferred-type.metadata=#lib::B<dart.core::int?>] dynamic x) → dynamic
static method testNullableAOfNullableNum([@vm.inferred-arg-type.metadata=#lib::B<dart.core::int?>] dynamic x) → dynamic
return _in::unsafeCast<self::A<core::num?>?>(x);
static method main() → void {
self::testInt1();

View File

@ -7,7 +7,7 @@ abstract class BI1 extends core::Object {
}
class BI1A extends core::Object implements self::BI1 {
[@vm.inferred-type.metadata=int] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:1] final field core::int? value;
[@vm.unboxing-info.metadata=(i)->b] constructor •([@vm.inferred-type.metadata=int] core::int? value) → self::BI1A
[@vm.unboxing-info.metadata=(i)->b] constructor •([@vm.inferred-arg-type.metadata=int] core::int? value) → self::BI1A
: self::BI1A::value = value, super core::Object::•()
;
}
@ -40,7 +40,7 @@ abstract class BI3 extends core::Object {
}
class BI3A extends core::Object implements self::BI3 {
[@vm.inferred-type.metadata=int?] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] field core::int? value;
[@vm.unboxing-info.metadata=(i)->b] constructor •([@vm.inferred-type.metadata=int] core::int? value) → self::BI3A
[@vm.unboxing-info.metadata=(i)->b] constructor •([@vm.inferred-arg-type.metadata=int] core::int? value) → self::BI3A
: self::BI3A::value = value, super core::Object::•()
;
}
@ -50,14 +50,14 @@ class BI3B extends core::Object implements self::BI3 {
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] get value() → core::int?
return [@vm.inferred-type.metadata=int] self::smiOrMint;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] set value([@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::int? v) → void {}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] set value([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] core::int? v) → void {}
}
abstract class UBI extends core::Object {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:5] [@vm.unboxing-info.metadata=()->i] abstract get /*isLegacy*/ value() → core::int?;
}
class UBIA extends core::Object implements self::UBI {
[@vm.inferred-type.metadata=int] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:6,getterSelectorId:5] [@vm.unboxing-info.metadata=(i)->i] field core::int? value;
[@vm.unboxing-info.metadata=(i)->b] constructor •([@vm.inferred-type.metadata=int] core::int? value) → self::UBIA
[@vm.unboxing-info.metadata=(i)->b] constructor •([@vm.inferred-arg-type.metadata=int] core::int? value) → self::UBIA
: self::UBIA::value = value, super core::Object::•()
;
}
@ -74,7 +74,7 @@ class UBIB extends core::Object implements self::UBI {
return -6144092014192636707;
[@vm.unboxing-info.metadata=()->i]static get smiOrMint() → core::int
return [@vm.inferred-type.metadata=dart.core::bool] self::kTrue ?{core::int} 1 : [@vm.inferred-type.metadata=int] self::mint;
static method use([@vm.inferred-type.metadata=int?] dynamic object) → void {
static method use([@vm.inferred-arg-type.metadata=int?] dynamic object) → void {
[@vm.inferred-type.metadata=int?] self::usedObject == null ?{dynamic} self::usedObject = object : null;
}
static method main() → dynamic {

View File

@ -17,7 +17,7 @@ class A extends core::Object {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] field dynamic boxedNullableIntOrDouble;
[@vm.inferred-type.metadata=#lib::X?] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] field dynamic boxedNullableX;
[@vm.inferred-type.metadata=#lib::X] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] field dynamic boxedX;
[@vm.unboxing-info.metadata=(i,i,d,b,b,b,b,b,b)->b] constructor •([@vm.inferred-type.metadata=dart.core::_Smi] dynamic unboxedSmi, [@vm.inferred-type.metadata=int] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=!] dynamic boxedNonNullableIntOrDouble, dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → self::A
[@vm.unboxing-info.metadata=(i,i,d,b,b,b,b,b,b)->b] constructor •([@vm.inferred-arg-type.metadata=dart.core::_Smi] dynamic unboxedSmi, [@vm.inferred-arg-type.metadata=int] dynamic unboxedInt, [@vm.inferred-arg-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-arg-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-arg-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-arg-type.metadata=!] dynamic boxedNonNullableIntOrDouble, dynamic boxedNullableIntOrDouble, [@vm.inferred-arg-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedX) → self::A
: self::A::unboxedSmi = unboxedSmi, self::A::unboxedInt = unboxedInt, self::A::unboxedDouble = unboxedDouble, self::A::boxedNullableInt = boxedNullableInt, self::A::boxedNullableDouble = boxedNullableDouble, self::A::boxedNonNullableIntOrDouble = boxedNonNullableIntOrDouble, self::A::boxedNullableIntOrDouble = boxedNullableIntOrDouble, self::A::boxedNullableX = boxedNullableX, self::A::boxedX = boxedX, super core::Object::•()
;
}

View File

@ -23,7 +23,7 @@ class Impl1 extends core::Object implements self::Interface {
synthetic constructor •() → self::Impl1
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b] method takePositional([@vm.inferred-type.metadata=int] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=!] dynamic boxedNonNullableIntOrDouble, [@vm.inferred-type.metadata=dart.core::_Double?] dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → void {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b] method takePositional([@vm.inferred-arg-type.metadata=int] dynamic unboxedInt, [@vm.inferred-arg-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-arg-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-arg-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-arg-type.metadata=!] dynamic boxedNonNullableIntOrDouble, [@vm.inferred-arg-type.metadata=dart.core::_Double?] dynamic boxedNullableIntOrDouble, [@vm.inferred-arg-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedX) → void {
self::use(unboxedInt);
self::use(unboxedDouble);
self::use(boxedNullableInt);
@ -56,7 +56,7 @@ class BaseImpl2 extends core::Object {
synthetic constructor •() → self::BaseImpl2
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b] method takePositional([@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double (value: 2.2)] dynamic unboxedDouble, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double (value: 2.2)] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=dart.core::_Double (value: 2.2)] dynamic boxedNonNullableIntOrDouble, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → void {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b] method takePositional([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic unboxedInt, [@vm.inferred-arg-type.metadata=dart.core::_Double (value: 2.2)] dynamic unboxedDouble, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic boxedNullableInt, [@vm.inferred-arg-type.metadata=dart.core::_Double (value: 2.2)] dynamic boxedNullableDouble, [@vm.inferred-arg-type.metadata=dart.core::_Double (value: 2.2)] dynamic boxedNonNullableIntOrDouble, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic boxedNullableIntOrDouble, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedNullableX, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedX) → void {
self::use(unboxedInt);
self::use(unboxedDouble);
self::use(boxedNullableInt);
@ -89,7 +89,7 @@ class SubImpl3 extends self::BaseImpl2 implements self::Interface {
synthetic constructor •() → self::SubImpl3
: super self::BaseImpl2::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b] method takePositional([@vm.inferred-type.metadata=int] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-type.metadata=int] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=dart.core::_Double] dynamic boxedNonNullableIntOrDouble, [@vm.inferred-type.metadata=!] dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → void {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] [@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b] method takePositional([@vm.inferred-arg-type.metadata=int] dynamic unboxedInt, [@vm.inferred-arg-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-arg-type.metadata=int] dynamic boxedNullableInt, [@vm.inferred-arg-type.metadata=dart.core::_Double] dynamic boxedNullableDouble, [@vm.inferred-arg-type.metadata=dart.core::_Double] dynamic boxedNonNullableIntOrDouble, [@vm.inferred-arg-type.metadata=!] dynamic boxedNullableIntOrDouble, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedNullableX, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedX) → void {
self::use(unboxedInt);
self::use(unboxedDouble);
self::use(boxedNullableInt);

View File

@ -56,7 +56,7 @@ class BaseImpl2 extends core::Object {
synthetic constructor •() → self::BaseImpl2
: super core::Object::•()
;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method takePositional([@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] core::int? unboxedSmi, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double (value: 2.2)] dynamic unboxedDouble, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double (value: 2.2)] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=dart.core::_Double (value: 2.2)] dynamic boxedNonNullableIntOrDouble, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → void {
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2] method takePositional([@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] core::int? unboxedSmi, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic unboxedInt, [@vm.inferred-arg-type.metadata=dart.core::_Double (value: 2.2)] dynamic unboxedDouble, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic boxedNullableInt, [@vm.inferred-arg-type.metadata=dart.core::_Double (value: 2.2)] dynamic boxedNullableDouble, [@vm.inferred-arg-type.metadata=dart.core::_Double (value: 2.2)] dynamic boxedNonNullableIntOrDouble, [@vm.inferred-arg-type.metadata=dart.core::_Smi (value: 2)] dynamic boxedNullableIntOrDouble, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedNullableX, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedX) → void {
self::use(unboxedInt);
self::use(unboxedDouble);
self::use(boxedNullableInt);
@ -66,23 +66,23 @@ class BaseImpl2 extends core::Object {
self::use(boxedNullableX);
self::use(boxedX);
}
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] [@vm.unboxing-info.metadata=(b)->i] method returnUnboxedSmi([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4] [@vm.unboxing-info.metadata=(b)->i] method returnUnboxedSmi([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
return 2;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(b)->i] method returnUnboxedInt([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6] [@vm.unboxing-info.metadata=(b)->i] method returnUnboxedInt([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
return [@vm.inferred-type.metadata=int] self::mint;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] [@vm.unboxing-info.metadata=(b)->d] method returnUnboxedDouble([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8] [@vm.unboxing-info.metadata=(b)->d] method returnUnboxedDouble([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
return 2.2;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method returnBoxedNullableInt([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10] method returnBoxedNullableInt([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
return 2;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method returnBoxedNullableDouble([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12] method returnBoxedNullableDouble([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
return 2.2;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method returnBoxedIntOrDouble([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14] method returnBoxedIntOrDouble([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
return 2.2;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method returnBoxedNullableIntOrDouble([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16] method returnBoxedNullableIntOrDouble([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
return 2;
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method returnBoxedNullableX([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18] method returnBoxedNullableX([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
return new self::X::•();
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method returnBoxedX([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20] method returnBoxedX([@vm.inferred-arg-type.metadata=dart.core::Null? (value: null)] self::X? ignored) → dynamic
return new self::X::•();
}
class SubImpl3 extends self::BaseImpl2 implements self::Interface {

View File

@ -17,7 +17,7 @@ static field dynamic usedObject;
static method use(dynamic object) → void {
self::usedObject == null ?{dynamic} self::usedObject = object : null;
}
[@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b]static method takePositional([@vm.inferred-type.metadata=int] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=!] dynamic boxedIntOrDouble, dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → void {
[@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b]static method takePositional([@vm.inferred-arg-type.metadata=int] dynamic unboxedInt, [@vm.inferred-arg-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-arg-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-arg-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-arg-type.metadata=!] dynamic boxedIntOrDouble, dynamic boxedNullableIntOrDouble, [@vm.inferred-arg-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedX) → void {
self::use(unboxedInt);
self::use(unboxedDouble);
self::use(boxedNullableInt);
@ -27,7 +27,7 @@ static method use(dynamic object) → void {
self::use(boxedNullableX);
self::use(boxedX);
}
[@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b]static method takeOptional([@vm.inferred-type.metadata=int] dynamic unboxedInt, [@vm.inferred-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=!] dynamic boxedIntOrDouble, dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX) → void {
[@vm.unboxing-info.metadata=(i,d,b,b,b,b,b,b)->b]static method takeOptional([@vm.inferred-arg-type.metadata=int] dynamic unboxedInt, [@vm.inferred-arg-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-arg-type.metadata=int?] dynamic boxedNullableInt, [@vm.inferred-arg-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-arg-type.metadata=!] dynamic boxedIntOrDouble, dynamic boxedNullableIntOrDouble, [@vm.inferred-arg-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedX) → void {
self::use(unboxedInt);
self::use(unboxedDouble);
self::use(boxedNullableInt);
@ -37,7 +37,7 @@ static method use(dynamic object) → void {
self::use(boxedNullableX);
self::use(boxedX);
}
[@vm.unboxing-info.metadata=(b,b,b,b,b,b,d,i)->b]static method takeNamed([@vm.inferred-type.metadata=!] dynamic boxedIntOrDouble, [@vm.inferred-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-type.metadata=int?] dynamic boxedNullableInt, dynamic boxedNullableIntOrDouble, [@vm.inferred-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-type.metadata=#lib::X] dynamic boxedX, [@vm.inferred-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-type.metadata=int] dynamic unboxedInt) → void {
[@vm.unboxing-info.metadata=(b,b,b,b,b,b,d,i)->b]static method takeNamed([@vm.inferred-arg-type.metadata=!] dynamic boxedIntOrDouble, [@vm.inferred-arg-type.metadata=dart.core::_Double?] dynamic boxedNullableDouble, [@vm.inferred-arg-type.metadata=int?] dynamic boxedNullableInt, dynamic boxedNullableIntOrDouble, [@vm.inferred-arg-type.metadata=#lib::X?] dynamic boxedNullableX, [@vm.inferred-arg-type.metadata=#lib::X] dynamic boxedX, [@vm.inferred-arg-type.metadata=dart.core::_Double] dynamic unboxedDouble, [@vm.inferred-arg-type.metadata=int] dynamic unboxedInt) → void {
self::use(unboxedInt);
self::use(unboxedDouble);
self::use(boxedNullableInt);

View File

@ -24,7 +24,7 @@ class B extends core::Object {
return 1;
static method used2() → core::String
return [@vm.direct-call.metadata=dart.core::_Smi.toString] [@vm.inferred-type.metadata=dart.core::_OneByteString (skip check)] 2.{core::int::toString}(){() → core::String};
static method register([@vm.inferred-type.metadata=dart.core::_Closure?] () →? core::String getAccessor) → void {
static method register([@vm.inferred-arg-type.metadata=dart.core::_Closure?] () →? core::String getAccessor) → void {
if(!(getAccessor == null)) {
core::print(getAccessor{() → core::String}(){() → core::String});
}

View File

@ -1802,8 +1802,9 @@ DirectCallMetadata DirectCallMetadataHelper::GetDirectTargetForMethodInvocation(
InferredTypeMetadataHelper::InferredTypeMetadataHelper(
KernelReaderHelper* helper,
ConstantReader* constant_reader)
: MetadataHelper(helper, tag(), /* precompiler_only = */ true),
ConstantReader* constant_reader,
InferredTypeMetadataHelper::Kind kind)
: MetadataHelper(helper, tag(kind), /* precompiler_only = */ true),
constant_reader_(constant_reader) {}
InferredTypeMetadata InferredTypeMetadataHelper::GetInferredType(

View File

@ -1048,10 +1048,23 @@ struct InferredTypeMetadata {
// Helper class which provides access to inferred type metadata.
class InferredTypeMetadataHelper : public MetadataHelper {
public:
static const char* tag() { return "vm.inferred-type.metadata"; }
enum class Kind {
Type, // Inferred type of a call, field or variable.
ArgType, // Inferred incoming argument type.
};
static const char* tag(Kind kind) {
switch (kind) {
case Kind::Type:
return "vm.inferred-type.metadata";
case Kind::ArgType:
return "vm.inferred-arg-type.metadata";
}
}
explicit InferredTypeMetadataHelper(KernelReaderHelper* helper,
ConstantReader* constant_reader);
ConstantReader* constant_reader,
Kind kind = Kind::Type);
InferredTypeMetadata GetInferredType(intptr_t node_offset,
bool read_constant = true);

View File

@ -33,6 +33,10 @@ ScopeBuilder::ScopeBuilder(ParsedFunction* parsed_function)
parsed_function->function().KernelLibraryOffset()),
constant_reader_(&helper_, &active_class_),
inferred_type_metadata_helper_(&helper_, &constant_reader_),
inferred_arg_type_metadata_helper_(
&helper_,
&constant_reader_,
InferredTypeMetadataHelper::Kind::ArgType),
procedure_attributes_metadata_helper_(&helper_),
type_translator_(&helper_,
&constant_reader_,
@ -1635,7 +1639,8 @@ void ScopeBuilder::AddVariableDeclarationParameter(
helper_.data_program_offset_ + helper_.ReaderOffset();
// MetadataHelper expects relative offsets and adjusts them internally
const InferredTypeMetadata parameter_type =
inferred_type_metadata_helper_.GetInferredType(helper_.ReaderOffset());
inferred_arg_type_metadata_helper_.GetInferredType(
helper_.ReaderOffset());
VariableDeclarationHelper helper(&helper_);
helper.ReadUntilExcluding(VariableDeclarationHelper::kAnnotations);
const intptr_t annotations_offset = helper_.ReaderOffset();

View File

@ -176,6 +176,7 @@ class ScopeBuilder {
KernelReaderHelper helper_;
ConstantReader constant_reader_;
InferredTypeMetadataHelper inferred_type_metadata_helper_;
InferredTypeMetadataHelper inferred_arg_type_metadata_helper_;
ProcedureAttributesMetadataHelper procedure_attributes_metadata_helper_;
TypeTranslator type_translator_;