dart-sdk/runtime/vm/stub_code_list.h
Alexander Markov 66f1dee48c [vm] Runtime type check in await
'await e' should check that e is a Future<flatten(S)>, where S is a
static type of e before awaiting e. If e is not a Future<flatten(S)>,
then 'await e' should await Future.value(e) instead of e. So futures
of incompatible type are not awaited and soundness is not violated.

TEST=tests/language/async/await_type_check_test.dart
(Based on https://dart-review.git.corp.google.com/c/sdk/+/267422.)

Fixes https://github.com/dart-lang/sdk/issues/50529
Part of https://github.com/dart-lang/sdk/issues/49396

Change-Id: Ia418db1be6736710abc9be87d95584c50cbc677e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/273002
Reviewed-by: Erik Ernst <eernst@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2022-12-07 22:46:22 +00:00

181 lines
13 KiB
C++

// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#ifndef RUNTIME_VM_STUB_CODE_LIST_H_
#define RUNTIME_VM_STUB_CODE_LIST_H_
namespace dart {
#define VM_TYPE_TESTING_STUB_CODE_LIST(V) \
V(DefaultTypeTest) \
V(DefaultNullableTypeTest) \
V(TopTypeTypeTest) \
V(UnreachableTypeTest) \
V(TypeParameterTypeTest) \
V(NullableTypeParameterTypeTest) \
V(SlowTypeTest) \
V(LazySpecializeTypeTest) \
V(LazySpecializeNullableTypeTest)
// List of stubs created in the VM isolate, these stubs are shared by different
// isolates running in this dart process.
#define VM_STUB_CODE_LIST(V) \
V(GetCStackPointer) \
V(JumpToFrame) \
V(RunExceptionHandler) \
V(DeoptForRewind) \
V(WriteBarrier) \
V(WriteBarrierWrappers) \
V(ArrayWriteBarrier) \
V(AllocateArray) \
V(AllocateMint) \
V(AllocateDouble) \
V(AllocateFloat32x4) \
V(AllocateFloat64x2) \
V(AllocateInt32x4) \
V(AllocateInt8Array) \
V(AllocateUint8Array) \
V(AllocateUint8ClampedArray) \
V(AllocateInt16Array) \
V(AllocateUint16Array) \
V(AllocateInt32Array) \
V(AllocateUint32Array) \
V(AllocateInt64Array) \
V(AllocateUint64Array) \
V(AllocateFloat32Array) \
V(AllocateFloat64Array) \
V(AllocateFloat32x4Array) \
V(AllocateInt32x4Array) \
V(AllocateFloat64x2Array) \
V(AllocateMintSharedWithFPURegs) \
V(AllocateMintSharedWithoutFPURegs) \
V(AllocateClosure) \
V(AllocateContext) \
V(AllocateGrowableArray) \
V(AllocateObject) \
V(AllocateObjectParameterized) \
V(AllocateObjectSlow) \
V(AllocateRecord) \
V(AllocateRecord2) \
V(AllocateRecord2Named) \
V(AllocateRecord3) \
V(AllocateRecord3Named) \
V(AllocateUnhandledException) \
V(BoxDouble) \
V(BoxFloat32x4) \
V(BoxFloat64x2) \
V(CloneContext) \
V(CallToRuntime) \
V(LazyCompile) \
V(CallBootstrapNative) \
V(CallNoScopeNative) \
V(CallAutoScopeNative) \
V(FixCallersTarget) \
V(CallStaticFunction) \
V(OptimizeFunction) \
V(InvokeDartCode) \
V(DebugStepCheck) \
V(SwitchableCallMiss) \
V(MonomorphicSmiableCheck) \
V(SingleTargetCall) \
V(ICCallThroughCode) \
V(MegamorphicCall) \
V(FixAllocationStubTarget) \
V(FixParameterizedAllocationStubTarget) \
V(Deoptimize) \
V(DeoptimizeLazyFromReturn) \
V(DeoptimizeLazyFromThrow) \
V(UnoptimizedIdenticalWithNumberCheck) \
V(OptimizedIdenticalWithNumberCheck) \
V(ICCallBreakpoint) \
V(UnoptStaticCallBreakpoint) \
V(RuntimeCallBreakpoint) \
V(OneArgCheckInlineCache) \
V(TwoArgsCheckInlineCache) \
V(SmiAddInlineCache) \
V(SmiLessInlineCache) \
V(SmiEqualInlineCache) \
V(OneArgOptimizedCheckInlineCache) \
V(TwoArgsOptimizedCheckInlineCache) \
V(ZeroArgsUnoptimizedStaticCall) \
V(OneArgUnoptimizedStaticCall) \
V(TwoArgsUnoptimizedStaticCall) \
V(AssertSubtype) \
V(AssertAssignable) \
V(TypeIsTopTypeForSubtyping) \
V(TypeIsTopTypeForSubtypingNullSafe) \
V(NullIsAssignableToType) \
V(NullIsAssignableToTypeNullSafe) \
V(Subtype1TestCache) \
V(Subtype3TestCache) \
V(Subtype5TestCache) \
V(Subtype7TestCache) \
VM_TYPE_TESTING_STUB_CODE_LIST(V) \
V(CallClosureNoSuchMethod) \
V(FrameAwaitingMaterialization) \
V(AsynchronousGapMarker) \
V(NotLoaded) \
V(DispatchTableNullError) \
V(LateInitializationErrorSharedWithFPURegs) \
V(LateInitializationErrorSharedWithoutFPURegs) \
V(NullErrorSharedWithFPURegs) \
V(NullErrorSharedWithoutFPURegs) \
V(NullArgErrorSharedWithFPURegs) \
V(NullArgErrorSharedWithoutFPURegs) \
V(NullCastErrorSharedWithFPURegs) \
V(NullCastErrorSharedWithoutFPURegs) \
V(RangeErrorSharedWithFPURegs) \
V(RangeErrorSharedWithoutFPURegs) \
V(WriteErrorSharedWithFPURegs) \
V(WriteErrorSharedWithoutFPURegs) \
V(StackOverflowSharedWithFPURegs) \
V(StackOverflowSharedWithoutFPURegs) \
V(DoubleToInteger) \
V(OneArgCheckInlineCacheWithExactnessCheck) \
V(OneArgOptimizedCheckInlineCacheWithExactnessCheck) \
V(EnterSafepoint) \
V(ExitSafepoint) \
V(ExitSafepointIgnoreUnwindInProgress) \
V(CallNativeThroughSafepoint) \
V(InitStaticField) \
V(InitLateStaticField) \
V(InitLateFinalStaticField) \
V(InitInstanceField) \
V(InitLateInstanceField) \
V(InitLateFinalInstanceField) \
V(Throw) \
V(ReThrow) \
V(AssertBoolean) \
V(InstanceOf) \
V(InstantiateType) \
V(InstantiateTypeNonNullableClassTypeParameter) \
V(InstantiateTypeNullableClassTypeParameter) \
V(InstantiateTypeLegacyClassTypeParameter) \
V(InstantiateTypeNonNullableFunctionTypeParameter) \
V(InstantiateTypeNullableFunctionTypeParameter) \
V(InstantiateTypeLegacyFunctionTypeParameter) \
V(InstantiateTypeArguments) \
V(InstantiateTypeArgumentsMayShareInstantiatorTA) \
V(InstantiateTypeArgumentsMayShareFunctionTA) \
V(NoSuchMethodDispatcher) \
V(Await) \
V(AwaitWithTypeCheck) \
V(InitAsync) \
V(Resume) \
V(ReturnAsync) \
V(ReturnAsyncNotFuture) \
V(InitAsyncStar) \
V(YieldAsyncStar) \
V(ReturnAsyncStar) \
V(InitSyncStar) \
V(SuspendSyncStarAtStart) \
V(SuspendSyncStarAtYield) \
V(AsyncExceptionHandler) \
V(CloneSuspendState) \
V(UnknownDartCode)
} // namespace dart
#endif // RUNTIME_VM_STUB_CODE_LIST_H_