mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
56 lines
1.3 KiB
V
56 lines
1.3 KiB
V
// Copyright (c) 2019-2022 Alexander Medvednikov. All rights reserved.
|
|
// Use of this source code is governed by an MIT license
|
|
// that can be found in the LICENSE file.
|
|
module token
|
|
|
|
pub struct Pos {
|
|
pub:
|
|
len int // length of the literal in the source
|
|
line_nr int // the line number in the source where the token occured
|
|
pos int // the position of the token in scanner text
|
|
col int // the column in the source where the token occured
|
|
pub mut:
|
|
last_line int // the line number where the ast object ends (used by vfmt)
|
|
}
|
|
|
|
[unsafe]
|
|
pub fn (mut p Pos) free() {
|
|
}
|
|
|
|
pub fn (p Pos) line_str() string {
|
|
return '{l: ${p.line_nr + 1:5}, c: ${p.col:3}, p: ${p.pos:5}, ll: ${p.last_line + 1:5}}'
|
|
}
|
|
|
|
pub fn (pos Pos) extend(end Pos) Pos {
|
|
return Pos{
|
|
...pos
|
|
len: end.pos - pos.pos + end.len
|
|
last_line: end.last_line
|
|
}
|
|
}
|
|
|
|
pub fn (pos Pos) extend_with_last_line(end Pos, last_line int) Pos {
|
|
return Pos{
|
|
len: end.pos - pos.pos + end.len
|
|
line_nr: pos.line_nr
|
|
pos: pos.pos
|
|
col: pos.col
|
|
last_line: last_line - 1
|
|
}
|
|
}
|
|
|
|
pub fn (mut pos Pos) update_last_line(last_line int) {
|
|
pos.last_line = last_line - 1
|
|
}
|
|
|
|
[inline]
|
|
pub fn (tok &Token) pos() Pos {
|
|
return Pos{
|
|
len: tok.len
|
|
line_nr: tok.line_nr - 1
|
|
pos: tok.pos
|
|
last_line: tok.line_nr - 1
|
|
col: tok.col - 1
|
|
}
|
|
}
|