MCPcopy Create free account
hub / github.com/beefytech/Beef / CreateTupleType

Method CreateTupleType

IDEHelper/Compiler/BfModuleTypeUtils.cpp:8384–8439  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8382}
8383
8384BfTypeInstance* BfModule::CreateTupleType(const BfTypeVector& fieldTypes, const Array<String>& fieldNames, bool allowVar)
8385{
8386 auto baseType = (BfTypeInstance*)ResolveTypeDef(mContext->mCompiler->mValueTypeTypeDef);
8387
8388 BfTupleType* tupleType = NULL;
8389
8390 auto actualTupleType = mContext->mTupleTypePool.Get();
8391 actualTupleType->Init(baseType->mTypeDef->mProject, baseType);
8392
8393 bool isUnspecialzied = false;
8394 for (int fieldIdx = 0; fieldIdx < (int)fieldTypes.size(); fieldIdx++)
8395 {
8396 String fieldName;
8397 if (fieldIdx < (int)fieldNames.size())
8398 fieldName = fieldNames[fieldIdx];
8399 if (fieldName.empty())
8400 fieldName = StrFormat("%d", fieldIdx);
8401 BfFieldDef* fieldDef = actualTupleType->AddField(fieldName);
8402
8403 auto fieldType = fieldTypes[fieldIdx];
8404 if ((fieldType->IsUnspecializedType()) || (fieldType->IsVar()))
8405 isUnspecialzied = true;
8406 }
8407 tupleType = actualTupleType;
8408
8409 tupleType->mContext = mContext;
8410 tupleType->mFieldInstances.Resize(fieldTypes.size());
8411 for (int fieldIdx = 0; fieldIdx < (int)fieldTypes.size(); fieldIdx++)
8412 {
8413 BfFieldInstance* fieldInstance = (BfFieldInstance*)&tupleType->mFieldInstances[fieldIdx];
8414 fieldInstance->mFieldIdx = fieldIdx;
8415 BfType* fieldType = fieldTypes[fieldIdx];
8416 if ((fieldType->IsVar()) && (!allowVar))
8417 fieldType = mContext->mBfObjectType;
8418 fieldInstance->SetResolvedType(fieldType);
8419 fieldInstance->mOwner = tupleType;
8420 }
8421
8422 tupleType->mIsUnspecializedType = false;
8423 tupleType->mIsUnspecializedTypeVariation = false;
8424 if (isUnspecialzied)
8425 {
8426 tupleType->mIsUnspecializedType = true;
8427 tupleType->mIsUnspecializedTypeVariation = true;
8428 }
8429
8430 auto resolvedTupleType = ResolveType(tupleType);
8431 if (resolvedTupleType != tupleType)
8432 {
8433 BF_ASSERT(tupleType->mContext != NULL);
8434 tupleType->Dispose();
8435 mContext->mTupleTypePool.GiveBack((BfTupleType*)tupleType);
8436 }
8437
8438 return (BfTupleType*)resolvedTupleType;
8439}
8440
8441BfTypeInstance* BfModule::SantizeTupleType(BfTypeInstance* tupleType)

Callers 5

CheckMethodMethod · 0.80
LoadLocalMethod · 0.80
VisitMethod · 0.80

Calls 11

SetResolvedTypeMethod · 0.80
GiveBackMethod · 0.80
GetMethod · 0.45
InitMethod · 0.45
sizeMethod · 0.45
emptyMethod · 0.45
AddFieldMethod · 0.45
IsUnspecializedTypeMethod · 0.45
IsVarMethod · 0.45
ResizeMethod · 0.45
DisposeMethod · 0.45

Tested by

no test coverage detected