mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Merge branch 'main' into lazy-immediate
This commit is contained in:
@@ -941,6 +941,10 @@ public:
|
||||
/// descriptors.
|
||||
AvailabilityContext getSignedDescriptorAvailability();
|
||||
|
||||
/// Get the runtime availability of the swift_initRawStructMetadata entrypoint
|
||||
/// that fixes up the value witness table of @_rawLayout dependent types.
|
||||
AvailabilityContext getInitRawStructMetadataAvailability();
|
||||
|
||||
/// Get the runtime availability of features introduced in the Swift 5.2
|
||||
/// compiler for the target platform.
|
||||
AvailabilityContext getSwift52Availability();
|
||||
|
||||
@@ -161,7 +161,6 @@ public:
|
||||
BackDeploymentThunk,
|
||||
BackDeploymentFallback,
|
||||
HasSymbolQuery,
|
||||
RuntimeDiscoverableAttributeRecord,
|
||||
};
|
||||
|
||||
/// lldb overrides the defaulted argument to 'true'.
|
||||
@@ -363,10 +362,6 @@ public:
|
||||
|
||||
std::string mangleHasSymbolQuery(const ValueDecl *decl);
|
||||
|
||||
std::string
|
||||
mangleRuntimeAttributeGeneratorEntity(const ValueDecl *decl, CustomAttr *attr,
|
||||
SymbolKind SKind = SymbolKind::Default);
|
||||
|
||||
std::string mangleMacroExpansion(const FreestandingMacroExpansion *expansion);
|
||||
std::string mangleAttachedMacroExpansion(
|
||||
const Decl *decl, CustomAttr *attr, MacroRole role);
|
||||
@@ -603,9 +598,6 @@ protected:
|
||||
|
||||
void appendConstrainedExistential(Type base, GenericSignature sig,
|
||||
const ValueDecl *forDecl);
|
||||
|
||||
void appendRuntimeAttributeGeneratorEntity(const ValueDecl *decl,
|
||||
CustomAttr *attr);
|
||||
};
|
||||
|
||||
} // end namespace Mangle
|
||||
|
||||
@@ -416,9 +416,6 @@ DECL_ATTR(_documentation, Documentation,
|
||||
SIMPLE_DECL_ATTR(_noMetadata, NoMetadata,
|
||||
OnGenericTypeParam | UserInaccessible | NotSerialized | ABIStableToAdd | ABIBreakingToRemove | APIStableToAdd | APIStableToRemove,
|
||||
138)
|
||||
SIMPLE_DECL_ATTR(runtimeMetadata, RuntimeMetadata,
|
||||
OnStruct | OnClass | OnEnum | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove,
|
||||
139)
|
||||
SIMPLE_DECL_ATTR(_used, Used,
|
||||
OnAbstractFunction | OnVar | UserInaccessible | ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove,
|
||||
143)
|
||||
|
||||
@@ -233,20 +233,18 @@ struct ConstValueTypePropertyInfo {
|
||||
swift::VarDecl *VarDecl;
|
||||
std::shared_ptr<CompileTimeValue> Value;
|
||||
llvm::Optional<AttrValueVector> PropertyWrappers;
|
||||
llvm::Optional<AttrValueVector> RuntimeMetadataAttributes;
|
||||
|
||||
ConstValueTypePropertyInfo(
|
||||
swift::VarDecl *VarDecl, std::shared_ptr<CompileTimeValue> Value,
|
||||
llvm::Optional<AttrValueVector> PropertyWrappers,
|
||||
llvm::Optional<AttrValueVector> RuntimeMetadataAttributes)
|
||||
: VarDecl(VarDecl), Value(Value), PropertyWrappers(PropertyWrappers),
|
||||
RuntimeMetadataAttributes(RuntimeMetadataAttributes) {}
|
||||
llvm::Optional<AttrValueVector> PropertyWrappers)
|
||||
: VarDecl(VarDecl), Value(Value), PropertyWrappers(PropertyWrappers)
|
||||
{}
|
||||
|
||||
ConstValueTypePropertyInfo(swift::VarDecl *VarDecl,
|
||||
std::shared_ptr<CompileTimeValue> Value)
|
||||
: VarDecl(VarDecl), Value(Value),
|
||||
PropertyWrappers(llvm::Optional<AttrValueVector>()),
|
||||
RuntimeMetadataAttributes(llvm::Optional<AttrValueVector>()) {}
|
||||
PropertyWrappers(llvm::Optional<AttrValueVector>())
|
||||
{}
|
||||
};
|
||||
|
||||
struct ConstValueTypeInfo {
|
||||
|
||||
@@ -650,13 +650,16 @@ protected:
|
||||
/// address diversified ptrauth qualified field.
|
||||
IsNonTrivialPtrAuth : 1);
|
||||
|
||||
SWIFT_INLINE_BITFIELD(EnumDecl, NominalTypeDecl, 2+1,
|
||||
SWIFT_INLINE_BITFIELD(EnumDecl, NominalTypeDecl, 2+1+1,
|
||||
/// True if the enum has cases and at least one case has associated values.
|
||||
HasAssociatedValues : 2,
|
||||
/// True if the enum has at least one case that has some availability
|
||||
/// attribute. A single bit because it's lazily computed along with the
|
||||
/// HasAssociatedValues bit.
|
||||
HasAnyUnavailableValues : 1
|
||||
HasAnyUnavailableValues : 1,
|
||||
/// True if \c isAvailableDuringLowering() is false for any cases. Lazily
|
||||
/// computed along with HasAssociatedValues.
|
||||
HasAnyUnavailableDuringLoweringValues : 1
|
||||
);
|
||||
|
||||
SWIFT_INLINE_BITFIELD(ModuleDecl, TypeDecl, 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1,
|
||||
@@ -895,10 +898,6 @@ public:
|
||||
return Attrs;
|
||||
}
|
||||
|
||||
/// Retrieve runtime discoverable attributes (if any) associated
|
||||
/// with this declaration.
|
||||
ArrayRef<CustomAttr *> getRuntimeDiscoverableAttrs() const;
|
||||
|
||||
/// Returns the attributes that were directly attached to this declaration
|
||||
/// as written in source, ie. does not include attributes generated by macro
|
||||
/// expansions.
|
||||
@@ -1237,7 +1236,10 @@ public:
|
||||
/// Returns true if this declaration should be considered available during
|
||||
/// SIL/IR lowering. A declaration would not be available during lowering if,
|
||||
/// for example, it is annotated as unavailable with `@available` and
|
||||
/// optimization settings require that it be omitted.
|
||||
/// optimization settings require that it be omitted. Canonical SIL must not
|
||||
/// contain any references to declarations that are unavailable during
|
||||
/// lowering because the resulting IR could reference non-existent symbols
|
||||
/// and fail to link.
|
||||
bool isAvailableDuringLowering() const;
|
||||
|
||||
/// Returns true if ABI compatibility stubs must be emitted for the given
|
||||
@@ -2980,19 +2982,6 @@ public:
|
||||
/// 'func foo(Int) -> () -> Self?'.
|
||||
GenericParameterReferenceInfo findExistentialSelfReferences(
|
||||
Type baseTy, bool treatNonResultCovariantSelfAsInvariant) const;
|
||||
|
||||
/// Retrieve a nominal type declaration backing given runtime discoverable
|
||||
/// attribute.
|
||||
///
|
||||
/// FIXME: This should be a more general facility but its unclear where
|
||||
/// to place it for maximum impact.
|
||||
NominalTypeDecl *getRuntimeDiscoverableAttrTypeDecl(CustomAttr *attr) const;
|
||||
|
||||
/// Given a runtime discoverable attribute, return a generator
|
||||
/// which could be used to instantiate it for this declaration
|
||||
/// together with its result type.
|
||||
std::pair<BraceStmt *, Type>
|
||||
getRuntimeDiscoverableAttributeGenerator(CustomAttr *) const;
|
||||
};
|
||||
|
||||
/// This is a common base class for declarations which declare a type.
|
||||
@@ -4204,6 +4193,11 @@ public:
|
||||
/// A range for iterating the elements of an enum.
|
||||
using ElementRange = DowncastFilterRange<EnumElementDecl, DeclRange>;
|
||||
|
||||
/// A range for iterating the elements of an enum that are available during
|
||||
/// lowering.
|
||||
using ElementRangeForLowering = OptionalTransformRange<
|
||||
ElementRange, AvailableDuringLoweringDeclFilter<EnumElementDecl>>;
|
||||
|
||||
/// A range for iterating the cases of an enum.
|
||||
using CaseRange = DowncastFilterRange<EnumCaseDecl, DeclRange>;
|
||||
|
||||
@@ -4217,6 +4211,13 @@ public:
|
||||
return std::distance(eltRange.begin(), eltRange.end());
|
||||
}
|
||||
|
||||
/// Returns a range that iterates over all the elements of an enum for which
|
||||
/// \c isAvailableDuringLowering() is true.
|
||||
ElementRangeForLowering getAllElementsForLowering() const {
|
||||
return ElementRangeForLowering(
|
||||
getAllElements(), AvailableDuringLoweringDeclFilter<EnumElementDecl>());
|
||||
}
|
||||
|
||||
/// If this enum has a unique element, return it. A unique element can
|
||||
/// either hold a value or not, and the existence of one unique element does
|
||||
/// not imply the existence or non-existence of the opposite unique element.
|
||||
@@ -4279,6 +4280,11 @@ public:
|
||||
/// Note that this is false for enums with absolutely no cases.
|
||||
bool hasPotentiallyUnavailableCaseValue() const;
|
||||
|
||||
/// True if \c isAvailableDuringLowering() is false for any cases.
|
||||
///
|
||||
/// Note that this is false for enums with absolutely no cases.
|
||||
bool hasCasesUnavailableDuringLowering() const;
|
||||
|
||||
/// True if the enum has cases.
|
||||
bool hasCases() const {
|
||||
return !getAllElements().empty();
|
||||
@@ -5973,9 +5979,6 @@ public:
|
||||
/// that has an external effect on the function.
|
||||
bool hasExternalPropertyWrapper() const;
|
||||
|
||||
/// Whether this property has any attached runtime metadata attributes.
|
||||
bool hasRuntimeMetadataAttributes() const;
|
||||
|
||||
/// Whether all of the attached property wrappers have an init(wrappedValue:)
|
||||
/// initializer.
|
||||
bool allAttachedPropertyWrappersHaveWrappedValueInit() const;
|
||||
|
||||
@@ -1104,10 +1104,6 @@ ERROR(expected_expr_throw,PointsToFirstBadToken,
|
||||
// Discard Statement
|
||||
ERROR(expected_expr_discard,PointsToFirstBadToken,
|
||||
"expected expression in 'discard' statement", ())
|
||||
WARNING(forget_is_deprecated,PointsToFirstBadToken,
|
||||
"'_forget' keyword is deprecated and will be removed soon; "
|
||||
"use 'discard' instead",
|
||||
())
|
||||
|
||||
// Await/Async
|
||||
ERROR(expected_await_not_async,none,
|
||||
|
||||
@@ -1800,6 +1800,11 @@ NOTE(objc_implementation_one_matched_requirement,none,
|
||||
"'@objc(%3)' to use it}2",
|
||||
(ValueDecl *, ObjCSelector, bool, StringRef))
|
||||
|
||||
WARNING(wrap_objc_implementation_will_become_error,none,
|
||||
"%0; this will become an error before '@_objcImplementation' is "
|
||||
"stabilized",
|
||||
(DiagnosticInfo *))
|
||||
|
||||
ERROR(cdecl_not_at_top_level,none,
|
||||
"@_cdecl can only be applied to global functions", ())
|
||||
ERROR(cdecl_empty_name,none,
|
||||
@@ -6687,7 +6692,7 @@ WARNING(hashvalue_implementation,Deprecation,
|
||||
"conform type %0 to 'Hashable' by implementing 'hash(into:)' instead",
|
||||
(Type))
|
||||
|
||||
WARNING(executor_enqueue_unowned_implementation,Deprecation,
|
||||
WARNING(executor_enqueue_deprecated_unowned_implementation,Deprecation,
|
||||
"'Executor.enqueue(UnownedJob)' is deprecated as a protocol requirement; "
|
||||
"conform type %0 to 'Executor' by implementing 'func enqueue(ExecutorJob)' instead",
|
||||
(Type))
|
||||
@@ -7082,7 +7087,7 @@ ERROR(attr_incompatible_with_back_deploy,none,
|
||||
"'%0' cannot be applied to a back deployed %1",
|
||||
(DeclAttribute, DescriptiveDeclKind))
|
||||
|
||||
ERROR(backdeployed_opaque_result_not_supported,none,
|
||||
WARNING(backdeployed_opaque_result_not_supported,none,
|
||||
"'%0' is unsupported on a %1 with a 'some' return type",
|
||||
(DeclAttribute, DescriptiveDeclKind))
|
||||
|
||||
@@ -7154,9 +7159,7 @@ ERROR(macro_undefined,PointsToFirstBadToken,
|
||||
"no macro named %0", (Identifier))
|
||||
ERROR(external_macro_not_found,none,
|
||||
"external macro implementation type '%0.%1' could not be found for "
|
||||
"macro %2; the type must be public and provided by a macro target in a "
|
||||
"Swift package, or via '-plugin-path' or '-load-plugin-library'",
|
||||
(StringRef, StringRef, DeclName))
|
||||
"macro %2", (StringRef, StringRef, DeclName))
|
||||
ERROR(macro_must_be_defined,none,
|
||||
"macro %0 requires a definition", (DeclName))
|
||||
ERROR(external_macro_outside_macro_definition,none,
|
||||
@@ -7374,62 +7377,6 @@ ERROR(noncopyable_cannot_have_read_set_accessor,none,
|
||||
"noncopyable %select{variable|subscript}0 cannot provide a read and set accessor",
|
||||
(unsigned))
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// MARK: Runtime discoverable attributes (@runtimeMetadata)
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
ERROR(runtime_discoverable_attrs_are_experimental,none,
|
||||
"runtime discoverable attributes are an experimental feature", ())
|
||||
|
||||
ERROR(invalid_decl_for_runtime_discoverable_attr,none,
|
||||
"@%0 can only be applied to non-generic types, methods, "
|
||||
"instance properties, and global functions", (StringRef))
|
||||
|
||||
ERROR(invalid_decl_for_runtime_discoverable_attr_in_extension,none,
|
||||
"@%0 can only be applied to unavailable extensions in the same module"
|
||||
" as %1", (StringRef, DeclName))
|
||||
|
||||
ERROR(invalid_attr_redeclaration_in_extension,none,
|
||||
"@%0 is already applied to type %1; did you want to remove it?",
|
||||
(StringRef, DeclName))
|
||||
|
||||
ERROR(duplicate_runtime_discoverable_attr,none,
|
||||
"duplicate runtime discoverable attribute", ())
|
||||
|
||||
ERROR(runtime_attribute_requires_init,none,
|
||||
"runtime attribute type %0 does not contain a required initializer"
|
||||
" - init(attachedTo:)",
|
||||
(DeclName))
|
||||
|
||||
ERROR(runtime_attribute_type_failable_init,none,
|
||||
"runtime attribute type initializer %0 cannot be failable", (DeclName))
|
||||
|
||||
ERROR(runtime_attribute_type_requirement_not_accessible,none,
|
||||
"%select{private|fileprivate|internal|package|public|open}0 %kind1 cannot have "
|
||||
"more restrictive access than its enclosing runtime attribute type %2 "
|
||||
"(which is %select{private|fileprivate|internal|package|public|open}3)",
|
||||
(AccessLevel, const ValueDecl *, Type, AccessLevel))
|
||||
|
||||
ERROR(cannot_use_attr_with_custom_arguments_on_protocol,none,
|
||||
"reflection metadata attributes applied to protocols cannot have"
|
||||
" additional attribute arguments; attribute arguments must be"
|
||||
" explicitly written on the conforming type",
|
||||
())
|
||||
|
||||
NOTE(missing_reflection_metadata_attribute_on_type,none,
|
||||
"protocol %0 requires reflection metadata attribute @%1",
|
||||
(DeclName, StringRef))
|
||||
|
||||
ERROR(missing_reflection_metadata_attribute_on_subclass,none,
|
||||
"superclass %0 requires reflection metadata attribute @%1",
|
||||
(DeclName, StringRef))
|
||||
NOTE(add_missing_reflection_metadata_attr,none,
|
||||
"add missing reflection metadata attribute @%0", (StringRef))
|
||||
NOTE(opt_out_from_missing_reflection_metadata_attr,none,
|
||||
"opt-out of reflection metadata attribute @%0 using"
|
||||
" unavailable extension",
|
||||
(StringRef))
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// MARK: Init accessors
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
@@ -36,9 +36,6 @@ enum class InitializerKind : uint8_t {
|
||||
|
||||
/// A property wrapper initialization expression.
|
||||
PropertyWrapper,
|
||||
|
||||
/// A runtime discoverable attribute initialization expression.
|
||||
RuntimeAttribute,
|
||||
};
|
||||
|
||||
/// An Initializer is a kind of DeclContext used for expressions that
|
||||
@@ -236,35 +233,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/// A runtime discoverable attribute initialization expression context.
|
||||
///
|
||||
/// The parent context is context of the file/module this generator is
|
||||
/// synthesized in.
|
||||
class RuntimeAttributeInitializer : public Initializer {
|
||||
CustomAttr *Attr;
|
||||
ValueDecl *AttachedTo;
|
||||
|
||||
public:
|
||||
explicit RuntimeAttributeInitializer(CustomAttr *attr, ValueDecl *attachedTo)
|
||||
: Initializer(InitializerKind::RuntimeAttribute,
|
||||
attachedTo->getDeclContext()),
|
||||
Attr(attr), AttachedTo(attachedTo) {}
|
||||
|
||||
CustomAttr *getAttr() const { return Attr; }
|
||||
|
||||
ValueDecl *getAttachedToDecl() const { return AttachedTo; }
|
||||
|
||||
static bool classof(const DeclContext *DC) {
|
||||
if (auto init = dyn_cast<Initializer>(DC))
|
||||
return classof(init);
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool classof(const Initializer *I) {
|
||||
return I->getInitializerKind() == InitializerKind::RuntimeAttribute;
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace swift
|
||||
|
||||
#endif
|
||||
|
||||
@@ -166,10 +166,6 @@ private:
|
||||
/// if it were done from OpaqueResultTypeRequest.
|
||||
llvm::SetVector<OpaqueTypeDecl *> UnvalidatedOpaqueReturnTypes;
|
||||
|
||||
/// The set of declarations with valid runtime discoverable attributes
|
||||
/// located in the source file.
|
||||
llvm::SetVector<ValueDecl *> DeclsWithRuntimeDiscoverableAttrs;
|
||||
|
||||
/// The list of functions defined in this file whose bodies have yet to be
|
||||
/// typechecked. They must be held in this list instead of eagerly validated
|
||||
/// because their bodies may force us to perform semantic checks of arbitrary
|
||||
@@ -237,10 +233,6 @@ public:
|
||||
/// Add a hoisted declaration. See Decl::isHoisted().
|
||||
void addHoistedDecl(Decl *d);
|
||||
|
||||
/// Add a declaration with any number of runtime disoverable attributes
|
||||
/// associated with it.
|
||||
void addDeclWithRuntimeDiscoverableAttrs(ValueDecl *);
|
||||
|
||||
/// Retrieves an immutable view of the list of top-level items in this file.
|
||||
ArrayRef<ASTNode> getTopLevelItems() const;
|
||||
|
||||
@@ -253,10 +245,6 @@ public:
|
||||
/// See Decl::isHoisted().
|
||||
ArrayRef<Decl *> getHoistedDecls() const;
|
||||
|
||||
/// Retrieves an immutable view of the set of all declaration with runtime
|
||||
/// discoverable attributes located in this file.
|
||||
ArrayRef<ValueDecl *> getDeclsWithRuntimeDiscoverableAttrs() const;
|
||||
|
||||
/// Retrieves an immutable view of the top-level items if they have already
|
||||
/// been parsed, or \c None if they haven't. Should only be used for dumping.
|
||||
llvm::Optional<ArrayRef<ASTNode>> getCachedTopLevelItems() const {
|
||||
|
||||
@@ -257,7 +257,6 @@ MISC(raw_string_delimiter)
|
||||
MISC(string_segment)
|
||||
MISC(string_interpolation_anchor)
|
||||
MISC(kw_yield)
|
||||
MISC(kw_forget)
|
||||
MISC(kw_discard)
|
||||
|
||||
// The following tokens are irrelevant for swiftSyntax and thus only declared
|
||||
|
||||
@@ -3645,10 +3645,6 @@ enum class CustomAttrTypeKind {
|
||||
/// Global actors are represented as custom type attributes. They don't
|
||||
/// have any particularly interesting semantics.
|
||||
GlobalActor,
|
||||
|
||||
/// Attributes that are discoverable/constructable at runtime given a name.
|
||||
/// They allow unbound generic types.
|
||||
RuntimeMetadata,
|
||||
};
|
||||
|
||||
void simple_display(llvm::raw_ostream &out, CustomAttrTypeKind value);
|
||||
@@ -4241,57 +4237,6 @@ public:
|
||||
bool isCached() const { return true; }
|
||||
};
|
||||
|
||||
class GetRuntimeDiscoverableAttributes
|
||||
: public SimpleRequest<GetRuntimeDiscoverableAttributes,
|
||||
ArrayRef<CustomAttr *>(Decl *),
|
||||
RequestFlags::Cached> {
|
||||
public:
|
||||
using SimpleRequest::SimpleRequest;
|
||||
|
||||
private:
|
||||
friend SimpleRequest;
|
||||
|
||||
ArrayRef<CustomAttr *> evaluate(Evaluator &evaluator, Decl *decl) const;
|
||||
|
||||
public:
|
||||
bool isCached() const { return true; }
|
||||
};
|
||||
|
||||
class SynthesizeRuntimeMetadataAttrGenerator
|
||||
: public SimpleRequest<SynthesizeRuntimeMetadataAttrGenerator,
|
||||
Expr *(CustomAttr *, ValueDecl *),
|
||||
RequestFlags::Cached> {
|
||||
|
||||
public:
|
||||
using SimpleRequest::SimpleRequest;
|
||||
|
||||
private:
|
||||
friend SimpleRequest;
|
||||
|
||||
Expr *evaluate(Evaluator &evaluator, CustomAttr *attr,
|
||||
ValueDecl *attachedTo) const;
|
||||
|
||||
public:
|
||||
bool isCached() const { return true; }
|
||||
};
|
||||
|
||||
class SynthesizeRuntimeMetadataAttrGeneratorBody
|
||||
: public SimpleRequest<SynthesizeRuntimeMetadataAttrGeneratorBody,
|
||||
BraceStmt *(CustomAttr *, ValueDecl *),
|
||||
RequestFlags::Cached> {
|
||||
public:
|
||||
using SimpleRequest::SimpleRequest;
|
||||
|
||||
private:
|
||||
friend SimpleRequest;
|
||||
|
||||
BraceStmt *evaluate(Evaluator &evaluator, CustomAttr *attr,
|
||||
ValueDecl *attachedTo) const;
|
||||
|
||||
public:
|
||||
bool isCached() const { return true; }
|
||||
};
|
||||
|
||||
/// Compute the local discriminators for the given declaration context.
|
||||
///
|
||||
/// This is a state-changing operation for closures within the context, which
|
||||
|
||||
@@ -475,15 +475,6 @@ SWIFT_REQUEST(TypeChecker, ExpandSynthesizedMemberMacroRequest,
|
||||
SWIFT_REQUEST(TypeChecker, ExpandPeerMacroRequest,
|
||||
ArrayRef<unsigned>(Decl *),
|
||||
Cached, NoLocationInfo)
|
||||
SWIFT_REQUEST(TypeChecker, SynthesizeRuntimeMetadataAttrGenerator,
|
||||
Expr *(CustomAttr *, ValueDecl *),
|
||||
Cached, NoLocationInfo)
|
||||
SWIFT_REQUEST(TypeChecker, SynthesizeRuntimeMetadataAttrGeneratorBody,
|
||||
BraceStmt *(CustomAttr *, ValueDecl *),
|
||||
Cached, NoLocationInfo)
|
||||
SWIFT_REQUEST(TypeChecker, GetRuntimeDiscoverableAttributes,
|
||||
ArrayRef<CustomAttr *>(Decl *),
|
||||
Cached, NoLocationInfo)
|
||||
SWIFT_REQUEST(TypeChecker, LocalDiscriminatorsRequest,
|
||||
unsigned(DeclContext *),
|
||||
Cached, NoLocationInfo)
|
||||
|
||||
Reference in New Issue
Block a user