Files
swift-mirror/stdlib/public/SwiftShims/Reflection.h
Parker Schuh 4e39e59a8a Add a field reflection function that constructs keypaths. (#34815)
While the existing _forEachField in ReflectionMirror.swift
already gives the offsets and types for each field, this isn't
enough information to construct a keypath for that field in
order to modify it.

For reference, this should be sufficent to implement the features
described here: (https://forums.swift.org/t/storedpropertyiterable/19218/62)
purely at runtime without any derived conformances for many types.

Note: Since there isn't enough reflection information for
`.mutatingGetSet` fields, this means that we're not able to support
reflecting certain types of fields (functions, nonfinal class fields,
etc). Whether this is an error or not is controlled by the `.ignoreUnknown`
option.
2020-11-30 09:17:23 -08:00

37 lines
985 B
C

//===--- Reflection.h - Types for access to reflection metadata. ----------===//
//
// 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
//
//===----------------------------------------------------------------------===//
#ifndef SWIFT_STDLIB_SHIMS_REFLECTION_H
#define SWIFT_STDLIB_SHIMS_REFLECTION_H
#include "SwiftStdbool.h"
#include "SwiftStdint.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void (*NameFreeFunc)(const char*);
typedef struct _FieldReflectionMetadata {
const char* name;
NameFreeFunc freeFunc;
__swift_bool isStrong;
__swift_bool isVar;
} _FieldReflectionMetadata;
#ifdef __cplusplus
} // extern "C"
#endif
#endif // SWIFT_STDLIB_SHIMS_REFLECTION_H