Skip to content

Commit dec8419

Browse files
committed
---
yaml --- r: 345979 b: refs/heads/master c: ef3b331 h: refs/heads/master i: 345977: 496a43a 345975: 78b87b2
1 parent efbdc95 commit dec8419

File tree

3 files changed

+42
-26
lines changed

3 files changed

+42
-26
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: 826d631fe25a060c06430b75ce84cf3ba4b3c96a
2+
refs/heads/master: ef3b3314b4f68a417c7a70e75b63ede848666e96
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/Decl.h

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4875,11 +4875,17 @@ class ParamDecl : public VarDecl {
48754875
StringRef StringRepresentation;
48764876
};
48774877

4878-
/// The default value, if any, along with whether this is varargs.
4879-
llvm::PointerIntPair<StoredDefaultArgument *, 1> DefaultValueAndIsVariadic;
4878+
enum class Flags : uint8_t {
4879+
/// Whether or not this parameter is vargs.
4880+
IsVariadic = 1 << 0,
48804881

4881-
/// `@autoclosure` flag associated with this parameter.
4882-
bool IsAutoClosure = false;
4882+
/// Whether or not this parameter is `@autoclosure`.
4883+
IsAutoClosure = 1 << 1,
4884+
};
4885+
4886+
/// The default value, if any, along with flags.
4887+
llvm::PointerIntPair<StoredDefaultArgument *, 2, OptionSet<Flags>>
4888+
DefaultValueAndFlags;
48834889

