Implement length macro in luaify

This commit is contained in:
2025-06-23 07:27:52 +10:00
parent c3fb3407c4
commit c9026123e6
2 changed files with 19 additions and 0 deletions

View File

@@ -796,6 +796,7 @@ fn generate_receiver(f: &mut Formatter, recv: &Receiver) -> Result<()> {
fn generate_macro(f: &mut Formatter, mac: &Macro, cx: Context) -> Result<()> {
match format!("{}", mac.path.require_ident()?).as_str() {
"concat" => generate_macro_concat(f, mac, cx),
"len" => generate_macro_len(f, mac, cx),
"variadic" => generate_macro_variadic(f, mac, cx),
"embed" => generate_macro_embed(f, mac, cx),
"raw" => generate_macro_raw(f, mac, cx),
@@ -815,6 +816,13 @@ fn generate_macro_concat(f: &mut Formatter, mac: &Macro, cx: Context) -> Result<
Ok(())
}
fn generate_macro_len(f: &mut Formatter, mac: &Macro, cx: Context) -> Result<()> {
syn_assert!(cx.is_value(), mac, "len! must be in expression position");
cx.is_ret().then(|| f.write("return"));
f.write("#");
generate_expr(f, &mac.parse_body()?, Context::expr(false))
}
fn generate_macro_variadic(f: &mut Formatter, mac: &Macro, cx: Context) -> Result<()> {
syn_assert!(
cx.is_multi_expr(),