Skip to content

Commit d7bf739

Browse files
authored
Merge pull request #33574 from xymus/serialize-user-accessible-take-2
[Serialization] Serialize isUserAccessible on functions - Take 2
2 parents 828ab6d + 256226d commit d7bf739

File tree

5 files changed

+30
-1
lines changed

5 files changed

+30
-1
lines changed

lib/Serialization/Deserialization.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2995,6 +2995,7 @@ class DeclDeserializer {
29952995
DeclID accessorStorageDeclID;
29962996
bool overriddenAffectsABI, needsNewVTableEntry, isTransparent;
29972997
DeclID opaqueReturnTypeID;
2998+
bool isUserAccessible;
29982999
ArrayRef<uint64_t> nameAndDependencyIDs;
29993000

30003001
if (!isAccessor) {
@@ -3012,6 +3013,7 @@ class DeclDeserializer {
30123013
rawAccessLevel,
30133014
needsNewVTableEntry,
30143015
opaqueReturnTypeID,
3016+
isUserAccessible,
30153017
nameAndDependencyIDs);
30163018
} else {
30173019
decls_block::AccessorLayout::readRecord(scratch, contextID, isImplicit,
@@ -3199,6 +3201,9 @@ class DeclDeserializer {
31993201
cast<OpaqueTypeDecl>(MF.getDecl(opaqueReturnTypeID)));
32003202
}
32013203

3204+
if (!isAccessor)
3205+
fn->setUserAccessible(isUserAccessible);
3206+
32023207
return fn;
32033208
}
32043209

lib/Serialization/ModuleFormat.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ const uint16_t SWIFTMODULE_VERSION_MAJOR = 0;
5555
/// describe what change you made. The content of this comment isn't important;
5656
/// it just ensures a conflict if two people change the module format.
5757
/// Don't worry about adhering to the 80-column limit for this line.
58-
const uint16_t SWIFTMODULE_VERSION_MINOR = 573; // @async on SILFunctionType
58+
const uint16_t SWIFTMODULE_VERSION_MINOR = 574; // reapply isUserAccessible
5959

6060
/// A standard hash seed used for all string hashes in a serialized module.
6161
///
@@ -1308,6 +1308,7 @@ namespace decls_block {
13081308
AccessLevelField, // access level
13091309
BCFixed<1>, // requires a new vtable slot
13101310
DeclIDField, // opaque result type decl
1311+
BCFixed<1>, // isUserAccessible?
13111312
BCArray<IdentifierIDField> // name components,
13121313
// followed by TypeID dependencies
13131314
// The record is trailed by:

lib/Serialization/Serialization.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3437,6 +3437,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
34373437
rawAccessLevel,
34383438
fn->needsNewVTableEntry(),
34393439
S.addDeclRef(fn->getOpaqueResultTypeDecl()),
3440+
fn->isUserAccessible(),
34403441
nameComponentsAndDependencies);
34413442

34423443
writeGenericParams(fn->getGenericParams());
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
public enum MyEnum {
2+
case foo, bar
3+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/// Check that serialized non user accessible functions are not autocompleted.
2+
/// rdar://problem/53891642
3+
/// SR-7460
4+
5+
// RUN: %empty-directory(%t)
6+
// RUN: %target-swift-frontend -emit-module %S/Inputs/complete_user_accessibility_helper.swift -module-name helper -emit-module-path %t/helper.swiftmodule
7+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=USER-ACCESS -I %t | %FileCheck %s -check-prefix=USER-ACCESS
8+
9+
import helper
10+
11+
{
12+
_ = MyEnum.#^USER-ACCESS^#
13+
// USER-ACCESS: Begin completions
14+
// USER-ACCESS-DAG: Keyword[self]/CurrNominal: self[#MyEnum.Type#]; name=self
15+
// USER-ACCESS-DAG: Keyword/CurrNominal: Type[#MyEnum.Type#]; name=Type
16+
// USER-ACCESS-DAG: Decl[EnumElement]/CurrNominal: foo[#MyEnum#]; name=foo
17+
// USER-ACCESS-DAG: Decl[EnumElement]/CurrNominal: bar[#MyEnum#]; name=bar
18+
// USER-ACCESS-NOT: __derived_enum_equals
19+
}

0 commit comments

Comments
 (0)