diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 80d787ea..08d580f4 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -4248,6 +4248,14 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar mModule->PopulateType(startCheckType, BfPopulateType_BaseType); } + if ((startCheckType != NULL) && (mModule->mContext->mCurTypeState != NULL)) + { + // Don't allow lookups yet + if ((mModule->mContext->mCurTypeState->mResolveKind == BfTypeState::ResolveKind_Attributes) && + (startCheckType == mModule->mContext->mCurTypeState->mTypeInstance)) + return BfTypedValue(); + } + String findName; int varSkipCount = 0; if (fieldName.StartsWith('@')) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 7b6c32ab..eb6a4b11 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -13773,7 +13773,7 @@ BfTypedValue BfModule::ReferenceStaticField(BfFieldInstance* fieldInstance) } BfTypedValue BfModule::GetThis() -{ +{ auto useMethodState = mCurMethodState; while ((useMethodState != NULL) && (useMethodState->mClosureState != NULL) && (useMethodState->mClosureState->mCapturing)) { @@ -13802,33 +13802,6 @@ BfTypedValue BfModule::GetThis() return BfTypedValue(); } -// if (useMethodState->HasNonStaticMixin()) -// { -// auto checkMethodState = useMethodState; -// while (checkMethodState != NULL) -// { -// for (int localIdx = (int)checkMethodState->mLocals.size() - 1; localIdx >= 0; localIdx--) -// { -// auto varDecl = checkMethodState->mLocals[localIdx]; -// if (varDecl->mName == "this") -// { -// varDecl->mReadFromId = useMethodState->GetRootMethodState()->mCurAccessId++; -// if (varDecl->mIsSplat) -// { -// return BfTypedValue(varDecl->mValue, varDecl->mResolvedType, BfTypedValueKind_ThisSplatHead); -// } -// else if ((varDecl->mResolvedType->IsValueType()) && (varDecl->mAddr)) -// { -// return BfTypedValue(varDecl->mAddr, varDecl->mResolvedType, BfTypedValueKind_ThisAddr); -// } -// return BfTypedValue(varDecl->mValue, varDecl->mResolvedType, varDecl->mResolvedType->IsValueType() ? BfTypedValueKind_ThisAddr : BfTypedValueKind_ThisValue); -// } -// } -// -// checkMethodState = checkMethodState->mPrevMethodState; -// } -// } - // Check mixin state for 'this' { auto checkMethodState = mCurMethodState;