parser: remove switch_statement()
							parent
							
								
									e890f682e2
								
							
						
					
					
						commit
						9c5abd575f
					
				|  | @ -104,17 +104,19 @@ 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