parser: fix `a & b == c` precedence
							parent
							
								
									e957fd6f30
								
							
						
					
					
						commit
						f724a956b3
					
				|  | @ -66,6 +66,15 @@ fn test_str_methods() { | ||||||
| 	assert u64(-1).str() == '18446744073709551615' | 	assert u64(-1).str() == '18446744073709551615' | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | fn test_and() { | ||||||
|  | 	c:=[1,2,3,4,5] | ||||||
|  | 	assert c[0] & 1 != 0 | ||||||
|  | 	assert c[1] & 1 == 0 | ||||||
|  | 	assert c[2] & 1 != 0 | ||||||
|  | 	assert c[3] & 1 == 0 | ||||||
|  | 	assert c[4] & 1 != 0 | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* | /* | ||||||
| fn test_cmp() { | fn test_cmp() { | ||||||
| 	assert 1 ≠ 2 | 	assert 1 ≠ 2 | ||||||
|  |  | ||||||
|  | @ -473,14 +473,22 @@ 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() | ||||||
| 		if (tok_op in [.pipe, .amp, .xor]) && !(is_integer_type(expr_type) && | 		mut open := false | ||||||
| 			is_integer_type(typ)) { | 		if tok_op in [.pipe, .amp, .xor] { | ||||||
|  | 			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') | ||||||
| 			} | 			} | ||||||
|  | 			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 { | ||||||
| 			p.gen(')') | 			p.gen(')') | ||||||
| 		} | 		} | ||||||
|  | 		if open { | ||||||
|  | 			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 { | ||||||
| 			T := p.table.find_type(typ) | 			T := p.table.find_type(typ) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue