mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +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()))
|
||||
{
|
||||
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))
|
||||
{
|
||||
autoComplete->AddTopLevelNamespaces(tempTypeDef->mTypeDeclaration->mNameNode);
|
||||
|
@ -4677,10 +4679,14 @@ void BfCompiler::ProcessAutocompleteTempType()
|
|||
autoComplete->SetDefinitionLocation(actualTypeDef->mTypeDeclaration->mNameNode);
|
||||
}
|
||||
else
|
||||
autoComplete->SetDefinitionLocation(nameNode);
|
||||
autoComplete->SetDefinitionLocation(refNode);
|
||||
autoComplete->mDefType = actualTypeDef;
|
||||
|
||||
if (nameNode != NULL)
|
||||
{
|
||||
autoComplete->mInsertStartIdx = nameNode->GetSrcStart();
|
||||
autoComplete->mInsertEndIdx = nameNode->GetSrcEnd();
|
||||
}
|
||||
|
||||
if (autoComplete->mResolveType == BfResolveType_GetResultString)
|
||||
{
|
||||
|
|
|
@ -10012,6 +10012,7 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
|
|||
if ((methodGenericArguments != NULL) && (methodGenericArguments->size() > 0))
|
||||
wantNumGenericArgs = (int)methodGenericArguments->size();
|
||||
BfTypeInstance* resolvedTypeInstance = NULL;
|
||||
BfResolveTypeRefFlags resolveFlags = BfResolveTypeRefFlag_None;
|
||||
if (wantCtor)
|
||||
{
|
||||
resolvedTypeInstance = targetTypeInst;
|
||||
|
@ -10020,7 +10021,7 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
|
|||
{
|
||||
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)
|
||||
resolvedTypeInstance = resolvedType->ToTypeInstance();
|
||||
|
@ -10036,10 +10037,10 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
|
|||
BfType* refType;
|
||||
if (methodGenericArguments != NULL)
|
||||
{
|
||||
refType = mModule->ResolveTypeRef(identifierNode, methodGenericArguments);
|
||||
refType = mModule->ResolveTypeRef_Ref(identifierNode, methodGenericArguments, BfPopulateType_Data, resolveFlags);
|
||||
}
|
||||
else
|
||||
refType = mModule->ResolveTypeRef(identifierNode, NULL);
|
||||
refType = mModule->ResolveTypeRef_Ref(identifierNode, NULL, BfPopulateType_Data, resolveFlags);
|
||||
prevIgnoreErrors.Restore();
|
||||
|
||||
if ((refType != NULL) && (refType->IsPrimitiveType()))
|
||||
|
@ -10104,7 +10105,7 @@ BfTypedValue BfExprEvaluator::MatchMethod(BfAstNode* targetSrc, BfMethodBoundExp
|
|||
|
||||
if (mModule->mCompiler->mResolvePassData != NULL)
|
||||
{
|
||||
if (!BfNodeIsA<BfMemberReferenceExpression>(targetSrc))
|
||||
if ((!BfNodeIsA<BfMemberReferenceExpression>(targetSrc)) && ((resolveFlags & BfResolveTypeRefFlag_FromIndirectSource) == 0))
|
||||
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));
|
||||
if (curCheckType != NULL)
|
||||
{
|
||||
allowPrivate |= IsInnerType(curCheckType->mTypeDef, memberOwner->mTypeDef);
|
||||
if (memberOwner->mTypeDef->IsGlobalsContainer())
|
||||
allowPrivate |= curCheckType->mTypeDef->mNamespace.StartsWith(memberOwner->mTypeDef->mNamespace);
|
||||
}
|
||||
if (allowPrivate)
|
||||
flags = (BfProtectionCheckFlags)(flags | BfProtectionCheckFlag_AllowPrivate | BfProtectionCheckFlag_CheckedPrivate);
|
||||
else
|
||||
|
|
|
@ -1974,10 +1974,13 @@ public:
|
|||
void TypeRefNotFound(BfTypeReference* typeRef, const char* appendName = NULL);
|
||||
bool ValidateTypeWildcard(BfAstNode* typeRef, bool isAttributeRef);
|
||||
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* 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* 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* 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)
|
||||
{
|
||||
return ResolveTypeRef_Ref(typeRef, populateType, resolveFlags, numGenericArgs);
|
||||
}
|
||||
|
||||
BfType* BfModule::ResolveTypeRef_Ref(BfTypeReference* typeRef, BfPopulateType populateType, BfResolveTypeRefFlags& resolveFlags, int numGenericArgs)
|
||||
{
|
||||
//BP_ZONE("BfModule::ResolveTypeRef");
|
||||
|
||||
|
@ -12769,7 +12774,7 @@ BfTypeInstance* BfModule::GetUnspecializedTypeInstance(BfTypeInstance* typeInst)
|
|||
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))
|
||||
{
|
||||
|
@ -12779,7 +12784,7 @@ BfType* BfModule::ResolveTypeRef_Type(BfAstNode* astNode, const BfSizedArray<BfA
|
|||
typeRef.mNameNode = identifier;
|
||||
typeRef.mSrcEnd = 0;
|
||||
typeRef.mToken = BfToken_None;
|
||||
auto type = ResolveTypeRef(&typeRef, populateType, resolveFlags);
|
||||
auto type = ResolveTypeRef_Ref(&typeRef, populateType, resolveFlags, 0);
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
@ -12846,10 +12851,15 @@ BfType* BfModule::ResolveTypeRef_Type(BfAstNode* astNode, const BfSizedArray<BfA
|
|||
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)
|
||||
{
|
||||
return ResolveTypeRef_Ref(astNode, genericArgs, populateType, resolveFlags);
|
||||
}
|
||||
|
||||
BfType* BfModule::ResolveTypeRef_Ref(BfAstNode* astNode, const BfSizedArray<BfAstNode*>* genericArgs, BfPopulateType populateType, BfResolveTypeRefFlags& resolveFlags)
|
||||
{
|
||||
if (astNode == NULL)
|
||||
{
|
||||
|
@ -12858,13 +12868,14 @@ BfType* BfModule::ResolveTypeRef(BfAstNode* astNode, const BfSizedArray<BfAstNod
|
|||
}
|
||||
|
||||
if (auto typeRef = BfNodeDynCast<BfTypeReference>(astNode))
|
||||
return ResolveTypeRef(typeRef, populateType, resolveFlags);
|
||||
return ResolveTypeRef_Ref(typeRef, populateType, resolveFlags, 0);
|
||||
|
||||
if ((resolveFlags & BfResolveTypeRefFlag_AllowImplicitConstExpr) != 0)
|
||||
{
|
||||
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)
|
||||
return checkType;
|
||||
|
||||
|
@ -15883,7 +15894,9 @@ void BfModule::DoTypeToString(StringImpl& str, BfType* resolvedType, BfTypeNameF
|
|||
|
||||
if ((typeNameFlags & BfTypeNameFlag_ExtendedInfo) != 0)
|
||||
{
|
||||
if (typeInstance->mTypeDef->mIsDelegate)
|
||||
if (typeInstance->mTypeDef->IsGlobalsContainer())
|
||||
str += "static ";
|
||||
else if (typeInstance->mTypeDef->mIsDelegate)
|
||||
str += "delegate ";
|
||||
else if (typeInstance->mTypeDef->mIsFunction)
|
||||
str += "function ";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue