parser: remove switch_statement()
parent
e890f682e2
commit
9c5abd575f
|
@ -104,19 +104,21 @@ fn test_hamming() {
|
||||||
mut input1 := bitfield.new(len)
|
mut input1 := bitfield.new(len)
|
||||||
mut input2 := bitfield.new(len)
|
mut input2 := bitfield.new(len)
|
||||||
for i := 0; i < len; i++ {
|
for i := 0; i < len; i++ {
|
||||||
switch rand.next(4) {
|
match rand.next(4) {
|
||||||
case 0:
|
0, 1 {
|
||||||
case 1:
|
|
||||||
input1.setbit(i)
|
input1.setbit(i)
|
||||||
count++
|
count++
|
||||||
case 2:
|
}
|
||||||
|
2 {
|
||||||
input2.setbit(i)
|
input2.setbit(i)
|
||||||
count++
|
count++
|
||||||
case 3:
|
}
|
||||||
|
3 {
|
||||||
input1.setbit(i)
|
input1.setbit(i)
|
||||||
input2.setbit(i)
|
input2.setbit(i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
assert count == bitfield.hamming(input1, input2)
|
assert count == bitfield.hamming(input1, input2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3361,80 +3361,8 @@ fn (p mut Parser) for_st() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (p mut Parser) switch_statement() {
|
fn (p mut Parser) switch_statement() {
|
||||||
p.warn('`switch` statement has been deprecated, use `match` instead:\n' +
|
p.error('`switch` statement has been removed, use `match` instead:\n' +
|
||||||
'https://vlang.io/docs#match')
|
'https://vlang.io/docs#match')
|
||||||
if p.tok == .key_switch {
|
|
||||||
p.check(.key_switch)
|
|
||||||
} else {
|
|
||||||
p.check(.key_match)
|
|
||||||
}
|
|
||||||
p.cgen.start_tmp()
|
|
||||||
typ := p.bool_expression()
|
|
||||||
is_str := typ == 'string'
|
|
||||||
expr := p.cgen.end_tmp()
|
|
||||||
p.check(.lcbr)
|
|
||||||
mut i := 0
|
|
||||||
mut all_cases_return := true
|
|
||||||
for p.tok == .key_case || p.tok == .key_default || p.peek() == .arrow || p.tok == .key_else {
|
|
||||||
p.returns = false
|
|
||||||
if p.tok == .key_default || p.tok == .key_else {
|
|
||||||
p.genln('else { // default:')
|
|
||||||
if p.tok == .key_default {
|
|
||||||
p.check(.key_default)
|
|
||||||
p.check(.colon)
|
|
||||||
} else {
|
|
||||||
p.check(.key_else)
|
|
||||||
p.check(.arrow)
|
|
||||||
}
|
|
||||||
p.statements()
|
|
||||||
p.returns = all_cases_return && p.returns
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if i > 0 {
|
|
||||||
p.gen('else ')
|
|
||||||
}
|
|
||||||
p.gen('if (')
|
|
||||||
// Multiple checks separated by comma
|
|
||||||
mut got_comma := false
|
|
||||||
for {
|
|
||||||
if got_comma {
|
|
||||||
if is_str {
|
|
||||||
p.gen(')')
|
|
||||||
}
|
|
||||||
p.gen(' || ')
|
|
||||||
}
|
|
||||||
if typ == 'string' {
|
|
||||||
p.gen('string_eq($expr, ')
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.gen('$expr == ')
|
|
||||||
}
|
|
||||||
if p.tok == .key_case || p.tok == .key_default {
|
|
||||||
p.check(p.tok)
|
|
||||||
}
|
|
||||||
p.bool_expression()
|
|
||||||
if p.tok != .comma {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
p.check(.comma)
|
|
||||||
got_comma = true
|
|
||||||
}
|
|
||||||
if p.tok == .colon {
|
|
||||||
p.check(.colon)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
p.check(.arrow)
|
|
||||||
}
|
|
||||||
if is_str {
|
|
||||||
p.gen(')')
|
|
||||||
}
|
|
||||||
p.gen(') {')
|
|
||||||
p.genln('/* case */')
|
|
||||||
p.statements()
|
|
||||||
all_cases_return = all_cases_return && p.returns
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
p.returns = false // only get here when no default, so return is not guaranteed
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns typ if used as expession
|
// Returns typ if used as expession
|
||||||
|
|
Loading…
Reference in New Issue