checker: more checks for in and !in
							parent
							
								
									0def084932
								
							
						
					
					
						commit
						d697b2848a
					
				|  | @ -399,24 +399,23 @@ pub fn (mut c Checker) infix_expr(mut infix_expr ast.InfixExpr) table.Type { | ||||||
| 				.array { | 				.array { | ||||||
| 					right_sym := c.table.get_type_symbol(right.array_info().elem_type) | 					right_sym := c.table.get_type_symbol(right.array_info().elem_type) | ||||||
| 					if left.kind != right_sym.kind { | 					if left.kind != right_sym.kind { | ||||||
| 						c.error('the data type on the left of `in` does not match the array item type', | 						c.error('the data type on the left of `$infix_expr.op.str()` does not match the array item type', | ||||||
| 							infix_expr.pos) | 						infix_expr.pos) | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 				.map { | 				.map { | ||||||
| 					key_sym := c.table.get_type_symbol(right.map_info().key_type) | 					key_sym := c.table.get_type_symbol(right.map_info().key_type) | ||||||
| 					if left.kind != key_sym.kind { | 					if left.kind != key_sym.kind { | ||||||
| 						c.error('the data type on the left of `in` does not match the map key type', | 						c.error('the data type on the left of `$infix_expr.op.str()` does not match the map key type', infix_expr.pos) | ||||||
| 							infix_expr.pos) |  | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 				.string { | 				.string { | ||||||
| 					if left.kind != .string { | 					if left.kind != .string { | ||||||
| 						c.error('the data type on the left of `in` must be a string', infix_expr.pos) | 						c.error('the data type on the left of `$infix_expr.op.str()` must be a string', infix_expr.pos) | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 				else { | 				else { | ||||||
| 					c.error('`in` can only be used with an array/map/string', infix_expr.pos) | 					c.error('`$infix_expr.op.str()` can only be used with an array/map/string', infix_expr.pos) | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 			return table.bool_type | 			return table.bool_type | ||||||
|  |  | ||||||
|  | @ -54,3 +54,24 @@ vlib/v/checker/tests/in_mismatch_type.v:31:9: error: the data type on the left o | ||||||
|       |            ~~ |       |            ~~ | ||||||
|    32 |         println('all right') |    32 |         println('all right') | ||||||
|    33 |     } |    33 |     } | ||||||
|  | vlib/v/checker/tests/in_mismatch_type.v:34:7: error: the data type on the left of `!in` does not match the array item type | ||||||
|  |    32 |         println('all right') | ||||||
|  |    33 |     } | ||||||
|  |    34 |     if 1 !in a_s { | ||||||
|  |       |          ~~~ | ||||||
|  |    35 |         println('ok') | ||||||
|  |    36 |     } | ||||||
|  | vlib/v/checker/tests/in_mismatch_type.v:37:9: error: the data type on the left of `!in` does not match the array item type  | ||||||
|  |    35 |         println('ok') | ||||||
|  |    36 |     } | ||||||
|  |    37 |     if '1' !in a_i { | ||||||
|  |       |            ~~~ | ||||||
|  |    38 |         println('good') | ||||||
|  |    39 |     } | ||||||
|  | vlib/v/checker/tests/in_mismatch_type.v:41:7: error: the data type on the left of `!in` does not match the map key type | ||||||
|  |    39 |     } | ||||||
|  |    40 | | ||||||
|  |    41 |     if 5 !in m { | ||||||
|  |       |          ~~~ | ||||||
|  |    42 |         println('yay') | ||||||
|  |    43 |     } | ||||||
|  |  | ||||||
|  | @ -31,4 +31,14 @@ fn main() { | ||||||
| 	if '2' in a_i { | 	if '2' in a_i { | ||||||
| 		println('all right') | 		println('all right') | ||||||
| 	} | 	} | ||||||
|  | 	if 1 !in a_s { | ||||||
|  | 		println('ok') | ||||||
|  | 	} | ||||||
|  | 	if '1' !in a_i { | ||||||
|  | 		println('good') | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if 5 !in m { | ||||||
|  | 		println('yay') | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue