checker: check array literal modify error (#9243)
							parent
							
								
									f69cef397c
								
							
						
					
					
						commit
						a547e889af
					
				|  | @ -59,7 +59,7 @@ const ( | |||
| // MT19937RNG is generator that uses the Mersenne Twister algorithm with period 2^19937.
 | ||||
| pub struct MT19937RNG { | ||||
| mut: | ||||
| 	state    []u64 = calculate_state(seed.time_seed_array(2), mut []u64{len: mt19937.nn}) | ||||
| 	state    []u64 = []u64{len: mt19937.nn} | ||||
| 	mti      int   = mt19937.nn | ||||
| 	next_rnd u32 | ||||
| 	has_next bool | ||||
|  | @ -83,6 +83,8 @@ pub fn (mut rng MT19937RNG) seed(seed_data []u32) { | |||
| 		eprintln('mt19937 needs only two 32bit integers as seed: [lower, higher]') | ||||
| 		exit(1) | ||||
| 	} | ||||
| 	// calculate 2 times because MT19937RNG init didn't call calculate_state.
 | ||||
| 	rng.state = calculate_state(seed_data, mut rng.state) | ||||
| 	rng.state = calculate_state(seed_data, mut rng.state) | ||||
| 	rng.mti = mt19937.nn | ||||
| 	rng.next_rnd = 0 | ||||
|  |  | |||
|  | @ -1151,6 +1151,7 @@ fn (mut c Checker) fail_if_immutable(expr ast.Expr) (string, token.Position) { | |||
| 			} | ||||
| 		} | ||||
| 		ast.ArrayInit { | ||||
| 			c.error('array literal can not be modified', expr.pos) | ||||
| 			return '', pos | ||||
| 		} | ||||
| 		ast.StructInit { | ||||
|  |  | |||
|  | @ -0,0 +1,12 @@ | |||
| vlib/v/checker/tests/array_literal_modify_err.vv:2:14: error: array literal can not be modified | ||||
|     1 | fn main() { | ||||
|     2 |     mut nums := [1, 2, 3] << 4 | ||||
|       |                 ~~~~~~~~~ | ||||
|     3 |     println(nums) | ||||
|     4 | } | ||||
| vlib/v/checker/tests/array_literal_modify_err.vv:3:2: error: `println` can not print void expressions | ||||
|     1 | fn main() { | ||||
|     2 |     mut nums := [1, 2, 3] << 4 | ||||
|     3 |     println(nums) | ||||
|       |     ~~~~~~~~~~~~~ | ||||
|     4 | } | ||||
|  | @ -0,0 +1,4 @@ | |||
| fn main() { | ||||
| 	mut nums := [1, 2, 3] << 4 | ||||
| 	println(nums) | ||||
| } | ||||
|  | @ -12,7 +12,7 @@ vlib/v/checker/tests/mut_arg.vv:8:3: error: `f` parameter `par` is `mut`, you ne | |||
|       |   ^ | ||||
|     9 | | ||||
|    10 | g(mut [3,4]) | ||||
| vlib/v/checker/tests/mut_arg.vv:10:7: error: `g` parameter `par` is not `mut`, `mut` is not needed` | ||||
| vlib/v/checker/tests/mut_arg.vv:10:7: error: array literal can not be modified | ||||
|     8 | f(a) | ||||
|     9 | | ||||
|    10 | g(mut [3,4]) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue