Files
sdk/pkg/vm/testcases/bytecode/instance_creation.dart.expect
T
Alexander Markov 3e1154cb5b [vm/bytecode] Move CheckStack after function type arguments handling
When generating deopt info in SIMDBC mode (DeoptInfoBuilder::AddCopy,
DeoptInfoBuilder::ToCpuRegisterSource) kSpecialDbcRegister source
locations are not supported.

In order to avoid such deopt info, this change moves CheckStack bytecode
instruction after function type arguments handling is finished (function
type arguments handling uses arguments descriptor which resides in
kArgsDescriptorsReg special DBC register). This placement of CheckStack is
also more aligned with what AST-based flow graph builder generates.

Fixes lib_2/math/min_max_test with bytecode in dartk-reload-mac-release-simdbc64
configuration.

Change-Id: I7d9863b8290a78a6e24e5806cc5053d55c93ce5c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117221
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-09-13 23:03:55 +00:00

778 lines
22 KiB
Plaintext

main = #lib::main;
[@vm.bytecode=
BytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
Library '#lib'
name '#lib'
script '#lib'
Class '', script = '#lib'
Function 'foo1', static, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 1
CheckStack 0
Allocate CP#0
StoreLocal r0
Push r0
PushConstant CP#1
DirectCall CP#2, 2
Drop1
ReturnTOS
}
ConstantPool {
[0] = Class #lib::C
[1] = ObjectRef 'hello'
[2] = DirectCall '#lib::C:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[3] = Reserved
}
Function 'foo2', static, reflectable, debuggable
parameters [] (required: 0)
return-type void
Bytecode {
Entry 1
CheckStack 0
PushConstant CP#1
PushConstant CP#0
AllocateT
StoreLocal r0
Push r0
PushConstant CP#2
DirectCall CP#3, 2
Drop1
Drop1
PushConstant CP#6
PushConstant CP#5
AllocateT
StoreLocal r0
Push r0
DirectCall CP#7, 1
Drop1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = Class #lib::A
[1] = ObjectRef < dart:core::int, dart:core::String >
[2] = ObjectRef 'hi'
[3] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[4] = Reserved
[5] = Class #lib::B
[6] = ObjectRef < dart:core::List < dart:core::int >, dart:core::String, dart:core::int >
[7] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[8] = Reserved
}
Function 'foo3', static, reflectable, debuggable
type-params <dart:core::Object T>
parameters [] (required: 0)
return-type void
Bytecode {
Entry 2
CheckFunctionTypeArgs 1, r0
CheckStack 0
PushNull
Push r0
InstantiateTypeArgumentsTOS 0, CP#1
PushConstant CP#0
AllocateT
StoreLocal r1
Push r1
DirectCall CP#2, 1
Drop1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = Class #lib::B
[1] = ObjectRef < dart:core::List < dart:core::List < #lib::foo3::TypeParam/0 > >, dart:core::String, dart:core::List < #lib::foo3::TypeParam/0 > >
[2] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
}
Function 'foo4', static, reflectable, debuggable
parameters [] (required: 0)
return-type void
Bytecode {
Entry 0
CheckStack 0
PushConstant CP#0
DirectCall CP#1, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = ObjectRef < dart:core::int, dart:core::List < dart:core::String > >
[1] = DirectCall '#lib::G::test_factory (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
}
Function 'foo5', static, reflectable, debuggable
parameters [] (required: 0)
return-type void
Bytecode {
Entry 0
CheckStack 0
PushNull
DirectCall CP#0, 1
Drop1
PushNull
PushInt 42
DirectCall CP#2, 2
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::I::test_factory2 (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
[2] = DirectCall '#lib::I::test_factory2 (constructor)', ArgDesc num-args 2, num-type-args 0, names ['param']
[3] = Reserved
}
Function 'foo6', static, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
PushConstant CP#0
PushInt 0
DirectCall CP#1, 2
ReturnTOS
}
ConstantPool {
[0] = ObjectRef < dart:core::String >
[1] = DirectCall 'dart:core::_GrowableList:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[2] = Reserved
}
Function 'foo7', static, reflectable, debuggable
parameters [dart:core::int 'n'] (required: 1)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
PushConstant CP#0
Push FP[-5]
DirectCall CP#1, 2
ReturnTOS
}
ConstantPool {
[0] = ObjectRef < dart:core::int >
[1] = DirectCall 'dart:core::_List:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[2] = Reserved
}
Function 'main', static, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
DirectCall CP#0, 0
Drop1
DirectCall CP#2, 0
Drop1
PushConstant CP#4
DirectCall CP#5, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::foo1', ArgDesc num-args 0, num-type-args 0, names []
[1] = Reserved
[2] = DirectCall '#lib::foo2', ArgDesc num-args 0, num-type-args 0, names []
[3] = Reserved
[4] = ObjectRef < dart:core::String >
[5] = DirectCall '#lib::foo3', ArgDesc num-args 0, num-type-args 1, names []
[6] = Reserved
}
Class 'Base', script = '#lib'
type-params <dart:core::Object T1, dart:core::Object T2> (args: 2)
extends dart:core::Object
Field 't1', type = #lib::Base::TypeParam/0, getter = 'get:t1', setter = 'set:t1', reflectable
value = null
Field 't2', type = #lib::Base::TypeParam/1, getter = 'get:t2', setter = 'set:t2', reflectable
value = null
Function '', constructor, reflectable, debuggable
parameters [] (required: 0)
return-type #lib::Base < #lib::Base::TypeParam/0, #lib::Base::TypeParam/1 >
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
Drop1
PushNull
PushInt 4
CreateArrayTOS
StoreLocal r0
Push r0
PushInt 0
PushConstant CP#2
StoreIndexedTOS
Push r0
PushInt 1
Push FP[-5]
LoadTypeArgumentsField CP#4
PushNull
InstantiateType CP#3
StoreIndexedTOS
Push r0
PushInt 2
PushConstant CP#5
StoreIndexedTOS
Push r0
PushInt 3
Push FP[-5]
LoadTypeArgumentsField CP#4
PushNull
InstantiateType CP#6
StoreIndexedTOS
DirectCall CP#7, 1
DirectCall CP#9, 1
Drop1
PushNull
ReturnTOS
}
Nullable fields: [#lib::Base::t1 (field), #lib::Base::t2 (field)]
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
[2] = ObjectRef 'Base: '
[3] = Type #lib::Base::TypeParam/0
[4] = TypeArgumentsField #lib::Base
[5] = ObjectRef ', '
[6] = Type #lib::Base::TypeParam/1
[7] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
[8] = Reserved
[9] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[10] = Reserved
}
Class 'A', script = '#lib'
extends #lib::Base < dart:core::int, dart:core::String >
Function '', constructor, reflectable, debuggable
parameters [dart:core::String 's'] (required: 1)
return-type #lib::A < dart:core::int, dart:core::String >
Bytecode {
Entry 0
CheckStack 0
Push FP[-6]
DirectCall CP#0, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Class 'B', script = '#lib'
type-params <dart:core::Object T> (args: 3)
extends #lib::Base < dart:core::List < #lib::B::TypeParam/0 >, dart:core::String >
Function '', constructor, reflectable, debuggable
parameters [] (required: 0)
return-type #lib::B < dart:core::List < #lib::B::TypeParam/0 >, dart:core::String, #lib::B::TypeParam/0 >
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
Drop1
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r0
Push r0
PushInt 0
PushConstant CP#2
StoreIndexedTOS
Push r0
PushInt 1
Push FP[-5]
LoadTypeArgumentsField CP#4
PushNull
InstantiateType CP#3
StoreIndexedTOS
DirectCall CP#5, 1
DirectCall CP#7, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
[2] = ObjectRef 'B: '
[3] = Type #lib::B::TypeParam/0
[4] = TypeArgumentsField #lib::B
[5] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
[6] = Reserved
[7] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[8] = Reserved
}
Class 'C', script = '#lib'
extends dart:core::Object
Function '', constructor, reflectable, debuggable
parameters [dart:core::String 's'] (required: 1)
return-type #lib::C
Bytecode {
Entry 1
CheckStack 0
Push FP[-6]
DirectCall CP#0, 1
Drop1
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r0
Push r0
PushInt 0
PushConstant CP#2
StoreIndexedTOS
Push r0
PushInt 1
Push FP[-5]
StoreIndexedTOS
DirectCall CP#3, 1
DirectCall CP#5, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
[2] = ObjectRef 'C: '
[3] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
[4] = Reserved
[5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[6] = Reserved
}
Class 'E', script = '#lib'
type-params <dart:core::Object K, dart:core::Object V> (args: 2)
extends dart:core::Object
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::E < #lib::E::TypeParam/0, #lib::E::TypeParam/1 >
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'test_reuse1', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
LoadTypeArgumentsField CP#0
DirectCall CP#1, 1
ReturnTOS
}
ConstantPool {
[0] = TypeArgumentsField #lib::E
[1] = DirectCall 'dart:core::Map:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
}
Class 'F', script = '#lib'
type-params <dart:core::Object K, dart:core::Object V> (args: 4)
extends #lib::E < dart:core::String, dart:core::List < #lib::F::TypeParam/1 > >
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::F < dart:core::String, dart:core::List < #lib::F::TypeParam/1 >, #lib::F::TypeParam/0, #lib::F::TypeParam/1 >
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::E:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'test_reuse2', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
LoadTypeArgumentsField CP#0
DirectCall CP#1, 1
ReturnTOS
}
ConstantPool {
[0] = TypeArgumentsField #lib::F
[1] = DirectCall 'dart:core::Map:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
}
Class 'G', script = '#lib'
type-params <dart:core::Object K, dart:core::Object V> (args: 2)
extends dart:core::Object
Function '', constructor, reflectable, debuggable
parameters [] (required: 0)
return-type #lib::G < #lib::G::TypeParam/0, #lib::G::TypeParam/1 >
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'test_factory', factory, static, reflectable, debuggable
type-params <dart:core::Object K, dart:core::Object V>
parameters [] (required: 0)
return-type #lib::G < #lib::G::test_factory (constructor)::TypeParam/0, #lib::G::test_factory (constructor)::TypeParam/1 >
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
PushNull
InstantiateTypeArgumentsTOS 0, CP#1
PushConstant CP#0
AllocateT
StoreLocal r0
Push r0
DirectCall CP#2, 1
Drop1
ReturnTOS
}
ConstantPool {
[0] = Class #lib::H
[1] = ObjectRef < #lib::G::test_factory (constructor)::TypeParam/0, #lib::G::test_factory (constructor)::TypeParam/1, dart:core::String, #lib::G::test_factory (constructor)::TypeParam/0, #lib::G::test_factory (constructor)::TypeParam/1 >
[2] = DirectCall '#lib::H:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
}
Class 'H', script = '#lib'
type-params <dart:core::Object P1, dart:core::Object P2, dart:core::Object P3> (args: 5)
extends #lib::G < #lib::H::TypeParam/1, #lib::H::TypeParam/2 >
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::H < #lib::H::TypeParam/1, #lib::H::TypeParam/2, #lib::H::TypeParam/0, #lib::H::TypeParam/1, #lib::H::TypeParam/2 >
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::G:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Class 'I', script = '#lib'
extends dart:core::Object
Function '', constructor, reflectable, debuggable
parameters [dynamic 'param'] (required: 1)
return-type #lib::I
Bytecode {
Entry 0
CheckStack 0
Push FP[-6]
DirectCall CP#0, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'test_factory2', factory, static, has-optional-named-params, reflectable, debuggable
parameters [dynamic 'param'] (required: 0)
return-type #lib::I
Bytecode {
EntryOptional 1, 0, 1
LoadConstant r1, CP#0
LoadConstant r1, CP#1
Frame 1
CheckStack 0
Allocate CP#2
StoreLocal r2
Push r2
Push r1
DirectCall CP#3, 2
Drop1
ReturnTOS
}
ConstantPool {
[0] = ObjectRef 'param'
[1] = ObjectRef null
[2] = Class #lib::I
[3] = DirectCall '#lib::I:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[4] = Reserved
}
Class 'J', script = '#lib'
extends dart:core::Object
Function '', factory, static, reflectable, debuggable, native 'agent_J'
parameters [] (required: 0)
return-type #lib::J
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
NativeCall CP#0
ReturnTOS
}
ConstantPool {
[0] = NativeEntry agent_J
}
Class 'K', script = '#lib', abstract
type-params <dart:core::Object A, dart:core::Object B> (args: 2)
extends dart:core::Object
Function '', factory, static, reflectable, debuggable
type-params <dart:core::Object A, dart:core::Object B>
parameters [] (required: 0)
return-type #lib::K < #lib::K:: (constructor)::TypeParam/0, #lib::K:: (constructor)::TypeParam/1 >
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
PushConstant CP#0
AllocateT
StoreLocal r0
Push r0
DirectCall CP#1, 1
Drop1
ReturnTOS
}
ConstantPool {
[0] = Class #lib::TestTypeArgReuse
[1] = DirectCall '#lib::TestTypeArgReuse:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
}
Class 'TestTypeArgReuse', script = '#lib'
type-params <dart:core::Object P, dart:core::Object Q> (args: 2)
extends #lib::Base < #lib::TestTypeArgReuse::TypeParam/0, #lib::TestTypeArgReuse::TypeParam/1 >
implements [#lib::K < #lib::TestTypeArgReuse::TypeParam/0, #lib::TestTypeArgReuse::TypeParam/1 >]
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::TestTypeArgReuse < #lib::TestTypeArgReuse::TypeParam/0, #lib::TestTypeArgReuse::TypeParam/1 >
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
}
]library #lib from "#lib" as #lib {
class Base<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic> extends dart.core::Object {
generic-covariant-impl field #lib::Base::T1* t1 = null;
generic-covariant-impl field #lib::Base::T2* t2 = null;
constructor •() → #lib::Base<#lib::Base::T1*, #lib::Base::T2*>*
: super dart.core::Object::•() {
dart.core::print("Base: ${#lib::Base::T1*}, ${#lib::Base::T2*}");
}
}
class A extends #lib::Base<dart.core::int*, dart.core::String*> {
constructor •(dart.core::String* s) → #lib::A*
: super #lib::Base::•()
;
}
class B<T extends dart.core::Object* = dynamic> extends #lib::Base<dart.core::List<#lib::B::T*>*, dart.core::String*> {
constructor •() → #lib::B<#lib::B::T*>*
: super #lib::Base::•() {
dart.core::print("B: ${#lib::B::T*}");
}
}
class C extends dart.core::Object {
constructor •(dart.core::String* s) → #lib::C*
: super dart.core::Object::•() {
dart.core::print("C: ${s}");
}
}
class E<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic> extends dart.core::Object {
synthetic constructor •() → #lib::E<#lib::E::K*, #lib::E::V*>*
: super dart.core::Object::•()
;
method test_reuse1() → dynamic
return dart.core::Map::•<#lib::E::K*, #lib::E::V*>();
}
class F<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic> extends #lib::E<dart.core::String*, dart.core::List<#lib::F::V*>*> {
synthetic constructor •() → #lib::F<#lib::F::K*, #lib::F::V*>*
: super #lib::E::•()
;
method test_reuse2() → dynamic
return dart.core::Map::•<dart.core::String*, dart.core::List<#lib::F::V*>*>();
}
class G<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic> extends dart.core::Object {
constructor •() → #lib::G<#lib::G::K*, #lib::G::V*>*
: super dart.core::Object::•()
;
static factory test_factory<K extends dart.core::Object* = dynamic, V extends dart.core::Object* = dynamic>() → #lib::G<#lib::G::test_factory::K*, #lib::G::test_factory::V*>*
return new #lib::H::•<dart.core::String*, #lib::G::test_factory::K*, #lib::G::test_factory::V*>();
}
class H<P1 extends dart.core::Object* = dynamic, P2 extends dart.core::Object* = dynamic, P3 extends dart.core::Object* = dynamic> extends #lib::G<#lib::H::P2*, #lib::H::P3*> {
synthetic constructor •() → #lib::H<#lib::H::P1*, #lib::H::P2*, #lib::H::P3*>*
: super #lib::G::•()
;
}
class I extends dart.core::Object {
constructor •(dynamic param) → #lib::I*
: super dart.core::Object::•()
;
static factory test_factory2({dynamic param = #C1}) → #lib::I*
return new #lib::I::•(param);
}
class J extends dart.core::Object {
@#C3
external static factory •() → #lib::J*;
}
abstract class K<A extends dart.core::Object* = dynamic, B extends dart.core::Object* = dynamic> extends dart.core::Object {
static factory •<A extends dart.core::Object* = dynamic, B extends dart.core::Object* = dynamic>() → #lib::K<#lib::K::•::A*, #lib::K::•::B*>*
return new #lib::TestTypeArgReuse::•<#lib::K::•::A*, #lib::K::•::B*>();
}
class TestTypeArgReuse<P extends dart.core::Object* = dynamic, Q extends dart.core::Object* = dynamic> extends #lib::Base<#lib::TestTypeArgReuse::P*, #lib::TestTypeArgReuse::Q*> implements #lib::K<#lib::TestTypeArgReuse::P*, #lib::TestTypeArgReuse::Q*> {
synthetic constructor •() → #lib::TestTypeArgReuse<#lib::TestTypeArgReuse::P*, #lib::TestTypeArgReuse::Q*>*
: super #lib::Base::•()
;
}
static method foo1() → dynamic
return new #lib::C::•("hello");
static method foo2() → void {
new #lib::A::•("hi");
new #lib::B::•<dart.core::int*>();
}
static method foo3<T extends dart.core::Object* = dynamic>() → void {
new #lib::B::•<dart.core::List<#lib::foo3::T*>*>();
}
static method foo4() → void {
#lib::G::test_factory<dart.core::int*, dart.core::List<dart.core::String*>*>();
}
static method foo5() → void {
#lib::I::test_factory2();
#lib::I::test_factory2(param: 42);
}
static method foo6() → dynamic
return dart.core::_GrowableList::•<dart.core::String*>(0);
static method foo7(dart.core::int* n) → dynamic
return dart.core::_List::•<dart.core::int*>(n);
static method main() → dynamic {
#lib::foo1();
#lib::foo2();
#lib::foo3<dart.core::String*>();
}
}
constants {
#C1 = null
#C2 = "agent_J"
#C3 = dart._internal::ExternalName {name:#C2}
}