46 lines
1.2 KiB
Rust
46 lines
1.2 KiB
Rust
// Copyright 2021 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
//! Macros for rutabaga_gfx.
|
|
|
|
#[macro_export]
|
|
macro_rules! checked_range {
|
|
($x:expr; <= $y:expr) => {
|
|
if $x <= $y {
|
|
Ok(())
|
|
} else {
|
|
Err(RutabagaError::CheckedRange {
|
|
field1: (stringify!($x), $x as usize),
|
|
field2: (stringify!($y), $y as usize),
|
|
})
|
|
}
|
|
};
|
|
($x:ident <= $y:ident) => {
|
|
check_range!($x; <= $y)
|
|
};
|
|
}
|
|
|
|
#[macro_export]
|
|
macro_rules! checked_arithmetic {
|
|
($x:ident $op:ident $y:ident $op_name:expr) => {
|
|
$x.$op($y).ok_or_else(|| RutabagaError::CheckedArithmetic {
|
|
field1: (stringify!($x), $x as usize),
|
|
field2: (stringify!($y), $y as usize),
|
|
op: $op_name,
|
|
})
|
|
};
|
|
($x:ident + $y:ident) => {
|
|
checked_arithmetic!($x checked_add $y "+")
|
|
};
|
|
($x:ident - $y:ident) => {
|
|
checked_arithmetic!($x checked_sub $y "-")
|
|
};
|
|
($x:ident * $y:ident) => {
|
|
checked_arithmetic!($x checked_mul $y "*")
|
|
};
|
|
($x:ident / $y:ident) => {
|
|
checked_arithmetic!($x checked_div $y "/")
|
|
};
|
|
}
|