//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

#if (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && _runtime(_ObjC)
/// Enumeration describing Mach error codes.
@objc
public enum MachErrorCode : Int32 {
  case success                  = 0

  /// Specified address is not currently valid.
  case invalidAddress           = 1

  /// Specified memory is valid, but does not permit the required
  /// forms of access.
  case protectionFailure        = 2

  /// The address range specified is already in use, or no address
  /// range of the size specified could be found.  
  case noSpace                  = 3

  /// The function requested was not applicable to this type of
  /// argument, or an argument is invalid.
  case invalidArgument          = 4

  /// The function could not be performed.  A catch-all.
  case failure                  = 5

  /// A system resource could not be allocated to fulfill this
  /// request.  This failure may not be permanent.
  case resourceShortage         = 6

  /// The task in question does not hold receive rights for the port
  /// argument.
  case notReceiver              = 7

  /// Bogus access restriction.
  case noAccess                 = 8

  /// During a page fault, the target address refers to a memory
  /// object that has been destroyed.  This failure is permanent.
  case memoryFailure            = 9

  /// During a page fault, the memory object indicated that the data
  /// could not be returned.  This failure may be temporary; future
  /// attempts to access this same data may succeed, as defined by the
  /// memory object.
  case memoryError              = 10

  /// The receive right is already a member of the portset.
  case alreadyInSet             = 11

  /// The receive right is not a member of a port set.
  case notInSet                 = 12

  /// The name already denotes a right in the task.
  case nameExists               = 13

  /// The operation was aborted.  Ipc code will catch this and reflect
  /// it as a message error.
  case aborted                  = 14

  /// The name doesn't denote a right in the task.
  case invalidName              = 15

  /// Target task isn't an active task.
  case invalidTask              = 16

  /// The name denotes a right, but not an appropriate right.
  case invalidRight             = 17

  /// A blatant range error.
  case invalidValue             = 18

  /// Operation would overflow limit on user-references.
  case userReferencesOverflow   = 19

  /// The supplied (port) capability is improper.
  case invalidCapability        = 20

  /// The task already has send or receive rights for the port under
  /// another name.
  case rightExists              = 21

  /// Target host isn't actually a host.
  case invalidHost              = 22

  /// An attempt was made to supply "precious" data for memory that is
  /// already present in a memory object.
  case memoryPresent            = 23

  /// A page was requested of a memory manager via
  /// memory_object_data_request for an object using a
  /// MEMORY_OBJECT_COPY_CALL strategy, with the VM_PROT_WANTS_COPY
  /// flag being used to specify that the page desired is for a copy
  /// of the object, and the memory manager has detected the page was
  /// pushed into a copy of the object while the kernel was walking
  /// the shadow chain from the copy to the object. This error code is
  /// delivered via memory_object_data_error and is handled by the
  /// kernel (it forces the kernel to restart the fault). It will not
  /// be seen by users.
  case memoryDataMoved          = 24

  /// A strategic copy was attempted of an object upon which a quicker
  /// copy is now possible.  The caller should retry the copy using
  /// vm_object_copy_quickly. This error code is seen only by the
  /// kernel.
  case memoryRestartCopy        = 25

  /// An argument applied to assert processor set privilege was not a
  /// processor set control port.
  case invalidProcessorSet      = 26

  /// The specified scheduling attributes exceed the thread's limits.
  case policyLimit              = 27

  /// The specified scheduling policy is not currently enabled for the
  /// processor set.
  case invalidPolicy            = 28

  /// The external memory manager failed to initialize the memory object.
  case invalidObject            = 29

  /// A thread is attempting to wait for an event for which there is
  /// already a waiting thread.
  case alreadyWaiting           = 30

  /// An attempt was made to destroy the default processor set.
  case defaultSet               = 31

  /// An attempt was made to fetch an exception port that is
  /// protected, or to abort a thread while processing a protected
  /// exception.
  case exceptionProtected       = 32

  /// A ledger was required but not supplied.
  case invalidLedger            = 33

  /// The port was not a memory cache control port.
  case invalidMemoryControl     = 34

  /// An argument supplied to assert security privilege was not a host
  /// security port.
  case invalidSecurity          = 35

  /// thread_depress_abort was called on a thread which was not
  /// currently depressed.
  case notDepressed             = 36

  /// Object has been terminated and is no longer available.
  case terminated               = 37

  /// Lock set has been destroyed and is no longer available.
  case lockSetDestroyed         = 38

  /// The thread holding the lock terminated before releasing the lock.
  case lockUnstable             = 39

  /// The lock is already owned by another thread.
  case lockOwned                = 40

  /// The lock is already owned by the calling thread.
  case lockOwnedSelf            = 41

  /// Semaphore has been destroyed and is no longer available.
  case semaphoreDestroyed       = 42

  /// Return from RPC indicating the target server was terminated
  /// before it successfully replied.
  case rpcServerTerminated      = 43

  /// Terminate an orphaned activation.
  case rpcTerminateOrphan       = 44

  /// Allow an orphaned activation to continue executing.
  case rpcContinueOrphan        = 45

  /// Empty thread activation (No thread linked to it).
  case notSupported             = 46

  /// Remote node down or inaccessible.
  case nodeDown                 = 47

  /// A signalled thread was not actually waiting.
  case notWaiting               = 48

  /// Some thread-oriented operation (semaphore_wait) timed out.
  case operationTimedOut        = 49

  /// During a page fault, indicates that the page was rejected as a
  /// result of a signature check.
  case codesignError            = 50

  /// The requested property cannot be changed at this time.
  case policyStatic             = 51
}
#endif // (os(macOS) || os(iOS) || os(tvOS) || os(watchOS)) && _runtime(_ObjC)
