From ec0fc8e508fd015ca7f5c803e9e6ab4712f92fd3 Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Sun, 3 Sep 2023 16:32:47 +0000 Subject: [PATCH] lexer: introduce Position.Add() Signed-off-by: Alejandro Mery --- lexer/position.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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 + } +}