Skip to content

Commit 525e256

Browse files
committed
[IRGen] Pass argument/table to builders.
Previously, the various generic builders implemented the methods addGenericArgument and addGenericWitnessTable without being provided what argument or witness table they were to add (because it was not previously needed). Now, the GenericRequirement is passed along to both methods.
1 parent edab098 commit 525e256

File tree

6 files changed

+31
-20
lines changed

6 files changed

+31
-20
lines changed

lib/IRGen/ClassMetadataVisitor.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,13 @@ class ClassMetadataScanner : public ClassMetadataVisitor<Impl> {
204204
addPointer();
205205
}
206206
}
207-
void addGenericArgument(ClassDecl *forClass) { addPointer(); }
208-
void addGenericWitnessTable(ClassDecl *forClass) { addPointer(); }
207+
void addGenericArgument(GenericRequirement requirement, ClassDecl *forClass) {
208+
addPointer();
209+
}
210+
void addGenericWitnessTable(GenericRequirement requirement,
211+
ClassDecl *forClass) {
212+
addPointer();
213+
}
209214
void addPlaceholder(MissingMemberDecl *MMD) {
210215
for (auto i : range(MMD->getNumberOfVTableEntries())) {
211216
(void)i;

lib/IRGen/EnumMetadataVisitor.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ class EnumMetadataScanner : public EnumMetadataVisitor<Impl> {
8282
void addMetadataFlags() { addPointer(); }
8383
void addValueWitnessTable() { addPointer(); }
8484
void addNominalTypeDescriptor() { addPointer(); }
85-
void addGenericArgument() { addPointer(); }
86-
void addGenericWitnessTable() { addPointer(); }
85+
void addGenericArgument(GenericRequirement requirement) { addPointer(); }
86+
void addGenericWitnessTable(GenericRequirement requirement) { addPointer(); }
8787
void addPayloadSize() { addPointer(); }
8888
void noteStartOfTypeSpecificMembers() {}
8989

lib/IRGen/GenMeta.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2869,11 +2869,13 @@ namespace {
28692869
llvm_unreachable("Fixed class metadata cannot have missing members");
28702870
}
28712871

2872-
void addGenericArgument(ClassDecl *forClass) {
2872+
void addGenericArgument(GenericRequirement requirement,
2873+
ClassDecl *forClass) {
28732874
llvm_unreachable("Fixed class metadata cannot have generic parameters");
28742875
}
28752876

2876-
void addGenericWitnessTable(ClassDecl *forClass) {
2877+
void addGenericWitnessTable(GenericRequirement requirement,
2878+
ClassDecl *forClass) {
28772879
llvm_unreachable("Fixed class metadata cannot have generic requirements");
28782880
}
28792881
};
@@ -2908,12 +2910,14 @@ namespace {
29082910
}
29092911
}
29102912

2911-
void addGenericArgument(ClassDecl *forClass) {
2913+
void addGenericArgument(GenericRequirement requirement,
2914+
ClassDecl *forClass) {
29122915
// Filled in at runtime.
29132916
B.addNullPointer(IGM.TypeMetadataPtrTy);
29142917
}
29152918

2916-
void addGenericWitnessTable(ClassDecl *forClass) {
2919+
void addGenericWitnessTable(GenericRequirement requirement,
2920+
ClassDecl *forClass) {
29172921
// Filled in at runtime.
29182922
B.addNullPointer(IGM.WitnessTablePtrTy);
29192923
}
@@ -3499,11 +3503,11 @@ namespace {
34993503
B.addAlignmentPadding(super::IGM.getPointerAlignment());
35003504
}
35013505

3502-
void addGenericArgument() {
3506+
void addGenericArgument(GenericRequirement requirement) {
35033507
llvm_unreachable("Concrete type metadata cannot have generic parameters");
35043508
}
35053509

3506-
void addGenericWitnessTable() {
3510+
void addGenericWitnessTable(GenericRequirement requirement) {
35073511
llvm_unreachable("Concrete type metadata cannot have generic requirements");
35083512
}
35093513
};
@@ -3733,11 +3737,11 @@ namespace {
37333737
B.add(emitNominalTypeDescriptor());
37343738
}
37353739

3736-
void addGenericArgument() {
3740+
void addGenericArgument(GenericRequirement requirement) {
37373741
llvm_unreachable("Concrete type metadata cannot have generic parameters");
37383742
}
37393743

3740-
void addGenericWitnessTable() {
3744+
void addGenericWitnessTable(GenericRequirement requirement) {
37413745
llvm_unreachable("Concrete type metadata cannot have generic requirements");
37423746
}
37433747
};

lib/IRGen/MetadataLayout.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -314,18 +314,20 @@ ClassMetadataLayout::ClassMetadataLayout(IRGenModule &IGM, ClassDecl *decl)
314314
super::noteStartOfGenericRequirements(forClass);
315315
}
316316

317-
void addGenericWitnessTable(ClassDecl *forClass) {
317+
void addGenericWitnessTable(GenericRequirement requirement,
318+
ClassDecl *forClass) {
318319
if (forClass == Target) {
319320
Layout.NumImmediateMembers++;
320321
}
321-
super::addGenericWitnessTable(forClass);
322+
super::addGenericWitnessTable(requirement, forClass);
322323
}
323324

324-
void addGenericArgument(ClassDecl *forClass) {
325+
void addGenericArgument(GenericRequirement requirement,
326+
ClassDecl *forClass) {
325327
if (forClass == Target) {
326328
Layout.NumImmediateMembers++;
327329
}
328-
super::addGenericArgument(forClass);
330+
super::addGenericArgument(requirement, forClass);
329331
}
330332

331333
void addMethod(SILDeclRef fn) {

lib/IRGen/NominalMetadataVisitor.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,9 @@ template <class Impl> class NominalMetadataVisitor
5353
GenericTypeRequirements requirements(super::IGM, typeDecl);
5454
for (auto reqt : requirements.getRequirements()) {
5555
if (reqt.Protocol) {
56-
asImpl().addGenericWitnessTable(args...);
56+
asImpl().addGenericWitnessTable(reqt, args...);
5757
} else {
58-
asImpl().addGenericArgument(args...);
58+
asImpl().addGenericArgument(reqt, args...);
5959
}
6060
}
6161

lib/IRGen/StructMetadataVisitor.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ class StructMetadataScanner : public StructMetadataVisitor<Impl> {
8787
void addValueWitnessTable() { addPointer(); }
8888
void addNominalTypeDescriptor() { addPointer(); }
8989
void addFieldOffset(VarDecl *) { addInt32(); }
90-
void addGenericArgument() { addPointer(); }
91-
void addGenericWitnessTable() { addPointer(); }
90+
void addGenericArgument(GenericRequirement requirement) { addPointer(); }
91+
void addGenericWitnessTable(GenericRequirement requirement) { addPointer(); }
9292
void noteStartOfTypeSpecificMembers() {}
9393

9494
void noteEndOfFieldOffsets() {

0 commit comments

Comments
 (0)