diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index d3252482..f798b8cb 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -3322,9 +3322,14 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI } } - if (!thisValue.HasType()) - thisValue = BfTypedValue(mModule->mCurTypeInstance); - BfTypedValue result = LookupField(identifierNode, thisValue, findName, BfLookupFieldFlag_IsImplicitThis); + if (!thisValue.HasType()) + { + thisValue = BfTypedValue(mModule->mCurTypeInstance); + } + + BfTypedValue result; + if (thisValue.HasType()) + result = LookupField(identifierNode, thisValue, findName, BfLookupFieldFlag_IsImplicitThis); if (mPropDef != NULL) { if (forcedIFaceLookup) @@ -8173,7 +8178,7 @@ void BfExprEvaluator::LookupQualifiedStaticField(BfAstNode* nameNode, BfIdentifi BfType* type = NULL; { SetAndRestoreValue prevIgnoreErrors(mModule->mIgnoreErrors, true); - type = mModule->ResolveTypeRef(nameLeft, NULL, BfPopulateType_Data, BfResolveTypeRefFlag_AllowRef); + type = mModule->ResolveTypeRef(nameLeft, NULL, BfPopulateType_Declaration, BfResolveTypeRefFlag_AllowRef); } if (type != NULL) { @@ -16672,7 +16677,9 @@ void BfExprEvaluator::DoMemberReference(BfMemberReferenceExpression* memberRefEx if (!thisValue) { if (auto targetIdentifier = BfNodeDynCast(exprTarget)) - thisValue = BfTypedValue(mModule->ResolveTypeRef(targetIdentifier, NULL)); + { + thisValue = BfTypedValue(mModule->ResolveTypeRef(targetIdentifier, NULL, BfPopulateType_Declaration)); + } } if (!thisValue.HasType()) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index a8247eae..1534ef7a 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -1612,7 +1612,8 @@ bool BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy for (auto baseTypeRef : typeDef->mBaseTypes) { - SetAndRestoreValue prevTypeRef(mContext->mCurTypeState->mCurBaseTypeRef, baseTypeRef); + SetAndRestoreValue prevTypeRef(mContext->mCurTypeState->mCurBaseTypeRef, baseTypeRef); + SetAndRestoreValue prevDefineState(typeInstance->mDefineState, BfTypeDefineState_ResolvingBaseType); SetAndRestoreValue prevIgnoreError(mIgnoreErrors, true); SetAndRestoreValue prevSkipTypeProtectionChecks(typeInstance->mSkipTypeProtectionChecks, true);