| 2934 | } |
| 2935 | |
| 2936 | void BfClosureType::Init(BfProject* bfProject) |
| 2937 | { |
| 2938 | auto srcTypeDef = mSrcDelegate->mTypeDef; |
| 2939 | auto system = mSrcDelegate->mModule->mSystem; |
| 2940 | |
| 2941 | mTypeDef = new BfTypeDef(); |
| 2942 | mTypeDef->mSystem = system; |
| 2943 | mTypeDef->mSource = &mSource; |
| 2944 | mTypeDef->mSource->mRefCount++; |
| 2945 | mTypeDef->mProject = bfProject; |
| 2946 | mTypeDef->mTypeCode = srcTypeDef->mTypeCode; |
| 2947 | mTypeDef->mName = system->GetAtom(srcTypeDef->mName->mString + mNameAdd); |
| 2948 | // Purposely leave out 'mOuterType' - this fails if the outer type is generic |
| 2949 | //mTypeDef->mOuterType = srcTypeDef->mOuterType; |
| 2950 | mTypeDef->mNamespace = srcTypeDef->mNamespace; |
| 2951 | system->AddNamespaceUsage(mTypeDef->mNamespace, mTypeDef->mProject); |
| 2952 | mTypeDef->mHash = srcTypeDef->mHash; |
| 2953 | mTypeDef->mSignatureHash = srcTypeDef->mSignatureHash; |
| 2954 | // mTypeDef->mFullName = srcTypeDef->mFullName; |
| 2955 | // if (!mTypeDef->mFullName.mParts.IsEmpty()) |
| 2956 | // mTypeDef->mFullName.mParts.pop_back(); |
| 2957 | // mTypeDef->mFullName.mParts.push_back(mTypeDef->mName); |
| 2958 | if (srcTypeDef->mFullName.mSize > 0) |
| 2959 | mTypeDef->mFullName.Set(srcTypeDef->mFullName.mParts, srcTypeDef->mFullName.mSize - 1, &mTypeDef->mName, 1); |
| 2960 | else |
| 2961 | mTypeDef->mFullName.Set(&mTypeDef->mName, 1, NULL, 0); |
| 2962 | system->TrackName(mTypeDef); |
| 2963 | |
| 2964 | mTypeDef->mTypeCode = BfTypeCode_Object; |
| 2965 | mTypeDef->mIsDelegate = true; |
| 2966 | mTypeDef->mIsClosure = true; |
| 2967 | mTypeDef->mDefState = BfTypeDef::DefState_Defined; |
| 2968 | |
| 2969 | auto baseDirectTypeRef = BfAstNode::ZeroedAlloc<BfDirectTypeReference>(); |
| 2970 | baseDirectTypeRef->Init(mSrcDelegate); |
| 2971 | mDirectAllocNodes.push_back(baseDirectTypeRef); |
| 2972 | mTypeDef->mBaseTypes.push_back(baseDirectTypeRef); |
| 2973 | //mTypeDef->mBaseTypes.push_back(BfDefBuilder::AllocTypeReference(&mSource, mSrcDelegate)); |
| 2974 | |
| 2975 | mCreatedTypeDef = true; |
| 2976 | //mTypeDef->mBaseTypes.push_back(srcTypeDef); |
| 2977 | } |
| 2978 | |
| 2979 | BfFieldDef* BfClosureType::AddField(BfType* type, const StringImpl& name) |
| 2980 | { |