@@ -179,16 +179,8 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
179
179
}
180
180
181
181
void visitOneOfDecl (OneOfDecl *OOD) {
182
- if (IsSecondPass) {
183
- for (auto elt : OOD->getElements ())
184
- visitOneOfElementDecl (elt);
185
-
186
- checkExplicitConformance (OOD, OOD->getDeclaredType (),
187
- OOD->getInherited ());
188
- return ;
189
- }
190
-
191
- checkInherited (OOD, OOD->getDeclaredType (), OOD->getInherited ());
182
+ if (!IsSecondPass)
183
+ checkInherited (OOD, OOD->getDeclaredType (), OOD->getInherited ());
192
184
193
185
for (auto elt : OOD->getElements ())
194
186
visitOneOfElementDecl (elt);
@@ -199,53 +191,39 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
199
191
}
200
192
201
193
void visitStructDecl (StructDecl *SD) {
202
- if (IsSecondPass) {
203
- for (Decl *Member : SD->getMembers ())
204
- visit (Member);
205
-
206
- checkExplicitConformance (SD, SD->getDeclaredType (),
207
- SD->getInherited ());
208
- return ;
209
- }
210
-
211
- checkInherited (SD, SD->getDeclaredType (), SD->getInherited ());
194
+ if (!IsSecondPass)
195
+ checkInherited (SD, SD->getDeclaredType (), SD->getInherited ());
212
196
213
197
for (Decl *Member : SD->getMembers ()) {
214
198
visit (Member);
215
199
}
216
-
217
- // FIXME: We should come up with a better way to represent this implied
218
- // constructor.
219
- SmallVector<TupleTypeElt, 8 > TupleElts;
220
- for (Decl *Member : SD->getMembers ())
221
- if (VarDecl *VarD = dyn_cast<VarDecl>(Member))
222
- if (!VarD->isProperty ())
223
- TupleElts.push_back (TupleTypeElt (VarD->getType (), VarD->getName ()));
224
- TupleType *TT = TupleType::get (TupleElts, TC.Context );
225
- Type CreateTy = FunctionType::get (TT, SD->getDeclaredType (), TC.Context );
226
- cast<OneOfElementDecl>(SD->getMembers ().back ())->setType (CreateTy);
227
- cast<OneOfElementDecl>(SD->getMembers ().back ())->setArgumentType (TT);
228
-
200
+
201
+ if (!IsSecondPass) {
202
+ // FIXME: We should come up with a better way to represent this implied
203
+ // constructor.
204
+ SmallVector<TupleTypeElt, 8 > TupleElts;
205
+ for (Decl *Member : SD->getMembers ())
206
+ if (VarDecl *VarD = dyn_cast<VarDecl>(Member))
207
+ if (!VarD->isProperty ())
208
+ TupleElts.push_back (TupleTypeElt (VarD->getType (),
209
+ VarD->getName ()));
210
+ TupleType *TT = TupleType::get (TupleElts, TC.Context );
211
+ Type CreateTy = FunctionType::get (TT, SD->getDeclaredType (), TC.Context );
212
+ cast<OneOfElementDecl>(SD->getMembers ().back ())->setType (CreateTy);
213
+ cast<OneOfElementDecl>(SD->getMembers ().back ())->setArgumentType (TT);
214
+ }
215
+
229
216
if (!IsFirstPass)
230
217
checkExplicitConformance (SD, SD->getDeclaredType (),
231
218
SD->getInherited ());
232
219
}
233
220
234
221
void visitClassDecl (ClassDecl *CD) {
235
- if (IsSecondPass) {
236
- for (Decl *Member : CD->getMembers ())
237
- visit (Member);
222
+ if (!IsSecondPass)
223
+ checkInherited (CD, CD->getDeclaredType (), CD->getInherited ());
238
224
239
- checkExplicitConformance (CD, CD->getDeclaredType (),
240
- CD->getInherited ());
241
- return ;
242
- }
243
-
244
- checkInherited (CD, CD->getDeclaredType (), CD->getInherited ());
245
-
246
- for (Decl *Member : CD->getMembers ()) {
225
+ for (Decl *Member : CD->getMembers ())
247
226
visit (Member);
248
- }
249
227
250
228
if (!IsFirstPass)
251
229
checkExplicitConformance (CD, CD->getDeclaredType (),
@@ -318,36 +296,25 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
318
296
}
319
297
320
298
void visitExtensionDecl (ExtensionDecl *ED) {
321
- if (IsSecondPass) {
322
- for (Decl *Member : ED->getMembers ())
323
- // First recursively type check each thing in the extension.
324
- visit (Member);
325
-
326
- checkExplicitConformance (ED, ED->getExtendedType (),
327
- ED->getInherited ());
328
- return ;
329
- }
330
-
331
-
332
- if (TC.validateType (ED->getExtendedType (), IsFirstPass)) {
333
- ED->setExtendedType (ErrorType::get (TC.Context ));
334
- } else {
335
- Type ExtendedTy = ED->getExtendedType ();
336
- if (!ExtendedTy->is <OneOfType>() && !ExtendedTy->is <StructType>() &&
337
- !ExtendedTy->is <ClassType>() && !ExtendedTy->is <ErrorType>()) {
338
- TC.diagnose (ED->getLocStart (), diag::non_nominal_extension,
339
- ExtendedTy->is <ProtocolType>(), ExtendedTy);
340
- // FIXME: It would be nice to point out where we found the named type
341
- // declaration, if any.
342
- }
299
+ if (!IsSecondPass) {
300
+ if (TC.validateType (ED->getExtendedType (), IsFirstPass)) {
301
+ ED->setExtendedType (ErrorType::get (TC.Context ));
302
+ } else {
303
+ Type ExtendedTy = ED->getExtendedType ();
304
+ if (!ExtendedTy->is <OneOfType>() && !ExtendedTy->is <StructType>() &&
305
+ !ExtendedTy->is <ClassType>() && !ExtendedTy->is <ErrorType>()) {
306
+ TC.diagnose (ED->getLocStart (), diag::non_nominal_extension,
307
+ ExtendedTy->is <ProtocolType>(), ExtendedTy);
308
+ // FIXME: It would be nice to point out where we found the named type
309
+ // declaration, if any.
310
+ }
343
311
344
- checkInherited (ED, ExtendedTy, ED->getInherited ());
312
+ checkInherited (ED, ExtendedTy, ED->getInherited ());
313
+ }
345
314
}
346
-
347
- for (Decl *Member : ED->getMembers ()) {
348
- // First recursively type check each thing in the extension.
315
+
316
+ for (Decl *Member : ED->getMembers ())
349
317
visit (Member);
350
- }
351
318
352
319
if (!IsFirstPass)
353
320
checkExplicitConformance (ED, ED->getExtendedType (),
0 commit comments