diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 5d77dae5..0b3d2ef2 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -6130,18 +6130,6 @@ void BfExprEvaluator::ResolveArgValues(BfResolvedArgs& resolvedArgs, BfResolveAr handled = true; } - /*else if (auto castExpr = BfNodeDynCast(argExpr)) - { - if (auto namedTypeRef = BfNodeDynCastExact(castExpr->mTypeRef)) - { - if (namedTypeRef->ToString() == "ExpectedType") - { - resolvedArg.mArgFlags = (BfArgFlags)(resolvedArg.mArgFlags | BfArgFlag_ExpectedTypeCast); - handled = true; - } - } - }*/ - if (!handled) { BfAstNode* checkArgExpr = argExpr; diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index d85f8445..3d80d918 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -4858,8 +4858,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy if (typeInstance->IsInterface()) Fail("Interfaces cannot include fields. Consider making this a property", field->GetRefNode()); } - - int enumCaseEntryIdx = 0; + for (int pass = 0; pass < 2; pass++) { for (auto field : typeDef->mFields) @@ -4889,7 +4888,6 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy { if (typeInstance->IsEnum()) { - fieldInstance->mDataIdx = -(enumCaseEntryIdx++) - 1; resolvedFieldType = typeInstance; BfType* payloadType = NULL; @@ -4983,6 +4981,23 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy } } + // Assign enum indices + int enumCaseEntryIdx = 0; + for (auto field : typeDef->mFields) + { + auto fieldInstance = &typeInstance->mFieldInstances[field->mIdx]; + if (!fieldInstance->mFieldIncluded) + continue; + + if (field->IsEnumCaseEntry()) + { + if (typeInstance->IsEnum()) + { + fieldInstance->mDataIdx = -(enumCaseEntryIdx++) - 1; + } + } + } + if (!resolvedTypeRef->IsIncomplete()) { // We finished resolving ourselves through a re-entry, so we're actually done here