Macro delimiter
This commit is contained in:
@@ -172,10 +172,15 @@ impl GenRust for Postfix {
|
||||
cg.add(")");
|
||||
}
|
||||
|
||||
Postfix::MacroCall(inner) => {
|
||||
cg.add("!(");
|
||||
Postfix::MacroCall { inner, delimiter } => {
|
||||
let (open, close) = match delimiter {
|
||||
MacroDelimiter::Paren => ("!(", ")"),
|
||||
MacroDelimiter::Bracket => ("![", "]"),
|
||||
MacroDelimiter::Brace => ("!{", "}"),
|
||||
};
|
||||
cg.add(open);
|
||||
cg.add(inner);
|
||||
cg.add(")");
|
||||
cg.add(close);
|
||||
}
|
||||
|
||||
Postfix::StructCall(fields) => {
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()))
|
||||
|
||||
Reference in New Issue
Block a user