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

Method CreateConstant

IDEHelper/Compiler/CeMachine.cpp:4769–5125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4767 }
4768
4769BfIRValue CeContext::CreateConstant(BfModule* module, uint8* ptr, BfType* bfType, BfType** outType)
4770{
4771 auto ceModule = mCeMachine->mCeModule;
4772 BfIRBuilder* irBuilder = module->mBfIRBuilder;
4773 int32 ptrSize = module->mSystem->mPtrSize;
4774
4775 uint8* memStart = mMemory.mVals;
4776 int memSize = mMemory.mSize;
4777
4778 if (bfType->IsPrimitiveType())
4779 {
4780 auto primType = (BfPrimitiveType*)bfType;
4781
4782 auto typeCode = primType->mTypeDef->mTypeCode;
4783 if (typeCode == BfTypeCode_IntPtr)
4784 typeCode = (ceModule->mCompiler->mSystem->mPtrSize == 4) ? BfTypeCode_Int32 : BfTypeCode_Int64;
4785 else if (typeCode == BfTypeCode_UIntPtr)
4786 typeCode = (ceModule->mCompiler->mSystem->mPtrSize == 4) ? BfTypeCode_UInt32 : BfTypeCode_UInt64;
4787
4788 switch (typeCode)
4789 {
4790 case BfTypeCode_None:
4791 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, 0);
4792 case BfTypeCode_Int8:
4793 CE_CREATECONST_CHECKPTR(ptr, sizeof(int8));
4794 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, *(int8*)ptr);
4795 case BfTypeCode_UInt8:
4796 case BfTypeCode_Boolean:
4797 case BfTypeCode_Char8:
4798 CE_CREATECONST_CHECKPTR(ptr, sizeof(uint8));
4799 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, *(uint8*)ptr);
4800 case BfTypeCode_Int16:
4801 CE_CREATECONST_CHECKPTR(ptr, sizeof(int16));
4802 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, *(int16*)ptr);
4803 case BfTypeCode_UInt16:
4804 case BfTypeCode_Char16:
4805 CE_CREATECONST_CHECKPTR(ptr, sizeof(uint16));
4806 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, *(uint16*)ptr);
4807 case BfTypeCode_Int32:
4808 CE_CREATECONST_CHECKPTR(ptr, sizeof(int32));
4809 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, *(int32*)ptr);
4810 case BfTypeCode_UInt32:
4811 case BfTypeCode_Char32:
4812 CE_CREATECONST_CHECKPTR(ptr, sizeof(uint32));
4813 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, (uint64) * (uint32*)ptr);
4814 case BfTypeCode_Int64:
4815 case BfTypeCode_UInt64:
4816 CE_CREATECONST_CHECKPTR(ptr, sizeof(int64));
4817 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, *(uint64*)ptr);
4818 case BfTypeCode_Float:
4819 CE_CREATECONST_CHECKPTR(ptr, sizeof(float));
4820 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, *(float*)ptr);
4821 case BfTypeCode_Double:
4822 CE_CREATECONST_CHECKPTR(ptr, sizeof(double));
4823 return irBuilder->CreateConst(primType->mTypeDef->mTypeCode, *(double*)ptr);
4824 }
4825
4826 return BfIRValue();

Callers 2

LoadValueMethod · 0.80
GetCustomAttributeMethod · 0.80

Calls 15

BfIRValueClass · 0.85
FailFunction · 0.85
GetUndefConstValueMethod · 0.80
MapTypeMethod · 0.80
CreateConstNullMethod · 0.80
GetStringObjectValueMethod · 0.80
CreateConstAggMethod · 0.80
GetStringCharPtrMethod · 0.80
CreateConstAggZeroMethod · 0.80
CreateTypeDataRefMethod · 0.80
CreateConstBoxMethod · 0.80
GetUnionInnerTypeMethod · 0.80

Tested by

no test coverage detected