48844890
public:
48854891
ParamDecl(VarDecl::Specifier specifier,
@@ -4920,15 +4926,15 @@ class ParamDecl : public VarDecl {
49204926
}
49214927

49224928
Expr *getDefaultValue() const {
4923-
if (auto stored = DefaultValueAndIsVariadic.getPointer())
4929+
if (auto stored = DefaultValueAndFlags.getPointer())
49244930
return stored->DefaultArg;
49254931
return nullptr;
49264932
}
49274933

49284934
void setDefaultValue(Expr *E);
49294935

49304936
Initializer *getDefaultArgumentInitContext() const {
4931-
if (auto stored = DefaultValueAndIsVariadic.getPointer())
4937+
if (auto stored = DefaultValueAndFlags.getPointer())
49324938
return stored->InitContext;
49334939
return nullptr;
49344940
}
@@ -4962,12 +4968,24 @@ class ParamDecl : public VarDecl {
49624968
void setDefaultValueStringRepresentation(StringRef stringRepresentation);
49634969

49644970
/// Whether or not this parameter is varargs.
4965-
bool isVariadic() const { return DefaultValueAndIsVariadic.getInt(); }
4966-
void setVariadic(bool value = true) {DefaultValueAndIsVariadic.setInt(value);}
4971+
bool isVariadic() const {
4972+
return DefaultValueAndFlags.getInt().contains(Flags::IsVariadic);
4973+
}
4974+
void setVariadic(bool value = true) {
4975+
auto flags = DefaultValueAndFlags.getInt();
4976+
DefaultValueAndFlags.setInt(value ? flags | Flags::IsVariadic
4977+
: flags - Flags::IsVariadic);
4978+
}
49674979

49684980
/// Whether or not this parameter is marked with `@autoclosure`.
4969-
bool isAutoClosure() const { return IsAutoClosure; }
4970-
void setAutoClosure(bool value = true) { IsAutoClosure = value; }
4981+
bool isAutoClosure() const {
4982+
return DefaultValueAndFlags.getInt().contains(Flags::IsAutoClosure);
4983+
}
4984+
void setAutoClosure(bool value = true) {
4985+
auto flags = DefaultValueAndFlags.getInt();
4986+
DefaultValueAndFlags.setInt(value ? flags | Flags::IsAutoClosure
4987+
: flags - Flags::IsAutoClosure);
4988+
}
49714989

49724990
/// Remove the type of this varargs element designator, without the array
49734991
/// type wrapping it. A parameter like "Int..." will have formal parameter

trunk/lib/AST/Decl.cpp

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4845,8 +4845,7 @@ ParamDecl::ParamDecl(ParamDecl *PD, bool withTypes)
48454845
ArgumentName(PD->getArgumentName()),
48464846
ArgumentNameLoc(PD->getArgumentNameLoc()),
48474847
SpecifierLoc(PD->getSpecifierLoc()),
4848-
DefaultValueAndIsVariadic(nullptr, PD->DefaultValueAndIsVariadic.getInt()),
4849-
IsAutoClosure(PD->isAutoClosure()) {
4848+
DefaultValueAndFlags(nullptr, PD->DefaultValueAndFlags.getInt()) {
48504849
Bits.ParamDecl.IsTypeLocImplicit = PD->Bits.ParamDecl.IsTypeLocImplicit;
48514850
Bits.ParamDecl.defaultArgumentKind = PD->Bits.ParamDecl.defaultArgumentKind;
48524851
typeLoc = PD->getTypeLoc().clone(PD->getASTContext());
@@ -4942,19 +4941,19 @@ Type ParamDecl::getVarargBaseTy(Type VarArgT) {
49424941
}
49434942

49444943
void ParamDecl::setDefaultValue(Expr *E) {
4945-
if (!DefaultValueAndIsVariadic.getPointer()) {
4944+
if (!DefaultValueAndFlags.getPointer()) {
49464945
if (!E) return;
49474946

4948-
DefaultValueAndIsVariadic.setPointer(
4949-
getASTContext().Allocate<StoredDefaultArgument>());
4947+
DefaultValueAndFlags.setPointer(
4948+
getASTContext().Allocate<StoredDefaultArgument>());
49504949
}
49514950

4952-
DefaultValueAndIsVariadic.getPointer()->DefaultArg = E;
4951+
DefaultValueAndFlags.getPointer()->DefaultArg = E;
49534952
}
49544953

49554954
void ParamDecl::setDefaultArgumentInitContext(Initializer *initContext) {
4956-
assert(DefaultValueAndIsVariadic.getPointer());
4957-
DefaultValueAndIsVariadic.getPointer()->InitContext = initContext;
4955+
assert(DefaultValueAndFlags.getPointer());
4956+
DefaultValueAndFlags.getPointer()->InitContext = initContext;
49584957
}
49594958

49604959
StringRef
@@ -4964,10 +4963,9 @@ ParamDecl::getDefaultValueStringRepresentation(
49644963
case DefaultArgumentKind::None:
49654964
llvm_unreachable("called on a ParamDecl with no default value");
49664965
case DefaultArgumentKind::Normal: {
4967-
assert(DefaultValueAndIsVariadic.getPointer() &&
4966+
assert(DefaultValueAndFlags.getPointer() &&
49684967
"default value not provided yet");
4969-
auto existing =
4970-
DefaultValueAndIsVariadic.getPointer()->StringRepresentation;
4968+
auto existing = DefaultValueAndFlags.getPointer()->StringRepresentation;
49714969
if (!existing.empty())
49724970
return existing;
49734971
return extractInlinableText(getASTContext().SourceMgr, getDefaultValue(),
@@ -4994,12 +4992,12 @@ ParamDecl::setDefaultValueStringRepresentation(StringRef stringRepresentation) {
49944992
assert(getDefaultArgumentKind() == DefaultArgumentKind::Normal);
49954993
assert(!stringRepresentation.empty());
49964994

4997-
if (!DefaultValueAndIsVariadic.getPointer()) {
4998-
DefaultValueAndIsVariadic.setPointer(
4999-
getASTContext().Allocate<StoredDefaultArgument>());
4995+
if (!DefaultValueAndFlags.getPointer()) {
4996+
DefaultValueAndFlags.setPointer(
4997+
getASTContext().Allocate<StoredDefaultArgument>());
50004998
}
50014999

5002-
DefaultValueAndIsVariadic.getPointer()->StringRepresentation =
5000+
DefaultValueAndFlags.getPointer()->StringRepresentation =
50035001
stringRepresentation;
50045002
}
50055003

0 commit comments

Comments
 (0)