gen: c don't generate x >= 0 check for unsigned ints in range exprs in matches (#6414)
parent
f7aa9cb0c5
commit
ffc8cf3925
|
@ -2671,11 +2671,21 @@ fn (mut g Gen) match_expr(node ast.MatchExpr) {
|
|||
g.expr(expr)
|
||||
g.write(')')
|
||||
} else if expr is ast.RangeExpr {
|
||||
// if type is unsigned and low is 0, check is unneeded
|
||||
mut skip_low := false
|
||||
if expr.low is ast.IntegerLiteral as expr_low {
|
||||
if node.cond_type in [table.u16_type, table.u32_type, table.u64_type] &&
|
||||
expr_low.val == '0' {
|
||||
skip_low = true
|
||||
}
|
||||
}
|
||||
g.write('(')
|
||||
g.write(cond_var)
|
||||
g.write(' >= ')
|
||||
g.expr(expr.low)
|
||||
g.write(' && ')
|
||||
if !skip_low {
|
||||
g.write(cond_var)
|
||||
g.write(' >= ')
|
||||
g.expr(expr.low)
|
||||
g.write(' && ')
|
||||
}
|
||||
g.write(cond_var)
|
||||
g.write(' <= ')
|
||||
g.expr(expr.high)
|
||||
|
|
Loading…
Reference in New Issue