never type

This commit is contained in:
Intege-rs
2024-12-31 14:28:57 -05:00
parent d2aa7ca9fe
commit f4c294023e
4 changed files with 14 additions and 41 deletions

View File

@@ -1,4 +1,6 @@
#![no_std] #![feature(decl_macro)] #![allow(unused)]
#![no_std] #![feature(decl_macro)]
#![feature(inherent_associated_types)]
#![allow(unused, incomplete_features)]
//
@@ -22,6 +24,7 @@ pub mod fnv1;
pub mod pstruct;
pub mod align;
pub mod never;
//
// Export Preludes:
//
@@ -53,6 +56,7 @@ pub mod prelude {
pub use crate::pstruct::struct_offset;
pub use crate::pod::{Pod,Mut};
pub use crate::align::Align;
pub use crate::never::Never;
}
pub mod public {

9
sub/core/src/never.rs Normal file
View File

@@ -0,0 +1,9 @@
pub type Never = <fn()->! as Ret>::Ret;
trait Ret { type Ret; }
impl<R> Ret for fn() -> R {
type Ret=R;
}

View File

@@ -1,21 +0,0 @@
#[test]
pub fn test_once() {
let mut i = 0;
for _ in 0..3 {
if x::once!() { i+= 1; }
if x::once!() { i+= 1; }
}
assert_eq!(i, 2);
}
#[test]
pub fn test_chain() {
let a = 0x1337;
let b = [None,None,Some(&a)];
let c = [None,Some(&b), None];
assert_eq!(0x1337, x::ptr_chain!(&c as *const _, 0x8, 0x10, 0x0));
}

View File

@@ -1,19 +0,0 @@
#[test]
pub fn test_pattern() {
let pattern = x::pattern!("E8 ( AA | CC | DD ) E8 ");
use x::xpat::Atom::*;
let pattern = &[Save(0), Byte(0xE8),
Case(2), Byte(0xCC), Break(8),
Case(2), Byte(0xAA), Break(5),
Case(2), Byte(0xCC), Break(2), Nop, Byte(0xDD), Byte(0xE8)];
let buffer: &[u8] = &[ 0xE8, 0xDD, 0xE8 ];
let mut scanner = x::Scanner::new(buffer, pattern, ..);
let mut saves = [0usize;8];
assert!(scanner.next(&mut saves));
}