51d1c8923a
This is a reland of commit 88496ba1c3
Fixes on top of the original change:
* Closure layout is changed to avoid gap between fixed fields and
variable-length elements on compressed pointers architecture.
This gap was causing crashes in the GC when scanning closure
objects.
* pkg/vm_snapshot_analysis/test/instruction_sizes_test is fixed
on arm64 by decreasing threshold for detecting size changes.
Original change's description:
> [vm,dart2bytecode,modular_aot] Variable-length closure objects
>
> Extend closure objects with variable number of elements to capture.
> This is needed to support capturing multiple independent contexts
> after capturing is computed in the front-end.
>
> The following fixed Closure fields are moved into variable-length
> elements:
> - delayed type arguments;
> - instantiator type arguments;
> - function type arguments;
> - context.
>
> Number of elements and presence/indices of various type arguments
> are encoded into the new length_and_flags field in the Closure.
>
> Most closure objects don't need any of the type arguments so this
> change will reduce average Closure object size.
TEST=ci
Issue: https://github.com/dart-lang/sdk/issues/61572
Issue: https://github.com/dart-lang/sdk/issues/61635
Change-Id: I8685e632e2d0832766ecdc470f3cf9a6b880de48
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/494243
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Tess Strickland <sstrickl@google.com>
Reviewed-by: Slava Egorov <vegorov@google.com>
722 lines
20 KiB
Plaintext
722 lines
20 KiB
Plaintext
Bytecode
|
|
Dynamic Module Entry Point: DART_SDK/pkg/dart2bytecode/testcases/async.dart::main
|
|
Library 'DART_SDK/pkg/dart2bytecode/testcases/async.dart'
|
|
name '#lib'
|
|
script 'DART_SDK/pkg/dart2bytecode/testcases/async.dart'
|
|
|
|
Class '', script = 'DART_SDK/pkg/dart2bytecode/testcases/async.dart'
|
|
|
|
Field 'asyncInFieldInitializer', type = FunctionType (dart:async::Future < dart:core::int >) -> dart:async::Future < Null >, getter = 'get:asyncInFieldInitializer', reflectable, static, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 3
|
|
CheckStack 0
|
|
AllocateClosure CP#15
|
|
StoreLocal r2
|
|
Push r2
|
|
Push r0
|
|
StoreClosureElement 0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ClosureFunction 0
|
|
[1] = Type dart:async::Future < dart:core::int >
|
|
[2] = ObjectRef 'x'
|
|
[3] = SubtypeTestCache
|
|
[4] = ObjectRef < Null >
|
|
[5] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
|
|
[6] = Reserved
|
|
[7] = Type dynamic
|
|
[8] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
|
|
[9] = Reserved
|
|
[10] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
|
|
[11] = Reserved
|
|
[12] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
|
[13] = Reserved
|
|
[14] = EndClosureFunctionScope
|
|
[15] = AllocateClosure 0, num-elements: 1, flags: 0
|
|
[16] = Reserved
|
|
}
|
|
Closure DART_SDK/pkg/dart2bytecode/testcases/async.dart::asyncInFieldInitializer (field)::'<anonymous closure>' async (dart:async::Future < dart:core::int > x) -> dart:async::Future < Null >
|
|
ClosureCode {
|
|
EntrySuspendable 2, 0, 0
|
|
Frame 5
|
|
Push r1
|
|
LoadClosureElement 0
|
|
PopLocal r3
|
|
CheckStack 0
|
|
JumpIfUnchecked L1
|
|
Push r2
|
|
PushConstant CP#1
|
|
PushNull
|
|
PushNull
|
|
PushConstant CP#2
|
|
AssertAssignable 0, CP#3
|
|
Drop1
|
|
L1:
|
|
PushConstant CP#4
|
|
DirectCall CP#5, 1
|
|
PopLocal r0
|
|
Try #0 start:
|
|
Push r2
|
|
PopLocal r6
|
|
Suspend L2
|
|
Push r0
|
|
Push r6
|
|
DirectCall CP#8, 2
|
|
ReturnTOS
|
|
L2:
|
|
Drop1
|
|
PushNull
|
|
PopLocal r5
|
|
Push r0
|
|
Push r5
|
|
PushNull
|
|
PopLocal r0
|
|
DirectCall CP#10, 2
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 7
|
|
Push r0
|
|
JumpIfNull L3
|
|
Push r0
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
DirectCall CP#12, 3
|
|
ReturnTOS
|
|
L3:
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
Throw 1
|
|
}
|
|
|
|
|
|
Function 'foo', static, reflectable, debuggable, async
|
|
parameters [] (required: 0)
|
|
return-type dart:async::Future < dart:core::int >
|
|
|
|
Bytecode {
|
|
EntrySuspendable 0, 0, 0
|
|
Frame 2
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
PopLocal r0
|
|
Try #0 start:
|
|
PushInt 42
|
|
PopLocal r1
|
|
Push r0
|
|
Push r1
|
|
PushNull
|
|
PopLocal r0
|
|
DirectCall CP#4, 2
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 2
|
|
Push r0
|
|
JumpIfNull L1
|
|
Push r0
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
DirectCall CP#6, 3
|
|
ReturnTOS
|
|
L1:
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
Throw 1
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 15, end 30, handler 30, needs-stack-trace, synthetic, types [CP#3]
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef < dart:core::int >
|
|
[1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
|
|
[2] = Reserved
|
|
[3] = Type dynamic
|
|
[4] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
|
[7] = Reserved
|
|
}
|
|
|
|
|
|
Function 'simpleAsyncAwait', static, reflectable, debuggable, async
|
|
parameters [dart:async::Future < dart:core::int > 'a', dart:async::Future < dart:core::int > 'b'] (required: 2)
|
|
return-type dart:async::Future < dart:core::int >
|
|
|
|
Bytecode {
|
|
EntrySuspendable 2, 0, 0
|
|
Frame 3
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
PopLocal r0
|
|
Try #0 start:
|
|
Push r1
|
|
PopLocal r4
|
|
Suspend L1
|
|
Push r0
|
|
Push r4
|
|
DirectCall CP#4, 2
|
|
ReturnTOS
|
|
L1:
|
|
Push r2
|
|
PopLocal r4
|
|
Suspend L2
|
|
Push r0
|
|
Push r4
|
|
DirectCall CP#4, 2
|
|
ReturnTOS
|
|
L2:
|
|
AddInt
|
|
PopLocal r3
|
|
Push r0
|
|
Push r3
|
|
PushNull
|
|
PopLocal r0
|
|
DirectCall CP#6, 2
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 5
|
|
Push r0
|
|
JumpIfNull L3
|
|
Push r0
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
DirectCall CP#8, 3
|
|
ReturnTOS
|
|
L3:
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
Throw 1
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 15, end 61, handler 61, needs-stack-trace, synthetic, types [CP#3]
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef < dart:core::int >
|
|
[1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
|
|
[2] = Reserved
|
|
[3] = Type dynamic
|
|
[4] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
|
|
[7] = Reserved
|
|
[8] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
|
[9] = Reserved
|
|
}
|
|
|
|
|
|
Function 'loops', static, reflectable, debuggable, async
|
|
parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
|
|
return-type dart:async::Future < dart:core::int >
|
|
|
|
Bytecode {
|
|
EntrySuspendable 1, 0, 0
|
|
Frame 7
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
PopLocal r0
|
|
Try #0 start:
|
|
PushInt 0
|
|
PopLocal r3
|
|
PushInt 0
|
|
PopLocal r4
|
|
L5:
|
|
CheckStack 1
|
|
Push r4
|
|
PushInt 10
|
|
CompareIntLt
|
|
JumpIfFalse L1
|
|
Push r1
|
|
InterfaceCall CP#4, 1
|
|
PopLocal r5
|
|
L4:
|
|
CheckStack 2
|
|
Push r5
|
|
InterfaceCall CP#6, 1
|
|
JumpIfFalse L2
|
|
Push r5
|
|
InterfaceCall CP#8, 1
|
|
PopLocal r6
|
|
Push r3
|
|
Push r4
|
|
Push r6
|
|
AddInt
|
|
DirectCall CP#10, 0
|
|
PopLocal r7
|
|
Suspend L3
|
|
Push r0
|
|
Push r7
|
|
DirectCall CP#12, 2
|
|
ReturnTOS
|
|
L3:
|
|
AddInt
|
|
AddInt
|
|
PopLocal r3
|
|
Jump L4
|
|
L2:
|
|
Push r4
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r4
|
|
Drop1
|
|
Jump L5
|
|
L1:
|
|
PushInt 0
|
|
PopLocal r4
|
|
L7:
|
|
CheckStack 1
|
|
Push r4
|
|
PushInt 10
|
|
CompareIntLt
|
|
JumpIfFalse L6
|
|
Push r3
|
|
Push r4
|
|
AddInt
|
|
PopLocal r3
|
|
Push r4
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r4
|
|
Drop1
|
|
Jump L7
|
|
L6:
|
|
Push r3
|
|
PopLocal r2
|
|
Push r0
|
|
Push r2
|
|
PushNull
|
|
PopLocal r0
|
|
DirectCall CP#14, 2
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 8
|
|
Push r0
|
|
JumpIfNull L8
|
|
Push r0
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
DirectCall CP#16, 3
|
|
ReturnTOS
|
|
L8:
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
Throw 1
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 15, end 146, handler 146, needs-stack-trace, synthetic, types [CP#3]
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef < dart:core::int >
|
|
[1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
|
|
[2] = Reserved
|
|
[3] = Type dynamic
|
|
[4] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
|
|
[7] = Reserved
|
|
[8] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
|
|
[9] = Reserved
|
|
[10] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/async.dart::foo', ArgDesc num-args 0, num-type-args 0, names []
|
|
[11] = Reserved
|
|
[12] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
|
|
[13] = Reserved
|
|
[14] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
|
|
[15] = Reserved
|
|
[16] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
|
[17] = Reserved
|
|
}
|
|
|
|
|
|
Function 'tryCatchRethrow', static, reflectable, debuggable, async
|
|
parameters [dart:async::Future < dart:core::int > 'a', dart:async::Future < dart:core::int > 'b', dart:async::Future < dart:core::int > 'c'] (required: 3)
|
|
return-type dart:async::Future < dart:core::int >
|
|
|
|
Bytecode {
|
|
EntrySuspendable 3, 0, 0
|
|
Frame 9
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
PopLocal r0
|
|
Try #0 start:
|
|
PushInt 1
|
|
PopLocal r5
|
|
Try #1 start:
|
|
Try #2 start:
|
|
Push r5
|
|
Push r1
|
|
PopLocal r10
|
|
Suspend L1
|
|
Push r0
|
|
Push r10
|
|
DirectCall CP#4, 2
|
|
ReturnTOS
|
|
L1:
|
|
AddInt
|
|
PopLocal r5
|
|
Jump L2
|
|
Try #2 end:
|
|
Try #2 handler:
|
|
SetFrame 12
|
|
MoveSpecial exception, r8
|
|
MoveSpecial stackTrace, r9
|
|
Push r8
|
|
PopLocal r10
|
|
Push r10
|
|
PushConstant CP#7
|
|
InterfaceCall CP#8, 2
|
|
JumpIfFalse L3
|
|
Jump L4
|
|
L3:
|
|
Push r5
|
|
Push r2
|
|
PopLocal r11
|
|
Suspend L5
|
|
Push r0
|
|
Push r11
|
|
DirectCall CP#4, 2
|
|
ReturnTOS
|
|
L5:
|
|
AddInt
|
|
PopLocal r5
|
|
Push r8
|
|
Push r9
|
|
Throw 1
|
|
L2:
|
|
Jump L6
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
SetFrame 12
|
|
MoveSpecial exception, r6
|
|
MoveSpecial stackTrace, r7
|
|
PushConstant CP#10
|
|
DirectCall CP#11, 1
|
|
Drop1
|
|
Push r5
|
|
Push r3
|
|
PopLocal r8
|
|
Suspend L7
|
|
Push r0
|
|
Push r8
|
|
DirectCall CP#4, 2
|
|
ReturnTOS
|
|
L7:
|
|
AddInt
|
|
PopLocal r5
|
|
Push r5
|
|
PopLocal r4
|
|
Push r0
|
|
Push r4
|
|
PushNull
|
|
PopLocal r0
|
|
DirectCall CP#13, 2
|
|
ReturnTOS
|
|
L4:
|
|
PushConstant CP#10
|
|
DirectCall CP#11, 1
|
|
Drop1
|
|
Push r5
|
|
Push r3
|
|
PopLocal r8
|
|
Suspend L8
|
|
Push r0
|
|
Push r8
|
|
DirectCall CP#4, 2
|
|
ReturnTOS
|
|
L8:
|
|
AddInt
|
|
PopLocal r5
|
|
Push r5
|
|
PopLocal r4
|
|
Push r0
|
|
Push r4
|
|
PushNull
|
|
PopLocal r0
|
|
DirectCall CP#13, 2
|
|
ReturnTOS
|
|
L6:
|
|
PushConstant CP#10
|
|
DirectCall CP#11, 1
|
|
Drop1
|
|
Push r5
|
|
Push r3
|
|
PopLocal r8
|
|
Suspend L9
|
|
Push r0
|
|
Push r8
|
|
DirectCall CP#4, 2
|
|
ReturnTOS
|
|
L9:
|
|
AddInt
|
|
PopLocal r5
|
|
Push r5
|
|
PopLocal r4
|
|
Push r0
|
|
Push r4
|
|
PushNull
|
|
PopLocal r0
|
|
DirectCall CP#13, 2
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 12
|
|
Push r0
|
|
JumpIfNull L10
|
|
Push r0
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
DirectCall CP#15, 3
|
|
ReturnTOS
|
|
L10:
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
Throw 1
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 15, end 236, handler 236, needs-stack-trace, synthetic, types [CP#3]
|
|
try-index 1, outer 0, start 19, end 102, handler 102, needs-stack-trace, synthetic, types [CP#3]
|
|
try-index 2, outer 1, start 19, end 44, handler 44, needs-stack-trace, types [CP#6]
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef < dart:core::int >
|
|
[1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
|
|
[2] = Reserved
|
|
[3] = Type dynamic
|
|
[4] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = Type dart:core::Object
|
|
[7] = Type dart:core::Error
|
|
[8] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
|
|
[9] = Reserved
|
|
[10] = ObjectRef 'fin'
|
|
[11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[12] = Reserved
|
|
[13] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
|
|
[14] = Reserved
|
|
[15] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
|
[16] = Reserved
|
|
}
|
|
|
|
|
|
Function 'closure', static, reflectable, debuggable
|
|
parameters [dart:async::Future < dart:core::int > 'a'] (required: 1)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 4
|
|
CheckStack 0
|
|
AllocateContext 0, 2
|
|
PopLocal r0
|
|
Push r0
|
|
Push FP[-5]
|
|
StoreContextVar 0, 0
|
|
Push r0
|
|
PushInt 3
|
|
StoreContextVar 0, 1
|
|
AllocateClosure CP#15
|
|
StoreLocal r3
|
|
Push r3
|
|
Push r0
|
|
StoreClosureElement 0
|
|
PopLocal r2
|
|
Push r2
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ClosureFunction 0
|
|
[1] = ObjectRef < dart:core::int >
|
|
[2] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
|
|
[3] = Reserved
|
|
[4] = Type dynamic
|
|
[5] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
|
|
[6] = Reserved
|
|
[7] = ObjectRef 'fin'
|
|
[8] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[9] = Reserved
|
|
[10] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
|
|
[11] = Reserved
|
|
[12] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
|
[13] = Reserved
|
|
[14] = EndClosureFunctionScope
|
|
[15] = AllocateClosure 0, num-elements: 1, flags: 0
|
|
[16] = Reserved
|
|
}
|
|
Closure DART_SDK/pkg/dart2bytecode/testcases/async.dart::closure::'nested' async () -> dart:async::Future < dart:core::int >
|
|
ClosureCode {
|
|
EntrySuspendable 1, 0, 0
|
|
Frame 8
|
|
Push r1
|
|
LoadClosureElement 0
|
|
PopLocal r2
|
|
CheckStack 0
|
|
PushConstant CP#1
|
|
DirectCall CP#2, 1
|
|
PopLocal r0
|
|
Try #0 start:
|
|
PushInt 4
|
|
PopLocal r5
|
|
Push r2
|
|
PopLocal r6
|
|
Try #1 start:
|
|
Push r2
|
|
PushInt 5
|
|
StoreContextVar 0, 1
|
|
Push r2
|
|
LoadContextVar 0, 0
|
|
PopLocal r8
|
|
Suspend L1
|
|
Push r0
|
|
Push r8
|
|
DirectCall CP#5, 2
|
|
ReturnTOS
|
|
L1:
|
|
PopLocal r5
|
|
Push r2
|
|
LoadContextVar 0, 1
|
|
Push r5
|
|
AddInt
|
|
PopLocal r4
|
|
Jump L2
|
|
Try #1 end:
|
|
Try #1 handler:
|
|
SetFrame 9
|
|
Push r6
|
|
PopLocal r2
|
|
MoveSpecial exception, r6
|
|
MoveSpecial stackTrace, r7
|
|
PushConstant CP#7
|
|
DirectCall CP#8, 1
|
|
Drop1
|
|
Push r6
|
|
Push r7
|
|
Throw 1
|
|
L2:
|
|
Push r6
|
|
PopLocal r2
|
|
PushConstant CP#7
|
|
DirectCall CP#8, 1
|
|
Drop1
|
|
Push r4
|
|
PopLocal r4
|
|
Push r0
|
|
Push r4
|
|
PushNull
|
|
PopLocal r0
|
|
DirectCall CP#10, 2
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 9
|
|
Push r0
|
|
JumpIfNull L3
|
|
Push r0
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
DirectCall CP#12, 3
|
|
ReturnTOS
|
|
L3:
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
Throw 1
|
|
}
|
|
|
|
|
|
Function 'testAssert', static, reflectable, debuggable, async
|
|
parameters [dart:async::Future < dart:core::int > 'a'] (required: 1)
|
|
return-type dart:async::Future < dart:core::int >
|
|
|
|
Bytecode {
|
|
EntrySuspendable 1, 0, 0
|
|
Frame 2
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
PopLocal r0
|
|
Try #0 start:
|
|
PushInt 7
|
|
PopLocal r2
|
|
Push r0
|
|
Push r2
|
|
PushNull
|
|
PopLocal r0
|
|
DirectCall CP#4, 2
|
|
ReturnTOS
|
|
Try #0 end:
|
|
Try #0 handler:
|
|
SetFrame 3
|
|
Push r0
|
|
JumpIfNull L1
|
|
Push r0
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
DirectCall CP#6, 3
|
|
ReturnTOS
|
|
L1:
|
|
MoveSpecial exception, r0
|
|
Push r0
|
|
MoveSpecial stackTrace, r0
|
|
Push r0
|
|
Throw 1
|
|
}
|
|
ExceptionsTable {
|
|
try-index 0, outer -1, start 15, end 30, handler 30, needs-stack-trace, synthetic, types [CP#3]
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef < dart:core::int >
|
|
[1] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
|
|
[2] = Reserved
|
|
[3] = Type dynamic
|
|
[4] = DirectCall 'dart:async::_SuspendState::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
|
[7] = Reserved
|
|
}
|
|
|
|
|
|
Function 'main', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
}
|
|
|