Skip to content

Commit de1dc0e

Browse files
committed
[TypeChecker] Only type-check default initializer when computing property wrapper
Assert that if there is an initializer it is already type-checked.
1 parent 418e87e commit de1dc0e

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

lib/Sema/TypeCheckStorage.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2873,16 +2873,17 @@ PropertyWrapperInitializerInfoRequest::evaluate(Evaluator &evaluator,
28732873
&& parentPBD->isDefaultInitializable(patternNumber)
28742874
&& !wrapperInfo.defaultInit) {
28752875
auto ty = parentPBD->getPattern(patternNumber)->getType();
2876-
if (auto defaultInit = TypeChecker::buildDefaultInitializer(ty))
2877-
parentPBD->setInit(patternNumber, defaultInit);
2878-
}
2879-
2880-
if (parentPBD->isInitialized(patternNumber) &&
2881-
!parentPBD->isInitializerChecked(patternNumber)) {
2882-
TypeChecker::typeCheckPatternBinding(parentPBD, patternNumber);
2876+
if (auto defaultInit = TypeChecker::buildDefaultInitializer(ty)) {
2877+
typeCheckSynthesizedWrapperInitializer(var, defaultInit);
2878+
parentPBD->setInit(0, defaultInit);
2879+
parentPBD->setInitializerChecked(0);
2880+
}
28832881
}
28842882

28852883
if ((initializer = parentPBD->getInit(patternNumber))) {
2884+
assert(parentPBD->isInitializerChecked(0) &&
2885+
"Initializer should to be type-checked");
2886+
28862887
pbd->setInit(0, initializer);
28872888
pbd->setInitializerChecked(0);
28882889
wrappedValue = findWrappedValuePlaceholder(initializer);

0 commit comments

Comments
 (0)