module compiler
// `a in [1,2,3]` => `a == 1 || a == 2 || a == 3`
// avoid allocation
// `typ` is the type of `a`
// `ph` is for string_eq()
fn (p mut Parser) in_optimization(typ string, ph int) {
	p.check(.lsbr)
	if p.tok == .rsbr {
		p.error('`x in []` is always false')
	}
	mut i := 0
	// Get `a` expr value (can be a string literal, not a variable)
	expr := p.cgen.cur_line[ph..]
	is_str := typ == 'string'
	// println('!! $p.expr_var.name => $name ($typ)')
	for p.tok != .rsbr && p.tok != .eof {
		if i > 0 {
			if is_str {
				p.gen(' || string_eq($expr, ')
			}
			else {
				p.gen(' || $expr == ')
			}
		}
		if i == 0 {
			if is_str {
				p.cgen.set_placeholder(ph, ' (string_eq(')
				p.gen(', ')
			}
			else {
				p.cgen.set_placeholder(ph, ' (')
				p.gen(' ==')
			}
		}
		p.check_types(p.bool_expression(), typ)
		if is_str {
			p.gen(')')
		}
		if p.tok != .rsbr {
			p.check(.comma)
			p.fspace()
		}
		i++
	}
	p.gen(')')
	p.check(.rsbr)
}