Skip to content
Merged

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions src/coreclr/inc/corinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -1792,20 +1792,20 @@ enum CorInfoContinuationFlags
// Otherwise the exact offset of the member is computed as
// OFFSETOF__CORINFO_Continuation__data + (index - 1) * PointerSize

CORINFO_CONTINUATION_EXECUTION_CONTEXT_INDEX_FIRST_BIT = 3,
CORINFO_CONTINUATION_EXECUTION_CONTEXT_INDEX_FIRST_BIT = 4,
CORINFO_CONTINUATION_EXECUTION_CONTEXT_INDEX_NUM_BITS = 2,

CORINFO_CONTINUATION_CONTEXT_INDEX_FIRST_BIT = 5,
CORINFO_CONTINUATION_CONTEXT_INDEX_FIRST_BIT = 6,
CORINFO_CONTINUATION_CONTEXT_INDEX_NUM_BITS = 2,

CORINFO_CONTINUATION_EXCEPTION_INDEX_FIRST_BIT = 7,
CORINFO_CONTINUATION_EXCEPTION_INDEX_FIRST_BIT = 8,
CORINFO_CONTINUATION_EXCEPTION_INDEX_NUM_BITS = 3,

// For JIT, the continuation stores space for every possible type of
// async callee's result. We need to represent the offset to each of
// these, so we allocate the rest of the bits for this.
CORINFO_CONTINUATION_RESULT_INDEX_FIRST_BIT = 10,
CORINFO_CONTINUATION_RESULT_INDEX_NUM_BITS = 22,
CORINFO_CONTINUATION_RESULT_INDEX_FIRST_BIT = 11,
CORINFO_CONTINUATION_RESULT_INDEX_NUM_BITS = 21,
};

struct CORINFO_ASYNC_INFO
Expand Down
10 changes: 5 additions & 5 deletions src/coreclr/inc/jiteeversionguid.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@

#include <minipal/guid.h>

