From c939ec1cf6bae1606473b8221045673c325c365b Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 31 Oct 2021 10:17:41 -0700 Subject: [PATCH] Disallow argument cascade in indexer --- IDEHelper/Compiler/BfExprEvaluator.cpp | 4 ++-- IDEHelper/Compiler/BfExprEvaluator.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) 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