From 9d962c5c40da12207433a6e88aa34f11d036af37 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 27 Jan 2023 12:16:54 +0100 Subject: [PATCH] More `track_caller` annotations --- library/src/compute/data.rs | 1 + src/model/scope.rs | 1 + src/syntax/ast.rs | 4 ++-- src/syntax/parser.rs | 1 + src/syntax/span.rs | 2 ++ src/util/fat.rs | 3 +++ 6 files changed, 10 insertions(+), 2 deletions(-) diff --git a/library/src/compute/data.rs b/library/src/compute/data.rs index e3013389b..bf747ec6b 100644 --- a/library/src/compute/data.rs +++ b/library/src/compute/data.rs @@ -216,6 +216,7 @@ fn convert_json(value: serde_json::Value) -> Value { } /// Format the user-facing JSON error message. +#[track_caller] fn format_json_error(error: serde_json::Error) -> String { assert!(error.is_syntax() || error.is_eof()); format!("failed to parse json file: syntax error in line {}", error.line()) diff --git a/src/model/scope.rs b/src/model/scope.rs index 40307cba3..2e3b82445 100644 --- a/src/model/scope.rs +++ b/src/model/scope.rs @@ -83,6 +83,7 @@ impl Scope { } /// Bind a value to a name. + #[track_caller] pub fn define(&mut self, name: impl Into, value: impl Into) { let name = name.into(); diff --git a/src/syntax/ast.rs b/src/syntax/ast.rs index 3b573f7d8..a24b9fa25 100644 --- a/src/syntax/ast.rs +++ b/src/syntax/ast.rs @@ -406,7 +406,7 @@ impl Shorthand { "|->" => '↦', "<->" => '↔', "<=>" => '⇔', - _ => panic!("shorthand is invalid"), + _ => char::default(), } } } @@ -879,7 +879,7 @@ impl Numeric { "em" => Unit::Em, "fr" => Unit::Fr, "%" => Unit::Percent, - _ => panic!("number has invalid suffix"), + _ => Unit::Percent, }; (value, unit) diff --git a/src/syntax/parser.rs b/src/syntax/parser.rs index a046b6858..7eadf94a3 100644 --- a/src/syntax/parser.rs +++ b/src/syntax/parser.rs @@ -1025,6 +1025,7 @@ impl<'s> Parser<'s> { self.current == kind } + #[track_caller] fn assert(&mut self, kind: SyntaxKind) { assert_eq!(self.current, kind); self.eat(); diff --git a/src/syntax/span.rs b/src/syntax/span.rs index 22ada3593..0e4ec215f 100644 --- a/src/syntax/span.rs +++ b/src/syntax/span.rs @@ -38,6 +38,7 @@ impl Span { /// Create a new span from a source id and a unique number. /// /// Panics if the `number` is not contained in `FULL`. + #[track_caller] pub const fn new(id: SourceId, number: u64) -> Self { assert!( Self::FULL.start <= number && number < Self::FULL.end, @@ -53,6 +54,7 @@ impl Span { } /// Pack the components into a span. + #[track_caller] const fn pack(id: SourceId, number: u64) -> Span { let bits = ((id.into_u16() as u64) << Self::BITS) | number; match NonZeroU64::new(bits) { diff --git a/src/util/fat.rs b/src/util/fat.rs index 728f6ae83..d3c9bb200 100644 --- a/src/util/fat.rs +++ b/src/util/fat.rs @@ -14,6 +14,7 @@ use std::mem; /// Must only be called when `T` is a `dyn Trait`. The data address must point /// to a value whose type implements the trait of `T` and the `vtable` must have /// been extracted with [`vtable`]. +#[track_caller] pub unsafe fn from_raw_parts(data: *const (), vtable: *const ()) -> *const T { let fat = FatPointer { data, vtable }; debug_assert_eq!(Layout::new::<*const T>(), Layout::new::()); @@ -26,6 +27,7 @@ pub unsafe fn from_raw_parts(data: *const (), vtable: *const ()) -> * /// Must only be called when `T` is a `dyn Trait`. The data address must point /// to a value whose type implements the trait of `T` and the `vtable` must have /// been extracted with [`vtable`]. +#[track_caller] pub unsafe fn from_raw_parts_mut(data: *mut (), vtable: *const ()) -> *mut T { let fat = FatPointer { data, vtable }; debug_assert_eq!(Layout::new::<*mut T>(), Layout::new::()); @@ -36,6 +38,7 @@ pub unsafe fn from_raw_parts_mut(data: *mut (), vtable: *const ()) -> /// /// # Safety /// Must only be called when `T` is a `dyn Trait`. +#[track_caller] pub unsafe fn vtable(ptr: *const T) -> *const () { debug_assert_eq!(Layout::new::<*const T>(), Layout::new::()); mem::transmute_copy::<*const T, FatPointer>(&ptr).vtable