| 24947 | } |
| 24948 | |
| 24949 | func (p *parser) addErrAt(err error, pos position, expected []string) { |
| 24950 | var buf bytes.Buffer |
| 24951 | if p.filename != "" { |
| 24952 | buf.WriteString(p.filename) |
| 24953 | } |
| 24954 | if buf.Len() > 0 { |
| 24955 | buf.WriteString(":") |
| 24956 | } |
| 24957 | buf.WriteString(fmt.Sprintf("%d:%d (%d)", pos.line, pos.col, pos.offset)) |
| 24958 | if len(p.rstack) > 0 { |
| 24959 | if buf.Len() > 0 { |
| 24960 | buf.WriteString(": ") |
| 24961 | } |
| 24962 | rule := p.rstack[len(p.rstack)-1] |
| 24963 | if rule.displayName != "" { |
| 24964 | buf.WriteString("rule " + rule.displayName) |
| 24965 | } else { |
| 24966 | buf.WriteString("rule " + rule.name) |
| 24967 | } |
| 24968 | } |
| 24969 | pe := &parserError{Inner: err, pos: pos, prefix: buf.String(), expected: expected} |
| 24970 | p.errs.add(pe) |
| 24971 | } |
| 24972 | |
| 24973 | func (p *parser) failAt(fail bool, pos position, want string) { |
| 24974 | // process fail if parsing fails and not inverted or parsing succeeds and invert is set |