checker: check error for index of optional (#13785)
							parent
							
								
									21e9b1deb0
								
							
						
					
					
						commit
						d9cca53bd0
					
				| 
						 | 
					@ -3775,6 +3775,9 @@ pub fn (mut c Checker) index_expr(mut node ast.IndexExpr) ast.Type {
 | 
				
			||||||
		&& typ !in [ast.byteptr_type, ast.charptr_type] && !typ.has_flag(.variadic) {
 | 
							&& typ !in [ast.byteptr_type, ast.charptr_type] && !typ.has_flag(.variadic) {
 | 
				
			||||||
		c.error('type `$typ_sym.name` does not support indexing', node.pos)
 | 
							c.error('type `$typ_sym.name` does not support indexing', node.pos)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if typ.has_flag(.optional) {
 | 
				
			||||||
 | 
							c.error('type `?$typ_sym.name` is optional, it does not support indexing', node.left.pos())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	if typ_sym.kind == .string && !typ.is_ptr() && node.is_setter {
 | 
						if typ_sym.kind == .string && !typ.is_ptr() && node.is_setter {
 | 
				
			||||||
		c.error('cannot assign to s[i] since V strings are immutable\n' +
 | 
							c.error('cannot assign to s[i] since V strings are immutable\n' +
 | 
				
			||||||
			'(note, that variables may be mutable but string values are always immutable, like in Go and Java)',
 | 
								'(note, that variables may be mutable but string values are always immutable, like in Go and Java)',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,7 @@
 | 
				
			||||||
 | 
					vlib/v/checker/tests/index_of_optional_err.vv:6:7: error: type `?[]int` is optional, it does not support indexing
 | 
				
			||||||
 | 
					    4 |
 | 
				
			||||||
 | 
					    5 | fn main() {
 | 
				
			||||||
 | 
					    6 |     a := abc()[0] or { 5 }
 | 
				
			||||||
 | 
					      |          ~~~~~
 | 
				
			||||||
 | 
					    7 |     dump(a)
 | 
				
			||||||
 | 
					    8 | }
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					fn abc() ?[]int {
 | 
				
			||||||
 | 
						return [1, 2, 3]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn main() {
 | 
				
			||||||
 | 
						a := abc()[0] or { 5 }
 | 
				
			||||||
 | 
						dump(a)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue