mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 19:48:20 +02:00
Fixed autocomplete in initializer expression over struct pointer
This commit is contained in:
parent
4ba8f6b0f6
commit
e938ef3eab
1 changed files with 20 additions and 4 deletions
|
@ -12056,6 +12056,8 @@ void BfExprEvaluator::Visit(BfInitializerExpression* initExpr)
|
||||||
if (!localDef->mResolvedType->IsVar())
|
if (!localDef->mResolvedType->IsVar())
|
||||||
mModule->AddLocalVariableDef(localDef, true, true);
|
mModule->AddLocalVariableDef(localDef, true, true);
|
||||||
|
|
||||||
|
auto autoComplete = mModule->mCompiler->GetAutoComplete();
|
||||||
|
|
||||||
for (auto elementExpr : initExpr->mValues)
|
for (auto elementExpr : initExpr->mValues)
|
||||||
{
|
{
|
||||||
if ((mBfEvalExprFlags & BfEvalExprFlags_Comptime) != 0)
|
if ((mBfEvalExprFlags & BfEvalExprFlags_Comptime) != 0)
|
||||||
|
@ -12071,6 +12073,19 @@ void BfExprEvaluator::Visit(BfInitializerExpression* initExpr)
|
||||||
BfTypedValue fieldResult;
|
BfTypedValue fieldResult;
|
||||||
if (auto identifierNode = BfNodeDynCast<BfIdentifierNode>(assignExpr->mLeft))
|
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;
|
StringT<128> findName;
|
||||||
identifierNode->ToString(findName);
|
identifierNode->ToString(findName);
|
||||||
mResultFieldInstance = NULL;
|
mResultFieldInstance = NULL;
|
||||||
|
@ -12138,17 +12153,18 @@ void BfExprEvaluator::Visit(BfInitializerExpression* initExpr)
|
||||||
{
|
{
|
||||||
BfBlock* block = BfNodeDynCast<BfBlock>(elementExpr);
|
BfBlock* block = BfNodeDynCast<BfBlock>(elementExpr);
|
||||||
|
|
||||||
auto autoComplete = GetAutoComplete();
|
|
||||||
if ((autoComplete != NULL) && (autoComplete->IsAutocompleteNode(elementExpr)))
|
if ((autoComplete != NULL) && (autoComplete->IsAutocompleteNode(elementExpr)))
|
||||||
{
|
{
|
||||||
if (auto identiferNode = BfNodeDynCast<BfIdentifierNode>(elementExpr))
|
if (auto identiferNode = BfNodeDynCast<BfIdentifierNode>(elementExpr))
|
||||||
{
|
{
|
||||||
auto typeInstance = initValue.mType->ToTypeInstance();
|
auto type = initValue.mType;
|
||||||
if (typeInstance != NULL)
|
if (type->IsPointer())
|
||||||
|
type = type->GetUnderlyingType();
|
||||||
|
if (auto typeInst = type->ToTypeInstance())
|
||||||
{
|
{
|
||||||
String filter;
|
String filter;
|
||||||
identiferNode->ToString(filter);
|
identiferNode->ToString(filter);
|
||||||
autoComplete->AddTypeMembers(typeInstance, false, true, filter, typeInstance, false, true, false);
|
autoComplete->AddTypeMembers(typeInst, false, true, filter, typeInst, false, true, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue