syn_solidity/expr/
unary.rs1use crate::{kw, utils::ParseNested, Expr, Spanned};
2use proc_macro2::Span;
3use std::fmt;
4use syn::{
5 parse::{Parse, ParseStream},
6 Result,
7};
8
9#[derive(Clone, Debug)]
11pub struct ExprUnary {
12 pub op: UnOp,
13 pub expr: Box<Expr>,
14}
15
16impl Parse for ExprUnary {
17 fn parse(input: ParseStream<'_>) -> Result<Self> {
18 Ok(Self { op: input.parse()?, expr: input.parse()? })
19 }
20}
21
22impl Spanned for ExprUnary {
23 fn span(&self) -> Span {
24 let span = self.op.span();
25 span.join(self.expr.span()).unwrap_or(span)
26 }
27
28 fn set_span(&mut self, span: Span) {
29 self.op.set_span(span);
30 self.expr.set_span(span);
31 }
32}
33
34#[derive(Clone)]
36pub struct ExprDelete {
37 pub delete_token: kw::delete,
38 pub expr: Box<Expr>,
39}
40
41impl fmt::Debug for ExprDelete {
42 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
43 f.debug_struct("ExprDelete").field("expr", &self.expr).finish()
44 }
45}
46
47impl Parse for ExprDelete {
48 fn parse(input: ParseStream<'_>) -> Result<Self> {
49 Ok(Self { delete_token: input.parse()?, expr: input.parse()? })
50 }
51}
52
53impl Spanned for ExprDelete {
54 fn span(&self) -> Span {
55 let span = self.delete_token.span;
56 span.join(self.expr.span()).unwrap_or(span)
57 }
58
59 fn set_span(&mut self, span: Span) {
60 self.delete_token.span = span;
61 self.expr.set_span(span);
62 }
63}
64
65#[derive(Clone, Debug)]
67pub struct ExprPostfix {
68 pub expr: Box<Expr>,
69 pub op: PostUnOp,
70}
71
72impl ParseNested for ExprPostfix {
73 fn parse_nested(expr: Box<Expr>, input: ParseStream<'_>) -> Result<Self> {
74 Ok(Self { expr, op: input.parse()? })
75 }
76}
77
78derive_parse!(ExprPostfix);
79
80impl Spanned for ExprPostfix {
81 fn span(&self) -> Span {
82 let span = self.op.span();
83 span.join(self.expr.span()).unwrap_or(span)
84 }
85
86 fn set_span(&mut self, span: Span) {
87 self.op.set_span(span);
88 self.expr.set_span(span);
89 }
90}
91
92op_enum! {
93 pub enum UnOp {
95 Increment(++) peek2,
96 Decrement(--) peek2,
97 Not(!),
98 BitNot(~),
99 Neg(-),
100 }
101}
102
103op_enum! {
104 pub enum PostUnOp {
106 Increment(++) peek2,
107 Decrement(--) peek2,
108 }
109}