da8cb470cc
Size of a large application:
Before: 26628600
After: 21480120 (-19.3%)
Size of snapshots:
isolate_snapshot_framework.bin
Before: 9322496
After: 6782976 (-27.2%)
isolate_snapshot_product_framework.bin
Before: 9166848
After: 6602752 (-27.9%)
Regressions in tests:
1) Test language_2/type_alias_equality_test/04 fails similarly to default mode, as VM
does not implement comparison of function types according to the specification.
Previously this test was passing as function types were canonicalized in bytecode,
which was not always correct. This CL fixes the problem with canonicalization of
function types in bytecode and the test starts failing again.
2) Tests standalone_2/entrypoints_verification_test, standalone_2/io/test_extension_test,
standalone_2/io/test_extension_fail_test fail as native extensions are not supported
in bytecode yet. These tests start passing after df5e7aac17,
which switched bytecode tests to kernel service (on x64), because kernel service doesn't
drop ASTs. This CL switches from reading AST library declarations to bytecode even if
AST is not removed, so tests fail again.
Change-Id: I8b7ba44bfa49d0b1599b2509553ff7c831a4e244
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/104700
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
778 lines
22 KiB
Plaintext
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'
|
|
|
|
Field 'c1', type = #lib::A, getter = 'get:c1', reflectable, static, const, final
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const #lib::A {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
|
|
}
|
|
|
|
|
|
Field 'c2', type = dart:core::String, reflectable, static, const, final
|
|
value = 'hello!'
|
|
|
|
Field 'c3', type = dart:core::int, reflectable, static, const, final
|
|
value = const 6
|
|
|
|
Field 'c4', type = #lib::C, getter = 'get:c4', reflectable, static, const, final
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const #lib::C {#lib::C::j (field): const 3, #lib::B::i (field): const 15}
|
|
}
|
|
|
|
|
|
Field 'c5', type = #lib::D, getter = 'get:c5', reflectable, static, const, final
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const #lib::D {#lib::D::x (field): const #lib::B {#lib::B::i (field): const 4}, #lib::D::y (field): null}
|
|
}
|
|
|
|
|
|
Field 'fieldWithDoubleLiteralInitializer', type = dart:core::double, reflectable, static
|
|
value = const 1.0
|
|
|
|
Function 'test_constants1', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushConstant CP#3
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushInt 6
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushConstant CP#4
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushConstant CP#5
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const #lib::A {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = ObjectRef 'hello!'
|
|
[4] = ObjectRef const #lib::C {#lib::C::j (field): const 3, #lib::B::i (field): const 15}
|
|
[5] = ObjectRef const #lib::D {#lib::D::x (field): const #lib::B {#lib::B::i (field): const 4}, #lib::D::y (field): null}
|
|
}
|
|
|
|
|
|
Function 'test_constants2', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushInt 42
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#2
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#3
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#4
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#5
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#6
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = ObjectRef 'foo'
|
|
[3] = ObjectRef const #lib::A {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}
|
|
[4] = ObjectRef const <dart:core::Object> [const 42, 'foo', dart:core::int]
|
|
[5] = ObjectRef const dart:core::_ImmutableMap < dart:core::String, #lib::A > {dart:core::_ImmutableMap::_kvPairs (field): const <dynamic> ['E2', const #lib::A {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}, 'E4', const #lib::A {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}]}
|
|
[6] = ObjectRef const #lib::D {#lib::D::x (field): const #lib::C {#lib::C::j (field): const 9, #lib::B::i (field): const 30}, #lib::D::y (field): const dart:core::_ImmutableMap < dart:core::String, dart:core::Object > {dart:core::_ImmutableMap::_kvPairs (field): const <dynamic> ['foo', const 42, 'bar', const #lib::B {#lib::B::i (field): const 6}]}}
|
|
}
|
|
|
|
|
|
Function 'test_list_literal', static, reflectable, debuggable
|
|
parameters [dart:core::int 'a'] (required: 1)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 1
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
StoreLocal r0
|
|
Push r0
|
|
PushInt 3
|
|
CreateArrayTOS
|
|
StoreLocal r0
|
|
Push r0
|
|
PushInt 0
|
|
PushInt 1
|
|
StoreIndexedTOS
|
|
Push r0
|
|
PushInt 1
|
|
Push FP[-5]
|
|
StoreIndexedTOS
|
|
Push r0
|
|
PushInt 2
|
|
PushInt 3
|
|
StoreIndexedTOS
|
|
DirectCall CP#1, 2
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
PushConstant CP#5
|
|
StoreLocal r0
|
|
Push r0
|
|
PushInt 3
|
|
CreateArrayTOS
|
|
StoreLocal r0
|
|
Push r0
|
|
PushInt 0
|
|
PushConstant CP#6
|
|
StoreIndexedTOS
|
|
Push r0
|
|
PushInt 1
|
|
Push FP[-5]
|
|
InterfaceCall CP#7, 1
|
|
StoreIndexedTOS
|
|
Push r0
|
|
PushInt 2
|
|
PushConstant CP#9
|
|
StoreIndexedTOS
|
|
DirectCall CP#1, 2
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef < dart:core::int >
|
|
[1] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[4] = Reserved
|
|
[5] = ObjectRef < dart:core::String >
|
|
[6] = ObjectRef 'a'
|
|
[7] = InterfaceCall 'dart:core::int::toString', ArgDesc num-args 1, num-type-args 0, names []
|
|
[8] = Reserved
|
|
[9] = ObjectRef 'b'
|
|
}
|
|
|
|
|
|
Function 'test_map_literal', static, reflectable, debuggable
|
|
type-params <dart:core::Object T>
|
|
parameters [dart:core::int 'a', dart:core::int 'b', #lib::test_map_literal::TypeParam/0 'c'] (required: 3)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 2
|
|
CheckStack 0
|
|
CheckFunctionTypeArgs 1, r0
|
|
PushConstant CP#0
|
|
PushConstant CP#1
|
|
PushInt 4
|
|
CreateArrayTOS
|
|
StoreLocal r1
|
|
Push r1
|
|
PushInt 0
|
|
PushInt 1
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 1
|
|
Push FP[-7]
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 2
|
|
Push FP[-6]
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 3
|
|
PushInt 2
|
|
StoreIndexedTOS
|
|
DirectCall CP#2, 2
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
PushConstant CP#6
|
|
PushConstant CP#1
|
|
PushInt 4
|
|
CreateArrayTOS
|
|
StoreLocal r1
|
|
Push r1
|
|
PushInt 0
|
|
PushConstant CP#7
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 1
|
|
Push FP[-7]
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 2
|
|
Push FP[-6]
|
|
InterfaceCall CP#8, 1
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 3
|
|
PushInt 3
|
|
StoreIndexedTOS
|
|
DirectCall CP#2, 2
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
PushNull
|
|
Push r0
|
|
InstantiateTypeArgumentsTOS 0, CP#10
|
|
PushConstant CP#11
|
|
DirectCall CP#2, 2
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
PushNull
|
|
Push r0
|
|
InstantiateTypeArgumentsTOS 0, CP#12
|
|
PushConstant CP#1
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r1
|
|
Push r1
|
|
PushInt 0
|
|
Push FP[-5]
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 1
|
|
PushInt 4
|
|
StoreIndexedTOS
|
|
DirectCall CP#2, 2
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef < dart:core::int, dart:core::int >
|
|
[1] = ObjectRef < dynamic >
|
|
[2] = DirectCall 'dart:core::Map::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
|
|
[3] = Reserved
|
|
[4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = ObjectRef < dart:core::String, dart:core::int >
|
|
[7] = ObjectRef 'foo'
|
|
[8] = InterfaceCall 'dart:core::int::toString', ArgDesc num-args 1, num-type-args 0, names []
|
|
[9] = Reserved
|
|
[10] = ObjectRef < dart:core::String, #lib::test_map_literal::TypeParam/0 >
|
|
[11] = ObjectRef const <dynamic> []
|
|
[12] = ObjectRef < #lib::test_map_literal::TypeParam/0, dart:core::int >
|
|
}
|
|
|
|
|
|
Function 'test_symbol', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushConstant CP#3
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const 'test_symbol'
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = ObjectRef const '_private_symbol'
|
|
}
|
|
|
|
|
|
Function 'test_type_literal', static, reflectable, debuggable
|
|
type-params <dart:core::Object T>
|
|
parameters [] (required: 0)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 1
|
|
CheckStack 0
|
|
CheckFunctionTypeArgs 1, r0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushNull
|
|
Push r0
|
|
InstantiateType CP#3
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = Type dart:core::String
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = Type #lib::test_type_literal::TypeParam/0
|
|
}
|
|
|
|
|
|
Function 'testGenericConstInstance', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const #lib::F < dart:core::Map < dart:core::int, dart:core::String >, dart:core::int, dart:core::String > {}
|
|
}
|
|
|
|
|
|
Function 'testGenericFunctionTypeLiteral', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = Type FunctionType <dart:core::Object X> (null::TypeParam/0) -> null::TypeParam/0
|
|
}
|
|
|
|
|
|
Function 'testFieldWithDoubleLiteralInitializer', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
PushStatic CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = StaticField #lib::fieldWithDoubleLiteralInitializer (field)
|
|
}
|
|
|
|
|
|
Function 'main', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
}
|
|
|
|
Class 'A', script = '#lib', enum
|
|
extends dart:core::Object
|
|
|
|
Field 'index', type = dart:core::int, getter = 'get:index', reflectable, final
|
|
value = null
|
|
|
|
Field '_name', type = dart:core::String, getter = 'get:_name', reflectable, final
|
|
value = null
|
|
|
|
Field 'values', type = dart:core::List < #lib::A >, getter = 'get:values', reflectable, static, const, final
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const <#lib::A> [const #lib::A {#lib::A::index (field): const 0, #lib::A::_name (field): 'A.elem1'}, const #lib::A {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}, const #lib::A {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}, const #lib::A {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}]
|
|
}
|
|
|
|
|
|
Field 'elem1', type = #lib::A, getter = 'get:elem1', reflectable, static, const, final
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const #lib::A {#lib::A::index (field): const 0, #lib::A::_name (field): 'A.elem1'}
|
|
}
|
|
|
|
|
|
Field 'elem2', type = #lib::A, getter = 'get:elem2', reflectable, static, const, final
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const #lib::A {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}
|
|
}
|
|
|
|
|
|
Field 'elem3', type = #lib::A, getter = 'get:elem3', reflectable, static, const, final
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const #lib::A {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
|
|
}
|
|
|
|
|
|
Field 'elem4', type = #lib::A, getter = 'get:elem4', reflectable, static, const, final
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const #lib::A {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}
|
|
}
|
|
|
|
|
|
Function '', constructor, const, reflectable, debuggable
|
|
parameters [dart:core::int 'index', dart:core::String '_name'] (required: 2)
|
|
return-type #lib::A
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-7]
|
|
Push FP[-6]
|
|
StoreFieldTOS CP#0
|
|
Push FP[-7]
|
|
Push FP[-5]
|
|
StoreFieldTOS CP#2
|
|
Push FP[-7]
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InstanceField #lib::A::index (field)
|
|
[1] = Reserved
|
|
[2] = InstanceField #lib::A::_name (field)
|
|
[3] = Reserved
|
|
[4] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[5] = Reserved
|
|
}
|
|
|
|
|
|
Function 'toString', reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dart:core::String
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall '#lib::A::get:_name', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
}
|
|
|
|
Class 'B', script = '#lib'
|
|
extends dart:core::Object
|
|
|
|
Field 'i', type = dart:core::int, getter = 'get:i', reflectable, final
|
|
value = null
|
|
|
|
Function '', constructor, const, reflectable, debuggable
|
|
parameters [dart:core::int 'i'] (required: 1)
|
|
return-type #lib::B
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-6]
|
|
Push FP[-5]
|
|
StoreFieldTOS CP#0
|
|
Push FP[-6]
|
|
DirectCall CP#2, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InstanceField #lib::B::i (field)
|
|
[1] = Reserved
|
|
[2] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
Class 'C', script = '#lib'
|
|
extends #lib::B
|
|
|
|
Field 'j', type = dart:core::int, getter = 'get:j', reflectable, final
|
|
value = null
|
|
|
|
Function '', constructor, const, reflectable, debuggable
|
|
parameters [dart:core::int 'a', dart:core::int 'b', dart:core::int 'c'] (required: 3)
|
|
return-type #lib::C
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-8]
|
|
Push FP[-7]
|
|
Push FP[-6]
|
|
AddInt
|
|
StoreFieldTOS CP#0
|
|
Push FP[-8]
|
|
Push FP[-5]
|
|
PushInt 5
|
|
MulInt
|
|
DirectCall CP#2, 2
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InstanceField #lib::C::j (field)
|
|
[1] = Reserved
|
|
[2] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
Class 'D', script = '#lib'
|
|
extends dart:core::Object
|
|
|
|
Field 'x', type = dynamic, getter = 'get:x', reflectable, final
|
|
value = null
|
|
|
|
Field 'y', type = dynamic, getter = 'get:y', reflectable, final
|
|
value = null
|
|
|
|
Function '', constructor, const, has-optional-positional-params, reflectable, debuggable
|
|
parameters [dynamic 'x', dynamic 'y'] (required: 1)
|
|
return-type #lib::D
|
|
|
|
Bytecode {
|
|
EntryOptional 2, 1, 0
|
|
LoadConstant r2, CP#0
|
|
Frame 0
|
|
CheckStack 0
|
|
Push r0
|
|
Push r1
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
Push r2
|
|
StoreFieldTOS CP#3
|
|
Push r0
|
|
DirectCall CP#5, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef null
|
|
[1] = InstanceField #lib::D::x (field)
|
|
[2] = Reserved
|
|
[3] = InstanceField #lib::D::y (field)
|
|
[4] = Reserved
|
|
[5] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[6] = Reserved
|
|
}
|
|
|
|
Class 'E', script = '#lib'
|
|
type-params <dart:core::Object T> (args: 1)
|
|
extends dart:core::Object
|
|
|
|
|
|
Function '', constructor, const, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type #lib::E < #lib::E::TypeParam/0 >
|
|
|
|
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
|
|
}
|
|
|
|
Class 'F', script = '#lib'
|
|
type-params <dart:core::Object P, dart:core::Object Q> (args: 3)
|
|
extends #lib::E < dart:core::Map < #lib::F::TypeParam/0, #lib::F::TypeParam/1 > >
|
|
|
|
|
|
Function '', constructor, const, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type #lib::F < dart:core::Map < #lib::F::TypeParam/0, #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
|
|
}
|
|
|
|
|
|
}
|
|
]library #lib from "#lib" as #lib {
|
|
|
|
typedef GenericFunctionType = <X extends dart.core::Object = dynamic>(X) → X;
|
|
class A extends dart.core::Object {
|
|
final field dart.core::int index;
|
|
final field dart.core::String _name;
|
|
static const field dart.core::List<#lib::A> values = const <#lib::A>[#lib::A::elem1, #lib::A::elem2, #lib::A::elem3, #lib::A::elem4];
|
|
static const field #lib::A elem1 = const #lib::A::•(0, "A.elem1");
|
|
static const field #lib::A elem2 = const #lib::A::•(1, "A.elem2");
|
|
static const field #lib::A elem3 = const #lib::A::•(2, "A.elem3");
|
|
static const field #lib::A elem4 = const #lib::A::•(3, "A.elem4");
|
|
const constructor •(dart.core::int index, dart.core::String _name) → #lib::A
|
|
: #lib::A::index = index, #lib::A::_name = _name, super dart.core::Object::•()
|
|
;
|
|
method toString() → dart.core::String
|
|
return this.{=#lib::A::_name};
|
|
}
|
|
class B extends dart.core::Object {
|
|
final field dart.core::int i;
|
|
const constructor •(dart.core::int i) → #lib::B
|
|
: #lib::B::i = i, super dart.core::Object::•()
|
|
;
|
|
}
|
|
class C extends #lib::B {
|
|
final field dart.core::int j;
|
|
const constructor •(dart.core::int a, dart.core::int b, dart.core::int c) → #lib::C
|
|
: #lib::C::j = a.{dart.core::num::+}(b), super #lib::B::•(c.{dart.core::num::*}(5))
|
|
;
|
|
}
|
|
class D extends dart.core::Object {
|
|
final field dynamic x;
|
|
final field dynamic y;
|
|
const constructor •(dynamic x, [dynamic y = null]) → #lib::D
|
|
: #lib::D::x = x, #lib::D::y = y, super dart.core::Object::•()
|
|
;
|
|
}
|
|
class E<T extends dart.core::Object = dynamic> extends dart.core::Object {
|
|
const constructor •() → #lib::E<#lib::E::T>
|
|
: super dart.core::Object::•()
|
|
;
|
|
}
|
|
class F<P extends dart.core::Object = dynamic, Q extends dart.core::Object = dynamic> extends #lib::E<dart.core::Map<#lib::F::P, #lib::F::Q>> {
|
|
const constructor •() → #lib::F<#lib::F::P, #lib::F::Q>
|
|
: super #lib::E::•()
|
|
;
|
|
}
|
|
static const field #lib::A c1 = #lib::A::elem3;
|
|
static const field dart.core::String c2 = "hello!";
|
|
static const field dart.core::int c3 = #lib::c2.{dart.core::String::length};
|
|
static const field #lib::C c4 = const #lib::C::•(1, 2, 3);
|
|
static const field #lib::D c5 = const #lib::D::•(const #lib::B::•(4));
|
|
static field dart.core::double fieldWithDoubleLiteralInitializer = 1.0;
|
|
static method test_constants1() → void {
|
|
dart.core::print(#lib::c1);
|
|
dart.core::print(#lib::c2);
|
|
dart.core::print(#lib::c3);
|
|
dart.core::print(#lib::c4);
|
|
dart.core::print(#lib::c5);
|
|
}
|
|
static method test_constants2() → void {
|
|
dart.core::print(42);
|
|
dart.core::print("foo");
|
|
dart.core::print(#lib::A::elem2);
|
|
dart.core::print(const <dart.core::Object>[42, "foo", dart.core::int]);
|
|
dart.core::print(const <dart.core::String, #lib::A>{"E2": #lib::A::elem2, "E4": #lib::A::elem4});
|
|
dart.core::print(const #lib::D::•(const #lib::C::•(4, 5, 6), const <dart.core::String, dart.core::Object>{"foo": 42, "bar": const #lib::B::•(#lib::c2.{dart.core::String::length})}));
|
|
}
|
|
static method test_list_literal(dart.core::int a) → void {
|
|
dart.core::print(<dart.core::int>[1, a, 3]);
|
|
dart.core::print(<dart.core::String>["a", a.{dart.core::int::toString}(), "b"]);
|
|
}
|
|
static method test_map_literal<T extends dart.core::Object = dynamic>(dart.core::int a, dart.core::int b, #lib::test_map_literal::T c) → void {
|
|
dart.core::print(<dart.core::int, dart.core::int>{1: a, b: 2});
|
|
dart.core::print(<dart.core::String, dart.core::int>{"foo": a, b.{dart.core::int::toString}(): 3});
|
|
dart.core::print(<dart.core::String, #lib::test_map_literal::T>{});
|
|
dart.core::print(<#lib::test_map_literal::T, dart.core::int>{c: 4});
|
|
}
|
|
static method test_symbol() → void {
|
|
dart.core::print(#test_symbol);
|
|
dart.core::print(#_private_symbol);
|
|
}
|
|
static method test_type_literal<T extends dart.core::Object = dynamic>() → void {
|
|
dart.core::print(dart.core::String);
|
|
dart.core::print(#lib::test_type_literal::T);
|
|
}
|
|
static method testGenericConstInstance() → dynamic
|
|
return const #lib::F::•<dart.core::int, dart.core::String>();
|
|
static method testGenericFunctionTypeLiteral() → dynamic
|
|
return <X extends dart.core::Object = dynamic>(X) → X;
|
|
static method testFieldWithDoubleLiteralInitializer() → dynamic
|
|
return #lib::fieldWithDoubleLiteralInitializer;
|
|
static method main() → dynamic {}
|
|
}
|