got macro for declaring SysCall working
This commit is contained in:
parent
01c0c118dd
commit
d88537c24d
|
@ -1,7 +1,31 @@
|
||||||
#[macro_use]
|
macro_rules! syscall {
|
||||||
#[repr(usize)]
|
(@get_last $Variant:ident) => {
|
||||||
declum! {
|
Self::$Variant
|
||||||
SysCall,
|
};
|
||||||
|
(@get_last $Variant:ident, $($VariantTail:ident),*) => {
|
||||||
|
syscall![@get_last $($VariantTail),*]
|
||||||
|
};
|
||||||
|
($($Variant:ident = $Value:expr,)*) => {
|
||||||
|
#[repr(usize)]
|
||||||
|
pub enum SysCall {
|
||||||
|
$($Variant = $Value),*
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<usize> for SysCall {
|
||||||
|
fn from(n: usize) -> Self {
|
||||||
|
match n {
|
||||||
|
$($Value => Self::$Variant),*,
|
||||||
|
_ => syscall![@get_last $($Variant),*]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
($($Variant:ident = $Value:expr),* ) => {
|
||||||
|
syscall!($($Variant = $Value,)* );
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
syscall! {
|
||||||
KILL = 0, // Provide a PID
|
KILL = 0, // Provide a PID
|
||||||
CONSOLE_RESET = 1, // Reset the console
|
CONSOLE_RESET = 1, // Reset the console
|
||||||
CONSOLE_IN = 2, // Console Input
|
CONSOLE_IN = 2, // Console Input
|
||||||
|
@ -34,24 +58,6 @@ declum! {
|
||||||
FILE_WRITE = 31,
|
FILE_WRITE = 31,
|
||||||
|
|
||||||
// Security Syscalls
|
// Security Syscalls
|
||||||
ENCRYPT = 50;
|
ENCRYPT = 50,
|
||||||
EMPTY = u32::MAX as usize
|
EMPTY = 0xFFFF,
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! declum {
|
|
||||||
($nym:ident, $($variant:ident = $value:expr),*; $catch_all:ident = $max:expr) => {
|
|
||||||
pub enum $nym {
|
|
||||||
$($variant = $value),*
|
|
||||||
$catch_all = $max
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<usize> for $nym {
|
|
||||||
fn from(n: usize) -> Self {
|
|
||||||
match n {
|
|
||||||
$($value => Self::$variant),*
|
|
||||||
_ => Self::$catch_all
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue