Skip to content

v2.token #

fn FileSet.new #

fn FileSet.new() &FileSet

fn Token.from_string_tinyv #

fn Token.from_string_tinyv(name string) Token

Note: add keyword tokens here

Todo: allow overriding this method in main v compilerthat is why this method was renamed from from_string vfmt off

enum BindingPower #

enum BindingPower {
	lowest
	one
	two
	three
	four
	highest
}

enum Token #

enum Token {
	amp // &
	and // &&
	and_assign // &=
	arrow // <-
	assign // =
	// at // @
	attribute
	bit_not // ~
	char // `A` - rune
	colon // :
	comma // ,
	comment
	dec // --
	decl_assign // :=
	div // /
	div_assign // /=
	dollar // $
	dot // .
	dotdot // ..
	ellipsis // ...
	eof
	eq // ==
	ge // >=
	gt // >
	hash // #
	inc // ++
	key_as
	key_asm
	key_assert
	key_atomic
	key_break
	key_const
	key_continue
	key_defer
	key_dump
	key_else
	key_enum
	key_false
	key_fn
	key_for
	key_global
	key_go
	key_goto
	key_if
	key_import
	key_in
	key_interface
	key_is
	key_isreftype
	key_likely
	key_lock
	key_match
	key_module
	key_mut
	key_nil
	key_none
	key_offsetof
	key_or
	key_pub
	key_return
	key_rlock
	key_select
	key_shared
	key_sizeof
	key_spawn
	key_static
	key_struct
	key_true
	key_type
	key_typeof
	key_union
	key_unlikely
	key_unsafe
	key_volatile
	lcbr // {
	le // <=
	left_shift // <<
	left_shift_assign // >>=
	logical_or // ||
	lpar // (
	lsbr // [
	lt // <
	minus // -
	minus_assign // -=
	mod // %
	mod_assign // %=
	mul // *
	mul_assign // *=
	name // user
	ne // !=
	not // !
	not_in // !in
	not_is // !is
	number // 123
	or_assign // |=
	pipe // |
	plus // +
	plus_assign // +=
	question // ?
	rcbr // }
	right_shift // >>
	right_shift_assign // <<=
	right_shift_unsigned // >>>
	right_shift_unsigned_assign // >>>=
	rpar // )
	rsbr // ]
	semicolon // ;
	str_dollar
	string // 'foo'
	unknown
	xor // ^
	xor_assign // ^=
}

fn (Token) left_binding_power #

fn (t Token) left_binding_power() BindingPower

fn (Token) right_binding_power #

fn (t Token) right_binding_power() BindingPower

Todo: double check / fix this. just use what is needed instead of this

fn (Token) is_prefix #

fn (t Token) is_prefix() bool

fn (Token) is_infix #

fn (t Token) is_infix() bool

fn (Token) is_postfix #

fn (t Token) is_postfix() bool

fn (Token) is_assignment #

fn (t Token) is_assignment() bool

fn (Token) is_overloadable #

fn (t Token) is_overloadable() bool

fn (Token) is_comparison #

fn (t Token) is_comparison() bool

fn (Token) str #

fn (t Token) str() string

Note: probably switch back to map again later.for dev this is easier to see if any tokens are missing.

struct File #

struct File {
pub:
	name string
	base int
	size int
mut:
	line_offsets []int = [0] // start of each line
}

fn (File) add_line #

fn (mut f File) add_line(offset int)

pub fn new_file(filename string) File { return File{ name: filename } }

fn (File) line_count #

fn (f &File) line_count() int

fn (File) line_start #

fn (f &File) line_start(line int) int

fn (File) line #

fn (f &File) line(pos Pos) int

fn (File) pos #

fn (f &File) pos(offset int) Pos

fn (File) position #

fn (f &File) position(pos Pos) Position

fn (File) find_line_and_column #

fn (f &File) find_line_and_column(pos int) (int, int)

return (line, column) when passed pos

fn (File) find_line #

fn (f &File) find_line(pos int) int

return line when passed pos (binary search)

Note: only used for error conditions therefore search speed is not an issue

struct FileSet #

struct FileSet {
mut:
	base int = 1 // reserve 0 for no position
	// files shared []&File
	files []&File
	mu    &sync.Mutex = sync.new_mutex()
}

fn (FileSet) add_file #

fn (mut fs FileSet) add_file(filename string, base_ int, size int) &File

Todo:

fn (FileSet) file #

fn (mut fs FileSet) file(pos Pos) &File

struct Position #

struct Position {
pub:
	filename string
	offset   int
	line     int
	column   int
}

fn (Position) str #

fn (p Position) str() string