1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Fixed autocomplete in initializer expression over struct pointer

This commit is contained in:
Brian Fiete 2025-02-23 09:11:40 -08:00
parent 4ba8f6b0f6
commit e938ef3eab

View file

@ -12056,6 +12056,8 @@ void BfExprEvaluator::Visit(BfInitializerExpression* initExpr)
if (!localDef->mResolvedType->IsVar())
mModule->AddLocalVariableDef(localDef, true, true);
auto autoComplete = mModule->mCompiler->GetAutoComplete();
for (auto elementExpr : initExpr->mValues)
{
if ((mBfEvalExprFlags & BfEvalExprFlags_Comptime) != 0)
@ -12071,6 +12073,19 @@ void BfExprEvaluator::Visit(BfInitializerExpression* initExpr)
BfTypedValue fieldResult;
if (auto identifierNode = BfNodeDynCast<BfIdentifierNode>(assignExpr->mLeft))
{
if ((autoComplete != NULL) && (autoComplete->IsAutocompleteNode(identifierNode)))
{
auto type = initValue.mType;
if (type->IsPointer())
type = type->GetUnderlyingType();
if (auto typeInst = type->ToTypeInstance())
{
autoComplete->mInsertStartIdx = identifierNode->GetSrcStart();
autoComplete->mInsertEndIdx = identifierNode->GetSrcEnd();
autoComplete->AddTypeMembers(typeInst, false, true, identifierNode->ToString(), typeInst, false, true, false);
}
}
StringT<128> findName;
identifierNode->ToString(findName);
mResultFieldInstance = NULL;
@ -12138,17 +12153,18 @@ void BfExprEvaluator::Visit(BfInitializerExpression* initExpr)
{
BfBlock* block = BfNodeDynCast<BfBlock>(elementExpr);
auto autoComplete = GetAutoComplete();
if ((autoComplete != NULL) && (autoComplete->IsAutocompleteNode(elementExpr)))
{
if (auto identiferNode = BfNodeDynCast<BfIdentifierNode>(elementExpr))
{
auto typeInstance = initValue.mType->ToTypeInstance();
if (typeInstance != NULL)
auto type = initValue.mType;
if (type->IsPointer())
type = type->GetUnderlyingType();
if (auto typeInst = type->ToTypeInstance())
{
String filter;
identiferNode->ToString(filter);
autoComplete->AddTypeMembers(typeInstance, false, true, filter, typeInstance, false, true, false);
autoComplete->AddTypeMembers(typeInst, false, true, filter, typeInst, false, true, false);
}
}
}