1
0
Fork 0
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:
Brian Fiete 2024-10-30 13:31:16 -04:00
parent 2c630a5ba9
commit 6c66d27ff4
5 changed files with 47 additions and 20 deletions

View file

@ -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;
BfIdentifierNode* nameNode; if (refNode == NULL)
nameNode = tempTypeDef->mTypeDeclaration->mNameNode; refNode = tempTypeDef->mTypeDeclaration->mStaticSpecifier;
if (autoComplete->IsAutocompleteNode(refNode))
{
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,15 +4679,19 @@ 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;
autoComplete->mInsertStartIdx = nameNode->GetSrcStart();
autoComplete->mInsertEndIdx = nameNode->GetSrcEnd(); if (nameNode != NULL)
{
autoComplete->mInsertStartIdx = nameNode->GetSrcStart();
autoComplete->mInsertEndIdx = nameNode->GetSrcEnd();
}
if (autoComplete->mResolveType == BfResolveType_GetResultString) if (autoComplete->mResolveType == BfResolveType_GetResultString)
{ {
autoComplete->mResultString = ":"; autoComplete->mResultString = ":";
autoComplete->mResultString += module->TypeToString(typeInst, (BfTypeNameFlags)(BfTypeNameFlag_ExtendedInfo | BfTypeNameFlag_ResolveGenericParamNames)); autoComplete->mResultString += module->TypeToString(typeInst, (BfTypeNameFlags)(BfTypeNameFlag_ExtendedInfo | BfTypeNameFlag_ResolveGenericParamNames));
} }
} }
} }

View file

@ -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);
} }

View file

@ -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

View file

@ -1959,7 +1959,7 @@ public:
void HandleTypeGenericParamRef(BfAstNode* refNode, BfTypeDef* typeDef, int typeGenericParamIdx); void HandleTypeGenericParamRef(BfAstNode* refNode, BfTypeDef* typeDef, int typeGenericParamIdx);
void HandleMethodGenericParamRef(BfAstNode* refNode, BfTypeDef* typeDef, BfMethodDef* methodDef, int typeGenericParamIdx); void HandleMethodGenericParamRef(BfAstNode* refNode, BfTypeDef* typeDef, BfMethodDef* methodDef, int typeGenericParamIdx);
BfType* SafeResolveAliasType(BfTypeAliasType* aliasType); BfType* SafeResolveAliasType(BfTypeAliasType* aliasType);
bool ResolveTypeResult_Validate(BfAstNode* typeRef, BfType* resolvedTypeRef); bool ResolveTypeResult_Validate(BfAstNode* typeRef, BfType* resolvedTypeRef);
BfType* ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTypeRef, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags); BfType* ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTypeRef, BfPopulateType populateType, BfResolveTypeRefFlags resolveFlags);
void ShowAmbiguousTypeError(BfAstNode* refNode, BfTypeDef* typeDef, BfTypeDef* otherTypeDef); void ShowAmbiguousTypeError(BfAstNode* refNode, BfTypeDef* typeDef, BfTypeDef* otherTypeDef);
void ShowGenericArgCountError(BfAstNode* typeRef, int wantedGenericParams); void ShowGenericArgCountError(BfAstNode* typeRef, int wantedGenericParams);
@ -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);

View file

@ -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 ";