Macro delimiter
This commit is contained in:
@@ -172,10 +172,15 @@ impl GenRust for Postfix {
|
|||||||
cg.add(")");
|
cg.add(")");
|
||||||
}
|
}
|
||||||
|
|
||||||
Postfix::MacroCall(inner) => {
|
Postfix::MacroCall { inner, delimiter } => {
|
||||||
cg.add("!(");
|
let (open, close) = match delimiter {
|
||||||
|
MacroDelimiter::Paren => ("!(", ")"),
|
||||||
|
MacroDelimiter::Bracket => ("![", "]"),
|
||||||
|
MacroDelimiter::Brace => ("!{", "}"),
|
||||||
|
};
|
||||||
|
cg.add(open);
|
||||||
cg.add(inner);
|
cg.add(inner);
|
||||||
cg.add(")");
|
cg.add(close);
|
||||||
}
|
}
|
||||||
|
|
||||||
Postfix::StructCall(fields) => {
|
Postfix::StructCall(fields) => {
|
||||||
|
|||||||
@@ -39,11 +39,21 @@ pub enum Pattern {
|
|||||||
Path(bool, Path),
|
Path(bool, Path),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize)]
|
||||||
|
pub enum MacroDelimiter {
|
||||||
|
Paren,
|
||||||
|
Bracket,
|
||||||
|
Brace,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize)]
|
#[derive(Debug, Clone, Serialize)]
|
||||||
pub enum Postfix {
|
pub enum Postfix {
|
||||||
FieldAccess(Identifier, Option<Generics>),
|
FieldAccess(Identifier, Option<Generics>),
|
||||||
Call(Vec<Expression>),
|
Call(Vec<Expression>),
|
||||||
MacroCall(String),
|
MacroCall {
|
||||||
|
inner: String,
|
||||||
|
delimiter: MacroDelimiter,
|
||||||
|
},
|
||||||
StructCall(Vec<(Identifier, Expression)>),
|
StructCall(Vec<(Identifier, Expression)>),
|
||||||
Assign(String, Box<Expression>),
|
Assign(String, Box<Expression>),
|
||||||
Index(Expression),
|
Index(Expression),
|
||||||
|
|||||||
@@ -475,7 +475,9 @@ array = {
|
|||||||
macro_inner_v = @{
|
macro_inner_v = @{
|
||||||
string_lit
|
string_lit
|
||||||
| ("(" ~ macro_inner_v* ~ ")")
|
| ("(" ~ macro_inner_v* ~ ")")
|
||||||
| (!("(" | ")") ~ ANY)
|
| ("[" ~ macro_inner_v* ~ "]")
|
||||||
|
| ("{" ~ macro_inner_v* ~ "}")
|
||||||
|
| (!("(" | ")" | "[" | "]" | "{" | "}") ~ ANY)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------
|
// ------------------------------------------------------
|
||||||
@@ -511,9 +513,9 @@ call_px = {
|
|||||||
"(" ~ (expr ~ ("," ~ expr)*)? ~ ")"
|
"(" ~ (expr ~ ("," ~ expr)*)? ~ ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_call_px = {
|
macro_call_paren = { "!" ~ "(" ~ macro_inner_v* ~ ")" }
|
||||||
"!" ~ "(" ~ macro_inner_v* ~ ")"
|
macro_call_bracket = { "!" ~ "[" ~ macro_inner_v* ~ "]" }
|
||||||
}
|
macro_call_brace = { "!" ~ "{" ~ macro_inner_v* ~ "}" }
|
||||||
|
|
||||||
struct_field_decl = {
|
struct_field_decl = {
|
||||||
identifier ~ ":" ~ expr
|
identifier ~ ":" ~ expr
|
||||||
@@ -546,7 +548,9 @@ decrement = {
|
|||||||
postfix = {
|
postfix = {
|
||||||
field_px
|
field_px
|
||||||
| call_px
|
| call_px
|
||||||
| macro_call_px
|
| macro_call_paren
|
||||||
|
| macro_call_bracket
|
||||||
|
| macro_call_brace
|
||||||
| struct_px
|
| struct_px
|
||||||
| index_px
|
| index_px
|
||||||
| as_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())))
|
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 => {
|
Rule::as_px => {
|
||||||
ast_expr!(Postfix::As(inner.next().unwrap().try_into()))
|
ast_expr!(Postfix::As(inner.next().unwrap().try_into()))
|
||||||
|
|||||||
Reference in New Issue
Block a user