Files
swift-mirror/include/swift-c/StaticMirror/BinaryScan.h

203 lines
8.4 KiB
C

//===--- 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