code: def _handle_if_block(tokens, tokens_len, body_index, function_call):
      
      # First handle the if statement and body
      next_index, if_statement = _IF_BLOCK_IF_HANDLER(tokens,
                                                      tokens_len,
                                                      body_index,
                                                      function_call)
      elseif_statements = []
      else_statement = None
      footer = None
  
      # Keep going until we hit endif
      while True:
  
          # Back up a bit until we found out what terminated the if statement
          # body
          assert _RE_END_IF_BODY.match(tokens[next_index].content)
  
          terminator = tokens[next_index].content.lower()
          if terminator == "endif":
              next_index, footer = _handle_function_call(tokens,
                                                         tokens_len,
                                                         next_index)
              break
  
          next_index, header = _handle_function_call(tokens,
                                                     tokens_len,
                                                     next_index)
  
          if terminator == "elseif":
              next_index, elseif_stmnt = _ELSEIF_BLOCK_HANDLER(tokens,
                                                               tokens_len,
                                                               next_index + 1,
                                                               header)
              elseif_statements.append(elseif_stmnt)
          elif terminator == "else":
              next_index, else_statement = _ELSE_BLOCK_HANDLER(tokens,
                                                               tokens_len,
                                                               next_index + 1,
                                                               header)
  
      assert footer is not None
  
      return next_index, IfBlock(if_statement=if_statement,
                                 elseif_statements=elseif_statements,
                                 else_statement=else_statement,
                                 footer=footer,
                                 line=if_statement.line,
                                 col=if_statement.col,
                                 index=body_index)
docs: Special handler for if-blocks.
  
      If blocks are special because they can have multiple bodies and have
      multiple terminating keywords for each of those sub-bodies