Files
sdk/pkg/vm/testcases/bytecode/optional_params.dart.expect
T
Alexander Markov 61f0f5bc43 [vm/bytecode] Declare members in bytecode
This change replaces kernel AST declarations of fields and functions
with bytecode declarations.

Size of dilp files is reduced by 11-12%.

Startup latency:
Time to the first full frame: 1.945s -> 1.687s
FinalizeClass: 554ms -> 277ms
FinishClassLoading: 296ms -> 156ms

There are following regressions in bytecode mode, which will be fixed
in future:

* dart:mirrors are not supported yet (implementation of mirrors relies
  on reading kernel AST in certain cases).

  As the result, lib_2/mirrors/* tests fail.

* native extensions are not supported yet (annotations on libraries
  and classes in AST are cleaned up as they could reference members
  which are now removed from AST).

  As the result, standalone_2/entrypoints_verification_test test fails.

* language_2/spread_collections/const_error_test/* tests fail
  due to https://github.com/dart-lang/sdk/issues/36286.

Change-Id: I5130f401fd7b84038b136136e7ccc1a6e51b6cea
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97561
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2019-03-26 21:40:10 +00:00

296 lines
7.3 KiB
Plaintext

main = #lib::main;
[@vm.bytecode=
ComponentBytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
}
] [@vm.bytecode=
MembersBytecodeMetadata {
Members {
Function 'foo1', static, has-optional-positional-params, reflectable, debuggable
parameters [dynamic 'x', dynamic 'a', dynamic 'b'] (required: 1)
return-type void
Bytecode {
EntryOptional 1, 2, 0
LoadConstant r1, CP#0
LoadConstant r2, CP#1
Frame 1
CheckStack 0
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r3
Push r3
PushInt 0
PushConstant CP#2
StoreIndexedTOS
Push r3
PushInt 1
Push r0
StoreIndexedTOS
DirectCall 1, CP#3
DirectCall 1, CP#5
Drop1
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r3
Push r3
PushInt 0
PushConstant CP#7
StoreIndexedTOS
Push r3
PushInt 1
Push r1
StoreIndexedTOS
DirectCall 1, CP#3
DirectCall 1, CP#5
Drop1
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r3
Push r3
PushInt 0
PushConstant CP#8
StoreIndexedTOS
Push r3
PushInt 1
Push r2
StoreIndexedTOS
DirectCall 1, CP#3
DirectCall 1, CP#5
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = ObjectRef 'default_a'
[1] = ObjectRef 'default_b'
[2] = ObjectRef 'x = '
[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
[7] = ObjectRef 'a = '
[8] = ObjectRef 'b = '
}
Function 'foo2', static, has-optional-named-params, reflectable, debuggable
parameters [dynamic 'y', dynamic 'z', dynamic 'c', dynamic 'a', dynamic 'b'] (required: 2)
return-type void
Bytecode {
EntryOptional 2, 0, 3
LoadConstant r2, CP#0
LoadConstant r2, CP#1
LoadConstant r3, CP#2
LoadConstant r3, CP#3
LoadConstant r4, CP#4
LoadConstant r4, CP#5
Frame 1
CheckStack 0
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r5
Push r5
PushInt 0
PushConstant CP#6
StoreIndexedTOS
Push r5
PushInt 1
Push r0
StoreIndexedTOS
DirectCall 1, CP#7
DirectCall 1, CP#9
Drop1
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r5
Push r5
PushInt 0
PushConstant CP#11
StoreIndexedTOS
Push r5
PushInt 1
Push r1
StoreIndexedTOS
DirectCall 1, CP#7
DirectCall 1, CP#9
Drop1
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r5
Push r5
PushInt 0
PushConstant CP#12
StoreIndexedTOS
Push r5
PushInt 1
Push r2
StoreIndexedTOS
DirectCall 1, CP#7
DirectCall 1, CP#9
Drop1
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r5
Push r5
PushInt 0
PushConstant CP#13
StoreIndexedTOS
Push r5
PushInt 1
Push r3
StoreIndexedTOS
DirectCall 1, CP#7
DirectCall 1, CP#9
Drop1
PushNull
PushInt 2
CreateArrayTOS
StoreLocal r5
Push r5
PushInt 0
PushConstant CP#14
StoreIndexedTOS
Push r5
PushInt 1
Push r4
StoreIndexedTOS
DirectCall 1, CP#7
DirectCall 1, CP#9
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = ObjectRef 'a'
[1] = ObjectRef const 42
[2] = ObjectRef 'b'
[3] = ObjectRef const <dart:core::String> ['default_b']
[4] = ObjectRef 'c'
[5] = ObjectRef 'default_c'
[6] = ObjectRef 'y = '
[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
[11] = ObjectRef 'z = '
[12] = ObjectRef 'a = '
[13] = ObjectRef 'b = '
[14] = ObjectRef 'c = '
}
Function 'foo3', static, has-optional-named-params, reflectable, debuggable
type-params <dart:core::Object P, dart:core::Object Q>
parameters [dynamic 'z', dynamic 'y', dart:core::bool 'a', dart:core::Map < #lib::foo3::TypeParam/0, #lib::foo3::TypeParam/1 > 'b'] (required: 2)
return-type void
Bytecode {
EntryOptional 2, 0, 2
LoadConstant r2, CP#0
LoadConstant r2, CP#1
LoadConstant r3, CP#2
LoadConstant r3, CP#3
Frame 1
CheckStack 0
CheckFunctionTypeArgs 2, r4
PushNull
Push r4
InstantiateType CP#4
DirectCall 1, CP#5
Drop1
Push r1
DirectCall 1, CP#5
Drop1
Push r3
DirectCall 1, CP#5
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = ObjectRef 'a'
[1] = ObjectRef const false
[2] = ObjectRef 'b'
[3] = ObjectRef null
[4] = Type #lib::foo3::TypeParam/0
[5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[6] = Reserved
}
Function 'main', static, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
PushConstant CP#0
PushConstant CP#1
DirectCall 2, CP#2
Drop1
PushConstant CP#4
PushConstant CP#5
PushConstant CP#1
DirectCall 3, CP#6
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = ObjectRef 'fixed_x'
[1] = ObjectRef 'concrete_a'
[2] = DirectCall '#lib::foo1', ArgDesc num-args 2, num-type-args 0, names []
[3] = Reserved
[4] = ObjectRef 'fixed_y'
[5] = ObjectRef 'fixed_z'
[6] = DirectCall '#lib::foo2', ArgDesc num-args 3, num-type-args 0, names ['a']
[7] = Reserved
}
}
}
]library #lib from "#lib" as #lib {
static method foo1(dynamic x, [dynamic a = "default_a", dynamic b = "default_b"]) → void {
dart.core::print("x = ${x}");
dart.core::print("a = ${a}");
dart.core::print("b = ${b}");
}
static method foo2(dynamic y, dynamic z, {dynamic c = "default_c", dynamic a = 42, dynamic b = const <dart.core::String>["default_b"]}) → void {
dart.core::print("y = ${y}");
dart.core::print("z = ${z}");
dart.core::print("a = ${a}");
dart.core::print("b = ${b}");
dart.core::print("c = ${c}");
}
static method foo3<P extends dart.core::Object = dynamic, Q extends dart.core::Object = dynamic>(dynamic z, dynamic y, {dart.core::bool a = false, dart.core::Map<#lib::foo3::P, #lib::foo3::Q> b = null}) → void {
dart.core::print(#lib::foo3::P);
dart.core::print(y);
dart.core::print(b);
}
static method main() → dynamic {
#lib::foo1("fixed_x", "concrete_a");
#lib::foo2("fixed_y", "fixed_z", a: "concrete_a");
}
}