1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-14 14:24:10 +02:00

Fixed autocomplete LookupTypeRefOrIdentifier local/type lookup order

This commit is contained in:
Brian Fiete 2022-02-14 10:03:41 -05:00
parent 9bce9f2ce7
commit 63ef0fed7a

View file

@ -384,21 +384,16 @@ BfTypedValue BfAutoComplete::LookupTypeRefOrIdentifier(BfAstNode* node, bool* is
}; };
if (auto typeRef = BfNodeDynCast<BfTypeReference>(node)) if (auto typeRef = BfNodeDynCast<BfTypeReference>(node))
{ {
auto type = mModule->ResolveTypeRef(typeRef);
if (type != NULL)
{
*isStatic = true;
return _FixType(BfTypedValue(type));
}
if (auto namedTypeRef = BfNodeDynCast<BfNamedTypeReference>(typeRef)) if (auto namedTypeRef = BfNodeDynCast<BfNamedTypeReference>(typeRef))
{ {
BfExprEvaluator exprEvaluator(mModule); BfExprEvaluator exprEvaluator(mModule);
auto identifierResult = exprEvaluator.LookupIdentifier(namedTypeRef->mNameNode); auto identifierResult = exprEvaluator.LookupIdentifier(namedTypeRef->mNameNode);
if (identifierResult) if (identifierResult)
return identifierResult; return identifierResult;
return _FixType(exprEvaluator.GetResult()); // We need 'GetResult' to read property values identifierResult = exprEvaluator.GetResult();// We need 'GetResult' to read property values
if (identifierResult.HasType())
return _FixType(identifierResult);
} }
else if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(typeRef)) else if (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(typeRef))
{ {
@ -423,11 +418,21 @@ BfTypedValue BfAutoComplete::LookupTypeRefOrIdentifier(BfAstNode* node, bool* is
auto fieldResult = exprEvaluator.LookupField(qualifiedTypeRef->mRight, leftValue, rightNamedTypeRef->mNameNode->ToString()); auto fieldResult = exprEvaluator.LookupField(qualifiedTypeRef->mRight, leftValue, rightNamedTypeRef->mNameNode->ToString());
if (!fieldResult) // Was property? if (!fieldResult) // Was property?
fieldResult = exprEvaluator.GetResult(); fieldResult = exprEvaluator.GetResult();
*isStatic = false; if (fieldResult.HasType())
return _FixType(fieldResult); {
*isStatic = false;
return _FixType(fieldResult);
}
} }
} }
} }
auto type = mModule->ResolveTypeRef(typeRef);
if (type != NULL)
{
*isStatic = true;
return _FixType(BfTypedValue(type));
}
} }
if (auto identifier = BfNodeDynCast<BfIdentifierNode>(node)) if (auto identifier = BfNodeDynCast<BfIdentifierNode>(node))
{ {