Files
sdk/pkg/vm/testcases/bytecode/super_calls.dart.expect
T
Alexander Markov da8cb470cc [vm/bytecode] Represent classes, libraries, scripts and recursive types in bytecode
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>
2019-06-20 18:27:21 +00:00

528 lines
13 KiB
Plaintext

main = #lib::main;
[@vm.bytecode=
BytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
Library '#lib'
name '#lib'
script '#lib'
Class '', script = '#lib'
Function 'main', static, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
PushNull
ReturnTOS
}
ConstantPool {
}
Class 'Base1', script = '#lib'
extends dart:core::Object
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::Base1
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 'foo', reflectable, debuggable
type-params <dart:core::Object T>
parameters [#lib::Base1::foo::TypeParam/0 'a1', dart:core::int 'a2'] (required: 2)
return-type void
Bytecode {
Entry 1
CheckStack 0
CheckFunctionTypeArgs 1, r0
PushNull
ReturnTOS
}
ConstantPool {
}
Function 'get:bar', getter, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
PushInt 42
ReturnTOS
}
ConstantPool {
}
Function 'set:bazz', setter, reflectable, debuggable
parameters [dart:core::int 'x'] (required: 1)
return-type void
Bytecode {
Entry 0
CheckStack 0
PushNull
ReturnTOS
}
ConstantPool {
}
Class 'A', script = '#lib'
extends #lib::Base1
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::A
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base1:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'testSuperCall', reflectable, debuggable
parameters [dart:core::int 'x'] (required: 1)
return-type dynamic
Bytecode {
Entry 1
CheckStack 0
PushConstant CP#0
Push FP[-6]
PushConstant CP#1
PushInt 2
DirectCall CP#2, 4
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
}
Function 'testSuperTearOff', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base1::get:foo', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'testSuperGet', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base1::get:bar', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'testSuperCallViaGetter', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 1
CheckStack 0
PushConstant CP#0
Push FP[-5]
DirectCall CP#1, 1
PushConstant CP#3
DynamicCall CP#5, 3
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
}
Function 'testSuperSet', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
PushInt 3
DirectCall CP#0, 2
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base1::set:bazz', ArgDesc num-args 2, num-type-args 0, names []
[1] = Reserved
}
Class 'Base2', script = '#lib', abstract
extends dart:core::Object
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::Base2
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 'foo', abstract, reflectable, debuggable
type-params <dart:core::Object T>
parameters [dart:core::String 'a1', #lib::Base2::foo::TypeParam/0 'a2', dart:core::int 'a3'] (required: 3)
return-type void
Function 'get:bar', getter, abstract, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Function 'set:bazz', setter, abstract, reflectable, debuggable
parameters [dart:core::int 'x'] (required: 1)
return-type void
Class 'B', script = '#lib', abstract
extends #lib::Base2
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::B
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall CP#0, 1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::Base2:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'testSuperCall', reflectable, debuggable
parameters [dart:core::int 'x'] (required: 1)
return-type dynamic
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 CP#6, 4
DirectCall CP#8, 2
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
}
Function 'testSuperTearOff', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
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 CP#3, 4
DirectCall CP#5, 2
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
}
Function 'testSuperGet', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
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 CP#3, 4
DirectCall CP#5, 2
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
}
Function 'testSuperCallViaGetter', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
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 CP#4, 4
DirectCall CP#6, 2
PushConstant CP#8
DynamicCall CP#10, 3
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
}
Function 'testSuperSet', reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
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 CP#3, 4
DirectCall CP#5, 2
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
}
}
]library #lib from "#lib" as #lib {
class Base1 extends dart.core::Object {
synthetic constructor •() → #lib::Base1
: super dart.core::Object::•()
;
method foo<T extends dart.core::Object = dynamic>(#lib::Base1::foo::T a1, dart.core::int a2) → void {}
get bar() → dynamic
return 42;
set bazz(dart.core::int x) → void {}
}
class A extends #lib::Base1 {
synthetic constructor •() → #lib::A
: super #lib::Base1::•()
;
method testSuperCall(dart.core::int x) → dynamic
return super.{#lib::Base1::foo}<dart.core::String>("a1", 2);
method testSuperTearOff() → dynamic
return super.{#lib::Base1::foo};
method testSuperGet() → dynamic
return super.{#lib::Base1::bar};
method testSuperCallViaGetter() → dynamic
return [@vm.call-site-attributes.metadata=receiverType:dynamic] super.{#lib::Base1::bar}.call<dart.core::int>("param");
method testSuperSet() → dynamic {
super.{#lib::Base1::bazz} = 3;
}
}
abstract class Base2 extends dart.core::Object {
synthetic constructor •() → #lib::Base2
: super dart.core::Object::•()
;
abstract method foo<T extends dart.core::Object = dynamic>(dart.core::String a1, #lib::Base2::foo::T a2, dart.core::int a3) → void;
abstract get bar() → dynamic;
abstract set bazz(dart.core::int x) → void;
}
abstract class B extends #lib::Base2 {
synthetic constructor •() → #lib::B
: super #lib::Base2::•()
;
method testSuperCall(dart.core::int x) → dynamic
return super.{#lib::Base2::foo}<dart.core::double>("a1", 3.14, 5);
method testSuperTearOff() → dynamic
return super.{#lib::Base2::foo};
method testSuperGet() → dynamic
return super.{#lib::Base2::bar};
method testSuperCallViaGetter() → dynamic
return [@vm.call-site-attributes.metadata=receiverType:dynamic] super.{#lib::Base2::bar}.call<dart.core::int>("param");
method testSuperSet() → dynamic {
super.{#lib::Base2::bazz} = 3;
}
}
static method main() → dynamic {}
}