[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: I7ca5cec0fd8725c432a01d51781fb14e803997dd Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/489482 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: Tess Strickland <sstrickl@google.com>
This commit is contained in:
committed by
Commit Queue
parent
9cb2707639
commit
88496ba1c3
@@ -47,7 +47,7 @@ which reside in different sections such as libraries, classes, members, code, et
|
||||
```
|
||||
type BytecodeFile {
|
||||
UInt32 magic = 0x44424333; // 'DBC3'
|
||||
UInt32 formatVersion = 1;
|
||||
UInt32 formatVersion = 2;
|
||||
|
||||
// Descriptors of the sections below.
|
||||
// Each section has a fixed index in the descriptors array.
|
||||
@@ -816,6 +816,14 @@ type ConstantDeferredLibraryPrefix extends ConstantPoolEntry {
|
||||
PackedObject enclosingLibrary;
|
||||
PackedObject targetLibrary;
|
||||
}
|
||||
|
||||
// Occupies 2 entries in the constant pool
|
||||
type ConstantAllocateClosure extends ConstantPoolEntry {
|
||||
Byte tag = 18;
|
||||
UInt closureIndex;
|
||||
UInt numElements;
|
||||
UInt flags = (hasDelayedTypeArguments, hasInstantiatorTypeArguments, hasFunctionTypeArguments);
|
||||
}
|
||||
```
|
||||
|
||||
### Exceptions table
|
||||
@@ -1423,7 +1431,15 @@ SP[0] = SP[-1] <op> SP[0] ? true : false
|
||||
|
||||
#### AllocateClosure D
|
||||
|
||||
Allocate closure object for closure function ConstantPool[D].
|
||||
Allocate closure object described by ConstantAllocateClosure in ConstantPool[D].
|
||||
|
||||
#### LoadClosureElement D
|
||||
|
||||
Load element [D] from closure SP[0] and push it onto the stack.
|
||||
|
||||
#### StoreClosureElement D
|
||||
|
||||
Store object SP[0] into the element [D] of closure SP[-1].
|
||||
|
||||
#### Nop
|
||||
|
||||
|
||||
@@ -787,9 +787,21 @@ class BytecodeAssembler {
|
||||
}
|
||||
|
||||
@pragma('vm:prefer-inline')
|
||||
void emitAllocateClosure() {
|
||||
void emitAllocateClosure(int rd) {
|
||||
emitSourcePosition();
|
||||
_emitInstruction0(Opcode.kAllocateClosure);
|
||||
_emitInstructionD(Opcode.kAllocateClosure, rd);
|
||||
}
|
||||
|
||||
@pragma('vm:prefer-inline')
|
||||
void emitLoadClosureElement(int rd) {
|
||||
emitSourcePosition();
|
||||
_emitInstructionD(Opcode.kLoadClosureElement, rd);
|
||||
}
|
||||
|
||||
@pragma('vm:prefer-inline')
|
||||
void emitStoreClosureElement(int rd) {
|
||||
emitSourcePosition();
|
||||
_emitInstructionD(Opcode.kStoreClosureElement, rd);
|
||||
}
|
||||
|
||||
@pragma('vm:prefer-inline')
|
||||
|
||||
@@ -1010,8 +1010,6 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
'_interpolate',
|
||||
);
|
||||
|
||||
late Class closureClass = libraryIndex.getClass('dart:core', '_Closure');
|
||||
|
||||
late Procedure objectInstanceOf = libraryIndex.getProcedure(
|
||||
'dart:core',
|
||||
'Object',
|
||||
@@ -1024,36 +1022,6 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
'_simpleInstanceOf',
|
||||
);
|
||||
|
||||
late Field closureInstantiatorTypeArguments = libraryIndex.getField(
|
||||
'dart:core',
|
||||
'_Closure',
|
||||
'_instantiator_type_arguments',
|
||||
);
|
||||
|
||||
late Field closureFunctionTypeArguments = libraryIndex.getField(
|
||||
'dart:core',
|
||||
'_Closure',
|
||||
'_function_type_arguments',
|
||||
);
|
||||
|
||||
late Field closureDelayedTypeArguments = libraryIndex.getField(
|
||||
'dart:core',
|
||||
'_Closure',
|
||||
'_delayed_type_arguments',
|
||||
);
|
||||
|
||||
late Field closureFunction = libraryIndex.getField(
|
||||
'dart:core',
|
||||
'_Closure',
|
||||
'_function',
|
||||
);
|
||||
|
||||
late Field closureContext = libraryIndex.getField(
|
||||
'dart:core',
|
||||
'_Closure',
|
||||
'_context',
|
||||
);
|
||||
|
||||
late Procedure prependTypeArguments = libraryIndex.getTopLevelProcedure(
|
||||
'dart:_internal',
|
||||
'_prependTypeArguments',
|
||||
@@ -2226,7 +2194,7 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
|
||||
if (isClosure) {
|
||||
asm.emitPush(locals.closureVarIndexInFrame);
|
||||
asm.emitLoadFieldTOS(cp.addInstanceField(closureContext));
|
||||
asm.emitLoadClosureElement(contextClosureElement);
|
||||
asm.emitPopLocal(locals.contextVarIndexInFrame);
|
||||
}
|
||||
|
||||
@@ -2294,7 +2262,7 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
final int numParentTypeArgs = locals.numParentTypeArguments;
|
||||
asm.emitPush(locals.functionTypeArgsVarIndexInFrame);
|
||||
asm.emitPush(locals.closureVarIndexInFrame);
|
||||
asm.emitLoadFieldTOS(cp.addInstanceField(closureFunctionTypeArguments));
|
||||
asm.emitLoadClosureElement(functionTypeArgumentsClosureElement);
|
||||
_genPushInt(numParentTypeArgs);
|
||||
_genPushInt(numParentTypeArgs + function.typeParameters.length);
|
||||
_genDirectCall(
|
||||
@@ -2305,17 +2273,35 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
|
||||
} else {
|
||||
asm.emitPush(locals.closureVarIndexInFrame);
|
||||
asm.emitLoadFieldTOS(cp.addInstanceField(closureFunctionTypeArguments));
|
||||
asm.emitLoadClosureElement(functionTypeArgumentsClosureElement);
|
||||
asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool get closureHasDelayedTypeArguments =>
|
||||
enclosingFunction!.typeParameters.isNotEmpty;
|
||||
bool get closureHasInstantiatorTypeArguments =>
|
||||
instantiatorTypeArguments != null;
|
||||
bool get closureHasFunctionTypeArguments =>
|
||||
locals.hasFunctionTypeArgsVar && locals.numParentTypeArguments > 0;
|
||||
|
||||
int get delayedTypeArgumentsClosureElement => 0;
|
||||
int get instantiatorTypeArgumentsClosureElement =>
|
||||
(closureHasDelayedTypeArguments ? 1 : 0);
|
||||
int get functionTypeArgumentsClosureElement =>
|
||||
(closureHasDelayedTypeArguments ? 1 : 0) +
|
||||
(closureHasInstantiatorTypeArguments ? 1 : 0);
|
||||
int get contextClosureElement =>
|
||||
(closureHasDelayedTypeArguments ? 1 : 0) +
|
||||
(closureHasInstantiatorTypeArguments ? 1 : 0) +
|
||||
(closureHasFunctionTypeArguments ? 1 : 0);
|
||||
|
||||
void _handleDelayedTypeArguments(Label doneCheckingTypeArguments) {
|
||||
Label noDelayedTypeArgs = new Label();
|
||||
|
||||
asm.emitPush(locals.closureVarIndexInFrame);
|
||||
asm.emitLoadFieldTOS(cp.addInstanceField(closureDelayedTypeArguments));
|
||||
asm.emitLoadClosureElement(delayedTypeArgumentsClosureElement);
|
||||
asm.emitStoreLocal(locals.functionTypeArgsVarIndexInFrame);
|
||||
asm.emitPushConstant(cp.addEmptyTypeArguments());
|
||||
asm.emitJumpIfEqStrict(noDelayedTypeArgs);
|
||||
@@ -2347,7 +2333,7 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
(t) => containsTypeParameter(t, functionTypeParametersSet!),
|
||||
)) {
|
||||
asm.emitPush(locals.closureVarIndexInFrame);
|
||||
asm.emitLoadFieldTOS(cp.addInstanceField(closureFunctionTypeArguments));
|
||||
asm.emitLoadClosureElement(functionTypeArgumentsClosureElement);
|
||||
asm.emitPopLocal(locals.functionTypeArgsVarIndexInFrame);
|
||||
}
|
||||
|
||||
@@ -2802,7 +2788,7 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
);
|
||||
closures.add(closure);
|
||||
|
||||
final int closureFunctionIndex = cp.addClosureFunction(closureIndex);
|
||||
cp.addClosureFunction(closureIndex);
|
||||
|
||||
_recordSourcePosition(function.fileOffset, SourcePositions.syntheticFlag);
|
||||
_genPrologue(node, function);
|
||||
@@ -2856,7 +2842,7 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
|
||||
_popAssemblerState();
|
||||
|
||||
return closureFunctionIndex;
|
||||
return closureIndex;
|
||||
}
|
||||
|
||||
ClosureDeclaration getClosureDeclaration(
|
||||
@@ -2972,40 +2958,59 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
|
||||
void _genAllocateClosureInstance(
|
||||
TreeNode node,
|
||||
int closureFunctionIndex,
|
||||
int closureIndex,
|
||||
FunctionNode function,
|
||||
) {
|
||||
asm.emitPushConstant(closureFunctionIndex);
|
||||
asm.emitPush(locals.contextVarIndexInFrame);
|
||||
_genPushInstantiatorTypeArguments();
|
||||
asm.emitAllocateClosure();
|
||||
final bool hasDelayedTypeArguments = function.typeParameters.isNotEmpty;
|
||||
final bool hasInstantiatorTypeArguments = instantiatorTypeArguments != null;
|
||||
final bool hasFunctionTypeArguments = locals.hasFunctionTypeArgsVar;
|
||||
final numElements =
|
||||
(hasDelayedTypeArguments ? 1 : 0) +
|
||||
(hasInstantiatorTypeArguments ? 1 : 0) +
|
||||
(hasFunctionTypeArguments ? 1 : 0) + /* context */
|
||||
1;
|
||||
|
||||
final bool storeFunctionTAV = locals.hasFunctionTypeArgsVar;
|
||||
final bool setEmptyDelayedTAV = function.typeParameters.isNotEmpty;
|
||||
asm.emitAllocateClosure(
|
||||
cp.addAllocateClosure(
|
||||
closureIndex,
|
||||
numElements,
|
||||
hasDelayedTypeArguments: hasDelayedTypeArguments,
|
||||
hasInstantiatorTypeArguments: hasInstantiatorTypeArguments,
|
||||
hasFunctionTypeArguments: hasFunctionTypeArguments,
|
||||
),
|
||||
);
|
||||
|
||||
if (storeFunctionTAV || setEmptyDelayedTAV) {
|
||||
final int temp = locals.tempIndexInFrame(node);
|
||||
asm.emitStoreLocal(temp);
|
||||
final int temp = locals.tempIndexInFrame(node);
|
||||
asm.emitStoreLocal(temp);
|
||||
|
||||
if (storeFunctionTAV) {
|
||||
asm.emitPush(temp);
|
||||
_genPushFunctionTypeArguments();
|
||||
asm.emitStoreFieldTOS(
|
||||
cp.addInstanceField(closureFunctionTypeArguments),
|
||||
);
|
||||
}
|
||||
|
||||
if (setEmptyDelayedTAV) {
|
||||
asm.emitPush(temp);
|
||||
asm.emitPushConstant(cp.addEmptyTypeArguments());
|
||||
asm.emitStoreFieldTOS(cp.addInstanceField(closureDelayedTypeArguments));
|
||||
}
|
||||
var elementIndex = 0;
|
||||
if (hasDelayedTypeArguments) {
|
||||
asm.emitPush(temp);
|
||||
asm.emitPushConstant(cp.addEmptyTypeArguments());
|
||||
asm.emitStoreClosureElement(elementIndex++);
|
||||
}
|
||||
|
||||
if (hasInstantiatorTypeArguments) {
|
||||
asm.emitPush(temp);
|
||||
_genPushInstantiatorTypeArguments();
|
||||
asm.emitStoreClosureElement(elementIndex++);
|
||||
}
|
||||
|
||||
if (hasFunctionTypeArguments) {
|
||||
asm.emitPush(temp);
|
||||
_genPushFunctionTypeArguments();
|
||||
asm.emitStoreClosureElement(elementIndex++);
|
||||
}
|
||||
|
||||
asm.emitPush(temp);
|
||||
asm.emitPush(locals.contextVarIndexInFrame);
|
||||
asm.emitStoreClosureElement(elementIndex++);
|
||||
assert(elementIndex == numElements);
|
||||
}
|
||||
|
||||
void _genClosure(LocalFunction node, String name, FunctionNode function) {
|
||||
final int closureFunctionIndex = _genClosureBytecode(node, name, function);
|
||||
_genAllocateClosureInstance(node, closureFunctionIndex, function);
|
||||
final int closureIndex = _genClosureBytecode(node, name, function);
|
||||
_genAllocateClosureInstance(node, closureIndex, function);
|
||||
}
|
||||
|
||||
void _allocateContextIfNeeded() {
|
||||
@@ -4654,7 +4659,7 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
// 1. Restore context from closure var.
|
||||
// This context has a context level at frame entry.
|
||||
asm.emitPush(locals.closureVarIndexInFrame);
|
||||
asm.emitLoadFieldTOS(cp.addInstanceField(closureContext));
|
||||
asm.emitLoadClosureElement(contextClosureElement);
|
||||
asm.emitPopLocal(locals.contextVarIndexInFrame);
|
||||
|
||||
// 2. Restore context from captured :saved_try_context_var${depth}.
|
||||
|
||||
@@ -33,6 +33,7 @@ enum ConstantTag {
|
||||
kExternalCall,
|
||||
kFfiCall,
|
||||
kDeferredLibraryPrefix,
|
||||
kAllocateClosure,
|
||||
}
|
||||
|
||||
String constantTagToString(ConstantTag tag) =>
|
||||
@@ -93,6 +94,8 @@ abstract class ConstantPoolEntry {
|
||||
return new ConstantFfiCall.read(reader);
|
||||
case ConstantTag.kDeferredLibraryPrefix:
|
||||
return new ConstantDeferredLibraryPrefix.read(reader);
|
||||
case ConstantTag.kAllocateClosure:
|
||||
return new ConstantAllocateClosure.read(reader);
|
||||
}
|
||||
throw 'Unexpected constant tag $tag';
|
||||
}
|
||||
@@ -607,6 +610,52 @@ class ConstantDeferredLibraryPrefix extends ConstantPoolEntry {
|
||||
this.targetLibrary == other.targetLibrary;
|
||||
}
|
||||
|
||||
class ConstantAllocateClosure extends ConstantPoolEntry {
|
||||
static const int hasDelayedTypeArguments = 1 << 0;
|
||||
static const int hasInstantiatorTypeArguments = 1 << 1;
|
||||
static const int hasFunctionTypeArguments = 1 << 2;
|
||||
|
||||
final int closureIndex;
|
||||
final int numElements;
|
||||
final int flags;
|
||||
|
||||
ConstantAllocateClosure(this.closureIndex, this.numElements, this.flags);
|
||||
|
||||
@override
|
||||
ConstantTag get tag => ConstantTag.kAllocateClosure;
|
||||
|
||||
// 2 slots: function, encoded length and flags.
|
||||
@override
|
||||
int get numReservedEntries => 1;
|
||||
|
||||
@override
|
||||
void writeValue(BufferedWriter writer) {
|
||||
writer.writePackedUInt30(closureIndex);
|
||||
writer.writePackedUInt30(numElements);
|
||||
writer.writePackedUInt30(flags);
|
||||
}
|
||||
|
||||
ConstantAllocateClosure.read(BufferedReader reader)
|
||||
: closureIndex = reader.readPackedUInt30(),
|
||||
numElements = reader.readPackedUInt30(),
|
||||
flags = reader.readPackedUInt30();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AllocateClosure $closureIndex, num-elements: $numElements, flags: $flags';
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode => closureIndex.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(other) =>
|
||||
other is ConstantAllocateClosure &&
|
||||
this.closureIndex == other.closureIndex &&
|
||||
this.flags == other.flags &&
|
||||
this.numElements == other.numElements;
|
||||
}
|
||||
|
||||
/// Reserved constant pool entry.
|
||||
class _ReservedConstantPoolEntry extends ConstantPoolEntry {
|
||||
const _ReservedConstantPoolEntry();
|
||||
@@ -788,6 +837,28 @@ class ConstantPool {
|
||||
),
|
||||
);
|
||||
|
||||
int addAllocateClosure(
|
||||
int closureIndex,
|
||||
int numElements, {
|
||||
required bool hasDelayedTypeArguments,
|
||||
required bool hasInstantiatorTypeArguments,
|
||||
required bool hasFunctionTypeArguments,
|
||||
}) => _add(
|
||||
ConstantAllocateClosure(
|
||||
closureIndex,
|
||||
numElements,
|
||||
(hasDelayedTypeArguments
|
||||
? ConstantAllocateClosure.hasDelayedTypeArguments
|
||||
: 0) |
|
||||
(hasInstantiatorTypeArguments
|
||||
? ConstantAllocateClosure.hasInstantiatorTypeArguments
|
||||
: 0) |
|
||||
(hasFunctionTypeArguments
|
||||
? ConstantAllocateClosure.hasFunctionTypeArguments
|
||||
: 0),
|
||||
),
|
||||
);
|
||||
|
||||
int _add(ConstantPoolEntry entry) {
|
||||
int? index = _canonicalizationCache[entry];
|
||||
if (index == null) {
|
||||
|
||||
@@ -7,7 +7,7 @@ library;
|
||||
|
||||
/// Version of bytecode format
|
||||
/// (should match runtime/vm/constants_kbc.h).
|
||||
const int bytecodeFormatVersion = 1;
|
||||
const int bytecodeFormatVersion = 2;
|
||||
|
||||
enum Opcode {
|
||||
kTrap,
|
||||
@@ -34,8 +34,14 @@ enum Opcode {
|
||||
kAllocate_Wide,
|
||||
kAllocateT,
|
||||
kCreateArrayTOS,
|
||||
|
||||
// Closure allocation and access.
|
||||
kAllocateClosure,
|
||||
kUnused03,
|
||||
kAllocateClosure_Wide,
|
||||
kLoadClosureElement,
|
||||
kLoadClosureElement_Wide,
|
||||
kStoreClosureElement,
|
||||
kStoreClosureElement_Wide,
|
||||
|
||||
// Context allocation and access.
|
||||
kAllocateContext,
|
||||
@@ -677,9 +683,19 @@ const Map<Opcode, Format> BytecodeFormats = const {
|
||||
Operand.imm,
|
||||
Operand.none,
|
||||
]),
|
||||
Opcode.kAllocateClosure: const Format(Encoding.k0, const [
|
||||
Opcode.kAllocateClosure: const Format(Encoding.kD, const [
|
||||
Operand.lit,
|
||||
Operand.none,
|
||||
Operand.none,
|
||||
]),
|
||||
Opcode.kLoadClosureElement: const Format(Encoding.kD, const [
|
||||
Operand.imm,
|
||||
Operand.none,
|
||||
Operand.none,
|
||||
]),
|
||||
Opcode.kStoreClosureElement: const Format(Encoding.kD, const [
|
||||
Operand.imm,
|
||||
Operand.none,
|
||||
Operand.none,
|
||||
]),
|
||||
Opcode.kUncheckedClosureCall: const Format(Encoding.kDF, const [
|
||||
|
||||
@@ -1076,37 +1076,19 @@ class _Allocator extends RecursiveVisitor {
|
||||
_visitFunction(node);
|
||||
}
|
||||
|
||||
// A temporary is only needed for function declarations or expressions when:
|
||||
// * There are function type arguments to capture.
|
||||
// * The function is generic and so the delayed type arguments field of the
|
||||
// closure must be empty-initialized, not null-initialized.
|
||||
bool _closureAllocationNeedsTemp(FunctionNode function) =>
|
||||
_currentFrame.functionTypeArgsVar != null ||
|
||||
function.typeParameters.isNotEmpty;
|
||||
|
||||
@override
|
||||
void visitFunctionDeclaration(FunctionDeclaration node) {
|
||||
_allocateVariable(node.variable);
|
||||
final needsTemp = _closureAllocationNeedsTemp(node.function);
|
||||
if (needsTemp) {
|
||||
_allocateTemp(node);
|
||||
}
|
||||
_allocateTemp(node);
|
||||
_visitFunction(node);
|
||||
if (needsTemp) {
|
||||
_freeTemp(node);
|
||||
}
|
||||
_freeTemp(node);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitFunctionExpression(FunctionExpression node) {
|
||||
final needsTemp = _closureAllocationNeedsTemp(node.function);
|
||||
if (needsTemp) {
|
||||
_allocateTemp(node);
|
||||
}
|
||||
_allocateTemp(node);
|
||||
_visitFunction(node);
|
||||
if (needsTemp) {
|
||||
_freeTemp(node);
|
||||
}
|
||||
_freeTemp(node);
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -9,52 +9,53 @@ 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 2
|
||||
Entry 3
|
||||
CheckStack 0
|
||||
PushConstant CP#0
|
||||
AllocateClosure CP#15
|
||||
StoreLocal r2
|
||||
Push r2
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
ReturnTOS
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = Type dart:async::Future < dart:core::int >
|
||||
[4] = ObjectRef 'x'
|
||||
[5] = SubtypeTestCache
|
||||
[6] = ObjectRef < Null >
|
||||
[7] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
|
||||
[8] = Reserved
|
||||
[9] = Type dynamic
|
||||
[10] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[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::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[12] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
||||
[13] = Reserved
|
||||
[14] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
||||
[15] = Reserved
|
||||
[16] = EndClosureFunctionScope
|
||||
[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
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r3
|
||||
CheckStack 0
|
||||
JumpIfUnchecked L1
|
||||
Push r2
|
||||
PushConstant CP#3
|
||||
PushConstant CP#1
|
||||
PushNull
|
||||
PushNull
|
||||
PushConstant CP#4
|
||||
AssertAssignable 0, CP#5
|
||||
PushConstant CP#2
|
||||
AssertAssignable 0, CP#3
|
||||
Drop1
|
||||
L1:
|
||||
PushConstant CP#6
|
||||
DirectCall CP#7, 1
|
||||
PushConstant CP#4
|
||||
DirectCall CP#5, 1
|
||||
PopLocal r0
|
||||
Try #0 start:
|
||||
Push r2
|
||||
@@ -62,7 +63,7 @@ Try #0 start:
|
||||
Suspend L2
|
||||
Push r0
|
||||
Push r6
|
||||
DirectCall CP#10, 2
|
||||
DirectCall CP#8, 2
|
||||
ReturnTOS
|
||||
L2:
|
||||
Drop1
|
||||
@@ -72,7 +73,7 @@ L2:
|
||||
Push r5
|
||||
PushNull
|
||||
PopLocal r0
|
||||
DirectCall CP#12, 2
|
||||
DirectCall CP#10, 2
|
||||
ReturnTOS
|
||||
Try #0 end:
|
||||
Try #0 handler:
|
||||
@@ -84,7 +85,7 @@ Try #0 handler:
|
||||
Push r0
|
||||
MoveSpecial stackTrace, r0
|
||||
Push r0
|
||||
DirectCall CP#14, 3
|
||||
DirectCall CP#12, 3
|
||||
ReturnTOS
|
||||
L3:
|
||||
MoveSpecial exception, r0
|
||||
@@ -529,7 +530,7 @@ Function 'closure', static, reflectable, debuggable
|
||||
return-type dynamic
|
||||
|
||||
Bytecode {
|
||||
Entry 3
|
||||
Entry 4
|
||||
CheckStack 0
|
||||
AllocateContext 0, 2
|
||||
PopLocal r0
|
||||
@@ -539,43 +540,44 @@ Bytecode {
|
||||
Push r0
|
||||
PushInt 3
|
||||
StoreContextVar 0, 1
|
||||
PushConstant CP#0
|
||||
AllocateClosure CP#15
|
||||
StoreLocal r3
|
||||
Push r3
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r2
|
||||
Push r2
|
||||
ReturnTOS
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = ObjectRef < dart:core::int >
|
||||
[4] = DirectCall 'dart:async::_SuspendState::_initAsync', ArgDesc num-args 0, num-type-args 1, names []
|
||||
[5] = Reserved
|
||||
[6] = Type dynamic
|
||||
[7] = DirectCall 'dart:async::_SuspendState::_await', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[8] = Reserved
|
||||
[9] = ObjectRef 'fin'
|
||||
[10] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[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::_returnAsync', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[12] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
||||
[13] = Reserved
|
||||
[14] = DirectCall 'dart:async::_SuspendState::_handleException', ArgDesc num-args 3, num-type-args 0, names []
|
||||
[15] = Reserved
|
||||
[16] = EndClosureFunctionScope
|
||||
[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
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r2
|
||||
CheckStack 0
|
||||
PushConstant CP#3
|
||||
DirectCall CP#4, 1
|
||||
PushConstant CP#1
|
||||
DirectCall CP#2, 1
|
||||
PopLocal r0
|
||||
Try #0 start:
|
||||
PushInt 4
|
||||
@@ -592,7 +594,7 @@ Try #1 start:
|
||||
Suspend L1
|
||||
Push r0
|
||||
Push r8
|
||||
DirectCall CP#7, 2
|
||||
DirectCall CP#5, 2
|
||||
ReturnTOS
|
||||
L1:
|
||||
PopLocal r5
|
||||
@@ -609,8 +611,8 @@ Try #1 handler:
|
||||
PopLocal r2
|
||||
MoveSpecial exception, r6
|
||||
MoveSpecial stackTrace, r7
|
||||
PushConstant CP#9
|
||||
DirectCall CP#10, 1
|
||||
PushConstant CP#7
|
||||
DirectCall CP#8, 1
|
||||
Drop1
|
||||
Push r6
|
||||
Push r7
|
||||
@@ -618,8 +620,8 @@ Try #1 handler:
|
||||
L2:
|
||||
Push r6
|
||||
PopLocal r2
|
||||
PushConstant CP#9
|
||||
DirectCall CP#10, 1
|
||||
PushConstant CP#7
|
||||
DirectCall CP#8, 1
|
||||
Drop1
|
||||
Push r4
|
||||
PopLocal r4
|
||||
@@ -627,7 +629,7 @@ L2:
|
||||
Push r4
|
||||
PushNull
|
||||
PopLocal r0
|
||||
DirectCall CP#12, 2
|
||||
DirectCall CP#10, 2
|
||||
ReturnTOS
|
||||
Try #0 end:
|
||||
Try #0 handler:
|
||||
@@ -639,7 +641,7 @@ Try #0 handler:
|
||||
Push r0
|
||||
MoveSpecial stackTrace, r0
|
||||
Push r0
|
||||
DirectCall CP#14, 3
|
||||
DirectCall CP#12, 3
|
||||
ReturnTOS
|
||||
L3:
|
||||
MoveSpecial exception, r0
|
||||
|
||||
@@ -19,10 +19,11 @@ Bytecode {
|
||||
Push r0
|
||||
PushInt 5
|
||||
StoreContextVar 0, 0
|
||||
PushConstant CP#0
|
||||
AllocateClosure CP#5
|
||||
StoreLocal r3
|
||||
Push r3
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r2
|
||||
Push r2
|
||||
StoreLocal r3
|
||||
@@ -36,28 +37,28 @@ Bytecode {
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = Type dart:core::int
|
||||
[4] = ObjectRef 'y'
|
||||
[5] = SubtypeTestCache
|
||||
[6] = EndClosureFunctionScope
|
||||
[1] = Type dart:core::int
|
||||
[2] = ObjectRef 'y'
|
||||
[3] = SubtypeTestCache
|
||||
[4] = EndClosureFunctionScope
|
||||
[5] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[6] = Reserved
|
||||
[7] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::simpleClosure::'<anonymous closure>' (dart:core::int y) -> Null
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-6]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
JumpIfUnchecked L1
|
||||
Push FP[-5]
|
||||
PushConstant CP#3
|
||||
PushConstant CP#1
|
||||
PushNull
|
||||
PushNull
|
||||
PushConstant CP#4
|
||||
AssertAssignable 1, CP#5
|
||||
PushConstant CP#2
|
||||
AssertAssignable 1, CP#3
|
||||
Drop1
|
||||
L1:
|
||||
Push r0
|
||||
@@ -188,51 +189,47 @@ Function 'testPartialInstantiation', static, reflectable, debuggable
|
||||
Bytecode {
|
||||
Entry 5
|
||||
CheckStack 0
|
||||
PushConstant CP#0
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
AllocateClosure CP#8
|
||||
StoreLocal r3
|
||||
Push r3
|
||||
PushConstant CP#5
|
||||
StoreFieldTOS CP#3
|
||||
PushConstant CP#1
|
||||
StoreClosureElement 0
|
||||
Push r3
|
||||
Push r0
|
||||
StoreClosureElement 1
|
||||
PopLocal r2
|
||||
Push r2
|
||||
PushConstant CP#14
|
||||
DirectCall CP#15, 2
|
||||
PushConstant CP#10
|
||||
DirectCall CP#11, 2
|
||||
PopLocal r4
|
||||
Push r4
|
||||
ReturnTOS
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
|
||||
[4] = Reserved
|
||||
[5] = EmptyTypeArguments
|
||||
[6] = InstanceField dart:core::_Closure::_function_type_arguments (field)
|
||||
[7] = Reserved
|
||||
[8] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
|
||||
[1] = EmptyTypeArguments
|
||||
[2] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
|
||||
[3] = Reserved
|
||||
[4] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::testPartialInstantiation::Closure/0::TypeParam/0
|
||||
[5] = ObjectRef 't'
|
||||
[6] = SubtypeTestCache
|
||||
[7] = EndClosureFunctionScope
|
||||
[8] = AllocateClosure 0, num-elements: 2, flags: 1
|
||||
[9] = Reserved
|
||||
[10] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::testPartialInstantiation::Closure/0::TypeParam/0
|
||||
[11] = ObjectRef 't'
|
||||
[12] = SubtypeTestCache
|
||||
[13] = EndClosureFunctionScope
|
||||
[14] = ObjectRef < dart:core::int >
|
||||
[15] = DirectCall 'dart:_internal::_instantiateClosure', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[16] = Reserved
|
||||
[10] = ObjectRef < dart:core::int >
|
||||
[11] = DirectCall 'dart:_internal::_instantiateClosure', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[12] = Reserved
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::testPartialInstantiation::'foo' type-params <'T' extends dart:core::Object? (default dynamic)> (DART_SDK/pkg/dart2bytecode/testcases/closures.dart::testPartialInstantiation::Closure/0::TypeParam/0 t) -> void
|
||||
ClosureCode {
|
||||
Entry 3
|
||||
Push FP[-6]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 1
|
||||
PopLocal r1
|
||||
Push FP[-6]
|
||||
LoadFieldTOS CP#3
|
||||
LoadClosureElement 0
|
||||
StoreLocal r0
|
||||
PushConstant CP#5
|
||||
PushConstant CP#1
|
||||
JumpIfEqStrict L1
|
||||
CheckFunctionTypeArgs 0, r2
|
||||
Jump L2
|
||||
@@ -242,18 +239,18 @@ L2:
|
||||
CheckStack 0
|
||||
Push r0
|
||||
Push FP[-6]
|
||||
LoadFieldTOS CP#6
|
||||
LoadClosureElement 1
|
||||
PushInt 0
|
||||
PushInt 1
|
||||
DirectCall CP#8, 4
|
||||
DirectCall CP#2, 4
|
||||
PopLocal r0
|
||||
JumpIfUnchecked L3
|
||||
Push FP[-5]
|
||||
PushConstant CP#10
|
||||
PushConstant CP#4
|
||||
PushNull
|
||||
Push r0
|
||||
PushConstant CP#11
|
||||
AssertAssignable 0, CP#12
|
||||
PushConstant CP#5
|
||||
AssertAssignable 0, CP#6
|
||||
Drop1
|
||||
L3:
|
||||
PushNull
|
||||
@@ -488,69 +485,72 @@ Bytecode {
|
||||
Push r1
|
||||
Push FP[-5]
|
||||
StoreContextVar 0, 0
|
||||
PushConstant CP#0
|
||||
Push r1
|
||||
Push FP[-5]
|
||||
LoadTypeArgumentsField CP#13
|
||||
AllocateClosure
|
||||
AllocateClosure CP#34
|
||||
StoreLocal r4
|
||||
Push r4
|
||||
Push r0
|
||||
StoreFieldTOS CP#6
|
||||
PushConstant CP#1
|
||||
StoreClosureElement 0
|
||||
Push r4
|
||||
PushConstant CP#5
|
||||
StoreFieldTOS CP#3
|
||||
Push FP[-5]
|
||||
LoadTypeArgumentsField CP#7
|
||||
StoreClosureElement 1
|
||||
Push r4
|
||||
Push r0
|
||||
StoreClosureElement 2
|
||||
Push r4
|
||||
Push r1
|
||||
StoreClosureElement 3
|
||||
PopLocal r3
|
||||
PushConstant CP#36
|
||||
Push r3
|
||||
Push r3
|
||||
UncheckedClosureCall CP#33, 2
|
||||
UncheckedClosureCall CP#31, 2
|
||||
Drop1
|
||||
PushConstant CP#37
|
||||
Push r3
|
||||
Push r3
|
||||
UncheckedClosureCall CP#33, 2
|
||||
UncheckedClosureCall CP#31, 2
|
||||
Drop1
|
||||
PushNull
|
||||
ReturnTOS
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = InstanceField dart:core::_Closure::_delayed_type_arguments (field)
|
||||
[4] = Reserved
|
||||
[5] = EmptyTypeArguments
|
||||
[6] = InstanceField dart:core::_Closure::_function_type_arguments (field)
|
||||
[7] = Reserved
|
||||
[8] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
|
||||
[9] = Reserved
|
||||
[10] = ClosureFunction 1
|
||||
[11] = ClosureFunction 2
|
||||
[12] = ObjectRef < dart:core::Type >
|
||||
[13] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A
|
||||
[14] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/0
|
||||
[15] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/1
|
||||
[16] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/0
|
||||
[17] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/1
|
||||
[18] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/0
|
||||
[19] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/1
|
||||
[20] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/0
|
||||
[21] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/1
|
||||
[22] = DirectCall 'dart:core::_GrowableList::_literal8 (constructor)', ArgDesc num-args 9, num-type-args 0, names []
|
||||
[23] = Reserved
|
||||
[24] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[1] = EmptyTypeArguments
|
||||
[2] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
|
||||
[3] = Reserved
|
||||
[4] = ClosureFunction 1
|
||||
[5] = ClosureFunction 2
|
||||
[6] = ObjectRef < dart:core::Type >
|
||||
[7] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A
|
||||
[8] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/0
|
||||
[9] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/1
|
||||
[10] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/0
|
||||
[11] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/1
|
||||
[12] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/0
|
||||
[13] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/1
|
||||
[14] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/0
|
||||
[15] = Type DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/1
|
||||
[16] = DirectCall 'dart:core::_GrowableList::_literal8 (constructor)', ArgDesc num-args 9, num-type-args 0, names []
|
||||
[17] = Reserved
|
||||
[18] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[19] = Reserved
|
||||
[20] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/1 >
|
||||
[21] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs', ArgDesc num-args 0, num-type-args 8, names []
|
||||
[22] = Reserved
|
||||
[23] = EndClosureFunctionScope
|
||||
[24] = AllocateClosure 2, num-elements: 3, flags: 6
|
||||
[25] = Reserved
|
||||
[26] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::TypeParam/1, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::TypeParam/1 >
|
||||
[27] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::callWithArgs', ArgDesc num-args 0, num-type-args 8, names []
|
||||
[28] = Reserved
|
||||
[29] = EndClosureFunctionScope
|
||||
[30] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[31] = EndClosureFunctionScope
|
||||
[32] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C7, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C8 >
|
||||
[33] = ObjectRef ArgDesc num-args 1, num-type-args 2, names []
|
||||
[34] = ObjectRef < dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C7 >, dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C8 > >
|
||||
[35] = EndClosureFunctionScope
|
||||
[26] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[27] = EndClosureFunctionScope
|
||||
[28] = AllocateClosure 1, num-elements: 4, flags: 7
|
||||
[29] = Reserved
|
||||
[30] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C7, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C8 >
|
||||
[31] = ObjectRef ArgDesc num-args 1, num-type-args 2, names []
|
||||
[32] = ObjectRef < dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C7 >, dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C8 > >
|
||||
[33] = EndClosureFunctionScope
|
||||
[34] = AllocateClosure 0, num-elements: 4, flags: 7
|
||||
[35] = Reserved
|
||||
[36] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C5, DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C6 >
|
||||
[37] = ObjectRef < dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C5 >, dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C6 > >
|
||||
}
|
||||
@@ -558,12 +558,12 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::'nested1' ty
|
||||
ClosureCode {
|
||||
Entry 5
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 3
|
||||
PopLocal r1
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#3
|
||||
LoadClosureElement 0
|
||||
StoreLocal r0
|
||||
PushConstant CP#5
|
||||
PushConstant CP#1
|
||||
JumpIfEqStrict L1
|
||||
CheckFunctionTypeArgs 0, r2
|
||||
Jump L2
|
||||
@@ -573,34 +573,37 @@ L2:
|
||||
CheckStack 0
|
||||
Push r0
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#6
|
||||
LoadClosureElement 2
|
||||
PushInt 2
|
||||
PushInt 4
|
||||
DirectCall CP#8, 4
|
||||
DirectCall CP#2, 4
|
||||
PopLocal r0
|
||||
PushConstant CP#10
|
||||
Push r1
|
||||
Push r1
|
||||
LoadContextVar 0, 0
|
||||
LoadTypeArgumentsField CP#13
|
||||
AllocateClosure
|
||||
AllocateClosure CP#28
|
||||
StoreLocal r4
|
||||
Push r4
|
||||
Push r0
|
||||
StoreFieldTOS CP#6
|
||||
PushConstant CP#1
|
||||
StoreClosureElement 0
|
||||
Push r4
|
||||
PushConstant CP#5
|
||||
StoreFieldTOS CP#3
|
||||
Push r1
|
||||
LoadContextVar 0, 0
|
||||
LoadTypeArgumentsField CP#7
|
||||
StoreClosureElement 1
|
||||
Push r4
|
||||
Push r0
|
||||
StoreClosureElement 2
|
||||
Push r4
|
||||
Push r1
|
||||
StoreClosureElement 3
|
||||
PopLocal r3
|
||||
PushConstant CP#30
|
||||
Push r3
|
||||
Push r3
|
||||
UncheckedClosureCall CP#31, 2
|
||||
Drop1
|
||||
PushConstant CP#32
|
||||
Push r3
|
||||
Push r3
|
||||
UncheckedClosureCall CP#33, 2
|
||||
Drop1
|
||||
PushConstant CP#34
|
||||
Push r3
|
||||
Push r3
|
||||
UncheckedClosureCall CP#33, 2
|
||||
UncheckedClosureCall CP#31, 2
|
||||
Drop1
|
||||
PushNull
|
||||
ReturnTOS
|
||||
@@ -610,12 +613,12 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/0::'
|
||||
ClosureCode {
|
||||
Entry 5
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 3
|
||||
PopLocal r1
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#3
|
||||
LoadClosureElement 0
|
||||
StoreLocal r0
|
||||
PushConstant CP#5
|
||||
PushConstant CP#1
|
||||
JumpIfEqStrict L1
|
||||
CheckFunctionTypeArgs 0, r2
|
||||
Jump L2
|
||||
@@ -625,26 +628,29 @@ L2:
|
||||
CheckStack 0
|
||||
Push r0
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#6
|
||||
LoadClosureElement 2
|
||||
PushInt 4
|
||||
PushInt 6
|
||||
DirectCall CP#8, 4
|
||||
DirectCall CP#2, 4
|
||||
PopLocal r0
|
||||
PushConstant CP#11
|
||||
Push r1
|
||||
Push r1
|
||||
LoadContextVar 0, 0
|
||||
LoadTypeArgumentsField CP#13
|
||||
AllocateClosure
|
||||
AllocateClosure CP#24
|
||||
StoreLocal r4
|
||||
Push r4
|
||||
Push r1
|
||||
LoadContextVar 0, 0
|
||||
LoadTypeArgumentsField CP#7
|
||||
StoreClosureElement 0
|
||||
Push r4
|
||||
Push r0
|
||||
StoreFieldTOS CP#6
|
||||
StoreClosureElement 1
|
||||
Push r4
|
||||
Push r1
|
||||
StoreClosureElement 2
|
||||
PopLocal r3
|
||||
Push r3
|
||||
StoreLocal r4
|
||||
Push r4
|
||||
UncheckedClosureCall CP#30, 1
|
||||
UncheckedClosureCall CP#26, 1
|
||||
Drop1
|
||||
PushNull
|
||||
ReturnTOS
|
||||
@@ -654,50 +660,50 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::A::foo::Closure/1::'
|
||||
ClosureCode {
|
||||
Entry 3
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 2
|
||||
PopLocal r1
|
||||
CheckStack 0
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#6
|
||||
LoadClosureElement 1
|
||||
PopLocal r0
|
||||
PushConstant CP#12
|
||||
PushConstant CP#6
|
||||
Push r1
|
||||
LoadContextVar 0, 0
|
||||
LoadTypeArgumentsField CP#13
|
||||
LoadTypeArgumentsField CP#7
|
||||
PushNull
|
||||
InstantiateType CP#8
|
||||
Push r1
|
||||
LoadContextVar 0, 0
|
||||
LoadTypeArgumentsField CP#7
|
||||
PushNull
|
||||
InstantiateType CP#9
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#10
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#11
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#12
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#13
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#14
|
||||
Push r1
|
||||
LoadContextVar 0, 0
|
||||
LoadTypeArgumentsField CP#13
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#15
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#16
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#17
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#18
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#19
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#20
|
||||
PushNull
|
||||
Push r0
|
||||
InstantiateType CP#21
|
||||
DirectCall CP#22, 9
|
||||
DirectCall CP#24, 1
|
||||
DirectCall CP#16, 9
|
||||
DirectCall CP#18, 1
|
||||
Drop1
|
||||
Push r1
|
||||
LoadContextVar 0, 0
|
||||
LoadTypeArgumentsField CP#13
|
||||
LoadTypeArgumentsField CP#7
|
||||
Push r0
|
||||
InstantiateTypeArgumentsTOS 0, CP#26
|
||||
DirectCall CP#27, 1
|
||||
InstantiateTypeArgumentsTOS 0, CP#20
|
||||
DirectCall CP#21, 1
|
||||
Drop1
|
||||
PushNull
|
||||
ReturnTOS
|
||||
@@ -753,22 +759,23 @@ Bytecode {
|
||||
Push r0
|
||||
PushInt 3
|
||||
StoreContextVar 0, 2
|
||||
PushConstant CP#0
|
||||
AllocateClosure CP#14
|
||||
StoreLocal r4
|
||||
Push r4
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r3
|
||||
Push r3
|
||||
StoreLocal r4
|
||||
PushInt 10
|
||||
Push r4
|
||||
UncheckedClosureCall CP#14, 2
|
||||
UncheckedClosureCall CP#16, 2
|
||||
Drop1
|
||||
Push r3
|
||||
StoreLocal r4
|
||||
PushInt 11
|
||||
Push r4
|
||||
UncheckedClosureCall CP#14, 2
|
||||
UncheckedClosureCall CP#16, 2
|
||||
Drop1
|
||||
Push r2
|
||||
DirectCall CP#11, 1
|
||||
@@ -784,10 +791,11 @@ Bytecode {
|
||||
Push r0
|
||||
PushInt 42
|
||||
StoreContextVar 0, 3
|
||||
PushConstant CP#15
|
||||
AllocateClosure CP#21
|
||||
StoreLocal r3
|
||||
Push r3
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r2
|
||||
Push r2
|
||||
StoreLocal r3
|
||||
@@ -799,30 +807,34 @@ Bytecode {
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = Type dart:core::int
|
||||
[4] = ObjectRef 'y'
|
||||
[5] = SubtypeTestCache
|
||||
[6] = ClosureFunction 1
|
||||
[7] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::get:foo', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[8] = Reserved
|
||||
[9] = EndClosureFunctionScope
|
||||
[1] = Type dart:core::int
|
||||
[2] = ObjectRef 'y'
|
||||
[3] = SubtypeTestCache
|
||||
[4] = ClosureFunction 1
|
||||
[5] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::get:foo', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[6] = Reserved
|
||||
[7] = EndClosureFunctionScope
|
||||
[8] = AllocateClosure 1, num-elements: 1, flags: 0
|
||||
[9] = Reserved
|
||||
[10] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[12] = Reserved
|
||||
[13] = EndClosureFunctionScope
|
||||
[14] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
|
||||
[15] = ClosureFunction 2
|
||||
[16] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::set:foo', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[17] = Reserved
|
||||
[18] = EndClosureFunctionScope
|
||||
[14] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[15] = Reserved
|
||||
[16] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
|
||||
[17] = ClosureFunction 2
|
||||
[18] = InterfaceCall 'DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::set:foo', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[19] = Reserved
|
||||
[20] = EndClosureFunctionScope
|
||||
[21] = AllocateClosure 2, num-elements: 1, flags: 0
|
||||
[22] = Reserved
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::topLevel::'<anonymous closure>' (dart:core::int y) -> Null
|
||||
ClosureCode {
|
||||
Entry 4
|
||||
Push FP[-6]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
AllocateContext 1, 2
|
||||
@@ -836,11 +848,11 @@ ClosureCode {
|
||||
StoreContextVar 1, 0
|
||||
JumpIfUnchecked L1
|
||||
Push FP[-5]
|
||||
PushConstant CP#3
|
||||
PushConstant CP#1
|
||||
PushNull
|
||||
PushNull
|
||||
PushConstant CP#4
|
||||
AssertAssignable 1, CP#5
|
||||
PushConstant CP#2
|
||||
AssertAssignable 1, CP#3
|
||||
Drop1
|
||||
L1:
|
||||
Push r0
|
||||
@@ -859,10 +871,11 @@ L1:
|
||||
Push r0
|
||||
PushInt 4
|
||||
StoreContextVar 1, 1
|
||||
PushConstant CP#6
|
||||
AllocateClosure CP#8
|
||||
StoreLocal r3
|
||||
Push r3
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r2
|
||||
Push r2
|
||||
Push r2
|
||||
@@ -881,7 +894,7 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::topLevel::Closure
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
@@ -896,7 +909,7 @@ ClosureCode {
|
||||
Push r0
|
||||
LoadContextParent
|
||||
LoadContextVar 0, 0
|
||||
InterfaceCall CP#7, 1
|
||||
InterfaceCall CP#5, 1
|
||||
Push r0
|
||||
LoadContextVar 1, 0
|
||||
AddInt
|
||||
@@ -909,14 +922,14 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::B::topLevel::'<anony
|
||||
ClosureCode {
|
||||
Entry 3
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
Push r0
|
||||
LoadContextVar 0, 3
|
||||
InterfaceCall CP#16, 2
|
||||
InterfaceCall CP#18, 2
|
||||
Drop1
|
||||
PushNull
|
||||
ReturnTOS
|
||||
@@ -982,17 +995,19 @@ L2:
|
||||
CompareIntLt
|
||||
JumpIfFalse L1
|
||||
Push r2
|
||||
PushConstant CP#3
|
||||
AllocateClosure CP#5
|
||||
StoreLocal r4
|
||||
Push r4
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
InstantiatedInterfaceCall CP#7, 2
|
||||
Drop1
|
||||
Push r3
|
||||
PushConstant CP#10
|
||||
AllocateClosure CP#15
|
||||
StoreLocal r4
|
||||
Push r4
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
InstantiatedInterfaceCall CP#7, 2
|
||||
Drop1
|
||||
Push r0
|
||||
@@ -1023,9 +1038,9 @@ ConstantPool {
|
||||
[1] = DirectCall 'dart:core::_GrowableList:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[2] = Reserved
|
||||
[3] = ClosureFunction 0
|
||||
[4] = InstanceField dart:core::_Closure::_context (field)
|
||||
[5] = Reserved
|
||||
[6] = EndClosureFunctionScope
|
||||
[4] = EndClosureFunctionScope
|
||||
[5] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[6] = Reserved
|
||||
[7] = InstantiatedInterfaceCall 'dart:core::List::add', ArgDesc num-args 2, num-type-args 0, names [], receiver dart:core::List < dart:core::Function >
|
||||
[8] = Reserved
|
||||
[9] = Reserved
|
||||
@@ -1034,12 +1049,14 @@ ConstantPool {
|
||||
[12] = ObjectRef 'ii'
|
||||
[13] = SubtypeTestCache
|
||||
[14] = EndClosureFunctionScope
|
||||
[15] = AllocateClosure 1, num-elements: 1, flags: 0
|
||||
[16] = Reserved
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C::testForLoop::'<anonymous closure>' () -> dart:core::int
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#4
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
@@ -1055,7 +1072,7 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C::testForLoop::'<an
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-6]
|
||||
LoadFieldTOS CP#4
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
JumpIfUnchecked L1
|
||||
@@ -1100,10 +1117,11 @@ L2:
|
||||
Push r2
|
||||
InterfaceCall CP#4, 1
|
||||
StoreContextVar 0, 0
|
||||
PushConstant CP#6
|
||||
AllocateClosure CP#8
|
||||
StoreLocal r4
|
||||
Push r4
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r3
|
||||
Push r3
|
||||
StoreLocal r4
|
||||
@@ -1130,9 +1148,9 @@ ConstantPool {
|
||||
[4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[5] = Reserved
|
||||
[6] = ClosureFunction 0
|
||||
[7] = InstanceField dart:core::_Closure::_context (field)
|
||||
[8] = Reserved
|
||||
[9] = EndClosureFunctionScope
|
||||
[7] = EndClosureFunctionScope
|
||||
[8] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[9] = Reserved
|
||||
[10] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[12] = Reserved
|
||||
@@ -1141,7 +1159,7 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::C::testForInLoop::'<
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#7
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
@@ -1183,7 +1201,7 @@ Function 'foo', reflectable, debuggable
|
||||
return-type dynamic
|
||||
|
||||
Bytecode {
|
||||
Entry 2
|
||||
Entry 3
|
||||
CheckStack 0
|
||||
AllocateContext 0, 1
|
||||
PopLocal r0
|
||||
@@ -1200,11 +1218,15 @@ Bytecode {
|
||||
AssertAssignable 0, CP#3
|
||||
Drop1
|
||||
L1:
|
||||
PushConstant CP#4
|
||||
Push r0
|
||||
AllocateClosure CP#6
|
||||
StoreLocal r2
|
||||
Push r2
|
||||
Push FP[-6]
|
||||
LoadTypeArgumentsField CP#1
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
Push r2
|
||||
Push r0
|
||||
StoreClosureElement 1
|
||||
ReturnTOS
|
||||
}
|
||||
Parameter flags: [2]
|
||||
@@ -1214,15 +1236,15 @@ ConstantPool {
|
||||
[2] = ObjectRef 't'
|
||||
[3] = SubtypeTestCache
|
||||
[4] = ClosureFunction 0
|
||||
[5] = InstanceField dart:core::_Closure::_context (field)
|
||||
[6] = Reserved
|
||||
[7] = EndClosureFunctionScope
|
||||
[5] = EndClosureFunctionScope
|
||||
[6] = AllocateClosure 0, num-elements: 2, flags: 2
|
||||
[7] = Reserved
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::foo::'<anonymous closure>' () -> DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::TypeParam/0
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#5
|
||||
LoadClosureElement 1
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
@@ -1236,43 +1258,53 @@ Function 'bar', reflectable, debuggable
|
||||
return-type dynamic
|
||||
|
||||
Bytecode {
|
||||
Entry 2
|
||||
Entry 3
|
||||
CheckStack 0
|
||||
AllocateContext 0, 1
|
||||
PopLocal r0
|
||||
Push r0
|
||||
Push FP[-5]
|
||||
StoreContextVar 0, 0
|
||||
PushConstant CP#0
|
||||
Push r0
|
||||
AllocateClosure CP#8
|
||||
StoreLocal r2
|
||||
Push r2
|
||||
Push FP[-5]
|
||||
LoadTypeArgumentsField CP#5
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
Push r2
|
||||
Push r0
|
||||
StoreClosureElement 1
|
||||
ReturnTOS
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = ClosureFunction 1
|
||||
[4] = EndClosureFunctionScope
|
||||
[1] = ClosureFunction 1
|
||||
[2] = EndClosureFunctionScope
|
||||
[3] = AllocateClosure 1, num-elements: 2, flags: 2
|
||||
[4] = Reserved
|
||||
[5] = TypeArgumentsField DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D
|
||||
[6] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[7] = EndClosureFunctionScope
|
||||
[8] = AllocateClosure 0, num-elements: 2, flags: 2
|
||||
[9] = Reserved
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::bar::'<anonymous closure>' () -> Null
|
||||
ClosureCode {
|
||||
Entry 4
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 1
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
PushConstant CP#3
|
||||
Push r0
|
||||
AllocateClosure CP#3
|
||||
StoreLocal r3
|
||||
Push r3
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
LoadTypeArgumentsField CP#5
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
Push r3
|
||||
Push r0
|
||||
StoreClosureElement 1
|
||||
PopLocal r2
|
||||
Push r2
|
||||
Push r2
|
||||
@@ -1286,7 +1318,7 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/closures.dart::D::bar::Closure/0::'
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 1
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
PushNull
|
||||
|
||||
@@ -13,7 +13,7 @@ Function 'testVoidNoArg', static, reflectable, debuggable
|
||||
return-type dynamic
|
||||
|
||||
Bytecode {
|
||||
Entry 5
|
||||
Entry 6
|
||||
CheckStack 0
|
||||
PushConstant CP#0
|
||||
PushConstant CP#1
|
||||
@@ -24,10 +24,11 @@ Bytecode {
|
||||
Push r0
|
||||
Push r2
|
||||
StoreContextVar 0, 0
|
||||
PushConstant CP#4
|
||||
AllocateClosure CP#7
|
||||
StoreLocal r5
|
||||
Push r5
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r4
|
||||
Push r4
|
||||
Push r0
|
||||
@@ -48,10 +49,10 @@ ConstantPool {
|
||||
[2] = DirectCall 'dart:ffi::Pointer::fromAddress (constructor)', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[3] = Reserved
|
||||
[4] = ClosureFunction 0
|
||||
[5] = InstanceField dart:core::_Closure::_context (field)
|
||||
[6] = Reserved
|
||||
[7] = FfiCall
|
||||
[8] = EndClosureFunctionScope
|
||||
[5] = FfiCall
|
||||
[6] = EndClosureFunctionScope
|
||||
[7] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[8] = Reserved
|
||||
[9] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/ffi.dart::testVoidNoArg::'#ffiClosure0' annotations const List<dynamic> [const dart:core::pragma {dart:core::pragma::name (field): 'vm:ffi:call-closure', dart:core::pragma::options (field): const dart:ffi::_FfiCall < FunctionType () -> dart:ffi::Void > {dart:ffi::_FfiCall::isLeaf (field): const false}}]
|
||||
@@ -59,12 +60,12 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/ffi.dart::testVoidNoArg::'#ffiClosu
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#5
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
FfiCall CP#7
|
||||
FfiCall CP#5
|
||||
ReturnTOS
|
||||
}
|
||||
|
||||
@@ -74,7 +75,7 @@ Function 'testIntInt', static, reflectable, debuggable
|
||||
return-type dynamic
|
||||
|
||||
Bytecode {
|
||||
Entry 5
|
||||
Entry 6
|
||||
CheckStack 0
|
||||
PushConstant CP#0
|
||||
PushConstant CP#1
|
||||
@@ -85,10 +86,11 @@ Bytecode {
|
||||
Push r0
|
||||
Push r2
|
||||
StoreContextVar 0, 0
|
||||
PushConstant CP#4
|
||||
AllocateClosure CP#10
|
||||
StoreLocal r5
|
||||
Push r5
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r4
|
||||
Push r4
|
||||
Push r0
|
||||
@@ -108,13 +110,13 @@ ConstantPool {
|
||||
[2] = DirectCall 'dart:ffi::Pointer::fromAddress (constructor)', ArgDesc num-args 2, num-type-args 0, names []
|
||||
[3] = Reserved
|
||||
[4] = ClosureFunction 0
|
||||
[5] = InstanceField dart:core::_Closure::_context (field)
|
||||
[6] = Reserved
|
||||
[7] = Type dart:core::int
|
||||
[8] = ObjectRef 'arg1'
|
||||
[9] = SubtypeTestCache
|
||||
[10] = FfiCall
|
||||
[11] = EndClosureFunctionScope
|
||||
[5] = Type dart:core::int
|
||||
[6] = ObjectRef 'arg1'
|
||||
[7] = SubtypeTestCache
|
||||
[8] = FfiCall
|
||||
[9] = EndClosureFunctionScope
|
||||
[10] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[11] = Reserved
|
||||
[12] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/ffi.dart::testIntInt::'#ffiClosure1' annotations const List<dynamic> [const dart:core::pragma {dart:core::pragma::name (field): 'vm:ffi:call-closure', dart:core::pragma::options (field): const dart:ffi::_FfiCall < FunctionType (dart:ffi::Int64) -> dart:ffi::Int32 > {dart:ffi::_FfiCall::isLeaf (field): const false}}]
|
||||
@@ -122,16 +124,16 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/ffi.dart::testIntInt::'#ffiClosure1
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-6]
|
||||
LoadFieldTOS CP#5
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
JumpIfUnchecked L1
|
||||
Push FP[-5]
|
||||
PushConstant CP#7
|
||||
PushConstant CP#5
|
||||
PushNull
|
||||
PushNull
|
||||
PushConstant CP#8
|
||||
AssertAssignable 1, CP#9
|
||||
PushConstant CP#6
|
||||
AssertAssignable 1, CP#7
|
||||
Drop1
|
||||
L1:
|
||||
PushNull
|
||||
@@ -139,7 +141,7 @@ L1:
|
||||
Push FP[-5]
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
FfiCall CP#10
|
||||
FfiCall CP#8
|
||||
ReturnTOS
|
||||
}
|
||||
|
||||
|
||||
@@ -72,43 +72,44 @@ Bytecode {
|
||||
Push r0
|
||||
Push FP[-5]
|
||||
StoreContextVar 0, 0
|
||||
PushConstant CP#0
|
||||
AllocateClosure CP#6
|
||||
StoreLocal r3
|
||||
Push r3
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r2
|
||||
Push r2
|
||||
Push r2
|
||||
UncheckedClosureCall CP#6, 1
|
||||
UncheckedClosureCall CP#4, 1
|
||||
Drop1
|
||||
PushNull
|
||||
ReturnTOS
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = ObjectRef 'visibleInner'
|
||||
[4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[5] = Reserved
|
||||
[6] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[7] = EndClosureFunctionScope
|
||||
[1] = ObjectRef 'visibleInner'
|
||||
[2] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[3] = Reserved
|
||||
[4] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[5] = EndClosureFunctionScope
|
||||
[6] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[7] = Reserved
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/invisible.dart::visibleClosure::'visibleInner' () -> Null
|
||||
ClosureCode {
|
||||
Entry 3
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
PushConstant CP#3
|
||||
DirectCall CP#4, 1
|
||||
PushConstant CP#1
|
||||
DirectCall CP#2, 1
|
||||
Drop1
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
StoreLocal r2
|
||||
Push r2
|
||||
UncheckedClosureCall CP#6, 1
|
||||
UncheckedClosureCall CP#4, 1
|
||||
Drop1
|
||||
PushNull
|
||||
ReturnTOS
|
||||
@@ -127,44 +128,45 @@ Bytecode {
|
||||
Push r0
|
||||
Push FP[-5]
|
||||
StoreContextVar 0, 0
|
||||
PushConstant CP#0
|
||||
AllocateClosure CP#6
|
||||
StoreLocal r3
|
||||
Push r3
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r2
|
||||
Push r2
|
||||
Push r2
|
||||
UncheckedClosureCall CP#6, 1
|
||||
UncheckedClosureCall CP#4, 1
|
||||
Drop1
|
||||
PushNull
|
||||
ReturnTOS
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = ObjectRef 'invisibleInner'
|
||||
[4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[5] = Reserved
|
||||
[6] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[7] = EndClosureFunctionScope
|
||||
[1] = ObjectRef 'invisibleInner'
|
||||
[2] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[3] = Reserved
|
||||
[4] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[5] = EndClosureFunctionScope
|
||||
[6] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[7] = Reserved
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/invisible.dart::invisibleClosure::'invisibleInner' invisible annotations const List<dynamic> [const dart:core::pragma {dart:core::pragma::name (field): 'vm:invisible', dart:core::pragma::options (field): null}]
|
||||
() -> Null
|
||||
ClosureCode {
|
||||
Entry 3
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
PushConstant CP#3
|
||||
DirectCall CP#4, 1
|
||||
PushConstant CP#1
|
||||
DirectCall CP#2, 1
|
||||
Drop1
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
StoreLocal r2
|
||||
Push r2
|
||||
UncheckedClosureCall CP#6, 1
|
||||
UncheckedClosureCall CP#4, 1
|
||||
Drop1
|
||||
PushNull
|
||||
ReturnTOS
|
||||
|
||||
@@ -215,10 +215,11 @@ Try #0 start:
|
||||
Push r0
|
||||
PushInt 2
|
||||
StoreContextVar 0, 1
|
||||
PushConstant CP#0
|
||||
AllocateClosure CP#6
|
||||
StoreLocal r5
|
||||
Push r5
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r4
|
||||
Push r4
|
||||
Push r4
|
||||
@@ -226,7 +227,7 @@ Try #0 start:
|
||||
Drop1
|
||||
Push r0
|
||||
LoadContextVar 0, 1
|
||||
DirectCall CP#4, 1
|
||||
DirectCall CP#2, 1
|
||||
Drop1
|
||||
Jump L1
|
||||
Try #0 end:
|
||||
@@ -263,12 +264,13 @@ Try #0 handler:
|
||||
LoadContextVar 0, 2
|
||||
StoreIndexedTOS
|
||||
DirectCall CP#11, 1
|
||||
DirectCall CP#4, 1
|
||||
DirectCall CP#2, 1
|
||||
Drop1
|
||||
PushConstant CP#13
|
||||
AllocateClosure CP#21
|
||||
StoreLocal r5
|
||||
Push r5
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r6
|
||||
Push r6
|
||||
ReturnTOS
|
||||
@@ -280,17 +282,17 @@ L1:
|
||||
ReturnTOS
|
||||
}
|
||||
ExceptionsTable {
|
||||
try-index 0, outer -1, start 20, end 56, handler 56, needs-stack-trace, types [CP#6]
|
||||
try-index 0, outer -1, start 20, end 60, handler 60, needs-stack-trace, types [CP#4]
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[2] = Reserved
|
||||
[3] = ObjectRef 'danger foo'
|
||||
[4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[5] = Reserved
|
||||
[6] = Type dart:core::Object
|
||||
[7] = EndClosureFunctionScope
|
||||
[1] = ObjectRef 'danger foo'
|
||||
[2] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[3] = Reserved
|
||||
[4] = Type dart:core::Object
|
||||
[5] = EndClosureFunctionScope
|
||||
[6] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[7] = Reserved
|
||||
[8] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[9] = ObjectRef 'caught '
|
||||
[10] = ObjectRef ' '
|
||||
@@ -304,19 +306,21 @@ ConstantPool {
|
||||
[18] = ObjectRef 'error '
|
||||
[19] = ObjectRef ', captured stack trace: '
|
||||
[20] = EndClosureFunctionScope
|
||||
[21] = AllocateClosure 1, num-elements: 1, flags: 0
|
||||
[22] = Reserved
|
||||
}
|
||||
Closure DART_SDK/pkg/dart2bytecode/testcases/try_blocks.dart::testTryCatch3::'foo' () -> void
|
||||
ClosureCode {
|
||||
Entry 5
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
PopLocal r2
|
||||
Try #0 start:
|
||||
PushConstant CP#3
|
||||
DirectCall CP#4, 1
|
||||
PushConstant CP#1
|
||||
DirectCall CP#2, 1
|
||||
Drop1
|
||||
Jump L1
|
||||
Try #0 end:
|
||||
@@ -330,7 +334,7 @@ Try #0 handler:
|
||||
PopLocal r4
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
DirectCall CP#4, 1
|
||||
DirectCall CP#2, 1
|
||||
Drop1
|
||||
Push r0
|
||||
PushInt 3
|
||||
@@ -345,14 +349,14 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/try_blocks.dart::testTryCatch3::'ba
|
||||
ClosureCode {
|
||||
Entry 6
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
PopLocal r2
|
||||
Try #0 start:
|
||||
PushConstant CP#14
|
||||
DirectCall CP#4, 1
|
||||
DirectCall CP#2, 1
|
||||
Drop1
|
||||
Jump L1
|
||||
Try #0 end:
|
||||
@@ -390,7 +394,7 @@ Try #0 handler:
|
||||
LoadContextVar 0, 2
|
||||
StoreIndexedTOS
|
||||
DirectCall CP#11, 1
|
||||
DirectCall CP#4, 1
|
||||
DirectCall CP#2, 1
|
||||
Drop1
|
||||
Jump L1
|
||||
L2:
|
||||
@@ -588,10 +592,11 @@ Try #1 start:
|
||||
PushConstant CP#5
|
||||
DirectCall CP#3, 1
|
||||
Drop1
|
||||
PushConstant CP#6
|
||||
AllocateClosure CP#8
|
||||
StoreLocal r8
|
||||
Push r8
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r7
|
||||
Push r7
|
||||
Push r7
|
||||
@@ -648,8 +653,8 @@ L3:
|
||||
ReturnTOS
|
||||
}
|
||||
ExceptionsTable {
|
||||
try-index 0, outer -1, start 53, end 134, handler 134, needs-stack-trace, synthetic, types [CP#11]
|
||||
try-index 1, outer 0, start 70, end 96, handler 96, needs-stack-trace, synthetic, types [CP#11]
|
||||
try-index 0, outer -1, start 53, end 138, handler 138, needs-stack-trace, synthetic, types [CP#11]
|
||||
try-index 1, outer 0, start 70, end 100, handler 100, needs-stack-trace, synthetic, types [CP#11]
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = InterfaceCall 'dart:core::Object::==', ArgDesc num-args 2, num-type-args 0, names []
|
||||
@@ -659,9 +664,9 @@ ConstantPool {
|
||||
[4] = Reserved
|
||||
[5] = ObjectRef 'try'
|
||||
[6] = ClosureFunction 0
|
||||
[7] = InstanceField dart:core::_Closure::_context (field)
|
||||
[8] = Reserved
|
||||
[9] = EndClosureFunctionScope
|
||||
[7] = EndClosureFunctionScope
|
||||
[8] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[9] = Reserved
|
||||
[10] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
||||
[11] = Type dynamic
|
||||
[12] = ObjectRef 'finally 1'
|
||||
@@ -673,7 +678,7 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/try_blocks.dart::testTryFinally2::'
|
||||
ClosureCode {
|
||||
Entry 2
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#7
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
@@ -694,7 +699,7 @@ Function 'testTryFinally3', static, reflectable, debuggable
|
||||
return-type dynamic
|
||||
|
||||
Bytecode {
|
||||
Entry 5
|
||||
Entry 6
|
||||
CheckStack 0
|
||||
AllocateContext 0, 1
|
||||
PopLocal r0
|
||||
@@ -706,22 +711,23 @@ Bytecode {
|
||||
Push r0
|
||||
PopLocal r3
|
||||
Try #0 start:
|
||||
PushConstant CP#0
|
||||
AllocateClosure CP#7
|
||||
StoreLocal r5
|
||||
Push r5
|
||||
Push r0
|
||||
PushNull
|
||||
AllocateClosure
|
||||
StoreClosureElement 0
|
||||
PopLocal r2
|
||||
Jump L1
|
||||
Try #0 end:
|
||||
Try #0 handler:
|
||||
SetFrame 5
|
||||
SetFrame 6
|
||||
Push r3
|
||||
PopLocal r0
|
||||
MoveSpecial exception, r3
|
||||
MoveSpecial stackTrace, r4
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
DirectCall CP#3, 1
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
Push r2
|
||||
DynamicCall CP#9, 1
|
||||
@@ -734,7 +740,7 @@ L1:
|
||||
PopLocal r0
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
DirectCall CP#3, 1
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
Push r2
|
||||
DynamicCall CP#9, 1
|
||||
@@ -746,18 +752,18 @@ L1:
|
||||
ReturnTOS
|
||||
}
|
||||
ExceptionsTable {
|
||||
try-index 0, outer -1, start 23, end 35, handler 35, needs-stack-trace, synthetic, types [CP#6]
|
||||
try-index 0, outer -1, start 23, end 39, handler 39, needs-stack-trace, synthetic, types [CP#4]
|
||||
}
|
||||
ConstantPool {
|
||||
[0] = ClosureFunction 0
|
||||
[1] = InstanceField dart:core::_Closure::_context (field)
|
||||
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[2] = Reserved
|
||||
[3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[4] = Reserved
|
||||
[5] = ObjectRef 'try 1'
|
||||
[6] = Type dynamic
|
||||
[7] = ObjectRef 'try 2'
|
||||
[8] = EndClosureFunctionScope
|
||||
[3] = ObjectRef 'try 1'
|
||||
[4] = Type dynamic
|
||||
[5] = ObjectRef 'try 2'
|
||||
[6] = EndClosureFunctionScope
|
||||
[7] = AllocateClosure 0, num-elements: 1, flags: 0
|
||||
[8] = Reserved
|
||||
[9] = DynamicCall 'implicit:call', ArgDesc num-args 1, num-type-args 0, names []
|
||||
[10] = Reserved
|
||||
}
|
||||
@@ -765,18 +771,18 @@ Closure DART_SDK/pkg/dart2bytecode/testcases/try_blocks.dart::testTryFinally3::'
|
||||
ClosureCode {
|
||||
Entry 6
|
||||
Push FP[-5]
|
||||
LoadFieldTOS CP#1
|
||||
LoadClosureElement 0
|
||||
PopLocal r0
|
||||
CheckStack 0
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
DirectCall CP#3, 1
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
Push r0
|
||||
PopLocal r2
|
||||
Try #0 start:
|
||||
PushConstant CP#5
|
||||
DirectCall CP#3, 1
|
||||
PushConstant CP#3
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
Jump L1
|
||||
Try #0 end:
|
||||
@@ -789,8 +795,8 @@ Try #0 handler:
|
||||
Push r0
|
||||
PopLocal r4
|
||||
Try #1 start:
|
||||
PushConstant CP#7
|
||||
DirectCall CP#3, 1
|
||||
PushConstant CP#5
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
Jump L2
|
||||
Try #1 end:
|
||||
@@ -802,7 +808,7 @@ Try #1 handler:
|
||||
MoveSpecial stackTrace, r5
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
DirectCall CP#3, 1
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
Push r4
|
||||
Push r5
|
||||
@@ -812,7 +818,7 @@ L2:
|
||||
PopLocal r0
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
DirectCall CP#3, 1
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
PushInt 43
|
||||
ReturnTOS
|
||||
@@ -822,8 +828,8 @@ L1:
|
||||
Push r0
|
||||
PopLocal r4
|
||||
Try #2 start:
|
||||
PushConstant CP#7
|
||||
DirectCall CP#3, 1
|
||||
PushConstant CP#5
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
Jump L3
|
||||
Try #2 end:
|
||||
@@ -835,7 +841,7 @@ Try #2 handler:
|
||||
MoveSpecial stackTrace, r5
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
DirectCall CP#3, 1
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
Push r4
|
||||
Push r5
|
||||
@@ -845,7 +851,7 @@ L3:
|
||||
PopLocal r0
|
||||
Push r0
|
||||
LoadContextVar 0, 0
|
||||
DirectCall CP#3, 1
|
||||
DirectCall CP#1, 1
|
||||
Drop1
|
||||
PushInt 43
|
||||
ReturnTOS
|
||||
|
||||
Reference in New Issue
Block a user