1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- I N T E R F A C E S . C . E X T E N S I O N S -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- 10-- -- 11-- GNAT is free software; you can redistribute it and/or modify it under -- 12-- terms of the GNU General Public License as published by the Free Soft- -- 13-- ware Foundation; either version 3, or (at your option) any later ver- -- 14-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- 15-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- 16-- or FITNESS FOR A PARTICULAR PURPOSE. -- 17-- -- 18-- As a special exception under Section 7 of GPL version 3, you are granted -- 19-- additional permissions described in the GCC Runtime Library Exception, -- 20-- version 3.1, as published by the Free Software Foundation. -- 21-- -- 22-- You should have received a copy of the GNU General Public License and -- 23-- a copy of the GCC Runtime Library Exception along with this program; -- 24-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- 25-- <http://www.gnu.org/licenses/>. -- 26-- -- 27-- GNAT was originally developed by the GNAT team at New York University. -- 28-- Extensive contributions were provided by Ada Core Technologies Inc. -- 29-- -- 30------------------------------------------------------------------------------ 31 32-- This package contains additional C-related definitions, intended for use 33-- with either manually or automatically generated bindings to C libraries. 34 35with System; 36 37package Interfaces.C.Extensions is 38 pragma Pure; 39 40 -- Definitions for C "void" and "void *" types 41 42 subtype void is System.Address; 43 subtype void_ptr is System.Address; 44 45 -- Definitions for C incomplete/unknown structs 46 47 subtype opaque_structure_def is System.Address; 48 type opaque_structure_def_ptr is access opaque_structure_def; 49 for opaque_structure_def_ptr'Storage_Size use 0; 50 51 -- Definitions for C++ incomplete/unknown classes 52 53 subtype incomplete_class_def is System.Address; 54 type incomplete_class_def_ptr is access incomplete_class_def; 55 for incomplete_class_def_ptr'Storage_Size use 0; 56 57 -- C bool 58 59 subtype bool is plain_char; 60 61 -- 64-bit integer types 62 63 subtype long_long is Long_Long_Integer; 64 type unsigned_long_long is mod 2 ** 64; 65 66 -- 128-bit integer type available on 64-bit platforms: 67 -- typedef int signed_128 __attribute__ ((mode (TI))); 68 69 type Signed_128 is record 70 low, high : unsigned_long_long; 71 end record; 72 pragma Convention (C_Pass_By_Copy, Signed_128); 73 for Signed_128'Alignment use unsigned_long_long'Alignment * 2; 74 75 -- Types for bitfields 76 77 type Unsigned_1 is mod 2 ** 1; 78 for Unsigned_1'Size use 1; 79 80 type Unsigned_2 is mod 2 ** 2; 81 for Unsigned_2'Size use 2; 82 83 type Unsigned_3 is mod 2 ** 3; 84 for Unsigned_3'Size use 3; 85 86 type Unsigned_4 is mod 2 ** 4; 87 for Unsigned_4'Size use 4; 88 89 type Unsigned_5 is mod 2 ** 5; 90 for Unsigned_5'Size use 5; 91 92 type Unsigned_6 is mod 2 ** 6; 93 for Unsigned_6'Size use 6; 94 95 type Unsigned_7 is mod 2 ** 7; 96 for Unsigned_7'Size use 7; 97 98 type Unsigned_8 is mod 2 ** 8; 99 for Unsigned_8'Size use 8; 100 101 type Unsigned_9 is mod 2 ** 9; 102 for Unsigned_9'Size use 9; 103 104 type Unsigned_10 is mod 2 ** 10; 105 for Unsigned_10'Size use 10; 106 107 type Unsigned_11 is mod 2 ** 11; 108 for Unsigned_11'Size use 11; 109 110 type Unsigned_12 is mod 2 ** 12; 111 for Unsigned_12'Size use 12; 112 113 type Unsigned_13 is mod 2 ** 13; 114 for Unsigned_13'Size use 13; 115 116 type Unsigned_14 is mod 2 ** 14; 117 for Unsigned_14'Size use 14; 118 119 type Unsigned_15 is mod 2 ** 15; 120 for Unsigned_15'Size use 15; 121 122 type Unsigned_16 is mod 2 ** 16; 123 for Unsigned_16'Size use 16; 124 125 type Unsigned_17 is mod 2 ** 17; 126 for Unsigned_17'Size use 17; 127 128 type Unsigned_18 is mod 2 ** 18; 129 for Unsigned_18'Size use 18; 130 131 type Unsigned_19 is mod 2 ** 19; 132 for Unsigned_19'Size use 19; 133 134 type Unsigned_20 is mod 2 ** 20; 135 for Unsigned_20'Size use 20; 136 137 type Unsigned_21 is mod 2 ** 21; 138 for Unsigned_21'Size use 21; 139 140 type Unsigned_22 is mod 2 ** 22; 141 for Unsigned_22'Size use 22; 142 143 type Unsigned_23 is mod 2 ** 23; 144 for Unsigned_23'Size use 23; 145 146 type Unsigned_24 is mod 2 ** 24; 147 for Unsigned_24'Size use 24; 148 149 type Unsigned_25 is mod 2 ** 25; 150 for Unsigned_25'Size use 25; 151 152 type Unsigned_26 is mod 2 ** 26; 153 for Unsigned_26'Size use 26; 154 155 type Unsigned_27 is mod 2 ** 27; 156 for Unsigned_27'Size use 27; 157 158 type Unsigned_28 is mod 2 ** 28; 159 for Unsigned_28'Size use 28; 160 161 type Unsigned_29 is mod 2 ** 29; 162 for Unsigned_29'Size use 29; 163 164 type Unsigned_30 is mod 2 ** 30; 165 for Unsigned_30'Size use 30; 166 167 type Unsigned_31 is mod 2 ** 31; 168 for Unsigned_31'Size use 31; 169 170 type Unsigned_32 is mod 2 ** 32; 171 for Unsigned_32'Size use 32; 172 173 type Signed_2 is range -2 ** 1 .. 2 ** 1 - 1; 174 for Signed_2'Size use 2; 175 176 type Signed_3 is range -2 ** 2 .. 2 ** 2 - 1; 177 for Signed_3'Size use 3; 178 179 type Signed_4 is range -2 ** 3 .. 2 ** 3 - 1; 180 for Signed_4'Size use 4; 181 182 type Signed_5 is range -2 ** 4 .. 2 ** 4 - 1; 183 for Signed_5'Size use 5; 184 185 type Signed_6 is range -2 ** 5 .. 2 ** 5 - 1; 186 for Signed_6'Size use 6; 187 188 type Signed_7 is range -2 ** 6 .. 2 ** 6 - 1; 189 for Signed_7'Size use 7; 190 191 type Signed_8 is range -2 ** 7 .. 2 ** 7 - 1; 192 for Signed_8'Size use 8; 193 194 type Signed_9 is range -2 ** 8 .. 2 ** 8 - 1; 195 for Signed_9'Size use 9; 196 197 type Signed_10 is range -2 ** 9 .. 2 ** 9 - 1; 198 for Signed_10'Size use 10; 199 200 type Signed_11 is range -2 ** 10 .. 2 ** 10 - 1; 201 for Signed_11'Size use 11; 202 203 type Signed_12 is range -2 ** 11 .. 2 ** 11 - 1; 204 for Signed_12'Size use 12; 205 206 type Signed_13 is range -2 ** 12 .. 2 ** 12 - 1; 207 for Signed_13'Size use 13; 208 209 type Signed_14 is range -2 ** 13 .. 2 ** 13 - 1; 210 for Signed_14'Size use 14; 211 212 type Signed_15 is range -2 ** 14 .. 2 ** 14 - 1; 213 for Signed_15'Size use 15; 214 215 type Signed_16 is range -2 ** 15 .. 2 ** 15 - 1; 216 for Signed_16'Size use 16; 217 218 type Signed_17 is range -2 ** 16 .. 2 ** 16 - 1; 219 for Signed_17'Size use 17; 220 221 type Signed_18 is range -2 ** 17 .. 2 ** 17 - 1; 222 for Signed_18'Size use 18; 223 224 type Signed_19 is range -2 ** 18 .. 2 ** 18 - 1; 225 for Signed_19'Size use 19; 226 227 type Signed_20 is range -2 ** 19 .. 2 ** 19 - 1; 228 for Signed_20'Size use 20; 229 230 type Signed_21 is range -2 ** 20 .. 2 ** 20 - 1; 231 for Signed_21'Size use 21; 232 233 type Signed_22 is range -2 ** 21 .. 2 ** 21 - 1; 234 for Signed_22'Size use 22; 235 236 type Signed_23 is range -2 ** 22 .. 2 ** 22 - 1; 237 for Signed_23'Size use 23; 238 239 type Signed_24 is range -2 ** 23 .. 2 ** 23 - 1; 240 for Signed_24'Size use 24; 241 242 type Signed_25 is range -2 ** 24 .. 2 ** 24 - 1; 243 for Signed_25'Size use 25; 244 245 type Signed_26 is range -2 ** 25 .. 2 ** 25 - 1; 246 for Signed_26'Size use 26; 247 248 type Signed_27 is range -2 ** 26 .. 2 ** 26 - 1; 249 for Signed_27'Size use 27; 250 251 type Signed_28 is range -2 ** 27 .. 2 ** 27 - 1; 252 for Signed_28'Size use 28; 253 254 type Signed_29 is range -2 ** 28 .. 2 ** 28 - 1; 255 for Signed_29'Size use 29; 256 257 type Signed_30 is range -2 ** 29 .. 2 ** 29 - 1; 258 for Signed_30'Size use 30; 259 260 type Signed_31 is range -2 ** 30 .. 2 ** 30 - 1; 261 for Signed_31'Size use 31; 262 263 type Signed_32 is range -2 ** 31 .. 2 ** 31 - 1; 264 for Signed_32'Size use 32; 265 266end Interfaces.C.Extensions; 267