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

Method InjectNewRevision

IDEHelper/Compiler/BfSystem.cpp:3020–3215  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3018}
3019
3020void BfSystem::InjectNewRevision(BfTypeDef* typeDef)
3021{
3022 BfLogSys(this, "InjectNewRevision from %p (decl:%p) into %p (decl:%p)\n", typeDef->mNextRevision, typeDef->mNextRevision->mTypeDeclaration, typeDef, typeDef->mTypeDeclaration);
3023
3024 bool setDeclaringType = !typeDef->mIsCombinedPartial;
3025
3026 auto nextTypeDef = typeDef->mNextRevision;
3027
3028 for (auto prevProperty : typeDef->mProperties)
3029 delete prevProperty;
3030 typeDef->mProperties = nextTypeDef->mProperties;
3031 if (setDeclaringType)
3032 for (auto prop : typeDef->mProperties)
3033 prop->mDeclaringType = typeDef;
3034 nextTypeDef->mProperties.Clear();
3035
3036 if ((typeDef->mDefState != BfTypeDef::DefState_Signature_Changed) &&
3037 (typeDef->mDefState != BfTypeDef::DefState_New))
3038 {
3039 BF_ASSERT(typeDef->mMethods.size() == nextTypeDef->mMethods.size());
3040
3041 for (auto prop : typeDef->mProperties)
3042 {
3043 for (int methodIdx = 0; methodIdx < (int)prop->mMethods.size(); methodIdx++)
3044 prop->mMethods[methodIdx] = typeDef->mMethods[prop->mMethods[methodIdx]->mIdx];
3045 }
3046
3047 for (int opIdx = 0; opIdx < (int)typeDef->mOperators.size(); opIdx++)
3048 {
3049 typeDef->mOperators[opIdx] = (BfOperatorDef*)typeDef->mMethods[typeDef->mOperators[opIdx]->mIdx];
3050 }
3051
3052 // Remap methods in-place to previous revision's method list
3053 for (int methodIdx = 0; methodIdx < (int)typeDef->mMethods.size(); methodIdx++)
3054 {
3055 auto methodDef = typeDef->mMethods[methodIdx];
3056 auto nextMethodDef = nextTypeDef->mMethods[methodIdx];
3057 bool codeChanged = nextMethodDef->mFullHash != methodDef->mFullHash;
3058
3059 for (auto genericParam : methodDef->mGenericParams)
3060 delete genericParam;
3061 for (auto param : methodDef->mParams)
3062 delete param;
3063
3064 if (nextMethodDef->mMethodType == BfMethodType_Operator)
3065 {
3066 auto operatorDef = (BfOperatorDef*)methodDef;
3067 auto nextOperatorDef = (BfOperatorDef*)nextMethodDef;
3068 *operatorDef = *nextOperatorDef;
3069 if (setDeclaringType)
3070 operatorDef->mDeclaringType = typeDef;
3071 }
3072 else
3073 {
3074 *methodDef = *nextMethodDef;
3075 if (setDeclaringType)
3076 methodDef->mDeclaringType = typeDef;
3077 }

Callers 2

UpdateRevisedTypesMethod · 0.80

Calls 2

ClearMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected