| 9581 | } |
| 9582 | |
| 9583 | BfType* BfModule::ResolveType(BfType* lookupType, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags) |
| 9584 | { |
| 9585 | BfResolvedTypeSet::LookupContext lookupCtx; |
| 9586 | lookupCtx.mModule = this; |
| 9587 | lookupCtx.mResolveFlags = resolveFlags; |
| 9588 | BfResolvedTypeSet::EntryRef resolvedEntry; |
| 9589 | bool inserted = mContext->mResolvedTypes.Insert(lookupType, &lookupCtx, &resolvedEntry); |
| 9590 | |
| 9591 | if (!resolvedEntry) |
| 9592 | return NULL; |
| 9593 | |
| 9594 | if (!inserted) |
| 9595 | { |
| 9596 | auto resolvedTypeRef = resolvedEntry->mValue; |
| 9597 | PopulateType(resolvedTypeRef, populateType); |
| 9598 | return resolvedTypeRef; |
| 9599 | } |
| 9600 | |
| 9601 | if (lookupType->IsGenericTypeInstance()) |
| 9602 | CheckUnspecializedGenericType((BfTypeInstance*)lookupType, populateType); |
| 9603 | |
| 9604 | if (lookupType->IsTuple()) |
| 9605 | { |
| 9606 | auto tupleType = (BfTupleType*)lookupType; |
| 9607 | tupleType->Finish(); |
| 9608 | } |
| 9609 | |
| 9610 | resolvedEntry->mValue = lookupType; |
| 9611 | InitType(lookupType, populateType); |
| 9612 | return lookupType; |
| 9613 | } |
| 9614 | |
| 9615 | bool BfModule::IsUnboundGeneric(BfType* type) |
| 9616 | { |
no test coverage detected