summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--library/src/compute/data.rs1
-rw-r--r--src/model/scope.rs1
-rw-r--r--src/syntax/ast.rs4
-rw-r--r--src/syntax/parser.rs1
-rw-r--r--src/syntax/span.rs2
-rw-r--r--src/util/fat.rs3
6 files changed, 10 insertions, 2 deletions
diff --git a/library/src/compute/data.rs b/library/src/compute/data.rs
index e3013389..bf747ec6 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 40307cba..2e3b8244 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<EcoString>, value: impl Into<Value>) {
let name = name.into();
diff --git a/src/syntax/ast.rs b/src/syntax/ast.rs
index 3b573f7d..a24b9fa2 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 a046b685..7eadf94a 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 22ada359..0e4ec215 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 728f6ae8..d3c9bb20 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<T: ?Sized>(data: *const (), vtable: *const ()) -> *const T {
let fat = FatPointer { data, vtable };
debug_assert_eq!(Layout::new::<*const T>(), Layout::new::<FatPointer>());
@@ -26,6 +27,7 @@ pub unsafe fn from_raw_parts<T: ?Sized>(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<T: ?Sized>(data: *mut (), vtable: *const ()) -> *mut T {
let fat = FatPointer { data, vtable };
debug_assert_eq!(Layout::new::<*mut T>(), Layout::new::<FatPointer>());
@@ -36,6 +38,7 @@ pub unsafe fn from_raw_parts_mut<T: ?Sized>(data: *mut (), vtable: *const ()) ->
///
/// # Safety
/// Must only be called when `T` is a `dyn Trait`.
+#[track_caller]
pub unsafe fn vtable<T: ?Sized>(ptr: *const T) -> *const () {
debug_assert_eq!(Layout::new::<*const T>(), Layout::new::<FatPointer>());
mem::transmute_copy::<*const T, FatPointer>(&ptr).vtable