Skip to content

Commit fa788a5

Browse files
committed
---
yaml --- r: 348858 b: refs/heads/master c: df07883 h: refs/heads/master
1 parent 3df46fd commit fa788a5

File tree

95 files changed

+823
-1130
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

95 files changed

+823
-1130
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 2b0444713ac8182d6114f08fb0c29fb1ff747a0d
2+
refs/heads/master: df078830e40288ea774818b963346eec033ff49e
33
refs/heads/master-next: 203b3026584ecad859eb328b2e12490099409cd5
44
refs/tags/osx-passed: b6b74147ef8a386f532cf9357a1bde006e552c54
55
refs/tags/swift-2.2-SNAPSHOT-2015-12-01-a: 6bb18e013c2284f2b45f5f84f2df2887dc0f7dea

trunk/include/swift/AST/ASTDemangler.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ class ASTBuilder {
5858
using BuiltTypeDecl = swift::GenericTypeDecl *; // nominal or type alias
5959
using BuiltProtocolDecl = swift::ProtocolDecl *;
6060
explicit ASTBuilder(ASTContext &ctx) : Ctx(ctx) {}
61+
62+
/// The resolver to use for type checking, if necessary.
63+
LazyResolver *Resolver = nullptr;
6164

6265
ASTContext &getASTContext() { return Ctx; }
6366
DeclContext *getNotionalDC();

trunk/include/swift/AST/ASTTypeIDZone.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ SWIFT_TYPEID_NAMED(InfixOperatorDecl *, InfixOperatorDecl)
3333
SWIFT_TYPEID_NAMED(IterableDeclContext *, IterableDeclContext)
3434
SWIFT_TYPEID_NAMED(ModuleDecl *, ModuleDecl)
3535
SWIFT_TYPEID_NAMED(NominalTypeDecl *, NominalTypeDecl)
36-
SWIFT_TYPEID_NAMED(OpaqueTypeDecl *, OpaqueTypeDecl)
3736
SWIFT_TYPEID_NAMED(OperatorDecl *, OperatorDecl)
3837
SWIFT_TYPEID_NAMED(Optional<PropertyWrapperMutability>,
3938
PropertyWrapperMutability)

trunk/include/swift/AST/ASTTypeIDs.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ class IterableDeclContext;
3434
class ModuleDecl;
3535
class NominalTypeDecl;
3636
class OperatorDecl;
37-
class OpaqueTypeDecl;
3837
class PrecedenceGroupDecl;
3938
struct PropertyWrapperBackingPropertyInfo;
4039
struct PropertyWrapperTypeInfo;

trunk/include/swift/AST/AnyRequest.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class AnyRequest {
5454
friend llvm::DenseMapInfo<swift::AnyRequest>;
5555

5656
static hash_code hashForHolder(uint64_t typeID, hash_code requestHash) {
57-
return hash_combine(typeID, requestHash);
57+
return hash_combine(hash_value(typeID), requestHash);
5858
}
5959

6060
/// Abstract base class used to hold the specific request kind.

trunk/include/swift/AST/Decl.h

Lines changed: 44 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -418,10 +418,7 @@ class alignas(1 << DeclAlignInBits) Decl {
418418
HasSingleExpressionBody : 1
419419
);
420420

421-
SWIFT_INLINE_BITFIELD(FuncDecl, AbstractFunctionDecl, 1+1+2+1+1+2,
422-
/// Whether we've computed the 'static' flag yet.
423-
IsStaticComputed : 1,
424-
421+
SWIFT_INLINE_BITFIELD(FuncDecl, AbstractFunctionDecl, 1+2+1+1+2,
425422
/// Whether this function is a 'static' method.
426423
IsStatic : 1,
427424

@@ -857,6 +854,17 @@ class alignas(1 << DeclAlignInBits) Decl {
857854
return getValidationState() > ValidationState::Unchecked;
858855
}
859856

857+
/// Manually indicate that validation is complete for the declaration. For
858+
/// example: during importing, code synthesis, or derived conformances.
859+
///
860+
/// For normal code validation, please use DeclValidationRAII instead.
861+
///
862+
/// FIXME -- Everything should use DeclValidationRAII instead of this.
863+
void setValidationToChecked() {
864+
if (!isBeingValidated())
865+
Bits.Decl.ValidationState = unsigned(ValidationState::Checked);
866+
}
867+
860868
bool escapedFromIfConfig() const {
861869
return Bits.Decl.EscapedFromIfConfig;
862870
}
@@ -2597,9 +2605,6 @@ class ValueDecl : public Decl {
25972605
/// if the base declaration is \c open, the override might have to be too.
25982606
bool hasOpenAccess(const DeclContext *useDC) const;
25992607

2600-
/// FIXME: This is deprecated.
2601-
bool isRecursiveValidation() const;
2602-
26032608
/// Retrieve the "interface" type of this value, which uses
26042609
/// GenericTypeParamType if the declaration is generic. For a generic
26052610
/// function, this will have a GenericFunctionType with a
@@ -2759,6 +2764,12 @@ class ValueDecl : public Decl {
27592764
/// Get the representative for this value's opaque result type, if it has one.
27602765
OpaqueReturnTypeRepr *getOpaqueResultTypeRepr() const;
27612766

2767+
/// Set the opaque return type decl for this decl.
2768+
///
2769+
/// `this` must be of a decl type that supports opaque return types, and
2770+
/// must not have previously had an opaque result type set.
2771+
void setOpaqueResultTypeDecl(OpaqueTypeDecl *D);
2772+
27622773
/// Retrieve the attribute associating this declaration with a
27632774
/// function builder, if there is one.
27642775
CustomAttr *getAttachedFunctionBuilder() const;
@@ -4519,6 +4530,8 @@ class AbstractStorageDecl : public ValueDecl {
45194530
Bits.AbstractStorageDecl.IsStatic = IsStatic;
45204531
}
45214532

4533+
OpaqueTypeDecl *OpaqueReturn = nullptr;
4534+
45224535
public:
45234536

45244537
/// Should this declaration be treated as if annotated with transparent
@@ -4776,6 +4789,14 @@ class AbstractStorageDecl : public ValueDecl {
47764789

47774790
bool hasAnyDynamicReplacementAccessors() const;
47784791

4792+
OpaqueTypeDecl *getOpaqueResultTypeDecl() const {
4793+
return OpaqueReturn;
4794+
}
4795+
void setOpaqueResultTypeDecl(OpaqueTypeDecl *decl) {
4796+
assert(!OpaqueReturn && "already has opaque type decl");
4797+
OpaqueReturn = decl;
4798+
}
4799+
47794800
// Implement isa/cast/dyncast/etc.
47804801
static bool classof(const Decl *D) {
47814802
return D->getKind() >= DeclKind::First_AbstractStorageDecl &&
@@ -5955,13 +5976,14 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, SelfAccessKind SAK);
59555976
class FuncDecl : public AbstractFunctionDecl {
59565977
friend class AbstractFunctionDecl;
59575978
friend class SelfAccessKindRequest;
5958-
friend class IsStaticRequest;
59595979

59605980
SourceLoc StaticLoc; // Location of the 'static' token or invalid.
59615981
SourceLoc FuncLoc; // Location of the 'func' token.
59625982

59635983
TypeLoc FnRetType;
59645984

5985+
OpaqueTypeDecl *OpaqueReturn = nullptr;
5986+
59655987
protected:
59665988
FuncDecl(DeclKind Kind,
59675989
SourceLoc StaticLoc, StaticSpellingKind StaticSpelling,
@@ -5977,14 +5999,14 @@ class FuncDecl : public AbstractFunctionDecl {
59775999
StaticLoc(StaticLoc), FuncLoc(FuncLoc) {
59786000
assert(!Name.getBaseName().isSpecial());
59796001

6002+
Bits.FuncDecl.IsStatic =
6003+
StaticLoc.isValid() || StaticSpelling != StaticSpellingKind::None;
59806004
Bits.FuncDecl.StaticSpelling = static_cast<unsigned>(StaticSpelling);
59816005

59826006
Bits.FuncDecl.ForcedStaticDispatch = false;
59836007
Bits.FuncDecl.SelfAccess =
59846008
static_cast<unsigned>(SelfAccessKind::NonMutating);
59856009
Bits.FuncDecl.SelfAccessComputed = false;
5986-
Bits.FuncDecl.IsStaticComputed = false;
5987-
Bits.FuncDecl.IsStatic = false;
59886010
}
59896011

59906012
private:
@@ -6004,13 +6026,6 @@ class FuncDecl : public AbstractFunctionDecl {
60046026
return None;
60056027
}
60066028

6007-
Optional<bool> getCachedIsStatic() const {
6008-
if (Bits.FuncDecl.IsStaticComputed)
6009-
return Bits.FuncDecl.IsStatic;
6010-
6011-
return None;
6012-
}
6013-
60146029
public:
60156030
/// Factory function only for use by deserialization.
60166031
static FuncDecl *createDeserialized(ASTContext &Context, SourceLoc StaticLoc,
@@ -6033,16 +6048,16 @@ class FuncDecl : public AbstractFunctionDecl {
60336048

60346049
Identifier getName() const { return getFullName().getBaseIdentifier(); }
60356050

6036-
bool isStatic() const;
6037-
6051+
bool isStatic() const {
6052+
return Bits.FuncDecl.IsStatic;
6053+
}
60386054
/// \returns the way 'static'/'class' was spelled in the source.
60396055
StaticSpellingKind getStaticSpelling() const {
60406056
return static_cast<StaticSpellingKind>(Bits.FuncDecl.StaticSpelling);
60416057
}
60426058
/// \returns the way 'static'/'class' should be spelled for this declaration.
60436059
StaticSpellingKind getCorrectStaticSpelling() const;
60446060
void setStatic(bool IsStatic = true) {
6045-
Bits.FuncDecl.IsStaticComputed = true;
60466061
Bits.FuncDecl.IsStatic = IsStatic;
60476062
}
60486063

@@ -6114,7 +6129,15 @@ class FuncDecl : public AbstractFunctionDecl {
61146129
}
61156130

61166131
OperatorDecl *getOperatorDecl() const;
6117-
6132+
6133+
OpaqueTypeDecl *getOpaqueResultTypeDecl() const {
6134+
return OpaqueReturn;
6135+
}
6136+
void setOpaqueResultTypeDecl(OpaqueTypeDecl *decl) {
6137+
assert(!OpaqueReturn && "already has opaque type decl");
6138+
OpaqueReturn = decl;
6139+
}
6140+
61186141
/// Returns true if the function is forced to be statically dispatched.
61196142
bool hasForcedStaticDispatch() const {
61206143
return Bits.FuncDecl.ForcedStaticDispatch;

trunk/include/swift/AST/DiagnosticsSema.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,7 @@ ERROR(cannot_convert_argument_value,none,
381381
(Type,Type))
382382

383383
NOTE(candidate_has_invalid_argument_at_position,none,
384-
"candidate expects value of type %0 for parameter #%1",
384+
"candidate expects value of type %0 at position #%1",
385385
(Type, unsigned))
386386

387387
ERROR(cannot_convert_array_to_variadic,none,

trunk/include/swift/AST/FileUnit.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ class FileUnit : public DeclContext {
6060

6161
/// Look up an opaque return type by the mangled name of the declaration
6262
/// that defines it.
63-
virtual OpaqueTypeDecl *lookupOpaqueResultType(StringRef MangledName) {
63+
virtual OpaqueTypeDecl *lookupOpaqueResultType(StringRef MangledName,
64+
LazyResolver *resolver) {
6465
return nullptr;
6566
}
6667

trunk/include/swift/AST/Module.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,8 @@ class ModuleDecl : public DeclContext, public TypeDecl {
354354

355355
/// Look up an opaque return type by the mangled name of the declaration
356356
/// that defines it.
357-
OpaqueTypeDecl *lookupOpaqueResultType(StringRef MangledName);
357+
OpaqueTypeDecl *lookupOpaqueResultType(StringRef MangledName,
358+
LazyResolver *resolver);
358359

359360
/// Find ValueDecls in the module and pass them to the given consumer object.
360361
///

trunk/include/swift/AST/SearchPathOptions.h

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
#ifndef SWIFT_AST_SEARCHPATHOPTIONS_H
1414
#define SWIFT_AST_SEARCHPATHOPTIONS_H
1515

16-
#include "swift/Basic/ArrayRefView.h"
1716
#include "llvm/ADT/Hashing.h"
1817

1918
#include <string>
@@ -82,38 +81,30 @@ class SearchPathOptions {
8281
/// would for a non-system header.
8382
bool DisableModulesValidateSystemDependencies = false;
8483

85-
private:
86-
static StringRef
87-
pathStringFromFrameworkSearchPath(const FrameworkSearchPath &next) {
88-
return next.Path;
89-
};
90-
91-
public:
9284
/// Return a hash code of any components from these options that should
9385
/// contribute to a Swift Bridging PCH hash.
9486
llvm::hash_code getPCHHashComponents() const {
87+
using llvm::hash_value;
9588
using llvm::hash_combine;
96-
using llvm::hash_combine_range;
97-
98-
using FrameworkPathView = ArrayRefView<FrameworkSearchPath, StringRef,
99-
pathStringFromFrameworkSearchPath>;
100-
FrameworkPathView frameworkPathsOnly{FrameworkSearchPaths};
101-
102-
return hash_combine(SDKPath,
103-
hash_combine_range(ImportSearchPaths.begin(),
104-
ImportSearchPaths.end()),
105-
hash_combine_range(VFSOverlayFiles.begin(),
106-
VFSOverlayFiles.end()),
107-
// FIXME: Should we include the system-ness of framework
108-
// search paths too?
109-
hash_combine_range(frameworkPathsOnly.begin(),
110-
frameworkPathsOnly.end()),
111-
hash_combine_range(LibrarySearchPaths.begin(),
112-
LibrarySearchPaths.end()),
113-
RuntimeResourcePath,
114-
hash_combine_range(RuntimeLibraryImportPaths.begin(),
115-
RuntimeLibraryImportPaths.end()),
116-
DisableModulesValidateSystemDependencies);
89+
auto Code = hash_value(SDKPath);
90+
for (auto Import : ImportSearchPaths) {
91+
Code = hash_combine(Code, Import);
92+
}
93+
for (auto VFSFile : VFSOverlayFiles) {
94+
Code = hash_combine(Code, VFSFile);
95+
}
96+
for (const auto &FrameworkPath : FrameworkSearchPaths) {
97+
Code = hash_combine(Code, FrameworkPath.Path);
98+
}
99+
for (auto LibraryPath : LibrarySearchPaths) {
100+
Code = hash_combine(Code, LibraryPath);
101+
}
102+
Code = hash_combine(Code, RuntimeResourcePath);
103+
for (auto RuntimeLibraryImportPath : RuntimeLibraryImportPaths) {
104+
Code = hash_combine(Code, RuntimeLibraryImportPath);
105+
}
106+
Code = hash_combine(Code, DisableModulesValidateSystemDependencies);
107+
return Code;
117108
}
118109
};
119110

trunk/include/swift/AST/SourceFile.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,6 @@ class SourceFile final : public FileUnit {
117117
/// The scope map that describes this source file.
118118
std::unique_ptr<ASTScope> Scope;
119119

120-
/// The set of validated opaque return type decls in the source file.
121-
llvm::SmallVector<OpaqueTypeDecl *, 4> OpaqueReturnTypes;
122-
llvm::StringMap<OpaqueTypeDecl *> ValidatedOpaqueReturnTypes;
123-
/// The set of parsed decls with opaque return types that have not yet
124-
/// been validated.
125-
llvm::SetVector<ValueDecl *> UnvalidatedDeclsWithOpaqueReturnTypes;
126-
127120
friend ASTContext;
128121
friend Impl;
129122
public:
@@ -137,6 +130,13 @@ class SourceFile final : public FileUnit {
137130
/// The list of local type declarations in the source file.
138131
llvm::SetVector<TypeDecl *> LocalTypeDecls;
139132

133+
/// The set of validated opaque return type decls in the source file.
134+
llvm::SmallVector<OpaqueTypeDecl *, 4> OpaqueReturnTypes;
135+
llvm::StringMap<OpaqueTypeDecl *> ValidatedOpaqueReturnTypes;
136+
/// The set of parsed decls with opaque return types that have not yet
137+
/// been validated.
138+
llvm::DenseSet<ValueDecl *> UnvalidatedDeclsWithOpaqueReturnTypes;
139+
140140
/// A set of special declaration attributes which require the
141141
/// Foundation module to be imported to work. If the foundation
142142
/// module is still not imported by the time type checking is
@@ -430,13 +430,14 @@ class SourceFile final : public FileUnit {
430430
void setSyntaxRoot(syntax::SourceFileSyntax &&Root);
431431
bool hasSyntaxRoot() const;
432432

433-
OpaqueTypeDecl *lookupOpaqueResultType(StringRef MangledName) override;
433+
OpaqueTypeDecl *lookupOpaqueResultType(StringRef MangledName,
434+
LazyResolver *resolver) override;
434435

435436
void addUnvalidatedDeclWithOpaqueResultType(ValueDecl *vd) {
436437
UnvalidatedDeclsWithOpaqueReturnTypes.insert(vd);
437438
}
438439

439-
ArrayRef<OpaqueTypeDecl *> getOpaqueReturnTypeDecls();
440+
void markDeclWithOpaqueResultTypeAsValidated(ValueDecl *vd);
440441

441442
private:
442443

0 commit comments

Comments
 (0)