Merge remote-tracking branch 'origin/master' into master-rebranch

This commit is contained in:
swift-ci
2019-09-25 13:44:21 -07:00
17 changed files with 295 additions and 206 deletions

View File

@@ -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)

View File

@@ -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;

View File

@@ -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.

View File

@@ -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"

View File

@@ -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)

View File

@@ -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<>

View File

@@ -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)