| // Copyright (c) 2020, 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_COMPILER_FFI_NATIVE_CALLING_CONVENTION_H_ |
| #define RUNTIME_VM_COMPILER_FFI_NATIVE_CALLING_CONVENTION_H_ |
| |
| #if defined(DART_PRECOMPILED_RUNTIME) |
| #error "AOT runtime should not use compiler sources (including header files)" |
| #endif // defined(DART_PRECOMPILED_RUNTIME) |
| |
| #include "platform/globals.h" |
| #include "vm/compiler/ffi/native_location.h" |
| #include "vm/compiler/ffi/native_type.h" |
| |
| namespace dart { |
| |
| namespace compiler { |
| |
| namespace ffi { |
| |
| using NativeLocations = ZoneGrowableArray<const NativeLocation*>; |
| |
| // Calculates native calling convention, is not aware of Dart calling |
| // convention constraints. |
| // |
| // This class is meant to be embedded in a class that is aware of Dart calling |
| // convention constraints. |
| class NativeCallingConvention : public ZoneAllocated { |
| public: |
| static const NativeCallingConvention& FromSignature( |
| Zone* zone, |
| const NativeFunctionType& signature); |
| |
| const NativeLocations& argument_locations() const { |
| return argument_locations_; |
| } |
| const NativeLocation& return_location() const { return return_location_; } |
| |
| intptr_t StackTopInBytes() const; |
| |
| void PrintTo(BaseTextBuffer* f, bool multi_line = false) const; |
| void PrintToMultiLine(BaseTextBuffer* f) const; |
| const char* ToCString(Zone* zone, bool multi_line = false) const; |
| #if !defined(FFI_UNIT_TESTS) |
| const char* ToCString(bool multi_line = false) const; |
| #endif |
| |
| private: |
| NativeCallingConvention(const NativeLocations& argument_locations, |
| const NativeLocation& return_location) |
| : argument_locations_(argument_locations), |
| return_location_(return_location) {} |
| |
| const NativeLocations& argument_locations_; |
| const NativeLocation& return_location_; |
| }; |
| |
| } // namespace ffi |
| |
| } // namespace compiler |
| |
| } // namespace dart |
| |
| #endif // RUNTIME_VM_COMPILER_FFI_NATIVE_CALLING_CONVENTION_H_ |