CompiledHandlebars.Compiler.CodeGeneration.CompilationState.DoTruthyCheck C# (CSharp) Method

DoTruthyCheck() private method

private DoTruthyCheck ( List ifBlock, List elseBlock = null, AST ifType = IfType.If ) : void
ifBlock List
elseBlock List
ifType AST
return void
    internal void DoTruthyCheck(List<StatementSyntax> ifBlock, List<StatementSyntax> elseBlock = null, AST.IfType ifType = IfType.If)
    {
      var contextToCheck = TruthyStack.Pop();
      if (contextToCheck.Symbol.SpecialType==SpecialType.System_Boolean)
      {//Special treatment for boolean literals
        if (contextToCheck.FullPath.Equals("true"))
        {
          resultStack.Peek().AddRange(ifBlock);
          return;
        }
        if (contextToCheck.FullPath.Equals("false"))
        {
          if (elseBlock!=null)
            resultStack.Peek().AddRange(elseBlock);
          return;
        }
      }//No boolean literal to be checked. Procede as usual
      IfStatementSyntax ifStatement;
      if (TruthyStack.Any())
        ifStatement = SyntaxHelper.IfIsTruthy(GetQueryElements(TruthyStack.Peek(), contextToCheck), ifType);
      else
        ifStatement = SyntaxHelper.IfIsTruthy(GetQueryElements(null, contextToCheck), ifType);
      if (ifStatement == null)
      {
        if (elseBlock != null)
          AddTypeError("Unreachable 'else' Block", HandlebarsTypeErrorKind.UnreachableCode);
        resultStack.Peek().AddRange(ifBlock);
      } else
      {
        if (elseBlock != null)
        {
          resultStack.Peek().Add(
            ifStatement.WithStatement(SyntaxFactory.Block(ifBlock)).
            WithElse(SyntaxFactory.ElseClause(SyntaxFactory.Block(elseBlock)))
          );
        } else
        {
          resultStack.Peek().Add(
            ifStatement.WithStatement(SyntaxFactory.Block(ifBlock)));
        }
      }
    }