rune/modules/macros/
builtin.rs
1use crate as rune;
4use crate::compile;
5use crate::macros::{quote, MacroContext, TokenStream};
6use crate::parse::Parser;
7use crate::{ContextError, Module};
8
9#[rune::module(::std::macros::builtin)]
11pub fn module() -> Result<Module, ContextError> {
12 let mut builtins = Module::from_meta(self::module_meta)?.with_unique("std::macros::builtin");
13 builtins.macro_meta(file)?;
14 builtins.macro_meta(line)?;
15 Ok(builtins)
16}
17
18#[rune::macro_]
26pub(crate) fn line(
27 cx: &mut MacroContext<'_, '_, '_>,
28 stream: &TokenStream,
29) -> compile::Result<TokenStream> {
30 use crate as rune;
31
32 let mut parser = Parser::from_token_stream(stream, cx.input_span());
33 parser.eof()?;
34
35 let stream = quote!(
36 #[builtin]
37 line!()
38 );
39
40 Ok(stream.into_token_stream(cx)?)
41}
42
43#[rune::macro_]
51pub(crate) fn file(
52 cx: &mut MacroContext<'_, '_, '_>,
53 stream: &TokenStream,
54) -> compile::Result<TokenStream> {
55 use crate as rune;
56
57 let mut parser = Parser::from_token_stream(stream, cx.input_span());
58 parser.eof()?;
59
60 let stream = quote!(
61 #[builtin]
62 file!()
63 );
64
65 Ok(stream.into_token_stream(cx)?)
66}