js/src/ctypes/typedefs.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* -*-  Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 /**
     7  * This header contains the builtin types available for arguments and return
     8  * values, representing their C counterparts. They are listed inside macros
     9  * that the #includer is expected to #define. Format is:
    10  *
    11  * DEFINE_X_TYPE(typename, ctype, ffitype)
    12  *
    13  * where 'typename' is the name of the type constructor (accessible as
    14  * ctypes.typename), 'ctype' is the corresponding C type declaration (from
    15  * which sizeof(ctype) and templated type conversions will be derived), and
    16  * 'ffitype' is the ffi_type to use. (Special types, such as 'void' and the
    17  * pointer, array, and struct types are handled separately.)
    18  *
    19  * This header lacks a #ifndef wrapper because it is deliberately #included
    20  * multiple times in ctypes/CTypes.h.
    21  */
    23 // If we're not breaking the types out, combine them together under one
    24 // DEFINE_TYPE macro. Otherwise, turn off whichever ones we're not using.
    25 #if defined(DEFINE_TYPE)
    26 #  define DEFINE_CHAR_TYPE(x, y, z)         DEFINE_TYPE(x, y, z)
    27 #  define DEFINE_JSCHAR_TYPE(x, y, z)       DEFINE_TYPE(x, y, z)
    28 #  define DEFINE_BOOL_TYPE(x, y, z)         DEFINE_TYPE(x, y, z)
    29 #  define DEFINE_INT_TYPE(x, y, z)          DEFINE_TYPE(x, y, z)
    30 #  define DEFINE_WRAPPED_INT_TYPE(x, y, z)  DEFINE_TYPE(x, y, z)
    31 #  define DEFINE_FLOAT_TYPE(x, y, z)        DEFINE_TYPE(x, y, z)
    32 #else
    33 #  ifndef DEFINE_BOOL_TYPE
    34 #    define DEFINE_BOOL_TYPE(x, y, z)
    35 #  endif
    36 #  ifndef DEFINE_CHAR_TYPE
    37 #    define DEFINE_CHAR_TYPE(x, y, z)
    38 #  endif
    39 #  ifndef DEFINE_JSCHAR_TYPE
    40 #    define DEFINE_JSCHAR_TYPE(x, y, z)
    41 #  endif
    42 #  ifndef DEFINE_INT_TYPE
    43 #    define DEFINE_INT_TYPE(x, y, z)
    44 #  endif
    45 #  ifndef DEFINE_WRAPPED_INT_TYPE
    46 #    define DEFINE_WRAPPED_INT_TYPE(x, y, z)
    47 #  endif
    48 #  ifndef DEFINE_FLOAT_TYPE
    49 #    define DEFINE_FLOAT_TYPE(x, y, z)
    50 #  endif
    51 #endif
    53 // MSVC doesn't have ssize_t. Help it along a little.
    54 #ifdef HAVE_SSIZE_T
    55 #define CTYPES_SSIZE_T ssize_t
    56 #else
    57 #define CTYPES_SSIZE_T intptr_t
    58 #endif
    60 // Some #defines to make handling of types whose length varies by platform
    61 // easier. These could be implemented as configure tests, but the expressions
    62 // are all statically resolvable so there's no need. (See CTypes.cpp for the
    63 // appropriate PR_STATIC_ASSERTs; they can't go here since this header is
    64 // used in places where such asserts are illegal.)
    65 #define CTYPES_FFI_BOOL      (sizeof(bool)      == 1 ? ffi_type_uint8  : ffi_type_uint32)
    66 #define CTYPES_FFI_LONG      (sizeof(long)      == 4 ? ffi_type_sint32 : ffi_type_sint64)
    67 #define CTYPES_FFI_ULONG     (sizeof(long)      == 4 ? ffi_type_uint32 : ffi_type_uint64)
    68 #define CTYPES_FFI_SIZE_T    (sizeof(size_t)    == 4 ? ffi_type_uint32 : ffi_type_uint64)
    69 #define CTYPES_FFI_SSIZE_T   (sizeof(size_t)    == 4 ? ffi_type_sint32 : ffi_type_sint64)
    70 #define CTYPES_FFI_OFF_T     (sizeof(off_t)     == 4 ? ffi_type_sint32 : ffi_type_sint64)
    71 #define CTYPES_FFI_INTPTR_T  (sizeof(uintptr_t) == 4 ? ffi_type_sint32 : ffi_type_sint64)
    72 #define CTYPES_FFI_UINTPTR_T (sizeof(uintptr_t) == 4 ? ffi_type_uint32 : ffi_type_uint64)
    74 // The meat.
    75 DEFINE_BOOL_TYPE       (bool,               bool,               CTYPES_FFI_BOOL)
    76 DEFINE_INT_TYPE        (int8_t,             int8_t,             ffi_type_sint8)
    77 DEFINE_INT_TYPE        (int16_t,            int16_t,            ffi_type_sint16)
    78 DEFINE_INT_TYPE        (int32_t,            int32_t,            ffi_type_sint32)
    79 DEFINE_INT_TYPE        (uint8_t,            uint8_t,            ffi_type_uint8)
    80 DEFINE_INT_TYPE        (uint16_t,           uint16_t,           ffi_type_uint16)
    81 DEFINE_INT_TYPE        (uint32_t,           uint32_t,           ffi_type_uint32)
    82 DEFINE_INT_TYPE        (short,              short,              ffi_type_sint16)
    83 DEFINE_INT_TYPE        (unsigned_short,     unsigned short,     ffi_type_uint16)
    84 DEFINE_INT_TYPE        (int,                int,                ffi_type_sint32)
    85 DEFINE_INT_TYPE        (unsigned_int,       unsigned int,       ffi_type_uint32)
    86 DEFINE_WRAPPED_INT_TYPE(int64_t,            int64_t,            ffi_type_sint64)
    87 DEFINE_WRAPPED_INT_TYPE(uint64_t,           uint64_t,           ffi_type_uint64)
    88 DEFINE_WRAPPED_INT_TYPE(long,               long,               CTYPES_FFI_LONG)
    89 DEFINE_WRAPPED_INT_TYPE(unsigned_long,      unsigned long,      CTYPES_FFI_ULONG)
    90 DEFINE_WRAPPED_INT_TYPE(long_long,          long long,          ffi_type_sint64)
    91 DEFINE_WRAPPED_INT_TYPE(unsigned_long_long, unsigned long long, ffi_type_uint64)
    92 DEFINE_WRAPPED_INT_TYPE(size_t,             size_t,             CTYPES_FFI_SIZE_T)
    93 DEFINE_WRAPPED_INT_TYPE(ssize_t,            CTYPES_SSIZE_T,     CTYPES_FFI_SSIZE_T)
    94 DEFINE_WRAPPED_INT_TYPE(off_t,              off_t,              CTYPES_FFI_OFF_T)
    95 DEFINE_WRAPPED_INT_TYPE(intptr_t,           intptr_t,           CTYPES_FFI_INTPTR_T)
    96 DEFINE_WRAPPED_INT_TYPE(uintptr_t,          uintptr_t,          CTYPES_FFI_UINTPTR_T)
    97 DEFINE_FLOAT_TYPE      (float32_t,          float,              ffi_type_float)
    98 DEFINE_FLOAT_TYPE      (float64_t,          double,             ffi_type_double)
    99 DEFINE_FLOAT_TYPE      (float,              float,              ffi_type_float)
   100 DEFINE_FLOAT_TYPE      (double,             double,             ffi_type_double)
   101 DEFINE_CHAR_TYPE       (char,               char,               ffi_type_uint8)
   102 DEFINE_CHAR_TYPE       (signed_char,        signed char,        ffi_type_sint8)
   103 DEFINE_CHAR_TYPE       (unsigned_char,      unsigned char,      ffi_type_uint8)
   104 DEFINE_JSCHAR_TYPE     (jschar,             jschar,             ffi_type_uint16)
   106 #undef CTYPES_SSIZE_T
   107 #undef CTYPES_FFI_BOOL
   108 #undef CTYPES_FFI_LONG
   109 #undef CTYPES_FFI_ULONG
   110 #undef CTYPES_FFI_SIZE_T
   111 #undef CTYPES_FFI_SSIZE_T
   112 #undef CTYPES_FFI_INTPTR_T
   113 #undef CTYPES_FFI_UINTPTR_T
   115 #undef DEFINE_TYPE
   116 #undef DEFINE_CHAR_TYPE
   117 #undef DEFINE_JSCHAR_TYPE
   118 #undef DEFINE_BOOL_TYPE
   119 #undef DEFINE_INT_TYPE
   120 #undef DEFINE_WRAPPED_INT_TYPE
   121 #undef DEFINE_FLOAT_TYPE

mercurial