Macro delimiter

This commit is contained in:
2026-06-03 18:12:30 +02:00
parent 4683a3039e
commit 269e43930f
4 changed files with 40 additions and 10 deletions
+11 -1
View File
@@ -39,11 +39,21 @@ pub enum Pattern {
Path(bool, Path),
}
#[derive(Debug, Clone, Serialize)]
pub enum MacroDelimiter {
Paren,
Bracket,
Brace,
}
#[derive(Debug, Clone, Serialize)]
pub enum Postfix {
FieldAccess(Identifier, Option<Generics>),
Call(Vec<Expression>),
MacroCall(String),
MacroCall {
inner: String,
delimiter: MacroDelimiter,
},
StructCall(Vec<(Identifier, Expression)>),
Assign(String, Box<Expression>),
Index(Expression),
+9 -5
View File
@@ -475,7 +475,9 @@ array = {
macro_inner_v = @{
string_lit
| ("(" ~ macro_inner_v* ~ ")")
| (!("(" | ")") ~ ANY)
| ("[" ~ macro_inner_v* ~ "]")
| ("{" ~ macro_inner_v* ~ "}")
| (!("(" | ")" | "[" | "]" | "{" | "}") ~ ANY)
}
// ------------------------------------------------------
@@ -511,9 +513,9 @@ call_px = {
"(" ~ (expr ~ ("," ~ expr)*)? ~ ")"
}
macro_call_px = {
"!" ~ "(" ~ macro_inner_v* ~ ")"
}
macro_call_paren = { "!" ~ "(" ~ macro_inner_v* ~ ")" }
macro_call_bracket = { "!" ~ "[" ~ macro_inner_v* ~ "]" }
macro_call_brace = { "!" ~ "{" ~ macro_inner_v* ~ "}" }
struct_field_decl = {
identifier ~ ":" ~ expr
@@ -546,7 +548,9 @@ decrement = {
postfix = {
field_px
| call_px
| macro_call_px
| macro_call_paren
| macro_call_bracket
| macro_call_brace
| struct_px
| index_px
| as_px
+12 -1
View File
@@ -155,7 +155,18 @@ impl<'a> TryFrom<pest::iterators::Pair<'a, Rule>> for Postfix {
ast_expr!(Postfix::Index(Expression::try_from(inner.next().unwrap())))
}
Rule::macro_call_px => Ok(Postfix::MacroCall(inner.as_str().to_string())),
Rule::macro_call_paren => Ok(Postfix::MacroCall {
inner: inner.as_str().to_string(),
delimiter: MacroDelimiter::Paren,
}),
Rule::macro_call_bracket => Ok(Postfix::MacroCall {
inner: inner.as_str().to_string(),
delimiter: MacroDelimiter::Bracket,
}),
Rule::macro_call_brace => Ok(Postfix::MacroCall {
inner: inner.as_str().to_string(),
delimiter: MacroDelimiter::Brace,
}),
Rule::as_px => {
ast_expr!(Postfix::As(inner.next().unwrap().try_into()))