| library #lib; |
| import self as self; |
| import "dart:core" as core; |
| |
| class A extends core::Object { |
| final field core::int index; |
| final field core::String _name; |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#13 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [] |
| [1] = Int 0 |
| [2] = String 'A.elem1' |
| [3] = Instance #lib::A type-args CP#0 {index: 1, _name: 2} |
| [4] = Int 1 |
| [5] = String 'A.elem2' |
| [6] = Instance #lib::A type-args CP#0 {index: 4, _name: 5} |
| [7] = Int 2 |
| [8] = String 'A.elem3' |
| [9] = Instance #lib::A type-args CP#0 {index: 7, _name: 8} |
| [10] = Int 3 |
| [11] = String 'A.elem4' |
| [12] = Instance #lib::A type-args CP#0 {index: 10, _name: 11} |
| [13] = List type-arg #lib::A, entries CP# [3, 6, 9, 12] |
| } |
| ] static const field core::List<self::A> values = const <self::A>[self::A::elem1, self::A::elem2, self::A::elem3, self::A::elem4]; |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#3 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [] |
| [1] = Int 0 |
| [2] = String 'A.elem1' |
| [3] = Instance #lib::A type-args CP#0 {index: 1, _name: 2} |
| } |
| ] static const field self::A elem1 = const self::A::•(0, "A.elem1"); |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#3 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [] |
| [1] = Int 1 |
| [2] = String 'A.elem2' |
| [3] = Instance #lib::A type-args CP#0 {index: 1, _name: 2} |
| } |
| ] static const field self::A elem2 = const self::A::•(1, "A.elem2"); |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#3 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [] |
| [1] = Int 2 |
| [2] = String 'A.elem3' |
| [3] = Instance #lib::A type-args CP#0 {index: 1, _name: 2} |
| } |
| ] static const field self::A elem3 = const self::A::•(2, "A.elem3"); |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#3 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [] |
| [1] = Int 3 |
| [2] = String 'A.elem4' |
| [3] = Instance #lib::A type-args CP#0 {index: 1, _name: 2} |
| } |
| ] static const field self::A elem4 = const self::A::•(3, "A.elem4"); |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| Push FP[-7] |
| Push FP[-6] |
| StoreFieldTOS CP#0 |
| Push FP[-7] |
| Push FP[-5] |
| StoreFieldTOS CP#1 |
| Push FP[-7] |
| PushConstant CP#3 |
| IndirectStaticCall 1, CP#2 |
| Drop1 |
| PushConstant CP#4 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = FieldOffset #lib::A::index |
| [1] = FieldOffset #lib::A::_name |
| [2] = ArgDesc num-args 1, num-type-args 0, names [] |
| [3] = StaticICData target 'dart.core::Object::', arg-desc CP#2 |
| [4] = Null |
| } |
| ] const constructor •(core::int index, core::String _name) → void |
| : self::A::index = index, self::A::_name = _name, super core::Object::•() |
| ; |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| Push FP[-5] |
| PushConstant CP#1 |
| IndirectStaticCall 1, CP#0 |
| ReturnTOS |
| PushConstant CP#2 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = ArgDesc num-args 1, num-type-args 0, names [] |
| [1] = StaticICData get target '#lib::A::_name', arg-desc CP#0 |
| [2] = Null |
| } |
| ] method toString() → core::String |
| return this.{=self::A::_name}; |
| } |
| class B extends core::Object { |
| final field core::int i; |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| Push FP[-6] |
| Push FP[-5] |
| StoreFieldTOS CP#0 |
| Push FP[-6] |
| PushConstant CP#2 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#3 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = FieldOffset #lib::B::i |
| [1] = ArgDesc num-args 1, num-type-args 0, names [] |
| [2] = StaticICData target 'dart.core::Object::', arg-desc CP#1 |
| [3] = Null |
| } |
| ] const constructor •(core::int i) → void |
| : self::B::i = i, super core::Object::•() |
| ; |
| } |
| class C extends self::B { |
| final field core::int j; |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| Push FP[-8] |
| Push FP[-7] |
| Push FP[-6] |
| InstanceCall1 2, CP#1 |
| StoreFieldTOS CP#2 |
| Push FP[-8] |
| Push FP[-5] |
| PushConstant CP#3 |
| InstanceCall1 2, CP#4 |
| PushConstant CP#5 |
| IndirectStaticCall 2, CP#0 |
| Drop1 |
| PushConstant CP#6 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = ArgDesc num-args 2, num-type-args 0, names [] |
| [1] = ICData target-name '+', arg-desc CP#0 |
| [2] = FieldOffset #lib::C::j |
| [3] = Int 5 |
| [4] = ICData target-name '*', arg-desc CP#0 |
| [5] = StaticICData target '#lib::B::', arg-desc CP#0 |
| [6] = Null |
| } |
| ] const constructor •(core::int a, core::int b, core::int c) → void |
| : self::C::j = a.{core::num::+}(b), super self::B::•(c.{core::num::*}(5)) |
| ; |
| } |
| class D extends core::Object { |
| final field dynamic x; |
| final field dynamic y; |
| [@vm.bytecode= |
| Bytecode { |
| EntryOptional 2, 1, 0 |
| LoadConstant r2, CP#0 |
| Frame 0 |
| CheckStack |
| Push r0 |
| Push r1 |
| StoreFieldTOS CP#1 |
| Push r0 |
| Push r2 |
| StoreFieldTOS CP#2 |
| Push r0 |
| PushConstant CP#4 |
| IndirectStaticCall 1, CP#3 |
| Drop1 |
| PushConstant CP#0 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = Null |
| [1] = FieldOffset #lib::D::x |
| [2] = FieldOffset #lib::D::y |
| [3] = ArgDesc num-args 1, num-type-args 0, names [] |
| [4] = StaticICData target 'dart.core::Object::', arg-desc CP#3 |
| } |
| ] const constructor •(dynamic x, [dynamic y = null]) → void |
| : self::D::x = x, self::D::y = y, super core::Object::•() |
| ; |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#3 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [] |
| [1] = Int 2 |
| [2] = String 'A.elem3' |
| [3] = Instance #lib::A type-args CP#0 {index: 1, _name: 2} |
| } |
| ]static const field self::A c1 = self::A::elem3; |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#0 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = String 'hello!' |
| } |
| ]static const field core::String c2 = "hello!"; |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#0 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = Int 6 |
| } |
| ]static const field core::int c3 = self::c2.{core::String::length}; |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#3 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [] |
| [1] = Int 3 |
| [2] = Int 15 |
| [3] = Instance #lib::C type-args CP#0 {j: 1, i: 2} |
| } |
| ]static const field self::C c4 = const self::C::•(1, 2, 3); |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#4 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [] |
| [1] = Int 4 |
| [2] = Instance #lib::B type-args CP#0 {i: 1} |
| [3] = Null |
| [4] = Instance #lib::D type-args CP#0 {x: 2, y: 3} |
| } |
| ]static const field self::D c5 = const self::D::•(const self::B::•(4)); |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#3 |
| PushConstant CP#5 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| PushConstant CP#6 |
| PushConstant CP#7 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| PushConstant CP#8 |
| PushConstant CP#9 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| PushConstant CP#12 |
| PushConstant CP#13 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| PushConstant CP#17 |
| PushConstant CP#18 |
| IndirectStaticCall 1, CP#4 |
| Drop1 |
| PushConstant CP#16 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [] |
| [1] = Int 2 |
| [2] = String 'A.elem3' |
| [3] = Instance #lib::A type-args CP#0 {index: 1, _name: 2} |
| [4] = ArgDesc num-args 1, num-type-args 0, names [] |
| [5] = StaticICData target 'dart.core::print', arg-desc CP#4 |
| [6] = String 'hello!' |
| [7] = StaticICData target 'dart.core::print', arg-desc CP#4 |
| [8] = Int 6 |
| [9] = StaticICData target 'dart.core::print', arg-desc CP#4 |
| [10] = Int 3 |
| [11] = Int 15 |
| [12] = Instance #lib::C type-args CP#0 {j: 10, i: 11} |
| [13] = StaticICData target 'dart.core::print', arg-desc CP#4 |
| [14] = Int 4 |
| [15] = Instance #lib::B type-args CP#0 {i: 14} |
| [16] = Null |
| [17] = Instance #lib::D type-args CP#0 {x: 15, y: 16} |
| [18] = StaticICData target 'dart.core::print', arg-desc CP#4 |
| } |
| ]static method test_constants1() → void { |
| core::print(self::c1); |
| core::print(self::c2); |
| core::print(self::c3); |
| core::print(self::c4); |
| core::print(self::c5); |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#0 |
| PushConstant CP#2 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#3 |
| PushConstant CP#4 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#8 |
| PushConstant CP#9 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#10 |
| PushConstant CP#11 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#19 |
| PushConstant CP#20 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#30 |
| PushConstant CP#31 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#32 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = Int 42 |
| [1] = ArgDesc num-args 1, num-type-args 0, names [] |
| [2] = StaticICData target 'dart.core::print', arg-desc CP#1 |
| [3] = String 'foo' |
| [4] = StaticICData target 'dart.core::print', arg-desc CP#1 |
| [5] = TypeArgs [] |
| [6] = Int 1 |
| [7] = String 'A.elem2' |
| [8] = Instance #lib::A type-args CP#5 {index: 6, _name: 7} |
| [9] = StaticICData target 'dart.core::print', arg-desc CP#1 |
| [10] = List type-arg dart.core::Object, entries CP# [0, 3] |
| [11] = StaticICData target 'dart.core::print', arg-desc CP#1 |
| [12] = TypeArgs [dart.core::String, #lib::A] |
| [13] = String 'E2' |
| [14] = String 'E4' |
| [15] = Int 3 |
| [16] = String 'A.elem4' |
| [17] = Instance #lib::A type-args CP#5 {index: 15, _name: 16} |
| [18] = List type-arg dynamic, entries CP# [13, 8, 14, 17] |
| [19] = Instance dart.core::_ImmutableMap type-args CP#12 {_kvPairs: 18} |
| [20] = StaticICData target 'dart.core::print', arg-desc CP#1 |
| [21] = Int 9 |
| [22] = Int 30 |
| [23] = Instance #lib::C type-args CP#5 {j: 21, i: 22} |
| [24] = TypeArgs [dart.core::String, dart.core::Object] |
| [25] = String 'bar' |
| [26] = Int 6 |
| [27] = Instance #lib::B type-args CP#5 {i: 26} |
| [28] = List type-arg dynamic, entries CP# [3, 0, 25, 27] |
| [29] = Instance dart.core::_ImmutableMap type-args CP#24 {_kvPairs: 28} |
| [30] = Instance #lib::D type-args CP#5 {x: 23, y: 29} |
| [31] = StaticICData target 'dart.core::print', arg-desc CP#1 |
| [32] = Null |
| } |
| ]static method test_constants2() → void { |
| core::print(42); |
| core::print("foo"); |
| core::print(self::A::elem2); |
| core::print(const <core::Object>[42, "foo"]); |
| core::print(const <core::String, self::A>{"E2": self::A::elem2, "E4": self::A::elem4}); |
| core::print(const self::D::•(const self::C::•(4, 5, 6), const <core::String, core::Object>{"foo": 42, "bar": const self::B::•(self::c2.{core::String::length})})); |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 1 |
| CheckStack |
| PushConstant CP#0 |
| StoreLocal r0 |
| Push r0 |
| PushConstant CP#1 |
| CreateArrayTOS |
| StoreLocal r0 |
| Push r0 |
| PushConstant CP#2 |
| PushConstant CP#3 |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#3 |
| Push FP[-5] |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#4 |
| PushConstant CP#1 |
| StoreIndexedTOS |
| PushConstant CP#6 |
| IndirectStaticCall 2, CP#5 |
| PushConstant CP#8 |
| IndirectStaticCall 1, CP#7 |
| Drop1 |
| PushConstant CP#9 |
| StoreLocal r0 |
| Push r0 |
| PushConstant CP#1 |
| CreateArrayTOS |
| StoreLocal r0 |
| Push r0 |
| PushConstant CP#2 |
| PushConstant CP#10 |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#3 |
| Push FP[-5] |
| InstanceCall1 1, CP#11 |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#4 |
| PushConstant CP#12 |
| StoreIndexedTOS |
| PushConstant CP#13 |
| IndirectStaticCall 2, CP#5 |
| PushConstant CP#14 |
| IndirectStaticCall 1, CP#7 |
| Drop1 |
| PushConstant CP#15 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [dart.core::int] |
| [1] = Int 3 |
| [2] = Int 0 |
| [3] = Int 1 |
| [4] = Int 2 |
| [5] = ArgDesc num-args 1, num-type-args 1, names [] |
| [6] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#5 |
| [7] = ArgDesc num-args 1, num-type-args 0, names [] |
| [8] = StaticICData target 'dart.core::print', arg-desc CP#7 |
| [9] = TypeArgs [dart.core::String] |
| [10] = String 'a' |
| [11] = ICData target-name 'toString', arg-desc CP#7 |
| [12] = String 'b' |
| [13] = StaticICData target 'dart.core::List::_fromLiteral', arg-desc CP#5 |
| [14] = StaticICData target 'dart.core::print', arg-desc CP#7 |
| [15] = Null |
| } |
| ]static method test_list_literal(core::int a) → void { |
| core::print(<core::int>[1, a, 3]); |
| core::print(<core::String>["a", a.{core::int::toString}(), "b"]); |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 1 |
| CheckStack |
| PushConstant CP#0 |
| PushConstant CP#1 |
| PushConstant CP#2 |
| CreateArrayTOS |
| StoreLocal r0 |
| Push r0 |
| PushConstant CP#3 |
| PushConstant CP#4 |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#4 |
| Push FP[-7] |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#5 |
| Push FP[-6] |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#6 |
| PushConstant CP#5 |
| StoreIndexedTOS |
| PushConstant CP#8 |
| IndirectStaticCall 2, CP#7 |
| PushConstant CP#10 |
| IndirectStaticCall 1, CP#9 |
| Drop1 |
| PushConstant CP#11 |
| PushConstant CP#1 |
| PushConstant CP#2 |
| CreateArrayTOS |
| StoreLocal r0 |
| Push r0 |
| PushConstant CP#3 |
| PushConstant CP#12 |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#4 |
| Push FP[-7] |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#5 |
| Push FP[-6] |
| InstanceCall1 1, CP#13 |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#6 |
| PushConstant CP#6 |
| StoreIndexedTOS |
| PushConstant CP#14 |
| IndirectStaticCall 2, CP#7 |
| PushConstant CP#15 |
| IndirectStaticCall 1, CP#9 |
| Drop1 |
| PushConstant CP#16 |
| Push FP[-8] |
| InstantiateTypeArgumentsTOS 1, CP#17 |
| PushConstant CP#18 |
| PushConstant CP#19 |
| IndirectStaticCall 2, CP#7 |
| PushConstant CP#20 |
| IndirectStaticCall 1, CP#9 |
| Drop1 |
| PushConstant CP#16 |
| Push FP[-8] |
| InstantiateTypeArgumentsTOS 1, CP#21 |
| PushConstant CP#1 |
| PushConstant CP#5 |
| CreateArrayTOS |
| StoreLocal r0 |
| Push r0 |
| PushConstant CP#3 |
| Push FP[-5] |
| StoreIndexedTOS |
| Push r0 |
| PushConstant CP#4 |
| PushConstant CP#2 |
| StoreIndexedTOS |
| PushConstant CP#22 |
| IndirectStaticCall 2, CP#7 |
| PushConstant CP#23 |
| IndirectStaticCall 1, CP#9 |
| Drop1 |
| PushConstant CP#16 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = TypeArgs [dart.core::int, dart.core::int] |
| [1] = TypeArgs [dynamic] |
| [2] = Int 4 |
| [3] = Int 0 |
| [4] = Int 1 |
| [5] = Int 2 |
| [6] = Int 3 |
| [7] = ArgDesc num-args 1, num-type-args 1, names [] |
| [8] = StaticICData target 'dart.core::Map::_fromLiteral', arg-desc CP#7 |
| [9] = ArgDesc num-args 1, num-type-args 0, names [] |
| [10] = StaticICData target 'dart.core::print', arg-desc CP#9 |
| [11] = TypeArgs [dart.core::String, dart.core::int] |
| [12] = String 'foo' |
| [13] = ICData target-name 'toString', arg-desc CP#9 |
| [14] = StaticICData target 'dart.core::Map::_fromLiteral', arg-desc CP#7 |
| [15] = StaticICData target 'dart.core::print', arg-desc CP#9 |
| [16] = Null |
| [17] = TypeArgs [dart.core::String, #lib::test_map_literal::T] |
| [18] = List type-arg dynamic, entries CP# [] |
| [19] = StaticICData target 'dart.core::Map::_fromLiteral', arg-desc CP#7 |
| [20] = StaticICData target 'dart.core::print', arg-desc CP#9 |
| [21] = TypeArgs [#lib::test_map_literal::T, dart.core::int] |
| [22] = StaticICData target 'dart.core::Map::_fromLiteral', arg-desc CP#7 |
| [23] = StaticICData target 'dart.core::print', arg-desc CP#9 |
| } |
| ]static method test_map_literal<T extends core::Object = dynamic>(core::int a, core::int b, self::test_map_literal::T c) → void { |
| core::print(<core::int, core::int>{1: a, b: 2}); |
| core::print(<core::String, core::int>{"foo": a, b.{core::int::toString}(): 3}); |
| core::print(<core::String, self::test_map_literal::T>{}); |
| core::print(<self::test_map_literal::T, core::int>{c: 4}); |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#0 |
| PushConstant CP#2 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#3 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = Symbol 'test_symbol' |
| [1] = ArgDesc num-args 1, num-type-args 0, names [] |
| [2] = StaticICData target 'dart.core::print', arg-desc CP#1 |
| [3] = Null |
| } |
| ]static method test_symbol() → void { |
| core::print(#test_symbol); |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#0 |
| PushConstant CP#2 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#4 |
| Push FP[-5] |
| InstantiateType CP#3 |
| PushConstant CP#5 |
| IndirectStaticCall 1, CP#1 |
| Drop1 |
| PushConstant CP#4 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = Type dart.core::String |
| [1] = ArgDesc num-args 1, num-type-args 0, names [] |
| [2] = StaticICData target 'dart.core::print', arg-desc CP#1 |
| [3] = Type #lib::test_type_literal::T |
| [4] = Null |
| [5] = StaticICData target 'dart.core::print', arg-desc CP#1 |
| } |
| ]static method test_type_literal<T extends core::Object = dynamic>() → void { |
| core::print(core::String); |
| core::print(self::test_type_literal::T); |
| } |
| [@vm.bytecode= |
| Bytecode { |
| Entry 0 |
| CheckStack |
| PushConstant CP#0 |
| ReturnTOS |
| } |
| ConstantPool { |
| [0] = Null |
| } |
| ]static method main() → dynamic {} |