aboutsummaryrefslogtreecommitdiff
path: root/crates/test_utils/src
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2021-06-16 08:30:29 +0100
committerAleksey Kladov <[email protected]>2021-06-16 08:30:29 +0100
commitd2c9f3add10a020d6ef7b674b7a722a1d0846f2d (patch)
treea20045a4daf48f3de43b96dc623422e895df9fc2 /crates/test_utils/src
parent2980fd430dbe30d5d8fd28091a8c47b3ffd4008f (diff)
internal: add deref_mut to minicore
Diffstat (limited to 'crates/test_utils/src')
-rw-r--r--crates/test_utils/src/fixture.rs54
-rw-r--r--crates/test_utils/src/minicore.rs8
2 files changed, 43 insertions, 19 deletions
diff --git a/crates/test_utils/src/fixture.rs b/crates/test_utils/src/fixture.rs
index 6ba112de8..313088c37 100644
--- a/crates/test_utils/src/fixture.rs
+++ b/crates/test_utils/src/fixture.rs
@@ -129,8 +129,18 @@ impl Fixture {
129 if line.starts_with("//-") { 129 if line.starts_with("//-") {
130 let meta = Fixture::parse_meta_line(line); 130 let meta = Fixture::parse_meta_line(line);
131 res.push(meta) 131 res.push(meta)
132 } else if let Some(entry) = res.last_mut() { 132 } else {
133 entry.text.push_str(line); 133 if line.starts_with("// ")
134 && line.contains(":")
135 && !line.contains("::")
136 && line.chars().all(|it| !it.is_uppercase())
137 {
138 panic!("looks like invalid metadata line: {:?}", line)
139 }
140
141 if let Some(entry) = res.last_mut() {
142 entry.text.push_str(line);
143 }
134 } 144 }
135 } 145 }
136 146
@@ -276,38 +286,44 @@ impl MiniCore {
276 } 286 }
277 } 287 }
278 288
279 let mut curr_region = ""; 289 let mut active_regions = Vec::new();
280 let mut seen_regions = Vec::new(); 290 let mut seen_regions = Vec::new();
281 for line in lines { 291 for line in lines {
282 let trimmed = line.trim(); 292 let trimmed = line.trim();
283 if let Some(region) = trimmed.strip_prefix("// region:") { 293 if let Some(region) = trimmed.strip_prefix("// region:") {
284 assert_eq!(curr_region, ""); 294 active_regions.push(region);
285 curr_region = region;
286 continue; 295 continue;
287 } 296 }
288 if let Some(region) = trimmed.strip_prefix("// endregion:") { 297 if let Some(region) = trimmed.strip_prefix("// endregion:") {
289 assert_eq!(curr_region, region); 298 let prev = active_regions.pop().unwrap();
290 curr_region = ""; 299 assert_eq!(prev, region);
291 continue; 300 continue;
292 } 301 }
293 seen_regions.push(curr_region);
294 302
295 let mut flag = curr_region; 303 let mut line_region = false;
296 if let Some(idx) = trimmed.find("// :") { 304 if let Some(idx) = trimmed.find("// :") {
297 flag = &trimmed[idx + "// :".len()..]; 305 line_region = true;
306 active_regions.push(&trimmed[idx + "// :".len()..]);
298 } 307 }
299 308
300 let skip = if flag == "" { 309 let mut keep = true;
301 false 310 for &region in &active_regions {
302 } else { 311 assert!(
303 assert!(!flag.starts_with(' '), "region marker starts with a space: {:?}", flag); 312 !region.starts_with(' '),
304 self.assert_valid_flag(flag); 313 "region marker starts with a space: {:?}",
305 !self.has_flag(flag) 314 region
306 }; 315 );
316 self.assert_valid_flag(region);
317 seen_regions.push(region);
318 keep &= self.has_flag(region);
319 }
307 320
308 if !skip { 321 if keep {
309 buf.push_str(line) 322 buf.push_str(line)
310 } 323 }
324 if line_region {
325 active_regions.pop().unwrap();
326 }
311 } 327 }
312 328
313 for flag in &self.valid_flags { 329 for flag in &self.valid_flags {
@@ -315,7 +331,7 @@ impl MiniCore {
315 panic!("unused minicore flag: {:?}", flag); 331 panic!("unused minicore flag: {:?}", flag);
316 } 332 }
317 } 333 }
318 334 format!("{}", buf);
319 buf 335 buf
320 } 336 }
321} 337}
diff --git a/crates/test_utils/src/minicore.rs b/crates/test_utils/src/minicore.rs
index 5ff60178c..8555ff935 100644
--- a/crates/test_utils/src/minicore.rs
+++ b/crates/test_utils/src/minicore.rs
@@ -13,6 +13,7 @@
13//! range: 13//! range:
14//! unsize: sized 14//! unsize: sized
15//! deref: sized 15//! deref: sized
16//! deref_mut: deref
16//! coerce_unsized: unsize 17//! coerce_unsized: unsize
17//! pin: 18//! pin:
18//! future: pin 19//! future: pin
@@ -64,8 +65,15 @@ pub mod ops {
64 type Target: ?Sized; 65 type Target: ?Sized;
65 fn deref(&self) -> &Self::Target; 66 fn deref(&self) -> &Self::Target;
66 } 67 }
68 // region:deref_mut
69 #[lang = "deref_mut"]
70 pub trait DerefMut: Deref {
71 fn deref_mut(&mut self) -> &mut Self::Target;
72 }
73 // endregion:deref_mut
67 } 74 }
68 pub use self::deref::Deref; 75 pub use self::deref::Deref;
76 pub use self::deref::DerefMut; //:deref_mut
69 // endregion:deref 77 // endregion:deref
70 78
71 // region:range 79 // region:range