| 8439 | } |
| 8440 | |
| 8441 | BfTypeInstance* BfModule::SantizeTupleType(BfTypeInstance* tupleType) |
| 8442 | { |
| 8443 | bool needsSanitize = false; |
| 8444 | for (int fieldIdx = 0; fieldIdx < (int)tupleType->mFieldInstances.size(); fieldIdx++) |
| 8445 | { |
| 8446 | BfFieldInstance* fieldInstance = (BfFieldInstance*)&tupleType->mFieldInstances[fieldIdx]; |
| 8447 | if ((fieldInstance->mResolvedType->IsVar()) || (fieldInstance->mResolvedType->IsLet())) |
| 8448 | { |
| 8449 | needsSanitize = true; |
| 8450 | break; |
| 8451 | } |
| 8452 | } |
| 8453 | |
| 8454 | if (!needsSanitize) |
| 8455 | return tupleType; |
| 8456 | |
| 8457 | BfTypeVector fieldTypes; |
| 8458 | Array<String> fieldNames; |
| 8459 | |
| 8460 | for (int fieldIdx = 0; fieldIdx < (int)tupleType->mFieldInstances.size(); fieldIdx++) |
| 8461 | { |
| 8462 | BfFieldInstance* fieldInstance = (BfFieldInstance*)&tupleType->mFieldInstances[fieldIdx]; |
| 8463 | auto fieldDef = fieldInstance->GetFieldDef(); |
| 8464 | if ((fieldInstance->mResolvedType->IsVar()) || (fieldInstance->mResolvedType->IsLet())) |
| 8465 | fieldTypes.Add(mContext->mBfObjectType); |
| 8466 | else |
| 8467 | fieldTypes.Add(fieldInstance->mResolvedType); |
| 8468 | if (!fieldDef->IsUnnamedTupleField()) |
| 8469 | { |
| 8470 | for (int i = 0; i < fieldIdx; i++) |
| 8471 | fieldNames.Add(String()); |
| 8472 | fieldNames.Add(fieldDef->mName); |
| 8473 | } |
| 8474 | } |
| 8475 | return CreateTupleType(fieldTypes, fieldNames); |
| 8476 | } |
| 8477 | |
| 8478 | BfRefType* BfModule::CreateRefType(BfType* resolvedTypeRef, BfRefType::RefKind refKind) |
| 8479 | { |
no test coverage detected