61f0f5bc43
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>
296 lines
7.3 KiB
Plaintext
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");
|
|
}
|
|
}
|