// 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.

// All imports must be in all FFI patch files to not depend on the order
// the patches are applied.
import "dart:_internal" show patch;
import 'dart:typed_data' show TypedData;

// NativeType is not private, because it is used in type arguments.
// NativeType is abstract because it not used with const constructors in
// annotations directly, so it should never be instantiated at runtime.
@patch
@pragma("vm:entry-point")
abstract class NativeType {}

@patch
@pragma("vm:entry-point")
class _NativeInteger extends NativeType {}

@patch
@pragma("vm:entry-point")
class _NativeDouble extends NativeType {}

@patch
@pragma("vm:entry-point")
class Int8 extends _NativeInteger {}

@patch
@pragma("vm:entry-point")
class Int16 extends _NativeInteger {}

@patch
@pragma("vm:entry-point")
class Int32 extends _NativeInteger {}

@patch
@pragma("vm:entry-point")
class Int64 extends _NativeInteger {}

@patch
@pragma("vm:entry-point")
class Uint8 extends _NativeInteger {}

@patch
@pragma("vm:entry-point")
class Uint16 extends _NativeInteger {}

@patch
@pragma("vm:entry-point")
class Uint32 extends _NativeInteger {}

@patch
@pragma("vm:entry-point")
class Uint64 extends _NativeInteger {}

@patch
@pragma("vm:entry-point")
class IntPtr extends _NativeInteger {}

@patch
@pragma("vm:entry-point")
class Float extends _NativeDouble {}

@patch
@pragma("vm:entry-point")
class Double extends _NativeDouble {}

@patch
@pragma("vm:entry-point")
class Void extends NativeType {}

@patch
@pragma("vm:entry-point")
class NativeFunction<T extends Function> extends NativeType {}