constexpr GUID JITEEVersionIdentifier = { /* fcb1b400-696c-4425-a8a7-bb082430a217 */
0xfcb1b400,
0x696c,
0x4425,
{0xa8, 0xa7, 0xbb, 0x08, 0x24, 0x30, 0xa2, 0x17}
constexpr GUID JITEEVersionIdentifier = { /* 5fe1ab78-3c99-4866-8771-5596c7a0e181 */
0x5fe1ab78,
0x3c99,
0x4866,
{0x87, 0x71, 0x55, 0x96, 0xc7, 0xa0, 0xe1, 0x81}
};

#endif // JIT_EE_VERSIONING_GUID_H
5 changes: 3 additions & 2 deletions src/coreclr/inc/readytorun.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@
// src/coreclr/nativeaot/Runtime/inc/ModuleHeaders.h
// If you update this, ensure you run `git grep MINIMUM_READYTORUN_MAJOR_VERSION`
// and handle pending work.
#define READYTORUN_MAJOR_VERSION 24
#define READYTORUN_MAJOR_VERSION 25
Comment thread
jakobbotsch marked this conversation as resolved.
#define READYTORUN_MINOR_VERSION 0x0000

#define MINIMUM_READYTORUN_MAJOR_VERSION 24
#define MINIMUM_READYTORUN_MAJOR_VERSION 25

// R2R Version 2.1 adds the InliningInfo section
// R2R Version 2.2 adds the ProfileDataInfo section
Expand Down Expand Up @@ -64,6 +64,7 @@
// R2R Version 22 changes NativeVarInfo encoding to include CALL_RETURN_VALUE
// R2R Version 23 changes delegate layout to have target before methodPtr
// R2R Version 24 changes ARM32 virtual stub dispatch hidden parameter register to R12
// R2R Version 25 renames runtime async infrastructure members, makes thunk-used members NonVersionable, and frees up a flag in CorInfoContinuationFlags

struct READYTORUN_CORE_HEADER
{
Expand Down
6 changes: 3 additions & 3 deletions src/coreclr/jit/importer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11701,7 +11701,7 @@ bool Compiler::impReturnInstruction(int prefixFlags, OPCODE& opcode)
//------------------------------------------------------------------------
// impWrapTopOfStackInAwait:
// Wrap the value on the top of the stack in
// AsyncHelpers.TransparentAwaitWithResult.
// AsyncHelpers.TransparentAwait.
//
// Returns:
// True if successful. False if the EE could not create the call (only during
Expand All @@ -11713,7 +11713,7 @@ bool Compiler::impReturnInstruction(int prefixFlags, OPCODE& opcode)
// mistyped; the original IL returns a Task or ValueTask, but the runtime
// async version expects to return the unwrapped result. This function
// accomplishes the unwrapping by inserting an async call to
// AsyncHelpers.TransparentAwaitWithResult around the value on the top of the
// AsyncHelpers.TransparentAwait around the value on the top of the
// stack.
//
bool Compiler::impWrapTopOfStackInAwait()
Expand Down Expand Up @@ -11860,7 +11860,7 @@ bool Compiler::impWrapTopOfStackInAwait()
//------------------------------------------------------------------------
// impFoldAwaitedTopOfStack:
// Fold a few patterns where introducing a call to
// AsyncHelpers.TransparentAwaitWithResult is unnecessary.
// AsyncHelpers.TransparentAwait is unnecessary.
//
// Returns:
// True if the top of stack was folded and the importer stack was updated
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/nativeaot/Runtime/inc/ModuleHeaders.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ struct ReadyToRunHeaderConstants
{
static const uint32_t Signature = 0x00525452; // 'RTR'

static const uint32_t CurrentMajorVersion = 24;
static const uint32_t CurrentMajorVersion = 25;
static const uint32_t CurrentMinorVersion = 0;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ internal struct ReadyToRunHeaderConstants
{
public const uint Signature = 0x00525452; // 'RTR'

public const ushort CurrentMajorVersion = 24;
public const ushort CurrentMajorVersion = 25;
public const ushort CurrentMinorVersion = 0;
}
#if READYTORUN
Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3618,7 +3618,7 @@ private void getAsyncInfo(ref CORINFO_ASYNC_INFO pAsyncInfoOut)
? context.SystemModule.GetKnownType("System.Threading.Tasks"u8, "ValueTask"u8)
: context.SystemModule.GetKnownType("System.Threading.Tasks"u8, "Task"u8);
MethodSignature signature = new MethodSignature(MethodSignatureFlags.Static, 0, context.GetWellKnownType(WellKnownType.Void), [parameterType]);
runtimeDeterminedResult = asyncHelpers.GetKnownMethod("TransparentAwaitWithResult"u8, signature);
runtimeDeterminedResult = asyncHelpers.GetKnownMethod("TransparentAwait"u8, signature);
}
else
{
Expand All @@ -3627,7 +3627,7 @@ private void getAsyncInfo(ref CORINFO_ASYNC_INFO pAsyncInfoOut)
? context.SystemModule.GetKnownType("System.Threading.Tasks"u8, "ValueTask`1"u8).MakeInstantiatedType(signatureVariable)
: context.SystemModule.GetKnownType("System.Threading.Tasks"u8, "Task`1"u8).MakeInstantiatedType(signatureVariable);
MethodSignature signature = new MethodSignature(MethodSignatureFlags.Static, 1, signatureVariable, [parameterType]);
runtimeDeterminedResult = asyncHelpers.GetKnownMethod("TransparentAwaitWithResult"u8, signature).MakeInstantiatedMethod(returnType);
runtimeDeterminedResult = asyncHelpers.GetKnownMethod("TransparentAwait"u8, signature).MakeInstantiatedMethod(returnType);
}

MethodDesc result = runtimeDeterminedResult.GetCanonMethodTarget(CanonicalFormKind.Specific);
Expand Down
18 changes: 9 additions & 9 deletions src/coreclr/tools/Common/TypeSystem/IL/Stubs/AsyncThunks.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public static class AsyncThunkILEmitter
// Emits a thunk that wraps an async method to return a Task or ValueTask.
// The thunk calls the async method, and if it completes synchronously,
// it returns a completed Task/ValueTask. If the async method suspends,
// it calls FinalizeTaskReturningThunk/FinalizeValueTaskReturningThunk method to get the Task/ValueTask.
// it calls CreateRuntimeAsyncTask/CreateRuntimeAsyncValueTask method to get the Task/ValueTask.

// The emitted code matches method EmitTaskReturningThunk in CoreCLR VM.
public static MethodIL EmitTaskReturningThunk(MethodDesc taskReturningMethod, MethodDesc asyncMethod)
Expand Down Expand Up @@ -191,35 +191,35 @@ public static MethodIL EmitTaskReturningThunk(MethodDesc taskReturningMethod, Me

codestream.EmitLabel(suspendedLabel);

MethodDesc finalizeTaskReturningThunkMd;
MethodDesc createRuntimeAsyncTaskMd;
if (logicalReturnType != null)
{
MethodSignature finalizeReturningThunkSignature = new MethodSignature(
MethodSignature createRuntimeAsyncTaskSignature = new MethodSignature(
MethodSignatureFlags.Static,
genericParameterCount: 1,
returnType: ((MetadataType)returnType.GetTypeDefinition()).MakeInstantiatedType(context.GetSignatureVariable(0, true)),
parameters: [awaitStateType.MakeByRefType()]
);

finalizeTaskReturningThunkMd = asyncHelpersType
.GetKnownMethod(isValueTask ? "FinalizeValueTaskReturningThunk"u8 : "FinalizeTaskReturningThunk"u8, finalizeReturningThunkSignature)
createRuntimeAsyncTaskMd = asyncHelpersType
.GetKnownMethod(isValueTask ? "CreateRuntimeAsyncValueTask"u8 : "CreateRuntimeAsyncTask"u8, createRuntimeAsyncTaskSignature)
.MakeInstantiatedMethod(new Instantiation(logicalReturnType));
}
else
{
MethodSignature finalizeReturningThunkSignature = new MethodSignature(
MethodSignature createRuntimeAsyncTaskSignature = new MethodSignature(
MethodSignatureFlags.Static,
genericParameterCount: 0,
returnType: returnType,
parameters: [awaitStateType.MakeByRefType()]
);

finalizeTaskReturningThunkMd = asyncHelpersType
.GetKnownMethod(isValueTask ? "FinalizeValueTaskReturningThunk"u8 : "FinalizeTaskReturningThunk"u8, finalizeReturningThunkSignature);
createRuntimeAsyncTaskMd = asyncHelpersType
.GetKnownMethod(isValueTask ? "CreateRuntimeAsyncValueTask"u8 : "CreateRuntimeAsyncTask"u8, createRuntimeAsyncTaskSignature);
}

codestream.EmitLdLoc(refAwaitStateLocal);
codestream.Emit(ILOpcode.call, emitter.NewToken(finalizeTaskReturningThunkMd));
codestream.Emit(ILOpcode.call, emitter.NewToken(createRuntimeAsyncTaskMd));
codestream.EmitStLoc(returnTaskLocal);
codestream.Emit(ILOpcode.leave, returnTaskLabel);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1822,7 +1822,7 @@ private void ImportReturn()
? context.SystemModule.GetKnownType("System.Threading.Tasks"u8, "ValueTask"u8)
: context.SystemModule.GetKnownType("System.Threading.Tasks"u8, "Task"u8);
MethodSignature signature = new MethodSignature(MethodSignatureFlags.Static, 0, context.GetWellKnownType(WellKnownType.Void), [parameterType]);
runtimeDeterminedResult = asyncHelpers.GetKnownMethod("TransparentAwaitWithResult"u8, signature);
runtimeDeterminedResult = asyncHelpers.GetKnownMethod("TransparentAwait"u8, signature);
}
else
{
Expand All @@ -1831,7 +1831,7 @@ private void ImportReturn()
? context.SystemModule.GetKnownType("System.Threading.Tasks"u8, "ValueTask`1"u8).MakeInstantiatedType(signatureVariable)
: context.SystemModule.GetKnownType("System.Threading.Tasks"u8, "Task`1"u8).MakeInstantiatedType(signatureVariable);
MethodSignature signature = new MethodSignature(MethodSignatureFlags.Static, 1, signatureVariable, [parameterType]);
runtimeDeterminedResult = asyncHelpers.GetKnownMethod("TransparentAwaitWithResult"u8, signature).MakeInstantiatedMethod(returnType);
runtimeDeterminedResult = asyncHelpers.GetKnownMethod("TransparentAwait"u8, signature).MakeInstantiatedMethod(returnType);
}

MethodDesc targetMethod = runtimeDeterminedResult.GetCanonMethodTarget(CanonicalFormKind.Specific);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1023,7 +1023,7 @@ private void AddNecessaryAsyncReferences(MethodDesc method)
continuation.GetKnownField("State"u8),
continuation.GetKnownField("Flags"u8),
];
// The signature types for the TransparentAwaitWithResult overloads used by
// The signature types for the TransparentAwait overloads used by
// CorInfoImpl.getAwaitReturnCall (kept in sync with that method).
TypeDesc voidType = TypeSystemContext.GetWellKnownType(WellKnownType.Void);
TypeDesc taskType = TypeSystemContext.SystemModule.GetKnownType("System.Threading.Tasks"u8, "Task"u8);
Expand All @@ -1049,10 +1049,10 @@ private void AddNecessaryAsyncReferences(MethodDesc method)

// For CorInfoImpl.getAwaitReturnCall. The JIT synthesizes calls to these overloads, so they
// have no IL token in the caller and their manifest tokens must be pre-seeded here.
asyncHelpers.GetKnownMethod("TransparentAwaitWithResult"u8, new MethodSignature(MethodSignatureFlags.Static, 0, voidType, [taskType])),
asyncHelpers.GetKnownMethod("TransparentAwaitWithResult"u8, new MethodSignature(MethodSignatureFlags.Static, 0, voidType, [valueTaskType])),
asyncHelpers.GetKnownMethod("TransparentAwaitWithResult"u8, new MethodSignature(MethodSignatureFlags.Static, 1, methodVar, [taskOfTType.MakeInstantiatedType(methodVar)])),
asyncHelpers.GetKnownMethod("TransparentAwaitWithResult"u8, new MethodSignature(MethodSignatureFlags.Static, 1, methodVar, [valueTaskOfTType.MakeInstantiatedType(methodVar)])),
asyncHelpers.GetKnownMethod("TransparentAwait"u8, new MethodSignature(MethodSignatureFlags.Static, 0, voidType, [taskType])),
asyncHelpers.GetKnownMethod("TransparentAwait"u8, new MethodSignature(MethodSignatureFlags.Static, 0, voidType, [valueTaskType])),
asyncHelpers.GetKnownMethod("TransparentAwait"u8, new MethodSignature(MethodSignatureFlags.Static, 1, methodVar, [taskOfTType.MakeInstantiatedType(methodVar)])),
asyncHelpers.GetKnownMethod("TransparentAwait"u8, new MethodSignature(MethodSignatureFlags.Static, 1, methodVar, [valueTaskOfTType.MakeInstantiatedType(methodVar)])),
];
var moduleForNewReferences = ((EcmaMethod)method.GetPrimaryMethodDesc().GetTypicalMethodDefinition()).Module;
_tokenManager.EnsureDefTokensAreAvailable([..requiredMethods, ..requiredTypes, ..requiredFields], moduleForNewReferences, true);
Expand Down
18 changes: 9 additions & 9 deletions src/coreclr/vm/asyncthunks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ void MethodDesc::EmitTaskReturningThunk(MethodDesc* pAsyncCallVariant, MetaSig&
// if (AsyncHelpers.AsyncCallContinuation() == null)
// return Task.FromResult(result);
//
// return FinalizeTaskReturningThunk(ref awaitState);
// return CreateRuntimeAsyncTask(ref awaitState);
// }
// catch (Exception ex)
// {
Expand Down Expand Up @@ -229,29 +229,29 @@ void MethodDesc::EmitTaskReturningThunk(MethodDesc* pAsyncCallVariant, MetaSig&

pCode->EmitLabel(suspendedLabel);

int finalizeTaskReturningThunkToken;
int createRuntimeAsyncTaskToken;
if (logicalResultLocal != UINT_MAX)
{
MethodDesc* md;
if (isValueTask)
md = CoreLibBinder::GetMethod(METHOD__ASYNC_HELPERS__FINALIZE_VALUETASK_RETURNING_THUNK_1);
md = CoreLibBinder::GetMethod(METHOD__ASYNC_HELPERS__CREATE_RUNTIME_ASYNC_VALUE_TASK_1);
else
md = CoreLibBinder::GetMethod(METHOD__ASYNC_HELPERS__FINALIZE_TASK_RETURNING_THUNK_1);
md = CoreLibBinder::GetMethod(METHOD__ASYNC_HELPERS__CREATE_RUNTIME_ASYNC_TASK_1);

md = FindOrCreateAssociatedMethodDesc(md, md->GetMethodTable(), FALSE, Instantiation(&thLogicalRetType, 1), FALSE);
finalizeTaskReturningThunkToken = GetTokenForGenericMethodCallWithAsyncReturnType(pCode, md);
createRuntimeAsyncTaskToken = GetTokenForGenericMethodCallWithAsyncReturnType(pCode, md);
}
else
{
MethodDesc* md;
if (isValueTask)
md = CoreLibBinder::GetMethod(METHOD__ASYNC_HELPERS__FINALIZE_VALUETASK_RETURNING_THUNK);
md = CoreLibBinder::GetMethod(METHOD__ASYNC_HELPERS__CREATE_RUNTIME_ASYNC_VALUE_TASK);
else
md = CoreLibBinder::GetMethod(METHOD__ASYNC_HELPERS__FINALIZE_TASK_RETURNING_THUNK);
finalizeTaskReturningThunkToken = pCode->GetToken(md);
md = CoreLibBinder::GetMethod(METHOD__ASYNC_HELPERS__CREATE_RUNTIME_ASYNC_TASK);
createRuntimeAsyncTaskToken = pCode->GetToken(md);
}
pCode->EmitLDLOC(refAwaitStateLocal);
pCode->EmitCALL(finalizeTaskReturningThunkToken, 1, 1);
pCode->EmitCALL(createRuntimeAsyncTaskToken, 1, 1);
pCode->EmitSTLOC(returnTaskLocal);
pCode->EmitLEAVE(returnTaskLabel);

Expand Down
22 changes: 8 additions & 14 deletions src/coreclr/vm/corelib.h
Original file line number Diff line number Diff line change
Expand Up @@ -708,26 +708,20 @@ DEFINE_METHOD(ASYNC_HELPERS, ALLOC_CONTINUATION, AllocContinuation,
DEFINE_METHOD(ASYNC_HELPERS, ALLOC_CONTINUATION_METHOD, AllocContinuationMethod, NoSig)
DEFINE_METHOD(ASYNC_HELPERS, ALLOC_CONTINUATION_CLASS, AllocContinuationClass, NoSig)

DEFINE_METHOD(ASYNC_HELPERS, FINALIZE_TASK_RETURNING_THUNK, FinalizeTaskReturningThunk, SM_RefRuntimeAsyncAwaitState_RetTask)
DEFINE_METHOD(ASYNC_HELPERS, FINALIZE_TASK_RETURNING_THUNK_1, FinalizeTaskReturningThunk, GM_RefRuntimeAsyncAwaitState_RetTaskOfT)
DEFINE_METHOD(ASYNC_HELPERS, FINALIZE_VALUETASK_RETURNING_THUNK, FinalizeValueTaskReturningThunk, SM_RefRuntimeAsyncAwaitState_RetValueTask)
DEFINE_METHOD(ASYNC_HELPERS, FINALIZE_VALUETASK_RETURNING_THUNK_1, FinalizeValueTaskReturningThunk, GM_RefRuntimeAsyncAwaitState_RetValueTaskOfT)
DEFINE_METHOD(ASYNC_HELPERS, CREATE_RUNTIME_ASYNC_TASK, CreateRuntimeAsyncTask, SM_RefRuntimeAsyncAwaitState_RetTask)
DEFINE_METHOD(ASYNC_HELPERS, CREATE_RUNTIME_ASYNC_TASK_1, CreateRuntimeAsyncTask, GM_RefRuntimeAsyncAwaitState_RetTaskOfT)
DEFINE_METHOD(ASYNC_HELPERS, CREATE_RUNTIME_ASYNC_VALUE_TASK, CreateRuntimeAsyncValueTask, SM_RefRuntimeAsyncAwaitState_RetValueTask)
DEFINE_METHOD(ASYNC_HELPERS, CREATE_RUNTIME_ASYNC_VALUE_TASK_1, CreateRuntimeAsyncValueTask, GM_RefRuntimeAsyncAwaitState_RetValueTaskOfT)

DEFINE_METHOD(ASYNC_HELPERS, TASK_FROM_EXCEPTION, TaskFromException, SM_Exception_RetTask)
DEFINE_METHOD(ASYNC_HELPERS, TASK_FROM_EXCEPTION_1, TaskFromException, GM_Exception_RetTaskOfT)
DEFINE_METHOD(ASYNC_HELPERS, VALUETASK_FROM_EXCEPTION, ValueTaskFromException, SM_Exception_RetValueTask)
DEFINE_METHOD(ASYNC_HELPERS, VALUETASK_FROM_EXCEPTION_1, ValueTaskFromException, GM_Exception_RetValueTaskOfT)

DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT, TransparentAwait, NoSig)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_OF_T, TransparentAwaitOfT, NoSig)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_VALUE_TASK, TransparentAwaitValueTask, NoSig)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_VALUE_TASK_OF_T, TransparentAwaitValueTaskOfT, NoSig)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_TASK_WITH_RESULT, TransparentAwaitWithResult, SM_Task_RetVoid)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_VALUETASK_WITH_RESULT, TransparentAwaitWithResult, SM_ValueTask_RetVoid)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_TASK_OF_T_WITH_RESULT, TransparentAwaitWithResult, GM_TaskOfT_RetT)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_VALUETASK_OF_T_WITH_RESULT, TransparentAwaitWithResult, GM_ValueTaskOfT_RetT)
DEFINE_METHOD(ASYNC_HELPERS, COMPLETED_TASK_RESULT, CompletedTaskResult, NoSig)
DEFINE_METHOD(ASYNC_HELPERS, COMPLETED_TASK, CompletedTask, NoSig)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_TASK, TransparentAwait, SM_Task_RetVoid)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_VALUETASK, TransparentAwait, SM_ValueTask_RetVoid)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_TASK_OF_T, TransparentAwait, GM_TaskOfT_RetT)
DEFINE_METHOD(ASYNC_HELPERS, TRANSPARENT_AWAIT_VALUETASK_OF_T, TransparentAwait, GM_ValueTaskOfT_RetT)
DEFINE_METHOD(ASYNC_HELPERS, CAPTURE_EXECUTION_CONTEXT, CaptureExecutionContext, NoSig)
DEFINE_METHOD(ASYNC_HELPERS, CAPTURE_CONTINUATION_CONTEXT, CaptureContinuationContext, NoSig)
DEFINE_METHOD(ASYNC_HELPERS, CAPTURE_CONTEXTS, CaptureContexts, NoSig)
Expand Down
Loading
Loading