diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 2306f02b..549a0cdf 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -5074,7 +5074,7 @@ void BfExprEvaluator::ResolveArgValues(BfResolvedArgs& resolvedArgs, BfResolveAr if (auto unaryOpExpr = BfNodeDynCastExact(argExpr)) { - if (unaryOpExpr->mOp == BfUnaryOp_Cascade) + if ((unaryOpExpr->mOp == BfUnaryOp_Cascade) && ((flags & BfResolveArgsFlag_FromIndexer) == 0)) { if ((mBfEvalExprFlags & BfEvalExprFlags_InCascade) != 0) mModule->Fail("Cascade already specified on call target", unaryOpExpr->mOpToken); @@ -19471,7 +19471,7 @@ void BfExprEvaluator::Visit(BfIndexerExpression* indexerExpr) SizedArray argExprs; BfSizedArray sizedArgExprs(indexerExpr->mArguments); BfResolvedArgs argValues(&sizedArgExprs); - ResolveArgValues(argValues, BfResolveArgsFlag_DeferParamEval); + ResolveArgValues(argValues, (BfResolveArgsFlags)(BfResolveArgsFlag_DeferParamEval | BfResolveArgsFlag_FromIndexer)); //exprEvaluator.MatchMethod(elementExpr, NULL, initValue, false, false, "Add", argValues, NULL); mIndexerValues = argValues.mResolvedArgs; diff --git a/IDEHelper/Compiler/BfExprEvaluator.h b/IDEHelper/Compiler/BfExprEvaluator.h index 5f2739ea..e45afd29 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.h +++ b/IDEHelper/Compiler/BfExprEvaluator.h @@ -31,7 +31,8 @@ enum BfResolveArgsFlags BfResolveArgsFlag_DeferParamValues = 2, // We still evaluate but don't generate code until the method is selected (for SkipCall support) BfResolveArgsFlag_DeferParamEval = 4, BfResolveArgsFlag_AllowUnresolvedTypes = 8, - BfResolveArgsFlag_InsideStringInterpolationAlloc = 0x10 + BfResolveArgsFlag_InsideStringInterpolationAlloc = 0x10, + BfResolveArgsFlag_FromIndexer = 0x20 }; enum BfResolveArgFlags