Function tokenLocation [src]

Prototype

pub fn tokenLocation(self: Ast, start_offset: ByteOffset, token_index: TokenIndex) Location

Parameters

self: Aststart_offset: ByteOffsettoken_index: TokenIndex

Source

pub fn tokenLocation(self: Ast, start_offset: ByteOffset, token_index: TokenIndex) Location { var loc = Location{ .line = 0, .column = 0, .line_start = start_offset, .line_end = self.source.len, }; const token_start = self.tokenStart(token_index); // Scan to by line until we go past the token start while (std.mem.indexOfScalarPos(u8, self.source, loc.line_start, '\n')) |i| { if (i >= token_start) { break; // Went past } loc.line += 1; loc.line_start = i + 1; } const offset = loc.line_start; for (self.source[offset..], 0..) |c, i| { if (i + offset == token_start) { loc.line_end = i + offset; while (loc.line_end < self.source.len and self.source[loc.line_end] != '\n') { loc.line_end += 1; } return loc; } if (c == '\n') { loc.line += 1; loc.column = 0; loc.line_start = i + 1; } else { loc.column += 1; } } return loc; }