// closeBlock : OPEN_ENDBLOCK helperName CLOSE 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) }