New macro system and stdlib additions

This commit is contained in:
2025-11-21 14:25:03 +01:00
parent b77653f841
commit 603efef28e
230 changed files with 3033 additions and 16640 deletions

View File

@@ -311,7 +311,7 @@ impl NameLike for VName {}
/// cloning the token.
#[macro_export]
macro_rules! sym {
($seg1:tt $( :: $seg:tt)* ; $i:expr) => { async {
($seg1:tt $( :: $seg:tt)* ; $i:expr) => {
$crate::name::Sym::from_tok(
$i.i(&[
$i.i(stringify!($seg1)).await
@@ -319,9 +319,7 @@ macro_rules! sym {
])
.await
).unwrap()
}
};
(@NAME $seg:tt) => {}
}
/// Create a [VName] literal.
@@ -329,12 +327,12 @@ macro_rules! sym {
/// The components are interned much like in [sym].
#[macro_export]
macro_rules! vname {
($seg1:tt $( :: $seg:tt)* ; $i:expr) => { async {
($seg1:tt $( :: $seg:tt)* ; $i:expr) => {
$crate::name::VName::new([
$i.i(stringify!($seg1)).await
$( , $i.i(stringify!($seg)).await )*
]).unwrap()
} };
};
}
/// Create a [VPath] literal.
@@ -342,12 +340,12 @@ macro_rules! vname {
/// The components are interned much like in [sym].
#[macro_export]
macro_rules! vpath {
($seg1:tt $( :: $seg:tt)+ ; $i:expr) => { async {
($seg1:tt $( :: $seg:tt)+ ; $i:expr) => {
$crate::name::VPath(vec![
$i.i(stringify!($seg1)).await
$( , $i.i(stringify!($seg)).await )+
])
} };
};
() => {
$crate::name::VPath(vec![])
}
@@ -367,7 +365,7 @@ mod test {
fn recur() {
spin_on(async {
let i = Interner::new_master();
let myname = vname!(foo::bar; i).await;
let myname = vname!(foo::bar; i);
let _borrowed_slice: &[Tok<String>] = myname.borrow();
let _deref_pathslice: &[Tok<String>] = &myname;
let _as_slice_out: &[Tok<String>] = myname.as_slice();
@@ -379,15 +377,15 @@ mod test {
spin_on(async {
let i = Interner::new_master();
assert_eq!(
sym!(foo::bar::baz; i).await,
sym!(foo::bar::baz; i),
Sym::new([i.i("foo").await, i.i("bar").await, i.i("baz").await], &i).await.unwrap()
);
assert_eq!(
vname!(foo::bar::baz; i).await,
vname!(foo::bar::baz; i),
VName::new([i.i("foo").await, i.i("bar").await, i.i("baz").await]).unwrap()
);
assert_eq!(
vpath!(foo::bar::baz; i).await,
vpath!(foo::bar::baz; i),
VPath::new([i.i("foo").await, i.i("bar").await, i.i("baz").await])
);
})