Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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.
- Loading branch information
Showing
8 changed files
with
282 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
//===--- 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.