blob: 4fa0a470969594747998b86f91fe3c74d2e1de24 [file] [log] [blame]
library #lib;
import self as self;
import "dart:core" as core;
class Base1 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
] synthetic constructor •() self::Base1
: super core::Object::•()
;
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
CheckFunctionTypeArgs 1, r0
PushNull
ReturnTOS
}
ConstantPool {
}
] method foo<T extends core::Object = dynamic>(self::Base1::foo::T a1, core::int a2) void {}
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack 0
PushInt 42
ReturnTOS
}
ConstantPool {
}
] get bar() dynamic
return 42;
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack 0
PushNull
ReturnTOS
}
ConstantPool {
}
] set bazz(core::int x) void {}
}
class A extends self::Base1 {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base1:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
] synthetic constructor •() self::A
: super self::Base1::•()
;
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
PushConstant CP#0
Push FP[-6]
PushConstant CP#1
PushInt 2
DirectCall 4, CP#2
ReturnTOS
}
ConstantPool {
[0] = ObjectRef < dart:core::String >
[1] = ObjectRef 'a1'
[2] = DirectCall '#lib::Base1::foo', ArgDesc num-args 3, num-type-args 1, names []
[3] = Reserved
}
] method testSuperCall(core::int x) dynamic
return super.{self::Base1::foo}<core::String>("a1", 2);
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base1::get:foo', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
] method testSuperTearOff() dynamic
return super.{self::Base1::foo};
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base1::get:bar', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
] method testSuperGet() dynamic
return super.{self::Base1::bar};
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
PushConstant CP#0
Push FP[-5]
DirectCall 1, CP#1
PushConstant CP#3
DynamicCall 3, CP#5
ReturnTOS
}
ConstantPool {
[0] = ObjectRef < dart:core::int >
[1] = DirectCall '#lib::Base1::get:bar', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
[3] = ObjectRef 'param'
[4] = ObjectRef ArgDesc num-args 2, num-type-args 1, names []
[5] = ICData dynamic target-name 'call', arg-desc CP#4
}
] method testSuperCallViaGetter() dynamic
return [@vm.call-site-attributes.metadata=receiverType:dynamic] super.{self::Base1::bar}.call<core::int>("param");
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
PushInt 3
DirectCall 2, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base1::set:bazz', ArgDesc num-args 2, num-type-args 0, names []
[1] = Reserved
}
] method testSuperSet() dynamic {
super.{self::Base1::bazz} = 3;
}
}
abstract class Base2 extends core::Object {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
] synthetic constructor •() self::Base2
: super core::Object::•()
;
abstract method foo<T extends core::Object = dynamic>(core::String a1, self::Base2::foo::T a2, core::int a3) void;
abstract get bar() dynamic;
abstract set bazz(core::int x) void;
}
abstract class B extends self::Base2 {
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base2:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
] synthetic constructor •() self::B
: super self::Base2::•()
;
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
Push FP[-6]
PushConstant CP#1
PushConstant CP#0
PushConstant CP#2
PushInt 5
CreateArrayTOS
StoreLocal r0
Push r0
PushInt 0
PushConstant CP#3
StoreIndexedTOS
Push r0
PushInt 1
Push FP[-6]
StoreIndexedTOS
Push r0
PushInt 2
PushConstant CP#4
StoreIndexedTOS
Push r0
PushInt 3
PushConstant CP#5
StoreIndexedTOS
Push r0
PushInt 4
PushInt 5
StoreIndexedTOS
PushTrue
DirectCall 4, CP#6
DirectCall 2, CP#8
ReturnTOS
}
ConstantPool {
[0] = ObjectRef ArgDesc num-args 4, num-type-args 1, names []
[1] = ObjectRef 'foo'
[2] = ObjectRef < dynamic >
[3] = ObjectRef < dart:core::double >
[4] = ObjectRef 'a1'
[5] = ObjectRef const 3.14
[6] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
[7] = Reserved
[8] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
[9] = Reserved
}
] method testSuperCall(core::int x) dynamic
return super.{self::Base2::foo}<core::double>("a1", 3.14, 5);
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
PushConstant CP#1
PushConstant CP#0
PushConstant CP#2
PushInt 1
CreateArrayTOS
StoreLocal r0
Push r0
PushInt 0
Push FP[-5]
StoreIndexedTOS
PushTrue
DirectCall 4, CP#3
DirectCall 2, CP#5
ReturnTOS
}
ConstantPool {
[0] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
[1] = ObjectRef 'foo'
[2] = ObjectRef < dynamic >
[3] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
[4] = Reserved
[5] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
[6] = Reserved
}
] method testSuperTearOff() dynamic
return super.{self::Base2::foo};
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
PushConstant CP#1
PushConstant CP#0
PushConstant CP#2
PushInt 1
CreateArrayTOS
StoreLocal r0
Push r0
PushInt 0
Push FP[-5]
StoreIndexedTOS
PushTrue
DirectCall 4, CP#3
DirectCall 2, CP#5
ReturnTOS
}
ConstantPool {
[0] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
[1] = ObjectRef 'bar'
[2] = ObjectRef < dynamic >
[3] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
[4] = Reserved
[5] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
[6] = Reserved
}
] method testSuperGet() dynamic
return super.{self::Base2::bar};
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
PushConstant CP#0
Push FP[-5]
PushConstant CP#2
PushConstant CP#1
PushConstant CP#3
PushInt 1
CreateArrayTOS
StoreLocal r0
Push r0
PushInt 0
Push FP[-5]
StoreIndexedTOS
PushTrue
DirectCall 4, CP#4
DirectCall 2, CP#6
PushConstant CP#8
DynamicCall 3, CP#10
ReturnTOS
}
ConstantPool {
[0] = ObjectRef < dart:core::int >
[1] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
[2] = ObjectRef 'bar'
[3] = ObjectRef < dynamic >
[4] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
[5] = Reserved
[6] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
[7] = Reserved
[8] = ObjectRef 'param'
[9] = ObjectRef ArgDesc num-args 2, num-type-args 1, names []
[10] = ICData dynamic target-name 'call', arg-desc CP#9
}
] method testSuperCallViaGetter() dynamic
return [@vm.call-site-attributes.metadata=receiverType:dynamic] super.{self::Base2::bar}.call<core::int>("param");
[@vm.bytecode=
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
PushConstant CP#1
PushConstant CP#0
PushConstant CP#2
PushInt 2
CreateArrayTOS
StoreLocal r0
Push r0
PushInt 0
Push FP[-5]
StoreIndexedTOS
Push r0
PushInt 1
PushInt 3
StoreIndexedTOS
PushTrue
DirectCall 4, CP#3
DirectCall 2, CP#5
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
[1] = ObjectRef 'bazz'
[2] = ObjectRef < dynamic >
[3] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
[4] = Reserved
[5] = DirectCall 'dart:core::Object::noSuchMethod', ArgDesc num-args 2, num-type-args 0, names []
[6] = Reserved
}
] method testSuperSet() dynamic {
super.{self::Base2::bazz} = 3;
}
}
[@vm.bytecode=
Bytecode {
Entry 0
CheckStack 0
PushNull
ReturnTOS
}
ConstantPool {
}
]static method main() dynamic {}