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}