mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
v.token,v.parser: use p.tok.kind.precedence(), instead of p.tok.precedence(), since token.Token struct values, are much larger, than just the token.Kind enum values
This commit is contained in:
parent
f9e8a91cd0
commit
66438391d0
@ -453,7 +453,7 @@ pub fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_iden
|
||||
return node
|
||||
}
|
||||
// Infix
|
||||
for precedence < p.tok.precedence() {
|
||||
for precedence < p.tok.kind.precedence() {
|
||||
if p.tok.kind == .dot {
|
||||
// no spaces or line break before dot in map_init
|
||||
if p.inside_map_init && p.tok.pos - p.prev_tok.pos > p.prev_tok.len {
|
||||
@ -567,7 +567,7 @@ fn (mut p Parser) infix_expr(left ast.Expr) ast.Expr {
|
||||
p.or_is_handled = true
|
||||
p.register_auto_import('sync')
|
||||
}
|
||||
precedence := p.tok.precedence()
|
||||
precedence := p.tok.kind.precedence()
|
||||
mut pos := p.tok.pos()
|
||||
p.next()
|
||||
if p.inside_if_cond {
|
||||
|
@ -386,10 +386,6 @@ pub fn (t Token) debug() string {
|
||||
}
|
||||
|
||||
// Representation of highest and lowest precedence
|
||||
/*
|
||||
pub const lowest_prec = 0
|
||||
pub const highest_prec = 8
|
||||
*/
|
||||
pub enum Precedence {
|
||||
lowest
|
||||
cond // OR or AND
|
||||
@ -400,14 +396,15 @@ pub enum Precedence {
|
||||
sum // + - | ^
|
||||
product // * / << >> >>> &
|
||||
// mod // %
|
||||
prefix // -X or !X
|
||||
prefix // -X or !X; TODO: seems unused
|
||||
postfix // ++ or --
|
||||
call // func(X) or foo.method(X)
|
||||
index // array[index], map[key]
|
||||
highest
|
||||
}
|
||||
|
||||
pub fn build_precedences() []Precedence {
|
||||
mut p := []Precedence{len: int(Kind._end_)}
|
||||
mut p := []Precedence{len: int(Kind._end_), init: Precedence.lowest}
|
||||
p[Kind.lsbr] = .index
|
||||
p[Kind.nilsbr] = .index
|
||||
p[Kind.dot] = .call
|
||||
@ -462,12 +459,18 @@ pub fn build_precedences() []Precedence {
|
||||
|
||||
const precedences = build_precedences()
|
||||
|
||||
// precedence returns a tokens precedence if defined, otherwise lowest_prec
|
||||
[inline]
|
||||
// precedence returns a tokens precedence if defined, otherwise 0
|
||||
[direct_array_access; inline]
|
||||
pub fn (tok Token) precedence() int {
|
||||
return int(token.precedences[tok.kind])
|
||||
}
|
||||
|
||||
// precedence returns the precedence of the given token `kind` if defined, otherwise 0
|
||||
[direct_array_access; inline]
|
||||
pub fn (kind Kind) precedence() int {
|
||||
return int(token.precedences[kind])
|
||||
}
|
||||
|
||||
// is_scalar returns true if the token is a scalar
|
||||
[inline]
|
||||
pub fn (tok Token) is_scalar() bool {
|
||||
|
Loading…
Reference in New Issue
Block a user