infix
A JIT-Powered FFI Library for C
Loading...
Searching...
No Matches
infix.h
Go to the documentation of this file.
1
78#pragma once
79
86#define INFIX_MAJOR 0
87#define INFIX_MINOR 1
88#define INFIX_PATCH 1
91// Define the POSIX source macro to ensure function declarations for shm_open,
92// ftruncate, etc., are visible on all POSIX-compliant systems.
93// This must be defined before any system headers are included.
94#ifndef _DEFAULT_SOURCE
95#define _DEFAULT_SOURCE
96#endif
97
98// Define the POSIX source macro to ensure function declarations for posix_memalign
99// are visible. This must be defined before any system headers are included.
100#if !defined(_POSIX_C_SOURCE)
101#define _POSIX_C_SOURCE 200809L
102#endif
103#include "common/compat_c23.h"
104#include <stdbool.h>
105#include <stddef.h>
106#include <stdint.h>
107
129// Opaque and Semi-Opaque Type Forward Declarations
130
134
137
140
143
146
149
152
155
158
175
195
201
272
278 const char * name;
280 size_t offset;
281};
282
291
// end of type_system group
293
314#ifndef infix_malloc
315#define infix_malloc malloc
316#endif
317
319#ifndef infix_calloc
320#define infix_calloc calloc
321#endif
322
324#ifndef infix_realloc
325#define infix_realloc realloc
326#endif
327
329#ifndef infix_free
330#define infix_free free
331#endif
332
334#ifndef infix_memcpy
335#define infix_memcpy memcpy
336#endif
337
339#ifndef infix_memset
340#define infix_memset memset
341#endif
342
// end of memory_management group
344
361typedef void (*infix_unbound_cif_func)(void *, void *, void **);
362
371typedef void (*infix_cif_func)(void *, void **);
372
384typedef void (*infix_closure_handler_fn)(infix_context_t *, void *, void **);
385
398
418
428
// end of registry_api group
451
461
475
484
492
500
508
520
531
545
// end of registry_introspection_api group
547
597
642
658
700
762
781 const char *, infix_arena_t **, infix_type **, infix_function_argument **, size_t *, size_t *, infix_registry_t *);
796
// end of high_level_api group
798
811
817
825
839c23_nodiscard infix_status infix_read_global(infix_library_t *, const char *, const char *, void *, infix_registry_t *);
840
851infix_write_global(infix_library_t *, const char *, const char *, void *, infix_registry_t *);
852
// end of exports_api group
854
876infix_forward_create_manual(infix_forward_t **, infix_type *, infix_type **, size_t, size_t, void *);
912 infix_reverse_t **, infix_type *, infix_type **, size_t, size_t, infix_closure_handler_fn, void *);
913
919
925
937
943
952
958
968
981
991
1001
1011
1021 infix_type **,
1022 const char *,
1024
1033
1043
1052
// end of manual_api group (continued)
1054
// end of type_system group
1056
1071
1077
1085c23_nodiscard void * infix_arena_alloc(infix_arena_t *, size_t, size_t);
1086
1095c23_nodiscard void * infix_arena_calloc(infix_arena_t *, size_t, size_t, size_t);
1096
// end of memory_management group (continued)
1098
1117
1127
1141 size_t,
1142 const char *,
1143 const infix_type *,
1145 size_t,
1146 size_t,
1148
1156
1164
1172
1179
1189
1196
1203
1211
1218
1225
1232
1240
1247c23_nodiscard const char * infix_type_get_name(const infix_type *);
1248
1255
1262
1269
1276
1284
1291c23_nodiscard const char * infix_type_get_arg_name(const infix_type *, size_t);
1292
1300
// end addtogroup type_system // end of introspection_api group
1303
1320
1355
1368
1374
// end of error_api group
infix_arena_t * arena
Definition 005_layouts.c:68
Provides forward compatibility macros for C23 features.
#define c23_nodiscard
A compatibility macro for the C23 [[nodiscard]] attribute.
Definition compat_c23.h:113
infix_error_code_t
Enumerates specific error codes.
Definition infix.h:1324
infix_error_details_t infix_get_last_error(void)
Retrieves detailed information about the last error that occurred on the current thread.
Definition error.c:270
infix_error_category_t
Enumerates the high-level categories of errors that can occur.
Definition infix.h:1313
@ INFIX_CODE_PROTECTION_FAILURE
Definition infix.h:1332
@ INFIX_CODE_SUCCESS
Definition infix.h:1326
@ INFIX_CODE_LAYOUT_FAILED
Definition infix.h:1348
@ INFIX_CODE_LIBRARY_NOT_FOUND
Definition infix.h:1351
@ INFIX_CODE_INVALID_MEMBER_TYPE
Definition infix.h:1347
@ INFIX_CODE_UNRESOLVED_NAMED_TYPE
Definition infix.h:1346
@ INFIX_CODE_INTEGER_OVERFLOW
Definition infix.h:1339
@ INFIX_CODE_TYPE_TOO_LARGE
Definition infix.h:1345
@ INFIX_CODE_UNEXPECTED_TOKEN
Definition infix.h:1335
@ INFIX_CODE_MISSING_RETURN_TYPE
Definition infix.h:1338
@ INFIX_CODE_EMPTY_MEMBER_NAME
Definition infix.h:1341
@ INFIX_CODE_EXECUTABLE_MEMORY_FAILURE
Definition infix.h:1331
@ INFIX_CODE_UNKNOWN
Definition infix.h:1327
@ INFIX_CODE_SYMBOL_NOT_FOUND
Definition infix.h:1352
@ INFIX_CODE_RECURSION_DEPTH_EXCEEDED
Definition infix.h:1340
@ INFIX_CODE_UNSUPPORTED_ABI
Definition infix.h:1344
@ INFIX_CODE_UNTERMINATED_AGGREGATE
Definition infix.h:1336
@ INFIX_CODE_LIBRARY_LOAD_FAILED
Definition infix.h:1353
@ INFIX_CODE_INVALID_KEYWORD
Definition infix.h:1337
@ INFIX_CODE_OUT_OF_MEMORY
Definition infix.h:1330
@ INFIX_CATEGORY_ABI
Definition infix.h:1318
@ INFIX_CATEGORY_ALLOCATION
Definition infix.h:1316
@ INFIX_CATEGORY_GENERAL
Definition infix.h:1315
@ INFIX_CATEGORY_PARSER
Definition infix.h:1317
@ INFIX_CATEGORY_NONE
Definition infix.h:1314
c23_nodiscard infix_status infix_write_global(infix_library_t *, const char *, const char *, void *, infix_registry_t *)
Writes data from a buffer into a global variable in a library.
Definition loader.c:196
void infix_library_close(infix_library_t *)
Closes a dynamic library handle.
Definition loader.c:91
c23_nodiscard void * infix_library_get_symbol(infix_library_t *, const char *)
Retrieves the address of a symbol (function or variable) from a loaded library.
Definition loader.c:121
c23_nodiscard infix_library_t * infix_library_open(const char *)
Opens a dynamic library and returns a handle to it.
Definition loader.c:50
c23_nodiscard infix_status infix_read_global(infix_library_t *, const char *, const char *, void *, infix_registry_t *)
Reads the value of a global variable from a library into a buffer.
Definition loader.c:149
c23_nodiscard infix_status infix_reverse_create_callback(infix_reverse_t **, const char *, void *, infix_registry_t *)
Creates a type-safe reverse trampoline (callback).
Definition trampoline.c:932
struct infix_type_t::@0::@1 pointer_info
Metadata for INFIX_TYPE_POINTER.
size_t position
Definition infix.h:1363
union infix_type_t::@0 meta
A union containing metadata specific to the type's category.
struct infix_type_t::@0::@7 vector_info
Metadata for INFIX_TYPE_VECTOR.
infix_error_category_t category
Definition infix.h:1361
infix_type * type
Definition infix.h:289
struct infix_type_t::@0::@4 func_ptr_info
Metadata for INFIX_TYPE_REVERSE_TRAMPOLINE.
void(* infix_cif_func)(void *, void **)
A function pointer type for a bound forward trampoline.
Definition infix.h:371
c23_nodiscard infix_status infix_type_from_signature(infix_type **, infix_arena_t **, const char *, infix_registry_t *)
Parses a signature string representing a single data type.
Definition signature.c:1026
size_t num_elements
Definition infix.h:238
infix_arena_t * arena
Definition infix.h:217
size_t size
Definition infix.h:214
void(* infix_unbound_cif_func)(void *, void *, void **)
A function pointer type for an unbound forward trampoline.
Definition infix.h:361
size_t alignment
Definition infix.h:215
c23_nodiscard infix_status infix_forward_create_unbound(infix_forward_t **, const char *, infix_registry_t *)
Creates an "unbound" forward trampoline from a signature string.
Definition trampoline.c:926
c23_nodiscard infix_status infix_forward_create(infix_forward_t **, const char *, void *, infix_registry_t *)
Creates a "bound" forward trampoline from a signature string.
Definition trampoline.c:919
infix_struct_member * members
Definition infix.h:231
c23_nodiscard infix_status infix_forward_create_in_arena(infix_forward_t **, infix_arena_t *, const char *, void *, infix_registry_t *)
Creates a "bound" forward trampoline within a user-provided arena.
Definition trampoline.c:832
struct infix_type_t::@0::@6 complex_info
Metadata for INFIX_TYPE_COMPLEX.
c23_nodiscard infix_status infix_reverse_create_closure(infix_reverse_t **, const char *, infix_closure_handler_fn, void *, infix_registry_t *)
Creates a generic reverse trampoline (closure) for stateful callbacks.
Definition trampoline.c:962
const char * name
Definition infix.h:212
infix_function_argument * args
Definition infix.h:244
size_t num_elements
Definition infix.h:262
struct infix_type_t * element_type
Definition infix.h:261
infix_aggregate_category_t aggregate_category
Definition infix.h:268
infix_status
Enumerates the possible status codes returned by infix API functions.
Definition infix.h:389
const char * name
Definition infix.h:288
const char * name
Definition infix.h:267
const char * name
Definition infix.h:278
infix_type_category category
Definition infix.h:213
struct infix_type_t::@0::@2 aggregate_info
Metadata for INFIX_TYPE_STRUCT and INFIX_TYPE_UNION.
struct infix_type_t::@0::@3 array_info
Metadata for INFIX_TYPE_ARRAY.
struct infix_type_t * pointee_type
Definition infix.h:226
infix_type * type
Definition infix.h:279
struct infix_type_t * element_type
Definition infix.h:237
struct infix_type_t * return_type
Definition infix.h:243
c23_nodiscard infix_status infix_signature_parse(const char *, infix_arena_t **, infix_type **, infix_function_argument **, size_t *, size_t *, infix_registry_t *)
Parses a full function signature string into its constituent parts.
Definition signature.c:1091
size_t offset
Definition infix.h:280
struct infix_type_t::@0::@5 enum_info
Metadata for INFIX_TYPE_ENUM.
struct infix_type_t * base_type
Definition infix.h:256
long system_error_code
Definition infix.h:1364
infix_error_code_t code
Definition infix.h:1362
size_t num_members
Definition infix.h:232
struct infix_type_t * underlying_type
Definition infix.h:251
struct infix_type_t::@0::@8 named_reference
Metadata for INFIX_TYPE_NAMED_REFERENCE.
size_t num_fixed_args
Definition infix.h:246
void(* infix_closure_handler_fn)(infix_context_t *, void *, void **)
A function pointer type for a generic closure handler.
Definition infix.h:384
infix_primitive_type_id primitive_id
Metadata for INFIX_TYPE_PRIMITIVE.
Definition infix.h:222
size_t num_args
Definition infix.h:245
bool is_arena_allocated
Definition infix.h:216
@ INFIX_ERROR_ALLOCATION_FAILED
Definition infix.h:391
@ INFIX_ERROR_LAYOUT_FAILED
Definition infix.h:394
@ INFIX_ERROR_
Definition infix.h:396
@ INFIX_ERROR_PROTECTION_FAILED
Definition infix.h:395
@ INFIX_ERROR_UNSUPPORTED_ABI
Definition infix.h:393
@ INFIX_SUCCESS
Definition infix.h:390
@ INFIX_ERROR_INVALID_ARGUMENT
Definition infix.h:392
c23_nodiscard infix_cif_func infix_forward_get_code(infix_forward_t *)
Gets the callable function pointer from a bound forward trampoline.
Definition trampoline.c:288
c23_nodiscard void * infix_reverse_get_code(const infix_reverse_t *)
Gets the native, callable C function pointer from a reverse trampoline.
Definition trampoline.c:813
c23_nodiscard infix_status infix_type_print(char *, size_t, const infix_type *, infix_print_dialect_t)
Serializes an infix_type object graph back into a signature string.
Definition signature.c:1554
c23_nodiscard infix_unbound_cif_func infix_forward_get_unbound_code(infix_forward_t *)
Gets the callable function pointer from an unbound forward trampoline.
Definition trampoline.c:282
c23_nodiscard size_t infix_forward_get_num_args(const infix_forward_t *)
Gets the total number of arguments for a forward trampoline.
Definition types.c:1186
c23_nodiscard void * infix_reverse_get_user_data(const infix_reverse_t *)
Gets the user-provided data pointer from a closure context.
Definition trampoline.c:824
c23_nodiscard infix_status infix_function_print(char *, size_t, const char *, const infix_type *, const infix_function_argument *, size_t, size_t, infix_print_dialect_t)
Serializes a function signature's components into a string.
Definition signature.c:1603
infix_print_dialect_t
Specifies the output format for printing types and function signatures.
Definition infix.h:1112
@ INFIX_DIALECT_SIGNATURE
Definition infix.h:1113
@ INFIX_DIALECT_ITANIUM_MANGLING
Definition infix.h:1114
@ INFIX_DIALECT_MSVC_MANGLING
Definition infix.h:1115
void infix_reverse_destroy(infix_reverse_t *)
Destroys a reverse trampoline and frees all associated memory.
Definition trampoline.c:794
c23_nodiscard infix_status infix_forward_create_manual(infix_forward_t **, infix_type *, infix_type **, size_t, size_t, void *)
Creates a bound forward trampoline from infix_type objects.
Definition trampoline.c:479
c23_nodiscard infix_status infix_reverse_create_callback_manual(infix_reverse_t **, infix_type *, infix_type **, size_t, size_t, void *)
Creates a type-safe reverse trampoline (callback) from infix_type objects.
Definition trampoline.c:753
c23_nodiscard infix_status infix_reverse_create_closure_manual(infix_reverse_t **, infix_type *, infix_type **, size_t, size_t, infix_closure_handler_fn, void *)
Creates a generic reverse trampoline (closure) from infix_type objects.
Definition trampoline.c:775
c23_nodiscard infix_status infix_forward_create_unbound_manual(infix_forward_t **, infix_type *, infix_type **, size_t, size_t)
Creates an unbound forward trampoline from infix_type objects.
Definition trampoline.c:506
void infix_forward_destroy(infix_forward_t *)
Destroys a forward trampoline and frees all associated memory.
Definition trampoline.c:523
void infix_arena_destroy(infix_arena_t *)
Destroys an arena and frees all memory allocated from it.
Definition arena.c:90
c23_nodiscard void * infix_arena_calloc(infix_arena_t *, size_t, size_t, size_t)
Allocates and zero-initializes a block of memory from an arena.
Definition arena.c:198
c23_nodiscard void * infix_arena_alloc(infix_arena_t *, size_t, size_t)
Allocates a block of memory from an arena.
Definition arena.c:126
c23_nodiscard infix_arena_t * infix_arena_create(size_t)
Creates a new memory arena.
Definition arena.c:55
void infix_registry_destroy(infix_registry_t *)
Destroys a type registry and frees all associated memory.
Definition type_registry.c:230
c23_nodiscard infix_status infix_register_types(infix_registry_t *, const char *)
Parses a string of type definitions and adds them to a registry.
Definition type_registry.c:460
c23_nodiscard infix_registry_t * infix_registry_create(void)
Creates a new, empty named type registry.
Definition type_registry.c:156
c23_nodiscard const infix_type * infix_registry_lookup_type(const infix_registry_t *, const char *)
Retrieves the canonical infix_type object for a given name from the registry.
Definition type_registry.c:802
c23_nodiscard infix_registry_t * infix_registry_create_in_arena(infix_arena_t *arena)
Creates a new named type registry that allocates from a user-provided arena.
Definition type_registry.c:196
c23_nodiscard const infix_type * infix_registry_iterator_get_type(const infix_registry_iterator_t *)
Gets the infix_type object of the type at the iterator's current position.
Definition type_registry.c:769
c23_nodiscard infix_status infix_registry_print(char *, size_t, const infix_registry_t *)
Serializes all defined types within a registry into a single, human-readable string.
Definition signature.c:1673
c23_nodiscard infix_registry_iterator_t infix_registry_iterator_begin(const infix_registry_t *)
Initializes an iterator for traversing the types in a registry.
Definition type_registry.c:695
c23_nodiscard bool infix_registry_iterator_next(infix_registry_iterator_t *)
Advances the iterator to the next defined type in the registry.
Definition type_registry.c:708
c23_nodiscard const char * infix_registry_iterator_get_name(const infix_registry_iterator_t *)
Gets the name of the type at the iterator's current position.
Definition type_registry.c:755
c23_nodiscard bool infix_registry_is_defined(const infix_registry_t *, const char *)
Checks if a type with the given name is fully defined in the registry.
Definition type_registry.c:785
c23_nodiscard infix_status infix_type_create_packed_struct(infix_arena_t *, infix_type **, size_t, size_t, infix_struct_member *, size_t)
Creates a new packed struct type with a user-specified layout.
Definition types.c:572
c23_nodiscard size_t infix_type_get_size(const infix_type *)
Gets the size of a type in bytes.
Definition types.c:1120
c23_nodiscard const infix_type * infix_type_get_arg_type(const infix_type *, size_t)
Gets the type of a specific argument from a function type.
Definition types.c:1174
c23_nodiscard infix_type * infix_type_create_void(void)
Creates a static descriptor for the void type.
Definition types.c:193
c23_nodiscard size_t infix_type_get_alignment(const infix_type *)
Gets the alignment requirement of a type in bytes.
Definition types.c:1127
c23_nodiscard size_t infix_forward_get_num_fixed_args(const infix_forward_t *)
Gets the number of fixed (non-variadic) arguments for a forward trampoline.
Definition types.c:1195
c23_nodiscard const char * infix_type_get_name(const infix_type *)
Gets the semantic alias of a type, if one exists.
Definition types.c:1100
c23_nodiscard const infix_type * infix_forward_get_return_type(const infix_forward_t *)
Gets the return type for a forward trampoline.
Definition types.c:1204
infix_primitive_type_id
Enumerates the supported primitive C types.
Definition infix.h:179
c23_nodiscard const infix_type * infix_forward_get_arg_type(const infix_forward_t *, size_t)
Gets the type of a specific argument for a forward trampoline.
Definition types.c:1214
c23_nodiscard infix_status infix_type_create_union(infix_arena_t *, infix_type **, infix_struct_member *, size_t)
Creates a new union type from an array of members.
Definition types.c:442
c23_nodiscard infix_status infix_type_create_enum(infix_arena_t *, infix_type **, infix_type *)
Creates a new enum type with a specified underlying integer type.
Definition types.c:337
c23_nodiscard infix_status infix_type_create_vector(infix_arena_t *, infix_type **, infix_type *, size_t)
Creates a new SIMD vector type.
Definition types.c:403
c23_nodiscard const infix_type * infix_reverse_get_return_type(const infix_reverse_t *)
Gets the return type for a reverse trampoline.
Definition types.c:1243
c23_nodiscard infix_type * infix_type_create_pointer(void)
Creates a static descriptor for a generic pointer (void*).
Definition types.c:187
c23_nodiscard infix_status infix_type_create_complex(infix_arena_t *, infix_type **, infix_type *)
Creates a new _Complex number type.
Definition types.c:372
c23_nodiscard size_t infix_reverse_get_num_args(const infix_reverse_t *)
Gets the total number of arguments for a reverse trampoline.
Definition types.c:1225
c23_nodiscard size_t infix_type_get_member_count(const infix_type *)
Gets the number of members in a struct or union type.
Definition types.c:1135
c23_nodiscard const char * infix_type_get_arg_name(const infix_type *, size_t)
Gets the name of a specific argument from a function type.
Definition types.c:1161
infix_type_category
Enumerates the fundamental categories of types that infix can represent.
Definition infix.h:162
c23_nodiscard infix_type_category infix_type_get_category(const infix_type *)
Gets the fundamental category of a type.
Definition types.c:1111
c23_nodiscard infix_status infix_type_create_array(infix_arena_t *, infix_type **, infix_type *, size_t)
Creates a new fixed-size array type.
Definition types.c:299
c23_nodiscard infix_status infix_type_create_pointer_to(infix_arena_t *, infix_type **, infix_type *)
Creates a new pointer type that points to a specific type.
Definition types.c:268
infix_aggregate_category_t
Specifies whether a named type reference refers to a struct or a union.
Definition infix.h:200
c23_nodiscard infix_status infix_type_create_struct(infix_arena_t *, infix_type **, infix_struct_member *, size_t)
Creates a new struct type from an array of members, calculating layout automatically.
Definition types.c:490
infix_reverse_t infix_context_t
An alias for infix_reverse_t, used to clarify its role as a context object in closure handlers.
Definition infix.h:148
c23_nodiscard infix_status infix_type_create_named_reference(infix_arena_t *, infix_type **, const char *, infix_aggregate_category_t)
Creates a placeholder for a named type to be resolved by a registry.
Definition types.c:620
c23_nodiscard const infix_type * infix_reverse_get_arg_type(const infix_reverse_t *, size_t)
Gets the type of a specific argument for a reverse trampoline.
Definition types.c:1253
c23_nodiscard size_t infix_reverse_get_num_fixed_args(const infix_reverse_t *)
Gets the number of fixed (non-variadic) arguments for a reverse trampoline.
Definition types.c:1234
c23_nodiscard infix_type * infix_type_create_primitive(infix_primitive_type_id)
Creates a static descriptor for a primitive C type.
Definition types.c:138
infix_struct_member infix_type_create_member(const char *, infix_type *, size_t)
A factory function to create an infix_struct_member.
Definition types.c:202
c23_nodiscard const infix_struct_member * infix_type_get_member(const infix_type *, size_t)
Gets a specific member from a struct or union type.
Definition types.c:1147
@ INFIX_PRIMITIVE_UINT16
Definition infix.h:183
@ INFIX_PRIMITIVE_UINT32
Definition infix.h:185
@ INFIX_PRIMITIVE_LONG_DOUBLE
Definition infix.h:193
@ INFIX_PRIMITIVE_FLOAT
Definition infix.h:191
@ INFIX_PRIMITIVE_DOUBLE
Definition infix.h:192
@ INFIX_PRIMITIVE_SINT16
Definition infix.h:184
@ INFIX_PRIMITIVE_SINT64
Definition infix.h:188
@ INFIX_PRIMITIVE_SINT32
Definition infix.h:186
@ INFIX_PRIMITIVE_UINT8
Definition infix.h:181
@ INFIX_PRIMITIVE_UINT128
Definition infix.h:189
@ INFIX_PRIMITIVE_BOOL
Definition infix.h:180
@ INFIX_PRIMITIVE_UINT64
Definition infix.h:187
@ INFIX_PRIMITIVE_SINT128
Definition infix.h:190
@ INFIX_PRIMITIVE_SINT8
Definition infix.h:182
@ INFIX_TYPE_UNION
Definition infix.h:166
@ INFIX_TYPE_PRIMITIVE
Definition infix.h:163
@ INFIX_TYPE_COMPLEX
Definition infix.h:170
@ INFIX_TYPE_ARRAY
Definition infix.h:167
@ INFIX_TYPE_VECTOR
Definition infix.h:171
@ INFIX_TYPE_VOID
Definition infix.h:173
@ INFIX_TYPE_POINTER
Definition infix.h:164
@ INFIX_TYPE_NAMED_REFERENCE
Definition infix.h:172
@ INFIX_TYPE_REVERSE_TRAMPOLINE
Definition infix.h:168
@ INFIX_TYPE_ENUM
Definition infix.h:169
@ INFIX_TYPE_STRUCT
Definition infix.h:165
@ INFIX_AGGREGATE_STRUCT
Definition infix.h:200
@ INFIX_AGGREGATE_UNION
Definition infix.h:200
Internal definition of a memory arena.
Definition infix_internals.h:146
Provides detailed, thread-local information about the last error that occurred.
Definition infix.h:1360
Internal definition of a forward trampoline handle.
Definition infix_internals.h:94
Describes a single argument to a C function.
Definition infix.h:287
Internal definition of a dynamic library handle.
Definition infix_internals.h:218
Internal definition of a registry iterator.
Definition infix_internals.h:190
Internal definition of a named type registry.
Definition infix_internals.h:175
Internal definition of a reverse trampoline (callback/closure) handle.
Definition infix_internals.h:121
Describes a single member of a C struct or union.
Definition infix.h:277
A semi-opaque structure that describes a C type.
Definition infix.h:211