mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Merge remote-tracking branch 'origin/master' into master-rebranch
This commit is contained in:
@@ -28,12 +28,14 @@ SWIFT_TYPEID_NAMED(Decl *, Decl)
|
||||
SWIFT_TYPEID_NAMED(GenericParamList *, GenericParamList)
|
||||
SWIFT_TYPEID_NAMED(GenericSignature *, GenericSignature)
|
||||
SWIFT_TYPEID_NAMED(GenericTypeParamType *, GenericTypeParamType)
|
||||
SWIFT_TYPEID_NAMED(InfixOperatorDecl *, InfixOperatorDecl)
|
||||
SWIFT_TYPEID_NAMED(IterableDeclContext *, IterableDeclContext)
|
||||
SWIFT_TYPEID_NAMED(ModuleDecl *, ModuleDecl)
|
||||
SWIFT_TYPEID_NAMED(NominalTypeDecl *, NominalTypeDecl)
|
||||
SWIFT_TYPEID_NAMED(OperatorDecl *, OperatorDecl)
|
||||
SWIFT_TYPEID_NAMED(Optional<PropertyWrapperMutability>,
|
||||
PropertyWrapperMutability)
|
||||
SWIFT_TYPEID_NAMED(PrecedenceGroupDecl *, PrecedenceGroupDecl)
|
||||
SWIFT_TYPEID_NAMED(ProtocolDecl *, ProtocolDecl)
|
||||
SWIFT_TYPEID_NAMED(TypeAliasDecl *, TypeAliasDecl)
|
||||
SWIFT_TYPEID_NAMED(ValueDecl *, ValueDecl)
|
||||
|
||||
@@ -26,10 +26,12 @@ class Decl;
|
||||
class GenericParamList;
|
||||
class GenericSignature;
|
||||
class GenericTypeParamType;
|
||||
class InfixOperatorDecl;
|
||||
class IterableDeclContext;
|
||||
class ModuleDecl;
|
||||
class NominalTypeDecl;
|
||||
class OperatorDecl;
|
||||
class PrecedenceGroupDecl;
|
||||
struct PropertyWrapperBackingPropertyInfo;
|
||||
struct PropertyWrapperTypeInfo;
|
||||
enum class CtorInitializerKind;
|
||||
|
||||
@@ -6909,7 +6909,6 @@ public:
|
||||
/// \endcode
|
||||
class InfixOperatorDecl : public OperatorDecl {
|
||||
SourceLoc ColonLoc;
|
||||
PrecedenceGroupDecl *PrecedenceGroup = nullptr;
|
||||
|
||||
public:
|
||||
InfixOperatorDecl(DeclContext *DC, SourceLoc operatorLoc, Identifier name,
|
||||
@@ -6920,14 +6919,6 @@ public:
|
||||
identifiers, identifierLocs),
|
||||
ColonLoc(colonLoc) {}
|
||||
|
||||
InfixOperatorDecl(DeclContext *DC, SourceLoc operatorLoc, Identifier name,
|
||||
SourceLoc nameLoc, SourceLoc colonLoc,
|
||||
PrecedenceGroupDecl *precedenceGroup,
|
||||
ArrayRef<NominalTypeDecl *> designatedNominalTypes)
|
||||
: OperatorDecl(DeclKind::InfixOperator, DC, operatorLoc, name, nameLoc,
|
||||
designatedNominalTypes),
|
||||
ColonLoc(colonLoc), PrecedenceGroup(precedenceGroup) {}
|
||||
|
||||
SourceLoc getEndLoc() const {
|
||||
auto identifierLocs = getIdentifierLocs();
|
||||
if (identifierLocs.empty())
|
||||
@@ -6942,10 +6933,7 @@ public:
|
||||
|
||||
SourceLoc getColonLoc() const { return ColonLoc; }
|
||||
|
||||
PrecedenceGroupDecl *getPrecedenceGroup() const { return PrecedenceGroup; }
|
||||
void setPrecedenceGroup(PrecedenceGroupDecl *PGD) {
|
||||
PrecedenceGroup = PGD;
|
||||
}
|
||||
PrecedenceGroupDecl *getPrecedenceGroup() const;
|
||||
|
||||
/// True if this decl's attributes conflict with those declared by another
|
||||
/// operator.
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "swift/AST/SimpleRequest.h"
|
||||
#include "swift/AST/ASTTypeIDs.h"
|
||||
#include "swift/Basic/Statistic.h"
|
||||
#include "llvm/ADT/Hashing.h"
|
||||
#include "llvm/ADT/TinyPtrVector.h"
|
||||
|
||||
namespace swift {
|
||||
@@ -273,6 +274,56 @@ public:
|
||||
void cacheResult(GenericParamList *value) const;
|
||||
};
|
||||
|
||||
struct PrecedenceGroupDescriptor {
|
||||
DeclContext *dc;
|
||||
Identifier ident;
|
||||
SourceLoc nameLoc;
|
||||
|
||||
SourceLoc getLoc() const;
|
||||
|
||||
friend llvm::hash_code hash_value(const PrecedenceGroupDescriptor &owner) {
|
||||
return hash_combine(llvm::hash_value(owner.dc),
|
||||
llvm::hash_value(owner.ident.getAsOpaquePointer()),
|
||||
llvm::hash_value(owner.nameLoc.getOpaquePointerValue()));
|
||||
}
|
||||
|
||||
friend bool operator==(const PrecedenceGroupDescriptor &lhs,
|
||||
const PrecedenceGroupDescriptor &rhs) {
|
||||
return lhs.dc == rhs.dc &&
|
||||
lhs.ident == rhs.ident &&
|
||||
lhs.nameLoc == rhs.nameLoc;
|
||||
}
|
||||
|
||||
friend bool operator!=(const PrecedenceGroupDescriptor &lhs,
|
||||
const PrecedenceGroupDescriptor &rhs) {
|
||||
return !(lhs == rhs);
|
||||
}
|
||||
};
|
||||
|
||||
void simple_display(llvm::raw_ostream &out, const PrecedenceGroupDescriptor &d);
|
||||
|
||||
class LookupPrecedenceGroupRequest
|
||||
: public SimpleRequest<LookupPrecedenceGroupRequest,
|
||||
PrecedenceGroupDecl *(PrecedenceGroupDescriptor),
|
||||
CacheKind::Cached> {
|
||||
public:
|
||||
using SimpleRequest::SimpleRequest;
|
||||
|
||||
private:
|
||||
friend SimpleRequest;
|
||||
|
||||
// Evaluation.
|
||||
llvm::Expected<PrecedenceGroupDecl *>
|
||||
evaluate(Evaluator &evaluator, PrecedenceGroupDescriptor descriptor) const;
|
||||
|
||||
public:
|
||||
// Source location
|
||||
SourceLoc getNearestLoc() const;
|
||||
|
||||
// Separate caching.
|
||||
bool isCached() const { return true; }
|
||||
};
|
||||
|
||||
#define SWIFT_TYPEID_ZONE NameLookup
|
||||
#define SWIFT_TYPEID_HEADER "swift/AST/NameLookupTypeIDZone.def"
|
||||
#include "swift/Basic/DefineTypeIDZone.h"
|
||||
|
||||
@@ -30,6 +30,9 @@ SWIFT_REQUEST(NameLookup, InheritedDeclsReferencedRequest,
|
||||
DirectlyReferencedTypeDecls(
|
||||
llvm::PointerUnion<TypeDecl *, ExtensionDecl *>, unsigned),
|
||||
Uncached, HasNearestLocation)
|
||||
SWIFT_REQUEST(NameLookup, LookupPrecedenceGroupRequest,
|
||||
PrecedenceGroupDecl *(DeclContext *, Identifier, SourceLoc),
|
||||
Cached, NoLocationInfo)
|
||||
SWIFT_REQUEST(NameLookup, SelfBoundsFromWhereClauseRequest,
|
||||
SelfBounds(llvm::PointerUnion<TypeDecl *, ExtensionDecl *>),
|
||||
Uncached, NoLocationInfo)
|
||||
|
||||
@@ -33,6 +33,7 @@ class AbstractStorageDecl;
|
||||
class AccessorDecl;
|
||||
enum class AccessorKind;
|
||||
class GenericParamList;
|
||||
class PrecedenceGroupDecl;
|
||||
struct PropertyWrapperBackingPropertyInfo;
|
||||
struct PropertyWrapperMutability;
|
||||
class RequirementRepr;
|
||||
@@ -1209,6 +1210,25 @@ public:
|
||||
void cacheResult(Type value) const;
|
||||
};
|
||||
|
||||
class OperatorPrecedenceGroupRequest
|
||||
: public SimpleRequest<OperatorPrecedenceGroupRequest,
|
||||
PrecedenceGroupDecl *(InfixOperatorDecl *),
|
||||
CacheKind::Cached> {
|
||||
public:
|
||||
using SimpleRequest::SimpleRequest;
|
||||
|
||||
private:
|
||||
friend SimpleRequest;
|
||||
|
||||
// Evaluation.
|
||||
llvm::Expected<PrecedenceGroupDecl *>
|
||||
evaluate(Evaluator &evaluator, InfixOperatorDecl *PGD) const;
|
||||
|
||||
public:
|
||||
// Separate caching.
|
||||
bool isCached() const { return true; }
|
||||
};
|
||||
|
||||
// Allow AnyValue to compare two Type values, even though Type doesn't
|
||||
// support ==.
|
||||
template<>
|
||||
|
||||
@@ -85,6 +85,9 @@ SWIFT_REQUEST(TypeChecker, MangleLocalTypeDeclRequest,
|
||||
SWIFT_REQUEST(TypeChecker, OpaqueReadOwnershipRequest,
|
||||
OpaqueReadOwnership(AbstractStorageDecl *), SeparatelyCached,
|
||||
NoLocationInfo)
|
||||
SWIFT_REQUEST(TypeChecker, OperatorPrecedenceGroupRequest,
|
||||
PrecedenceGroupDecl *(PrecedenceGroupDecl *),
|
||||
Cached, NoLocationInfo)
|
||||
SWIFT_REQUEST(TypeChecker, OverriddenDeclsRequest,
|
||||
llvm::TinyPtrVector<ValueDecl *>(ValueDecl *), SeparatelyCached,
|
||||
NoLocationInfo)
|
||||
|
||||
Reference in New Issue
Block a user