1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
//===--- BinaryScan.h - C API for Swift Binary Scanning ---*- C -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2020 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
//
//===----------------------------------------------------------------------===//
//
// This C API is primarily intended to serve as a "static mirror" library
// for querying Swift type information from binary object files.
//
//===----------------------------------------------------------------------===//
#include "StaticMirrorMacros.h"
#include "swift-c/CommonString/CommonString.h"
#ifndef SWIFT_C_BINARY_SCAN_H
#define SWIFT_C_BINARY_SCAN_H
/// The version constants for the SwiftStaticMirror C API.
/// SWIFTSTATICMIRROR_VERSION_MINOR should increase when there are API additions.
/// SWIFTSTATICMIRROR_VERSION_MAJOR is intended for "major" source/ABI breaking changes.
#define SWIFTSTATICMIRROR_VERSION_MAJOR 0
#define SWIFTSTATICMIRROR_VERSION_MINOR 5 // Added opaque associated type's same-type requirements
SWIFTSTATICMIRROR_BEGIN_DECLS
//=== Public Binary Scanner Data Types ------------------------------------===//
typedef swiftscan_string_ref_t swift_static_mirror_string_ref_t;
typedef swiftscan_string_set_t swift_static_mirror_string_set_t;
/// Container of the configuration state for binary static mirror scanning
/// instance
typedef void *swift_static_mirror_t;
/// Opaque container to a conformance type info of a given protocol conformance.
typedef struct swift_static_mirror_conformance_info_s
*swift_static_mirror_conformance_info_t;
/// Opaque container to a field info (property type or enum case)
typedef struct swift_static_mirror_field_info_s
*swift_static_mirror_field_info_t;
/// Opaque container to a property type info
typedef struct swift_static_mirror_property_info_s
*swift_static_mirror_property_info_t;
/// Opaque container to an enum case info
typedef struct swift_static_mirror_enum_case_info_s
*swift_static_mirror_enum_case_info_t;
/// Opaque container to details of an associated type specification.
typedef struct swift_static_mirror_type_alias_s
*swift_static_mirror_type_alias_t;
/// Opaque container to an associated type (typealias) info of a given type.
typedef struct swift_static_mirror_associated_type_info_s
*swift_static_mirror_associated_type_info_t;
typedef struct {
swift_static_mirror_type_alias_t *type_aliases;
size_t count;
} swift_static_mirror_type_alias_set_t;
typedef struct {
swift_static_mirror_associated_type_info_t *associated_type_infos;
size_t count;
} swift_static_mirror_associated_type_info_set_t;
typedef struct {
swift_static_mirror_conformance_info_t *conformances;
size_t count;
} swift_static_mirror_conformances_set_t;
typedef struct {
swift_static_mirror_property_info_t *properties;
size_t count;
} swift_static_mirror_property_info_set_t;
typedef struct {
swift_static_mirror_enum_case_info_t *enum_cases;
size_t count;
} swift_static_mirror_enum_case_info_set_t;
typedef struct {
swift_static_mirror_field_info_t *field_infos;
size_t count;
} swift_static_mirror_field_info_set_t;
// swift_static_mirror_conformance_info query methods
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_conformance_info_get_type_name(
swift_static_mirror_conformance_info_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_conformance_info_get_protocol_name(
swift_static_mirror_conformance_info_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_conformance_info_get_mangled_type_name(
swift_static_mirror_conformance_info_t);
SWIFTSTATICMIRROR_PUBLIC void swift_static_mirror_conformance_info_dispose(
swift_static_mirror_conformance_info_t);
// swift_static_mirror_associated_type_info query methods
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_type_alias_get_type_alias_name(
swift_static_mirror_type_alias_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_type_alias_get_substituted_type_name(
swift_static_mirror_type_alias_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_type_alias_get_substituted_type_mangled_name(
swift_static_mirror_type_alias_t);
SWIFTSTATICMIRROR_PUBLIC swiftscan_string_set_t *
swift_static_mirror_type_alias_get_opaque_type_protocol_requirements(
swift_static_mirror_type_alias_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_type_alias_set_t *
swift_static_mirror_type_alias_get_opaque_type_same_type_requirements(
swift_static_mirror_type_alias_t);
// swift_static_mirror_associated_type_info query methods
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_associated_type_info_get_mangled_type_name(
swift_static_mirror_associated_type_info_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_type_alias_set_t *
swift_static_mirror_associated_type_info_get_type_alias_set(
swift_static_mirror_associated_type_info_t);
// swift_static_mirror_field_info query methods
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_field_info_get_mangled_type_name(
swift_static_mirror_field_info_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_property_info_set_t *
swift_static_mirror_field_info_get_property_info_set(
swift_static_mirror_field_info_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_enum_case_info_set_t *
swift_static_mirror_field_info_get_enum_case_info_set(
swift_static_mirror_field_info_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_property_info_get_label(
swift_static_mirror_property_info_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_property_info_get_type_name(
swift_static_mirror_property_info_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_property_info_get_mangled_type_name(
swift_static_mirror_property_info_t);
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_string_ref_t
swift_static_mirror_enum_case_info_get_label(
swift_static_mirror_enum_case_info_t);
/// Create an \c swift_static_mirror_t instance.
/// The returned \c swift_static_mirror_t is owned by the caller and must be
/// disposed of using \c swift_static_mirror_dispose .
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_t
swift_static_mirror_create(int, const char **, const char *);
SWIFTSTATICMIRROR_PUBLIC void
swift_static_mirror_dispose(swift_static_mirror_t);
/// Identify and collect all types conforming to any of the protocol names
/// specified as arguments
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_conformances_set_t *
swift_static_mirror_conformances_set_create(swift_static_mirror_t, int,
const char **);
SWIFTSTATICMIRROR_PUBLIC void swift_static_mirror_conformances_set_dispose(
swift_static_mirror_conformances_set_t *);
/// Identify and collect all associated types of a given input type (by mangled
/// name)
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_associated_type_info_set_t *
swift_static_mirror_associated_type_info_set_create(swift_static_mirror_t,
const char *);
/// Identify and collect associated types of all discovered types.
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_associated_type_info_set_t *
swift_static_mirror_all_associated_type_info_set_create(
swift_static_mirror_t);
SWIFTSTATICMIRROR_PUBLIC void
swift_static_mirror_associated_type_info_set_dispose(
swift_static_mirror_associated_type_info_set_t *);
/// Identify and collect all field types of a given input type (by mangled name)
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_field_info_set_t *
swift_static_mirror_field_info_set_create(swift_static_mirror_t, const char *);
/// Identify and collect field types of all discovered types.
SWIFTSTATICMIRROR_PUBLIC swift_static_mirror_field_info_set_t *
swift_static_mirror_all_field_info_set_create(swift_static_mirror_t);
SWIFTSTATICMIRROR_PUBLIC void swift_static_mirror_field_info_set_dispose(
swift_static_mirror_field_info_set_t *);
SWIFTSTATICMIRROR_END_DECLS
#endif // SWIFT_C_BINARY_SCAN_H
|