From a1e4ae763cbf824f0d32a706cfe0d9603ce99b02 Mon Sep 17 00:00:00 2001 From: Ryo Nihei Date: Wed, 30 Mar 2022 00:44:17 +0900 Subject: Allow an alternative to have multiple directives --- spec/parser.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'spec/parser.go') diff --git a/spec/parser.go b/spec/parser.go index fd11f83..2d16614 100644 --- a/spec/parser.go +++ b/spec/parser.go @@ -30,9 +30,9 @@ func (n *ProductionNode) isLexical() bool { } type AlternativeNode struct { - Elements []*ElementNode - Directive *DirectiveNode - Pos Position + Elements []*ElementNode + Directives []*DirectiveNode + Pos Position } type ElementNode struct { @@ -375,12 +375,19 @@ func (p *parser) parseAlternative() *AlternativeNode { firstElemPos = elems[0].Pos } - dir := p.parseDirective() + var dirs []*DirectiveNode + for { + dir := p.parseDirective() + if dir == nil { + break + } + dirs = append(dirs, dir) + } return &AlternativeNode{ - Elements: elems, - Directive: dir, - Pos: firstElemPos, + Elements: elems, + Directives: dirs, + Pos: firstElemPos, } } -- cgit v1.2.3