syn_solidity/stmt/
revert.rs

1use crate::{kw, Expr, Spanned};
2use proc_macro2::Span;
3use std::fmt;
4use syn::{
5    parse::{Parse, ParseStream},
6    Result, Token,
7};
8
9/// A revert statement: `revert("error");`.
10///
11/// Solidity Reference:
12/// <https://docs.soliditylang.org/en/latest/grammar.html#a4.SolidityParser.revertStatement>
13#[derive(Clone)]
14pub struct StmtRevert {
15    pub revert_token: kw::revert,
16    pub expr: Expr,
17    // pub list: ArgList, // TODO
18    pub semi_token: Token![;],
19}
20
21impl fmt::Debug for StmtRevert {
22    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23        f.debug_struct("StmtRevert")
24            .field("expr", &self.expr)
25            // .field("list", &self.list)
26            .finish()
27    }
28}
29
30impl Parse for StmtRevert {
31    fn parse(input: ParseStream<'_>) -> Result<Self> {
32        Ok(Self {
33            revert_token: input.parse()?,
34            expr: input.parse()?,
35            // list: input.parse()?,
36            semi_token: input.parse()?,
37        })
38    }
39}
40
41impl Spanned for StmtRevert {
42    fn span(&self) -> Span {
43        let span = self.revert_token.span;
44        span.join(self.semi_token.span).unwrap_or(span)
45    }
46
47    fn set_span(&mut self, span: Span) {
48        self.revert_token.span = span;
49        self.semi_token.span = span;
50    }
51}