mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +02:00
Fixed Self
renaming issue
This commit is contained in:
parent
2c630a5ba9
commit
6c66d27ff4
5 changed files with 47 additions and 20 deletions
|
@ -4666,10 +4666,12 @@ void BfCompiler::ProcessAutocompleteTempType()
|
||||||
if ((typeInst->IsUnspecializedType()) || (!typeInst->IsGenericTypeInstance()))
|
if ((typeInst->IsUnspecializedType()) || (!typeInst->IsGenericTypeInstance()))
|
||||||
{
|
{
|
||||||
auto autoComplete = mResolvePassData->mAutoComplete;
|
auto autoComplete = mResolvePassData->mAutoComplete;
|
||||||
if (autoComplete->IsAutocompleteNode(tempTypeDef->mTypeDeclaration->mNameNode))
|
BfAstNode* nameNode = tempTypeDef->mTypeDeclaration->mNameNode;
|
||||||
|
BfAstNode* refNode = nameNode;
|
||||||
|
if (refNode == NULL)
|
||||||
|
refNode = tempTypeDef->mTypeDeclaration->mStaticSpecifier;
|
||||||
|
if (autoComplete->IsAutocompleteNode(refNode))
|
||||||
{
|
{
|
||||||
BfIdentifierNode* nameNode;
|
|
||||||
nameNode = tempTypeDef->mTypeDeclaration->mNameNode;
|
|
||||||
if ((actualTypeDef->mIsCombinedPartial) && (tempTypeDef->mTypeCode == BfTypeCode_Extension))
|
if ((actualTypeDef->mIsCombinedPartial) && (tempTypeDef->mTypeCode == BfTypeCode_Extension))
|
||||||
{
|
{
|
||||||
autoComplete->AddTopLevelNamespaces(tempTypeDef->mTypeDeclaration->mNameNode);
|
autoComplete->AddTopLevelNamespaces(tempTypeDef->mTypeDeclaration->mNameNode);
|
||||||
|
@ -4677,10 +4679,14 @@ void BfCompiler::ProcessAutocompleteTempType()
|
||||||
autoComplete->SetDefinitionLocation(actualTypeDef->mTypeDeclaration->mNameNode);
|
autoComplete->SetDefinitionLocation(actualTypeDef->mTypeDeclaration->mNameNode);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
autoComplete->SetDefinitionLocation(nameNode);
|
autoComplete->SetDefinitionLocation(refNode);
|
||||||
autoComplete->mDefType = actualTypeDef;
|
autoComplete->mDefType = actualTypeDef;
|
||||||
|
|
||||||
|
if (nameNode != NULL)
|
||||||
|
{
|
||||||
autoComplete->mInsertStartIdx = nameNode->GetSrcStart();
|
autoComplete->mInsertStartIdx = nameNode->GetSrcStart();
|
||||||
autoComplete->mInsertEndIdx = nameNode->GetSrcEnd();
|
autoComplete->mInsertEndIdx = nameNode->GetSrcEnd();
|
||||||
|
}
|
||||||
|
|
||||||
if (autoComplete->mResolveType == BfResolveType_GetResultString)
|
if (autoComplete->mResolveType == BfResolveType_GetResultString)
|
||||||
{
|
{
|
||||||
|
|
|
@ -10012,6 +10012,7 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
|
||||||
if ((methodGenericArguments != NULL) && (methodGenericArguments->size() > 0))
|
if ((methodGenericArguments != NULL) && (methodGenericArguments->size() > 0))
|
||||||
wantNumGenericArgs = (int)methodGenericArguments->size();
|
wantNumGenericArgs = (int)methodGenericArguments->size();
|
||||||
BfTypeInstance* resolvedTypeInstance = NULL;
|
BfTypeInstance* resolvedTypeInstance = NULL;
|
||||||
|
BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None;
|
||||||
if (wantCtor)
|
if (wantCtor)
|
||||||
{
|
{
|
||||||
resolvedTypeInstance = targetTypeInst;
|
resolvedTypeInstance = targetTypeInst;
|
||||||
|
@ -10020,7 +10021,7 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
|
||||||
{
|
{
|
||||||
if (auto invocationExpr = BfNodeDynCast<BfInvocationExpression>(methodBoundExpr))
|
if (auto invocationExpr = BfNodeDynCast<BfInvocationExpression>(methodBoundExpr))
|
||||||
{
|
{
|
||||||
auto resolvedType = mModule->ResolveTypeRef(invocationExpr->mTarget, methodGenericArguments);
|
auto resolvedType = mModule->ResolveTypeRef_Ref(invocationExpr->mTarget, methodGenericArguments, BfPopulateType_Data, resolveFlags);
|
||||||
|
|
||||||
if (resolvedType != NULL)
|
if (resolvedType != NULL)
|
||||||
resolvedTypeInstance = resolvedType->ToTypeInstance();
|
resolvedTypeInstance = resolvedType->ToTypeInstance();
|
||||||
|
@ -10036,10 +10037,10 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
|
||||||
BfType* refType;
|
BfType* refType;
|
||||||
if (methodGenericArguments != NULL)
|
if (methodGenericArguments != NULL)
|
||||||
{
|
{
|
||||||
refType = mModule->ResolveTypeRef(identifierNode, methodGenericArguments);
|
refType = mModule->ResolveTypeRef_Ref(identifierNode, methodGenericArguments, BfPopulateType_Data, resolveFlags);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
refType = mModule->ResolveTypeRef(identifierNode, NULL);
|
refType = mModule->ResolveTypeRef_Ref(identifierNode, NULL, BfPopulateType_Data, resolveFlags);
|
||||||
prevIgnoreErrors.Restore();
|
prevIgnoreErrors.Restore();
|
||||||
|
|
||||||
if ((refType != NULL) && (refType->IsPrimitiveType()))
|
if ((refType != NULL) && (refType->IsPrimitiveType()))
|
||||||
|
@ -10104,7 +10105,7 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
|
||||||
|
|
||||||
if (mModule->mCompiler->mResolvePassData != NULL)
|
if (mModule->mCompiler->mResolvePassData != NULL)
|
||||||
{
|
{
|
||||||
if (!BfNodeIsA<BfMemberReferenceExpression>(targetSrc))
|
if ((!BfNodeIsA<BfMemberReferenceExpression>(targetSrc)) && ((resolveFlags & BfResolveTypeRefFlag_FromIndirectSource) == 0))
|
||||||
mModule->mCompiler->mResolvePassData->HandleTypeReference(targetSrc, resolvedTypeInstance->mTypeDef);
|
mModule->mCompiler->mResolvePassData->HandleTypeReference(targetSrc, resolvedTypeInstance->mTypeDef);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2859,7 +2859,11 @@ bool BfModule::CheckProtection(BfProtectionCheckFlags& flags, BfTypeInstance* me
|
||||||
}
|
}
|
||||||
bool allowPrivate = (curCheckType != NULL) && (memberOwner->IsInstanceOf(curCheckType->mTypeDef));
|
bool allowPrivate = (curCheckType != NULL) && (memberOwner->IsInstanceOf(curCheckType->mTypeDef));
|
||||||
if (curCheckType != NULL)
|
if (curCheckType != NULL)
|
||||||
|
{
|
||||||
allowPrivate |= IsInnerType(curCheckType->mTypeDef, memberOwner->mTypeDef);
|
allowPrivate |= IsInnerType(curCheckType->mTypeDef, memberOwner->mTypeDef);
|
||||||
|
if (memberOwner->mTypeDef->IsGlobalsContainer())
|
||||||
|
allowPrivate |= curCheckType->mTypeDef->mNamespace.StartsWith(memberOwner->mTypeDef->mNamespace);
|
||||||
|
}
|
||||||
if (allowPrivate)
|
if (allowPrivate)
|
||||||
flags = (BfProtectionCheckFlags)(flags | BfProtectionCheckFlag_AllowPrivate | BfProtectionCheckFlag_CheckedPrivate);
|
flags = (BfProtectionCheckFlags)(flags | BfProtectionCheckFlag_AllowPrivate | BfProtectionCheckFlag_CheckedPrivate);
|
||||||
else
|
else
|
||||||
|
|
|
@ -1974,10 +1974,13 @@ public:
|
||||||
void TypeRefNotFound(BfTypeReference* typeRef, const char* appendName = NULL);
|
void TypeRefNotFound(BfTypeReference* typeRef, const char* appendName = NULL);
|
||||||
bool ValidateTypeWildcard(BfAstNode* typeRef, bool isAttributeRef);
|
bool ValidateTypeWildcard(BfAstNode* typeRef, bool isAttributeRef);
|
||||||
void GetDelegateTypeRefAttributes(BfDelegateTypeRef* delegateTypeRef, BfCallingConvention& callingConvention);
|
void GetDelegateTypeRefAttributes(BfDelegateTypeRef* delegateTypeRef, BfCallingConvention& callingConvention);
|
||||||
|
BfType* ResolveTypeRef_Ref(BfTypeReference* typeRef, BfPopulateType populateType, BfResolveTypeRefFlags& resolveFlags, int numGenericArgs);
|
||||||
BfType* ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0, int numGenericArgs = 0);
|
BfType* ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0, int numGenericArgs = 0);
|
||||||
BfType* ResolveTypeRefAllowUnboundGenerics(BfTypeReference* typeRef, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0, bool resolveGenericParam = true);
|
BfType* ResolveTypeRefAllowUnboundGenerics(BfTypeReference* typeRef, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0, bool resolveGenericParam = true);
|
||||||
BfType* ResolveTypeRef_Type(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0);
|
BfType* ResolveTypeRef_Type(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType, BfResolveTypeRefFlags& resolveFlags);
|
||||||
|
BfType* ResolveTypeRef_Ref(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType, BfResolveTypeRefFlags& resolveFlags);
|
||||||
BfType* ResolveTypeRef(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0);
|
BfType* ResolveTypeRef(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = (BfResolveTypeRefFlags)0);
|
||||||
|
|
||||||
BfType* ResolveTypeDef(BfTypeDef* typeDef, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None);
|
BfType* ResolveTypeDef(BfTypeDef* typeDef, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None);
|
||||||
BfType* ResolveTypeDef(BfTypeDef* typeDef, const BfTypeVector& genericArgs, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None);
|
BfType* ResolveTypeDef(BfTypeDef* typeDef, const BfTypeVector& genericArgs, BfPopulateType populateType = BfPopulateType_Data, BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None);
|
||||||
BfType* ResolveInnerType(BfType* outerType, BfAstNode* typeRef, BfPopulateType populateType = BfPopulateType_Data, bool ignoreErrors = false, int numGenericArgs = 0, BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None);
|
BfType* ResolveInnerType(BfType* outerType, BfAstNode* typeRef, BfPopulateType populateType = BfPopulateType_Data, bool ignoreErrors = false, int numGenericArgs = 0, BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None);
|
||||||
|
|
|
@ -10863,6 +10863,11 @@ void BfModule::GetDelegateTypeRefAttributes(BfDelegateTypeRef* delegateTypeRef,
|
||||||
}
|
}
|
||||||
|
|
||||||
BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags, int numGenericArgs)
|
BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags, int numGenericArgs)
|
||||||
|
{
|
||||||
|
return ResolveTypeRef_Ref(typeRef, populateType, resolveFlags, numGenericArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
BfType* BfModule::ResolveTypeRef_Ref(BfTypeReference* typeRef, BfPopulateType populateType, BfResolveTypeRefFlags& resolveFlags, int numGenericArgs)
|
||||||
{
|
{
|
||||||
//BP_ZONE("BfModule::ResolveTypeRef");
|
//BP_ZONE("BfModule::ResolveTypeRef");
|
||||||
|
|
||||||
|
@ -12769,7 +12774,7 @@ BfTypeInstance* BfModule::GetUnspecializedTypeInstance(BfTypeInstance* typeInst)
|
||||||
return result->ToTypeInstance();
|
return result->ToTypeInstance();
|
||||||
}
|
}
|
||||||
|
|
||||||
BfType* BfModule::ResolveTypeRef_Type(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags)
|
BfType* BfModule::ResolveTypeRef_Type(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType, BfResolveTypeRefFlags& resolveFlags)
|
||||||
{
|
{
|
||||||
if ((genericArgs == NULL) || (genericArgs->size() == 0))
|
if ((genericArgs == NULL) || (genericArgs->size() == 0))
|
||||||
{
|
{
|
||||||
|
@ -12779,7 +12784,7 @@ BfType* BfModule::ResolveTypeRef_Type(BfAstNode* astNode, const BfSizedArray<BfA
|
||||||
typeRef.mNameNode = identifier;
|
typeRef.mNameNode = identifier;
|
||||||
typeRef.mSrcEnd = 0;
|
typeRef.mSrcEnd = 0;
|
||||||
typeRef.mToken = BfToken_None;
|
typeRef.mToken = BfToken_None;
|
||||||
auto type = ResolveTypeRef(&typeRef, populateType, resolveFlags);
|
auto type = ResolveTypeRef_Ref(&typeRef, populateType, resolveFlags, 0);
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12846,10 +12851,15 @@ BfType* BfModule::ResolveTypeRef_Type(BfAstNode* astNode, const BfSizedArray<BfA
|
||||||
typeRef = genericInstanceTypeRef;
|
typeRef = genericInstanceTypeRef;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResolveTypeRef(typeRef, populateType, resolveFlags);
|
return ResolveTypeRef_Ref(typeRef, populateType, resolveFlags, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
BfType* BfModule::ResolveTypeRef(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags)
|
BfType* BfModule::ResolveTypeRef(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags)
|
||||||
|
{
|
||||||
|
return ResolveTypeRef_Ref(astNode, genericArgs, populateType, resolveFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
BfType* BfModule::ResolveTypeRef_Ref(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType, BfResolveTypeRefFlags& resolveFlags)
|
||||||
{
|
{
|
||||||
if (astNode == NULL)
|
if (astNode == NULL)
|
||||||
{
|
{
|
||||||
|
@ -12858,13 +12868,14 @@ BfType* BfModule::ResolveTypeRef(BfAstNode* astNode, const BfSizedArray<BfAstNod
|
||||||
}
|
}
|
||||||
|
|
||||||
if (auto typeRef = BfNodeDynCast<BfTypeReference>(astNode))
|
if (auto typeRef = BfNodeDynCast<BfTypeReference>(astNode))
|
||||||
return ResolveTypeRef(typeRef, populateType, resolveFlags);
|
return ResolveTypeRef_Ref(typeRef, populateType, resolveFlags, 0);
|
||||||
|
|
||||||
if ((resolveFlags & BfResolveTypeRefFlag_AllowImplicitConstExpr) != 0)
|
if ((resolveFlags & BfResolveTypeRefFlag_AllowImplicitConstExpr) != 0)
|
||||||
{
|
{
|
||||||
if (auto expr = BfNodeDynCast<BfExpression>(astNode))
|
if (auto expr = BfNodeDynCast<BfExpression>(astNode))
|
||||||
{
|
{
|
||||||
auto checkType = ResolveTypeRef_Type(astNode, genericArgs, populateType, (BfResolveTypeRefFlags)(resolveFlags | BfResolveTypeRefFlag_IgnoreLookupError));
|
resolveFlags = (BfResolveTypeRefFlags)(resolveFlags | BfResolveTypeRefFlag_IgnoreLookupError);
|
||||||
|
auto checkType = ResolveTypeRef_Type(astNode, genericArgs, populateType, resolveFlags);
|
||||||
if (checkType != NULL)
|
if (checkType != NULL)
|
||||||
return checkType;
|
return checkType;
|
||||||
|
|
||||||
|
@ -15883,7 +15894,9 @@ void BfModule::DoTypeToString(StringImpl& str, BfType* resolvedType, BfTypeNameF
|
||||||
|
|
||||||
if ((typeNameFlags & BfTypeNameFlag_ExtendedInfo) != 0)
|
if ((typeNameFlags & BfTypeNameFlag_ExtendedInfo) != 0)
|
||||||
{
|
{
|
||||||
if (typeInstance->mTypeDef->mIsDelegate)
|
if (typeInstance->mTypeDef->IsGlobalsContainer())
|
||||||
|
str += "static ";
|
||||||
|
else if (typeInstance->mTypeDef->mIsDelegate)
|
||||||
str += "delegate ";
|
str += "delegate ";
|
||||||
else if (typeInstance->mTypeDef->mIsFunction)
|
else if (typeInstance->mTypeDef->mIsFunction)
|
||||||
str += "function ";
|
str += "function ";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue