Skip to content

Commit

Permalink
Fix incomplete statement await in IfStatement (#315)
Browse files Browse the repository at this point in the history
  • Loading branch information
lahma authored Apr 21, 2021
1 parent 2d69b13 commit 9066957
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions Fluid/Ast/IfStatement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public override ValueTask<Completion> WriteToAsync(TextWriter writer, TextEncode
var task = statement.WriteToAsync(writer, encoder, context);
if (!task.IsCompletedSuccessfully)
{
return Awaited(conditionTask, writer, encoder, context, i + 1);
return Awaited(conditionTask, task, writer, encoder, context, i + 1);
}

var completion = task.Result;
Expand Down Expand Up @@ -91,13 +91,20 @@ public override ValueTask<Completion> WriteToAsync(TextWriter writer, TextEncode
}
else
{
return Awaited(conditionTask, writer, encoder, context, statementStartIndex: 0);
return Awaited(
conditionTask,
incompleteStatementTask: new ValueTask<Completion>(Completion.Normal), // normal won't change processing
writer,
encoder,
context,
statementStartIndex: 0);
}
}


private async ValueTask<Completion> Awaited(
ValueTask<FluidValue> conditionTask,
ValueTask<Completion> incompleteStatementTask,
TextWriter writer,
TextEncoder encoder,
TemplateContext context,
Expand All @@ -107,10 +114,18 @@ private async ValueTask<Completion> Awaited(

if (result)
{
var completion = await incompleteStatementTask;
if (completion != Completion.Normal)
{
// Stop processing the block statements
// We return the completion to flow it to the outer loop
return completion;
}

for (var i = statementStartIndex; i < _statements.Count; i++)
{
var statement = _statements[i];
var completion = await statement.WriteToAsync(writer, encoder, context);
completion = await statement.WriteToAsync(writer, encoder, context);

if (completion != Completion.Normal)
{
Expand Down

0 comments on commit 9066957

Please sign in to comment.