| 151 | } |
| 152 | |
| 153 | func (p *parser) parseGroup() (c *Constraint, err error) { |
| 154 | i := p.next() |
| 155 | switch i.typ { |
| 156 | case tokenOpen: |
| 157 | c, err = p.parseExp() |
| 158 | if err != nil { |
| 159 | return |
| 160 | } |
| 161 | if p.peek().typ == tokenClose { |
| 162 | p.next() |
| 163 | return |
| 164 | } else { |
| 165 | err = newParseExpError(noMatchingClosing, *i) |
| 166 | return |
| 167 | } |
| 168 | } |
| 169 | err = newParseExpError("internal: do not call parseGroup when not on a '('", *i) |
| 170 | return |
| 171 | } |
| 172 | |
| 173 | func (p *parser) parseOrRHS(lhs *Constraint) (c *Constraint, err error) { |
| 174 | var rhs *Constraint |