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

Method CreateFieldData

IDEHelper/Compiler/BfModule.cpp:6024–6168  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6022}
6023
6024BfIRValue BfModule::CreateFieldData(BfFieldInstance* fieldInstance, int customAttrIdx)
6025{
6026 bool isComptimeArg = mBfIRBuilder->mIgnoreWrites;
6027 BfFieldDef* fieldDef = fieldInstance->GetFieldDef();
6028
6029 auto typeInstance = fieldInstance->mOwner;
6030
6031 BfType* intType = GetPrimitiveType(BfTypeCode_Int32);
6032 BfType* intPtrType = GetPrimitiveType(BfTypeCode_IntPtr);
6033 BfType* shortType = GetPrimitiveType(BfTypeCode_Int16);
6034 BfType* typeIdType = intType;
6035
6036 BfTypeInstance* reflectFieldDataType = ResolveTypeDef(mCompiler->mReflectFieldDataDef)->ToTypeInstance();
6037 BfIRValue emptyValueType = mBfIRBuilder->mIgnoreWrites ?
6038 mBfIRBuilder->CreateConstAgg(mBfIRBuilder->MapTypeInst(reflectFieldDataType->mBaseType), SizedArray<BfIRValue, 1>()) :
6039 mBfIRBuilder->CreateConstAgg_Value(mBfIRBuilder->MapTypeInst(reflectFieldDataType->mBaseType), SizedArray<BfIRValue, 1>());
6040 BfIRValue fieldNameConst = GetStringObjectValue(fieldDef->mName, !mIsComptimeModule);
6041 bool is32Bit = mCompiler->mSystem->mPtrSize == 4;
6042
6043 int typeId = 0;
6044 auto fieldType = fieldInstance->GetResolvedType();
6045 if (fieldType->IsGenericParam())
6046 {
6047 //TODO:
6048 }
6049 else
6050 typeId = fieldType->mTypeId;
6051
6052 BfFieldFlags fieldFlags = (BfFieldFlags)0;
6053
6054 if (fieldDef->mProtection == BfProtection_Protected)
6055 fieldFlags = (BfFieldFlags)(fieldFlags | BfFieldFlags_Protected);
6056 if (fieldDef->mProtection == BfProtection_Public)
6057 fieldFlags = (BfFieldFlags)(fieldFlags | BfFieldFlags_Public);
6058 if (fieldDef->mIsStatic)
6059 fieldFlags = (BfFieldFlags)(fieldFlags | BfFieldFlags_Static);
6060 if (fieldDef->mIsConst)
6061 fieldFlags = (BfFieldFlags)(fieldFlags | BfFieldFlags_Const);
6062 if (fieldDef->IsEnumCaseEntry())
6063 fieldFlags = (BfFieldFlags)(fieldFlags | BfFieldFlags_EnumCase);
6064 if (fieldDef->mIsReadOnly)
6065 fieldFlags = (BfFieldFlags)(fieldFlags | BfFieldFlags_ReadOnly);
6066 if (fieldInstance->IsAppendedObject())
6067 fieldFlags = (BfFieldFlags)(fieldFlags | BfFieldFlags_Appended);
6068
6069 BfIRValue constValue;
6070 BfIRValue constValue2;
6071 if (fieldInstance->mIsEnumPayloadCase)
6072 {
6073 int tagId = -fieldInstance->mDataIdx - 1;
6074 constValue = mBfIRBuilder->CreateConst(BfTypeCode_IntPtr, tagId);
6075 }
6076 else if (fieldInstance->GetFieldDef()->mIsConst)
6077 {
6078 if (fieldInstance->mConstIdx != -1)
6079 {
6080 auto constant = typeInstance->mConstHolder->GetConstantById(fieldInstance->mConstIdx);
6081 uint64 val = constant->mUInt64;

Callers

nothing calls this directly

Calls 15

BfTypedValueClass · 0.85
GetFieldDefMethod · 0.80
CreateConstAggMethod · 0.80
MapTypeInstMethod · 0.80
CreateConstAgg_ValueMethod · 0.80
GetResolvedTypeMethod · 0.80
IsEnumCaseEntryMethod · 0.80
IsAppendedObjectMethod · 0.80
GetConstantByIdMethod · 0.80
IsAddrMethod · 0.80
CreatePtrToIntMethod · 0.80
ToTypeInstanceMethod · 0.45

Tested by

no test coverage detected