parser: add error for `for i := 0; i++; i < ..` (#5850)
							parent
							
								
									82e2b1ec33
								
							
						
					
					
						commit
						fa03f390b3
					
				| 
						 | 
				
			
			@ -35,12 +35,15 @@ fn (mut p Parser) for_stmt() ast.Stmt {
 | 
			
		|||
		if p.peek_tok.kind in [.assign, .decl_assign] {
 | 
			
		||||
			init = p.assign_stmt()
 | 
			
		||||
			has_init = true
 | 
			
		||||
		} else if p.tok.kind != .semicolon {
 | 
			
		||||
		}
 | 
			
		||||
		// allow `for ;; i++ {`
 | 
			
		||||
		// Allow `for ;; i++ {`
 | 
			
		||||
		// Allow `for i = 0; i < ...`
 | 
			
		||||
		p.check(.semicolon)
 | 
			
		||||
		if p.tok.kind != .semicolon {
 | 
			
		||||
			// Disallow `for i := 0; i++; i < ...`
 | 
			
		||||
			if p.tok.kind == .name && p.peek_tok.kind in [.inc, .dec] {
 | 
			
		||||
				p.error('cannot use $p.tok.lit$p.peek_tok.kind as value')
 | 
			
		||||
			}
 | 
			
		||||
			cond = p.expr(0)
 | 
			
		||||
			has_cond = true
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
vlib/v/parser/tests/dec_use_as_value.v:2:16: error: cannot use i-- as value
 | 
			
		||||
    1 | fn main() {
 | 
			
		||||
    2 |     for i := 100; i--; i > 0 {
 | 
			
		||||
      |                   ^
 | 
			
		||||
    3 |     }
 | 
			
		||||
    4 | }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
fn main() {
 | 
			
		||||
	for i := 100; i--; i > 0 {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
vlib/v/parser/tests/inc_use_as_value.v:2:14: error: cannot use i++ as value
 | 
			
		||||
    1 | fn main() {
 | 
			
		||||
    2 |     for i := 0; i++; i < 100 {
 | 
			
		||||
      |                 ^
 | 
			
		||||
    3 |     }
 | 
			
		||||
    4 | }
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
fn main() {
 | 
			
		||||
	for i := 0; i++; i < 100 {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue