directive.go

 1package common
 2
 3type Directive struct {
 4	Name Ident
 5	Args ArgumentList
 6}
 7
 8func ParseDirectives(l *Lexer) DirectiveList {
 9	var directives DirectiveList
10	for l.Peek() == '@' {
11		l.ConsumeToken('@')
12		d := &Directive{}
13		d.Name = l.ConsumeIdentWithLoc()
14		d.Name.Loc.Column--
15		if l.Peek() == '(' {
16			d.Args = ParseArguments(l)
17		}
18		directives = append(directives, d)
19	}
20	return directives
21}
22
23type DirectiveList []*Directive
24
25func (l DirectiveList) Get(name string) *Directive {
26	for _, d := range l {
27		if d.Name.Name == name {
28			return d
29		}
30	}
31	return nil
32}