| 6022 | } |
| 6023 | |
| 6024 | BfIRValue 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; |
nothing calls this directly
no test coverage detected