1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Disallow argument cascade in indexer

This commit is contained in:
Brian Fiete 2021-10-31 10:17:41 -07:00
parent e5d70947d9
commit c939ec1cf6
2 changed files with 4 additions and 3 deletions

View file

@ -5074,7 +5074,7 @@ void BfExprEvaluator::ResolveArgValues(BfResolvedArgs& resolvedArgs, BfResolveAr
if (auto unaryOpExpr = BfNodeDynCastExact<BfUnaryOperatorExpression>(argExpr)) if (auto unaryOpExpr = BfNodeDynCastExact<BfUnaryOperatorExpression>(argExpr))
{ {
if (unaryOpExpr->mOp == BfUnaryOp_Cascade) if ((unaryOpExpr->mOp == BfUnaryOp_Cascade) && ((flags & BfResolveArgsFlag_FromIndexer) == 0))
{ {
if ((mBfEvalExprFlags & BfEvalExprFlags_InCascade) != 0) if ((mBfEvalExprFlags & BfEvalExprFlags_InCascade) != 0)
mModule->Fail("Cascade already specified on call target", unaryOpExpr->mOpToken); mModule->Fail("Cascade already specified on call target", unaryOpExpr->mOpToken);
@ -19471,7 +19471,7 @@ void BfExprEvaluator::Visit(BfIndexerExpression* indexerExpr)
SizedArray<BfExpression*, 2> argExprs; SizedArray<BfExpression*, 2> argExprs;
BfSizedArray<BfExpression*> sizedArgExprs(indexerExpr->mArguments); BfSizedArray<BfExpression*> sizedArgExprs(indexerExpr->mArguments);
BfResolvedArgs argValues(&sizedArgExprs); BfResolvedArgs argValues(&sizedArgExprs);
ResolveArgValues(argValues, BfResolveArgsFlag_DeferParamEval); ResolveArgValues(argValues, (BfResolveArgsFlags)(BfResolveArgsFlag_DeferParamEval | BfResolveArgsFlag_FromIndexer));
//exprEvaluator.MatchMethod(elementExpr, NULL, initValue, false, false, "Add", argValues, NULL); //exprEvaluator.MatchMethod(elementExpr, NULL, initValue, false, false, "Add", argValues, NULL);
mIndexerValues = argValues.mResolvedArgs; mIndexerValues = argValues.mResolvedArgs;

View file

@ -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_DeferParamValues = 2, // We still evaluate but don't generate code until the method is selected (for SkipCall support)
BfResolveArgsFlag_DeferParamEval = 4, BfResolveArgsFlag_DeferParamEval = 4,
BfResolveArgsFlag_AllowUnresolvedTypes = 8, BfResolveArgsFlag_AllowUnresolvedTypes = 8,
BfResolveArgsFlag_InsideStringInterpolationAlloc = 0x10 BfResolveArgsFlag_InsideStringInterpolationAlloc = 0x10,
BfResolveArgsFlag_FromIndexer = 0x20
}; };
enum BfResolveArgFlags enum BfResolveArgFlags