code: func (p *parser) parseCloseBlock(block *ast.BlockStatement) {
  	// OPEN_ENDBLOCK
  	tok := p.shift()
  	if tok.Kind != lexer.TokenOpenEndBlock {
  		errExpected(lexer.TokenOpenEndBlock, tok)
  	}
  
  	// helperName
  	endID := p.parseHelperName()
  
  	closeName, ok := ast.HelperNameStr(endID)
  	if !ok {
  		errNode(endID, "Erroneous closing expression")
  	}
  
  	openName := block.Expression.Canonical()
  	if openName != closeName {
  		errNode(endID, fmt.Sprintf("%s doesn't match %s", openName, closeName))
  	}
  
  	// CLOSE
  	tokClose := p.shift()
  	if tokClose.Kind != lexer.TokenClose {
  		errExpected(lexer.TokenClose, tokClose)
  	}
  
  	block.CloseStrip = ast.NewStrip(tok.Val, tokClose.Val)
  }
docs: // closeBlock : OPEN_ENDBLOCK helperName CLOSE