diff --git a/lexer/position.go b/lexer/position.go index 9e2470c..d350eb7 100644 --- a/lexer/position.go +++ b/lexer/position.go @@ -64,3 +64,23 @@ func (p *Position) StepLine() { p.Line++ p.Column = 1 } + +// Add adds a relative position considering +// potential new lines +func (p *Position) Add(rel Position) { + if p.Line == 0 { + p.Reset() + } + + switch { + case rel.Line == 0: + // nothing + case rel.Line > 1: + // includes new lines + p.Line += rel.Line - 1 + p.Column = rel.Column + default: + // same line + p.Column += rel.Column - 1 + } +}