parser: remove switch_statement()
							parent
							
								
									e890f682e2
								
							
						
					
					
						commit
						9c5abd575f
					
				|  | @ -104,17 +104,19 @@ fn test_hamming() { | |||
| 	mut input1 := bitfield.new(len) | ||||
| 	mut input2 := bitfield.new(len) | ||||
| 	for i := 0; i < len; i++ { | ||||
| 		switch rand.next(4) { | ||||
| 			case 0: | ||||
| 			case 1: | ||||
| 		match rand.next(4) { | ||||
| 			0, 1 { | ||||
| 				input1.setbit(i) | ||||
| 				count++ | ||||
| 			case 2: | ||||
| 			} | ||||
| 			2 { | ||||
| 				input2.setbit(i) | ||||
| 				count++ | ||||
| 			case 3: | ||||
| 			} | ||||
| 			3 { | ||||
| 				input1.setbit(i) | ||||
| 				input2.setbit(i) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	assert count == bitfield.hamming(input1, input2) | ||||
|  |  | |||
|  | @ -3361,80 +3361,8 @@ fn (p mut Parser) for_st() { | |||
| } | ||||
| 
 | ||||
| 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') | ||||
| 	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
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue