1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

parser: fix a bug with & and ==

This commit is contained in:
Alexander Medvednikov 2019-11-29 23:18:10 +03:00
parent 4c11eb5ddc
commit 850788c4bb

View File

@ -473,13 +473,15 @@ fn (p mut Parser) expression() string {
p.error('strings only support `+` operator') p.error('strings only support `+` operator')
} }
expr_type := p.term() expr_type := p.term()
mut open := false open := tok_op == .amp && p.tok in [.eq, .ne] // force precedence `(a & b) == c` //false
if tok_op in [.pipe, .amp, .xor] { if tok_op in [.pipe, .amp, .xor] {
if !(is_integer_type(expr_type) && is_integer_type(typ)) { if !(is_integer_type(expr_type) && is_integer_type(typ)) {
p.error('operator ${tok_op.str()} is defined only on integer types') p.error('operator ${tok_op.str()} is defined only on integer types')
} }
//open = true
}
if open {
p.cgen.set_placeholder(ph, '(') p.cgen.set_placeholder(ph, '(')
open = true
} }
p.check_types(expr_type, typ) p.check_types(expr_type, typ)
if (is_str || is_ustr) && tok_op == .plus && !p.is_js { if (is_str || is_ustr) && tok_op == .plus && !p.is_js {
@ -487,7 +489,6 @@ fn (p mut Parser) expression() string {
} }
if open { if open {
p.gen(')') p.gen(')')
} }
// Make sure operators are used with correct types // Make sure operators are used with correct types
if !p.pref.translated && !is_str && !is_ustr && !is_num { if !p.pref.translated && !is_str && !is_ustr && !is_num {