3abf78212c
Add dart2bytecode tool which takes Dart sources and produces Dart bytecode. The tool uses common front-end (CFE) to parse Dart source code and contains bytecode generator which translates kernel AST to bytecode. Change-Id: I90bd6e72c619cf0edc556da0640760b30e81091d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/378560 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
262 lines
6.9 KiB
Plaintext
262 lines
6.9 KiB
Plaintext
Bytecode
|
|
Dynamic Module Entry Point: DART_SDK/pkg/dart2bytecode/testcases/optional_params.dart::main
|
|
Library 'DART_SDK/pkg/dart2bytecode/testcases/optional_params.dart'
|
|
name '#lib'
|
|
script 'DART_SDK/pkg/dart2bytecode/testcases/optional_params.dart'
|
|
|
|
Class '', script = 'DART_SDK/pkg/dart2bytecode/testcases/optional_params.dart'
|
|
|
|
|
|
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 CP#3, 1
|
|
DirectCall CP#5, 1
|
|
Drop1
|
|
PushNull
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r3
|
|
Push r3
|
|
PushInt 0
|
|
PushConstant CP#7
|
|
StoreIndexedTOS
|
|
Push r3
|
|
PushInt 1
|
|
Push r1
|
|
StoreIndexedTOS
|
|
DirectCall CP#3, 1
|
|
DirectCall CP#5, 1
|
|
Drop1
|
|
PushNull
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r3
|
|
Push r3
|
|
PushInt 0
|
|
PushConstant CP#8
|
|
StoreIndexedTOS
|
|
Push r3
|
|
PushInt 1
|
|
Push r2
|
|
StoreIndexedTOS
|
|
DirectCall CP#3, 1
|
|
DirectCall CP#5, 1
|
|
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 CP#7, 1
|
|
DirectCall CP#9, 1
|
|
Drop1
|
|
PushNull
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r5
|
|
Push r5
|
|
PushInt 0
|
|
PushConstant CP#11
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 1
|
|
Push r1
|
|
StoreIndexedTOS
|
|
DirectCall CP#7, 1
|
|
DirectCall CP#9, 1
|
|
Drop1
|
|
PushNull
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r5
|
|
Push r5
|
|
PushInt 0
|
|
PushConstant CP#12
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 1
|
|
Push r2
|
|
StoreIndexedTOS
|
|
DirectCall CP#7, 1
|
|
DirectCall CP#9, 1
|
|
Drop1
|
|
PushNull
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r5
|
|
Push r5
|
|
PushInt 0
|
|
PushConstant CP#13
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 1
|
|
Push r3
|
|
StoreIndexedTOS
|
|
DirectCall CP#7, 1
|
|
DirectCall CP#9, 1
|
|
Drop1
|
|
PushNull
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r5
|
|
Push r5
|
|
PushInt 0
|
|
PushConstant CP#14
|
|
StoreIndexedTOS
|
|
Push r5
|
|
PushInt 1
|
|
Push r4
|
|
StoreIndexedTOS
|
|
DirectCall CP#7, 1
|
|
DirectCall CP#9, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef 'a'
|
|
[1] = ObjectRef const 42
|
|
[2] = ObjectRef 'b'
|
|
[3] = ObjectRef const List<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 <'P' extends dart:core::Object? (default dynamic), 'Q' extends dart:core::Object? (default dynamic)>
|
|
parameters [dynamic 'z', dynamic 'y', dart:core::bool 'a', dart:core::Map < DART_SDK/pkg/dart2bytecode/testcases/optional_params.dart::foo3::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/optional_params.dart::foo3::TypeParam/1 > 'b'] (required: 2)
|
|
parameter-flags [0, 0, 0, 8]
|
|
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
|
|
CheckFunctionTypeArgs 2, r4
|
|
CheckStack 0
|
|
PushNull
|
|
Push r4
|
|
InstantiateType CP#4
|
|
DirectCall CP#5, 1
|
|
Drop1
|
|
Push r1
|
|
DirectCall CP#5, 1
|
|
Drop1
|
|
Push r3
|
|
DirectCall CP#5, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef 'a'
|
|
[1] = ObjectRef const false
|
|
[2] = ObjectRef 'b'
|
|
[3] = ObjectRef null
|
|
[4] = Type DART_SDK/pkg/dart2bytecode/testcases/optional_params.dart::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 CP#2, 2
|
|
Drop1
|
|
PushConstant CP#4
|
|
PushConstant CP#5
|
|
PushConstant CP#1
|
|
DirectCall CP#6, 3
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef 'fixed_x'
|
|
[1] = ObjectRef 'concrete_a'
|
|
[2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/optional_params.dart::foo1', ArgDesc num-args 2, num-type-args 0, names []
|
|
[3] = Reserved
|
|
[4] = ObjectRef 'fixed_y'
|
|
[5] = ObjectRef 'fixed_z'
|
|
[6] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/optional_params.dart::foo2', ArgDesc num-args 3, num-type-args 0, names ['a']
|
|
[7] = Reserved
|
|
}
|
|
|