From dc63fea427280ff278bf89a8b9c78df606009910 Mon Sep 17 00:00:00 2001 From: Jade Date: Tue, 11 May 2021 05:06:33 -0700 Subject: Add basic support for array lengths in types This recognizes `let a = [1u8, 2, 3]` as having type `[u8; 3]` instead of the previous `[u8; _]`. Byte strings and `[0u8; 2]` kinds of range array declarations are unsupported as before. I don't know why a bunch of our rustc tests had single quotes inside strings un-escaped by `UPDATE_EXPECT=1 cargo t`, but I don't think it's bad? Maybe something in a nightly? --- crates/hir_ty/src/tests/simple.rs | 80 +++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 40 deletions(-) (limited to 'crates/hir_ty/src/tests/simple.rs') diff --git a/crates/hir_ty/src/tests/simple.rs b/crates/hir_ty/src/tests/simple.rs index 0eefd70f2..8b09f2e4a 100644 --- a/crates/hir_ty/src/tests/simple.rs +++ b/crates/hir_ty/src/tests/simple.rs @@ -11,7 +11,7 @@ fn test() { let x = box 1; let t = (x, box x, box &1, box [1]); t; -} //^ (Box, Box>, Box<&i32>, Box<[i32; _]>) +} //^ (Box, Box>, Box<&i32>, Box<[i32; 1]>) //- /std.rs crate:std #[prelude_import] use prelude::*; @@ -36,7 +36,7 @@ fn test() { let x = box 1; let t = (x, box x, box &1, box [1]); t; -} //^ (Box, Box, {unknown}>, Box<&i32, {unknown}>, Box<[i32; _], {unknown}>) +} //^ (Box, Box, {unknown}>, Box<&i32, {unknown}>, Box<[i32; 1], {unknown}>) //- /std.rs crate:std #[prelude_import] use prelude::*; @@ -1266,55 +1266,55 @@ fn infer_array() { 8..9 'x': &str 17..18 'y': isize 27..292 '{ ... []; }': () - 37..38 'a': [&str; _] - 41..44 '[x]': [&str; _] + 37..38 'a': [&str; 1] + 41..44 '[x]': [&str; 1] 42..43 'x': &str - 54..55 'b': [[&str; _]; _] - 58..64 '[a, a]': [[&str; _]; _] - 59..60 'a': [&str; _] - 62..63 'a': [&str; _] - 74..75 'c': [[[&str; _]; _]; _] - 78..84 '[b, b]': [[[&str; _]; _]; _] - 79..80 'b': [[&str; _]; _] - 82..83 'b': [[&str; _]; _] - 95..96 'd': [isize; _] - 99..111 '[y, 1, 2, 3]': [isize; _] + 54..55 'b': [[&str; 1]; 2] + 58..64 '[a, a]': [[&str; 1]; 2] + 59..60 'a': [&str; 1] + 62..63 'a': [&str; 1] + 74..75 'c': [[[&str; 1]; 2]; 2] + 78..84 '[b, b]': [[[&str; 1]; 2]; 2] + 79..80 'b': [[&str; 1]; 2] + 82..83 'b': [[&str; 1]; 2] + 95..96 'd': [isize; 4] + 99..111 '[y, 1, 2, 3]': [isize; 4] 100..101 'y': isize 103..104 '1': isize 106..107 '2': isize 109..110 '3': isize - 121..122 'd': [isize; _] - 125..137 '[1, y, 2, 3]': [isize; _] + 121..122 'd': [isize; 4] + 125..137 '[1, y, 2, 3]': [isize; 4] 126..127 '1': isize 129..130 'y': isize 132..133 '2': isize 135..136 '3': isize - 147..148 'e': [isize; _] - 151..154 '[y]': [isize; _] + 147..148 'e': [isize; 1] + 151..154 '[y]': [isize; 1] 152..153 'y': isize - 164..165 'f': [[isize; _]; _] - 168..174 '[d, d]': [[isize; _]; _] - 169..170 'd': [isize; _] - 172..173 'd': [isize; _] - 184..185 'g': [[isize; _]; _] - 188..194 '[e, e]': [[isize; _]; _] - 189..190 'e': [isize; _] - 192..193 'e': [isize; _] - 205..206 'h': [i32; _] - 209..215 '[1, 2]': [i32; _] + 164..165 'f': [[isize; 4]; 2] + 168..174 '[d, d]': [[isize; 4]; 2] + 169..170 'd': [isize; 4] + 172..173 'd': [isize; 4] + 184..185 'g': [[isize; 1]; 2] + 188..194 '[e, e]': [[isize; 1]; 2] + 189..190 'e': [isize; 1] + 192..193 'e': [isize; 1] + 205..206 'h': [i32; 2] + 209..215 '[1, 2]': [i32; 2] 210..211 '1': i32 213..214 '2': i32 - 225..226 'i': [&str; _] - 229..239 '["a", "b"]': [&str; _] + 225..226 'i': [&str; 2] + 229..239 '["a", "b"]': [&str; 2] 230..233 '"a"': &str 235..238 '"b"': &str - 250..251 'b': [[&str; _]; _] - 254..264 '[a, ["b"]]': [[&str; _]; _] - 255..256 'a': [&str; _] - 258..263 '["b"]': [&str; _] + 250..251 'b': [[&str; 1]; 2] + 254..264 '[a, ["b"]]': [[&str; 1]; 2] + 255..256 'a': [&str; 1] + 258..263 '["b"]': [&str; 1] 259..262 '"b"': &str 274..275 'x': [u8; _] - 287..289 '[]': [u8; _] + 287..289 '[]': [u8; 0] "#]], ); } @@ -2429,20 +2429,20 @@ fn infer_operator_overload() { 394..395 '1': i32 406..408 'V2': V2([f32; _]) -> V2 406..416 'V2([x, y])': V2 - 409..415 '[x, y]': [f32; _] + 409..415 '[x, y]': [f32; 2] 410..411 'x': f32 413..414 'y': f32 436..519 '{ ... vb; }': () 446..448 'va': V2 451..453 'V2': V2([f32; _]) -> V2 451..465 'V2([0.0, 1.0])': V2 - 454..464 '[0.0, 1.0]': [f32; _] + 454..464 '[0.0, 1.0]': [f32; 2] 455..458 '0.0': f32 460..463 '1.0': f32 475..477 'vb': V2 480..482 'V2': V2([f32; _]) -> V2 480..494 'V2([0.0, 1.0])': V2 - 483..493 '[0.0, 1.0]': [f32; _] + 483..493 '[0.0, 1.0]': [f32; 2] 484..487 '0.0': f32 489..492 '1.0': f32 505..506 'r': V2 @@ -2593,8 +2593,8 @@ fn test() { 658..661 'vec': Vec 664..679 '<[_]>::into_vec': fn into_vec(Box<[i32], Global>) -> Vec 664..691 '<[_]>:...1i32])': Vec - 680..690 'box [1i32]': Box<[i32; _], Global> - 684..690 '[1i32]': [i32; _] + 680..690 'box [1i32]': Box<[i32; 1], Global> + 684..690 '[1i32]': [i32; 1] 685..689 '1i32': i32 "#]], ) -- cgit v1.2.3